Merge "Convert -{}- markups in title="" and alt=""."
authorSiebrand <siebrand@wikimedia.org>
Wed, 10 Oct 2012 07:46:26 +0000 (07:46 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 10 Oct 2012 07:46:26 +0000 (07:46 +0000)
1244 files changed:
.gitignore
.jshintignore
.jshintrc
CREDITS
HISTORY
RELEASE-NOTES-1.20
RELEASE-NOTES-1.21 [new file with mode: 0644]
api.php
bin/svnstat [deleted file]
bin/ulimit-tvf.sh [deleted file]
bin/ulimit.sh [deleted file]
bin/ulimit4.sh [changed mode: 0755->0644]
docs/contenthandler.txt [new file with mode: 0644]
docs/doxygen_first_page.php
docs/export-0.8.xsd [new file with mode: 0644]
docs/hooks.txt
docs/language.txt
docs/magicword.txt
docs/memcached.txt
docs/uidesign/design.html
extensions/README
img_auth.php
includes/Action.php
includes/Article.php
includes/AuthPlugin.php
includes/AutoLoader.php
includes/Autopromote.php
includes/BacklinkCache.php
includes/Block.php
includes/CacheHelper.php
includes/Category.php
includes/CategoryViewer.php
includes/Cdb.php
includes/Cdb_PHP.php
includes/ChangeTags.php
includes/ChangesList.php
includes/ConfEditor.php
includes/Cookie.php
includes/CryptRand.php
includes/DataUpdate.php
includes/DefaultSettings.php
includes/DeferredUpdates.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/ExternalStore.php
includes/ExternalStoreDB.php
includes/FeedUtils.php
includes/FileDeleteForm.php
includes/FormOptions.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Hooks.php
includes/Html.php
includes/HttpFunctions.php
includes/IP.php
includes/ImagePage.php
includes/Import.php
includes/Licenses.php
includes/LinkFilter.php
includes/Linker.php
includes/LinksUpdate.php
includes/LocalisationCache.php
includes/Message.php
includes/MessageBlobStore.php
includes/Namespace.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/Pager.php
includes/Preferences.php
includes/ProtectionForm.php
includes/QueryPage.php
includes/RecentChange.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/SiteStats.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/SqlDataUpdate.php
includes/StreamFile.php
includes/StubObject.php
includes/Timestamp.php [new file with mode: 0644]
includes/Title.php
includes/Uri.php [deleted file]
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/WebResponse.php
includes/WebStart.php
includes/Wiki.php
includes/WikiError.php
includes/WikiFilePage.php
includes/WikiPage.php
includes/Xml.php
includes/ZhConversion.php
includes/ZipDirectoryReader.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RawAction.php
includes/actions/RevertAction.php
includes/actions/RollbackAction.php
includes/api/ApiBase.php
includes/api/ApiComparePages.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiFeedContributions.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatNone.php [new file with mode: 0644]
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiParse.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiUndelete.php
includes/cache/HTMLFileCache.php
includes/cache/LinkCache.php
includes/cache/MessageCache.php
includes/conf/Conf.php
includes/content/AbstractContent.php [new file with mode: 0644]
includes/content/Content.php [new file with mode: 0644]
includes/content/ContentHandler.php [new file with mode: 0644]
includes/content/CssContent.php [new file with mode: 0644]
includes/content/JavaScriptContent.php [new file with mode: 0644]
includes/content/MessageContent.php [new file with mode: 0644]
includes/content/TextContent.php [new file with mode: 0644]
includes/content/WikitextContent.php [new file with mode: 0644]
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/dao/IDBAccessObject.php
includes/db/Database.php
includes/db/DatabaseIbm_db2.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/LBFactory_Multi.php
includes/db/LoadBalancer.php
includes/debug/Debug.php
includes/diff/DifferenceEngine.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/filejournal/FileJournal.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filerepo/FileRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/Ibm_db2Updater.php
includes/installer/Installer.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/job/DoubleRedirectJob.php
includes/job/Job.php
includes/job/RefreshLinksJob.php
includes/json/FormatJson.php
includes/libs/CSSJanus.php
includes/libs/GenericArrayObject.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/media/Bitmap.php
includes/media/BitmapMetadataHandler.php
includes/media/Bitmap_ClientOnly.php
includes/media/DjVu.php
includes/media/Exif.php
includes/media/FormatMetadata.php
includes/media/GIFMetadataExtractor.php
includes/media/ImageHandler.php
includes/media/JpegMetadataExtractor.php
includes/media/MediaTransformOutput.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/Tiff.php
includes/media/XMP.php
includes/normal/RandomTest.php
includes/normal/UtfNormal.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/EhcacheBagOStuff.php
includes/objectcache/ObjectCacheSessionHandler.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/CoreTagHooks.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Parser_LinkHooks.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/parser/Preprocessor_HipHop.hphp
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevisionDeleteAbstracts.php
includes/search/SearchEngine.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLog.php
includes/specials/SpecialLonelypages.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostimages.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPopularpages.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUncategorizedpages.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserlogout.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedpages.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/Userlogin.php
includes/tidy.conf
includes/upload/UploadFromChunks.php
includes/upload/UploadFromUrl.php
includes/upload/UploadStash.php
includes/zhtable/Makefile.py
includes/zhtable/toHK.manual
includes/zhtable/toTW.manual
includes/zhtable/tradphrases.manual
index.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageAm.php [deleted file]
languages/classes/LanguageAr.php
languages/classes/LanguageBe.php [deleted file]
languages/classes/LanguageBh.php [deleted file]
languages/classes/LanguageBs.php
languages/classes/LanguageCs.php [deleted file]
languages/classes/LanguageCu.php
languages/classes/LanguageCy.php [deleted file]
languages/classes/LanguageDsb.php
languages/classes/LanguageFi.php
languages/classes/LanguageFr.php [deleted file]
languages/classes/LanguageGa.php
languages/classes/LanguageGan.php
languages/classes/LanguageGd.php [deleted file]
languages/classes/LanguageHe.php
languages/classes/LanguageHsb.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageLn.php [deleted file]
languages/classes/LanguageMo.php [deleted file]
languages/classes/LanguageQqx.php
languages/classes/LanguageRo.php [deleted file]
languages/classes/LanguageSe.php [deleted file]
languages/classes/LanguageShi.php
languages/classes/LanguageSma.php [deleted file]
languages/classes/LanguageSr.php
languages/classes/LanguageTg.php
languages/classes/LanguageUz.php
languages/classes/LanguageWa.php
languages/classes/LanguageZh.php
languages/data/plurals-mediawiki.xml [new file with mode: 0644]
languages/data/plurals.xml [new file with mode: 0644]
languages/messages/MessagesAb.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAk.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAnp.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/MessagesAv.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAy.php
languages/messages/MessagesAz.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBh.php
languages/messages/MessagesBho.php
languages/messages/MessagesBi.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBm.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBrh.php
languages/messages/MessagesBs.php
languages/messages/MessagesBug.php
languages/messages/MessagesCa.php
languages/messages/MessagesCbk_zam.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesChr.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCo.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDe_ch.php
languages/messages/MessagesDe_formal.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesDv.php
languages/messages/MessagesDz.php
languages/messages/MessagesEe.php
languages/messages/MessagesEl.php
languages/messages/MessagesEml.php
languages/messages/MessagesEn.php
languages/messages/MessagesEn_gb.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/MessagesFf.php
languages/messages/MessagesFi.php
languages/messages/MessagesFj.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrc.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGlk.php
languages/messages/MessagesGn.php
languages/messages/MessagesGot.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/MessagesIke_cans.php
languages/messages/MessagesIke_latn.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/MessagesJbo.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKg.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/MessagesKl.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKri.php
languages/messages/MessagesKrj.php
languages/messages/MessagesKs_arab.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKv.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLbe.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.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/MessagesMi.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMo.php
languages/messages/MessagesMr.php
languages/messages/MessagesMrj.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/MessagesNa.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNap.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNew.php
languages/messages/MessagesNiu.php
languages/messages/MessagesNl.php
languages/messages/MessagesNl_informal.php
languages/messages/MessagesNn.php
languages/messages/MessagesNov.php
languages/messages/MessagesNso.php
languages/messages/MessagesNv.php
languages/messages/MessagesOc.php
languages/messages/MessagesOm.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPag.php
languages/messages/MessagesPam.php
languages/messages/MessagesPap.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPdt.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPih.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/MessagesRif.php
languages/messages/MessagesRm.php
languages/messages/MessagesRmy.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesRup.php
languages/messages/MessagesRuq_cyrl.php
languages/messages/MessagesRuq_latn.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.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/MessagesSg.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSm.php
languages/messages/MessagesSma.php
languages/messages/MessagesSn.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/MessagesSs.php
languages/messages/MessagesSt.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/MessagesTi.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTn.php
languages/messages/MessagesTo.php
languages/messages/MessagesTokipona.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesTs.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTy.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUdm.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUg_latn.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/MessagesVls.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/MessagesXh.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZa.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZu.php
languages/utils/CLDRPluralRuleEvaluator.php [new file with mode: 0644]
load.php
maintenance/Doxyfile
maintenance/Maintenance.php
maintenance/archives/patch-archive-ar_content_format.sql [new file with mode: 0644]
maintenance/archives/patch-archive-ar_content_model.sql [new file with mode: 0644]
maintenance/archives/patch-cat_hidden.sql [new file with mode: 0644]
maintenance/archives/patch-drop-ss_admins.sql [new file with mode: 0644]
maintenance/archives/patch-img_sha1.sql
maintenance/archives/patch-page-page_content_model.sql [new file with mode: 0644]
maintenance/archives/patch-rc_moved.sql [new file with mode: 0644]
maintenance/archives/patch-revision-rev_content_format.sql [new file with mode: 0644]
maintenance/archives/patch-revision-rev_content_model.sql [new file with mode: 0644]
maintenance/archives/upgradeLogging.php
maintenance/attachLatest.php
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_HTTP_HTTPS.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/bench_if_switch.php
maintenance/benchmarks/bench_strtr_str_replace.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/benchmarks/bench_wfIsWindows.php
maintenance/benchmarks/benchmarkHooks.php
maintenance/benchmarks/benchmarkPurge.php
maintenance/cdb.php
maintenance/changePassword.php
maintenance/checkAutoLoader.php
maintenance/checkBadRedirects.php
maintenance/checkImages.php
maintenance/checkSyntax.php
maintenance/checkUsernames.php
maintenance/cleanupAncientTables.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupPreferences.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupSpam.php
maintenance/cleanupTable.inc
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/cleanupWatchlist.php
maintenance/clear_interwiki_cache.php
maintenance/clear_stats.php
maintenance/commandLine.inc
maintenance/compareParsers.php
maintenance/convertLinks.php
maintenance/convertUserOptions.php
maintenance/copyFileBackend.php
maintenance/createAndPromote.php
maintenance/cssjanus/cssjanus.py [changed mode: 0755->0644]
maintenance/cssjanus/csslex.py [changed mode: 0755->0644]
maintenance/deleteArchivedFiles.php
maintenance/deleteArchivedRevisions.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteImageMemcached.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/deleteSelfExternals.php
maintenance/dev/includes/router.php
maintenance/dev/install.sh [changed mode: 0755->0644]
maintenance/dev/installmw.sh [changed mode: 0755->0644]
maintenance/dev/installphp.sh [changed mode: 0755->0644]
maintenance/dev/start.sh [changed mode: 0755->0644]
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/dumpTextPass.php
maintenance/dumpUploads.php
maintenance/edit.php
maintenance/eval.php
maintenance/fetchText.php
maintenance/fileOpPerfTest.php
maintenance/findHooks.php
maintenance/fixDoubleRedirects.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/fixSlaveDesync.php
maintenance/fixTimestamps.php
maintenance/fixUserRegistration.php
maintenance/formatInstallDoc.php
maintenance/fuzz-tester.php
maintenance/generateSitemap.php
maintenance/getLagTimes.php
maintenance/getSlaveServer.php
maintenance/getText.php
maintenance/hiphop/make [changed mode: 0755->0644]
maintenance/hiphop/run-server [changed mode: 0755->0644]
maintenance/importDump.php
maintenance/importImages.php
maintenance/importSiteScripts.php
maintenance/importTextFile.php
maintenance/initEditCount.php
maintenance/initStats.php
maintenance/install.php
maintenance/jsparse.php
maintenance/lag.php
maintenance/language/alltrans.php
maintenance/language/checkDupeMessages.php
maintenance/language/checkExtensions.php
maintenance/language/checkLanguage.inc
maintenance/language/checkLanguage.php
maintenance/language/countMessages.php
maintenance/language/date-formats.php
maintenance/language/digit2html.php
maintenance/language/dumpMessages.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerData.php
maintenance/language/langmemusage.php
maintenance/language/languages.inc
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/language/rebuildLanguage.php
maintenance/language/transstat.php
maintenance/language/validate.php
maintenance/language/writeMessagesArray.inc
maintenance/locking/LockServerDaemon.php
maintenance/mcc.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateUserGroup.php
maintenance/minify.php
maintenance/moveBatch.php
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nextJobDB.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/parse.php
maintenance/patchSql.php
maintenance/populateCategory.php
maintenance/populateImageSha1.php
maintenance/populateLogSearch.php
maintenance/populateLogUsertext.php
maintenance/populateParentId.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/preprocessDump.php
maintenance/preprocessorFuzzTest.php
maintenance/protect.php
maintenance/pruneFileCache.php
maintenance/purgeDeletedFiles.php
maintenance/purgeList.php
maintenance/purgeOldText.php
maintenance/purgeParserCache.php
maintenance/purgeStaleMemcachedText.php [deleted file]
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildall.php
maintenance/rebuildmessages.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/refreshImageCount.php [deleted file]
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/renameDbPrefix.php
maintenance/renderDump.php
maintenance/resetUserTokens.php
maintenance/rollbackEdits.php
maintenance/runBatchedQuery.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/showStats.php
maintenance/sql.php
maintenance/sqlite.inc
maintenance/sqlite.php
maintenance/sqlite/archives/patch-cat_hidden.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-drop-ss_admins.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-rc_moved.sql [new file with mode: 0644]
maintenance/stats.php
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/drop_content_model_info.sql [new file with mode: 0644]
maintenance/storage/dumpRev.php
maintenance/storage/fixBug20757.php
maintenance/storage/make-blobs [changed mode: 0755->0644]
maintenance/storage/moveToExternal.php
maintenance/storage/orphanStats.php
maintenance/storage/recompressTracked.php
maintenance/storage/resolveStubs.php
maintenance/storage/storageTypeStats.php
maintenance/storage/testCompression.php
maintenance/storage/trackBlobs.php
maintenance/syncFileBackend.php
maintenance/tables.sql
maintenance/term/MWTerm.php
maintenance/undelete.php
maintenance/update.php
maintenance/updateArticleCount.php
maintenance/updateCollation.php
maintenance/updateDoubleWidthSearch.php
maintenance/updateRestrictions.php
maintenance/updateSearchIndex.php
maintenance/updateSpecialPages.php
maintenance/upgrade1_5.php
maintenance/userOptions.inc
maintenance/userOptions.php
maintenance/waitForSlave.php
mw-config/index.php
mw-config/index.php5
mw-config/overrides.php
opensearch_desc.php
profileinfo.php
redirect.php
resources/Resources.php
resources/jquery.effects/jquery.effects.blind.js
resources/jquery.effects/jquery.effects.bounce.js
resources/jquery.effects/jquery.effects.clip.js
resources/jquery.effects/jquery.effects.core.js
resources/jquery.effects/jquery.effects.drop.js
resources/jquery.effects/jquery.effects.explode.js
resources/jquery.effects/jquery.effects.fade.js
resources/jquery.effects/jquery.effects.fold.js
resources/jquery.effects/jquery.effects.highlight.js
resources/jquery.effects/jquery.effects.pulsate.js
resources/jquery.effects/jquery.effects.scale.js
resources/jquery.effects/jquery.effects.shake.js
resources/jquery.effects/jquery.effects.slide.js
resources/jquery.effects/jquery.effects.transfer.js
resources/jquery.ui/jquery.ui.accordion.js
resources/jquery.ui/jquery.ui.autocomplete.js
resources/jquery.ui/jquery.ui.button.js
resources/jquery.ui/jquery.ui.core.js
resources/jquery.ui/jquery.ui.datepicker.js
resources/jquery.ui/jquery.ui.dialog.js
resources/jquery.ui/jquery.ui.draggable.js
resources/jquery.ui/jquery.ui.droppable.js
resources/jquery.ui/jquery.ui.mouse.js
resources/jquery.ui/jquery.ui.position.js
resources/jquery.ui/jquery.ui.progressbar.js
resources/jquery.ui/jquery.ui.resizable.js
resources/jquery.ui/jquery.ui.selectable.js
resources/jquery.ui/jquery.ui.slider.js
resources/jquery.ui/jquery.ui.sortable.js
resources/jquery.ui/jquery.ui.tabs.js
resources/jquery.ui/jquery.ui.widget.js
resources/jquery.ui/themes/default/jquery.ui.accordion.css
resources/jquery.ui/themes/default/jquery.ui.autocomplete.css
resources/jquery.ui/themes/default/jquery.ui.button.css
resources/jquery.ui/themes/default/jquery.ui.core.css
resources/jquery.ui/themes/default/jquery.ui.datepicker.css
resources/jquery.ui/themes/default/jquery.ui.dialog.css
resources/jquery.ui/themes/default/jquery.ui.progressbar.css
resources/jquery.ui/themes/default/jquery.ui.resizable.css
resources/jquery.ui/themes/default/jquery.ui.selectable.css
resources/jquery.ui/themes/default/jquery.ui.slider.css
resources/jquery.ui/themes/default/jquery.ui.tabs.css
resources/jquery.ui/themes/default/jquery.ui.theme.css
resources/jquery/images/spinner-large.gif [new file with mode: 0644]
resources/jquery/images/spinner.gif
resources/jquery/jquery.arrowSteps.js
resources/jquery/jquery.autoEllipsis.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.expandableField.js
resources/jquery/jquery.highlightText.js
resources/jquery/jquery.jStorage.js [new file with mode: 0644]
resources/jquery/jquery.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.messageBox.css [deleted file]
resources/jquery/jquery.messageBox.js [deleted file]
resources/jquery/jquery.mwExtension.js
resources/jquery/jquery.placeholder.js
resources/jquery/jquery.qunit.completenessTest.js
resources/jquery/jquery.qunit.css
resources/jquery/jquery.qunit.js
resources/jquery/jquery.spinner.css
resources/jquery/jquery.spinner.js
resources/jquery/jquery.suggestions.css
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.action/mediawiki.action.edit.preview.js [new file with mode: 0644]
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.api/mediawiki.api.titleblacklist.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.language/languages/am.js [deleted file]
resources/mediawiki.language/languages/ar.js [deleted file]
resources/mediawiki.language/languages/bat-smg.js [deleted file]
resources/mediawiki.language/languages/be-tarask.js [deleted file]
resources/mediawiki.language/languages/be.js [deleted file]
resources/mediawiki.language/languages/bh.js [deleted file]
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/cs.js [deleted file]
resources/mediawiki.language/languages/cu.js [deleted file]
resources/mediawiki.language/languages/cy.js [deleted file]
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fr.js [deleted file]
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/gd.js [deleted file]
resources/mediawiki.language/languages/gv.js [deleted file]
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hi.js [deleted file]
resources/mediawiki.language/languages/hr.js [deleted file]
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/ksh.js [deleted file]
resources/mediawiki.language/languages/ln.js [deleted file]
resources/mediawiki.language/languages/lt.js [deleted file]
resources/mediawiki.language/languages/lv.js [deleted file]
resources/mediawiki.language/languages/mg.js [deleted file]
resources/mediawiki.language/languages/mk.js [deleted file]
resources/mediawiki.language/languages/mo.js [deleted file]
resources/mediawiki.language/languages/mt.js [deleted file]
resources/mediawiki.language/languages/nso.js [deleted file]
resources/mediawiki.language/languages/pl.js [deleted file]
resources/mediawiki.language/languages/ro.js [deleted file]
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/se.js [deleted file]
resources/mediawiki.language/languages/sh.js [deleted file]
resources/mediawiki.language/languages/sk.js [deleted file]
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/sma.js [deleted file]
resources/mediawiki.language/languages/sr-ec.js [deleted file]
resources/mediawiki.language/languages/sr-el.js [deleted file]
resources/mediawiki.language/languages/sr.js [deleted file]
resources/mediawiki.language/languages/ti.js [deleted file]
resources/mediawiki.language/languages/tl.js [deleted file]
resources/mediawiki.language/languages/uk.js
resources/mediawiki.language/languages/wa.js [deleted file]
resources/mediawiki.language/mediawiki.cldr.js [new file with mode: 0644]
resources/mediawiki.language/mediawiki.language.init.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.libs/CLDRPluralRuleParser.js [new file with mode: 0644]
resources/mediawiki.page/mediawiki.page.watch.ajax.js
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.debug.css
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.feedback.js
resources/mediawiki/mediawiki.htmlform.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.log.js
resources/mediawiki/mediawiki.notification.css [new file with mode: 0644]
resources/mediawiki/mediawiki.notification.js [new file with mode: 0644]
resources/mediawiki/mediawiki.notify.js [new file with mode: 0644]
resources/mediawiki/mediawiki.searchSuggest.js [new file with mode: 0644]
resources/mediawiki/mediawiki.user.js
resources/mediawiki/mediawiki.util.js
serialized/serialize.php
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Simple.php
skins/Standard.php
skins/cologneblue/screen.css
skins/common/commonPrint.css
skins/common/config.js
skins/common/images/add.png
skins/common/images/ajax-loader.gif
skins/common/images/spinner.gif
skins/common/mwsuggest.js [deleted file]
skins/common/preview.js [deleted file]
skins/common/shared.css
skins/common/upload.js
skins/common/wikibits.js
skins/monobook/main.css
skins/vector/screen.css
tests/RunSeleniumTests.php
tests/TestsAutoLoader.php
tests/jasmine/.htaccess [deleted file]
tests/jasmine/SpecRunner.html [deleted file]
tests/jasmine/lib/jasmine-1.0.1/MIT.LICENSE [deleted file]
tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js [deleted file]
tests/jasmine/lib/jasmine-1.0.1/jasmine.css [deleted file]
tests/jasmine/lib/jasmine-1.0.1/jasmine.js [deleted file]
tests/jasmine/spec/mediawiki.jqueryMsg.spec.data.js [deleted file]
tests/jasmine/spec/mediawiki.jqueryMsg.spec.js [deleted file]
tests/jasmine/spec_makers/makeJqueryMsgSpec.php [deleted file]
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/MediaWikiLangTestCase.php
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/bootstrap.php
tests/phpunit/data/media/exif-gps.jpg
tests/phpunit/data/xmp/gps.result.php [new file with mode: 0644]
tests/phpunit/data/xmp/gps.xmp [new file with mode: 0644]
tests/phpunit/includes/ArticleTablesTest.php
tests/phpunit/includes/ArticleTest.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/CdbTest.php
tests/phpunit/includes/ContentHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/CssContentTest.php [new file with mode: 0644]
tests/phpunit/includes/DiffHistoryBlobTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/ExternalStoreTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/FauxResponseTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfAssembleUrlTest.php
tests/phpunit/includes/GlobalFunctions/wfExpandUrlTest.php
tests/phpunit/includes/GlobalFunctions/wfRemoveDotSegmentsTest.php
tests/phpunit/includes/GlobalFunctions/wfUrlencodeTest.php
tests/phpunit/includes/HooksTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/HttpTest.php
tests/phpunit/includes/IPTest.php
tests/phpunit/includes/JavascriptContentTest.php [new file with mode: 0644]
tests/phpunit/includes/JsonTest.php
tests/phpunit/includes/LanguageConverterTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/LocalFileTest.php
tests/phpunit/includes/LocalisationCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/MWFunctionTest.php
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/MockOutputPage.php [deleted file]
tests/phpunit/includes/ParserOptionsTest.php
tests/phpunit/includes/PathRouterTest.php
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/RecentChangeTest.php
tests/phpunit/includes/ResourceLoaderTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php [new file with mode: 0644]
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SampleTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/SeleniumConfigurationTest.php
tests/phpunit/includes/SiteConfigurationTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TestUser.php [new file with mode: 0644]
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TimestampTest.php [new file with mode: 0644]
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UriTest.php [deleted file]
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/WebRequestTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/WikiPageTest_ContentHandlerUseDB.php [new file with mode: 0644]
tests/phpunit/includes/WikitextContentHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/WikitextContentTest.php [new file with mode: 0644]
tests/phpunit/includes/XmlSelectTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/ZipDirectoryReaderTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiPurgeTest.php
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiTestCaseUpload.php
tests/phpunit/includes/api/ApiTestUser.php [deleted file]
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/api/generateRandomImages.php
tests/phpunit/includes/cache/GenderCacheTest.php
tests/phpunit/includes/cache/ProcessCacheLRUTest.php
tests/phpunit/includes/db/DatabaseSQLTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/db/TestORMRowTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/filerepo/FileBackendTest.php
tests/phpunit/includes/filerepo/StoreBatchTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/media/BitmapScalingTest.php
tests/phpunit/includes/media/ExifBitmapTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/ExifTest.php
tests/phpunit/includes/media/FormatMetadataTest.php
tests/phpunit/includes/media/GIFMetadataExtractorTest.php
tests/phpunit/includes/media/GIFTest.php
tests/phpunit/includes/media/JpegMetadataExtractorTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/media/PNGTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/media/TiffTest.php
tests/phpunit/includes/media/XMPTest.php
tests/phpunit/includes/media/XMPValidateTest.php
tests/phpunit/includes/mobile/DeviceDetectionTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/ParserOutputTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/ParserPreloadTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/search/SearchUpdateTest.php
tests/phpunit/includes/specials/SpecialRecentchangesTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/upload/UploadTest.php
tests/phpunit/languages/LanguageAmTest.php
tests/phpunit/languages/LanguageArTest.php
tests/phpunit/languages/LanguageBeTest.php
tests/phpunit/languages/LanguageBe_taraskTest.php
tests/phpunit/languages/LanguageBhTest.php
tests/phpunit/languages/LanguageBsTest.php
tests/phpunit/languages/LanguageCsTest.php
tests/phpunit/languages/LanguageCuTest.php
tests/phpunit/languages/LanguageCyTest.php
tests/phpunit/languages/LanguageDsbTest.php
tests/phpunit/languages/LanguageFrTest.php
tests/phpunit/languages/LanguageGaTest.php
tests/phpunit/languages/LanguageGdTest.php
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageHeTest.php
tests/phpunit/languages/LanguageHiTest.php
tests/phpunit/languages/LanguageHrTest.php
tests/phpunit/languages/LanguageHsbTest.php
tests/phpunit/languages/LanguageHuTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageHyTest.php
tests/phpunit/languages/LanguageKshTest.php
tests/phpunit/languages/LanguageLnTest.php
tests/phpunit/languages/LanguageLtTest.php
tests/phpunit/languages/LanguageLvTest.php
tests/phpunit/languages/LanguageMgTest.php
tests/phpunit/languages/LanguageMkTest.php
tests/phpunit/languages/LanguageMlTest.php
tests/phpunit/languages/LanguageMoTest.php
tests/phpunit/languages/LanguageMtTest.php
tests/phpunit/languages/LanguageNlTest.php
tests/phpunit/languages/LanguageNsoTest.php
tests/phpunit/languages/LanguagePlTest.php
tests/phpunit/languages/LanguageRoTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageSeTest.php
tests/phpunit/languages/LanguageSgsTest.php
tests/phpunit/languages/LanguageShTest.php
tests/phpunit/languages/LanguageSkTest.php
tests/phpunit/languages/LanguageSlTest.php
tests/phpunit/languages/LanguageSmaTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/LanguageTiTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/languages/LanguageTrTest.php
tests/phpunit/languages/LanguageUkTest.php
tests/phpunit/languages/LanguageUzTest.php
tests/phpunit/languages/LanguageWaTest.php
tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php [new file with mode: 0644]
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/backupPrefetchTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/phpunit/maintenance/getSlaveServerTest.php
tests/phpunit/phpunit.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/generateJqueryMsgData.php [new file with mode: 0644]
tests/qunit/data/mediawiki.jqueryMsg.data.js [new file with mode: 0644]
tests/qunit/data/styleTest.css.php
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.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/selenium/installer/MediaWikiButtonsAvailabilityTestCase.php
tests/selenium/installer/MediaWikiDifferentDatabaseAccountTestCase.php
tests/selenium/installer/MediaWikiDifferntDatabasePrefixTestCase.php
tests/selenium/installer/MediaWikiErrorsConnectToDatabasePageTestCase.php
tests/selenium/installer/MediaWikiErrorsNamepageTestCase.php
tests/selenium/installer/MediaWikiHelpFieldHintTestCase.php
tests/selenium/installer/MediaWikiInstallationCommonFunction.php
tests/selenium/installer/MediaWikiInstallerTestSuite.php
tests/selenium/installer/MediaWikiMySQLDataBaseTestCase.php
tests/selenium/installer/MediaWikiMySQLiteDataBaseTestCase.php
tests/selenium/installer/MediaWikiOnAlreadyInstalledTestCase.php
tests/selenium/installer/MediaWikiRestartInstallationTestCase.php
tests/selenium/installer/MediaWikiRightFrameworkLinksTestCase.php
tests/selenium/installer/MediaWikiUpgradeExistingDatabaseTestCase.php
tests/selenium/installer/MediaWikiUserInterfaceTestCase.php
tests/selenium/suites/MediawikiCoreSmokeTestCase.php
tests/selenium/suites/MyContributionsTestCase.php
tests/selenium/suites/MyWatchListTestCase.php
tests/testHelpers.inc
thumb.php
thumb_handler.php

index e057d36..0be75c5 100644 (file)
@@ -13,7 +13,7 @@ nbproject*
 project.index
 
 # MediaWiki install & usage
-cache/*.cdb
+cache
 images/[0-9a-f]
 images/archive
 images/deleted
@@ -32,8 +32,11 @@ StartProfiler.php
 # Operating systems
 ## Mac OS X
 .DS_Store
+## Windows
+Thumbs.db
 
 # Misc
+.buildpath
 .classpath
 .idea
 .metadata*
index 9534f97..026eaaa 100644 (file)
@@ -8,6 +8,7 @@ resources/jquery/jquery.form.js
 resources/jquery/jquery.hoverIntent.js
 resources/jquery/jquery.js
 resources/jquery/jquery.json.js
+resources/jquery/jquery.jStorage.js
 resources/jquery/jquery.mockjax.js
 resources/jquery/jquery.qunit.js
 resources/jquery/jquery.validate.js
@@ -15,6 +16,6 @@ resources/jquery/jquery.xmldom.js
 resources/jquery.effects
 resources/jquery.tipsy
 resources/jquery.ui
-resources/mediawiki.libs/mediawiki.libs.jpegmeta.js
+resources/mediawiki.libs
 tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js
 tests/jasmine/lib/jasmine-1.0.1/jasmine.js
index 4cf86b8..b86ceb5 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -26,5 +26,5 @@
        "jquery": true,
 
        "nomen": true,
-       "onevar": false
+       "onevar": true
 }
diff --git a/CREDITS b/CREDITS
index 5ceccc5..68c945c 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,4 +1,4 @@
-MediaWiki 1.20 is a collaborative project released under the
+MediaWiki 1.21 is a collaborative project released under the
 GNU General Public License v2. We would like to recognize the
 following names for their contribution to the product.
 
diff --git a/HISTORY b/HISTORY
index 408ae38..ab56b37 100644 (file)
--- a/HISTORY
+++ b/HISTORY
-Change notes from older releases. For current info see RELEASE-NOTES-1.20.
+Change notes from older releases. For current info see RELEASE-NOTES-1.21.
+
+== MediaWiki 1.19 ==
+
+== MediaWiki 1.19.2 ==
+
+This is a security release of the MediaWiki 1.19 branch
+
+=== Changes since 1.19.1 ===
+* (bug 39700) File: link to non-existing file can inject html
+* (bug 39823) Hidden block text leaking to admins
+* (bug 39184) LDAP password leakage
+* (bug 39180) Disallow framing of api results
+* (bug 37587) Enforce language codes to be html safe
+* (bug 39824) Check global blocks on account creation
+
+== MediaWiki 1.19 ==
+
+MediaWiki 1.19 is a large release that contains many new features and bug
+fixes. This is a summary of the major changes of interest to users.
+You can consult the RELEASE-NOTES-1.19 file for the full list of changes in
+this version.
+
+Our thanks go to everyone who helped to improve MediaWiki by testing the beta
+release and submitting bug reports.
+
+=== Changes since 1.19.1 ===
+* (bug 38406) Properly quote table names in DatabaseBase::tableName()
+* (bug 38249) Parser will throw an exception instead of outputting gibberish if
+  PCRE is compiled without support for unicode properties.
+
+=== Changes since 1.19.0 ===
+* (bug 36568) Fixed "Illegal string offset 'LIMIT'" warnings in updater
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+=== Changes since 1.19 beta 2 ===
+* Special:Watchlist no longer sets links to feed when the user is anonymous.
+* (bug 35961) Hash comparison should always be strict.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+* (bug 36042) 'show' causes a fatal in blocks API.
+
+=== Changes since 1.19 beta 1 ===
+* (bug 35014) Including a special page no longer sets the page's title to the
+  included page
+* (bug 35019) Edit summaries are no longer transformed in notification e-mails
+* (bug 35152) Help message for e-mail is shown again in user preferences
+* (bug 34887) $3 and $4 parameters are now substituted correctly in message
+  "movepage-moved"
+* (bug 34841) Edit links are no longer displayed when display old page versions
+* (bug 34889) User name should be normalized on Special:Contributions
+* (bug 35051) If heading has a trailing space after == then its name is not
+  preloaded into edit summary on section edit
+* (bug 31417) New ID mw-content-text around the actual page text, without categories,
+  contentSub, ... The same div often also contains the class mw-content-ltr/rtl.
+* (bug 35303) Proxy and DNS blacklist blocking works again
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in
+  core parser functions which operate on strings, such as padleft.
+* (bug 18295) Don't expose strip markers when a tag appears inside a link
+  inside a heading.
+* (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token
+  parameter present.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
+
+=== Configuration changes in 1.19 ===
+* Removed SkinTemplateSetupPageCss hook; use BeforePageDisplay instead.
+* (bug 27132) movefile right granted by default to registered users.
+* Default cookie lifetime ($wgCookieExpiration) is increased to 180 days.
+* (bug 31204) Removed old user.user_options.
+* $wgMaxImageArea now applies to jpeg files if they are not scaled with
+  ImageMagick.
+* Introduced $wgQueryPageDefaultLimit (defaults to 50) for the number of
+  items to show by default on query pages (special pages such as Whatlinkshere).
+* (bug 32470) Increase the length of ug_group.
+* (bug 32239) Removed $wgEnableTooltipsAndAccesskeys.
+* Removed $wgVectorShowVariantName.
+* Removed $wgExtensionAliasesFiles. Use $wgExtensionMessagesFiles.
+* Removed $wgResourceLoaderInlinePrivateModules , now always enabled.
+
+=== New features in 1.19 ===
+* (bug 19838) Add ability to get all interwiki prefixes also if the interwiki
+  cache is used.
+* $wgDnsBlacklistUrls now accepts an array with url and key as the
+  elements to work with DNSBLs that require keys, such as
+  Project Honeypot.
+* (bug 30022) Add support for custom loadScript sources to ResourceLoader.
+* (bug 19052) Unicode space separator characters (Zs) now terminates external
+  links and images links.
+* (bug 30160) Add public method to mw.loader to get module names from registry.
+* (bug 15558) Parameters to special pages included in wikitext can now be passed
+  as with templates.
+* Installer now issues a warning if mod_security is present.
+* (bug 29455) Add support for a filter callback function in jQuery byteLimit
+  plugin.
+* Added two new GetLocalURL hooks to better serve extensions working on a
+  limited type of titles.
+* Added a --no-updates flag to importDump.php that skips updating the links
+  tables.
+* Most presentational html attributes like valign are now converted to inline
+  css style rules. These attributes were removed from html5 and so we clean
+  them up when $wgHtml5 is enabled. This can be disabled using
+  $wgCleanupPresentationalAttributes.
+* Magic words (time and number-formatting ones, plus DIRECTIONMARK, but not
+  NAMESPACE) now depend on the page content language instead of the site
+  language. In theory this sets the right magic words in system messages,
+  although they are not used there.
+* (bug 30451) Add page_props to RefreshLinks::deleteLinksFromNonexistent.
+* (bug 30450) Clear page_props table on page deletion.
+* Hook added to check for exempt from account creation throttle.
+* (bug 30344) Add configuration variable for setting custom priorities when
+  generating sitemaps.
+* (bug 96170) Add array support for space-separated list attributes (like
+  'class') in the Html helper class.
+* (bug 26470) Add checkered background image on hover on files pages.
+* (bug 30774) mediawiki.html: Add support for numbers and booleans in the
+  attribute values and element contents.
+* Conversion script between Tifinagh and Latin for the Tachelhit language.
+* (bug 16755) Add options 'noreplace' and 'noerror' to {{DEFAULTSORT:...}}
+  to stop it from replace an already existing default sort, and suppress error.
+* (bug 18578) Rewrote revision delete related messages to allow better
+  localisation.
+* (bug 30364) LanguageConverter now depends on the page content language
+  instead of the wiki content language.
+* Jump links will now be usable in CSS-capable browsers instead of only
+  in outdated text browsers.
+* New common*.css files usable by skins instead of having to copy piles
+  of generic styles from MonoBook or Vector's css.
+* Some deprecated presentational html attributes will now be automatically
+  converted to css.
+* (bug 31297) Add support for namespaces in Special:RecentChanges subpage filter
+  syntax.
+* The default user signature now contains a talk link in addition to the user link.
+* (bug 25306) Add link of old page title to MediaWiki:Delete_and_move_reason.
+* Added hook BitmapHandlerCheckImageArea.
+* (bug 30062) Add $wgDBprefix option to cli installer.
+* getUserPermissionsErrors and getUserPermissionsErrorsExpensive hooks are now
+  also called when checking for 'read' permission.
+* Introduce $wgEnableSearchContributorsByIP which controls whether searching
+  for an IP address redirects to the contributions list for that IP.
+* (bug 8859) Database::update should take array of tables too.
+* (bug 19698) Add "Inverse namespaces" option to Special:Contributions.
+* (bug 24037) Add byte length of revision to Special:Contributions.
+* (bug 1672) Added $wgDisableUploadScriptChecks to allow uploading of files
+  containing HTML or JS. DISABLING THESE CHECKS IS VERY DANGEROUS.
+* New path mappings can be added using the WebRequestPathInfoRouter hook
+  and adding paths to the PathRouter.
+* (bug 32666) Special:ActiveUsers now allows a subpage to be used as value for the
+  "target" query parameter (eg. Special:ActiveUsers/Username).
+* New JavaScript variable wgPageContentLanguage.
+* Added new debugging toolbar, enabled with $wgDebugToolbar.
+* Differences in the history page now uses slightly better colors for people
+  perceiving colors differently.
+* (bug 32879) Upgrade jQuery to 1.7.1.
+* jQuery UI upgraded to 1.8.17.
+* Extensions can use the 'Language::getMessagesFileName' hook to define new
+  languages using messages files outside of core.
+* (bug 32512) Add 'Associated namespace' checkbox to Special:Contributions.
+* Added $wgSend404Code, true by default, which can be set to false to send a
+  200 status code instead of 404 for nonexistent articles.
+* (bug 33447) Link to the broken image tracking category from Special:Wantedfiles.
+* (bug 27724) Add timestamp to job queue.
+* (bug 30339) Implement SpecialPage for running javascript tests. Disabled by default, due to
+  tests potentially being harmful, not to be run on a production wiki.
+  Enable by setting $wgEnableJavaScriptTest to true.
+* Extensions can use the RequestContextCreateSkin hook to override what skin is
+  loaded in some contexts.
+* (bug 33456) Show $wgQueryCacheLimit on cached query pages.
+* (bug 10574) Add an option to allow all pages to be exported by Special:Export.
+* mediawiki.js Message object constructor is now publicly available as mw.Message.
+* (bug 29309) Allow CSS class per tooltip (tipsy).
+* (bug 33565) Add accesskey/tooltip to submit buttons on Special:EditWatchlist.
+* (bug 17959) Inline rendering/thumbnailing for Gimp XCF images.
+* (bug 27775) Namespace has it's own XML tag in the XML dump file.
+* (bug 30513) Redirect tag is now resolved in XML dump file.
+* sha1 xml tag added to XML dump file.
+* (bug 33646) Badtitle error page now emits a 400 HTTP status.
+* Special:MovePage now has a dropdown menu for namespaces.
+* (bug 34420) Special:Version now shows git HEAD sha1 when available.
+* (bug 33952) Refactor mw.toolbar to allow dynamic additions at any time.
+
+=== Bug fixes in 1.19 ===
+* $wgUploadNavigationUrl should be used for file redlinks if.
+  $wgUploadMissingFileUrl is not set. The first was used for this
+  until the second was introduced in 1.17.
+* BREAKING CHANGE:  Style rules for wikitable are now more specific and prevent
+  inheritance to nested tables which caused various issues (bug 30485 and bug
+  33434). If your wiki has overriden rules for ".wikitable", please revise them and
+  adjust where neccecary. For comparison, use the "table.wikitable" section in
+  skins/common/shared.css as base.
+* $wgUploadNavigationUrl is now used for file redlinks if
+  $wgUploadMissingFileUrl is not set. The former was used for this until the
+  second was introduced in 1.17.
+* (bug 27894) Move 'editondblclick' event listener down from body to
+  div#bodyContent.
+* (bug 30172) The check for posix_isatty() in maintenance scripts did not detect
+  when the function exists but is disabled. Introduced
+  Maintenance::posix_isatty().
+* (bug 30264) Changed installer-generated LocalSettings.php to use
+  require_once() instead require() for included extensions.
+* Do not convert text in the user interface language to another script.
+* (bug 26283) Previewing user JS/CSS pages didn't load other user JS/CSS pages.
+* (bug 26486) ResourceLoader modules with paths to nonexistent files cause PHP
+  warnings/notices to be thrown.
+* (bug 30335) Fix for HTMLForms using GET that were breaking when non-friendly
+  URLs are used.
+* (bug 28649) Preventing half truncated multi-byte unicode characters when
+  truncating log comments.
+* Show --batch-size option in help of maintenance scripts that support it.
+* (bug 4381) Magic quotes cleaning was not comprehensive, key strings were not
+  unescaped.
+* (bug 23057) Importers no longer can 'edit' or 'create' a fully-protected page by
+  importing a new revision into it.
+* Allow moving the associated talk pages of subpages even if the base page
+  has no subpage.
+* Per page edit-notices now work in namespaces without subpages enabled.
+* (bug 31081) $wgEnotifUseJobQ is no longer unconditionally enqueueing jobs.
+* (bug 30202) File names are now restricted on upload to 240 bytes, because of
+  restrictions on some of the database fields.
+* Timezones are now recognised in user preferences when offset is different
+  due to DST.
+* (bug 31692) "summary" parameter now also works when undoing revisions.
+* (bug 18823) "move succeeded" text displayed bluelinks even when redirect was
+  suppressed.
+* (bug 19186) Special:UserLogin's title on Special:SpecialPages now says
+  "create account" when the user cannot create an account.
+* (bug 31818) 'usercreated' message now supports GENDER.
+* (bug 32022) Our phpunit.php script can now be executed from another directory.
+* (bug 26020) Setting $wgEmailConfirmToEdit to true no longer removes diffs.
+  from recent changes feeds.
+* (bug 30232) add current time to message wlnote on Special:Watchlist.
+* (bug 29110) $wgFeedDiffCutoff did not affect new pages.
+* (bug 32168) Add wfRemoveDotSegments for use in wfExpandUrl.
+* (bug 32358) Do not display "No higher resolution available" for dimensionless
+  files (like audio files).
+* (bug 32168) Add wfAssembleUrl for use in wfExpandUrl.
+* (bug 32168) fixed - wfExpandUrl expands dot segments now.
+* (bug 31535) Upload comments now truncated properly, and don't have brackets.
+* (bug 32086) Special:PermanentLink now show an error message when no subpage
+  was specified.
+* (bug 30368) Special:Newpages now shows the new page name for moved pages.
+* (bug 1697) The way to search blocked usernames in block log should be clearer.
+* (bug 29747) eAccelerator shared memory caching has been removed since it is
+  now disabled by default and is buggy. APC, XCache and WinCache are not affected.
+* Installer now refuses to install if php was not compiled with Ctype support.
+* (bug 29475) Remove "trackback" feature entirely from core.
+* (bug 32665) Special:BlockList prefills the username in the input field if
+  using the Special:BlockList/username URL.
+* (bug 27721) Make JavaScript variables wgSeparatorTransformTable and
+  wgDigitTransformTable depend on page content language so the sort script
+  sorts correctly more often.
+* (bug 32230) Expose wgRedirectedFrom in JavaScript.
+* (bug 31212) History tab not collapsed when the screen is narrow.
+* (bug 15521) Use new section summary when the action of adding a new section
+  also happens to create the page.
+* (bug 32960) Remove EmailAuthenticationTimestamp from database when a
+  email address is removed.
+* (bug 32414) Empty page get a empty bytes attribute in Export/Dump.
+* (bug 33101) Viewing a User or User talk of username resembling IP ending
+  with .xxx causes Internal error.
+* Warning about undefined index in certain situations when $wgLogRestrictions
+  causes the first log type requested to be removed but not the others.
+* Use separate message ('prefixindex-namespace') for title of
+  Special:PrefixIndex rather then re-using Special:AllPages's allinnamespace.
+* (bug 33156) Special:Block now allows you to confirm you want to block yourself
+  when using non-normalized username.
+* (bug 33246) News icon shown for news:// URLs but not for news: URLs.
+* (bug 33305) Make mw.util.addCSS resistant to IE's @font-face bug by setting
+  cssText after DOM insertion.
+* (bug 30711) When adding a new section to a page with section=new, the text is
+  now always added to the current version of the page.
+* (bug 31719) Fix uploads of SVGs exported by Adobe Illustrator by expanding
+  XML entities correctly.
+* (bug 30914) Embeddable ResourceLoader modules (user.options, user.tokens)
+  should be loaded in <head> for proper dependency resolution.
+* (bug 32702) Removed method Skin::makeGlobalVariablesScript() has been readded
+  for backward compatibility.
+* (bug 31469) Make sure tracking category messages expand variables like
+  {{NAMESPACE}} relative to correct title.
+* (bug 33454) ISO-8601 week-based year number (format character 'o') is now
+  calculated correctly with respect to timezone.
+* (bug 32219) InstantCommons now fetches content from Wikimedia Commons using
+  HTTPS when the local wiki is served over HTTPS.
+* (bug 33525) clearTagHooks doesn't clear function hooks.
+* (bug 33523) Function tag hooks don't appear on Special:Version.
+* Files with IPTC blocks we can't read no longer prevent extraction of exif
+  or other metadata.
+* (bug 33587) Remove action "historysubmit" from history pages.
+* (bug 25800) mw.config wgAction should contain the actually performed action instead
+  of whatever the query value contains.
+* (bug 4438) Add CSS hook for current WikiPage action.
+* (bug 33703) Common border-bottom color for <abbr> should inherit default (text) color.
+* (bug 33819) Display file sizes in appropriate units.
+* (bug 32948) {{REVISIONID}} and related variables are no longer blank after doing
+  a null edit.
+* (bug 33880) $wgUsersNotifiedOnAllChanges should not send e-mail to user who made
+  the edit.
+* (bug 33902) Decoding %2B with mw.Uri.decode results in ' ' instead of +.
+* (bug 33762) QueryPage-based special pages no longer misses *-summary message.
+* Other sizes links are no longer generated for wikis without a 404 thumbnail handler.
+* (bug 29454) Enforce byteLimit for page title input on Special:MovePage.
+* (bug 34114) CSSMin::remap() doesn't respect its $embed parameter.
+* Special:Contributions/newbies now shows the contributions for the user "newbies".
+  New user contributions are obtained using the form or using ?contribs=newbie in URL.
+* It is now possible to delete images that have no corresponding description pages.
+* (bug 33165) GlobalFunctions.php line 1312: Call to a member function
+  getText() on a non-object.
+* (bug 31676) Group dynamically inserted CSS into a single <style> tag, to work
+  around a bug where not all styles were applied in Internet Explorer.
+* (bug 28936, bug 5280) Broken or invalid titles can't be removed from watchlist.
+* (bug 34600) Older skins using useHeadElement=false were broken in 1.18.
+* (bug 34604) [mw.config] wgActionPaths should be an object instead of a numeral
+  array.* (bug 12262) Indents and lists are now aligned
+* (bug 29753) mw.util.tooltipAccessKeyPrefix should be alt-shift for Chrome
+   on Windows
+* (bug 25095) Special:Categories should also include the first relevant item
+   when "from" is filled.
+* (bug 34972) An error occurred while changing your watchlist settings for
+  [[Special:WhatLinksHere/Example]]
+
+=== API changes in 1.19 ===
+* Made action=edit less likely to return "unknownerror", by returning the actual error
+  message (which may have come from a hook call or similar).
+* (bug 19838) siprop=interwikimap can now use the interwiki cache.
+* (bug 29748) Add API search prefix support.
+* (bug 29684) Set forgotten parameter types in ApiQueryIWLinks.
+* (bug 29685) do not output NULL parentid with list=deletedrevs&drprop=parentid.
+* siprop=interwikimap and siprop=languages can use silanguagecode to have
+  a best effort language name translation. Use CLDR extension for best result.
+* (bug 30230) action=expandtemplates should not silently override invalid title
+  inputs.
+* (bug 18634) Create API to fetch MediaWiki's language fallback tree structure.
+* (bug 26885) Allow show/hide of account blocks, temporary blocks and single IP
+  address blocks for list=blocks.
+* (bug 30591) Add support to only return keys in ApiAllMessages.
+* The API now respects $wgShowHostnames and won't share the hostname in
+  severedby if it's set to false.
+* wlexcludeuser parameter added to ApiFeedWatchlist.
+* (bug 7304) Links on redirect pages no longer cause the redirect page to show
+  up as a redirect to the linked page on Special:Whatlinkshere.
+* (bug 32609) API: Move captchaid/captchaword of action=edit from core
+  to Captcha extension(s).
+* Added 'APIGetDescription' hook.
+* (bug 32688) Paraminfo for parameter "generator" of the query module shows too
+  many types.
+* (bug 32415) Empty page get no size attribute in API output.
+* (bug 31759) Undefined property notice in querypages API.
+* (bug 32495) API should allow purge by pageids.
+* (bug 33147) API examples should explain what they do.
+* (bug 33482) Api incorrectly calls ApiBase::parseMultiValue if allowed
+  values is given as an array.
+* (bug 32948) {{REVISIONID}} and related variables are no longer blank after
+  calling action=purge&forcelinkupdate.
+* (bug 34377) action=watch now parses messages using the correct title instead
+  of "API".
+* (bug 35036) WikiLove messages were not automatically updated in JavaScript
+  after having been changed on-wiki due to a bug in core
+
+=== Languages updated in 1.19 ===
+
+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.
+
+* Canadian English (en-ca) (new).
+* Norwegian (bokmål) (nb) (renamed from no).
+* Uighur (Latin) (ug-latn) was incorrectly marked as right-to-left language.
+* (bug 30217) Make pt-br a fallback of pt.
+* (bug 31193) Set fallback language of Assamese from Bengali to English.
+* Update date format for dsb and hsb: month names need the genitive.
+* (bug 28643) Serbian variant conversion improvements (Nikola Smolenski).
+* (bug 29405, bug 30809) Lower diacritics are invisible in titles in Indic
+  languages Assamese, Bengali, Hindi, Malyalam and Odiya.
+* (bug 32826) Titles in indic languages are partially cut.
+* (bug 33367) Gendered namespaces for Czech.
+* (bug 33014) Language::formatSize()/formatBitrate() should be able to deal
+  with larger numbers (tera-yotta).
+
+=== Other changes in 1.19 ===
+* BREAKING CHANGE: Legacy global array 'ta' and global function 'akeytt' have
+  been removed from wikibits.js.
+* jquery.mwPrototypes module was renamed to jquery.mwExtension.
+* The maintenance script populateSha1.php was renamed to the more concise
+  populateImageSha1.php.
+* The Client-IP header is no longer checked for when trying to resolve a client's
+  real IP address.
+* (bug 22096) Although IE5.x and below was already unsupported officially, stylesheets
+  existing exclusively for IE5.0 and IE5.5 have now been removed (which were in skins
+  'chick' and 'monobook').
+* The constructor for CategoryView has changed, the second parameter is now a
+  Context source and is required.
+* The Title::escape{Local,Full,Canonical}URL methods are deprecated, please use
+  proper html building methods to escape the normal get{...}URL methods instead.
+* The $variant arguments in the Title::get{Local,Full,Link,Canonical}URL methods
+  have been replaced with a secondary query argument.
+* The $variant argument in the hooks for the Title::get{Local,Full,Link,Canonical}URL
+  methods have been removed, the variant is now part of the $query argument.
+* Removed Title::isValidCssJsSubpage(), deprecated since 1.17 in favor of
+  using Title::isCssJsSubpage() or checking Title::isWrongCaseCssJsPage().
+* Support for the deprecated hook MagicWordMagicWords was removed.
+* The Xml::namespaceSelector method has been deprecated, please use
+  Html::namespaceSelector instead (note that the parameters have changed also).
+* (bug 33746) Preload popular ResourceLoader modules (mediawiki.util) as stop-gap
+  for scripts missing dependencies.
+  New configuration variable $wgPreloadJavaScriptMwUtil has been introduced for this
+  (set to false by default for new installations). Set to true if your wiki has a large
+  amount of user/site scripts that are lacking dependency information. In the short to
+  medium term these user/site scripts should be fixed by adding the used modules to the
+  dependencies in the module registry and/or wrapping them in a callback to mw.loader.using.
 
 == MediaWiki 1.18 ==
+
+== MediaWiki 1.18.5 ==
+2012-08-30
+
+This is a security release of the MediaWiki 1.18 branch
+
+=== Changes since 1.18.4 ===
+* (bug 39700) File: link to non-existing file can inject html
+* (bug 39823) Hidden block text leaking to admins
+* (bug 39184) LDAP password leakage
+* (bug 39180) Disallow framing of api results
+* (bug 37587) Enforce language codes to be html safe
+* (bug 39824) Check global blocks on account creation
+
+== MediaWiki 1.18.4 ==
+2012-06-12
+
+This is a security release of the MediaWiki 1.18 branch.
+
+=== Changes since 1.18.3 ===
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+== MediaWiki 1.18.3 ==
+2012-04-25
+
+This is a maintenance release of the MediaWiki 1.18 branch.
+
 === Changes since 1.18.2 ===
 * (bug 35446) Using "{{nse:}}" with an invalid namespace name no longer throws
   a PHP warning.
 * (bug 35567) The whole password reminder e-mail is now sent in the same language.
+* (bug 35961) Hash comparison should always be strict.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
 
 == MediaWiki 1.18.2 ==
 2012-03-21
@@ -793,97 +1236,219 @@ changes to languages because of Bugzilla reports.
 
 == MediaWiki 1.17 ==
 
-=== PHP 5.2 now required ==
-Since 1.17, the lowest supported version of MediaWiki is now 5.2.3. Please
-upgrade PHP if you have not done so prior to upgrading MediaWiki.
+== MediaWiki 1.17.5 ==
+2012-06-12
+
+This is a security release of the MediaWiki 1.17 branch.
+
+=== Summary of selected changes in 1.17 ===
+
+Selected changes since MediaWiki 1.16 that may be of interest:
+
+* A new installer has been introduced. It has a wizard-style interface which is
+  translated into many languages. Many shortcomings in the old installer were
+  addressed with this rewrite. Note that it is no longer required for the config
+  directory to be made writable by the webserver. Instead the generated
+  LocalSettings.php file is offered as a download, which you must then upload
+  to the wiki's base directory.
+
+* ResourceLoader, a new framework for delivering client-side resources such as
+  JavaScript and CSS, has been introduced. These resources are now delivered
+  through the new entry point script "load.php", instead of as static files
+  served directly by the web server. This allows minification, compression and
+  client-side caching to be used more effectively, which should provide a net
+  performance improvement for most users.
+
+* Category sorting has been improved.
+** Sorting is now case insensitive.
+** Sub-categories, pages and files can now be paged separately.
+** When several pages are given the same sort key, they sort by their
+   names instead of randomly.
+
+* The lowest supported version of PHP is now 5.2.3. If necessary, please
+  upgrade PHP prior to upgrading MediaWiki.
+
+=== Changes since 1.17.4 ===
+
+* (bug 36938) Correctly escape uselang attribute to prevent xss
+* Expanded Blacklist for SVG Files
+
+=== Changes since 1.17.3 ===
+
+* (bug 35961) Hash comparison should always be strict.
+* Fix broken email confirmation expiration caused by MWCryptRand changes.
+* (bug 35671) PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php
+  on line 598.
+
+=== Changes since 1.17.2 ===
+
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in
+  core parser functions which operate on strings, such as padleft.
+* (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token
+  parameter present.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
 
-=== New installer in 1.17 ===
-MediaWiki 1.17 is shipping with a completely redesigned installer to fix
-a lot of outstanding bugs, cleanup the code quality, and make it easier to
-use. Notably, you can now run upgrades from the web without having to move
-LocalSettings.php. Also, configuration script directory has been renamed
-from config/ to mw-config/. The specific bugs are listed below in the
-general notes.
+=== Changes since 1.17.1 ===
+* (bug 33117) prop=revisions allows deleted text to be exposed through cache pollution.
+* (bug 32709) Private Wiki users were always taken to Special:Badtitle on login.
 
-=== New ResourceLoader in 1.17 ===
-MediaWiki 1.17 ships with a ResourceLoader which combines and minifies css and
-javascript attached to the page. They are served from the new entry point load.php
-If the page is served with the &debug=true parameter, the non-minified files
-are used instead.
+=== Changes since 1.17.0 ===
+
+* (bug 29535) Added missing Creative Commons CC0 icon.
+* (bug 29726) Fixed failure to load internationalization messages in
+  client-side scripts on WebKit-based browsers.
+* Fixed a bug in message transformation where the previous language could leak
+  into later transformations in the UI language.
+* (bug 29091) Fixed form of native name for Ossetic language (Иронау -> Ирон)
+* Fixed maintenance scripts upgrade1_5.php and rebuildImages.php, they did not
+  work at all since 1.17 beta 1.
+* (bug 29531) Fixed img_auth.php for thumbnails and other filenames with
+  multiple dots, was broken by the fix for bug 28840.
+* In the maintenance script purgeList.php, fixed a fatal error when a page
+  title is given, instead of a URL.
+* (bug 19514) Unordered list list-style-image should be IE6-compatible (8-bit).
+* Installer checked for magic_quotes_runtime instead of register_globals.
+* $wgSVGMaxSize is now applied to the smaller of width or height, making very
+  wide pano/timeline/diagram SVGs renderable at saner sizes.
+* (bug 29959) Installer fatal when cURL and allow_url_fopen is disabled and user
+  tries to subsribe to mediawiki-announce.
+* Installer checked for magic_quotes_runtime instead of register_globals
+* (bug 30131) XCache with variable caching disabled no longer used for variable
+  caching (CACHE_ACCEL)
+* (bug 30264) Changed installer-generated LocalSettings.php to use require_once()
+  instead require() for included extensions.
+* (bug 26486) ResourceLoader modules with paths to nonexistent files cause PHP
+  warnings/notices to be thrown
+* (bug 30907) Special:Unusedcategories should sort ascendingly.
+* (bug 30219) The page shown when LocalSettings.php does not exist was broken on
+  Windows servers.
+* Hardcoded NLS_NUMERIC_CHARACTERS for Oracle DB to prevent type conversion errors.
+* Fixed recentchanges FK violation on page delete and cache purge error in updater
+  for Oracle DB.
+* (bug 32276) Skins were generating output using the internal page title which
+  would allow anonymous users to determine wheter a page exists, potentially
+  leaking private data. In fact, the curid and oldid request parameters would
+  allow page titles to be enumerated even when they are not guessable.
+* (bug 32616) action=ajax requests were dispatched to the relevant internal
+  functions without any read permission checks being done. This could lead to
+  data leakage on private wikis.
+
+=== Changes since 1.17.0rc1 ===
+
+* Fixed syntax error in generated LocalSettings.php when a non-default user
+  rights profile is chosen.
+* (bug 29399) Fixed PostgreSQL installation when the DB user for installation
+  is the same as the one for web access.
+* (bug 29233) Fixed failover for DB slave servers. When a DB slave went down,
+  an error was immediately shown to the user, instead of trying another slave.
+  Was broken since 1.17 beta 1.
+* (bug 29278) Fixed PHP fatal error when attempting to add text to a page via a
+  redirect.
+* (bug 29408) Fixed uploads of files with MIME types that aren't detected by
+  MediaWiki.
+* Removed DEFAULT '' NOT NULL field definitions from Oracle DB schema because
+  using the DEFAULT value ('') in DML broke Oracle backend as it treats an
+  empty VARCHAR2 value as NULL. Indexes on Oracle do not require NOT NULL
+  fields.
+
+=== Changes since 1.17 beta 1 ===
+
+* Fixed warning about missing file "password.js".
+* When installing on MySQL, don't attempt to create a new database user if the
+  same user is used for installation and web access.
+* Fixed SQL query errors in queries with table aliases.
+* (bug 27891) Fixed the "chronology protector", broken since 1.17beta1, which
+  ensures that when database replication is used, the new version is seen by
+  the user immediately after they create or edit an article.
+* (bug 28845) Allow PostgreSQL installation using a non-root user account which
+  has role creation abilities.
+* When installing on PostgreSQL and the install account is the same as the web
+  account, check to make sure that the account has suitable privileges in the
+  mediawiki schema.
+* (bug 28172) Fixed error in PostgreSQL installation when creating the wiki
+  sysop account.
+* Fixed an issue with the Oracle installer in cases where the user is different
+  to the database name.
+* Added "unblockself" to the list of available rights.
+* In the installer, fixed the "user rights profile" option, it never worked.
+* (bug 29117) Fixed Hebrew localisation of the installer.
+* (bug 28840) Reduce the collateral damage caused by the fix for bug 28235 (XSS
+  on Internet Explorer 6 due to a file extension in the query string) by
+  reducing the number of URLs that are blocked, and by redirecting the request
+  to a safer URL where possible instead of blocking it.
+* (bug 28812) Fixed documentation of API action=parse.
+* (bug 28979) Fixed styling of <abbr> and <acronym>.
+* Fixed the error message displayed when you try to create an account by email,
+  but an email address is not given.
+* Fixed JS error due to missing dependency for jquery.suggestions.
+* Exposed $wgExtensionAssetsPath in JavaScript.
+* (bug 28738) Made ResourceLoader support environments with small URL length
+  limits. The length limit can be configured via $wgResourceLoaderMaxQueryLength,
+  and this is set automatically in the generated LocalSettings.php when the
+  php.ini variable "suhosin.get.max_value_length" is set. When a URL exceeds
+  this limit, the request is split up. Also, reduced the average length of
+  load.php URLs by using a more compact parameter format.
+* (bug 25262) Fix for minification of hardcoded data: URIs in CSS.
+* (bug 25124) Respect $wgStyleDirectory in ResourceLoader.
+* Allow installation when no HTTP client is available, don't throw an exception.
+* (bug 27465) Fix metadata extraction for SVG files using unusual namespace
+  names.
+* (bug 29174) Fix regression in upload-by-URL: uploading files larger than the
+  PHP memory limit should work again.
+* Fixed the display of comments in the new user log.
+* (bug 28237) When installing extensions using the web-based installer, create
+  any necessary database tables.
+* (bug 28983) Fixed automated installation of extensions that overwrite $path.
+* Fixed error caused by missing magic words.
+* Fixed breakage of article editing in PostgreSQL due to text search
+  configuration errors.
+* Fixed the HTTPS client used when Curl is not available. This avoids an error
+  during install about failure of the mediawiki-announce subscription.
+* (bug 28162) When installing to PostgreSQL, respect the "database port" input,
+  it was ignored.
 
 === Configuration changes in 1.17 ===
-* DatabaseFunctions.php that was needed for compatibility with pre-1.3
-  extensions has been removed.
-* $wgAllowImageTag can be set to true to whitelist the <img> tag in wikitext.
-* (bug 12797) Add $wgGalleryOptions for adjusting of default gallery display
-  options.
-* $wgAllowUserCssPrefs option allows disabling CSS-based preferences; which can
-  improve page loading speed.
+
+* $wgLogAutocreatedAccounts controls whether autocreation of accounts is logged
+  to new users log.
 * (bug 22858) $wgLocalStylePath is by default set to the same value as
   $wgStylePath but should never point to a different domain than the site is
   on, allowing skins to use .htc files which are not cross-domain friendly.
-* (bug 20193) Added $wgVectorShowVariantName global configuration variable
-  which causes Vector to render the variants drop-down menu with a label
-  showing the current variant name. This is off by default, pending further
-  research into its user experience implications.
-* XmlFunctions.php has been removed. Use the Xml or Html classes as appropriate.
-* Added $wgSQLMode for setting database SQL modes - either performance (null)
-  or other reasons (such as enabling stricter checks)
 * $wgFileStore has been deprecated. The only usage $wgFileStore['deleted'] has
   been turned into $wgDeletedDirectory.
 * $wgDeletedDirectory has been added to specify what directory to place deleted
   uploads in.
 * IBM DB2 database no longer uses the db specific $wgDBport_db2 variable but the
   normal $wgDBport.
-* The upload link for missing files can now be set separately from the
-  navigation link with $wgUploadMissingFileUrl.
 * $wgCategoryPrefixedDefaultSortkey was removed and is now always false.  This
   provides more sensible sorting behavior for categories.
 * Removed unused globals: $wgEnableSerializedMessages, $wgCheckSerialized,
-  $wgUseMemCached, $wgDisableSearchContext, $wgColorErrors,
-  $wgUseZhdaemon, $wgZhdaemonHost and $wgZhdaemonPort.
+  $wgUseMemCached, $wgDisableSearchContext, $wgColorErrors, $wgUseZhdaemon,
+  $wgZhdaemonHost and $wgZhdaemonPort.
 * (bug 24408) The include_path is not modified in the default LocalSettings.php
 * $wgVectorExtraStyles was removed, and is no longer in use.
-* $wgLoadScript was added to specify alternative locations for ResourceLoader
-  requests.
-* $wgResourceLoaderMaxage was added to specify maxage and smaxage times for
-  responses from ResourceLoader based on whether the request's URL contained a
-  version parameter or not.
-* $wgResourceLoaderDebug was added to specify the default state of debug mode;
-  this will still be overridden with the debug URL parameter a la
-  $wgLanguageCode.
-* $wgResourceLoaderInlinePrivateModules was added to specify whether private
-  modules such as user.options should be embedded in the HTML output or
-  delivered through a resource loader request, which bypasses server cache (like
-  squid) and checks the user parameter against $wgUser. The former adds more
-  data to all pages, while the latter adds a request which cannot be cached
-  server side.
-* Removed $wgUpdates for database updates; extension should use
-  DatabaseUpdater::addExtensionUpdate().
+* Removed $wgUpdates for database updates; extensions should use
+  DatabaseUpdater::addExtensionUpdate() via the LoadExtensionSchemaUpdates hook.
 * Removed $wgServerName. It doesn't need to be set anymore and is no longer
   available as input for other configuration items, either.
-* Remove $wgRemoteUploads. It was not well supported and superseded by
-  $wgUploadNavigationUrl.
-* (bug 198) $wgUpgradeKey allows unlocking the web installer for upgrades
-  without having to move LocalSettings.php
-* The FailFunction "error handling" method has now been removed
-* $wgAdditionalMailParams added to allow setting extra options to mail() calls.
-* $wgSecureLogin to optionaly login using HTTPS
-* (bug 25728) Added $wgPasswordSenderName to allow customise the name associed
-  with $wgPasswordSender
-* Sysops now have the "suppressredirect" right by default
-* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in
-  the footers of skins.
-* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy
-  used for the file cache. Default value is 2, which matches former behavior
 * It's no longer necessary for LocalSettings.php to include DefaultSettings.php.
 * It's no longer necessary to set $wgCacheEpoch to the file modification time
   of LocalSettings.php, in LocalSettings.php itself. Instead, this is done
   automatically if $wgInvalidateCacheOnLocalSettingsChange is true (which is
   the default).
-* (bug 26253) $wgPostCommitUpdateList has been removed
+* $wgCopyrightIcon is deprecated and $wgFooterIcons['copyright']['copyright']
+  should be used instead.
+* $wgSysopUserBans is deprecated, and will be made permanently true in 1.18.
+  If you need this functionality, you should use the BlockIp hook to filter and
+  reject such blocks.
+* $wgSysopRangeBans is deprecated, you should set $wgBlockCIDRLimit to maximum
+  (32 for IPv4, 128 for IPv6), equivalent to allowing rangeblocks of only 1
+  address at a time.
 
 === New features in 1.17 ===
+
 * (bug 10183) Users can now add personal styles and scripts to all skins via
   User:<name>/common.css and /common.js (if user css/js is enabled).
 * (bug 22748) Add anchors on Special:ListGroupRights.
@@ -898,7 +1463,7 @@ are used instead.
   changes list.
 * (bug 22925) "sp-contributions-blocked-notice-anon" message now displayed when
   viewing contributions of a blocked IP address.
-* (bug 22474) {{urlencode:}} now takes an optional second paramter for type of
+* (bug 22474) {{urlencode:}} now takes an optional second parameter for type of
   escaping.
 * Special:Listfiles now supports a username parameter.
 * Special:Random carries over query string parameters.
@@ -915,16 +1480,13 @@ are used instead.
 * (bug 20976) "searchmenu-new-nocreate" message now displayed when when there
   is no title match in search and the user has no rights to create pages.
 * (bug 23429) Added new hook WatchlistEditorBuildRemoveLine.
-* (bug 22844) Added support for WinCache object caching.
-* (bug 23580) Add two new events to LivePreview so that scripts can be
-  notified about the beginning and finishing of LivePreview actions.
+* (bug 22844) Added support for WinCache object caching (for IIS).
+* (bug 23580) Add two new events to LivePreview so that scripts can be notified
+  about the beginning and finishing of LivePreview actions.
 * (bug 21278) Now the sidebar allows inclusion of wiki markup.
-* (bug 23733) Add IDs to messages used on CSS/JS pages
-* (bug 21312) RevisionMove allows moving individual revisions of a page to
-  another page. Introducing 'revisionmove' user right; disabled by default;
-  experimental feature.
+* (bug 23733) Add IDs to messages used on CSS/JS pages.
 * Show validity period of the login cookie in Special:UserLogin and
-  Special:Preferences
+  Special:Preferences.
 * Interlanguage links display the page title in their tooltip.
 * (bug 23621) New Special:ComparePages to compare (diff) two articles.
 * (bug 4597) Provide support in Special:Contributions to show only "current"
@@ -935,12 +1497,12 @@ are used instead.
 * (bug 21475) \mathtt and \textsf can now be used in <math>
 * texvc is now run via ulimit4.sh, to limit execution time.
 * SQLite now supports $wgSharedDB.
-* (bug 8507) Group file links by namespace:title on image pages
+* (bug 8507) Group file links by namespace:title on image pages.
 * Stop emitting named entities, so we can use <!DOCTYPE html> while still being
-  well-formed XML
+  well-formed XML.
 * texvc now supports \bcancel and \xcancel in addition to \cancel and \cancelto
-* Added scriptExtension setting to $wgForeignFileRepos
-* ForeignApiRepo uses scriptDirUrl if apiBase not set
+* Added scriptExtension setting to $wgForeignFileRepos.
+* ForeignApiRepo uses scriptDirUrl if apiBase not set.
 * (bug 24212) Added MediaWiki:Filepage.css which is also included on foreign
   client wikis.
 * (bug 14685) Double underscore magic word usage is now tracked in the
@@ -950,71 +1512,100 @@ are used instead.
   "mw-ipb-needreblock"
 * Non-file pages can no longer be moved to the file namespace, nor vice versa.
 * (bug 671) The <dfn>, <kbd> and <samp> elements have been whitelisted in user
-  input
-* (bug 24563) Entries on Special:WhatLinksHere now have a link to their history
-* (bug 21503) There's now a "reason" field when creating account for other users
-* (bug 24418) action=markpatrolled now requires a token
+  input.
+* (bug 21503) There's now a "reason" field when creating account for other users.
+* (bug 24418) action=markpatrolled now requires a token.
 * A variety of category sort-related fixes, including:
 ** (bug 164) In English, lowercase and uppercase letters now sort the same.
-   (This should be expanded to proper sorting for other languages before the
-   1.17 release.)
 ** (bug 1211) Subcategories, ordinary pages, and files now page separately.
 ** When several pages are given the same sort key, they sort by their names
    instead of randomly.
 * (bug 23848) Add {{ARTICLEPATH}} Magic Word.
-* JavaScript-based password complexity checker on account creation and
-  password change.
-* (bug 8140) Add dedicated CSS classes to Special:Newpages elements
-* (bug 11005) Add CSS class to empty pages in Special:Newpages
+* (bug 8140) Add dedicated CSS classes to Special:Newpages elements.
+* (bug 11005) Add CSS class to empty pages in Special:Newpages.
 * The parser cache is now shared amongst users whose different settings aren't
   used in the page.
 * Any attribute beginning with "data-" can now be used in wikitext, per HTML5.
 * (bug 24007) Diff pages now mention the number of users having edited
-  intermediate revisions
-* Added new hook GetIP
+  intermediate revisions.
+* Added new hook GetIP.
 * Special:Version now displays whether a SQLite database supports full-text
   search.
 * TS_ISO_8691_BASIC was added as a time format, which is used by ResourceLoader
-  for versioning
+  for versioning.
 * Maintenance scripts get a --memory-limit option to override defaults (which
-  is usually to set it to -1 to disable the limit)
+  is usually to set it to -1 to disable the limit).
 * (bug 25397) Allow uploading (not displaying) of WebP images, disabled
-  by default
-* (bug 23194) Special:ListFiles now has thumbnails
+  by default.
+* (bug 23194) Special:ListFiles now has thumbnails.
 * Use hreflang to specify canonical and alternate links, search engine friendly
   when a wiki has multiple variant languages.
-* (bug 19593) Specifying --server in now works for all maintenance scripts
+* (bug 19593) Specifying --server in now works for all maintenance scripts.
 * Now rebuildtextindex.php warns if SQLite doesn't support full-text search.
-* (bug 10541) Front/backend separation of installation/upgrade code
-* (bug 10596) Allow installer to enable extensions already in extensions folder
-* (bug 17394) Make installer check for latest version against MediaWiki.org
-* (bug 20627) Installer should be in languages other than English
+* (bug 10541) Front/backend separation of installation/upgrade code.
+* (bug 10596) Allow installer to enable extensions already in extensions folder.
+* (bug 20627) Installer should be in languages other than English.
 * Support for metadata in SVG files (title, description).
-* Special:Search: Add CSS classes to 'none found' and 'create link' messages
+* Special:Search: Add CSS classes to 'none found' and 'create link' messages.
 * Add CSS classes (including namespace and pagename) to the enhanced recent
-  changes/watchlist entries
+  changes/watchlist entries.
 * (bug 22463) Add hook 'SkinGetPoweredBy' to make 'powered by' icon/text
-  customizable
-* Added CSS print pagination to the print stylesheets
+  customizable.
+* Added CSS print pagination to the print stylesheets.
 * (bug 25960) Add <link rel=canonical"> for File pages of shared/foreign
   file repositories.
 * When viewing a redirect, the redirect arrow and redirection target are both
   wrapped in a div that has the class "redirectMsg" so that the redirection
-  arrow can be customized with CSS
+  arrow can be customized with CSS.
 * (bug 21911) Hard coded limit for long page warning removed. New message
   [[MediaWiki:Longpage-hint]] (empty per default) can be used instead.
   Parameters: $1 shows the formatted textsize in Byte/KB/MB, $2 is the raw
-  number of the textsize in Byte
-* (bug 3276) Give image <gallery>s fluid width
-* Added uploads link to page subtitle in Special:Contributions
-* Added Special:Myuploads special page that redirects to Special:Listfiles
+  number of the textsize in Byte.
+* (bug 3276) Give image <gallery>s fluid width.
+* Added uploads link to page subtitle in Special:Contributions.
+* Added Special:Myuploads special page that redirects to Special:Listfiles.
 * The footerlinks used in Monobook/Vector/Modern are now part of common skin
   code, SkinTemplateOutputPageBeforeExec can be used to customize the list.
 * Special wrapping setups can now define MW_CONFIG_FILE to load a config file
   other than LocalSettings.php. This is like MW_CONFIG_CALLBACK but works in
   some cases where MW_CONFIG_CALLBACK will not work.
+* (bug 26574) Added 'upload' to $wgRestrictionTypes, allowing upload protected
+  pages to be queried via the API and Special:ProtectedPages, and allowing
+  disabling upload protection by removing it from $wgRestrictionTypes.
+* The name attribute of HTMLForm fields can now be overridden by passing a
+  'name' key in the descriptor array.  Hidden field names are now treated
+  consistently with other fields and, by default, prefixed with 'wp'.
+* (bug 27402) Add support for disabling MWSuggest.
+* (bug 26563) Add bytes changed per revision for stub and full article dumps.
+* (bug 27508) Add $wgSVGMetadataCutoff to limit the maximum amount of an svg we
+  look at when finding metadata to prevent excessive resource usage.
+* (bug 198) $wgUpgradeKey allows unlocking the web installer for upgrades
+  without having to move LocalSettings.php
+* Added $wgAllowImageTag, which can be set to true to whitelist the <img> tag
+  in wikitext.
+* (bug 12797) Add $wgGalleryOptions for adjusting of default gallery display
+  options.
+* Added the $wgAllowUserCssPrefs option which allows disabling CSS-based
+  preferences; which can improve page loading speed.
+* Added $wgSQLMode for setting database SQL modes - either performance (null)
+  or other reasons (such as enabling stricter checks).
+* (bug 20193) Added $wgVectorShowVariantName global configuration variable
+  which causes Vector to render the variants drop-down menu with a label
+  showing the current variant name. This is off by default, pending further
+  research into its user experience implications.
+* The upload link for missing files can now be set separately from the
+  navigation link with $wgUploadMissingFileUrl.
+* $wgAdditionalMailParams added to allow setting extra options to mail() calls.
+* Added $wgSecureLogin to optionally login using HTTPS.
+* (bug 25728) Added $wgPasswordSenderName to make the name associated
+  with $wgPasswordSender configurable.
+* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in
+  the footers of skins.
+* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy.
+  used for the file cache. Default value is 2, which matches former behavior.
 
 === Bug fixes in 1.17 ===
+
 * (bug 17560) Half-broken deletion moved image files to deletion archive
   without updating database.
 * (bug 22666) Submitting user block form with an invalid user name no longer
@@ -1061,7 +1652,7 @@ are used instead.
 * (bug 20049) Fixed PHP notice in search highlighter that occurs in some cases.
 * (bug 23017) Special:Disambiguations now list pages in content namespaces
   rather than only main namespace.
-* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all
+* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all.
   frames, and $wgMaxImageArea against the size of the first frame, rather than
   the other way around.  Both now default to 12.5 megapixels.  Also, images
   exceeding $wgMaxImageArea can still be embedded at original size.
@@ -1091,12 +1682,12 @@ are used instead.
   correct link.
 * (bug 23284) Times are now rounded correctly.
 * (bug 23375) Added ogv, oga, spx as extensions for ogg files.
-* (bug 18408) All required permissions for uploading (upload, edit, create)
+* (bug 18408) All required permissions for uploading (upload, edit, create).
   are now checked when loading Special:Upload. Toolbar link for Special:Upload
   is no longer shown if the user does not have the required permissions.
-* (Bug 23397) texvc in html mode renders \sim as &tilde; not &sim;
-* (Bug 23241) Remove License selector, because it is not used when uploading a
-  new version.
+* (bug 23397) texvc in html mode renders \sim as &tilde; not &sim;
+* (bug 23241) License selector should be disabled during upload of a new
+  version.
 * (bug 23240) Add ID to namespace selector form on Special:Watchlist.
 * The pipe | character in urls is now escaped.
 * (bug 23422) mp3 files can now be moved.
@@ -1116,145 +1707,240 @@ are used instead.
 * (bug 16573) Render \epsilon in math using images, in order to create
   consistent and correct render results.
 * (bug 22541) Support image redirects when using ForeignAPIRepo.
-* (bug 22967) Make edit summary length cut-off behave correctly for
-  multibyte characters.
-* (bug 8689) Long numeric lines no longer  kill the parser.
+* (bug 22967) Make edit summary length cut-off behave correctly for multibyte
+  characters.
+* (bug 8689) Long numeric lines no longer kill the parser.
 * (bug 23740) Article::doRedirect() now use $extraQuery parameter correctly if
-  the $noRedir parameter is set to true
+  the $noRedir parameter is set to true.
 * (bug 23688) Correct mime types for Office 2007 OpenXML documents.
-* (bug 23787) Corrected $wgDefaultSkin's comment in DefaultSettings.php
-* (bug 23797) Xml::input() now allows '0' for the value parameter
+* (bug 23787) Corrected $wgDefaultSkin's comment in DefaultSettings.php.
+* (bug 23797) Xml::input() now allows '0' for the value parameter.
 * (bug 23747) Make sure that on History pages, the RevDel button is not
-  accidently activated when hitting enter.
-* (bug 23845) Special:ListFiles now uses correct file names without underscores
-* Ask for permanent login in Special:Preferences only if $wgCookieExpiration > 0
+  accidentally activated when hitting enter.
+* (bug 23845) Special:ListFiles now uses correct file names without underscores.
+* Ask for permanent login in Special:Preferences only if $wgCookieExpiration > 0.
 * (bug 16356) Repair dumpInterwiki.inc to use proper normalization.
 * (bug 24006) deleteArchivedRevisions.php maintenance script now longer throws
-  a fatal error
+  a fatal error.
 * (bug 23465) Don't ignore the predefined destination filename on
-  Special:Upload after following a red link
+  Special:Upload after following a red link.
 * (bug 23642) Recognize mime types of MS OpenXML documents.
 * (bug 22784) Normalise underscores and spaces in autocomments.
-* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings
+* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings.
 * (bug 24022) Only check file extensions on the uploadpage when needed.
-* (bug 24076) Recognize Office 2003 files with OpenXML trailers
-* (bug 24244) Updated comments in DefaultSettings.php to reflect
+* (bug 24076) Recognize Office 2003 files with OpenXML trailers.
+* (bug 24244) Updated comments in DefaultSettings.php to reflect.
   Image: --> File: namespace rename.
 * Make wfTimestamp recognize negative unix timestamp values.
 * (bug 24401) SimpleSearch: No button/text indicating 'Search' if image is
-  disabled
-* (bug 23293) Do not show change tags when special:recentchanges(linked)
-  or special:newpages is transcluded into another page as it messes up the
-  page.
+  disabled.
+* (bug 23293) Do not show change tags when Special:RecentChanges(linked) or
+  Special:Newpages is transcluded into another page as it messes up the page.
 * (bug 24517) LocalFile::newFromKey() and OldLocalFile::newFromKey() no longer
-  throw fatal errors
+  throw fatal errors.
 * (bug 23380) Uploaded files that are larger than allowed by PHP now show a
   useful error message.
 * Uploading to a protected title will allow the user to choose a new name
-  instead of showing an error page
+  instead of showing an error page.
 * (bug 24425) Use Database::replace instead of delete/insert in
   SqlBagOStuff::set to avoid query errors about duplicate keynames.
 * (bug 15470) First letters of filenames are always capitalized by upload JS.
-* (bug 21215) NoLocalSettings.php doesn't tolerate rewrite rules
-* (bug 21052) Fix link color for stubs in NewPages
+* (bug 21215) NoLocalSettings.php doesn't tolerate rewrite rules.
+* (bug 21052) Fix link color for stubs in NewPages.
 * (bug 24714) Usage of {{#dateformat: }} in wikis without $wgUseDynamicDates no
   longer pollutes the parser cache.
 * (bug 17031) Correct which characters the parser allows in tag attributes (a
   letter, colon or underscore followed by 0 or more letters, numbers, colons,
   underscores, hyphens, and/or periods).
-* Save 200 useless queries on each category page view
-* Shell commands will now work on Linux in filesystems mounted noexec
-* (bug 24804) Corrected commafying in Polish and Ukrainian
+* Save 200 useless queries on each category page view.
+* Shell commands will now work on Linux in filesystems mounted noexec.
+* (bug 24804) Corrected commafying in Polish and Ukrainian.
 * "Difference between pages" is now displayed instead of "Difference between
-   revisions" on diffs when appropriate.
+  revisions" on diffs when appropriate.
 * (bug 23703) ForeignAPIRepo fails on findBySha1() when using a 1.14 install as
-  a repository due to missing 'name' attribute from the API list=allimages
+  a repository due to missing 'name' attribute from the API list=allimages.
 * (bug 24898) MediaWiki uses /tmp even if a vHost-specific tempdir is set, also
-  make wfTempDir() return a sane value for Windows on worst-case
+  make wfTempDir() return a sane value for Windows on worst-case.
 * (bug 24824) Support ImageMagick 6.5.6-2+ JPEG decoder size hint, to reduce
   memory usage when such an ImageMagick is used for scaling.
 * Disable multithreaded behaviour in recent ImageMagick, to avoid a deadlock
   when a resource limit such as $wgMaxShellMemory is hit.
-* (bug 24981) Allow extensions to access SpecialUpload variables again
-* (bug 20744) Wiki forgets about an uploaded file
-* (bug 17913) Don't show "older edit" when no older edit available
-* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel
-* (bug 24977) The accesskey in history page now lead directly to the diff
-  instead of alterning focus between the two buttons.
-* (bug 24987) Special:ListUsers does not take external groups into account
-* (bug 20633) update.php has mixed language output
+* (bug 24981) Allow extensions to access SpecialUpload variables again.
+* (bug 20744) Wiki forgets about an uploaded file.
+* (bug 17913) Don't show "older edit" when no older edit available.
+* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel.
+* (bug 24977) The accesskey in history page now lead directly to the diff.
+  instead of alternating focus between the two buttons.
+* (bug 24987) Special:ListUsers does not take external groups into account.
+* (bug 20633) update.php has mixed language output.
 * SQLite system table names are now never prefixed.
 * (bug 25292) SkinSubPageSubtitle hook now passes the Skin object as second
-  parameter
-* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16)
+  parameter.
+* (bug 25167) Correctly load JS fixes for IE6 (fixing a regression in 1.16).
 * (bug 25367) wfShellExec() is more explicit when failing due to disabled
-  passthru()
-* (bug 25462) Fix double-escaping for section edit link tooltips
+  passthru().
+* (bug 25462) Fix double-escaping for section edit link tooltips.
 * action=raw was removed for Special:Statistics. This information is still
-  available via the API
+  available via the API.
 * (bug 23934) Groups defined in $wgRevokePermissions but not in
-  $wgGroupPermissions now appear on Special:ListGroupRights
+  $wgGroupPermissions now appear on Special:ListGroupRights.
 * (bug 23923) Special:Prefixindex no longer shows results if nothing was
   requested.
-* (bug 22308) Search now finds text in default main page immediately after setup
+* (bug 22308) Search now finds text in default main page immediately after setup.
 * (bug 25697) Make sure empty lines render in diff view.
 * Use an actual minus sign in diff views, instead of a hyphen.
-* (bug 23732) Clarified "n links" message on Special:MostLinkedFiles
-* (bug 23731) Clarified "n links" message on Special:MostLinkedTemplates
+* (bug 23732) Clarified "n links" message on Special:MostLinkedFiles.
+* (bug 23731) Clarified "n links" message on Special:MostLinkedTemplates.
 * (bug 25642) A exception is now thrown instead of a fatal error when using
-  $wgSMTP without PEAR mail package
+  $wgSMTP without PEAR mail package.
 * (bug 19633) When possible, Upscale small SVGs when creating thumbnails.
-* (bug 11013) Database driver detection needs rewriting for robustness
-* (bug 13409) Installer prompts could use clarification--now has help boxes
-* (bug 16902) Installer spews warnings when exec() and dl() are not available
-* (bug 19129) Only show MyISAM/InnoDB when supported
-* (bug 17762) Only show other e-mail options when e-mail is globally enabled
-* Cache multiple sizes of InstantCommons thumbnails
+* (bug 11013) Database driver detection needs rewriting for robustness.
+* (bug 13409) Installer prompts could use clarification--now has help boxes.
+* (bug 16902) Installer spews warnings when exec() and dl() are not available.
+* (bug 19129) Only show MyISAM/InnoDB when supported.
+* (bug 17762) Only show other e-mail options when e-mail is globally enabled.
+* Cache multiple sizes of InstantCommons thumbnails.
 * (bug 25488) Disallowing anonymous users to read pages no longer throws error
-  on discussion pages with vector as default skin
-* (bug 24833) Files name in includes/diff/ are now less confusing
-* (bug 25713) SpecialPage::resolveAlias() now normalise spaces to underscores
+  on discussion pages with vector as default skin.
+* (bug 24833) Files name in includes/diff/ are now less confusing.
+* (bug 25713) SpecialPage::resolveAlias() now normalise spaces to underscores.
 * (bug 25829) Special:Mypage and Special:Mytalk now forward oldid, diff and dir
-  parameters
+  parameters.
 * (bug 25175) HTML file cache now honor $wgCacheDirectory if
-  $wgFileCacheDirectory is not set
-* (bug 13353) Diff3 version checks were too strict, did not detect working diff3
-* (bug 25843) Links to special pages using link= attribute on images are now
-  normalised like normal links to special pages
+  $wgFileCacheDirectory is not set.
+* (bug 13353) Diff3 version checks were too strict, did not detect working diff3.
+* (bug 25843) Links to special pages using link= attribute on images are now.
+  normalised like normal links to special pages.
 * (bug 21364) External links using link= attribute on images now respect
-  $wgExternalLinkTarget
+  $wgExternalLinkTarget.
 * (bug 17789) Added a note to the total views on Special:Statistics saying that
-  is doesn't count non-existing pages and special pages
-* (bug 17996) HTTP redirects are now combined when requesting a special page
+  is doesn't count non-existing pages and special pages.
+* (bug 17996) HTTP redirects are now combined when requesting a special page.
 * (bug 19944) Link on image thumbnails no longer link to "Media:" namespace in
-  some cases
+  some cases.
 * (bug 25670) wfFindFile() now checks the namespace of the given title, only
-  "File" and "Media" are allowed now
+  "File" and "Media" are allowed now.
 * (bug 25872) Rename the HttpRequest class to MWHttpRequest to avoid conflict
   with php extension that defines same class.
 * (bug 20591) There's now a different message on Special:MovePage when
   $wgFixDoubleRedirects is set to false.
 * Fixed PHP warnings when updating a broken MySQL database.
-* (bug 26023) Corrected deleteBacth.php's documentation
+* (bug 26023) Corrected deleteBacth.php's documentation.
 * (bug 25451) Improved datetime representation in 32 bit php >= 5.2.
 * Show "skin does not exist error" only when the skin is inputted in the wrong
   case.
-* (bug 26164) Potential html injection when the database server isn't available
-* (bug 26160) Upload description set by extensions are not propagated
+* (bug 26164) Potential html injection when the database server isn't available.
+* (bug 26160) Upload description set by extensions are not propagated.
 * (bug 9675) generateSitemap.php now takes an --urlpath parameter to allow
-  absolute URLs in the sitemap index (as required e.g. by Google)
+  absolute URLs in the sitemap index (as required e.g. by Google).
 * Partial workaround for bug 6220: at least make files on shared repositories
-  show up as (struck-out) bluelinks instead of redlinks on Special:WantedFiles
-* rebuildFileCache.php no longer creates inappropriate cache files for redirects
-* (bug 18372) $wgFileExtensions will now override $wgFileBlacklist
+  show up as (struck-out) bluelinks instead of redlinks on Special:WantedFiles.
+* rebuildFileCache.php no longer creates inappropriate cache files for redirects.
 * (bug 25512) Subcategory list should not include category prefix for members.
-* (bug 20244) Installer does not validate SQLite database directory for stable path
+* (bug 10871) Javascript and CSS pages in MediaWiki namespace are no longer
+  treated as wikitext on preview.
+* Page existence is now not revealed (in the colour of the tabs) to users who
+  cannot read the page in question.
+* (bug 22753) Output from update.php is more clear when things changed, entries
+  indicating nothing changed are now all prefixed by "..."
+* (bug 16019) $wgArticlePath = "/$1" no longer breaks API edit/watch actions.
+* (bug 18372) File types blacklisted by $wgFileBlacklist will no longer be shown as
+  "Permitted file types" on the upload form.
+* (bug 26540) Fixed wrong call to applyPatch in MysqlUpdater.
+* (bug 26034) Make the "View / Read" tab in content_navigation style tabs remain
+  selected when the action is "purge".
+* (bug 26733) Wrap initial table creation in transaction.
+* (bug 26208) Mark directionality of some interlanguage links.
+* (bug 26716) Provide link to instructions for external editor related preferences.
+* (bug 26961) Hide anon edits in watchlist preference now actually works.
 * (bug 1379) Installer directory conflicts with some hosts' configuration panel.
-* (bug 12070) After Installation MySQL was blocked
-* Fix XML well-formedness on a few pages when $wgHtml5 is true (the default)
-* (bug 28568) Entries in the iwlinks table are now removed on page deletion
+* (bug 27781) Installer does not warn about 5.1.x. Added a compatibility function
+  for array_key_exists().
+* Fix XML well-formedness on a few pages when $wgHtml5 is true (the default).
+* (bug 28069) MediaWiki fails streaming files when mod_deflate and ob_gzhandler
+  are also set.
+* (bug 26223) Concurrently moving an article to different titles leaks a
+  redirect revision with no page.
+* (bug 15641) Fixed permissions checks in Special:Import which allowed users
+  without the 'import' permission to import pages from configured import sources.
+* (bug 26449) Keep underlines from headings outside of tables and thumbs by
+  adding overflow:hidden to h1,h2,h3,h4,h5,h6 (also fixes editsection bunching).
+* (bug 26708) Remove background-color:white from tables in Monobook and Vector.
+* (bug 26781) {{PAGENAME}} and related parser functions escape their output better.
+* (bug 26716) Provide link to instructions for external editor related preferences
+  and add a comment to the ini control file explaining what is going on.
+* (bug 28422) Remove color:black from tables in Monobook and Vector. And add it
+  to table.wikitable instead.
+* (bug 27560) Search queries no longer fail in walloon language.
+* (bug 27700) The upload protection can now also be set for files that do not
+  exist.
+* (bug 28034) uploading file to local wiki when file exists on shared repository
+  (commons) gives spurious info in the warning message.
+* Usernames get lost when selecting different sorts on Special:listfiles.
+* (bug 28166) UploadBase assumes that 'edit' and 'upload' rights are not per
+  page restrictions.
+* (bug 28242) Make redirects generated by urls containing a local interwiki
+  prefix be a 301 instead of a 302.
+* (bug 28568) Entries in the iwlinks table are now removed on page deletion.
+* (bug 28306) Fix exposure of suppressed usernames in ForeignDBRepo.
+* (bug 28444) Fix regression: edit-on-doubleclick retains revision id again.
+* UtfNormal::cleanUp on an invalid utf-8 sequence no longer returns false if
+  intl installed.
+* (bug 26729) Category pages should return 404 if they do not exist and have no
+  members.
+* (bug 28214) When page not found, sends malformed HTTP/1.x instead of HTTP/1.1
+  in header of response.
+* (bug 27634) TOC title appears in wrong language.
+* (bug 27761) Fix regression: pages with Esperanto titles containing convertible
+  character sequences became unreachable.
+* (bug 27508) SVGMetadataExtractor takes too much resources on huge svgs.
+* (bug 27465) SVG thumbnail generation.
+* (bug 27467) preload can leave UNIQ.
+* (bug 27539) Allow attributes beginning with a digit in wiktext tag parameters.
+* (bug 27328) using relative paths in CSS imports in MediaWiki:Common.css broken
+  in 1.17.
+* (bug 27333) Fix repetitive last-seen time queries on page history.
+* (bug 26250, bug 23817) Fix wfObjectToArray() to descend into arrays; fixes
+  processing of JSON return values for ForeignAPIRepo when native json module
+  not present.
+* (bug 25675) Fix search suggestions for Special: pages with spaces.
+* (bug 25571) Xml::encodeJsVar now passes floats natively instead of converting
+  to strings.
+* (bug 27338) Gallery in 1.17 breaks for audio/video + ogghandler.
+* (bug 27302) Don't append the current timestamp for user/site modules when no
+  user/site JS/CSS is present.
+* (bug 27016) dumpTextPass.php now consider the "output" parameter.
+* (bug 22606) don't send the "someone registred an account" message when setting
+  email address (i.e. old one empty) in user preferences.
+* (bug 26458) Section edit links appear on pages that user does not have right
+  to edit.
+* (bug 28611) Don't die in SqlBagOStuff::incr() if there's a race condition.
+* (bug 16886) Sister projects box moves down the extract of the first result
+  in IE 7.
+* (bug 17398) Fixed "link" parameter in image links with "thumb" or "frame"
+  parameter.
 
 === API changes in 1.17 ===
+
+* BREAKING CHANGE: action=patrol now requires POST.
+* BREAKING CHANGE: patrol token is no longer the same as edit token.
+* BREAKING CHANGE: Session keys returned by ApiUpload are now strings instead
+  of integers.
+* BREAKING CHANGE: (bug 25303) Fix API parameter integer validation to actually
+  enforce validation on the input values in addition to giving a warning.
+  Also add flag to enforce (die) if integer out of range.
+* (bug 24650) Fix API to work with categorylinks changes.
+* action=parse now correctly returns an error for nonexistent pages.
+* (bug 27201) Special:WhatLinksHere output no longer contains duplicate IDs.
+* (bug 26560) On allusers if limit < total number of users, last user gets
+  duplicated.
+* (bug 27715) imageinfo didn't respect revdelete.
+* (bug 27479) API error when using both prop=pageprops and
+  prop=info&inprop=displaytitle.
+* (bug 27862) Useremail module didn't properly return success on success.
+* (bug 27590) prop=imageinfo now allows querying the media type.
+* (bug 27587) list=filearchive now outputs full title info.
+* (bug 27897) list=allusers and list=users list hidden users.
 * (bug 22738) Allow filtering by action type on query=logevent.
 * (bug 22764) uselang parameter for action=parse.
 * (bug 22944) API: watchlist options are inconsistent.
@@ -1272,106 +1958,106 @@ are used instead.
 * (bug 23524) Api Modules as followup to bug 14473 (Add iwlinks table to
   track inline interwiki link usage).
 * Add pltitles and tltemplates to prop=links and prop=templates respectively,
-  similar to prop=categories's clcategorie
+  similar to prop=categories's clcategorie.
 * (bug 23834) Invalid "thumbwidth" and "thumbheight" in "imageinfo" query when
-  thumbnailing larger than original image
-* (bug 23835) Need "thumbmime" result in "imageinfo" query
-* (bug 23851) Repair diff for file redirect pages
-* (bug 24009) Include implicit groups in action=query&list=users&usprop=groups
+  thumbnailing larger than original image.
+* (bug 23835) Need "thumbmime" result in "imageinfo" query.
+* (bug 23851) Repair diff for file redirect pages.
+* (bug 24009) Include implicit groups in action=query&list=users&usprop=groups.
 * (bug 24016) API: Handle parameters specified in simple string syntax
-  ( 'paramname' => 'defaultval' ) correctly when outputting help
-* (bug 24089) Logevents causes PHP Notice if leprop=title isn't supplied
-* (bug 23473) Give description of properties on all modules
+  ( 'paramname' => 'defaultval' ) correctly when outputting help.
+* (bug 24089) Logevents causes PHP Notice if leprop=title isn't supplied.
+* (bug 23473) Give description of properties on all modules.
 * (bug 24136) unknownerror when adding new section without summary, but
-  forceditsummary
-* (bug 16886) Sister projects box moves down the extract of the first result
-  in IE 7.
-* (bug 22339) Added srwhat=nearmatch to list=search to get a "go" result
+  forceditsummary.
+* (bug 22339) Added srwhat=nearmatch to list=search to get a "go" result.
 * (bug 24303) Added new &servedby parameter to all actions which adds the
   hostname that served the request to the result. It is also added
-  unconditionally on error
+  unconditionally on error.
 * (bug 24185) Titles in the Media and Special namespace are now supported for
   title normalization in action=query. Special pages have their name resolved
   to the local alias.
 * (bug 24296) Added converttitles parameter to convert titles to their
   canonical language variant.
-* (bug 17398) Fixed "link" parameter in image links with "thumb" or "frame"
-  parameter.
-* (bug 23936) Add "displaytitle" to query/info API
+* (bug 23936) Add "displaytitle" to query/info API.
 * (bug 24485) Make iwbacklinks a generator, optionally display iwprefix and
-  iwtitle
+  iwtitle.
 * (bug 24564) Fix fatal errors when using list=deletedrevs, prop=revisions or
   one of the backlinks generators with limit=max.
-* (bug 24656) API's parse module needs option to disable PP report
+* (bug 24656) API's parse module needs option to disable PP report.
 * PARAM_REQUIRED parameter flag added. If this flag is set, and the end user
   does not set the parameter, the API will automatically throw an error.
 * (bug 24665) When starttimestamp is not specified, fake it by setting it to
-  NOW, not to the timestamp of the last edit
+  NOW, not to the timestamp of the last edit.
 * (bug 24677) axto= parameters added to allcategories, allimages, alllinks,
-  allmessages, allpages, and allusers
+  allmessages, allpages, and allusers.
 * (bug 24236) Add add, remove, add-self, remove-self tags to
-  meta=siteinfo&siprop=usergroups
-* (bug 24484) Add prop=pageprops module
-* (bug 24330) Add &redirect parameter to ?action=edit
+  meta=siteinfo&siprop=usergroups.
+* (bug 24484) Add prop=pageprops module.
+* (bug 24330) Add &redirect parameter to ?action=edit.
 * (bug 24722) For list=allusers&auprop=blockinfo, only show blockedby and
   blockreason if the user is actually blocked.
-* Add format=dump and format=dumpfm, outputs results in PHP's var_dump() format
+* Add format=dump and format=dumpfm, outputs results in PHP's var_dump() format.
 * For required string parameters, if '' is provided, this is now classed as
-  missing
-* (bug 24724) list=allusers is out by 1 (shows total users - 1)
-* (bug 24166) API error when using rvprop=tags
+  missing.
+* (bug 24724) list=allusers is out by 1 (shows total users - 1).
+* (bug 24166) API error when using rvprop=tags.
 * Introduced "asynchronous download" mode for upload-by-url. Requires
   $wgAllowAsyncCopyUploads to be true.
 * sinumberingroup correctly gives size of 'user' group, and omits size of
   implicit groups rather than showing 0.
-* (bug 25248) API: paraminfo errors with certain modules
-* (bug 25303) Fix API parameter integer validation to actually enforce
-  validation on the input values in addition to giving a warning. Also add flag
-  to enforce (die) if integer out of range (breaking change!)
+* (bug 25248) API: paraminfo errors with certain modules.
 * (bug 24792) API help for action=purge sometimes wrongly stated whether a
-  POST request was needed due to cache pollution
-* Added iiprop=parsedcomment to prop=imageinfo, similar to prop=revisions
+  POST request was needed due to cache pollution.
+* Added iiprop=parsedcomment to prop=imageinfo, similar to prop=revisions.
 * Added rvparse to parse revisions. For performance reasons if this option is
   used, rvlimit is enforced to 1.
 * (bug 25748) If a action=parse request provides an oldid that is actually the
-  current revision id, try the parser cache, and save it to it if necessary
+  current revision id, try the parser cache, and save it to it if necessary.
 * (bug 25463) Export header should not be shown if no pages were requested, to
-  reduce confusion
-* (bug 25648) API discovery information has been added as RSD link in page
+  reduce confusion.
+* (bug 25648) API discovery information has been added as RSD link in page.
   <head> and by providing an API module action=rsd. Added hook
   ApiRsdServiceApis for extensions to add their own service to the services
   list.
 * The HTML of diff output markers has changed. Hyphens are now minus signs,
-  empty markers are now filled with non-breaking-space characters
-* (bug 25741) Add more data to list=search's srprop
+  empty markers are now filled with non-breaking-space characters.
+* (bug 25741) Add more data to list=search's srprop.
 * (bug 25760) counter property still reported by the API when
-  $wgDisableCounters enabled
-* (bug 25987) prop=info&inprop=watched now also works for missing pages
-* (bug 26006) prop=langlinks now allows obtaining full URL
-* (bug 26075) ApiDelete.php now calls correctly ArticleDelete hook
-* (bug 26089) add block expiration to blockinfo
+  $wgDisableCounters enabled.
+* (bug 25987) prop=info&inprop=watched now also works for missing pages.
+* (bug 26006) prop=langlinks now allows obtaining full URL.
+* (bug 26075) ApiDelete.php now calls correctly ArticleDelete hook.
+* (bug 26089) add block expiration to blockinfo.
 * (bug 26125) prop=imageinfo&iiprop=size now returns the page count if the
-  file is a multi-page file
-* (bug 10268) Added linktodiffs parameter on action=feedwatchlist
-* (bug 26219) Show API limits for multi values in description
+  file is a multi-page file.
+* (bug 10268) Added linktodiffs parameter on action=feedwatchlist.
+* (bug 26219) Show API limits for multi values in description.
+* (bug 28070) Fix watchlist RSS for databases that store timestamps in a
+  real timestamp field.
+* (bug 27722) list=filearchive now supports revdel.
 
-=== Languages updated in 1.17 ===
+=== Language support changes in 1.17 ===
 
-MediaWiki supports over 330 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
+MediaWiki supports over 330 languages. Many localizations are updated regularly.
+
+The following languages were added:
+
+* Moroccan Spoken Arabic (ary)
+* Banjar (bjn)
+* Kabardian (kdb)
+* Kabardian (Cyrillic) (kbd-cyrl)
+* Latgalian (ltg)
+* Minangkabau (min)
+* Dutch (informal) (nl-informal)
+* Rusyn (rue)
 
-* Moroccan Spoken Arabic (ary) (new)
-* Banjar (bjn) (new)
-* Danish (dk) (removed deprecated language code)
-* Fiji Hindi (Devangari script) (removed)
-* Kabardian (kdb) (new, dummy)
-* Kabardian (Cyrillic) (kbd-cyrl) (new)
-* Latgalian (ltg) (new)
-* Minangkabau (min) (new)
-* Dutch (informal) (nl-informal) (new)
-* Rusyn (rue) (new)
+Other significant changes to MediaWiki's language support:
 
+* Fiji Hindi (Devangari script) was removed.
+* Removed deprecated language code "dk" (Danish), use "da" instead.
+* Link trail added for sl and sh.
+* (bug 27633) Add characters to linkTrail for Portuguese (pt and pt-br).
 * (bug 23156) Commafy and search normalization updated for Belarusian
   (Taraškievica).
 * (bug 23283) Native name for Old English -> Ænglisc.
@@ -1381,6 +2067,27 @@ changes to languages because of Bugzilla reports.
 * (bug 24917) Polish as fallback for Kashubia.
 * (bug 24794) Tatar link trail updated.
 * Esperanto date format corrected.
+* (bug 28159) Change interwiki name of language kbd to Къэбэрдеибзэ /
+  Qabardjajəbza.
+* (bug 28184) Namespaces for the Latgalian Wikipedia.
+* (bug 25010) Bashkir-language interwikis: linktext change from Башҡорт
+  to Башҡортса.
+* (bug 26395) Change name of Cornish language to Kernowek.
+
+=== Other changes in 1.17 ===
+
+* DatabaseFunctions.php that was needed for compatibility with pre-1.3
+  extensions has been removed.
+* XmlFunctions.php has been removed. Use the Xml or Html classes as appropriate.
+* The FailFunction "error handling" method has now been removed
+* Sysops now have the "suppressredirect" right by default
+* Removed $wgRemoteUploads. It was not well supported and superseded by
+  $wgUploadNavigationUrl.
+* (bug 26253) $wgPostCommitUpdateList has been removed
+* The PHPUnit test suite has been removed from this release due to serious issues
+  which should be resolved by the 1.18 release.
+* Oracle DB now uses the __destruct fuction to commit/close connection as it
+  doesn't commit on close if transation is triggered in OCI.
 
 == MediaWiki 1.16 ==
 
index d6ff47f..926cbcf 100644 (file)
@@ -24,9 +24,11 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   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.
+  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.
@@ -41,7 +43,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * &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) Update jQuery JSON plugin to v2.3 (2011-09-17).
+* (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.
@@ -65,9 +67,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 35685) api.php URL and other entry point URLs are now listed on
   Special:Version
 * Edit notices can now be translated.
-* (bug 35680) jQuery upgraded to 1.7.2.
-* jQuery UI upgraded to 1.8.22.
-* (bug 35705) QUnit upgraded from v1.2.0 to v1.8.0.
+* 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
@@ -99,6 +101,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   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
@@ -122,15 +126,31 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * 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.
-* jsMessage: Redesigned in Vector/Monobook as floating bubble with auto-hide.
 * 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
+* (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.
@@ -204,7 +224,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (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 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.
@@ -213,17 +233,43 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   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 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 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.
@@ -232,7 +278,6 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (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 36761) "Mark pages as visited" now submits previously established filter options.
 * (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.
@@ -252,7 +297,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * 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 11142) Improve file extension blacklist error reporting in API upload.
+* (bug 39665) Cache AllowedGenerator array so it doesn't autoload all query classes
+  on every request.
 
 === Languages updated in 1.20 ===
 
@@ -286,6 +333,17 @@ changes to languages because of Bugzilla reports.
 * 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 ==
 
diff --git a/RELEASE-NOTES-1.21 b/RELEASE-NOTES-1.21
new file mode 100644 (file)
index 0000000..a1fa4ca
--- /dev/null
@@ -0,0 +1,105 @@
+= MediaWiki release notes =
+
+Security reminder: MediaWiki does not require PHP's register_globals. If you
+have it on, turn it '''off''' if you can.
+
+== MediaWiki 1.21 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.21 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.21 ===
+* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
+* Deprecated $wgAllowRealName is removed. Use $wgHiddenPrefs[] = 'realname'
+  instead.
+
+=== New features in 1.21 ===
+* (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.
+
+=== Bug fixes in 1.21 ===
+* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
+* (bug 40352) fixDoubleRedirects.php should support interwiki redirects.
+* (bug 9237) SpecialBrokenRedirect should not list interwiki redirects.
+* (bug 34960) Drop unused fields rc_moved_to_ns and rc_moved_to_title from
+  recentchanges table.
+* (bug 32951) Do not register internal externals with absolute protocol,
+  when server has relative protocol.
+
+=== 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.
+* (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
+
+=== 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.
+=== Other changes in 1.21 ===
+
+== Compatibility ==
+
+MediaWiki 1.21 requires PHP 5.3.2 or later.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for 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.21 has several database changes since 1.20, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, 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.
diff --git a/api.php b/api.php
index 9e1f5dd..7fae373 100644 (file)
--- a/api.php
+++ b/api.php
@@ -35,6 +35,7 @@ define( 'MW_API', true );
 
 // Bail if PHP is too low
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'api.php' );
 }
@@ -43,7 +44,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 wfProfileIn( 'api.php' );
diff --git a/bin/svnstat b/bin/svnstat
deleted file mode 100755 (executable)
index 5a2c940..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-svn stat -v $1 | sed -n 's/^[ A-Z?\*|!]\{1,15\}[0-9]\{1,10\} \{1,15\}/r/;s/ .*//p'
diff --git a/bin/ulimit-tvf.sh b/bin/ulimit-tvf.sh
deleted file mode 100755 (executable)
index 8a1eb81..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-ulimit -t $1 -v $2 -f $3
-shift 3
-"$@"
-
diff --git a/bin/ulimit.sh b/bin/ulimit.sh
deleted file mode 100644 (file)
index 7a1925c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-ulimit -t $1
-ulimit -v $2
-shift 2
-"$@"
-
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/docs/contenthandler.txt b/docs/contenthandler.txt
new file mode 100644 (file)
index 0000000..3561432
--- /dev/null
@@ -0,0 +1,184 @@
+The ContentHandler facility adds support for arbitrary content types on wiki pages, instead of relying on wikitext
+for everything. It was introduced in MediaWiki 1.21.
+
+Each kind of content ("content model") supported by MediaWiki is identified by unique name. The content model determines
+how a page's content is rendered, compared, stored, edited, and so on.
+
+Built-in content types are:
+
+* wikitext - wikitext, as usual
+* javascript - user provided javascript code
+* css - user provided css code
+* text - plain text
+
+In PHP, use the corresponding CONTENT_MODEL_XXX constant.
+
+A page's content model is available using the Title::getContentModel() method. A page's default model is determined by
+ContentHandler::getDefaultModelFor($title) as follows:
+
+* The global setting $wgNamespaceContentModels specifies a content model for the given namespace.
+* The hook ContentHandlerDefaultModelFor may be used to override the page's default model.
+* Pages in NS_MEDIAWIKI and NS_USER default to the CSS or JavaScript model if they end in .js or .css, respectively.
+  Pages in NS_MEDIAWIKI default to the wikitext model otherwise.
+* The hook TitleIsCssOrJsPage may be used to force a page to use the CSS or JavaScript model.
+  This is a compatibility feature. The ContentHandlerDefaultModelFor hook should be used instead if possible.
+* The hook TitleIsWikitextPage may be used to force a page to use the wikitext model.
+  This is a compatibility feature. The ContentHandlerDefaultModelFor hook should be used instead if possible.
+* Otherwise, the wikitext model is used.
+
+Note that is currently no mechanism to convert a page from one content model to another, and there is no guarantee that
+revisions of a page will all have the same content model. Use Revision::getContentModel() to find it.
+
+
+== Architecture ==
+
+Two class hierarchies are used to provide the functionality associated with the different content models:
+
+* Content interface (and AbstractContent base class) define functionality that acts on the concrete content of a page, and
+* ContentHandler base class provides functionality specific to a content model, but not acting on concrete content.
+
+The most important function of ContentHandler is to act as a factory for the appropriate implementation of Content. These
+Content objects are to be used by MediaWiki everywhere, instead of passing page content around as text. All manipulation
+and analysis of page content must be done via the appropriate methods of the Content object.
+
+For each content model, a subclass of ContentHandler has to be registered with $wgContentHandlers. The ContentHandler
+object for a given content model can be obtained using ContentHandler::getForModelID( $id ). Also Title, WikiPage and
+Revision now have getContentHandler() methods for convenience.
+
+ContentHandler objects are singletons that provide functionality specific to the content type, but not directly acting
+on the content of some page. ContentHandler::makeEmptyContent() and ContentHandler::unserializeContent() can be used to
+create a Content object of the appropriate type. However, it is recommended to instead use WikiPage::getContent() resp.
+Revision::getContent() to get a page's content as a Content object. These two methods should be the ONLY way in which
+page content is accessed.
+
+Another important function of ContentHandler objects is to define custom action handlers for a content model, see
+ContentHandler::getActionOverrides(). This is similar to what WikiPage::getActionOverrides() was already doing.
+
+
+== Serialization ==
+
+With the ContentHandler facility, page content no longer has to be text based. Objects implementing the Content interface
+are used to represent and handle the content internally. For storage and data exchange, each content model supports
+at least one serialization format via ContentHandler::serializeContent( $content ). The list of supported formats for
+a given content model can be accessed using ContentHandler::getSupportedFormats().
+
+Content serialization formats are identified using MIME type like strings. The following formats are built in:
+
+* text/x-wiki - wikitext
+* text/javascript - for js pages
+* text/css - for css pages
+* text/plain - for future use, e.g. with plain text messages.
+* text/html - for future use, e.g. with plain html messages.
+* application/vnd.php.serialized - for future use with the api and for extensions
+* application/json - for future use with the api, and for use by extensions
+* application/xml - for future use with the api, and for use by extensions
+
+In PHP, use the corresponding CONTENT_FORMAT_XXX constant.
+
+Note that when using the API to access page content, especially action=edit, action=parse and action=query&prop=revisions,
+the model and format of the content should always be handled explicitly. Without that information, interpretation of
+the provided content is not reliable. The same applies to XML dumps generated via maintenance/dumpBackup.php or
+Special:Export.
+
+Also note that the API will provide encapsulated, serialized content - so if the API was called with format=json, and
+contentformat is also json (or rather, application/json), the page content is represented as a string containing an
+escaped json structure. Extensions that use JSON to serialize some types of page content may provide specialized API
+modules that allow access to that content in a more natural form.
+
+
+== Compatibility ==
+
+The ContentHandler facility is introduced in a way that should allow all existing code to keep functioning at least
+for pages that contain wikitext or other text based content. However, a number of functions and hooks have been
+deprecated in favor of new versions that are aware of the page's content model, and will now generate warnings when
+used.
+
+Most importantly, the following functions have been deprecated:
+
+* Revisions::getText() and Revisions::getRawText() is deprecated in favor Revisions::getContent()
+* WikiPage::getText() is deprecated in favor WikiPage::getContent()
+
+Also, the old Article::getContent() (which returns text) is superceded by Article::getContentObject(). However, both
+methods should be avoided since they do not provide clean access to the page's actual content. For instance, they may
+return a system message for non-existing pages. Use WikiPage::getContent() instead.
+
+Code that relies on a textual representation of the page content should eventually be rewritten. However,
+ContentHandler::getContentText() provides a stop-gap that can be used to get text for a page. Its behavior is controlled
+by $wgContentHandlerTextFallback; per default it will return the text for text based content, and null for any other
+content.
+
+For rendering page content, Content::getParserOutput() should be used instead of accessing the parser directly.
+ContentHandler::makeParserOptions() can be used to construct appropriate options.
+
+
+Besides some functions, some hooks have also been replaced by new versions (see hooks.txt for details).
+These hooks will now trigger a warning when used:
+
+* ArticleAfterFetchContent was replaced by ArticleAfterFetchContentObject
+* ArticleInsertComplete was replaced by ArticleContentInsertComplete
+* ArticleSave was replaced by ArticleContentSave
+* ArticleSaveComplete was replaced by ArticleContentSaveComplete
+* ArticleViewCustom was replaced by ArticleContentViewCustom (also consider a custom implementation of the view action)
+* EditFilterMerged was replaced by EditFilterMergedContent
+* EditPageGetDiffText was replaced by EditPageGetDiffContent
+* EditPageGetPreviewText was replaced by EditPageGetPreviewContent
+* ShowRawCssJs was deprecated in favor of custom rendering implemented in the respective ContentHandler object.
+
+
+== Database Storage ==
+
+Page content is stored in the database using the same mechanism as before. Non-text content is serialized first. The
+appropriate serialization and deserialization is handled by the Revision class.
+
+Each revision's content model and serialization format is stored in the revision table (resp. in the archive table, if
+the revision was deleted). The page's (current) content model (that is, the conent model of the latest revision) is also
+stored in the page table.
+
+Note however that the content model and format is only stored if it differs from the page's default, as determined by
+ContentHandler::getDefaultModelFor( $title ). The default values are represented as NULL in the database, to preserve
+space.
+
+Storage of content model and format can be disabled altogether by setting $wgContentHandlerUseDB = false. In that case,
+the page's default model (and the model's default format) will be used everywhere. Attempts to store a revision of a page
+using a model or format different from the default will result in an error.
+
+
+== Globals ==
+
+There are some new globals that can be used to control the behavior of the ContentHandler facility:
+
+* $wgContentHandlers associates content model IDs with the names of the appropriate ContentHandler subclasses.
+
+* $wgNamespaceContentModels maps namespace IDs to a content model that should be the default for that namespace.
+
+* $wgContentHandlerUseDB determines whether each revision's content model should be stored in the database.
+  Defaults is true.
+
+* $wgContentHandlerTextFallback determines how the compatibility method ContentHandler::getContentText() will behave for
+  non-text content:
+    'ignore'     causes null to be returned for non-text content (default).
+    'serialize'  causes the serialized form of any non-text content to be returned (scary).
+    'fail'       causes an exception to be thrown for non-text content (strict).
+
+
+== Caveats ==
+
+There are some changes in behavior that might be surprising to users:
+
+* Javascript and CSS pages are no longer parsed as wikitext (though pre-save transform is still applied). Most
+importantly, this means that links, including categorization links, contained in the code will not work.
+
+* With $wgContentHandlerUseDB = false, pages can not be moved in a way that would change the
+default model. E.g. [[MediaWiki:foo.js]] can not be moved to [[MediaWiki:foo bar]], but can still be moved to
+[[User:John/foo.js]]. Also, in this mode, changing the default content model for a page (e.g. by changing
+$wgNamespaceContentModels) may cause it to become inaccessible.
+
+* action=edit will fail for pages with non-text content, unless the respective ContentHandler implementation has
+provided a specialized handler for the edit action. This is true for the API as well.
+
+* action=raw will fail for all non-text content. This seems better than serving content in other formats to an
+unsuspecting recipient. This will also cause client-side diffs to fail.
+
+* File pages provide their own action overrides that do not combine gracefully with any custom handlers defined by a
+ContentHandler. If for example a File page used a content model with a custom revert action, this would be overridden by
+WikiFilePage's handler for the revert action.
index 11db1f5..9949d13 100644 (file)
@@ -13,7 +13,7 @@ die("Not a valid entry point\n");
  * Welcome on MediaWiki autogenerated documentation system.
  *
  * If you are looking to use, install or configure your wiki, you probably
- * want to look at the main site: http://www.mediawiki.org/
+ * want to look at the main site: https://www.mediawiki.org/
  *
  * @note this page is generated from docs/doxygen_first_page.php
  */
diff --git a/docs/export-0.8.xsd b/docs/export-0.8.xsd
new file mode 100644 (file)
index 0000000..a18c608
--- /dev/null
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+       This is an XML Schema description of the format
+       output by MediaWiki's Special:Export system.
+
+       Version 0.2 adds optional basic file upload info support,
+       which is used by our OAI export/import submodule.
+
+       Version 0.3 adds some site configuration information such
+       as a list of defined namespaces.
+
+       Version 0.4 adds per-revision delete flags, log exports,
+       discussion threading data, a per-page redirect flag, and
+       per-namespace capitalization.
+
+       Version 0.5 adds byte count per revision.
+
+       Version 0.6 adds a separate namespace tag, and resolves the
+       redirect target and adds a separate sha1 tag for each revision.
+
+       Version 0.7 adds a unique identity constraint for both page and
+       revision identifiers. See also bug 4220.
+       Fix type for <ns> from "positiveInteger" to "nonNegativeInteger" to allow 0
+       Moves <logitem> to its right location.
+       Add parentid to revision.
+       Fix type for <id> within <contributor> to "nonNegativeInteger"
+
+       Version 0.8 adds support for a <model> and a <format> tag for
+       each revision. See contenthandler.txt.
+
+       The canonical URL to the schema document is:
+       http://www.mediawiki.org/xml/export-0.8.xsd
+
+       Use the namespace:
+       http://www.mediawiki.org/xml/export-0.8/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+               xmlns:mw="http://www.mediawiki.org/xml/export-0.8/"
+               targetNamespace="http://www.mediawiki.org/xml/export-0.8/"
+               elementFormDefault="qualified">
+
+       <annotation>
+               <documentation xml:lang="en">
+                       MediaWiki's page export format
+               </documentation>
+       </annotation>
+
+       <!-- Need this to reference xml:lang -->
+       <import namespace="http://www.w3.org/XML/1998/namespace"
+                       schemaLocation="http://www.w3.org/2001/xml.xsd" />
+
+       <!-- Our root element -->
+       <element name="mediawiki" type="mw:MediaWikiType">
+               <!-- Page ID contraint, see bug 4220 -->
+               <unique name="PageIDConstraint">
+                       <selector xpath="mw:page" />
+                       <field xpath="mw:id" />
+               </unique>
+               <!-- Revision ID contraint, see bug 4220 -->
+               <unique name="RevIDConstraint">
+                       <selector xpath="mw:page/mw:revision" />
+                       <field xpath="mw:id" />
+               </unique>
+       </element>
+
+       <complexType name="MediaWikiType">
+               <sequence>
+                       <element name="siteinfo" type="mw:SiteInfoType"
+                                        minOccurs="0" maxOccurs="1" />
+                       <element name="page" type="mw:PageType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+                       <element name="logitem" type="mw:LogItemType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+               <attribute name="version" type="string" use="required" />
+               <attribute ref="xml:lang" use="required" />
+       </complexType>
+
+       <complexType name="SiteInfoType">
+               <sequence>
+                       <element name="sitename" type="string" minOccurs="0" />
+                       <element name="base" type="anyURI" minOccurs="0" />
+                       <element name="generator" type="string" minOccurs="0" />
+                       <element name="case" type="mw:CaseType" minOccurs="0" />
+                       <element name="namespaces" type="mw:NamespacesType" minOccurs="0" />
+               </sequence>
+       </complexType>
+
+       <simpleType name="CaseType">
+               <restriction base="NMTOKEN">
+                       <!-- Cannot have two titles differing only by case of first letter. -->
+                       <!-- Default behavior through 1.5, $wgCapitalLinks = true -->
+                       <enumeration value="first-letter" />
+
+                       <!-- Complete title is case-sensitive -->
+                       <!-- Behavior when $wgCapitalLinks = false -->
+                       <enumeration value="case-sensitive" />
+
+                       <!-- Cannot have non-case senstitive titles eg [[FOO]] == [[Foo]] -->
+                       <!-- Not yet implemented as of MediaWiki 1.18 -->
+                       <enumeration value="case-insensitive" />
+               </restriction>
+       </simpleType>
+
+       <simpleType name="DeletedFlagType">
+               <restriction base="NMTOKEN">
+                       <enumeration value="deleted" />
+               </restriction>
+       </simpleType>
+
+       <complexType name="NamespacesType">
+               <sequence>
+                       <element name="namespace" type="mw:NamespaceType"
+                                        minOccurs="0" maxOccurs="unbounded" />
+               </sequence>
+       </complexType>
+
+       <complexType name="NamespaceType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="key" type="integer" />
+                               <attribute name="case" type="mw:CaseType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="RedirectType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute name="title" type="string" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <simpleType name="ContentModelType">
+               <restriction base="string">
+                       <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*"/>
+               </restriction>
+       </simpleType>
+
+       <simpleType name="ContentFormatType">
+               <restriction base="string">
+                       <pattern value='[a-zA-Z][-+.a-zA-Z0-9]*\/[a-zA-Z][-+.a-zA-Z0-9]*'/>
+               </restriction>
+       </simpleType>
+
+       <complexType name="PageType">
+               <sequence>
+                       <!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+                       <element name="title" type="string" />
+
+                       <!-- Namespace in canonical form -->
+                       <element name="ns" type="nonNegativeInteger" />
+
+                       <!-- optional page ID number -->
+                       <element name="id" type="positiveInteger" />
+
+                       <!-- flag if the current revision is a redirect -->
+                       <element name="redirect" type="mw:RedirectType" minOccurs="0" maxOccurs="1" />
+
+                       <!-- comma-separated list of string tokens, if present -->
+                       <element name="restrictions" type="string" minOccurs="0" />
+
+                       <!-- Zero or more sets of revision or upload data -->
+                       <choice minOccurs="0" maxOccurs="unbounded">
+                               <element name="revision" type="mw:RevisionType" />
+                               <element name="upload" type="mw:UploadType" />
+                       </choice>
+
+                       <!-- Zero or One sets of discussion threading data -->
+                       <element name="discussionthreadinginfo" minOccurs="0" maxOccurs="1" type="mw:DiscussionThreadingInfo" />
+               </sequence>
+       </complexType>
+
+       <complexType name="RevisionType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="parentid" type="positiveInteger" minOccurs="0" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="minor" minOccurs="0" maxOccurs="1" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" maxOccurs="1" />
+                       <element name="text" type="mw:TextType" />
+                       <element name="sha1" type="string" />
+                       <element name="model" type="mw:ContentModelType" />
+                       <element name="format" type="mw:ContentFormatType" />
+               </sequence>
+       </complexType>
+
+       <complexType name="LogItemType">
+               <sequence>
+                       <element name="id" type="positiveInteger" />
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="mw:CommentType" minOccurs="0" />
+                       <element name="type" type="string" />
+                       <element name="action" type="string" />
+                       <element name="text" type="mw:LogTextType" minOccurs="0" maxOccurs="1" />
+                       <element name="logtitle" type="string" minOccurs="0" maxOccurs="1" />
+                       <element name="params" type="mw:LogParamsType" minOccurs="0" maxOccurs="1" />
+               </sequence>
+       </complexType>
+
+       <complexType name="CommentType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="TextType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                               <!-- This isn't a good idea; we should be using "ID" instead of "NMTOKEN" -->
+                               <!-- However, "NMTOKEN" is strictest definition that is both compatible with existing -->
+                               <!-- usage ([0-9]+) and with the "ID" type. -->
+                               <attribute name="id" type="NMTOKEN" />
+                               <attribute name="bytes" use="optional" type="nonNegativeInteger" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogTextType">
+               <simpleContent>
+                       <extension base="string">
+                               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+                               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="LogParamsType">
+               <simpleContent>
+                       <extension base="string">
+                               <attribute ref="xml:space" use="optional" default="preserve" />
+                       </extension>
+               </simpleContent>
+       </complexType>
+
+       <complexType name="ContributorType">
+               <sequence>
+                       <element name="username" type="string" minOccurs="0" />
+                       <element name="id" type="nonNegativeInteger" minOccurs="0" />
+
+                       <element name="ip" type="string" minOccurs="0" />
+               </sequence>
+               <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+               <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+       </complexType>
+
+       <complexType name="UploadType">
+               <sequence>
+                       <!-- Revision-style data... -->
+                       <element name="timestamp" type="dateTime" />
+                       <element name="contributor" type="mw:ContributorType" />
+                       <element name="comment" type="string" minOccurs="0" />
+
+                       <!-- Filename. (Using underscores, not spaces. No 'File:' namespace marker.) -->
+                       <element name="filename" type="string" />
+
+                       <!-- URI at which this resource can be obtained -->
+                       <element name="src" type="anyURI" />
+
+                       <element name="size" type="positiveInteger" />
+
+                       <!-- TODO: add other metadata fields -->
+               </sequence>
+       </complexType>
+
+       <!-- Discussion threading data for LiquidThreads -->
+       <complexType name="DiscussionThreadingInfo">
+               <sequence>
+                       <element name="ThreadSubject" type="string" />
+                       <element name="ThreadParent" type="positiveInteger" />
+                       <element name="ThreadAncestor" type="positiveInteger" />
+                       <element name="ThreadPage" type="string" />
+                       <element name="ThreadID" type="positiveInteger" />
+                       <element name="ThreadAuthor" type="string" />
+                       <element name="ThreadEditStatus" type="string" />
+                       <element name="ThreadType" type="string" />
+               </sequence>
+       </complexType>
+
+</schema>
index ca46578..a4b4e57 100644 (file)
@@ -283,6 +283,11 @@ $article: Article object
 $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().
+
 'AfterImportPage': When a page import is completed
 $title: Title under which the revisions were imported
 $origTitle: Title provided by the XML file
@@ -290,6 +295,12 @@ $revCount: Number of revisions in the XML file
 $sRevCount: Number of sucessfully imported revisions
 $pageInfo: associative array of page information
 
+'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
+before OutputPage::sendCacheControl() and 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: 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; ).
@@ -314,6 +325,14 @@ $body: Body of the message
 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.
+$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
@@ -397,6 +416,11 @@ 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: 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.
@@ -410,9 +434,14 @@ token types.
 used to retrieve this type of tokens.
 
 '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
 $article: the article (object) being loaded from the database
-$content: the content (string) of the article
+&$content: the content of the article, as a Content object
 
 'ArticleConfirmDelete': before writing the confirmation form for article
        deletion
@@ -439,6 +468,8 @@ $article: 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
@@ -460,7 +491,7 @@ 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
+'ArticleInsertComplete': After a new article is created. DEPRECATED, use ArticleContentInsertComplete
 $article: WikiPage created
 $user: User creating the article
 $text: New content
@@ -468,7 +499,18 @@ $summary: Edit summary/comment
 $isMinor: Whether or not the edit was marked as minor
 $isWatch: (No longer used)
 $section: (No longer used)
-$flags: Flags passed to Article::doEdit()
+$flags: Flags passed to WikiPage::doEditContent()
+$revision: New Revision of the article
+
+'ArticleContentInsertComplete': After a new article is created
+$article: WikiPage created
+$user: User creating the article
+$content: New content as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
 $revision: New Revision of the article
 
 'ArticleMergeComplete': after merging to article using Special:Mergehistory
@@ -519,7 +561,7 @@ $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
+'ArticleSave': before an article is saved. DEPRECATED, use ArticleContentSave instead
 $article: the WikiPage (object) being saved
 $user: the user (object) saving the article
 $text: the new article text
@@ -528,7 +570,16 @@ $isminor: minor flag
 $iswatch: watch flag
 $section: section #
 
-'ArticleSaveComplete': After an article has been updated
+'ArticleContentSave': before an article is saved.
+$article: 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)
+$isminor: minor flag
+$iswatch: watch flag
+$section: section #
+
+'ArticleSaveComplete': After an article has been updated. DEPRECATED, use ArticleContentSaveComplete instead.
 $article: WikiPage modified
 $user: User performing the modification
 $text: New content
@@ -536,9 +587,22 @@ $summary: Edit summary/comment
 $isMinor: Whether or not the edit was marked as minor
 $isWatch: (No longer used)
 $section: (No longer used)
-$flags: Flags passed to Article::doEdit()
+$flags: Flags passed to WikiPage::doEditContent()
+$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
+
+'ArticleContentSaveComplete': After an article has been updated
+$article: WikiPage modified
+$user: User performing the modification
+$content: New content, as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
 $revision: New Revision of the article
-$status: Status object about to be returned by doEdit()
+$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
@@ -567,11 +631,19 @@ object to both indicate that the output is done and what parser output was used.
 follwed an redirect
 $article: target article (object)
 
-'ArticleViewCustom': allows to output the text of the article in a different format than wikitext
+'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.
+$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
 $user: User object created locally
@@ -703,6 +775,16 @@ the collation given in $collationName.
 '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
+for a given title. May be used to assign a different model for that title.
+$title: the Title in question
+&$model: the model name. Use with CONTENT_MODEL_XXX constants.
+
+'ContentHandlerForModelID': Called when a ContentHandler is requested for a given
+cointent 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.
+
 'ContribsPager::getQueryInfo': Before the contributions query is about to run
 &$pager: Pager object for contributions
 &$queryInfo: The query for the contribs Pager
@@ -776,12 +858,19 @@ $section: Section being edited
 &$error: Error message to return
 $summary: Edit summary for page
 
-'EditFilterMerged': Post-section-merge edit filter
+'EditFilterMerged': Post-section-merge edit filter.
+DEPRECATED, use EditFilterMergedContent instead.
 $editor: EditPage instance (object)
 $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
+$summary: Edit summary for page
+
 'EditFormPreloadText': Allows population of the edit form when creating
 new pages
 &$text: Text to preload with
@@ -792,7 +881,7 @@ pages
 $editPage: EditPage    object
 
 'EditPage::attemptSave': called before an article is
-saved, that is before Article::doEdit() is called
+saved, that is before WikiPage::doEditContent() is called
 $editpage_Obj: the current EditPage object
 
 'EditPage::importFormData': allow extensions to read additional data
@@ -844,14 +933,28 @@ $title: title of page being edited
 &$msg: localization message name, overridable. Default is either 'copyrightwarning' or 'copyrightwarning2'
 
 'EditPageGetDiffText': Allow modifying the wikitext that will be used in
-"Show changes"
+"Show changes". DEPRECATED. Use EditPageGetDiffContent instead.
+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
+'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.
+$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.
 $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.
+$editPage: EditPage object
+&$content: Content object to be previewed (may be replaced by hook function)
+
 'EditPageNoSuchSection': When a section edit request is given for an non-existent section
 &$editpage: The current EditPage object
 &$res: the HTML of the error text
@@ -1698,6 +1801,11 @@ in the $searchEngine->namespaces array.
 $query : Original query.
 &$parsed : Resultant query with the prefixes stripped.
 
+'SearchResultInitFromTitle': Set the revision used when displaying a page in
+search results.
+$title : Current Title object being displayed in search results.
+&$id: Revision ID (default is false, for latest)
+
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
@@ -1706,7 +1814,8 @@ $query : Original query.
 '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
+'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views.
+DEPRECATED, use the ContentHandler facility to handle CSS and JavaScript!
 $text: Text being shown
 $title: Title of the custom script/stylesheet page
 $output: Current OutputPage object
@@ -2325,6 +2434,14 @@ One, and only one hook should set this, and return false.
 &$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.
+$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.
 &$script: MediaWiki cli script path
index 1df9881..42a6027 100644 (file)
@@ -1,21 +1,5 @@
 language.txt
 
-The Language object handles all readable text produced by the software. The most
-used function is getMessage(), usually called with the wrapper function wfMsg()
-which calls that method on the global language object. It just returns a piece
-of text given a text key. It is recommended that you use each key only
-once--bits of text in different contexts that happen to be identical in English
-may not be in other languages, so it's better to add new keys than to reuse them
-a lot. Likewise, if there is text that gets combined with things like names and
-titles, it is better to put markers like "$1" inside a piece of text and use
-str_replace() than to compose such messages in code, because their order may
-change in other languages too.
+The Language object handles all readable text produced by the software.
 
-While the system is running, there will be one global language object, which
-will be a subtype of Language. The methods in these objects will return the
-native text requested if available, otherwise they fall back to sending English
-text (which is why the LanguageEn object has no code at all--it just inherits
-the English defaults of the Language base class).
-
-The names of the namespaces are also contained in the language object, though
-the numbers are fixed.
+See http://www.mediawiki.org/wiki/Localisation#General_use_.28for_developers.29
index ceae026..1d9bf7d 100644 (file)
@@ -40,7 +40,7 @@ $magicWords['es'] = array(
 );
 ----
 
-$wgExtensionMessagesFiles['ExtensionNameMagic'] = dirname( __FILE__ ) . '/ExtensionName.i18n.magic.php';
+$wgExtensionMessagesFiles['ExtensionNameMagic'] = __DIR__ . '/ExtensionName.i18n.magic.php';
 $wgHooks['MagicWordwgVariableIDs'][] = 'wfAddCustomMagicWordID';
 $wgHooks['ParserGetVariableValueSwitch'][] = 'wfGetCustomMagicWordValue';
 
@@ -74,7 +74,7 @@ $magicWords['es'] = array(
 );
 ----
 
-$wgExtensionMessagesFiles['ExtensionNameMagic'] = dirname( __FILE__ ) . '/ExtensionName.i18n.magic.php';
+$wgExtensionMessagesFiles['ExtensionNameMagic'] = __DIR__ . '/ExtensionName.i18n.magic.php';
 $wgHooks['ParserFirstCallInit'][] = 'wfRegisterCustomMagicWord';
 
 function wfRegisterCustomMagicWord( &$parser ){
index 3872edc..971a611 100644 (file)
@@ -198,7 +198,7 @@ Revision text:
        expriry: $wgRevisionCacheExpiry
 
 Sessions:
-       controlled by: $wgSessionsInMemcached
+       controlled by: $wgSessionsInObjectCache
        key: $wgBDname:session:$id
        ex: wikidb:session:38d7c5b8d3bfc51egf40c69bc40f8be3
        stores: $SESSION, useful when using a multi-sever wiki
index 20dab86..7062a82 100644 (file)
        <span class="comment">span.comment</span>
        <a class="feedlink">a.feedlink</a>
        <table class="wikitable">
-               <tr><th colspan="2">table.wikitable</td></tr>
+               <tr><th colspan="2">table.wikitable</th></tr>
                <tr><td>cell</td><td>cell</td></tr>
                <tr><td>cell</td><td>cell</td></tr>
        </table>
 
        <table class="mw-datatable">
-               <tr><th colspan="2">table.mw-datatable</td></tr>
+               <tr><th colspan="2">table.mw-datatable</th></tr>
                <tr><td>line with hover</td><td>line with hover</td></tr>
                <tr><td>line with hover</td><td>line with hover</td></tr>
        </table>
index 22f4710..66236e8 100644 (file)
@@ -21,10 +21,10 @@ Please note that under POSIX systems (Linux...), parent of a symbolic path
 refers to the link source, NOT to the target! You should check the env
 variable MW_INSTALL_PATH in case the extension is not in the default location.
 
-The following code snippet let you override the default path: 
+The following code snippet lets you override the default path:
 
  $IP = getenv( 'MW_INSTALL_PATH' );
  if( $IP === false ) {
-       $IP = dirname( __FILE__ ) . '/../..';
+       $IP = __DIR__ . '/../..';
  }
  require_once( "$IP/maintenance/Maintenance.php" ); // a MediaWiki core file
index 74602f2..b3a3495 100644 (file)
@@ -43,7 +43,7 @@ define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 wfProfileIn( 'img_auth.php' );
 
index 5192225..19552bc 100644 (file)
@@ -272,7 +272,7 @@ abstract class Action {
         * must throw subclasses of ErrorPageError
         *
         * @param $user User: the user to check, or null to use the context user
-        * @throws ErrorPageError
+        * @throws UserBlockedError|ReadOnlyError|PermissionsError
         * @return bool True on success
         */
        protected function checkCanExecute( User $user ) {
@@ -546,6 +546,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
         * @return Bool whether execution was successful
         */
        public function execute( array $data = null, $captureErrors = true ) {
index a3fb747..7367812 100644 (file)
@@ -57,10 +57,17 @@ class Article extends Page {
        public $mParserOptions;
 
        /**
-        * Content of the revision we are working on
+        * Text of the revision we are working on
         * @var string $mContent
         */
-       var $mContent;                    // !<
+       var $mContent;                    // !< #BC cruft
+
+       /**
+        * Content of the revision we are working on
+        * @var Content
+        * @since 1.21
+        */
+       var $mContentObject;              // !<
 
        /**
         * Is the content ($mContent) already loaded?
@@ -231,9 +238,32 @@ class Article extends Page {
         * This function has side effects! Do not use this function if you
         * only want the real revision text if any.
         *
+        * @deprecated in 1.21; use WikiPage::getContent() instead
+        *
         * @return string Return the text of this revision
         */
        public function getContent() {
+               wfDeprecated( __METHOD__, '1.21' );
+               $content = $this->getContentObject();
+               return ContentHandler::getContentText( $content );
+       }
+
+       /**
+        * Returns a Content object representing the pages effective display content,
+        * not necessarily the revision's content!
+        *
+        * Note that getContent/loadContent do not follow redirects anymore.
+        * If you need to fetch redirectable content easily, try
+        * the shortcut in WikiPage::getRedirectTarget()
+        *
+        * This function has side effects! Do not use this function if you
+        * only want the real revision text if any.
+        *
+        * @return Content Return the content of this revision
+        *
+        * @since 1.21
+        */
+       protected function getContentObject() {
                wfProfileIn( __METHOD__ );
 
                if ( $this->mPage->getID() === 0 ) {
@@ -244,18 +274,20 @@ class Article extends Page {
                                if ( $text === false ) {
                                        $text = '';
                                }
+
+                               $content = ContentHandler::makeContent( $text, $this->getTitle() );
                        } else {
                                $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                               $text = wfMessage( $message )->text();
+                               $content = new MessageContent( $message, null, 'parsemag' );
                        }
                        wfProfileOut( __METHOD__ );
 
-                       return $text;
+                       return $content;
                } else {
-                       $this->fetchContent();
+                       $this->fetchContentObject();
                        wfProfileOut( __METHOD__ );
 
-                       return $this->mContent;
+                       return $this->mContentObject;
                }
        }
 
@@ -336,22 +368,61 @@ class Article extends Page {
         * Get text of an article from database
         * Does *NOT* follow redirects.
         *
+        * @protected
+        * @note this is really internal functionality that should really NOT be used by other functions. For accessing
+        *       article content, use the WikiPage class, especially WikiBase::getContent(). However, a lot of legacy code
+        *       uses this method to retrieve page text from the database, so the function has to remain public for now.
+        *
         * @return mixed string containing article contents, or false if null
+        * @deprecated in 1.21, use WikiPage::getContent() instead
         */
-       function fetchContent() {
-               if ( $this->mContentLoaded ) {
+       function fetchContent() { #BC cruft!
+               wfDeprecated( __METHOD__, '1.21' );
+
+               if ( $this->mContentLoaded && $this->mContent ) {
                        return $this->mContent;
                }
 
                wfProfileIn( __METHOD__ );
 
+               $content = $this->fetchContentObject();
+
+               $this->mContent = ContentHandler::getContentText( $content ); #@todo: get rid of mContent everywhere!
+               ContentHandler::runLegacyHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
+
+               wfProfileOut( __METHOD__ );
+
+               return $this->mContent;
+       }
+
+
+       /**
+        * Get text content object
+        * Does *NOT* follow redirects.
+        * TODO: when is this null?
+        *
+        * @note code that wants to retrieve page content from the database should use WikiPage::getContent().
+        *
+        * @return Content|null
+        *
+        * @since 1.21
+        */
+       protected function fetchContentObject() {
+               if ( $this->mContentLoaded ) {
+                       return $this->mContentObject;
+               }
+
+               wfProfileIn( __METHOD__ );
+
                $this->mContentLoaded = true;
+               $this->mContent = null;
 
                $oldid = $this->getOldID();
 
                # Pre-fill content with error message so that if something
                # fails we'll have something telling us what we intended.
-               $this->mContent = wfMessage( 'missing-revision', $oldid )->plain();
+               //XXX: this isn't page content but a UI message. horrible.
+               $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() ) ;
 
                if ( $oldid ) {
                        # $this->mRevision might already be fetched by getOldIDFromRequest()
@@ -371,6 +442,7 @@ class Article extends Page {
                        }
 
                        $this->mRevision = $this->mPage->getRevision();
+
                        if ( !$this->mRevision ) {
                                wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " . $this->mPage->getLatest() . "\n" );
                                wfProfileOut( __METHOD__ );
@@ -380,14 +452,14 @@ class Article extends Page {
 
                // @todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
                // We should instead work with the Revision object when we need it...
-               $this->mContent = $this->mRevision->getText( Revision::FOR_THIS_USER ); // Loads if user is allowed
+               $this->mContentObject = $this->mRevision->getContent( Revision::FOR_THIS_USER, $this->getContext()->getUser() ); // Loads if user is allowed
                $this->mRevIdFetched = $this->mRevision->getId();
 
-               wfRunHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
+               wfRunHooks( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
 
                wfProfileOut( __METHOD__ );
 
-               return $this->mContent;
+               return $this->mContentObject;
        }
 
        /**
@@ -420,7 +492,7 @@ class Article extends Page {
         * @return Revision|null
         */
        public function getRevisionFetched() {
-               $this->fetchContent();
+               $this->fetchContentObject();
 
                return $this->mRevision;
        }
@@ -580,7 +652,7 @@ class Article extends Page {
                                        break;
                                case 3:
                                        # This will set $this->mRevision if needed
-                                       $this->fetchContent();
+                                       $this->fetchContentObject();
 
                                        # Are we looking at an old revision
                                        if ( $oldid && $this->mRevision ) {
@@ -604,18 +676,25 @@ class Article extends Page {
                                                wfDebug( __METHOD__ . ": showing CSS/JS source\n" );
                                                $this->showCssOrJsPage();
                                                $outputDone = true;
-                                       } elseif( !wfRunHooks( 'ArticleViewCustom', array( $this->mContent, $this->getTitle(), $outputPage ) ) ) {
+                                       } elseif( !wfRunHooks( 'ArticleContentViewCustom',
+                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+
+                                               # Allow extensions do their own custom view for certain pages
+                                               $outputDone = true;
+                                       } elseif( !ContentHandler::runLegacyHooks( 'ArticleViewCustom',
+                                                       array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+
                                                # Allow extensions do their own custom view for certain pages
                                                $outputDone = true;
                                        } else {
-                                               $text = $this->getContent();
-                                               $rt = Title::newFromRedirectArray( $text );
+                                               $content = $this->getContentObject();
+                                               $rt = $content->getRedirectChain();
                                                if ( $rt ) {
                                                        wfDebug( __METHOD__ . ": showing redirect=no page\n" );
                                                        # Viewing a redirect page (e.g. with parameter redirect=no)
                                                        $outputPage->addHTML( $this->viewRedirect( $rt ) );
                                                        # Parse just to get categories, displaytitle, etc.
-                                                       $this->mParserOutput = $wgParser->parse( $text, $this->getTitle(), $parserOptions );
+                                                       $this->mParserOutput = $content->getParserOutput( $this->getTitle(), $oldid, $parserOptions, false );
                                                        $outputPage->addParserOutputNoText( $this->mParserOutput );
                                                        $outputDone = true;
                                                }
@@ -625,8 +704,9 @@ 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->getContent() );
+                                               $this->getRevIdFetched(), $useParserCache, $this->getContentObject(), $this->getContext() );
 
                                        if ( !$poolArticleView->execute() ) {
                                                $error = $poolArticleView->getError();
@@ -708,6 +788,8 @@ class Article extends Page {
        /**
         * Show a diff page according to current request variables. For use within
         * Article::view() only, other callers should use the DifferenceEngine class.
+        *
+        * @todo: make protected
         */
        public function showDiffPage() {
                $request = $this->getContext()->getRequest();
@@ -719,7 +801,17 @@ class Article extends Page {
                $unhide = $request->getInt( 'unhide' ) == 1;
                $oldid = $this->getOldID();
 
-               $de = new DifferenceEngine( $this->getContext(), $oldid, $diff, $rcid, $purge, $unhide );
+               $rev = $this->getRevisionFetched();
+
+               if ( !$rev ) {
+                       $this->getContext()->getOutput()->setPageTitle( wfMessage( 'errorpagetitle' ) );
+                       $this->getContext()->getOutput()->addWikiMsg( 'difference-missing-revision', $oldid, 1 );
+                       return;
+               }
+
+               $contentHandler = $rev->getContentHandler();
+               $de = $contentHandler->createDifferenceEngine( $this->getContext(), $oldid, $diff, $rcid, $purge, $unhide );
+
                // DifferenceEngine directly fetched the revision:
                $this->mRevIdFetched = $de->mNewid;
                $de->showDiffPage( $diffOnly );
@@ -736,23 +828,24 @@ class Article extends Page {
         *
         * This is hooked by SyntaxHighlight_GeSHi to do syntax highlighting of these
         * page views.
+        *
+        * @param bool $showCacheHint whether to show a message telling the user to clear the browser cache (default: true).
         */
-       protected function showCssOrJsPage() {
-               $dir = $this->getContext()->getLanguage()->getDir();
-               $lang = $this->getContext()->getLanguage()->getCode();
-
+       protected function showCssOrJsPage( $showCacheHint = true ) {
                $outputPage = $this->getContext()->getOutput();
-               $outputPage->wrapWikiMsg( "<div id='mw-clearyourcache' lang='$lang' dir='$dir' class='mw-content-$dir'>\n$1\n</div>",
-                       'clearyourcache' );
+
+               if ( $showCacheHint ) {
+                       $dir = $this->getContext()->getLanguage()->getDir();
+                       $lang = $this->getContext()->getLanguage()->getCode();
+
+                       $outputPage->wrapWikiMsg( "<div id='mw-clearyourcache' lang='$lang' dir='$dir' class='mw-content-$dir'>\n$1\n</div>",
+                               'clearyourcache' );
+               }
 
                // Give hooks a chance to customise the output
-               if ( wfRunHooks( 'ShowRawCssJs', array( $this->mContent, $this->getTitle(), $outputPage ) ) ) {
-                       // Wrap the whole lot in a <pre> and don't parse
-                       $m = array();
-                       preg_match( '!\.(css|js)$!u', $this->getTitle()->getText(), $m );
-                       $outputPage->addHTML( "<pre class=\"mw-code mw-{$m[1]}\" dir=\"ltr\">\n" );
-                       $outputPage->addHTML( htmlspecialchars( $this->mContent ) );
-                       $outputPage->addHTML( "\n</pre>\n" );
+               if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
+                       $po = $this->mContentObject->getParserOutput( $this->getTitle() );
+                       $outputPage->addHTML( $po->getText() );
                }
        }
 
@@ -1243,7 +1336,7 @@ class Article extends Page {
 
                if ( $appendSubtitle ) {
                        $out = $this->getContext()->getOutput();
-                       $out->appendSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
+                       $out->addSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
                }
 
                // the loop prepends the arrow image before the link, so the first case needs to be outside
@@ -1377,7 +1470,13 @@ class Article extends Page {
                // Generate deletion reason
                $hasHistory = false;
                if ( !$reason ) {
-                       $reason = $this->generateReason( $hasHistory );
+                       try {
+                               $reason = $this->generateReason( $hasHistory );
+                       } catch ( MWException $e ) {
+                               # if a page is horribly broken, we still want to be able to delete it. so be lenient about errors here.
+                               wfDebug("Error while building auto delete summary: $e");
+                               $reason = '';
+                       }
                }
 
                // If the page has a history, insert a warning
@@ -1617,19 +1716,39 @@ class Article extends Page {
         * @return ParserOutput or false if the given revsion ID is not found
         */
        public function getParserOutput( $oldid = null, User $user = null ) {
-               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
-               $parserOptions = $this->mPage->makeParserOptions( $user );
+               //XXX: bypasses mParserOptions and thus setParserOptions()
+
+               if ( $user === null ) {
+                       $parserOptions = $this->getParserOptions();
+               } else {
+                       $parserOptions = $this->mPage->makeParserOptions( $user );
+               }
 
                return $this->mPage->getParserOutput( $parserOptions, $oldid );
        }
 
+       /**
+        * Override the ParserOptions used to render the primary article wikitext.
+        *
+        * @param ParserOptions $options
+        * @throws MWException if the parser options where already initialized.
+        */
+       public function setParserOptions( ParserOptions $options ) {
+               if ( $this->mParserOptions ) {
+                       throw new MWException( "can't change parser options after they have already been set" );
+               }
+
+               // clone, so if $options is modified later, it doesn't confuse the parser cache.
+               $this->mParserOptions = clone $options;
+       }
+
        /**
         * Get parser options suitable for rendering the primary article wikitext
         * @return ParserOptions
         */
        public function getParserOptions() {
                if ( !$this->mParserOptions ) {
-                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext()->getUser() );
+                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext() );
                }
                // Clone to allow modifications of the return value without affecting cache
                return clone $this->mParserOptions;
@@ -1761,8 +1880,9 @@ class Article extends Page {
                wfDeprecated( __METHOD__, '1.18' );
                if ( $noRedir ) {
                        $query = 'redirect=no';
-                       if ( $extraQuery )
+                       if ( $extraQuery ) {
                                $query .= "&$extraQuery";
+                       }
                } else {
                        $query = $extraQuery;
                }
@@ -1841,7 +1961,13 @@ class Article extends Page {
         * @return bool
         */
        public function updateRestrictions( $limit = array(), $reason = '', &$cascade = 0, $expiry = array() ) {
-               return $this->mPage->updateRestrictions( $limit, $reason, $cascade, $expiry );
+               return $this->mPage->doUpdateRestrictions(
+                       $limit,
+                       $expiry,
+                       $cascade,
+                       $reason,
+                       $this->getContext()->getUser()
+               );
        }
 
        /**
@@ -1888,7 +2014,9 @@ class Article extends Page {
         * @return mixed
         */
        public function generateReason( &$hasHistory ) {
-               return $this->mPage->getAutoDeleteReason( $hasHistory );
+               $title = $this->mPage->getTitle();
+               $handler = ContentHandler::getForTitle( $title );
+               return $handler->getAutoDeleteReason( $title, $hasHistory );
        }
 
        // ****** B/C functions for static methods ( __callStatic is PHP>=5.3 ) ****** //
@@ -1926,6 +2054,7 @@ class Article extends Page {
         * @param $newtext
         * @param $flags
         * @return string
+        * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
         */
        public static function getAutosummary( $oldtext, $newtext, $flags ) {
                return WikiPage::getAutosummary( $oldtext, $newtext, $flags );
index c7fcf93..2e42439 100644 (file)
@@ -176,6 +176,15 @@ class AuthPlugin {
                return true;
        }
 
+       /**
+        * Should MediaWiki store passwords in its local database?
+        *
+        * @return bool
+        */
+       public function allowSetLocalPassword() {
+               return true;
+       }
+
        /**
         * Set the given password in the authentication database.
         * As a special case, the password may be set to null to request
index 1b46c6a..7deeec0 100644 (file)
@@ -245,6 +245,8 @@ $wgAutoloadLocalClasses = array(
        'StubObject' => 'includes/StubObject.php',
        'StubUserLang' => 'includes/StubObject.php',
        'TablePager' => 'includes/Pager.php',
+       'MWTimestamp' => 'includes/Timestamp.php',
+       'TimestampException' => 'includes/Timestamp.php',
        'Title' => 'includes/Title.php',
        'TitleArray' => 'includes/TitleArray.php',
        'TitleArrayFromResult' => 'includes/TitleArray.php',
@@ -288,6 +290,20 @@ $wgAutoloadLocalClasses = array(
        'ZipDirectoryReader' => 'includes/ZipDirectoryReader.php',
        'ZipDirectoryReaderError' => 'includes/ZipDirectoryReader.php',
 
+       # content handler
+       'AbstractContent' => 'includes/content/AbstractContent.php',
+       'ContentHandler' => 'includes/content/ContentHandler.php',
+       'Content' => 'includes/content/Content.php',
+       'CssContentHandler' => 'includes/content/ContentHandler.php',
+       'CssContent' => 'includes/content/CssContent.php',
+       'JavaScriptContentHandler' => 'includes/content/ContentHandler.php',
+       'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
+       'MessageContent' => 'includes/content/MessageContent.php',
+       'TextContentHandler' => 'includes/content/ContentHandler.php',
+       'TextContent' => 'includes/content/TextContent.php',
+       'WikitextContentHandler' => 'includes/ContentHandler.php',
+       'WikitextContent' => 'includes/content/WikitextContent.php',
+
        # includes/actions
        'CachedAction' => 'includes/actions/CachedAction.php',
        'CreditsAction' => 'includes/actions/CreditsAction.php',
@@ -330,6 +346,7 @@ $wgAutoloadLocalClasses = array(
        'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
        'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php',
        'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
+       'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
        'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
        'ApiFormatRaw' => 'includes/api/ApiFormatRaw.php',
        'ApiFormatTxt' => 'includes/api/ApiFormatTxt.php',
@@ -447,7 +464,6 @@ $wgAutoloadLocalClasses = array(
        'Blob' => 'includes/db/DatabaseUtility.php',
        'ChronologyProtector' => 'includes/db/LBFactory.php',
        'CloneDatabase' => 'includes/db/CloneDatabase.php',
-       'Database' => 'includes/db/DatabaseMysql.php',
        'DatabaseBase' => 'includes/db/Database.php',
        'DatabaseIbm_db2' => 'includes/db/DatabaseIbm_db2.php',
        'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
@@ -1007,6 +1023,13 @@ $wgAutoloadLocalClasses = array(
        'FakeConverter' => 'languages/Language.php',
        'Language' => 'languages/Language.php',
        'LanguageConverter' => 'languages/LanguageConverter.php',
+       'CLDRPluralRuleConverter' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleConverter_Expression' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleConverter_Fragment' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleConverter_Operator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleEvaluator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleEvaluator_Range' => 'languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleEvaluator.php',
 
        # maintenance
        'ConvertLinks' => 'maintenance/convertLinks.php',
@@ -1055,6 +1078,14 @@ $wgAutoloadLocalClasses = array(
        'TestFileIterator' => 'tests/testHelpers.inc',
        'TestRecorder' => 'tests/testHelpers.inc',
 
+       # tests/phpunit
+       'DummyContentHandlerForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
+       'DummyContentForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
+       'JavascriptContentTest' => 'tests/phpunit/includes/JavascriptContentTest.php',
+       'RevisionStorageTest' => 'tests/phpunit/includes/RevisionStorageTest.php',
+       'WikiPageTest' => 'tests/phpunit/includes/WikiPageTest.php',
+       'WikitextContentTest' => 'tests/phpunit/includes/WikitextContentTest.php',
+
        # tests/phpunit/includes
        'GenericArrayObjectTest' => 'tests/phpunit/includes/libs/GenericArrayObjectTest.php',
 
index 9c77855..d7ed2f9 100644 (file)
@@ -157,6 +157,7 @@ class Autopromote {
         *
         * @param $cond Array: A condition, which must not contain other conditions
         * @param $user User The user to check the condition against
+        * @throws MWException
         * @return bool Whether the condition is true for the user
         */
        private static function checkCondition( $cond, User $user ) {
index 2aba29f..ba8691b 100644 (file)
@@ -41,6 +41,8 @@
  * @internal documentation reviewed on 18 Mar 2011 by hashar
  */
 class BacklinkCache {
+       /** @var ProcessCacheLRU */
+       protected static $cache;
 
        /**
         * Multi dimensions array representing batches. Keys are:
@@ -81,12 +83,32 @@ class BacklinkCache {
 
        /**
         * Create a new BacklinkCache
-        * @param Title $title : Title object to create a backlink cache for.
+        *
+        * @param Title $title : Title object to create a backlink cache for
         */
-       function __construct( $title ) {
+       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
@@ -195,6 +217,7 @@ class BacklinkCache {
        /**
         * Get the field name prefix for a given table
         * @param $table String
+        * @throws MWException
         * @return null|string
         */
        protected function getPrefix( $table ) {
@@ -223,6 +246,7 @@ class BacklinkCache {
         * 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 ) {
@@ -265,8 +289,9 @@ class BacklinkCache {
                        default:
                                $conds = null;
                                wfRunHooks( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
-                               if( !$conds )
+                               if( !$conds ) {
                                        throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+                               }
                }
 
                return $conds;
@@ -303,7 +328,7 @@ class BacklinkCache {
         */
        public function partition( $table, $batchSize ) {
 
-               // 1) try partition cache ... 
+               // 1) try partition cache ...
 
                if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
                        wfDebug( __METHOD__ . ": got from partition cache\n" );
@@ -358,7 +383,8 @@ class BacklinkCache {
         * Partition a DB result with backlinks in it into batches
         * @param $res ResultWrapper database result
         * @param $batchSize integer
-        * @return array @see 
+        * @throws MWException
+        * @return array @see
         */
        protected function partitionResult( $res, $batchSize ) {
                $batches = array();
index 6e8f9f3..86b4d13 100644 (file)
@@ -231,6 +231,7 @@ class Block {
         *     3) An autoblock on the given IP
         * @param $vagueTarget User|String also search for blocks affecting this target.  Doesn't
         *     make any sense to use TYPE_AUTO / TYPE_ID here. Leave blank to skip IP lookups.
+        * @throws MWException
         * @return Bool whether a relevant block was found
         */
        protected function newLoad( $vagueTarget = null ) {
@@ -426,6 +427,7 @@ class Block {
        /**
         * Delete the row from the IP blocks table.
         *
+        * @throws MWException
         * @return Boolean
         */
        public function delete() {
@@ -780,6 +782,7 @@ class Block {
 
        /**
         * Get the IP address at the start of the range in Hex form
+        * @throws MWException
         * @return String IP in Hex form
         */
        public function getRangeStart() {
@@ -797,6 +800,7 @@ class Block {
 
        /**
         * Get the IP address at the start of the range in Hex form
+        * @throws MWException
         * @return String IP in Hex form
         */
        public function getRangeEnd() {
@@ -1002,41 +1006,6 @@ class Block {
                return wfGetDB( DB_SLAVE )->getInfinity();
        }
 
-       /**
-        * Convert a DB-encoded expiry into a real string that humans can read.
-        *
-        * @param $encoded_expiry String: Database encoded expiry time
-        * @return Html-escaped String
-        * @deprecated since 1.18; use $wgLang->formatExpiry() instead
-        */
-       public static function formatExpiry( $encoded_expiry ) {
-               wfDeprecated( __METHOD__, '1.18' );
-
-               global $wgContLang;
-               static $msg = null;
-
-               if ( is_null( $msg ) ) {
-                       $msg = array();
-                       $keys = array( 'infiniteblock', 'expiringblock' );
-
-                       foreach ( $keys as $key ) {
-                               $msg[$key] = wfMessage( $key )->escaped();
-                       }
-               }
-
-               $expiry = $wgContLang->formatExpiry( $encoded_expiry, TS_MW );
-               if ( $expiry == wfGetDB( DB_SLAVE )->getInfinity() ) {
-                       $expirystr = $msg['infiniteblock'];
-               } else {
-                       global $wgLang;
-                       $expiredatestr = htmlspecialchars( $wgLang->date( $expiry, true ) );
-                       $expiretimestr = htmlspecialchars( $wgLang->time( $expiry, true ) );
-                       $expirystr = wfMsgReplaceArgs( $msg['expiringblock'], array( $expiredatestr, $expiretimestr ) );
-               }
-
-               return $expirystr;
-       }
-
        /**
         * Convert a submitted expiry time, which may be relative ("2 weeks", etc) or absolute
         * ("24 May 2034"), into an absolute timestamp we can put into the database.
index 8199cb4..ac46fc4 100644 (file)
@@ -143,10 +143,18 @@ class CacheHelper implements ICacheHelper {
         * Function that gets called when initialization is done.
         *
         * @since 1.20
-        * @var function
+        * @var callable
         */
        protected $onInitHandler = false;
 
+       /**
+        * Elements to build a cache key with.
+        *
+        * @since 1.20
+        * @var array
+        */
+       protected $cacheKey = array();
+
        /**
         * Sets if the cache should be enabled or not.
         *
@@ -338,8 +346,13 @@ class CacheHelper implements ICacheHelper {
         * @since 1.20
         *
         * @return string
+        * @throws MWException
         */
        protected function getCacheKeyString() {
+               if ( $this->cacheKey === array() ) {
+                       throw new MWException( 'No cache key set, so cannot obtain or save the CacheHelper values.' );
+               }
+
                return call_user_func_array( 'wfMemcKey', $this->cacheKey );
        }
 
index d9ca234..ffd7bb8 100644 (file)
@@ -44,6 +44,7 @@ class Category {
 
        /**
         * Set up all member variables using a database query.
+        * @throws MWException
         * @return bool True on success, false on failure.
         */
        protected function initialize() {
@@ -297,8 +298,8 @@ class Category {
                        'IGNORE'
                );
 
-               $cond1 = $dbw->conditional( 'page_namespace=' . NS_CATEGORY, 1, 'NULL' );
-               $cond2 = $dbw->conditional( 'page_namespace=' . NS_FILE, 1, 'NULL' );
+               $cond1 = $dbw->conditional( array( 'page_namespace' => NS_CATEGORY ), 1, 'NULL' );
+               $cond2 = $dbw->conditional( array( 'page_namespace' => NS_FILE ), 1, 'NULL' );
                $result = $dbw->selectRow(
                        array( 'categorylinks', 'page' ),
                        array( 'pages' => 'COUNT(*)',
index 4e4f311..3d66b74 100644 (file)
@@ -504,11 +504,11 @@ class CategoryViewer extends ContextSource {
                # Split into three columns
                $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
 
-               $ret = '<table width="100%"><tr valign="top">';
+               $ret = '<table style="width: 100%;"><tr style="vertical-align: top;">';
                $prevchar = null;
 
                foreach ( $columns as $column ) {
-                       $ret .= '<td width="33.3%">';
+                       $ret .= '<td style="width: 33.3%;">';
                        $colContents = array();
 
                        # Kind of like array_flip() here, but we keep duplicates in an
@@ -613,6 +613,7 @@ class CategoryViewer extends ContextSource {
         *
         * @param Title $title: The title (usually $this->title)
         * @param String $section: Which section
+        * @throws MWException
         * @return Title
         */
        private function addFragmentToTitle( $title, $section ) {
index ae2e5b1..2a6a3d2 100644 (file)
@@ -133,8 +133,9 @@ class CdbReader_DBA {
        }
 
        function close() {
-               if( isset($this->handle) )
+               if( isset($this->handle) ) {
                        dba_close( $this->handle );
+               }
                unset( $this->handle );
        }
 
@@ -164,8 +165,9 @@ class CdbWriter_DBA {
        }
 
        function close() {
-               if( isset($this->handle) )
+               if( isset($this->handle) ) {
                        dba_close( $this->handle );
+               }
                if ( wfIsWindows() ) {
                        unlink( $this->realFileName );
                }
index 02be65f..c97cf13 100644 (file)
@@ -126,6 +126,7 @@ class CdbReader_PHP extends CdbReader {
 
        /**
         * @param $fileName string
+        * @throws MWException
         */
        function __construct( $fileName ) {
                $this->fileName = $fileName;
@@ -198,7 +199,8 @@ class CdbReader_PHP extends CdbReader {
        /**
         * Unpack an unsigned integer and throw an exception if it needs more than 31 bits
         * @param $s
-        * @return
+        * @throws MWException
+        * @return mixed
         */
        protected function unpack31( $s ) {
                $data = unpack( 'V', $s );
index 0ebc926..18f425a 100644 (file)
@@ -81,6 +81,7 @@ class ChangeTags {
         * @param $log_id int: log_id of the change to add the tags to
         * @param $params String: params to put in the ct_params field of tabel 'change_tag'
         *
+        * @throws MWException
         * @return bool: false if no changes are made, otherwise true
         *
         * @exception MWException when $rc_id, $rev_id and $log_id are all null
@@ -164,10 +165,9 @@ class ChangeTags {
         * @param $conds String|Array: conditions used in query, see DatabaseBase::select
         * @param $join_conds Array: join conditions, see DatabaseBase::select
         * @param $options Array: options, see Database::select
-        * @param $filter_tag String: tag to select on
-        *
-        * @exception MWException when unable to determine appropriate JOIN condition for tagging
+        * @param bool|string $filter_tag Tag to select on
         *
+        * @throws MWException When unable to determine appropriate JOIN condition for tagging
         */
        static function modifyDisplayQuery( &$tables, &$fields,  &$conds,
                                                                                &$join_conds, &$options, $filter_tag = false ) {
@@ -224,8 +224,9 @@ class ChangeTags {
        public static function buildTagFilterSelector( $selected='', $fullForm = false, Title $title = null ) {
                global $wgUseTagFilter;
 
-               if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) )
+               if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) ) {
                        return $fullForm ? '' : array();
+               }
 
                $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMessage( 'tag-filter' )->parse() ),
                        Xml::input( 'tagfilter', 20, $selected, array( 'class' => 'mw-tagfilter-input' ) ) );
index 8cca4bb..e7395c0 100644 (file)
@@ -345,7 +345,7 @@ class ChangesList extends ContextSource {
                                'action' => 'history'
                        )
                );
-               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' . . ';
+               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' <span class="mw-changeslist-separator">. .</span> ';
        }
 
        /**
@@ -366,7 +366,7 @@ class ChangesList extends ContextSource {
                $articlelink = Linker::linkKnown(
                        $rc->getTitle(),
                        null,
-                       array(),
+                       array( 'class' => 'mw-changeslist-title' ),
                        $params
                );
                if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
@@ -388,8 +388,8 @@ class ChangesList extends ContextSource {
         * @param $rc RecentChange
         */
        public function insertTimestamp( &$s, $rc ) {
-               $s .= $this->message['semicolon-separator'] .
-                       $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . ' . . ';
+               $s .= $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> ';
        }
 
        /**
@@ -628,7 +628,7 @@ class OldChangesList extends ChangesList {
                if ( $wgRCShowChangedSize ) {
                        $cd = $this->formatCharacterDifference( $rc );
                        if ( $cd !== '' ) {
-                               $s .= "$cd  . . ";
+                               $s .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
@@ -994,7 +994,7 @@ class EnhancedChangesList extends ChangesList {
                        $r .= $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
                }
 
-               $r .= ' . . ';
+               $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                # Character difference (does not apply if only log items)
                if( $wgRCShowChangedSize && !$allLogs ) {
@@ -1013,7 +1013,7 @@ class EnhancedChangesList extends ChangesList {
                        if( $chardiff == '' ) {
                                $r .= ' ';
                        } else {
-                               $r .= ' ' . $chardiff. ' . . ';
+                               $r .= ' ' . $chardiff. ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
@@ -1058,21 +1058,22 @@ class EnhancedChangesList extends ChangesList {
                                                array(),
                                                $params
                                        );
-                               if( $this->isDeleted($rcObj,Revision::DELETED_TEXT) )
+                               if( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
                                        $link = '<span class="history-deleted">'.$link.'</span> ';
+                               }
                        }
                        $r .= $link . '</span>';
 
                        if ( !$type == RC_LOG || $type == RC_NEW ) {
                                $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . $this->message['pipe-separator'] . $rcObj->lastlink )->escaped();
                        }
-                       $r .= ' . . ';
+                       $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                        # Character diff
                        if ( $wgRCShowChangedSize ) {
                                $cd = $this->formatCharacterDifference( $rcObj );
                                if ( $cd !== '' ) {
-                                       $r .= "$cd . . ";
+                                       $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
                                }
                        }
 
@@ -1202,12 +1203,12 @@ class EnhancedChangesList extends ChangesList {
                                $query
                        ) )->escaped();
                }
-               $r .= ' . . ';
+               $r .= ' <span class="mw-changeslist-separator">. .</span> ';
                # Character diff
                if ( $wgRCShowChangedSize ) {
                        $cd = $this->formatCharacterDifference( $rcObj );
                        if ( $cd !== '' ) {
-                               $r .= "$cd . . ";
+                               $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
index b68fc76..d304e65 100644 (file)
@@ -159,6 +159,7 @@ class ConfEditor {
         * insert
         *    Insert a new element at the start of the array.
         *
+        * @throws MWException
         * @return string
         */
        public function edit( $ops ) {
@@ -392,6 +393,8 @@ class ConfEditor {
         * Finds the source byte region which you would want to delete, if $pathName
         * was to be deleted. Includes the leading spaces and tabs, the trailing line
         * break, and any comments in between.
+        * @param $pathName
+        * @throws MWException
         * @return array
         */
        function findDeletionRegion( $pathName ) {
@@ -450,6 +453,8 @@ class ConfEditor {
         * or semicolon.
         *
         * The end position is the past-the-end (end + 1) value as per convention.
+        * @param $pathName
+        * @throws MWException
         * @return array
         */
        function findValueRegion( $pathName ) {
index 7984d63..1b86f5d 100644 (file)
@@ -40,14 +40,15 @@ class Cookie {
 
        /**
         * Sets a cookie.  Used before a request to set up any individual
-        * cookies.      Used internally after a request to parse the
+        * cookies. Used internally after a request to parse the
         * Set-Cookie headers.
         *
         * @param $value String: the value of the cookie
         * @param $attr Array: possible key/values:
-        *              expires  A date string
-        *              path     The path this cookie is used on
-        *              domain   Domain this cookie is used on
+        *        expires A date string
+        *        path    The path this cookie is used on
+        *        domain  Domain this cookie is used on
+        * @throws MWException
         */
        public function set( $value, $attr ) {
                $this->value = $value;
index bb80eeb..858eebf 100644 (file)
@@ -83,8 +83,8 @@ class MWCryptRand {
                $files[] = __FILE__;
 
                // We must also have a parent folder, and with the usual file structure, a grandparent
-               $files[] = dirname( __FILE__ );
-               $files[] = dirname( dirname( __FILE__ ) );
+               $files[] = __DIR__;
+               $files[] = dirname( __DIR__ );
 
                // The config file is likely the most often edited file we know should be around
                // so include its stat info into the state.
index 793d335..088bb7e 100644 (file)
@@ -76,6 +76,7 @@ abstract class DataUpdate implements DeferrableUpdate {
         *
         * @static
         * @param $updates array a list of DataUpdate instances
+        * @throws Exception|null
         */
        public static function runUpdates( $updates ) {
                if ( empty( $updates ) ) return; # nothing to do
@@ -84,8 +85,8 @@ abstract class DataUpdate implements DeferrableUpdate {
                $exception = null;
 
                /**
-                * @var $update StorageUpdate
-                * @var $trans StorageUpdate
+                * @var $update DataUpdate
+                * @var $trans DataUpdate
                 */
 
                try {
index 3ea35d5..2e1e82f 100644 (file)
@@ -59,7 +59,7 @@ if( !defined( 'MEDIAWIKI' ) ) {
 $wgConf = new SiteConfiguration;
 
 /** MediaWiki version number */
-$wgVersion = '1.20alpha';
+$wgVersion = '1.21alpha';
 
 /** Name of the site. It must be changed in LocalSettings.php */
 $wgSitename = 'MediaWiki';
@@ -399,7 +399,9 @@ $wgImgAuthPublicTest = true;
  *
  *   - articleUrl        Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1
  *   - fetchDescription  Fetch the text of the remote file description page. Equivalent to
- *                      $wgFetchCommonsDescriptions.
+ *                       $wgFetchCommonsDescriptions.
+ *   - abbrvThreshold    File names over this size will use the short form of thumbnail names.
+ *                       Short thumbnail names only have the width, parameters, and the extension.
  *
  * ForeignDBRepo:
  *   - dbType, dbServer, dbUser, dbPassword, dbName, dbFlags
@@ -509,7 +511,7 @@ $wgSharedUploadDBprefix = '';
 $wgCacheSharedUploads = true;
 
 /**
- * Allow for upload to be copied from an URL. Requires Special:Upload?source=web
+ * Allow for upload to be copied from an URL.
  * The timeout for copy uploads is set by $wgHTTPTimeout.
  * You have to assign the user right 'upload_by_url' to a user group, to use this.
  */
@@ -523,9 +525,17 @@ $wgAllowAsyncCopyUploads = false;
 
 /**
  * A list of domains copy uploads can come from
+ *
+ * @since 1.20
  */
 $wgCopyUploadsDomains = array();
 
+/**
+ * Proxy to use for copy upload requests.
+ * @since 1.20
+ */
+$wgCopyUploadProxy = false;
+
 /**
  * Max size for uploads, in bytes. If not set to an array, applies to all
  * uploads. If set to an array, per upload type maximums can be set, using the
@@ -728,6 +738,18 @@ $wgMediaHandlers = array(
        'image/x-djvu'   => 'DjVuHandler', // compat
 );
 
+/**
+ * Plugins for page content model handling.
+ * Each entry in the array maps a model id to a class name.
+ *
+ * @since 1.21
+ */
+$wgContentHandlers = array(
+       CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler', // the usual case
+       CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler', // dumb version, no syntax highlighting
+       CONTENT_MODEL_CSS => 'CssContentHandler', // dumb version, no syntax highlighting
+);
+
 /**
  * Resizing can be done using PHP's internal image libraries or using
  * ImageMagick or another third-party converter, e.g. GraphicMagick.
@@ -1367,10 +1389,14 @@ $wgAllDBsAreLocalhost = false;
  * $wgSharedTables may be customized with a list of tables to share in the shared
  * datbase. However it is advised to limit what tables you do share as many of
  * MediaWiki's tables may have side effects if you try to share them.
- * EXPERIMENTAL
  *
  * $wgSharedPrefix is the table prefix for the shared database. It defaults to
  * $wgDBprefix.
+ *
+ * @deprecated In new code, use the $wiki parameter to wfGetLB() to access 
+ *   remote databases. Using wfGetLB() allows the shared database to reside on 
+ *   separate servers to the wiki's own database, with suitable configuration 
+ *   of $wgLBFactoryConf.
  */
 $wgSharedDB = null;
 
@@ -1447,7 +1473,7 @@ $wgDBerrorLog = false;
 
 /**
  * Timezone to use in the error log.
- * Defaults to the wiki timezone ($wgLocalTimezone).
+ * Defaults to the wiki timezone ($wgLocaltimezone).
  *
  * A list of useable timezones can found at:
  * http://php.net/manual/en/timezones.php
@@ -1694,6 +1720,8 @@ $wgSessionCacheType = CACHE_ANYTHING;
  * which are used when parsing certain text and interface messages.
  *
  * For available types see $wgMainCacheType.
+ *
+ * @since 1.20
  */
 $wgLanguageConverterCacheType = CACHE_ANYTHING;
 
@@ -1746,7 +1774,7 @@ $wgDBAhandler = 'db3';
 /**
  * Deprecated alias for $wgSessionsInObjectCache.
  *
- * @deprecated Use $wgSessionsInObjectCache
+ * @deprecated since 1.20; Use $wgSessionsInObjectCache
  */
 $wgSessionsInMemcached = false;
 
@@ -2044,6 +2072,8 @@ $wgMaxSquidPurgeTitles = 400;
  * );
  * @endcode
  *
+ * @since 1.20
+ *
  * @see $wgHTCPMulticastTTL
  */
 $wgHTCPMulticastRouting = array();
@@ -2059,13 +2089,13 @@ $wgHTCPMulticastRouting = array();
  * setting is ignored. If $wgHTCPMulticastRouting is not set and this setting
  * is, it is used to populate $wgHTCPMulticastRouting.
  *
- * @deprecated in favor of $wgHTCPMulticastRouting
+ * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting
  */
 $wgHTCPMulticastAddress = false;
 
 /**
  * HTCP multicast port.
- * @deprecated in favor of $wgHTCPMulticastRouting
+ * @deprecated since 1.20 in favor of $wgHTCPMulticastRouting
  * @see $wgHTCPMulticastAddress
  */
 $wgHTCPPort = 4827;
@@ -2628,6 +2658,18 @@ $wgBreakFrames = false;
  */
 $wgEditPageFrameOptions = 'DENY';
 
+/**
+ * Disallow framing of API pages directly, by setting the X-Frame-Options
+ * header. Since the API returns CSRF tokens, allowing the results to be
+ * framed can compromise your user's account security.
+ * Options are:
+ *   - 'DENY': Do not allow framing. This is recommended for most wikis.
+ *   - 'SAMEORIGIN': Allow framing by pages on the same domain.
+ *   - false: Allow all framing.
+ */
+
+$wgApiFrameOptions = 'DENY';
+
 /**
  * Disable output compression (enabled by default if zlib is available)
  */
@@ -2691,14 +2733,14 @@ $wgFooterIcons = array(
  *  - true = use a combined login / create account link
  *  - false = split login and create account into two separate links
  */
-$wgUseCombinedLoginLink = true;
+$wgUseCombinedLoginLink = false;
 
 /**
- * Search form behavior for Vector skin only.
+ * Search form look for Vector skin only.
  *  - true = use an icon search button
  *  - false = use Go & Search buttons
  */
-$wgVectorUseSimpleSearch = false;
+$wgVectorUseSimpleSearch = true;
 
 /**
  * Watch and unwatch as an icon rather than a link for Vector skin only.
@@ -2738,6 +2780,8 @@ $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.
+ *
+ * @since 1.20
  */
 $wgShowRollbackEditCount = 10;
 
@@ -2760,7 +2804,7 @@ $wgShowRollbackEditCount = 10;
  *      'scripts' => 'myExtension.js',
  *      'styles' => 'myExtension.css',
  *      'dependencies' => array( 'jquery.cookie', 'jquery.tabIndex' ),
- *      'localBasePath' => dirname( __FILE__ ),
+ *      'localBasePath' => __DIR__,
  *      'remoteExtPath' => 'MyExtension',
  *   );
  * @endcode
@@ -3196,10 +3240,23 @@ $wgParserConf = array(
 $wgMaxTocLevel = 999;
 
 /**
- * A complexity limit on template expansion
+ * A complexity limit on template expansion: the maximum number of nodes visited
+ * by PPFrame::expand()
  */
 $wgMaxPPNodeCount = 1000000;
 
+/**
+ * A complexity limit on template expansion: the maximum number of elements
+ * generated by Preprocessor::preprocessToObj(). This allows you to limit the
+ * amount of memory used by the Preprocessor_DOM node cache: testing indicates
+ * that each element uses about 160 bytes of memory on a 64-bit processor, so
+ * this default corresponds to about 155 MB.
+ *
+ * When the limit is exceeded, an exception is thrown.
+ */
+$wgMaxGeneratedPPNodeCount = 1000000;
+
+
 /**
  * Maximum recursion depth for templates within templates.
  * The current parser adds two levels to the PHP call stack for each template,
@@ -3553,13 +3610,6 @@ $wgDefaultUserOptions = array(
        'wllimit'                 => 250,
 );
 
-/**
- * Whether or not to allow and use real name fields.
- * @deprecated since 1.16, use $wgHiddenPrefs[] = 'realname' below to disable real
- * names
- */
-$wgAllowRealName = true;
-
 /** An array of preferences to not show for the user */
 $wgHiddenPrefs = array();
 
@@ -4235,9 +4285,21 @@ $wgProxyScriptPath = "$IP/maintenance/proxy_check.php";
 $wgProxyMemcExpiry = 86400;
 /** This should always be customised in LocalSettings.php */
 $wgSecretKey = false;
-/** big list of banned IP addresses, in the keys not the values */
+
+/**
+ * Big list of banned IP addresses.
+ *
+ * This can have the following formats:
+ * - An array of addresses, either in the values
+ *   or the keys (for backward compatibility)
+ * - A string, in that case this is the path to a file
+ *   containing the list of IP addresses, one per line
+ */
 $wgProxyList = array();
-/** deprecated */
+
+/**
+ * @deprecated since 1.14
+ */
 $wgProxyKey = false;
 
 /** @} */ # end of proxy scanner settings
@@ -4375,6 +4437,8 @@ $wgDebugComments = false;
 
 /**
  * Extensive database transaction state debugging
+ *
+ * @since 1.20
  */
 $wgDebugDBTransactions = false;
 
@@ -4651,17 +4715,11 @@ $wgCountTotalSearchHits = false;
  */
 $wgOpenSearchTemplate = false;
 
-/**
- * Enable suggestions while typing in search boxes
- * (results are passed around in OpenSearch format)
- * Requires $wgEnableOpenSearchSuggest = true;
- */
-$wgEnableMWSuggest = false;
-
 /**
  * Enable OpenSearch suggestions requested by MediaWiki. Set this to
- * false if you've disabled MWSuggest or another suggestion script and
- * want reduce load caused by cached scripts pulling suggestions.
+ * false if you've disabled scripts that use api?action=opensearch and
+ * want reduce load caused by cached scripts still pulling suggestions.
+ * It will let the API fallback by responding with an empty array.
  */
 $wgEnableOpenSearchSuggest = true;
 
@@ -4670,14 +4728,6 @@ $wgEnableOpenSearchSuggest = true;
  */
 $wgSearchSuggestCacheExpiry = 1200;
 
-/**
- *  Template for internal MediaWiki suggestion engine, defaults to API action=opensearch
- *
- *  Placeholders: {searchTerms}, {namespaces}, {dbname}
- *
- */
-$wgMWSuggestTemplate = false;
-
 /**
  * If you've disabled search semi-permanently, this also disables updates to the
  * table. If you ever re-enable, be sure to rebuild the search table.
@@ -4892,6 +4942,8 @@ $wgUpgradeKey = false;
  * The value is the replacement for the key (it can contain $1, etc.)
  * %h will be replaced by the short SHA-1 (7 first chars) and %H by the
  * full SHA-1 of the HEAD revision.
+ *
+ * @since 1.20
  */
 $wgGitRepositoryViewers = array(
     'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
@@ -5212,7 +5264,7 @@ $wgExtensionFunctions = array();
  *
  * @par Example:
  * @code
- *    $wgExtensionMessagesFiles['ConfirmEdit'] = dirname(__FILE__).'/ConfirmEdit.i18n.php';
+ *    $wgExtensionMessagesFiles['ConfirmEdit'] = __DIR__.'/ConfirmEdit.i18n.php';
  * @endcode
  */
 $wgExtensionMessagesFiles = array();
@@ -5764,11 +5816,6 @@ $wgActions = array(
  */
 $wgDisabledActions = array();
 
-/**
- * Allow the "info" action, very inefficient at the moment
- */
-$wgAllowPageInfo = false;
-
 /** @} */ # end actions }
 
 /*************************************************************************//**
@@ -6194,8 +6241,45 @@ $wgSeleniumConfigFile = null;
 $wgDBtestuser = ''; //db user that has permission to create and drop the test databases only
 $wgDBtestpassword = '';
 
+/**
+ * Associative array mapping namespace IDs to the name of the content model pages in that namespace should have by
+ * default (use the CONTENT_MODEL_XXX constants). If no special content type is defined for a given namespace,
+ * pages in that namespace will  use the CONTENT_MODEL_WIKITEXT (except for the special case of JS and CS pages).
+ *
+ * @since 1.21
+ */
+$wgNamespaceContentModels = array();
+
+/**
+ * How to react if a plain text version of a non-text Content object is requested using ContentHandler::getContentText():
+ *
+ * * 'ignore': return null
+ * * 'fail': throw an MWException
+ * * 'serialize': serialize to default format
+ *
+ * @since 1.21
+ */
+$wgContentHandlerTextFallback = 'ignore';
+
+/**
+ * Set to false to disable use of the database fields introduced by the ContentHandler facility.
+ * This way, the ContentHandler facility can be used without any additional information in the database.
+ * A page's content model is then derived solely from the page's title. This however means that changing
+ * a page's default model (e.g. using $wgNamespaceContentModels) will break the page and/or make the content
+ * inaccessible. This also means that pages can not be moved to a title that would default to a different
+ * content model.
+ *
+ * Overall, with $wgContentHandlerUseDB = false, no database updates are needed, but content handling
+ * is less robust and less flexible.
+ *
+ * @since 1.21
+ */
+$wgContentHandlerUseDB = true;
+
 /**
  * Whether the user must enter their password to change their e-mail address
+ *
+ * @since 1.20
  */
 $wgRequirePasswordforEmailChange = true;
 
index b4989a6..716e65c 100644 (file)
@@ -92,7 +92,7 @@ class DeferredUpdates {
                                $update->doUpdate();
 
                                if ( $doCommit && $dbw->trxLevel() ) {
-                                       $dbw->commit( __METHOD__ );
+                                       $dbw->commit( __METHOD__, 'flush' );
                                }
                        } catch ( MWException $e ) {
                                // We don't want exceptions thrown during deferred updates to
index 55d9a7a..1bcb058 100644 (file)
@@ -39,7 +39,7 @@ define( 'MW_SPECIALPAGE_VERSION', 2 );
 define( 'DBO_DEBUG', 1 );
 define( 'DBO_NOBUFFER', 2 );
 define( 'DBO_IGNORE', 4 );
-define( 'DBO_TRX', 8 );
+define( 'DBO_TRX', 8 ); // automatically start transaction on first query
 define( 'DBO_DEFAULT', 16 );
 define( 'DBO_PERSISTENT', 32 );
 define( 'DBO_SYSDBA', 64 ); //for oracle maintenance
@@ -205,7 +205,7 @@ define( 'LIST_SET_PREPARED', 8);  // List of (?, ?, ?) for DatabaseIbm_db2
 /**
  * Unicode and normalisation related
  */
-require_once dirname(__FILE__).'/normal/UtfNormalDefines.php';
+require_once __DIR__.'/normal/UtfNormalDefines.php';
 
 /**@{
  * Hook support constants
@@ -261,7 +261,7 @@ define( 'APCOND_BLOCKED', 8 );
 define( 'APCOND_ISBOT', 9 );
 /**@}*/
 
-/**
+/** @{
  * Protocol constants for wfExpandUrl()
  */
 define( 'PROTO_HTTP', 'http://' );
@@ -270,3 +270,35 @@ define( 'PROTO_RELATIVE', '//' );
 define( 'PROTO_CURRENT', null );
 define( 'PROTO_CANONICAL', 1 );
 define( 'PROTO_INTERNAL', 2 );
+/**@}*/
+
+/**@{
+ * Content model ids, used by Content and ContentHandler.
+ * These IDs will be exposed in the API and XML dumps.
+ *
+ * Extensions that define their own content model IDs should take
+ * care to avoid conflicts. Using the extension name as a prefix is recommended,
+ * for example 'myextension-somecontent'.
+ */
+define( 'CONTENT_MODEL_WIKITEXT', 'wikitext' );
+define( 'CONTENT_MODEL_JAVASCRIPT', 'javascript' );
+define( 'CONTENT_MODEL_CSS', 'css' );
+define( 'CONTENT_MODEL_TEXT', 'text' );
+/**@}*/
+
+/**@{
+ * Content formats, used by Content and ContentHandler.
+ * These should be MIME types, and will be exposed in the API and XML dumps.
+ *
+ * Extensions are free to use the below formats, or define their own.
+ * It is recommended to stick with the conventions for MIME types.
+ */
+define( 'CONTENT_FORMAT_WIKITEXT', 'text/x-wiki' ); // wikitext
+define( 'CONTENT_FORMAT_JAVASCRIPT', 'text/javascript' ); // for js pages
+define( 'CONTENT_FORMAT_CSS', 'text/css' );  // for css pages
+define( 'CONTENT_FORMAT_TEXT', 'text/plain' ); // for future use, e.g. with some plain-html messages.
+define( 'CONTENT_FORMAT_HTML', 'text/html' ); // for future use, e.g. with some plain-html messages.
+define( 'CONTENT_FORMAT_SERIALIZED', 'application/vnd.php.serialized' ); // for future use with the api and for extensions
+define( 'CONTENT_FORMAT_JSON', 'application/json' ); // for future use with the api, and for use by extensions
+define( 'CONTENT_FORMAT_XML', 'application/xml' ); // for future use with the api, and for use by extensions
+/**@}*/
index 528b4a6..35328f8 100644 (file)
@@ -155,6 +155,11 @@ class EditPage {
         */
        const AS_IMAGE_REDIRECT_LOGGED     = 234;
 
+       /**
+        * Status: can't parse content
+        */
+       const AS_PARSE_ERROR                = 240;
+
        /**
         * HTML id and name for the beginning of the edit form.
         */
@@ -214,6 +219,7 @@ class EditPage {
        var $textbox1 = '', $textbox2 = '', $summary = '', $nosummary = false;
        var $edittime = '', $section = '', $sectiontitle = '', $starttime = '';
        var $oldid = 0, $editintro = '', $scrolltop = null, $bot = true;
+       var $contentModel = null, $contentFormat = null;
 
        # Placeholders for text injection by hooks (must be HTML)
        # extensions should take care to _append_ to the present value
@@ -225,7 +231,7 @@ class EditPage {
        public $editFormTextBottom = '';
        public $editFormTextAfterContent = '';
        public $previewTextAfterContent = '';
-       public $mPreloadText = '';
+       public $mPreloadContent = null;
 
        /* $didSave should be set to true whenever an article was succesfully altered. */
        public $didSave = false;
@@ -233,12 +239,24 @@ class EditPage {
 
        public $suppressIntro = false;
 
+       /**
+        * Set to true to allow editing of non-text content types.
+        *
+        * @var bool
+        */
+       public $allowNonTextContent = false;
+
        /**
         * @param $article Article
         */
        public function __construct( Article $article ) {
                $this->mArticle = $article;
                $this->mTitle = $article->getTitle();
+
+               $this->contentModel = $this->mTitle->getContentModel();
+
+               $handler = ContentHandler::getForModelID( $this->contentModel );
+               $this->contentFormat = $handler->getDefaultFormat();
        }
 
        /**
@@ -267,7 +285,7 @@ class EditPage {
 
        /**
         * Get the context title object.
-        * If not set, $wgTitle will be returned. This behavior might changed in
+        * If not set, $wgTitle will be returned. This behavior might change in
         * the future to return $this->mTitle instead.
         *
         * @return Title object
@@ -438,6 +456,7 @@ class EditPage {
         * @since 1.19
         * @param $permErrors Array of permissions errors, as returned by
         *                    Title::getUserPermissionsErrors().
+        * @throws PermissionsError
         */
        protected function displayPermissionsError( array $permErrors ) {
                global $wgRequest, $wgOut;
@@ -450,10 +469,10 @@ class EditPage {
                        return;
                }
 
-               $content = $this->getContent();
+               $content = $this->getContentObject();
 
                # Use the normal message if there's nothing to display
-               if ( $this->firsttime && $content === '' ) {
+               if ( $this->firsttime && $content->isEmpty() ) {
                        $action = $this->mTitle->exists() ? 'edit' :
                                ( $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage' );
                        throw new PermissionsError( $action, $permErrors );
@@ -467,13 +486,14 @@ class EditPage {
                # If the user made changes, preserve them when showing the markup
                # (This happens when a user is blocked during edit, for instance)
                if ( !$this->firsttime ) {
-                       $content = $this->textbox1;
+                       $text = $this->textbox1;
                        $wgOut->addWikiMsg( 'viewyourtext' );
                } else {
+                       $text = $this->toEditText( $content );
                        $wgOut->addWikiMsg( 'viewsourcetext' );
                }
 
-               $this->showTextbox( $content, 'wpTextbox1', array( 'readonly' ) );
+               $this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) );
 
                $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
                        Linker::formatTemplates( $this->getTemplates() ) ) );
@@ -711,10 +731,17 @@ class EditPage {
                        }
                }
 
+               $this->oldid = $request->getInt( 'oldid' );
+
                $this->bot = $request->getBool( 'bot', true );
                $this->nosummary = $request->getBool( 'nosummary' );
 
-               $this->oldid = $request->getInt( 'oldid' );
+               $content_handler = ContentHandler::getForTitle( $this->mTitle );
+               $this->contentModel = $request->getText( 'model', $content_handler->getModelID() ); #may be overridden by revision
+               $this->contentFormat = $request->getText( 'format', $content_handler->getDefaultFormat() ); #may be overridden by revision
+
+               #TODO: check if the desired model is allowed in this namespace, and if a transition from the page's current model to the new model is allowed
+               #TODO: check if the desired content model supports the given content format!
 
                $this->live = $request->getCheck( 'live' );
                $this->editintro = $request->getText( 'editintro',
@@ -747,7 +774,10 @@ class EditPage {
        function initialiseForm() {
                global $wgUser;
                $this->edittime = $this->mArticle->getTimestamp();
-               $this->textbox1 = $this->getContent( false );
+
+               $content = $this->getContentObject( false ); #TODO: track content object?!
+               $this->textbox1 = $this->toEditText( $content );
+
                // activate checkboxes if user wants them to be always active
                # Sort out the "watch" checkbox
                if ( $wgUser->getOption( 'watchdefault' ) ) {
@@ -776,33 +806,62 @@ class EditPage {
         * @param $def_text string
         * @return mixed string on success, $def_text for invalid sections
         * @private
+        * @deprecated since 1.21
+        */
+       function getContent( $def_text = false ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               if ( $def_text !== null && $def_text !== false && $def_text !== '' ) {
+                       $def_content = $this->toEditContent( $def_text );
+               } else {
+                       $def_content = false;
+               }
+
+               $content = $this->getContentObject( $def_content );
+
+               // Note: EditPage should only be used with text based content anyway.
+               return $this->toEditText( $content );
+       }
+
+       /**
+        * @param Content|false $def_content The default value to return
+        *
+        * @return mixed Content on success, $def_content for invalid sections
+        *
+        * @since 1.21
         */
-       function getContent( $def_text = '' ) {
-               global $wgOut, $wgRequest, $wgParser;
+       protected function getContentObject( $def_content = null ) {
+               global $wgOut, $wgRequest;
 
                wfProfileIn( __METHOD__ );
 
-               $text = false;
+               $content = false;
 
                // For message page not locally set, use the i18n message.
                // For other non-existent articles, use preload text if any.
                if ( !$this->mTitle->exists() || $this->section == 'new' ) {
                        if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && $this->section != 'new' ) {
                                # If this is a system message, get the default text.
-                               $text = $this->mTitle->getDefaultMessageText();
+                               $msg = $this->mTitle->getDefaultMessageText();
+
+                               $content = $this->toEditContent( $msg );
                        }
-                       if ( $text === false ) {
+                       if ( $content === false ) {
                                # If requested, preload some text.
                                $preload = $wgRequest->getVal( 'preload',
                                        // Custom preload text for new sections
                                        $this->section === 'new' ? 'MediaWiki:addsection-preload' : '' );
-                               $text = $this->getPreloadedText( $preload );
+
+                               $content = $this->getPreloadedContent( $preload );
                        }
                // For existing pages, get text based on "undo" or section parameters.
                } else {
                        if ( $this->section != '' ) {
                                // Get section edit text (returns $def_text for invalid sections)
-                               $text = $wgParser->getSection( $this->getOriginalContent(), $this->section, $def_text );
+                               $orig = $this->getOriginalContent();
+                               $content = $orig ? $orig->getSection( $this->section ) : null;
+
+                               if ( !$content ) $content = $def_content;
                        } else {
                                $undoafter = $wgRequest->getInt( 'undoafter' );
                                $undo = $wgRequest->getInt( 'undo' );
@@ -818,15 +877,16 @@ class EditPage {
 
                                        # Sanity check, make sure it's the right page,
                                        # the revisions exist and they were not deleted.
-                                       # Otherwise, $text will be left as-is.
+                                       # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
                                                $undorev->getPage() == $oldrev->getPage() &&
                                                $undorev->getPage() == $this->mTitle->getArticleID() &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
                                                !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
 
-                                               $text = $this->mArticle->getUndoText( $undorev, $oldrev );
-                                               if ( $text === false ) {
+                                               $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
+
+                                               if ( $content === false ) {
                                                        # Warn the user that something went wrong
                                                        $undoMsg = 'failure';
                                                } else {
@@ -859,14 +919,14 @@ class EditPage {
                                                wfMessage( 'undo-' . $undoMsg )->plain() . '</div>', true, /* interface */true );
                                }
 
-                               if ( $text === false ) {
-                                       $text = $this->getOriginalContent();
+                               if ( $content === false ) {
+                                       $content = $this->getOriginalContent();
                                }
                        }
                }
 
                wfProfileOut( __METHOD__ );
-               return $text;
+               return $content;
        }
 
        /**
@@ -885,39 +945,69 @@ class EditPage {
         */
        private function getOriginalContent() {
                if ( $this->section == 'new' ) {
-                       return $this->getCurrentText();
+                       return $this->getCurrentContent();
                }
                $revision = $this->mArticle->getRevisionFetched();
                if ( $revision === null ) {
-                       return '';
+                       if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+                       $handler = ContentHandler::getForModelID( $this->contentModel );
+
+                       return $handler->makeEmptyContent();
                }
-               return $this->mArticle->getContent();
+               $content = $revision->getContent();
+               return $content;
        }
 
        /**
-        * Get the actual text of the page. This is basically similar to
-        * WikiPage::getRawText() except that when the page doesn't exist an empty
-        * string is returned instead of false.
+        * Get the current content of the page. This is basically similar to
+        * WikiPage::getContent( Revision::RAW ) except that when the page doesn't exist an empty
+        * content object is returned instead of null.
         *
-        * @since 1.19
-        * @return string
+        * @since 1.21
+        * @return Content
         */
-       private function getCurrentText() {
-               $text = $this->mArticle->getRawText();
-               if ( $text === false ) {
-                       return '';
+       protected function getCurrentContent() {
+               $rev = $this->mArticle->getRevision();
+               $content = $rev ? $rev->getContent( Revision::RAW ) : null;
+
+               if ( $content  === false || $content === null ) {
+                       if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+                       $handler = ContentHandler::getForModelID( $this->contentModel );
+
+                       return $handler->makeEmptyContent();
                } else {
-                       return $text;
+                       # nasty side-effect, but needed for consistency
+                       $this->contentModel = $rev->getContentModel();
+                       $this->contentFormat = $rev->getContentFormat();
+
+                       return $content;
                }
        }
 
+
        /**
         * Use this method before edit() to preload some text into the edit box
         *
         * @param $text string
+        * @deprecated since 1.21
         */
        public function setPreloadedText( $text ) {
-               $this->mPreloadText = $text;
+               wfDeprecated( __METHOD__, "1.21" );
+
+               $content = $this->toEditContent( $text );
+
+               $this->setPreloadedContent( $content );
+       }
+
+       /**
+        * Use this method before edit() to preload some content into the edit box
+        *
+        * @param $content Content
+        *
+        * @since 1.21
+        */
+       public function setPreloadedContent( Content $content ) {
+               $this->mPreloadedContent = $content;
        }
 
        /**
@@ -925,23 +1015,47 @@ class EditPage {
         * an earlier setPreloadText() or by loading the given page.
         *
         * @param $preload String: representing the title to preload from.
+        *
         * @return String
+        *
+        * @deprecated since 1.21, use getPreloadedContent() instead
         */
        protected function getPreloadedText( $preload ) {
-               global $wgUser, $wgParser;
+               wfDeprecated( __METHOD__, "1.21" );
+
+               $content = $this->getPreloadedContent( $preload );
+               $text = $this->toEditText( $content );
+
+               return $text;
+       }
+
+       /**
+        * Get the contents to be preloaded into the box, either set by
+        * an earlier setPreloadText() or by loading the given page.
+        *
+        * @param $preload String: representing the title to preload from.
+        *
+        * @return Content
+        *
+        * @since 1.21
+        */
+       protected function getPreloadedContent( $preload ) {
+               global $wgUser;
 
-               if ( !empty( $this->mPreloadText ) ) {
-                       return $this->mPreloadText;
+               if ( !empty( $this->mPreloadContent ) ) {
+                       return $this->mPreloadContent;
                }
 
+               $handler = ContentHandler::getForTitle( $this->getTitle() );
+
                if ( $preload === '' ) {
-                       return '';
+                       return $handler->makeEmptyContent();
                }
 
                $title = Title::newFromText( $preload );
                # Check for existence to avoid getting MediaWiki:Noarticletext
                if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
-                       return '';
+                       return $handler->makeEmptyContent();
                }
 
                $page = WikiPage::factory( $title );
@@ -949,13 +1063,15 @@ class EditPage {
                        $title = $page->getRedirectTarget();
                        # Same as before
                        if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
-                               return '';
+                               return $handler->makeEmptyContent();
                        }
                        $page = WikiPage::factory( $title );
                }
 
                $parserOptions = ParserOptions::newFromUser( $wgUser );
-               return $wgParser->getPreloadText( $page->getRawText(), $title, $parserOptions );
+               $content = $page->getContent( Revision::RAW );
+
+               return $content->preloadTransform( $title, $parserOptions );
        }
 
        /**
@@ -975,6 +1091,7 @@ class EditPage {
 
        /**
         * Attempt submission
+        * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
         * @return bool false if output is done, true if the rest of the form should be displayed
         */
        function attemptSave() {
@@ -1003,6 +1120,10 @@ class EditPage {
                        case self::AS_HOOK_ERROR:
                                return false;
 
+                       case self::AS_PARSE_ERROR:
+                               $wgOut->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>');
+                               return true;
+
                        case self::AS_SUCCESS_NEW_ARTICLE:
                                $query = $resultDetails['redirect'] ? 'redirect=no' : '';
                                $anchor = isset ( $resultDetails['sectionanchor'] ) ? $resultDetails['sectionanchor'] : '';
@@ -1095,9 +1216,19 @@ class EditPage {
                        return $status;
                }
 
+               try {
+                       # Construct Content object
+                       $textbox_content = $this->toEditContent( $this->textbox1 );
+               } catch (MWContentSerializationException $ex) {
+                       $status->fatal( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                       $status->value = self::AS_PARSE_ERROR;
+                       wfProfileOut( __METHOD__ );
+                       return $status;
+               }
+
                # Check image redirect
                if ( $this->mTitle->getNamespace() == NS_FILE &&
-                       Title::newFromRedirect( $this->textbox1 ) instanceof Title &&
+                       $textbox_content->isRedirect() &&
                        !$wgUser->isAllowed( 'upload' ) ) {
                                $code = $wgUser->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
                                $status->setResult( false, $code );
@@ -1239,13 +1370,13 @@ class EditPage {
                                return $status;
                        }
 
-                       $text = $this->textbox1;
+                       $content = $textbox_content;
+
                        $result['sectionanchor'] = '';
                        if ( $this->section == 'new' ) {
                                if ( $this->sectiontitle !== '' ) {
                                        // Insert the section title above the content.
-                                       $text = wfMessage( 'newsectionheaderdefaultlevel', $this->sectiontitle )
-                                               ->inContentLanguage()->text() . "\n\n" . $text;
+                                       $content = $content->addSectionHeader( $this->sectiontitle );
 
                                        // Jump to the new section
                                        $result['sectionanchor'] = $wgParser->guessLegacySectionNameFromWikiText( $this->sectiontitle );
@@ -1256,12 +1387,11 @@ class EditPage {
                                        if ( $this->summary === '' ) {
                                                $cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
                                                $this->summary = wfMessage( 'newsectionsummary', $cleanSectionTitle )
-                                                       ->inContentLanguage()->text();
+                                                       ->inContentLanguage()->text() ;
                                        }
                                } elseif ( $this->summary !== '' ) {
                                        // Insert the section title above the content.
-                                       $text = wfMessage( 'newsectionheaderdefaultlevel', $this->summary )
-                                               ->inContentLanguage()->text() . "\n\n" . $text;
+                                       $content = $content->addSectionHeader( $this->summary );
 
                                        // Jump to the new section
                                        $result['sectionanchor'] = $wgParser->guessLegacySectionNameFromWikiText( $this->summary );
@@ -1275,10 +1405,13 @@ class EditPage {
 
                        $status->value = self::AS_SUCCESS_NEW_ARTICLE;
 
-               } else {
+               } else { # not $new
 
                        # Article exists. Check for edit conflict.
+
+                       $this->mArticle->clear(); # Force reload of dates, etc.
                        $timestamp = $this->mArticle->getTimestamp();
+
                        wfDebug( "timestamp: {$timestamp}, edittime: {$this->edittime}\n" );
 
                        if ( $timestamp != $this->edittime ) {
@@ -1295,7 +1428,8 @@ class EditPage {
                                                $this->isConflict = false;
                                                wfDebug( __METHOD__ . ": conflict suppressed; new section\n" );
                                        }
-                               } elseif ( $this->section == '' && $this->userWasLastToEdit( $wgUser->getId(), $this->edittime ) ) {
+                               } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER,  $this->mTitle->getArticleID(),
+                                                       $wgUser->getId(), $this->edittime ) ) {
                                        # Suppress edit conflict with self, except for section edits where merging is required.
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
                                        $this->isConflict = false;
@@ -1310,26 +1444,32 @@ class EditPage {
                                $sectionTitle = $this->summary;
                        }
 
+                       $content = null;
+
                        if ( $this->isConflict ) {
-                               wfDebug( __METHOD__ . ": conflict! getting section '$this->section' for time '$this->edittime' (article time '{$timestamp}')\n" );
-                               $text = $this->mArticle->replaceSection( $this->section, $this->textbox1, $sectionTitle, $this->edittime );
+                               wfDebug( __METHOD__ . ": conflict! getting section '{$this->section}' for time '{$this->edittime}'"
+                                               . " (article time '{$timestamp}')\n" );
+
+                               $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle, $this->edittime );
                        } else {
-                               wfDebug( __METHOD__ . ": getting section '$this->section'\n" );
-                               $text = $this->mArticle->replaceSection( $this->section, $this->textbox1, $sectionTitle );
+                               wfDebug( __METHOD__ . ": getting section '{$this->section}'\n" );
+                               $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle );
                        }
-                       if ( is_null( $text ) ) {
+
+                       if ( is_null( $content ) ) {
                                wfDebug( __METHOD__ . ": activating conflict; section replace failed.\n" );
                                $this->isConflict = true;
-                               $text = $this->textbox1; // do not try to merge here!
+                               $content = $textbox_content; // do not try to merge here!
                        } elseif ( $this->isConflict ) {
                                # Attempt merge
-                               if ( $this->mergeChangesInto( $text ) ) {
+                               if ( $this->mergeChangesIntoContent( $textbox_content ) ) {
                                        // Successful merge! Maybe we should tell the user the good news?
                                        $this->isConflict = false;
+                                       $content = $textbox_content;
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, successful merge.\n" );
                                } else {
                                        $this->section = '';
-                                       $this->textbox1 = $text;
+                                       #$this->textbox1 = $text; #redundant, nothing to do here?
                                        wfDebug( __METHOD__ . ": Keeping edit conflict, failed merge.\n" );
                                }
                        }
@@ -1341,7 +1481,10 @@ class EditPage {
                        }
 
                        // Run post-section-merge edit filter
-                       if ( !wfRunHooks( 'EditFilterMerged', array( $this, $text, &$this->hookError, $this->summary ) ) ) {
+                       $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;
@@ -1357,8 +1500,8 @@ class EditPage {
 
                        # Handle the user preference to force summaries here, but not for null edits
                        if ( $this->section != 'new' && !$this->allowBlankSummary
-                               && $this->getOriginalContent() != $text
-                               && !Title::newFromRedirect( $text ) ) # check if it's not a redirect
+                               && !$content->equals( $this->getOriginalContent() )
+                               && !$content->isRedirect() ) # check if it's not a redirect
                        {
                                if ( md5( $this->summary ) == $this->autoSumm ) {
                                        $this->missingSummary = true;
@@ -1428,14 +1571,14 @@ class EditPage {
                        // merged the section into full text. Clear the section field
                        // so that later submission of conflict forms won't try to
                        // replace that into a duplicated mess.
-                       $this->textbox1 = $text;
+                       $this->textbox1 = $this->toEditText( $content );
                        $this->section = '';
 
                        $status->value = self::AS_SUCCESS_UPDATE;
                }
 
                // Check for length errors again now that the section is merged in
-               $this->kblength = (int)( strlen( $text ) / 1024 );
+                       $this->kblength = (int)( strlen( $this->toEditText( $content ) ) / 1024 );
                if ( $this->kblength > $wgMaxArticleSize ) {
                        $this->tooBig = true;
                        $status->setResult( false, self::AS_MAX_ARTICLE_SIZE_EXCEEDED );
@@ -1448,10 +1591,11 @@ class EditPage {
                        ( ( $this->minoredit && !$this->isNew ) ? EDIT_MINOR : 0 ) |
                        ( $bot ? EDIT_FORCE_BOT : 0 );
 
-               $doEditStatus = $this->mArticle->doEdit( $text, $this->summary, $flags );
+                       $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
+                                                                                                                       false, null, $this->contentFormat );
 
                if ( $doEditStatus->isOK() ) {
-                       $result['redirect'] = Title::newFromRedirect( $text ) !== null;
+                               $result['redirect'] = $content->isRedirect();
                        $this->commitWatch();
                        wfProfileOut( __METHOD__ );
                        return $status;
@@ -1490,43 +1634,39 @@ class EditPage {
        }
 
        /**
-        * Check if no edits were made by other users since
-        * the time a user started editing the page. Limit to
-        * 50 revisions for the sake of performance.
+        * @private
+        * @todo document
         *
-        * @param $id int
-        * @param $edittime string
+        * @param $editText string
         *
         * @return bool
+        * @deprecated since 1.21, use mergeChangesIntoContent() instead
         */
-       protected function userWasLastToEdit( $id, $edittime ) {
-               if ( !$id ) return false;
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select( 'revision',
-                       'rev_user',
-                       array(
-                               'rev_page' => $this->mTitle->getArticleID(),
-                               'rev_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $edittime ) )
-                       ),
-                       __METHOD__,
-                       array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 50 ) );
-               foreach ( $res as $row ) {
-                       if ( $row->rev_user != $id ) {
-                               return false;
-                       }
+       function mergeChangesInto( &$editText ){
+               wfDebug( __METHOD__, "1.21" );
+
+               $editContent = $this->toEditContent( $editText );
+
+               $ok = $this->mergeChangesIntoContent( $editContent );
+
+               if ( $ok ) {
+                       $editText = $this->toEditText( $editContent );
+                       return true;
+               } else {
+                       return false;
                }
-               return true;
        }
 
        /**
         * @private
         * @todo document
         *
-        * @param $editText string
+        * @parma $editText string
         *
         * @return bool
+        * @since since 1.WD
         */
-       function mergeChangesInto( &$editText ) {
+       private function mergeChangesIntoContent( &$editContent ){
                wfProfileIn( __METHOD__ );
 
                $db = wfGetDB( DB_MASTER );
@@ -1537,7 +1677,7 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return false;
                }
-               $baseText = $baseRevision->getText();
+               $baseContent = $baseRevision->getContent();
 
                // The current state, we want to merge updates into it
                $currentRevision = Revision::loadFromTitle( $db, $this->mTitle );
@@ -1545,11 +1685,14 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return false;
                }
-               $currentText = $currentRevision->getText();
+               $currentContent = $currentRevision->getContent();
+
+               $handler = ContentHandler::getForModelID( $baseContent->getModel() );
 
-               $result = '';
-               if ( wfMerge( $baseText, $editText, $currentText, $result ) ) {
-                       $editText = $result;
+               $result = $handler->merge3( $baseContent, $editContent, $currentContent );
+
+               if ( $result ) {
+                       $editContent = $result;
                        wfProfileOut( __METHOD__ );
                        return true;
                } else {
@@ -1748,6 +1891,54 @@ class EditPage {
                }
        }
 
+       /**
+        * Gets an editable textual representation of the given Content object.
+        * The textual representation can be turned by into a Content object by the
+        * toEditContent() method.
+        *
+        * If the given Content object is not of a type that can be edited using the text base EditPage,
+        * an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
+        * content.
+        *
+        * @param Content $content
+        * @return String the editable text form of the content.
+        *
+        * @throws MWException if $content is not an instance of TextContent and $this->allowNonTextContent is not true.
+        */
+       protected function toEditText( Content $content ) {
+               if ( !$this->allowNonTextContent && !( $content instanceof TextContent ) ) {
+                       throw new MWException( "This content model can not be edited as text: "
+                                                               . ContentHandler::getLocalizedName( $content->getModel() ) );
+               }
+
+               return $content->serialize( $this->contentFormat );
+       }
+
+       /**
+        * Turns the given text into a Content object by unserializing it.
+        *
+        * If the resulting Content object is not of a type that can be edited using the text base EditPage,
+        * an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
+        * content.
+        *
+        * @param String $text Text to unserialize
+        * @return Content the content object created from $text
+        *
+        * @throws MWException if unserializing the text results in a Content object that is not an instance of TextContent
+        *          and $this->allowNonTextContent is not true.
+        */
+       protected function toEditContent( $text ) {
+               $content = ContentHandler::makeContent( $text, $this->getTitle(),
+                       $this->contentModel, $this->contentFormat );
+
+               if ( !$this->allowNonTextContent && !( $content instanceof TextContent ) ) {
+                       throw new MWException( "This content model can not be edited as text: "
+                               . ContentHandler::getLocalizedName( $content->getModel() ) );
+               }
+
+               return $content;
+       }
+
        /**
         * Send the edit form and related headers to $wgOut
         * @param $formCallback Callback that takes an OutputPage parameter; will be called
@@ -1796,6 +1987,8 @@ class EditPage {
                        }
                }
 
+               //@todo: add EditForm plugin interface and use it here!
+               //       search for textarea1 and textares2, and allow EditForm to override all uses.
                $wgOut->addHTML( Html::openElement( 'form', array( 'id' => self::EDITFORM_ID, 'name' => self::EDITFORM_ID,
                        'method' => 'post', 'action' => $this->getActionURL( $this->getContextTitle() ),
                        'enctype' => 'multipart/form-data' ) ) );
@@ -1860,6 +2053,9 @@ class EditPage {
 
                $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) );
 
+               $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
+               $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
+
                if ( $this->section == 'new' ) {
                        $this->showSummaryInput( true, $this->summary );
                        $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) );
@@ -1877,7 +2073,9 @@ class EditPage {
                        // resolved between page source edits and custom ui edits using the
                        // custom edit ui.
                        $this->textbox2 = $this->textbox1;
-                       $this->textbox1 = $this->getCurrentText();
+
+                       $content = $this->getCurrentContent();
+                       $this->textbox1 = $this->toEditText( $content );
 
                        $this->showTextbox1();
                } else {
@@ -1886,10 +2084,6 @@ class EditPage {
 
                $wgOut->addHTML( $this->editFormTextAfterContent );
 
-               $wgOut->addWikiText( $this->getCopywarn() );
-
-               $wgOut->addHTML( $this->editFormTextAfterWarn );
-
                $this->showStandardInputs();
 
                $this->showFormAfterText();
@@ -1907,7 +2101,13 @@ class EditPage {
                        Linker::formatHiddenCategories( $this->mArticle->getHiddenCategories() ) ) );
 
                if ( $this->isConflict ) {
-                       $this->showConflict();
+                       try {
+                               $this->showConflict();
+                       } catch ( MWContentSerializationException $ex ) {
+                               // this can't really happen, but be nice if it does.
+                               $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                               $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>');
+                       }
                }
 
                $wgOut->addHTML( $this->editFormTextBottom . "\n</form>\n" );
@@ -1981,7 +2181,7 @@ class EditPage {
 
                        if ( $this->section != '' && $this->section != 'new' ) {
                                if ( !$this->summary && !$this->preview && !$this->diff ) {
-                                       $sectionTitle = self::extractSectionTitle( $this->textbox1 );
+                                       $sectionTitle = self::extractSectionTitle( $this->textbox1 ); //FIXME: use Content object
                                        if ( $sectionTitle !== false ) {
                                                $this->summary = "/* $sectionTitle */ ";
                                        }
@@ -2102,8 +2302,11 @@ class EditPage {
                                );
                        }
                }
+               # Add header copyright warning
+               $this->showHeaderCopyrightWarning();
        }
 
+
        /**
         * Standard summary input and label (wgSummary), abstracted so EditPage
         * subclasses may reorganize the form.
@@ -2285,10 +2488,10 @@ HTML
                $this->showTextbox( $this->textbox2, 'wpTextbox2', array( 'tabindex' => 6, 'readonly' ) );
        }
 
-       protected function showTextbox( $content, $name, $customAttribs = array() ) {
+       protected function showTextbox( $text, $name, $customAttribs = array() ) {
                global $wgOut, $wgUser;
 
-               $wikitext = $this->safeUnicodeOutput( $content );
+               $wikitext = $this->safeUnicodeOutput( $text );
                if ( strval( $wikitext ) !== '' ) {
                        // Ensure there's a newline at the end, otherwise adding lines
                        // is awkward.
@@ -2332,7 +2535,12 @@ HTML
                $wgOut->addHTML( '</div>' );
 
                if ( $this->formtype == 'diff' ) {
-                       $this->showDiff();
+                       try {
+                               $this->showDiff();
+                       } catch ( MWContentSerializationException $ex ) {
+                               $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                               $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>');
+                       }
                }
        }
 
@@ -2372,24 +2580,33 @@ HTML
                        $oldtext = $this->mTitle->getDefaultMessageText();
                        if( $oldtext !== false ) {
                                $oldtitlemsg = 'defaultmessagetext';
+                               $oldContent = $this->toEditContent( $oldtext );
+                       } else {
+                               $oldContent = null;
                        }
                } else {
-                       $oldtext = $this->mArticle->getRawText();
+                       $oldContent = $this->getOriginalContent();
                }
-               $newtext = $this->mArticle->replaceSection(
-                       $this->section, $this->textbox1, $this->summary, $this->edittime );
 
-               wfRunHooks( 'EditPageGetDiffText', array( $this, &$newtext ) );
+               $textboxContent = $this->toEditContent( $this->textbox1 );
+
+               $newContent = $this->mArticle->replaceSectionContent(
+                                                       $this->section, $textboxContent,
+                                                       $this->summary, $this->edittime );
+
+               ContentHandler::runLegacyHooks( 'EditPageGetDiffText', array( $this, &$newContent ) );
+               wfRunHooks( 'EditPageGetDiffContent', array( $this, &$newContent ) );
 
                $popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
-               $newtext = $wgParser->preSaveTransform( $newtext, $this->mTitle, $wgUser, $popts );
+               $newContent = $newContent->preSaveTransform( $this->mTitle, $wgUser, $popts );
 
-               if ( $oldtext !== false  || $newtext != '' ) {
+               if ( ( $oldContent && !$oldContent->isEmpty() ) || ( $newContent && !$newContent->isEmpty() ) ) {
                        $oldtitle = wfMessage( $oldtitlemsg )->parse();
                        $newtitle = wfMessage( 'yourtext' )->parse();
 
-                       $de = new DifferenceEngine( $this->mArticle->getContext() );
-                       $de->setText( $oldtext, $newtext );
+                       $de = $oldContent->getContentHandler()->createDifferenceEngine( $this->mArticle->getContext() );
+                       $de->setContent( $oldContent, $newContent );
+
                        $difftext = $de->getDiff( $oldtitle, $newtitle );
                        $de->showDiffStyle();
                } else {
@@ -2399,6 +2616,18 @@ HTML
                $wgOut->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
        }
 
+       /**
+        * Show the header copyright warning.
+        */
+       protected function showHeaderCopyrightWarning() {
+               $msg = 'editpage-head-copy-warn';
+               if ( !wfMessage( $msg )->isDisabled() ) {
+                       global $wgOut;
+                       $wgOut->wrapWikiMsg( "<div class='editpage-head-copywarn'>\n$1\n</div>",
+                               'editpage-head-copy-warn' );
+               }
+       }
+
        /**
         * Give a chance for site and per-namespace customizations of
         * terms of service summary link that might exist separately
@@ -2448,7 +2677,7 @@ HTML
                wfRunHooks( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
 
                return "<div id=\"editpage-copywarn\">\n" .
-                       call_user_func_array( "wfMsgNoTrans", $copywarnMsg ) . "\n</div>";
+                       call_user_func_array( 'wfMessage', $copywarnMsg )->plain() . "\n</div>";
        }
 
        protected function showStandardInputs( &$tabindex = 2 ) {
@@ -2463,6 +2692,11 @@ HTML
                $checkboxes = $this->getCheckboxes( $tabindex,
                        array( 'minor' => $this->minoredit, 'watch' => $this->watchthis ) );
                $wgOut->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
+
+               // Show copyright warning.
+               $wgOut->addWikiText( $this->getCopywarn() );
+               $wgOut->addHTML( $this->editFormTextAfterWarn );
+
                $wgOut->addHTML( "<div class='editButtons'>\n" );
                $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
 
@@ -2473,8 +2707,9 @@ HTML
                $edithelpurl = Skin::makeInternalOrExternalUrl( wfMessage( 'edithelppage' )->inContentLanguage()->text() );
                $edithelp = '<a target="helpwindow" href="' . $edithelpurl . '">' .
                        wfMessage( 'edithelp' )->escaped() . '</a> ' .
-                       wfMessage( 'newwindow' )->escaped();
-               $wgOut->addHTML( "      <span class='editHelp'>{$cancel}{$edithelp}</span>\n" );
+                       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" );
        }
 
@@ -2488,8 +2723,12 @@ HTML
                if ( wfRunHooks( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) {
                        $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
 
-                       $de = new DifferenceEngine( $this->mArticle->getContext() );
-                       $de->setText( $this->textbox2, $this->textbox1 );
+                       $content1 = $this->toEditContent( $this->textbox1 );
+                       $content2 = $this->toEditContent( $this->textbox2 );
+
+                       $handler = ContentHandler::getForModelID( $this->contentModel );
+                       $de = $handler->createDifferenceEngine( $this->mArticle->getContext() );
+                       $de->setContent( $content2, $content1 );
                        $de->showDiff(
                                wfMessage( 'yourtext' )->parse(),
                                wfMessage( 'storedversion' )->text()
@@ -2590,6 +2829,7 @@ HTML
 
        /**
         * Get the rendered text for previewing.
+        * @throws MWException
         * @return string
         */
        function getPreviewText() {
@@ -2612,84 +2852,94 @@ HTML
                        return $parsedNote;
                }
 
-               if ( $this->mTriedSave && !$this->mTokenOk ) {
-                       if ( $this->mTokenOkExceptSuffix ) {
-                               $note = wfMessage( 'token_suffix_mismatch' )->text();
-                       } else {
-                               $note = wfMessage( 'session_fail_preview' )->text();
-                       }
-               } elseif ( $this->incompleteForm ) {
-                       $note = wfMessage( 'edit_form_incomplete' )->text();
-               } else {
-                       $note = wfMessage( 'previewnote' )->plain() .
-                               ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
-               }
+               $note = '';
+
+               try {
+                       $content = $this->toEditContent( $this->textbox1 );
+
+                       if ( $this->mTriedSave && !$this->mTokenOk ) {
+                               if ( $this->mTokenOkExceptSuffix ) {
+                                       $note = wfMessage( 'token_suffix_mismatch' )->plain() ;
 
-               $parserOptions = ParserOptions::newFromUser( $wgUser );
-               $parserOptions->setEditSection( false );
-               $parserOptions->setTidy( true );
-               $parserOptions->setIsPreview( true );
-               $parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
-
-               # don't parse non-wikitext pages, show message about preview
-               if ( $this->mTitle->isCssJsSubpage() || !$this->mTitle->isWikitextPage() ) {
-                       if ( $this->mTitle->isCssJsSubpage() ) {
-                               $level = 'user';
-                       } elseif ( $this->mTitle->isCssOrJsPage() ) {
-                               $level = 'site';
-                       } else {
-                               $level = false;
-                       }
-
-                       # Used messages to make sure grep find them:
-                       # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
-                       $class = 'mw-code';
-                       if ( $level ) {
-                               if ( preg_match( "/\\.css$/", $this->mTitle->getText() ) ) {
-                                       $previewtext = "<div id='mw-{$level}csspreview'>\n" . wfMessage( "{$level}csspreview" )->text() . "\n</div>";
-                                       $class .= " mw-css";
-                               } elseif ( preg_match( "/\\.js$/", $this->mTitle->getText() ) ) {
-                                       $previewtext = "<div id='mw-{$level}jspreview'>\n" . wfMessage( "{$level}jspreview" )->text() . "\n</div>";
-                                       $class .= " mw-js";
                                } else {
-                                       throw new MWException( 'A CSS/JS (sub)page but which is not css nor js!' );
+                                       $note = wfMessage( 'session_fail_preview' )->plain() ;
                                }
-                               $parserOutput = $wgParser->parse( $previewtext, $this->mTitle, $parserOptions );
-                               $previewHTML = $parserOutput->getText();
+                       } elseif ( $this->incompleteForm ) {
+                               $note = wfMessage( 'edit_form_incomplete' )->plain() ;
                        } else {
-                               $previewHTML = '';
+                               $note = wfMessage( 'previewnote' )->plain() .
+                                       ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
                        }
 
-                       $previewHTML .= "<pre class=\"$class\" dir=\"ltr\">\n" . htmlspecialchars( $this->textbox1 ) . "\n</pre>\n";
-               } else {
-                       $toparse = $this->textbox1;
-
-                       # If we're adding a comment, we need to show the
-                       # summary as the headline
-                       if ( $this->section == "new" && $this->summary != "" ) {
-                               $toparse = wfMessage( 'newsectionheaderdefaultlevel', $this->summary )->inContentLanguage()->text() . "\n\n" . $toparse;
-                       }
+                       $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
+                       $parserOptions->setEditSection( false );
+                       $parserOptions->setIsPreview( true );
+                       $parserOptions->setIsSectionPreview( !is_null($this->section) && $this->section !== '' );
 
-                       wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) );
+                       # don't parse non-wikitext pages, show message about preview
+                       if ( $this->mTitle->isCssJsSubpage() || $this->mTitle->isCssOrJsPage() ) {
+                               if( $this->mTitle->isCssJsSubpage() ) {
+                                       $level = 'user';
+                               } elseif( $this->mTitle->isCssOrJsPage() ) {
+                                       $level = 'site';
+                               } else {
+                                       $level = false;
+                               }
 
-                       $parserOptions->enableLimitReport();
+                               if ( $content->getModel() == CONTENT_MODEL_CSS ) {
+                                       $format = 'css';
+                               } elseif ( $content->getModel() == CONTENT_MODEL_JAVASCRIPT ) {
+                                       $format = 'js';
+                               } else {
+                                       $format = false;
+                               }
 
-                       $toparse = $wgParser->preSaveTransform( $toparse, $this->mTitle, $wgUser, $parserOptions );
-                       $parserOutput = $wgParser->parse( $toparse, $this->mTitle, $parserOptions );
+                               # Used messages to make sure grep find them:
+                               # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
+                               if( $level && $format ) {
+                                       $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text()  . "</div>";
+                               } else {
+                                       $note = wfMessage( 'previewnote' )->text() ;
+                               }
+                       } else {
+                               $note = wfMessage( 'previewnote' )->text() ;
+                       }
 
-                       $rt = Title::newFromRedirectArray( $this->textbox1 );
+                       $rt = $content->getRedirectChain();
                        if ( $rt ) {
                                $previewHTML = $this->mArticle->viewRedirect( $rt, false );
                        } else {
-                               $previewHTML = $parserOutput->getText();
-                       }
 
-                       $this->mParserOutput = $parserOutput;
-                       $wgOut->addParserOutputNoText( $parserOutput );
+                               # If we're adding a comment, we need to show the
+                               # summary as the headline
+                               if ( $this->section === "new" && $this->summary !== "" ) {
+                                       $content = $content->addSectionHeader( $this->summary );
+                               }
+
+                               $hook_args = array( $this, &$content );
+                               ContentHandler::runLegacyHooks( 'EditPageGetPreviewText', $hook_args );
+                               wfRunHooks( 'EditPageGetPreviewContent', $hook_args );
+
+                               $parserOptions->enableLimitReport();
 
-                       if ( count( $parserOutput->getWarnings() ) ) {
-                               $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
+                               # For CSS/JS pages, we should have called the ShowRawCssJs hook here.
+                               # But it's now deprecated, so never mind
+
+                               $content = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
+                               $parserOutput = $content->getParserOutput( $this->getArticle()->getTitle(), null, $parserOptions );
+
+                               $previewHTML = $parserOutput->getText();
+                               $this->mParserOutput = $parserOutput;
+                               $wgOut->addParserOutputNoText( $parserOutput );
+
+                               if ( count( $parserOutput->getWarnings() ) ) {
+                                       $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
+                               }
                        }
+               } catch ( MWContentSerializationException $ex ) {
+                       $m = wfMessage('content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+                       $note .= "\n\n" . $m->parse();
+                       $previewHTML = '';
                }
 
                if ( $this->isConflict ) {
index 25f90e6..714f73e 100644 (file)
@@ -240,7 +240,6 @@ class MWException extends Exception {
                        }
 
                        echo "</body></html>\n";
-                       die( 1 );
                }
        }
 
@@ -319,13 +318,11 @@ class ErrorPageError extends MWException {
        public $title, $msg, $params;
 
        /**
-        * @todo document
+        * Note: these arguments are keys into wfMessage(), not text!
         *
-        * Note: these arguments are keys into wfMsg(), not text!
-        *
-        * @param $title A title
-        * @param $msg String|Message . In string form, should be a message key
-        * @param $params Array Array to wfMessage()
+        * @param $title string|Message Message key (string) for page title, or a Message object
+        * @param $msg string|Message Message key (string) for error text, or a Message object
+        * @param $params array with parameters to wfMessage()
         */
        function __construct( $title, $msg, $params = null ) {
                $this->title = $title;
@@ -356,9 +353,8 @@ class ErrorPageError extends MWException {
  * @ingroup Exception
  */
 class BadTitleError extends ErrorPageError {
-
        /**
-        * @param $msg string A message key (default: 'badtitletext')
+        * @param $msg string|Message A message key (default: 'badtitletext')
         * @param $params Array parameter to wfMessage()
         */
        function __construct( $msg = 'badtitletext', $params = null ) {
@@ -642,7 +638,7 @@ class MWExceptionHandler {
                                if ( $cmdLine ) {
                                        self::printError( $message );
                                } else {
-                                       self::escapeEchoAndDie( $message );
+                                       echo nl2br( htmlspecialchars( $message ) ) . "\n";
                                }
                        }
                } else {
@@ -656,7 +652,7 @@ class MWExceptionHandler {
                        if ( $cmdLine ) {
                                self::printError( $message );
                        } else {
-                               self::escapeEchoAndDie( $message );
+                               echo nl2br( htmlspecialchars( $message ) ) . "\n";
                        }
                }
        }
@@ -677,17 +673,6 @@ class MWExceptionHandler {
                }
        }
 
-       /**
-        * Print a message after escaping it and converting newlines to <br>
-        * Use this for non-command line failures.
-        *
-        * @param $message string Failure text
-        */
-       private static function escapeEchoAndDie( $message ) {
-               echo nl2br( htmlspecialchars( $message ) ) . "\n";
-               die(1);
-       }
-
        /**
         * Exception handler which simulates the appropriate catch() handling:
         *
index f01fb23..e2b01b5 100644 (file)
@@ -63,7 +63,7 @@ class WikiExporter {
         * @return string
         */
        public static function schemaVersion() {
-               return "0.7";
+               return "0.8";
        }
 
        /**
@@ -83,9 +83,9 @@ class WikiExporter {
         * @param $buffer Int: one of WikiExporter::BUFFER or WikiExporter::STREAM
         * @param $text Int: one of WikiExporter::TEXT or WikiExporter::STUB
         */
-       function __construct( &$db, $history = WikiExporter::CURRENT,
+       function __construct( $db, $history = WikiExporter::CURRENT,
                        $buffer = WikiExporter::BUFFER, $text = WikiExporter::TEXT ) {
-               $this->db =& $db;
+               $this->db = $db;
                $this->history = $history;
                $this->buffer  = $buffer;
                $this->writer  = new XmlDumpWriter();
@@ -498,7 +498,7 @@ class XmlDumpWriter {
                        'xmlns'              => "http://www.mediawiki.org/xml/export-$ver/",
                        'xmlns:xsi'          => "http://www.w3.org/2001/XMLSchema-instance",
                        'xsi:schemaLocation' => "http://www.mediawiki.org/xml/export-$ver/ " .
-                                               "http://www.mediawiki.org/xml/export-$ver.xsd",
+                                               "http://www.mediawiki.org/xml/export-$ver.xsd", #TODO: how do we get a new version up there?
                        'version'            => $ver,
                        'xml:lang'           => $wgLanguageCode ),
                        null ) .
@@ -657,12 +657,6 @@ class XmlDumpWriter {
                        $out .= "      " . Xml::elementClean( 'comment', array(), strval( $row->rev_comment ) ) . "\n";
                }
 
-               if ( $row->rev_sha1 && !( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
-                       $out .= "      " . Xml::element('sha1', null, strval( $row->rev_sha1 ) ) . "\n";
-               } else {
-                       $out .= "      <sha1/>\n";
-               }
-
                $text = '';
                if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
                        $out .= "      " . Xml::element( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
@@ -679,6 +673,34 @@ class XmlDumpWriter {
                                "" ) . "\n";
                }
 
+               if ( $row->rev_sha1 && !( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
+                       $out .= "      " . Xml::element('sha1', null, strval( $row->rev_sha1 ) ) . "\n";
+               } else {
+                       $out .= "      <sha1/>\n";
+               }
+
+               if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model )  ) {
+                       $content_model = strval( $row->rev_content_model );
+               } else {
+                       // probably using $wgContentHandlerUseDB = false;
+                       // @todo: test!
+                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       $content_model = ContentHandler::getDefaultModelFor( $title );
+               }
+
+               $out .= "      " . Xml::element('model', null, strval( $content_model ) ) . "\n";
+
+               if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
+                       $content_format = strval( $row->rev_content_format );
+               } else {
+                       // probably using $wgContentHandlerUseDB = false;
+                       // @todo: test!
+                       $content_handler = ContentHandler::getForModelID( $content_model );
+                       $content_format = $content_handler->getDefaultFormat();
+               }
+
+               $out .= "      " . Xml::element('format', null, strval( $content_format ) ) . "\n";
+
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
 
                $out .= "    </revision>\n";
@@ -1325,6 +1347,7 @@ class DumpNamespaceFilter extends DumpFilter {
        /**
         * @param $sink DumpOutput
         * @param $param
+        * @throws MWException
         */
        function __construct( &$sink, $param ) {
                parent::__construct( $sink );
index 61d4ef7..1b7c29d 100644 (file)
  */
 class ExternalStore {
        var $mParams;
-       
+
+       /**
+        * @param $params array
+        */
        function __construct( $params = array() ) {
                $this->mParams = $params;
        }
-       
+
        /**
         * Fetch data from given URL
         *
@@ -50,8 +53,9 @@ class ExternalStore {
        static function fetchFromURL( $url, $params = array() ) {
                global $wgExternalStores;
 
-               if( !$wgExternalStores )
+               if( !$wgExternalStores ) {
                        return false;
+               }
 
                $parts = explode( '://', $url, 2 );
 
@@ -66,8 +70,10 @@ class ExternalStore {
                }
 
                $store = self::getStoreObject( $proto, $params );
-               if ( $store === false )
+               if ( $store === false ) {
                        return false;
+               }
+
                return $store->fetchFromURL( $url );
        }
 
@@ -76,15 +82,18 @@ class ExternalStore {
         *
         * @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 subclass or false on error
+        * @return ExternalStore|bool ExternalStore class or false on error
         */
        static function getStoreObject( $proto, $params = array() ) {
                global $wgExternalStores;
-               if( !$wgExternalStores )
+               if( !$wgExternalStores ) {
                        return false;
+               }
+
                /* Protocol not enabled */
-               if( !in_array( $proto, $wgExternalStores ) )
+               if( !in_array( $proto, $wgExternalStores ) ) {
                        return false;
+               }
 
                $class = 'ExternalStore' . ucfirst( $proto );
                /* Any custom modules should be added to $wgAutoLoadClasses for on-demand loading */
@@ -113,7 +122,7 @@ class ExternalStore {
                        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
@@ -121,7 +130,8 @@ class ExternalStore {
         *
         * @param $data String
         * @param $storageParams Array: associative array of parameters for the ExternalStore object.
-        * @return string The URL of the stored data item, or false on error
+        * @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;
@@ -159,7 +169,7 @@ class ExternalStore {
                        throw new MWException( "Unable to store text to external storage" );
                }
        }
-       
+
        /**
         * @param $data
         * @param $wiki
index 6f2b33e..37b1b93 100644 (file)
@@ -26,6 +26,9 @@
  */
 class ExternalStoreDB {
 
+       /**
+        * @param $params array
+        */
        function __construct( $params = array() ) {
                $this->mParams = $params;
        }
@@ -97,8 +100,8 @@ class ExternalStoreDB {
         */
        function fetchFromURL( $url ) {
                $path = explode( '/', $url );
-               $cluster  = $path[2];
-               $id       = $path[3];
+               $cluster = $path[2];
+               $id = $path[3];
                if ( isset( $path[4] ) ) {
                        $itemID = $path[4];
                } else {
@@ -165,6 +168,7 @@ class ExternalStoreDB {
         *
         * @param $cluster String: the cluster name
         * @param $data String: the data item
+        * @throws MWException
         * @return string URL
         */
        function store( $cluster, $data ) {
index 11b2675..b0a0e2b 100644 (file)
@@ -138,13 +138,23 @@ class FeedUtils {
                        $diffText = '';
                        // Don't bother generating the diff if we won't be able to show it
                        if ( $wgFeedDiffCutoff > 0 ) {
-                               $de = new DifferenceEngine( $title, $oldid, $newid );
-                               $diffText = $de->getDiff(
-                                       wfMessage( 'previousrevision' )->text(), // hack
-                                       wfMessage( 'revisionasof',
-                                       $wgLang->timeanddate( $timestamp ),
-                                       $wgLang->date( $timestamp ),
-                                       $wgLang->time( $timestamp ) )->text() );
+                               $rev = Revision::newFromId( $oldid );
+
+                               if ( !$rev ) {
+                                       $diffText = false;
+                               } else {
+                                       $context = clone RequestContext::getMain();
+                                       $context->setTitle( $title );
+
+                                       $contentHandler = $rev->getContentHandler();
+                                       $de = $contentHandler->createDifferenceEngine( $context, $oldid, $newid );
+                                       $diffText = $de->getDiff(
+                                               wfMessage( 'previousrevision' )->text(), // hack
+                                               wfMessage( 'revisionasof',
+                                                       $wgLang->timeanddate( $timestamp ),
+                                                       $wgLang->date( $timestamp ),
+                                                       $wgLang->time( $timestamp ) )->text() );
+                               }
                        }
 
                        if ( $wgFeedDiffCutoff <= 0 || ( strlen( $diffText ) > $wgFeedDiffCutoff ) ) {
@@ -162,16 +172,36 @@ class FeedUtils {
                } else {
                        $rev = Revision::newFromId( $newid );
                        if( $wgFeedDiffCutoff <= 0 || is_null( $rev ) ) {
-                               $newtext = '';
+                               $newContent = ContentHandler::getForTitle( $title )->makeEmptyContent();
+                       } else {
+                               $newContent = $rev->getContent();
+                       }
+
+                       if ( $newContent instanceof TextContent ) {
+                               // only textual content has a "source view".
+                               $text = $newContent->getNativeData();
+
+                               if ( $wgFeedDiffCutoff <= 0 || strlen( $text ) > $wgFeedDiffCutoff ) {
+                                       $html = null;
+                               } else {
+                                       $html = nl2br( htmlspecialchars( $text ) );
+                               }
                        } else {
-                               $newtext = $rev->getText();
+                               //XXX: we could get an HTML representation of the content via getParserOutput, but that may
+                               //     contain JS magic and generally may not be suitable for inclusion in a feed.
+                               //     Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+                               //Compare also ApiFeedContributions::feedItemDesc
+                               $html = null;
                        }
-                       if ( $wgFeedDiffCutoff <= 0 || strlen( $newtext ) > $wgFeedDiffCutoff ) {
+
+                       if ( $html === null ) {
+
                                // Omit large new page diffs, bug 29110
+                               // Also use diff link for non-textual content
                                $diffText = self::getDiffLink( $title, $newid );
                        } else {
                                $diffText = '<p><b>' . wfMessage( 'newpage' )->text() . '</b></p>' .
-                                       '<div>' . nl2br( htmlspecialchars( $newtext ) ) . '</div>';
+                                       '<div>' . $html . '</div>';
                        }
                }
                $completeText .= $diffText;
index e75ad72..e2fcd9c 100644 (file)
@@ -144,6 +144,7 @@ class FileDeleteForm {
         * @param $reason String: reason of the deletion
         * @param $suppress Boolean: whether to mark all deleted versions as restricted
         * @param $user User object performing the request
+        * @throws MWException
         * @return bool|Status
         */
        public static function doDelete( &$title, &$file, &$oldimage, $reason, $suppress, User $user = null ) {
@@ -374,8 +375,9 @@ class FileDeleteForm {
                $q = array();
                $q['action'] = 'delete';
 
-               if( $this->oldimage )
+               if( $this->oldimage ) {
                        $q['oldimage'] = $this->oldimage;
+               }
 
                return $this->title->getLocalUrl( $q );
        }
index 33bbd86..f978639 100644 (file)
@@ -83,6 +83,7 @@ class FormOptions implements ArrayAccess {
         * which will be assumed as INT if the data is an integer.
         *
         * @param $data Mixed: value to guess type for
+        * @throws MWException
         * @exception MWException Unsupported datatype
         * @return int Type constant
         */
@@ -105,6 +106,7 @@ class FormOptions implements ArrayAccess {
         *
         * @param $name String: option name
         * @param $strict Boolean: throw an exception when the option does not exist (default false)
+        * @throws MWException
         * @return Boolean: true if option exist, false otherwise
         */
        public function validateName( $name, $strict = false ) {
@@ -205,11 +207,12 @@ class FormOptions implements ArrayAccess {
 
        /**
         * Validate and set an option integer value
-        * The value will be altered to fit in the range. 
+        * The value will be altered to fit in the range.
         *
         * @param $name String: option name
         * @param $min Int: minimum value
         * @param $max Int: maximum value
+        * @throws MWException
         * @exception MWException Option is not of type int
         * @return null
         */
index 4252f55..3de25e7 100644 (file)
@@ -169,6 +169,7 @@ function wfArrayLookup( $a, $b ) {
  * @param $value Mixed
  * @param $default Mixed
  * @param $changed Array to alter
+ * @throws MWException
  */
 function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
        if ( is_null( $changed ) ) {
@@ -391,7 +392,7 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
 
        $cgi = '';
        foreach ( $array1 as $key => $value ) {
-               if ( $value !== false ) {
+               if ( !is_null($value) && $value !== false ) {
                        if ( $cgi != '' ) {
                                $cgi .= '&';
                        }
@@ -412,11 +413,8 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
                        } else {
                                if ( is_object( $value ) ) {
                                        $value = $value->__toString();
-                               } elseif( !is_null( $value ) ) {
-                                       $cgi .= urlencode( $key ) . '=' . urlencode( $value );
-                               } else {
-                                       $cgi .= urlencode( $key );
                                }
+                               $cgi .= urlencode( $key ) . '=' . urlencode( $value );
                        }
                }
        }
@@ -443,15 +441,14 @@ function wfCgiToArray( $query ) {
                        continue;
                }
                if ( strpos( $bit, '=' ) === false ) {
-                       // Pieces like &qwerty become 'qwerty' => null
-                       $key = urldecode( $bit );
-                       $value = null;
+                       // Pieces like &qwerty become 'qwerty' => '' (at least this is what php does)
+                       $key = $bit;
+                       $value = '';
                } else {
                        list( $key, $value ) = explode( '=', $bit );
-                       $key = urldecode( $key );
-                       $value = urldecode( $value );
                }
-
+               $key = urldecode( $key );
+               $value = urldecode( $value );
                if ( strpos( $key, '[' ) !== false ) {
                        $keys = array_reverse( explode( '[', $key ) );
                        $key = array_pop( $keys );
@@ -476,15 +473,23 @@ function wfCgiToArray( $query ) {
  * Append a query string to an existing URL, which may or may not already
  * have query string parameters already. If so, they will be combined.
  *
- * @deprecated in 1.20. Use Uri class.
  * @param $url String
  * @param $query Mixed: string or associative array
  * @return string
  */
 function wfAppendQuery( $url, $query ) {
-       $obj = new Uri( $url );
-       $obj->extendQuery( $query );
-       return $obj->toString();
+       if ( is_array( $query ) ) {
+               $query = wfArrayToCgi( $query );
+       }
+       if( $query != '' ) {
+               if( false === strpos( $url, '?' ) ) {
+                       $url .= '?';
+               } else {
+                       $url .= '&';
+               }
+               $url .= $query;
+       }
+       return $url;
 }
 
 /**
@@ -572,13 +577,49 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
  * @todo Need to integrate this into wfExpandUrl (bug 32168)
  *
  * @since 1.19
- * @deprecated
  * @param $urlParts Array URL parts, as output from wfParseUrl
  * @return string URL assembled from its component parts
  */
 function wfAssembleUrl( $urlParts ) {
-       $obj = new Uri( $urlParts );
-       return $obj->toString();
+       $result = '';
+
+       if ( isset( $urlParts['delimiter'] ) ) {
+               if ( isset( $urlParts['scheme'] ) ) {
+                       $result .= $urlParts['scheme'];
+               }
+
+               $result .= $urlParts['delimiter'];
+       }
+
+       if ( isset( $urlParts['host'] ) ) {
+               if ( isset( $urlParts['user'] ) ) {
+                       $result .= $urlParts['user'];
+                       if ( isset( $urlParts['pass'] ) ) {
+                               $result .= ':' . $urlParts['pass'];
+                       }
+                       $result .= '@';
+               }
+
+               $result .= $urlParts['host'];
+
+               if ( isset( $urlParts['port'] ) ) {
+                       $result .= ':' . $urlParts['port'];
+               }
+       }
+
+       if ( isset( $urlParts['path'] ) ) {
+               $result .= $urlParts['path'];
+       }
+
+       if ( isset( $urlParts['query'] ) ) {
+               $result .= '?' . $urlParts['query'];
+       }
+
+       if ( isset( $urlParts['fragment'] ) ) {
+               $result .= '#' . $urlParts['fragment'];
+       }
+
+       return $result;
 }
 
 /**
@@ -725,13 +766,61 @@ function wfUrlProtocolsWithoutProtRel() {
  * 2) Handles protocols that don't use :// (e.g., mailto: and news: , as well as protocol-relative URLs) correctly
  * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2))
  *
- * @deprecated
  * @param $url String: a URL to parse
  * @return Array: bits of the URL in an associative array, per PHP docs
  */
 function wfParseUrl( $url ) {
-       $obj = new Uri( $url );
-       return $obj->getComponents();
+       global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
+
+       // Protocol-relative URLs are handled really badly by parse_url(). It's so bad that the easiest
+       // way to handle them is to just prepend 'http:' and strip the protocol out later
+       $wasRelative = substr( $url, 0, 2 ) == '//';
+       if ( $wasRelative ) {
+               $url = "http:$url";
+       }
+       wfSuppressWarnings();
+       $bits = parse_url( $url );
+       wfRestoreWarnings();
+       // parse_url() returns an array without scheme for some invalid URLs, e.g.
+       // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' )
+       if ( !$bits || !isset( $bits['scheme'] ) ) {
+               return false;
+       }
+
+       // parse_url() incorrectly handles schemes case-sensitively. Convert it to lowercase.
+       $bits['scheme'] = strtolower( $bits['scheme'] );
+
+       // most of the protocols are followed by ://, but mailto: and sometimes news: not, check for it
+       if ( in_array( $bits['scheme'] . '://', $wgUrlProtocols ) ) {
+               $bits['delimiter'] = '://';
+       } elseif ( in_array( $bits['scheme'] . ':', $wgUrlProtocols ) ) {
+               $bits['delimiter'] = ':';
+               // parse_url detects for news: and mailto: the host part of an url as path
+               // We have to correct this wrong detection
+               if ( isset( $bits['path'] ) ) {
+                       $bits['host'] = $bits['path'];
+                       $bits['path'] = '';
+               }
+       } else {
+               return false;
+       }
+
+       /* Provide an empty host for eg. file:/// urls (see bug 28627) */
+       if ( !isset( $bits['host'] ) ) {
+               $bits['host'] = '';
+
+               /* parse_url loses the third / for file:///c:/ urls (but not on variants) */
+               if ( substr( $bits['path'], 0, 1 ) !== '/' ) {
+                       $bits['path'] = '/' . $bits['path'];
+               }
+       }
+
+       // If the URL was protocol-relative, fix scheme and delimiter
+       if ( $wasRelative ) {
+               $bits['scheme'] = '';
+               $bits['delimiter'] = '//';
+       }
+       return $bits;
 }
 
 /**
@@ -847,10 +936,7 @@ function wfMatchesDomainList( $url, $domains ) {
  * @param $logonly Bool: set true to avoid appearing in HTML when $wgDebugComments is set
  */
 function wfDebug( $text, $logonly = false ) {
-       global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly, $wgDebugRawPage;
-       global $wgDebugLogPrefix, $wgShowDebug;
-
-       static $cache = array(); // Cache of unoutputted messages
+       global $wgDebugLogFile, $wgProfileOnly, $wgDebugRawPage, $wgDebugLogPrefix;
 
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
@@ -861,15 +947,10 @@ function wfDebug( $text, $logonly = false ) {
                $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
        }
 
-       if ( ( $wgDebugComments || $wgShowDebug ) && !$logonly ) {
-               $cache[] = $text;
-
-               if ( isset( $wgOut ) && is_object( $wgOut ) ) {
-                       // add the message and any cached messages to the output
-                       array_map( array( $wgOut, 'debug' ), $cache );
-                       $cache = array();
-               }
+       if ( !$logonly ) {
+               MWDebug::debugMsg( $text );
        }
+
        if ( wfRunHooks( 'Debug', array( $text, null /* no log group */ ) ) ) {
                if ( $wgDebugLogFile != '' && !$wgProfileOnly ) {
                        # Strip unprintables; they can switch terminal modes when binary data
@@ -879,8 +960,6 @@ function wfDebug( $text, $logonly = false ) {
                        wfErrorLog( $text, $wgDebugLogFile );
                }
        }
-
-       MWDebug::debugMsg( $text );
 }
 
 /**
@@ -1007,35 +1086,7 @@ function wfLogDBError( $text ) {
  * @return null
  */
 function wfDeprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
-       static $functionsWarned = array();
-
-       MWDebug::deprecated( $function, $version, $component );
-
-       if ( !isset( $functionsWarned[$function] ) ) {
-               $functionsWarned[$function] = true;
-
-               if ( $version ) {
-                       global $wgDeprecationReleaseLimit;
-
-                       if ( $wgDeprecationReleaseLimit && $component === false ) {
-                               # Strip -* off the end of $version so that branches can use the
-                               # format #.##-branchname to avoid issues if the branch is merged into
-                               # a version of MediaWiki later than what it was branched from
-                               $comparableVersion = preg_replace( '/-.*$/', '', $version );
-
-                               # If the comparableVersion is larger than our release limit then
-                               # skip the warning message for the deprecation
-                               if ( version_compare( $wgDeprecationReleaseLimit, $comparableVersion, '<' ) ) {
-                                       return;
-                               }
-                       }
-
-                       $component = $component === false ? 'MediaWiki' : $component;
-                       wfWarn( "Use of $function was deprecated in $component $version.", $callerOffset );
-               } else {
-                       wfWarn( "Use of $function is deprecated.", $callerOffset );
-               }
-       }
+       MWDebug::deprecated( $function, $version, $component, $callerOffset + 1 );
 }
 
 /**
@@ -1049,34 +1100,7 @@ function wfDeprecated( $function, $version = false, $component = false, $callerO
  *        is true
  */
 function wfWarn( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
-       global $wgDevelopmentWarnings;
-
-       MWDebug::warning( $msg, $callerOffset + 2 );
-
-       $callers = wfDebugBacktrace();
-       if ( isset( $callers[$callerOffset + 1] ) ) {
-               $callerfunc = $callers[$callerOffset + 1];
-               $callerfile = $callers[$callerOffset];
-               if ( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ) {
-                       $file = $callerfile['file'] . ' at line ' . $callerfile['line'];
-               } else {
-                       $file = '(internal function)';
-               }
-               $func = '';
-               if ( isset( $callerfunc['class'] ) ) {
-                       $func .= $callerfunc['class'] . '::';
-               }
-               if ( isset( $callerfunc['function'] ) ) {
-                       $func .= $callerfunc['function'];
-               }
-               $msg .= " [Called from $func in $file]";
-       }
-
-       if ( $wgDevelopmentWarnings ) {
-               trigger_error( $msg, $level );
-       } else {
-               wfDebug( "$msg\n" );
-       }
+       MWDebug::warning( $msg, $callerOffset + 1, $level );
 }
 
 /**
@@ -1087,6 +1111,7 @@ function wfWarn( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
  *
  * @param $text String
  * @param $file String filename
+ * @throws MWException
  */
 function wfErrorLog( $text, $file ) {
        if ( substr( $file, 0, 4 ) == 'udp:' ) {
@@ -1519,8 +1544,6 @@ function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true
 /**
  * Replace message parameter keys on the given formatted output.
  *
- * @deprecated since 1.18
- *
  * @param $message String
  * @param $args Array
  * @return string
@@ -1698,6 +1721,7 @@ function wfEmptyMsg( $key ) {
  * but now throws an exception instead, with similar results.
  *
  * @param $msg String: message shown when dying.
+ * @throws MWException
  */
 function wfDebugDieBacktrace( $msg = '' ) {
        throw new MWException( $msg );
@@ -1859,16 +1883,15 @@ function wfBacktrace() {
  * wfGetCaller( 3 ) is the parent of that.
  *
  * @param $level Int
- * @return Bool|string
+ * @return string
  */
 function wfGetCaller( $level = 2 ) {
        $backtrace = wfDebugBacktrace( $level + 1 );
        if ( isset( $backtrace[$level] ) ) {
                return wfFormatStackFrame( $backtrace[$level] );
        } else {
-               $caller = 'unknown';
+               return 'unknown';
        }
-       return $caller;
 }
 
 /**
@@ -1892,7 +1915,7 @@ function wfGetAllCallers( $limit = 3 ) {
  * Return a string representation of frame
  *
  * @param $frame Array
- * @return Bool
+ * @return string
  */
 function wfFormatStackFrame( $frame ) {
        return isset( $frame['class'] ) ?
@@ -2308,11 +2331,7 @@ function wfSuppressWarnings( $end = false ) {
                }
        } else {
                if ( !$suppressCount ) {
-                       // E_DEPRECATED is undefined in PHP 5.2
-                       if( !defined( 'E_DEPRECATED' ) ) {
-                               define( 'E_DEPRECATED', 8192 );
-                       }
-                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED ) );
+                       $originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE | E_DEPRECATED | E_USER_DEPRECATED ) );
                }
                ++$suppressCount;
        }
@@ -2393,118 +2412,13 @@ define( 'TS_ISO_8601_BASIC', 9 );
  * @return Mixed: String / false The same date in the format specified in $outputtype or false
  */
 function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
-       $uts = 0;
-       $da = array();
-       $strtime = '';
-
-       if ( !$ts ) { // We want to catch 0, '', null... but not date strings starting with a letter.
-               $uts = time();
-               $strtime = "@$uts";
-       } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
-               # TS_DB
-       } elseif ( preg_match( '/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
-               # TS_EXIF
-       } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) {
-               # TS_MW
-       } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) {
-               # TS_UNIX
-               $uts = $ts;
-               $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php
-       } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) {
-               # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6
-               $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3",
-                               str_replace( '+00:00', 'UTC', $ts ) );
-       } elseif ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) {
-               # TS_ISO_8601
-       } elseif ( preg_match( '/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) {
-               #TS_ISO_8601_BASIC
-       } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d*[\+\- ](\d\d)$/', $ts, $da ) ) {
-               # TS_POSTGRES
-       } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/', $ts, $da ) ) {
-               # TS_POSTGRES
-       } elseif (preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.\d\d\d$/', $ts, $da ) ) {
-               # TS_DB2
-       } elseif ( preg_match( '/^[ \t\r\n]*([A-Z][a-z]{2},[ \t\r\n]*)?' . # Day of week
-                                                       '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' .  # dd Mon yyyy
-                                                       '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S', $ts ) ) { # hh:mm:ss
-               # TS_RFC2822, accepting a trailing comment. See http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html / r77171
-               # The regex is a superset of rfc2822 for readability
-               $strtime = strtok( $ts, ';' );
-       } elseif ( preg_match( '/^[A-Z][a-z]{5,8}, \d\d-[A-Z][a-z]{2}-\d{2} \d\d:\d\d:\d\d/', $ts ) ) {
-               # TS_RFC850
-               $strtime = $ts;
-       } elseif ( preg_match( '/^[A-Z][a-z]{2} [A-Z][a-z]{2} +\d{1,2} \d\d:\d\d:\d\d \d{4}/', $ts ) ) {
-               # asctime
-               $strtime = $ts;
-       } else {
-               # Bogus value...
+       try {
+               $timestamp = new MWTimestamp( $ts );
+               return $timestamp->getTimestamp( $outputtype );
+       } catch( TimestampException $e ) {
                wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
-
                return false;
        }
-
-       static $formats = array(
-               TS_UNIX => 'U',
-               TS_MW => 'YmdHis',
-               TS_DB => 'Y-m-d H:i:s',
-               TS_ISO_8601 => 'Y-m-d\TH:i:s\Z',
-               TS_ISO_8601_BASIC => 'Ymd\THis\Z',
-               TS_EXIF => 'Y:m:d H:i:s', // This shouldn't ever be used, but is included for completeness
-               TS_RFC2822 => 'D, d M Y H:i:s',
-               TS_ORACLE => 'd-m-Y H:i:s.000000', // Was 'd-M-y h.i.s A' . ' +00:00' before r51500
-               TS_POSTGRES => 'Y-m-d H:i:s',
-               TS_DB2 => 'Y-m-d H:i:s',
-       );
-
-       if ( !isset( $formats[$outputtype] ) ) {
-               throw new MWException( 'wfTimestamp() called with illegal output type.' );
-       }
-
-       if ( function_exists( "date_create" ) ) {
-               if ( count( $da ) ) {
-                       $ds = sprintf("%04d-%02d-%02dT%02d:%02d:%02d.00+00:00",
-                               (int)$da[1], (int)$da[2], (int)$da[3],
-                               (int)$da[4], (int)$da[5], (int)$da[6]);
-
-                       $d = date_create( $ds, new DateTimeZone( 'GMT' ) );
-               } elseif ( $strtime ) {
-                       $d = date_create( $strtime, new DateTimeZone( 'GMT' ) );
-               } else {
-                       return false;
-               }
-
-               if ( !$d ) {
-                       wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n");
-                       return false;
-               }
-
-               $output = $d->format( $formats[$outputtype] );
-       } else {
-               if ( count( $da ) ) {
-                       // Warning! gmmktime() acts oddly if the month or day is set to 0
-                       // We may want to handle that explicitly at some point
-                       $uts = gmmktime( (int)$da[4], (int)$da[5], (int)$da[6],
-                               (int)$da[2], (int)$da[3], (int)$da[1] );
-               } elseif ( $strtime ) {
-                       $uts = strtotime( $strtime );
-               }
-
-               if ( $uts === false ) {
-                       wfDebug("wfTimestamp() can't parse the timestamp (non 32-bit time? Update php): $outputtype; $ts\n");
-                       return false;
-               }
-
-               if ( TS_UNIX == $outputtype ) {
-                       return $uts;
-               }
-               $output = gmdate( $formats[$outputtype], $uts );
-       }
-
-       if ( ( $outputtype == TS_RFC2822 ) || ( $outputtype == TS_POSTGRES ) ) {
-               $output .= ' GMT';
-       }
-
-       return $output;
 }
 
 /**
@@ -2601,13 +2515,14 @@ function wfTempDir() {
  * @param $dir String: full path to directory to create
  * @param $mode Integer: chmod value to use, default is $wgDirectoryMode
  * @param $caller String: optional caller param for debugging.
+ * @throws MWException
  * @return bool
  */
 function wfMkdirParents( $dir, $mode = null, $caller = null ) {
        global $wgDirectoryMode;
 
        if ( FileBackend::isStoragePath( $dir ) ) { // sanity
-               throw new MWException( __FUNCTION__ . " given storage path `$dir`.");
+               throw new MWException( __FUNCTION__ . " given storage path '$dir'." );
        }
 
        if ( !is_null( $caller ) ) {
@@ -3111,6 +3026,7 @@ function wfDiff( $before, $after, $params = '-u' ) {
  *
  * @param $req_ver Mixed: the version to check, can be a string, an integer, or
  *                 a float
+ * @throws MWException
  */
 function wfUsePHP( $req_ver ) {
        $php_ver = PHP_VERSION;
@@ -3132,6 +3048,7 @@ function wfUsePHP( $req_ver ) {
  *
  * @param $req_ver Mixed: the version to check, can be a string, an integer, or
  *                 a float
+ * @throws MWException
  */
 function wfUseMW( $req_ver ) {
        global $wgVersion;
@@ -3640,16 +3557,6 @@ function wfBoolToStr( $value ) {
        return $value ? 'true' : 'false';
 }
 
-/**
- * Load an extension messages file
- *
- * @deprecated since 1.16, warnings in 1.18, remove in 1.20
- * @codeCoverageIgnore
- */
-function wfLoadExtensionMessages() {
-       wfDeprecated( __FUNCTION__, '1.16' );
-}
-
 /**
  * Get a platform-independent path to the null file, e.g. /dev/null
  *
index 4fc4338..ef24b62 100644 (file)
@@ -248,6 +248,7 @@ class HTMLForm extends ContextSource {
         * Set format in which to display the form
         * @param $format String the name of the format to use, must be one of
         *        $this->availableDisplayFormats
+        * @throws MWException
         * @since 1.20
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -279,6 +280,7 @@ class HTMLForm extends ContextSource {
         * Initialise a new Object for the field
         * @param $fieldname string
         * @param $descriptor string input Descriptor, as described above
+        * @throws MWException
         * @return HTMLFormField subclass
         */
        static function loadInputFromParameters( $fieldname, $descriptor ) {
@@ -312,6 +314,7 @@ class HTMLForm extends ContextSource {
         * @attention When doing method chaining, that should be the very last
         * method call before displayForm().
         *
+        * @throws MWException
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
        function prepareForm() {
@@ -375,9 +378,10 @@ class HTMLForm extends ContextSource {
        /**
         * Validate all the fields, and call the submision callback
         * function if everything is kosher.
+        * @throws MWException
         * @return Mixed Bool true == Successful submission, Bool false
-        *       == No submission attempted, anything else == Error to
-        *       display.
+        *     == No submission attempted, anything else == Error to
+        *     display.
         */
        function trySubmit() {
                # Check for validation
@@ -1100,6 +1104,28 @@ abstract class HTMLFormField {
         */
        abstract function getInputHTML( $value );
 
+       /**
+        * Get a translated interface message
+        *
+        * This is a wrapper arround $this->mParent->msg() if $this->mParent is set
+        * and wfMessage() otherwise.
+        *
+        * Parameters are the same as wfMessage().
+        *
+        * @return Message object
+        */
+       function msg() {
+               $args = func_get_args();
+
+               if ( $this->mParent ) {
+                       $callback = array( $this->mParent, 'msg' );
+               } else {
+                       $callback = 'wfMessage';
+               }
+
+               return call_user_func_array( $callback, $args );
+       }
+
        /**
         * Override this function to add specific validation checks on the
         * field input.  Don't forget to call parent::validate() to ensure
@@ -1110,7 +1136,7 @@ abstract class HTMLFormField {
         */
        function validate( $value, $alldata ) {
                if ( isset( $this->mParams['required'] ) && $this->mParams['required'] !== false && $value === '' ) {
-                       return $this->mParent->msg( 'htmlform-required' )->parse();
+                       return $this->msg( 'htmlform-required' )->parse();
                }
 
                if ( isset( $this->mValidationCallback ) ) {
@@ -1155,6 +1181,7 @@ abstract class HTMLFormField {
        /**
         * Initialise the object
         * @param $params array Associative Array. See HTMLForm doc for syntax.
+        * @throws MWException
         */
        function __construct( $params ) {
                $this->mParams = $params;
@@ -1299,7 +1326,6 @@ abstract class HTMLFormField {
        public function getRaw( $value ) {
                list( $errors, $errorClass ) = $this->getErrorsAndErrorClass( $value );
                $inputHtml = $this->getInputHTML( $value );
-               $fieldType = get_class( $this );
                $helptext = $this->getHelpTextHtmlRaw( $this->getHelpText() );
                $cellAttributes = array();
                $label = $this->getLabelHtml( $cellAttributes );
@@ -1371,13 +1397,13 @@ abstract class HTMLFormField {
                if ( isset( $this->mParams['help-messages'] ) ) {
                        foreach ( $this->mParams['help-messages'] as $name ) {
                                $helpMessage = (array)$name;
-                               $msg = $this->mParent->msg( array_shift( $helpMessage ), $helpMessage );
+                               $msg = $this->msg( array_shift( $helpMessage ), $helpMessage );
 
                                if ( $msg->exists() ) {
                                        if ( is_null( $helptext ) ) {
                                                $helptext = '';
                                        } else {
-                                               $helptext .= $this->mParent->msg( 'word-separator' )->escaped(); // some space
+                                               $helptext .= $this->msg( 'word-separator' )->escaped(); // some space
                                        }
                                        $helptext .= $msg->parse(); // Append message
                                }
@@ -1642,7 +1668,7 @@ class HTMLFloatField extends HTMLTextField {
                # http://dev.w3.org/html5/spec/common-microsyntaxes.html#real-numbers
                # with the addition that a leading '+' sign is ok.
                if ( !preg_match( '/^((\+|\-)?\d+(\.\d+)?(E(\+|\-)?\d+)?)?$/i', $value ) ) {
-                       return $this->mParent->msg( 'htmlform-float-invalid' )->parseAsBlock();
+                       return $this->msg( 'htmlform-float-invalid' )->parseAsBlock();
                }
 
                # The "int" part of these message names is rather confusing.
@@ -1651,7 +1677,7 @@ class HTMLFloatField extends HTMLTextField {
                        $min = $this->mParams['min'];
 
                        if ( $min > $value ) {
-                               return $this->mParent->msg( 'htmlform-int-toolow', $min )->parseAsBlock();
+                               return $this->msg( 'htmlform-int-toolow', $min )->parseAsBlock();
                        }
                }
 
@@ -1659,7 +1685,7 @@ class HTMLFloatField extends HTMLTextField {
                        $max = $this->mParams['max'];
 
                        if ( $max < $value ) {
-                               return $this->mParent->msg( 'htmlform-int-toohigh', $max )->parseAsBlock();
+                               return $this->msg( 'htmlform-int-toohigh', $max )->parseAsBlock();
                        }
                }
 
@@ -1686,7 +1712,7 @@ class HTMLIntField extends HTMLFloatField {
                # value to, eg, save in the DB, clean it up with intval().
                if ( !preg_match( '/^((\+|\-)?\d+)?$/', trim( $value ) )
                ) {
-                       return $this->mParent->msg( 'htmlform-int-invalid' )->parseAsBlock();
+                       return $this->msg( 'htmlform-int-invalid' )->parseAsBlock();
                }
 
                return true;
@@ -1770,7 +1796,7 @@ class HTMLSelectField extends HTMLFormField {
                if ( in_array( $value, $validOptions ) )
                        return true;
                else
-                       return $this->mParent->msg( 'htmlform-select-badoption' )->parse();
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
        }
 
        function getInputHTML( $value ) {
@@ -1914,7 +1940,7 @@ class HTMLMultiSelectField extends HTMLFormField {
                if ( count( $validValues ) == count( $value ) ) {
                        return true;
                } else {
-                       return $this->mParent->msg( 'htmlform-select-badoption' )->parse();
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
                }
        }
 
@@ -2116,7 +2142,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        } elseif ( $text == '' ) {
                                $final = $list;
                        } else {
-                               $final = $list . $this->mParent->msg( 'colon-separator' )->inContentLanguage()->text() . $text;
+                               $final = $list . $this->msg( 'colon-separator' )->inContentLanguage()->text() . $text;
                        }
 
                } else {
@@ -2125,7 +2151,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                        $list = 'other';
                        $text = $final;
                        foreach ( $this->mFlatOptions as $option ) {
-                               $match = $option . $this->mParent->msg( 'colon-separator' )->inContentLanguage()->text();
+                               $match = $option . $this->msg( 'colon-separator' )->inContentLanguage()->text();
                                if ( strpos( $text, $match ) === 0 ) {
                                        $list = $option;
                                        $text = substr( $text, strlen( $match ) );
@@ -2153,7 +2179,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                }
 
                if ( isset( $this->mParams['required'] ) && $this->mParams['required'] !== false && $value[1] === '' ) {
-                       return $this->mParent->msg( 'htmlform-required' )->parse();
+                       return $this->msg( 'htmlform-required' )->parse();
                }
 
                return true;
@@ -2182,7 +2208,7 @@ class HTMLRadioField extends HTMLFormField {
                if ( in_array( $value, $validOptions ) ) {
                        return true;
                } else {
-                       return $this->mParent->msg( 'htmlform-select-badoption' )->parse();
+                       return $this->msg( 'htmlform-select-badoption' )->parse();
                }
        }
 
@@ -2392,11 +2418,11 @@ class HTMLEditTools extends HTMLFormField {
 
        protected function formatMsg() {
                if ( empty( $this->mParams['message'] ) ) {
-                       $msg = $this->mParent->msg( 'edittools' );
+                       $msg = $this->msg( 'edittools' );
                } else {
-                       $msg = $this->mParent->msg( $this->mParams['message'] );
+                       $msg = $this->msg( $this->mParams['message'] );
                        if ( $msg->isDisabled() ) {
-                               $msg = $this->mParent->msg( 'edittools' );
+                               $msg = $this->msg( 'edittools' );
                        }
                }
                $msg->inContentLanguage();
index bc39f2f..c9c0679 100644 (file)
  * @file
  */
 
+/**
+ * @since 1.18
+ */
 class MWHookException extends MWException {}
 
 /**
  * Hooks class.
  *
  * Used to supersede $wgHooks, because globals are EVIL.
+ *
+ * @since 1.18
  */
 class Hooks {
 
        protected static $handlers = array();
 
+       /**
+        * Clears hooks registered via Hooks::register(). Does not touch $wgHooks.
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * @since 1.21
+        *
+        * @param $name String: the name of the hook to clear.
+        *
+        * @throws MWException if not in testing mode.
+        */
+       public static function clear( $name ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException( 'can not reset hooks in operation.' );
+               }
+
+               unset( self::$handlers[$name] );
+       }
+
+
        /**
         * Attach an event handler to a given hook
         *
-        * @param $name Mixed: name of hook
+        * @since 1.18
+        *
+        * @param $name String: name of hook
         * @param $callback Mixed: callback function to attach
-        * @return void
         */
        public static function register( $name, $callback ) {
                if( !isset( self::$handlers[$name] ) ) {
@@ -51,69 +76,81 @@ class Hooks {
 
        /**
         * Returns true if a hook has a function registered to it.
+        * The function may have been registered either via Hooks::register or in $wgHooks.
+        *
+        * @since 1.18
         *
-        * @param $name Mixed: name of hook
-        * @return Boolean: true if a hook has a function registered to it
+        * @param $name String: name of hook
+        * @return Boolean: true if the hook has a function registered to it
         */
        public static function isRegistered( $name ) {
-               if( !isset( self::$handlers[$name] ) ) {
-                       self::$handlers[$name] = array();
-               }
+               global $wgHooks;
 
-               return ( count( self::$handlers[$name] ) != 0 );
+               return !empty( $wgHooks[$name] ) || !empty( self::$handlers[$name] );
        }
 
        /**
         * Returns an array of all the event functions attached to a hook
+        * This combines functions registered via Hooks::register and with $wgHooks.
+        * @since 1.18
+        *
+        * @throws MWException
+        * @throws FatalError
+        * @param $name String: name of the hook
         *
-        * @param $name Mixed: name of the hook
         * @return array
         */
        public static function getHandlers( $name ) {
-               if( !isset( self::$handlers[$name] ) ) {
+               global $wgHooks;
+
+               // Return quickly in the most common case
+               if ( empty( self::$handlers[$name] ) && empty( $wgHooks[$name] ) ) {
                        return array();
                }
 
-               return self::$handlers[$name];
+               if ( !is_array( self::$handlers ) ) {
+                       throw new MWException( "Local hooks array is not an array!\n" );
+               }
+
+               if ( !is_array( $wgHooks ) ) {
+                       throw new MWException( "Global hooks array is not an array!\n" );
+               }
+
+               if ( empty( Hooks::$handlers[$name] ) ) {
+                       $hooks = $wgHooks[$name];
+               } elseif ( empty( $wgHooks[$name] ) ) {
+                       $hooks = Hooks::$handlers[$name];
+               } else {
+                       // so they are both not empty...
+                       $hooks = array_merge( Hooks::$handlers[$name], $wgHooks[$name] );
+               }
+
+               if ( !is_array( $hooks ) ) {
+                       throw new MWException( "Hooks array for event '$name' is not an array!\n" );
+               }
+
+               return $hooks;
        }
 
        /**
         * Call hook functions defined in Hooks::register
         *
-        * Because programmers assign to $wgHooks, we need to be very
-        * careful about its contents. So, there's a lot more error-checking
-        * in here than would normally be necessary.
-        *
         * @param $event String: event name
-        * @param $args Array: parameters passed to hook functions
+        * @param $args  Array: parameters passed to hook functions
+        *
         * @return Boolean True if no handler aborted the hook
         */
        public static function run( $event, $args = array() ) {
                global $wgHooks;
 
                // Return quickly in the most common case
-               if ( !isset( self::$handlers[$event] ) && !isset( $wgHooks[$event] ) ) {
+               if ( empty( self::$handlers[$event] ) && empty( $wgHooks[$event] ) ) {
                        return true;
                }
 
-               if ( !is_array( self::$handlers ) ) {
-                       throw new MWException( "Local hooks array is not an array!\n" );
-               }
-
-               if ( !is_array( $wgHooks ) ) {
-                       throw new MWException( "Global hooks array is not an array!\n" );
-               }
-
-               $new_handlers = (array) self::$handlers;
-               $old_handlers = (array) $wgHooks;
-
-               $hook_array = array_merge( $new_handlers, $old_handlers );
+               $hooks = self::getHandlers( $event );
 
-               if ( !is_array( $hook_array[$event] ) ) {
-                       throw new MWException( "Hooks array for event '$event' is not an array!\n" );
-               }
-
-               foreach ( $hook_array[$event] as $index => $hook ) {
+               foreach ( $hooks as $hook ) {
                        $object = null;
                        $method = null;
                        $func = null;
@@ -131,7 +168,7 @@ class Hooks {
                                if ( count( $hook ) < 1 ) {
                                        throw new MWException( 'Empty array in hooks for ' . $event . "\n" );
                                } elseif ( is_object( $hook[0] ) ) {
-                                       $object = $hook_array[$event][$index][0];
+                                       $object = $hook[0];
                                        if ( $object instanceof Closure ) {
                                                $closure = true;
                                                if ( count( $hook ) > 1 ) {
@@ -161,7 +198,7 @@ class Hooks {
                        } elseif ( is_string( $hook ) ) { # functions look like strings, too
                                $func = $hook;
                        } elseif ( is_object( $hook ) ) {
-                               $object = $hook_array[$event][$index];
+                               $object = $hook;
                                if ( $object instanceof Closure ) {
                                        $closure = true;
                                } else {
@@ -259,8 +296,11 @@ class Hooks {
        /**
         * This REALLY should be protected... but it's public for compatibility
         *
+        * @since 1.18
+        *
         * @param $errno int Unused
         * @param $errstr String: error message
+        * @throws MWHookException
         * @return Boolean: false
         */
        public static function hookErrorHandler( $errno, $errstr ) {
index 23fead7..8cb99f5 100644 (file)
@@ -191,12 +191,8 @@ class Html {
                        return '';
                }
 
-               # Remove HTML5-only attributes if we aren't doing HTML5, and disable
-               # form validation regardless (see bug 23769 and the more detailed
-               # comment in expandAttributes())
+               # Remove invalid input types
                if ( $element == 'input' ) {
-                       # Whitelist of types that don't cause validation.  All except
-                       # 'search' are valid in XHTML1.
                        $validTypes = array(
                                'hidden',
                                'text',
@@ -208,18 +204,30 @@ class Html {
                                'image',
                                'reset',
                                'button',
-                               'search',
                        );
 
+                       # Allow more input types in HTML5 mode
+                       if( $wgHtml5 ) {
+                               $validTypes = array_merge( $validTypes, array(
+                                       'datetime',
+                                       'datetime-local',
+                                       'date',
+                                       'month',
+                                       'time',
+                                       'week',
+                                       'number',
+                                       'range',
+                                       'email',
+                                       'url',
+                                       'search',
+                                       'tel',
+                                       'color',
+                               ) );
+                       }
                        if ( isset( $attribs['type'] )
                        && !in_array( $attribs['type'], $validTypes ) ) {
                                unset( $attribs['type'] );
                        }
-
-                       if ( isset( $attribs['type'] ) && $attribs['type'] == 'search'
-                       && !$wgHtml5 ) {
-                               unset( $attribs['type'] );
-                       }
                }
 
                if ( !$wgHtml5 && $element == 'textarea' && isset( $attribs['maxlength'] ) ) {
@@ -286,6 +294,8 @@ class Html {
                        return $attribs;
                }
 
+               # Whenever altering this array, please provide a covering test case
+               # in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
                        'area' => array( 'shape' => 'rect' ),
                        'button' => array(
@@ -306,7 +316,6 @@ class Html {
                        'input' => array(
                                'formaction' => 'GET',
                                'type' => 'text',
-                               'value' => '',
                        ),
                        'keygen' => array( 'keytype' => 'rsa' ),
                        'link' => array( 'media' => 'all' ),
@@ -325,7 +334,11 @@ class Html {
 
                foreach ( $attribs as $attrib => $value ) {
                        $lcattrib = strtolower( $attrib );
-                       $value = strval( $value );
+                       if( is_array( $value ) ) {
+                               $value = implode( ' ', $value );
+                       } else {
+                               $value = strval( $value );
+                       }
 
                        # Simple checks using $attribDefaults
                        if ( isset( $attribDefaults[$element][$lcattrib] ) &&
@@ -343,6 +356,29 @@ class Html {
                && strval( $attribs['type'] ) == 'text/css' ) {
                        unset( $attribs['type'] );
                }
+               if ( $element === 'input' ) {
+                       $type = isset( $attribs['type'] ) ? $attribs['type'] : null;
+                       $value = isset( $attribs['value'] ) ? $attribs['value'] : null;
+                       if ( $type === 'checkbox' || $type === 'radio' ) {
+                               // The default value for checkboxes and radio buttons is 'on'
+                               // not ''. By stripping value="" we break radio boxes that
+                               // actually wants empty values.
+                               if ( $value === 'on' ) {
+                                       unset( $attribs['value'] );
+                               }
+                       } elseif ( $type === 'submit' ) {
+                               // The default value for submit appears to be "Submit" but
+                               // let's not bother stripping out localized text that matches
+                               // that.
+                       } else {
+                               // The default value for nearly every other field type is ''
+                               // The 'range' and 'color' types use different defaults but
+                               // stripping a value="" does not hurt them.
+                               if ( $value === '' ) {
+                                       unset( $attribs['value'] );
+                               }
+                       }
+               }
                if ( $element === 'select' && isset( $attribs['size'] ) ) {
                        if ( in_array( 'multiple', $attribs )
                                || ( isset( $attribs['multiple'] ) && $attribs['multiple'] !== false )
@@ -717,7 +753,7 @@ class Html {
         * - name: [optional], default: 'namespace'
         * @return string HTML code to select a namespace.
         */
-       public static function namespaceSelector( Array $params = array(), Array $selectAttribs = array() ) {
+       public static function namespaceSelector( array $params = array(), array $selectAttribs = array() ) {
                global $wgContLang;
 
                ksort( $selectAttribs );
@@ -760,10 +796,12 @@ class Html {
                        if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) {
                                continue;
                        }
-                       if ( $nsId === 0 ) {
+                       if ( $nsId === NS_MAIN ) {
                                // For other namespaces use use the namespace prefix as label, but for
                                // main we don't use "" but the user message descripting it (e.g. "(Main)" or "(Article)")
                                $nsName = wfMessage( 'blanknamespace' )->text();
+                       } elseif ( is_int( $nsId ) ) {
+                               $nsName = $wgContLang->convertNamespace( $nsId );
                        }
                        $optionsHtml[] = Html::element(
                                'option', array(
@@ -774,6 +812,14 @@ class Html {
                        );
                }
 
+               if ( !array_key_exists( 'id', $selectAttribs ) ) {
+                       $selectAttribs['id'] = 'namespace';
+               }
+
+               if ( !array_key_exists( 'name', $selectAttribs ) ) {
+                       $selectAttribs['name'] = 'namespace';
+               }
+
                $ret = '';
                if ( isset( $params['label'] ) ) {
                        $ret .= Html::element(
index 8453e62..32f77dc 100644 (file)
@@ -265,6 +265,7 @@ class MWHttpRequest {
         * Generate a new request object
         * @param $url String: url to use
         * @param $options Array: (optional) extra params to pass (see Http::request())
+        * @throws MWException
         * @return CurlHttpRequest|PhpHttpRequest
         * @see MWHttpRequest::__construct
         */
@@ -393,6 +394,7 @@ class MWHttpRequest {
         * will be aborted.
         *
         * @param $callback Callback
+        * @throws MWException
         */
        public function setCallback( $callback ) {
                if ( !is_callable( $callback ) ) {
index 1828249..10c707e 100644 (file)
@@ -714,6 +714,7 @@ class IP {
         * @return String: valid dotted quad IPv4 address or null
         */
        public static function canonicalize( $addr ) {
+               $addr = preg_replace( '/\%.*/','', $addr ); // remove zone info (bug 35738)
                if ( self::isValid( $addr ) ) {
                        return $addr;
                }
index da9d1ec..316e1c9 100644 (file)
@@ -153,11 +153,13 @@ class ImagePage extends Article {
                if ( $this->mPage->getID() ) {
                        # NS_FILE is in the user language, but this section (the actual wikitext)
                        # should be in page content language
-                       $pageLang = $this->getTitle()->getPageLanguage();
+                       $pageLang = $this->getTitle()->getPageViewLanguage();
                        $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
                                'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
                                'class' => 'mw-content-'.$pageLang->getDir() ) ) );
+
                        parent::view();
+
                        $out->addHTML( Xml::closeElement( 'div' ) );
                } else {
                        # Just need to set the right headers
@@ -272,18 +274,18 @@ class ImagePage extends Article {
        }
 
        /**
-        * Overloading Article's getContent method.
+        * Overloading Article's getContentObject method.
         *
         * Omit noarticletext if sharedupload; text will be fetched from the
         * shared upload server if possible.
         * @return string
         */
-       public function getContent() {
+       public function getContentObject() {
                $this->loadFile();
                if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getID() ) {
-                       return '';
+                       return null;
                }
-               return parent::getContent();
+               return parent::getContentObject();
        }
 
        protected function openShowImage() {
@@ -383,6 +385,9 @@ class ImagePage extends Article {
                                        # Some sort of audio file that doesn't have dimensions
                                        # Don't output a no hi res message for such a file
                                        $msgsmall = '';
+                               } elseif ( $this->displayImg->isVectorized() ) {
+                                       # For vectorized images, full size is just the frame size
+                                       $msgsmall = '';
                                } else {
                                        # Image is small enough to show full size on image page
                                        $msgsmall = wfMessage( 'file-nohires' )->parse();
index 11f3795..c9b0997 100644 (file)
@@ -429,6 +429,7 @@ class WikiImporter {
 
        /**
         * Primary entry point
+        * @throws MWException
         * @return bool
         */
        public function doImport() {
@@ -611,7 +612,7 @@ class WikiImporter {
                $this->debug( "Enter revision handler" );
                $revisionInfo = array();
 
-               $normalFields = array( 'id', 'timestamp', 'comment', 'minor', 'text' );
+               $normalFields = array( 'id', 'timestamp', 'comment', 'minor', 'model', 'format', 'text' );
 
                $skip = false;
 
@@ -656,6 +657,12 @@ class WikiImporter {
                if ( isset( $revisionInfo['text'] ) ) {
                        $revision->setText( $revisionInfo['text'] );
                }
+               if ( isset( $revisionInfo['model'] ) ) {
+                       $revision->setModel( $revisionInfo['model'] );
+               }
+               if ( isset( $revisionInfo['text'] ) ) {
+                       $revision->setFormat( $revisionInfo['format'] );
+               }
                $revision->setTitle( $pageInfo['_title'] );
 
                if ( isset( $revisionInfo['timestamp'] ) ) {
@@ -1008,7 +1015,10 @@ class WikiRevision {
        var $timestamp = "20010115000000";
        var $user = 0;
        var $user_text = "";
+       var $model = null;
+       var $format = null;
        var $text = "";
+       var $content = null;
        var $comment = "";
        var $minor = false;
        var $type = "";
@@ -1064,6 +1074,20 @@ class WikiRevision {
                $this->user_text = $ip;
        }
 
+       /**
+        * @param $model
+        */
+       function setModel( $model ) {
+               $this->model = $model;
+       }
+
+       /**
+        * @param $format
+        */
+       function setFormat( $format ) {
+               $this->format = $format;
+       }
+
        /**
         * @param $text
         */
@@ -1187,11 +1211,54 @@ class WikiRevision {
 
        /**
         * @return string
+        *
+        * @deprecated Since 1.21, use getContent() instead.
         */
        function getText() {
+               wfDeprecated( "Use getContent() instead." );
+
                return $this->text;
        }
 
+       /**
+        * @return Content
+        */
+       function getContent() {
+               if ( is_null( $this->content ) ) {
+                       $this->content =
+                               ContentHandler::makeContent(
+                                       $this->text,
+                                       $this->getTitle(),
+                                       $this->getModel(),
+                                       $this->getFormat()
+                               );
+               }
+
+               return $this->content;
+       }
+
+       /**
+        * @return String
+        */
+       function getModel() {
+               if ( is_null( $this->model ) ) {
+                       $this->model = $this->getTitle()->getContentModel();
+               }
+
+               return $this->model;
+       }
+
+       /**
+        * @return String
+        */
+       function getFormat() {
+               if ( is_null( $this->model ) ) {
+                       $this->format = ContentHandler::getForTitle( $this->getTitle() )->getDefaultFormat();
+               }
+
+               return $this->format;
+       }
+
        /**
         * @return string
         */
@@ -1331,7 +1398,9 @@ class WikiRevision {
                # Insert the row
                $revision = new Revision( array(
                        'page'       => $pageId,
-                       'text'       => $this->getText(),
+                       'content_model'  => $this->getModel(),
+                       'content_format' => $this->getFormat(),
+                       'text'       => $this->getContent()->serialize( $this->getFormat() ), //XXX: just set 'content' => $this->getContent()?
                        'comment'    => $this->getComment(),
                        'user'       => $userId,
                        'user_text'  => $userText,
index 0cfb047..4d2229f 100644 (file)
@@ -117,10 +117,10 @@ class Licenses extends HTMLFormField {
         * @param $depth int
         */
        protected function makeHtml( $tagset, $depth = 0 ) {
-               foreach ( $tagset as $key => $val )
+               foreach ( $tagset as $key => $val ) {
                        if ( is_array( $val ) ) {
                                $this->html .= $this->outputOption(
-                                       $this->msg( $key ), '',
+                                       $key, '',
                                        array(
                                                'disabled' => 'disabled',
                                                'style' => 'color: GrayText', // for MSIE
@@ -130,37 +130,33 @@ class Licenses extends HTMLFormField {
                                $this->makeHtml( $val, $depth + 1 );
                        } else {
                                $this->html .= $this->outputOption(
-                                       $this->msg( $val->text ), $val->template,
+                                       $val->text, $val->template,
                                        array( 'title' => '{{' . $val->template . '}}' ),
                                        $depth
                                );
                        }
+               }
        }
 
        /**
-        * @param $text
+        * @param $message
         * @param $value
         * @param $attribs null
         * @param $depth int
         * @return string
         */
-       protected function outputOption( $text, $value, $attribs = null, $depth = 0 ) {
+       protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
+               $msgObj = $this->msg( $message );
+               $text = $msgObj->exists() ? $msgObj->text() : $message;
                $attribs['value'] = $value;
-               if ( $value === $this->selected )
+               if ( $value === $this->selected ) {
                        $attribs['selected'] = 'selected';
+               }
+
                $val = str_repeat( /* &nbsp */ "\xc2\xa0", $depth * 2 ) . $text;
                return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
        }
 
-       /**
-        * @param $str string
-        * @return String
-        */
-       protected function msg( $str ) {
-               $msg = wfMessage( $str );
-               return $msg->exists() ? $msg->text() : $str;
-       }
-
        /**#@-*/
 
        /**
index 214f495..b19f6c4 100644 (file)
 class LinkFilter {
 
        /**
-        * Check whether $text contains a link to $filterEntry
+        * Check whether $content contains a link to $filterEntry
         *
-        * @param $text String: text to check
+        * @param $content Content: content to check
         * @param $filterEntry String: domainparts, see makeRegex() for more details
         * @return Integer: 0 if no match or 1 if there's at least one match
         */
-       static function matchEntry( $text, $filterEntry ) {
+       static function matchEntry( Content $content, $filterEntry ) {
+               if ( !( $content instanceof TextContent ) ) {
+                       //TODO: handle other types of content too.
+                       //      Maybe create ContentHandler::matchFilter( LinkFilter ).
+                       //      Think about a common base class for LinkFilter and MagicWord.
+                       return 0;
+               }
+
+               $text = $content->getNativeData();
+
                $regex = LinkFilter::makeRegex( $filterEntry );
                return preg_match( $regex, $text );
        }
index 0b2deef..c17e2d1 100644 (file)
@@ -188,6 +188,8 @@ class Linker {
         *       cons.
         *     'forcearticlepath': Use the article path always, even with a querystring.
         *       Has compatibility issues on some setups, so avoid wherever possible.
+        *     'http': Force a full URL with http:// as the scheme.
+        *     'https': Force a full URL with https:// as the scheme.
         * @return string HTML <a> attribute
         */
        public static function link(
@@ -294,7 +296,16 @@ class Linker {
                        $query['action'] = 'edit';
                        $query['redlink'] = '1';
                }
-               $ret = $target->getLinkURL( $query );
+
+               if ( in_array( 'http', $options ) ) {
+                       $proto = PROTO_HTTP;
+               } elseif ( in_array( 'https', $options ) ) {
+                       $proto = PROTO_HTTPS;
+               } else {
+                       $proto = PROTO_RELATIVE;
+               }
+
+               $ret = $target->getLinkURL( $query, false, $proto );
                wfProfileOut( __METHOD__ );
                return $ret;
        }
@@ -437,6 +448,7 @@ class Linker {
         * @param $context IContextSource context to use to get the messages
         * @param $namespace int Namespace number
         * @param $title string Text of the title, without the namespace part
+        * @return string
         */
        public static function getInvalidTitleDescription( IContextSource $context, $namespace, $title ) {
                global $wgContLang;
@@ -865,31 +877,31 @@ class Linker {
         * Make a "broken" link to an image
         *
         * @param $title Title object
-        * @param $html String: link label in htmlescaped text form
+        * @param $label String: link label (plain text)
         * @param $query String: query string
-        * @param $trail String: link trail (HTML fragment)
-        * @param $prefix String: link prefix (HTML fragment)
+        * @param $unused1 Unused parameter kept for b/c
+        * @param $unused2 Unused parameter kept for b/c
         * @param $time Boolean: a file of a certain timestamp was requested
         * @return String
         */
-       public static function makeBrokenImageLinkObj( $title, $html = '', $query = '', $trail = '', $prefix = '', $time = false ) {
+       public static function makeBrokenImageLinkObj( $title, $label = '', $query = '', $unused1 = '', $unused2 = '', $time = false ) {
                global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
                if ( ! $title instanceof Title ) {
-                       return "<!-- ERROR -->{$prefix}{$html}{$trail}";
+                       return "<!-- ERROR -->" . htmlspecialchars( $label );
                }
                wfProfileIn( __METHOD__ );
+               if ( $label == '' ) {
+                       $label = $title->getPrefixedText();
+               }
+               $encLabel = htmlspecialchars( $label );
                $currentExists = $time ? ( wfFindFile( $title ) != false ) : false;
 
-               list( $inside, $trail ) = self::splitTrail( $trail );
-               if ( $html == '' )
-                       $html = htmlspecialchars( $title->getPrefixedText() );
-
                if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) && !$currentExists ) {
                        $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title );
 
                        if ( $redir ) {
                                wfProfileOut( __METHOD__ );
-                               return self::linkKnown( $title, "$prefix$html$inside", array(), wfCgiToArray( $query ) ) . $trail;
+                               return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                        }
 
                        $href = self::getUploadUrl( $title, $query );
@@ -897,10 +909,10 @@ class Linker {
                        wfProfileOut( __METHOD__ );
                        return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
                                htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
-                               "$prefix$html$inside</a>$trail";
+                               $encLabel . '</a>';
                } else {
                        wfProfileOut( __METHOD__ );
-                       return self::linkKnown( $title, "$prefix$html$inside", array(), wfCgiToArray( $query ) ) . $trail;
+                       return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
                }
        }
 
@@ -1863,7 +1875,6 @@ class Linker {
         * @return String: HTML output
         */
        public static function formatHiddenCategories( $hiddencats ) {
-               global $wgLang;
                wfProfileIn( __METHOD__ );
 
                $outText = '';
index 1d0bcf7..fd1fefb 100644 (file)
@@ -49,9 +49,10 @@ class LinksUpdate extends SqlDataUpdate {
         * @param $title Title of the page we're updating
         * @param $parserOutput ParserOutput: output from a full parse of this page
         * @param $recursive Boolean: queue jobs for recursive updates?
+        * @throws MWException
         */
        function __construct( $title, $parserOutput, $recursive = true ) {
-               parent::__construct( );
+               parent::__construct( false ); // no implicit transaction
 
                if ( !( $title instanceof Title ) ) {
                        throw new MWException( "The calling convention to LinksUpdate::LinksUpdate() has changed. " .
@@ -71,6 +72,7 @@ class LinksUpdate extends SqlDataUpdate {
                }
 
                $this->mParserOutput = $parserOutput;
+
                $this->mLinks = $parserOutput->getLinks();
                $this->mImages = $parserOutput->getImages();
                $this->mTemplates = $parserOutput->getTemplates();
@@ -825,9 +827,13 @@ class LinksDeletionUpdate extends SqlDataUpdate {
         * @param $page WikiPage Page we are updating
         */
        function __construct( WikiPage $page ) {
-               parent::__construct( );
+               parent::__construct( false ); // no implicit transaction
 
                $this->mPage = $page;
+
+               if ( !$page->exists() ) {
+                       throw new MWException( "Page ID not known, perhaps the page doesn't exist?" );
+               }
        }
 
        /**
@@ -879,4 +885,16 @@ class LinksDeletionUpdate extends SqlDataUpdate {
                                __METHOD__ );
                }
        }
+
+       /**
+        * Update all the appropriate counts in the category table.
+        * @param $added array associative array of category name => sort key
+        * @param $deleted array associative array of category name => sort key
+        */
+       function updateCategoryCounts( $added, $deleted ) {
+               $a = WikiPage::factory( $this->mTitle );
+               $a->updateCategoryCounts(
+                       array_keys( $added ), array_keys( $deleted )
+               );
+       }
 }
index 9ce26d0..e88c240 100644 (file)
@@ -110,7 +110,7 @@ class LocalisationCache {
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
                'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
-               'digitGroupingPattern'
+               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
        );
 
        /**
@@ -118,7 +118,7 @@ class LocalisationCache {
         * by a fallback sequence.
         */
        static public $mergeableMapKeys = array( 'messages', 'namespaceNames',
-               'dateFormats', 'imageFiles', 'preloadedMessages',
+               'dateFormats', 'imageFiles', 'preloadedMessages'
        );
 
        /**
@@ -154,6 +154,12 @@ class LocalisationCache {
         */
        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;
 
        /**
@@ -162,6 +168,7 @@ class LocalisationCache {
         * for $wgLocalisationCacheConf.
         *
         * @param $conf Array
+        * @throws MWException
         */
        function __construct( $conf ) {
                global $wgCacheDirectory;
@@ -234,9 +241,9 @@ class LocalisationCache {
         */
        public function getItem( $code, $key ) {
                if ( !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__.'-load' );
+                       wfProfileIn( __METHOD__ . '-load' );
                        $this->loadItem( $code, $key );
-                       wfProfileOut( __METHOD__.'-load' );
+                       wfProfileOut( __METHOD__ . '-load' );
                }
 
                if ( $key === 'fallback' && isset( $this->shallowFallbacks[$code] ) ) {
@@ -256,9 +263,9 @@ class LocalisationCache {
        public function getSubitem( $code, $key, $subkey ) {
                if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
                         !isset( $this->loadedItems[$code][$key] ) ) {
-                       wfProfileIn( __METHOD__.'-load' );
+                       wfProfileIn( __METHOD__ . '-load' );
                        $this->loadSubitem( $code, $key, $subkey );
-                       wfProfileOut( __METHOD__.'-load' );
+                       wfProfileOut( __METHOD__ . '-load' );
                }
 
                if ( isset( $this->data[$code][$key][$subkey] ) ) {
@@ -367,7 +374,7 @@ class LocalisationCache {
         */
        public function isExpired( $code ) {
                if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
-                       wfDebug( __METHOD__."($code): forced reload\n" );
+                       wfDebug( __METHOD__ . "($code): forced reload\n" );
                        return true;
                }
 
@@ -376,7 +383,7 @@ class LocalisationCache {
                $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" );
+                       wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
                        return true;
                }
 
@@ -386,7 +393,7 @@ class LocalisationCache {
                        // 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 " .
+                               wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
                                        get_class( $dep ) . "\n" );
                                return true;
                        }
@@ -398,6 +405,7 @@ class LocalisationCache {
        /**
         * Initialise a language in this object. Rebuild the cache if necessary.
         * @param $code
+        * @throws MWException
         */
        protected function initLanguage( $code ) {
                if ( isset( $this->initialisedLangs[$code] ) ) {
@@ -468,6 +476,7 @@ class LocalisationCache {
         * Read a PHP file containing localisation data.
         * @param $_fileName
         * @param $_fileType
+        * @throws MWException
         * @return array
         */
        protected function readPHPFile( $_fileName, $_fileType ) {
@@ -481,9 +490,95 @@ class LocalisationCache {
                } elseif ( $_fileType == 'aliases' ) {
                        $data = compact( 'aliases' );
                } else {
-                       throw new MWException( __METHOD__.": Invalid file type: $_fileType" );
+                       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;
        }
 
@@ -567,6 +662,7 @@ class LocalisationCache {
         * 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;
@@ -585,14 +681,12 @@ class LocalisationCache {
                $deps = array();
 
                # Load the primary localisation from the source file
-               $fileName = Language::getMessagesFileName( $code );
-               if ( !file_exists( $fileName ) ) {
-                       wfDebug( __METHOD__.": no localisation file for $code, using fallback to en\n" );
+               $data = $this->readSourceFilesAndRegisterDeps( $code, $deps );
+               if ( $data === false ) {
+                       wfDebug( __METHOD__ . ": no localisation file for $code, using fallback to en\n" );
                        $coreData['fallback'] = 'en';
                } else {
-                       $deps[] = new FileDependency( $fileName );
-                       $data = $this->readPHPFile( $fileName, 'core' );
-                       wfDebug( __METHOD__.": got localisation for $code from source\n" );
+                       wfDebug( __METHOD__ . ": got localisation for $code from source\n" );
 
                        # Merge primary localisation
                        foreach ( $data as $key => $value ) {
@@ -605,7 +699,6 @@ class LocalisationCache {
                if ( is_null( $coreData['fallback'] ) ) {
                        $coreData['fallback'] = $code === 'en' ? false : 'en';
                }
-
                if ( $coreData['fallback'] === false ) {
                        $coreData['fallbackSequence'] = array();
                } else {
@@ -621,15 +714,11 @@ class LocalisationCache {
                        foreach ( $coreData['fallbackSequence'] as $fbCode ) {
                                # Load the secondary localisation from the source file to
                                # avoid infinite cycles on cyclic fallbacks
-                               $fbFilename = Language::getMessagesFileName( $fbCode );
-
-                               if ( !file_exists( $fbFilename ) ) {
+                               $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
+                               if ( $fbData === false ) {
                                        continue;
                                }
 
-                               $deps[] = new FileDependency( $fbFilename );
-                               $fbData = $this->readPHPFile( $fbFilename, 'core' );
-
                                foreach ( self::$allKeys as $key ) {
                                        if ( !isset( $fbData[$key] ) ) {
                                                continue;
@@ -654,7 +743,7 @@ class LocalisationCache {
                        $used = false;
 
                        foreach ( $data as $key => $item ) {
-                               if( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
+                               if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
                                        $used = true;
                                }
                        }
@@ -684,19 +773,26 @@ class LocalisationCache {
                        $page = str_replace( ' ', '_', $page );
                }
                # Decouple the reference to prevent accidental damage
-               unset($page);
+               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! ' .
+                       throw new MWException( __METHOD__ . ': Localisation data failed sanity check! ' .
                                'Check that your languages/messages/MessagesEn.php file is intact.' );
                }
 
@@ -924,7 +1020,7 @@ class LCStore_DB implements LCStore {
                }
 
                if ( !$code ) {
-                       throw new MWException( __METHOD__.": Invalid language \"$code\"" );
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
 
                $this->dbw = wfGetDB( DB_MASTER );
@@ -968,7 +1064,7 @@ class LCStore_DB implements LCStore {
                }
 
                if ( is_null( $this->currentLang ) ) {
-                       throw new MWException( __CLASS__.': must call startWrite() before calling set()' );
+                       throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
                }
 
                $this->batch[] = array(
@@ -1040,7 +1136,7 @@ class LCStore_CDB implements LCStore {
                }
 
                // Close reader to stop permission errors on write
-               if( !empty($this->readers[$code]) ) {
+               if ( !empty( $this->readers[$code] ) ) {
                        $this->readers[$code]->close();
                }
 
@@ -1058,14 +1154,14 @@ class LCStore_CDB implements LCStore {
 
        public function set( $key, $value ) {
                if ( is_null( $this->writer ) ) {
-                       throw new MWException( __CLASS__.': must call startWrite() before calling set()' );
+                       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\"" );
+                       throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
                return "{$this->directory}/l10n_cache-$code.cdb";
        }
@@ -1181,8 +1277,9 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
                while ( count( $this->data ) > $this->maxLoadedLangs && count( $this->mruLangs ) ) {
                        reset( $this->mruLangs );
                        $code = key( $this->mruLangs );
-                       wfDebug( __METHOD__.": unloading $code\n" );
+                       wfDebug( __METHOD__ . ": unloading $code\n" );
                        $this->unload( $code );
                }
        }
+
 }
index f559d30..824f177 100644 (file)
@@ -202,6 +202,11 @@ class Message {
         */
        protected $title = null;
 
+       /**
+        * Content object representing the message
+        */
+       protected $content = null;
+
        /**
         * @var string
         */
@@ -209,6 +214,7 @@ class Message {
 
        /**
         * Constructor.
+        * @since 1.17
         * @param $key: message key, or array of message keys to try and use the first non-empty message for
         * @param $params Array message parameters
         * @return Message: $this
@@ -224,6 +230,7 @@ class Message {
         * Factory function that is just wrapper for the real constructor. It is
         * intented to be used instead of the real constructor, because it allows
         * chaining method calls, while new objects don't.
+        * @since 1.17
         * @param $key String: message key
         * @param Varargs: parameters as Strings
         * @return Message: $this
@@ -238,6 +245,7 @@ class Message {
         * Factory function accepting multiple message keys and returning a message instance
         * for the first message which is non-empty. If all messages are empty then an
         * instance of the first message key is returned.
+        * @since 1.18
         * @param Varargs: message keys (or first arg as an array of all the message keys)
         * @return Message: $this
         */
@@ -257,6 +265,7 @@ class Message {
 
        /**
         * Adds parameters to the parameter list of this message.
+        * @since 1.17
         * @param Varargs: parameters as Strings, or a single argument that is an array of Strings
         * @return Message: $this
         */
@@ -275,6 +284,7 @@ class Message {
         * In other words the parsing process cannot access the contents
         * of this type of parameter, and you need to make sure it is
         * sanitized beforehand.  The parser will see "$n", instead.
+        * @since 1.17
         * @param Varargs: raw parameters as Strings (or single argument that is an array of raw parameters)
         * @return Message: $this
         */
@@ -292,6 +302,7 @@ class Message {
        /**
         * Add parameters that are numeric and will be passed through
         * Language::formatNum before substitution
+        * @since 1.18
         * @param Varargs: numeric parameters (or single argument that is array of numeric parameters)
         * @return Message: $this
         */
@@ -308,7 +319,7 @@ class Message {
 
        /**
         * Set the language and the title from a context object
-        *
+        * @since 1.19
         * @param $context IContextSource
         * @return Message: $this
         */
@@ -326,6 +337,7 @@ class Message {
         * turned off.
         * @since 1.17
         * @param $lang Mixed: language code or Language object.
+        * @throws MWException
         * @return Message: $this
         */
        public function inLanguage( $lang ) {
@@ -378,6 +390,7 @@ class Message {
 
        /**
         * Enable or disable database use.
+        * @since 1.17
         * @param $value Boolean
         * @return Message: $this
         */
@@ -388,7 +401,7 @@ class Message {
 
        /**
         * Set the Title object to use as context when transforming the message
-        *
+        * @since 1.18
         * @param $title Title object
         * @return Message: $this
         */
@@ -397,8 +410,21 @@ class Message {
                return $this;
        }
 
+       /**
+        * Returns the message as a Content object.
+        * @return Content
+        */
+       public function content() {
+               if ( !$this->content ) {
+                       $this->content = new MessageContent( $this->key );
+               }
+
+               return $this->content;
+       }
+
        /**
         * Returns the message parsed from wikitext to HTML.
+        * @since 1.17
         * @return String: HTML
         */
        public function toString() {
@@ -412,6 +438,15 @@ class Message {
                        return '&lt;' . $key . '&gt;';
                }
 
+               # Replace $* with a list of parameters for &uselang=qqx.
+               if ( strpos( $string, '$*' ) !== false ) {
+                       $paramlist = '';
+                       if ( $this->parameters !== array() ) {
+                               $paramlist = ': $' . implode( ', $', range( 1, count( $this->parameters ) ) );
+                       }
+                       $string = str_replace( '$*', $paramlist, $string );
+               }
+
                # Replace parameters before text parsing
                $string = $this->replaceParameters( $string, 'before' );
 
@@ -441,6 +476,7 @@ class Message {
         * Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
         *     $foo = Message::get($key);
         *     $string = "<abbr>$foo</abbr>";
+        * @since 1.18
         * @return String
         */
        public function __toString() {
@@ -449,6 +485,7 @@ class Message {
 
        /**
         * Fully parse the text from wikitext to HTML
+        * @since 1.17
         * @return String parsed HTML
         */
        public function parse() {
@@ -458,6 +495,7 @@ class Message {
 
        /**
         * Returns the message text. {{-transformation is done.
+        * @since 1.17
         * @return String: Unescaped message text.
         */
        public function text() {
@@ -467,6 +505,7 @@ class Message {
 
        /**
         * Returns the message text as-is, only parameters are subsituted.
+        * @since 1.17
         * @return String: Unescaped untransformed message text.
         */
        public function plain() {
@@ -476,6 +515,7 @@ class Message {
 
        /**
         * Returns the parsed message text which is always surrounded by a block element.
+        * @since 1.17
         * @return String: HTML
         */
        public function parseAsBlock() {
@@ -486,6 +526,7 @@ class Message {
        /**
         * Returns the message text. {{-transformation is done and the result
         * is escaped excluding any raw parameters.
+        * @since 1.17
         * @return String: Escaped message text.
         */
        public function escaped() {
@@ -495,6 +536,7 @@ class Message {
 
        /**
         * Check whether a message key has been defined currently.
+        * @since 1.17
         * @return Bool: true if it is and false if not.
         */
        public function exists() {
@@ -503,6 +545,7 @@ class Message {
 
        /**
         * Check whether a message does not exist, or is an empty string
+        * @since 1.18
         * @return Bool: true if is is and false if not
         * @todo FIXME: Merge with isDisabled()?
         */
@@ -513,7 +556,8 @@ class Message {
 
        /**
         * Check whether a message does not exist, is an empty string, or is "-"
-        * @return Bool: true if is is and false if not
+        * @since 1.18
+        * @return Bool: true if it is and false if not
         */
        public function isDisabled() {
                $message = $this->fetchMessage();
@@ -521,6 +565,7 @@ class Message {
        }
 
        /**
+        * @since 1.17
         * @param $value
         * @return array
         */
@@ -529,6 +574,7 @@ class Message {
        }
 
        /**
+        * @since 1.18
         * @param $value
         * @return array
         */
@@ -538,6 +584,7 @@ class Message {
 
        /**
         * Substitutes any paramaters into the message text.
+        * @since 1.17
         * @param $message String: the message text
         * @param $type String: either before or after
         * @return String
@@ -556,6 +603,7 @@ class Message {
 
        /**
         * Extracts the parameter type and preprocessed the value if needed.
+        * @since 1.18
         * @param $param String|Array: Parameter as defined in this class.
         * @return Tuple(type, value)
         * @throws MWException
@@ -576,6 +624,7 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to parse wikitext.
+        * @since 1.17
         * @param $string String: Wikitext message contents
         * @return string Wikitext parsed into HTML
         */
@@ -585,6 +634,7 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to {{-transform wikitext.
+        * @since 1.17
         * @param $string String: Wikitext message contents
         * @return string Wikitext with {{-constructs replaced with their values.
         */
@@ -594,7 +644,8 @@ class Message {
 
        /**
         * Wrapper for what ever method we use to get message contents
-        *
+        * @since 1.17
+        * @throws MWException
         * @return string
         */
        protected function fetchMessage() {
index d112b25..3a698e5 100644 (file)
@@ -299,7 +299,7 @@ class MessageBlobStore {
         */
        private static function reencodeBlob( $blob, $key, $lang ) {
                $decoded = FormatJson::decode( $blob, true );
-               $decoded[$key] = wfMessage( $key )->inLanguage( $lang )->text();
+               $decoded[$key] = wfMessage( $key )->inLanguage( $lang )->plain();
 
                return FormatJson::encode( (object)$decoded );
        }
@@ -311,6 +311,7 @@ class MessageBlobStore {
         * @param $resourceLoader ResourceLoader object
         * @param $modules Array of module names
         * @param $lang String: language code
+        * @throws MWException
         * @return array Array mapping module names to blobs
         */
        private static function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) {
@@ -353,7 +354,7 @@ class MessageBlobStore {
                $messages = array();
 
                foreach ( $module->getMessages() as $key ) {
-                       $messages[$key] = wfMessage( $key )->inLanguage( $lang )->text();
+                       $messages[$key] = wfMessage( $key )->inLanguage( $lang )->plain();
                }
 
                return FormatJson::encode( (object)$messages );
index 2e2b8d6..e8d5632 100644 (file)
@@ -48,6 +48,7 @@ class MWNamespace {
         * @param $index
         * @param $method
         *
+        * @throws MWException
         * @return bool
         */
        private static function isMethodValidFor( $index, $method ) {
@@ -209,12 +210,14 @@ class MWNamespace {
         * Returns array of all defined namespaces with their canonical
         * (English) names.
         *
+        * @param bool $rebuild rebuild namespace list (default = false). Used for testing.
+        *
         * @return array
         * @since 1.17
         */
-       public static function getCanonicalNamespaces() {
+       public static function getCanonicalNamespaces( $rebuild = false ) {
                static $namespaces = null;
-               if ( $namespaces === null ) {
+               if ( $namespaces === null || $rebuild ) {
                        global $wgExtraNamespaces, $wgCanonicalNamespaceNames;
                        $namespaces = array( NS_MAIN => '' ) + $wgCanonicalNamespaceNames;
                        if ( is_array( $wgExtraNamespaces ) ) {
index e9e2b6f..dd9c9e3 100644 (file)
@@ -56,9 +56,9 @@ class OutputPage extends ContextSource {
        /**
         * Holds the debug lines that will be output as comments in page source if
         * $wgDebugComments is enabled. See also $wgShowDebug.
-        * TODO: make a getter method for this
+        * @deprecated since 1.20; use MWDebug class instead.
         */
-       public $mDebugtext = ''; // TODO: we might want to replace it by wfDebug() wfDebugLog()
+       public $mDebugtext = '';
 
        /// Should be private. Stores contents of "<title>" tag
        var $mHTMLtitle = '';
@@ -255,7 +255,7 @@ class OutputPage extends ContextSource {
        function __construct( IContextSource $context = null ) {
                if ( $context === null ) {
                        # Extensions should use `new RequestContext` instead of `new OutputPage` now.
-                       wfDeprecated( __METHOD__ );
+                       wfDeprecated( __METHOD__, '1.18' );
                } else {
                        $this->setContext( $context );
                }
@@ -851,11 +851,10 @@ class OutputPage extends ContextSource {
                $this->getContext()->setTitle( $t );
        }
 
-
        /**
         * Replace the subtile with $str
         *
-        * @param $str String|Message: new value of the subtitle
+        * @param $str String|Message: new value of the subtitle. String should be safe HTML.
         */
        public function setSubtitle( $str ) {
                $this->clearSubtitle();
@@ -875,7 +874,7 @@ class OutputPage extends ContextSource {
        /**
         * Add $str to the subtitle
         *
-        * @param $str String|Message to add to the subtitle
+        * @param $str String|Message to add to the subtitle. String should be safe HTML.
         */
        public function addSubtitle( $str ) {
                if ( $str instanceof Message ) {
@@ -1314,15 +1313,6 @@ class OutputPage extends ContextSource {
                return $this->mBodytext;
        }
 
-       /**
-        * Add $text to the debug output
-        *
-        * @param $text String: debug text
-        */
-       public function debug( $text ) {
-               $this->mDebugtext .= $text;
-       }
-
        /**
         * Get/set the ParserOptions object to use for wikitext parsing
         *
@@ -1580,9 +1570,10 @@ class OutputPage extends ContextSource {
         * @param $interface Boolean: use interface language ($wgLang instead of
         *                   $wgContLang) while parsing language sensitive magic
         *                   words like GRAMMAR and PLURAL. This also disables
-        *                                       LanguageConverter.
+        *                   LanguageConverter.
         * @param $language  Language object: target language object, will override
         *                   $interface
+        * @throws MWException
         * @return String: HTML
         */
        public function parse( $text, $linestart = true, $interface = false, $language = null ) {
@@ -1912,7 +1903,7 @@ class OutputPage extends ContextSource {
         * @deprecated since 1.18 Use HttpStatus::getMessage() instead.
         */
        public static function getStatusMessage( $code ) {
-               wfDeprecated( __METHOD__ );
+               wfDeprecated( __METHOD__, '1.18' );
                return HttpStatus::getMessage( $code );
        }
 
@@ -1999,8 +1990,13 @@ class OutputPage extends ContextSource {
                        wfProfileOut( 'Output-skin' );
                }
 
+               // This hook allows last minute changes to final overall output by modifying output buffer
+               wfRunHooks( 'AfterFinalPageOutput', array( $this ) );
+
                $this->sendCacheControl();
+
                ob_end_flush();
+
                wfProfileOut( __METHOD__ );
        }
 
@@ -2032,10 +2028,6 @@ class OutputPage extends ContextSource {
         *                   based on $pageTitle
         */
        public function prepareErrorPage( $pageTitle, $htmlTitle = false ) {
-               if ( $this->getTitle() ) {
-                       $this->mDebugtext .= 'Original title: ' . $this->getTitle()->getPrefixedText() . "\n";
-               }
-
                $this->setPageTitle( $pageTitle );
                if ( $htmlTitle !== false ) {
                        $this->setHTMLTitle( $htmlTitle );
@@ -2067,7 +2059,7 @@ class OutputPage extends ContextSource {
                $this->prepareErrorPage( $title );
 
                if ( $msg instanceof Message ){
-                       $this->addHTML( $msg->parse() );
+                       $this->addHTML( $msg->parseAsBlock() );
                } else {
                        $this->addWikiMsgArray( $msg, $params );
                }
@@ -2082,8 +2074,6 @@ class OutputPage extends ContextSource {
         * @param $action String: action that was denied or null if unknown
         */
        public function showPermissionsErrorPage( $errors, $action = null ) {
-               global $wgGroupPermissions;
-
                // For some action (read, edit, create and upload), display a "login to do this action"
                // error if all of the following conditions are met:
                // 1. the user is not logged in
@@ -2092,8 +2082,8 @@ class OutputPage extends ContextSource {
                if ( in_array( $action, array( 'read', 'edit', 'createpage', 'createtalk', 'upload' ) )
                        && $this->getUser()->isAnon() && count( $errors ) == 1 && isset( $errors[0][0] )
                        && ( $errors[0][0] == 'badaccess-groups' || $errors[0][0] == 'badaccess-group0' )
-                       && ( ( isset( $wgGroupPermissions['user'][$action] ) && $wgGroupPermissions['user'][$action] )
-                       || ( isset( $wgGroupPermissions['autoconfirmed'][$action] ) && $wgGroupPermissions['autoconfirmed'][$action] ) )
+                       && ( User::groupHasPermission( 'user', $action )
+                       || User::groupHasPermission( 'autoconfirmed', $action ) )
                ) {
                        $displayReturnto = null;
 
@@ -2166,6 +2156,7 @@ class OutputPage extends ContextSource {
         * Display an error page noting that a given permission bit is required.
         * @deprecated since 1.18, just throw the exception directly
         * @param $permission String: key required
+        * @throws PermissionsError
         */
        public function permissionRequired( $permission ) {
                throw new PermissionsError( $permission );
@@ -2236,6 +2227,7 @@ class OutputPage extends ContextSource {
         * @param $protected Boolean: is this a permissions error?
         * @param $reasons   Array: list of reasons for this error, as returned by Title::getUserPermissionsErrors().
         * @param $action    String: action that was denied or null if unknown
+        * @throws ReadOnlyError
         */
        public function readOnlyPage( $source = null, $protected = false, $reasons = array(), $action = null ) {
                $this->setRobotPolicy( 'noindex,nofollow' );
@@ -2353,11 +2345,20 @@ $templates
         * @param $title Title to link
         * @param $query Array query string parameters
         * @param $text String text of the link (input is not escaped)
+        * @param $options Options array to pass to Linker
         */
-       public function addReturnTo( $title, $query = array(), $text = null ) {
-               $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL() ) );
+       public function addReturnTo( $title, $query = array(), $text = null, $options = array() ) {
+               if( in_array( 'http', $options ) ) {
+                       $proto = PROTO_HTTP;
+               } elseif( in_array( 'https', $options ) ) {
+                       $proto = PROTO_HTTPS;
+               } else {
+                       $proto = PROTO_RELATIVE;
+               }
+
+               $this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL( '', false, $proto ) ) );
                $link = $this->msg( 'returnto' )->rawParams(
-                       Linker::link( $title, $text, array(), $query ) )->escaped();
+                       Linker::link( $title, $text, array(), $query, $options ) )->escaped();
                $this->addHTML( "<p id=\"mw-returnto\">{$link}</p>\n" );
        }
 
@@ -2461,7 +2462,7 @@ $templates
         */
        private function addDefaultModules() {
                global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil, $wgUseAjax,
-                       $wgAjaxWatch, $wgEnableMWSuggest;
+                       $wgAjaxWatch;
 
                // Add base resources
                $this->addModules( array(
@@ -2489,8 +2490,8 @@ $templates
                                $this->addModules( 'mediawiki.page.watch.ajax' );
                        }
 
-                       if ( $wgEnableMWSuggest && !$this->getUser()->getOption( 'disablesuggest', false ) ) {
-                               $this->addModules( 'mediawiki.legacy.mwsuggest' );
+                       if ( !$this->getUser()->getOption( 'disablesuggest', false ) ) {
+                               $this->addModules( 'mediawiki.searchSuggest' );
                        }
                }
 
@@ -2914,7 +2915,7 @@ $templates
         * @return array
         */
        public function getJSVars() {
-               global $wgUseAjax, $wgEnableMWSuggest, $wgContLang;
+               global $wgContLang;
 
                $latestRevID = 0;
                $pageID = 0;
@@ -2980,9 +2981,6 @@ $templates
                foreach ( $title->getRestrictionTypes() as $type ) {
                        $vars['wgRestriction' . ucfirst( $type )] = $title->getRestrictions( $type );
                }
-               if ( $wgUseAjax && $wgEnableMWSuggest && !$this->getUser()->getOption( 'disablesuggest', false ) ) {
-                       $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces( $this->getUser() );
-               }
                if ( $title->isMainPage() ) {
                        $vars['wgIsMainPage'] = true;
                }
@@ -3550,9 +3548,6 @@ $templates
         * message names, or arrays, in which case the first element is the message name,
         * and subsequent elements are the parameters to that message.
         *
-        * The special named parameter 'options' in a message specification array is passed
-        * through to the $options parameter of wfMsgExt().
-        *
         * Don't use this for messages that are not in users interface language.
         *
         * For example:
@@ -3561,7 +3556,7 @@ $templates
         *
         * Is equivalent to:
         *
-        *    $wgOut->addWikiText( "<div class='error'>\n" . wfMsgNoTrans( 'some-error' ) . "\n</div>" );
+        *    $wgOut->addWikiText( "<div class='error'>\n" . wfMessage( 'some-error' )->plain() . "\n</div>" );
         *
         * The newline after opening div is needed in some wikitext. See bug 19226.
         *
@@ -3573,19 +3568,21 @@ $templates
                $msgSpecs = array_values( $msgSpecs );
                $s = $wrap;
                foreach ( $msgSpecs as $n => $spec ) {
-                       $options = array();
                        if ( is_array( $spec ) ) {
                                $args = $spec;
                                $name = array_shift( $args );
                                if ( isset( $args['options'] ) ) {
-                                       $options = $args['options'];
                                        unset( $args['options'] );
+                                       wfDeprecated(
+                                               'Adding "options" to ' . __METHOD__ . ' is no longer supported',
+                                               '1.20'
+                                       );
                                }
                        }  else {
                                $args = array();
                                $name = $spec;
                        }
-                       $s = str_replace( '$' . ( $n + 1 ), wfMsgExt( $name, $options, $args ), $s );
+                       $s = str_replace( '$' . ( $n + 1 ), $this->msg( $name, $args )->plain(), $s );
                }
                $this->addWikiText( $s );
        }
index dad71f8..2aed2af 100644 (file)
@@ -38,7 +38,7 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ){
-       $mwVersion = '1.20';
+       $mwVersion = '1.21';
        $phpVersion = PHP_VERSION;
        $message = "MediaWiki $mwVersion requires at least PHP version 5.3.2, you are using PHP $phpVersion.";
        if( $type == 'index.php' ) {
index 96ba446..077430d 100644 (file)
@@ -287,8 +287,7 @@ abstract class IndexPager extends ContextSource implements Pager {
                        if ( $numRows > $this->mLimit && $numRows > 1 ) {
                                $res->seek( $numRows - 1 );
                                $this->mPastTheEndRow = $res->fetchObject();
-                               $indexField = $this->mIndexField;
-                               $this->mPastTheEndIndex = $this->mPastTheEndRow->$indexField;
+                               $this->mPastTheEndIndex = $this->mPastTheEndRow->$indexColumn;
                                $res->seek( $numRows - 2 );
                                $row = $res->fetchRow();
                                $lastIndex = $row[$indexColumn];
index eaf781b..216ba48 100644 (file)
@@ -978,7 +978,7 @@ class Preferences {
         * @param $defaultPreferences Array
         */
        static function searchPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgContLang, $wgEnableMWSuggest, $wgVectorUseSimpleSearch;
+               global $wgContLang, $wgVectorUseSimpleSearch;
 
                ## Search #####################################
                $defaultPreferences['searchlimit'] = array(
@@ -988,22 +988,21 @@ class Preferences {
                        'min' => 0,
                );
 
-               if ( $wgEnableMWSuggest ) {
-                       $defaultPreferences['disablesuggest'] = array(
-                               'type' => 'toggle',
-                               'label-message' => 'mwsuggest-disable',
-                               'section' => 'searchoptions/displaysearchoptions',
-                       );
-               }
 
                if ( $wgVectorUseSimpleSearch ) {
                        $defaultPreferences['vector-simplesearch'] = array(
                                'type' => 'toggle',
                                'label-message' => 'vector-simplesearch-preference',
-                               'section' => 'searchoptions/displaysearchoptions'
+                               'section' => 'searchoptions/displaysearchoptions',
                        );
                }
 
+               $defaultPreferences['disablesuggest'] = array(
+                       'type' => 'toggle',
+                       'label-message' => 'mwsuggest-disable',
+                       'section' => 'searchoptions/displaysearchoptions',
+               );
+
                $defaultPreferences['searcheverything'] = array(
                        'type' => 'toggle',
                        'label-message' => 'searcheverything-enable',
index ce0e36b..beb20ea 100644 (file)
@@ -286,12 +286,10 @@ class ProtectionForm {
 
                # They shouldn't be able to do this anyway, but just to make sure, ensure that cascading restrictions aren't being applied
                #  to a semi-protected page.
-               global $wgGroupPermissions;
-
                $edit_restriction = isset( $this->mRestrictions['edit'] ) ? $this->mRestrictions['edit'] : '';
                $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' );
                if ($this->mCascade && ($edit_restriction != 'protect') &&
-                       !(isset($wgGroupPermissions[$edit_restriction]['protect']) && $wgGroupPermissions[$edit_restriction]['protect'] ) )
+                       !User::groupHasPermission( $edit_restriction, 'protect' ) )
                        $this->mCascade = false;
 
                $status = $this->mArticle->doUpdateRestrictions( $this->mRestrictions, $expiry, $this->mCascade, $reasonstr, $wgUser );
@@ -600,11 +598,11 @@ class ProtectionForm {
        }
 
        function buildCleanupScript() {
-               global $wgRestrictionLevels, $wgGroupPermissions, $wgOut;
+               global $wgRestrictionLevels, $wgOut;
 
                $cascadeableLevels = array();
                foreach( $wgRestrictionLevels as $key ) {
-                       if ( ( isset( $wgGroupPermissions[$key]['protect'] ) && $wgGroupPermissions[$key]['protect'] )
+                       if ( User::groupHasPermission( $key, 'protect' )
                                || $key == 'protect'
                        ) {
                                $cascadeableLevels[] = $key;
index ac559dc..1f21584 100644 (file)
@@ -151,6 +151,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * For back-compat, subclasses may return a raw SQL query here, as a string.
         * This is stronly deprecated; getQueryInfo() should be overridden instead.
+        * @throws MWException
         * @return string
         */
        function getSQL() {
index 332d039..debec69 100644 (file)
@@ -162,17 +162,6 @@ class RecentChange {
                return $this->mTitle;
        }
 
-       /**
-        * @return bool|Title
-        */
-       public function getMovedToTitle() {
-               if( $this->mMovedToTitle === false ) {
-                       $this->mMovedToTitle = Title::makeTitle( $this->mAttribs['rc_moved_to_ns'],
-                               $this->mAttribs['rc_moved_to_title'] );
-               }
-               return $this->mMovedToTitle;
-       }
-
        /**
         * Get the User object of the person who performed this change.
         *
@@ -421,8 +410,6 @@ class RecentChange {
                        'rc_this_oldid' => $newId,
                        'rc_last_oldid' => $oldId,
                        'rc_bot'        => $bot ? 1 : 0,
-                       'rc_moved_to_ns' => 0,
-                       'rc_moved_to_title' => '',
                        'rc_ip'         => self::checkIPAddress( $ip ),
                        'rc_patrolled'  => intval($patrol),
                        'rc_new'        => 0,  # obsolete
@@ -481,8 +468,6 @@ class RecentChange {
                        'rc_this_oldid'     => $newId,
                        'rc_last_oldid'     => 0,
                        'rc_bot'            => $bot ? 1 : 0,
-                       'rc_moved_to_ns'    => 0,
-                       'rc_moved_to_title' => '',
                        'rc_ip'             => self::checkIPAddress( $ip ),
                        'rc_patrolled'      => intval($patrol),
                        'rc_new'            => 1, # obsolete
@@ -570,8 +555,6 @@ class RecentChange {
                        'rc_this_oldid' => 0,
                        'rc_last_oldid' => 0,
                        'rc_bot'        => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
-                       'rc_moved_to_ns' => 0,
-                       'rc_moved_to_title' => '',
                        'rc_ip'         => self::checkIPAddress( $ip ),
                        'rc_patrolled'  => 1,
                        'rc_new'        => 0, # obsolete
@@ -624,8 +607,6 @@ class RecentChange {
                        'rc_this_oldid' => $row->rev_id,
                        'rc_last_oldid' => isset($row->rc_last_oldid) ? $row->rc_last_oldid : 0,
                        'rc_bot'        => 0,
-                       'rc_moved_to_ns'        => 0,
-                       'rc_moved_to_title'     => '',
                        'rc_ip' => '',
                        'rc_id' => $row->rc_id,
                        'rc_patrolled' => $row->rc_patrolled,
index 9da031e..4874490 100644 (file)
@@ -40,6 +40,10 @@ class Revision implements IDBAccessObject {
        protected $mTextRow;
        protected $mTitle;
        protected $mCurrent;
+       protected $mContentModel;
+       protected $mContentFormat;
+       protected $mContent;
+       protected $mContentHandler;
 
        // Revision deletion constants
        const DELETED_TEXT = 1;
@@ -114,15 +118,13 @@ class Revision implements IDBAccessObject {
         * @param $flags Integer Bitfield (optional)
         * @return Revision or null
         */
-       public static function newFromPageId( $pageId, $revId = 0, $flags = null ) {
+       public static function newFromPageId( $pageId, $revId = 0, $flags = 0 ) {
                $conds = array( 'page_id' => $pageId );
                if ( $revId ) {
                        $conds['rev_id'] = $revId;
                } else {
                        // Use a join to get the latest revision
                        $conds[] = 'rev_id = page_latest';
-                       // Callers assume this will be up-to-date
-                       $flags = is_int( $flags ) ? $flags : self::READ_LATEST; // b/c
                }
                return self::newFromConds( $conds, (int)$flags );
        }
@@ -135,9 +137,12 @@ class Revision implements IDBAccessObject {
         * @param $row
         * @param $overrides array
         *
+        * @throws MWException
         * @return Revision
         */
        public static function newFromArchiveRow( $row, $overrides = array() ) {
+               global $wgContentHandlerUseDB;
+
                $attribs = $overrides + array(
                        'page'       => isset( $row->ar_page_id ) ? $row->ar_page_id : null,
                        'id'         => isset( $row->ar_rev_id ) ? $row->ar_rev_id : null,
@@ -150,7 +155,15 @@ class Revision implements IDBAccessObject {
                        'deleted'    => $row->ar_deleted,
                        'len'        => $row->ar_len,
                        'sha1'       => isset( $row->ar_sha1 ) ? $row->ar_sha1 : null,
+                       'content_model'   => isset( $row->ar_content_model ) ? $row->ar_content_model : null,
+                       'content_format'  => isset( $row->ar_content_format ) ? $row->ar_content_format : null,
                );
+
+               if ( !$wgContentHandlerUseDB ) {
+                       unset( $attribs['content_model'] );
+                       unset( $attribs['content_format'] );
+               }
+
                if ( isset( $row->ar_text ) && !$row->ar_text_id ) {
                        // Pre-1.5 ar_text row
                        $attribs['text'] = self::getRevisionText( $row, 'ar_' );
@@ -358,7 +371,9 @@ class Revision implements IDBAccessObject {
         * @return array
         */
        public static function selectFields() {
-               return array(
+               global $wgContentHandlerUseDB;
+
+               $fields = array(
                        'rev_id',
                        'rev_page',
                        'rev_text_id',
@@ -370,8 +385,15 @@ class Revision implements IDBAccessObject {
                        'rev_deleted',
                        'rev_len',
                        'rev_parent_id',
-                       'rev_sha1'
+                       'rev_sha1',
                );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'rev_content_format';
+                       $fields[] = 'rev_content_model';
+               }
+
+               return $fields;
        }
 
        /**
@@ -436,6 +458,7 @@ class Revision implements IDBAccessObject {
         * Constructor
         *
         * @param $row Mixed: either a database row or an array
+        * @throws MWException
         * @access private
         */
        function __construct( $row ) {
@@ -475,6 +498,18 @@ class Revision implements IDBAccessObject {
                                $this->mTitle = null;
                        }
 
+                       if( !isset( $row->rev_content_model ) || is_null( $row->rev_content_model ) ) {
+                               $this->mContentModel = null; # determine on demand if needed
+                       } else {
+                               $this->mContentModel = strval( $row->rev_content_model );
+                       }
+
+                       if( !isset( $row->rev_content_format ) || is_null( $row->rev_content_format ) ) {
+                               $this->mContentFormat = null; # determine on demand if needed
+                       } else {
+                               $this->mContentFormat = strval( $row->rev_content_format );
+                       }
+
                        // Lazy extraction...
                        $this->mText      = null;
                        if( isset( $row->old_text ) ) {
@@ -496,6 +531,21 @@ class Revision implements IDBAccessObject {
                        // Build a new revision to be saved...
                        global $wgUser; // ugh
 
+
+                       # if we have a content object, use it to set the model and type
+                       if ( !empty( $row['content'] ) ) {
+                               //@todo: when is that set? test with external store setup! check out insertOn() [dk]
+                               if ( !empty( $row['text_id'] ) ) {
+                                       throw new MWException( "Text already stored in external store (id {$row['text_id']}), "
+                                                                                       . "can't serialize content object" );
+                               }
+
+                               $row['content_model'] = $row['content']->getModel();
+                               # note: mContentFormat is initializes later accordingly
+                               # note: content is serialized later in this method!
+                               # also set text to null?
+                       }
+
                        $this->mId        = isset( $row['id']         ) ? intval( $row['id']         ) : null;
                        $this->mPage      = isset( $row['page']       ) ? intval( $row['page']       ) : null;
                        $this->mTextId    = isset( $row['text_id']    ) ? intval( $row['text_id']    ) : null;
@@ -508,21 +558,63 @@ class Revision implements IDBAccessObject {
                        $this->mParentId  = isset( $row['parent_id']  ) ? intval( $row['parent_id']  ) : null;
                        $this->mSha1      = isset( $row['sha1']  )      ? strval( $row['sha1']  )      : null;
 
+                       $this->mContentModel   = isset( $row['content_model']  )  ? strval( $row['content_model'] )  : null;
+                       $this->mContentFormat  = isset( $row['content_format']  ) ? strval( $row['content_format'] ) : null;
+
                        // Enforce spacing trimming on supplied text
                        $this->mComment   = isset( $row['comment']    ) ?  trim( strval( $row['comment'] ) ) : null;
                        $this->mText      = isset( $row['text']       ) ? rtrim( strval( $row['text']    ) ) : null;
                        $this->mTextRow   = null;
 
-                       $this->mTitle     = null; # Load on demand if needed
+                       $this->mTitle     = isset( $row['title']      ) ? $row['title'] : null;
+
+                       // if we have a Content object, override mText and mContentModel
+                       if ( !empty( $row['content'] ) ) {
+                               if ( !( $row['content'] instanceof Content ) ) {
+                                       throw new MWException( '`content` field must contain a Content object.' );
+                               }
+
+                               $handler = $this->getContentHandler();
+                               $this->mContent = $row['content'];
+
+                               $this->mContentModel = $this->mContent->getModel();
+                               $this->mContentHandler = null;
+
+                               $this->mText = $handler->serializeContent( $row['content'], $this->getContentFormat() );
+                       } elseif ( !is_null( $this->mText ) ) {
+                               $handler = $this->getContentHandler();
+                               $this->mContent = $handler->unserializeContent( $this->mText );
+                       }
+
+                       // if we have a Title object, override mPage. Useful for testing and convenience.
+                       if ( isset( $row['title'] ) ) {
+                               $this->mTitle     = $row['title'];
+                               $this->mPage      = $this->mTitle->getArticleID();
+                       } else {
+                               $this->mTitle     = null; // Load on demand if needed
+                       }
+
+                       // @todo: XXX: really? we are about to create a revision. it will usually then be the current one.
                        $this->mCurrent   = false;
-                       # If we still have no length, see it we have the text to figure it out
+
+                       // If we still have no length, see it we have the text to figure it out
                        if ( !$this->mSize ) {
-                               $this->mSize = is_null( $this->mText ) ? null : strlen( $this->mText );
+                               if ( !is_null( $this->mContent ) ) {
+                                       $this->mSize = $this->mContent->getSize();
+                               } else {
+                                       #NOTE: this should never happen if we have either text or content object!
+                                       $this->mSize = null;
+                               }
                        }
-                       # Same for sha1
+
+                       // Same for sha1
                        if ( $this->mSha1 === null ) {
                                $this->mSha1 = is_null( $this->mText ) ? null : self::base36Sha1( $this->mText );
                        }
+
+                       // force lazy init
+                       $this->getContentModel();
+                       $this->getContentFormat();
                } else {
                        throw new MWException( 'Revision constructor passed invalid row format.' );
                }
@@ -595,7 +687,7 @@ class Revision implements IDBAccessObject {
                if( isset( $this->mTitle ) ) {
                        return $this->mTitle;
                }
-               if( !is_null( $this->mId ) ) { //rev_id is defined as NOT NULL
+               if( !is_null( $this->mId ) ) { //rev_id is defined as NOT NULL, but this revision may not yet have been inserted.
                        $dbr = wfGetDB( DB_SLAVE );
                        $row = $dbr->selectRow(
                                array( 'page', 'revision' ),
@@ -607,6 +699,11 @@ class Revision implements IDBAccessObject {
                                $this->mTitle = Title::newFromRow( $row );
                        }
                }
+
+               if ( !$this->mTitle && !is_null( $this->mPage ) && $this->mPage > 0 ) {
+                       $this->mTitle = Title::newFromID( $this->mPage );
+               }
+
                return $this->mTitle;
        }
 
@@ -789,15 +886,39 @@ class Revision implements IDBAccessObject {
         *      Revision::RAW              get the text regardless of permissions
         * @param $user User object to check for, only if FOR_THIS_USER is passed
         *              to the $audience parameter
+        *
+        * @deprecated in 1.21, use getContent() instead
+        * @todo: replace usage in core
         * @return String
         */
        public function getText( $audience = self::FOR_PUBLIC, User $user = null ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               $content = $this->getContent( $audience, $user );
+               return ContentHandler::getContentText( $content ); # returns the raw content text, if applicable
+       }
+
+       /**
+        * Fetch revision content if it's available to the specified audience.
+        * If the specified audience does not have the ability to view this
+        * revision, null will be returned.
+        *
+        * @param $audience Integer: one of:
+        *      Revision::FOR_PUBLIC       to be displayed to all users
+        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
+        * @since 1.21
+        * @return Content
+        */
+       public function getContent( $audience = self::FOR_PUBLIC, User $user = null ) {
                if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_TEXT ) ) {
-                       return '';
+                       return null;
                } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_TEXT, $user ) ) {
-                       return '';
+                       return null;
                } else {
-                       return $this->getRawText();
+                       return $this->getContentInternal();
                }
        }
 
@@ -816,15 +937,110 @@ class Revision implements IDBAccessObject {
         * Fetch revision text without regard for view restrictions
         *
         * @return String
+        *
+        * @deprecated since 1.21. Instead, use Revision::getContent( Revision::RAW )
+        *                         or Revision::getSerializedData() as appropriate.
         */
        public function getRawText() {
-               if( is_null( $this->mText ) ) {
-                       // Revision text is immutable. Load on demand:
-                       $this->mText = $this->loadText();
-               }
+               wfDeprecated( __METHOD__, "1.21" );
+
+               return $this->getText( self::RAW );
+       }
+
+       /**
+        * Fetch original serialized data without regard for view restrictions
+        *
+        * @since 1.21
+        * @return String
+        */
+       public function getSerializedData() {
                return $this->mText;
        }
 
+       /**
+        * Gets the content object for the revision
+        *
+        * @since 1.21
+        * @return Content
+        */
+       protected function getContentInternal() {
+               if( is_null( $this->mContent ) ) {
+                       // Revision is immutable. Load on demand:
+
+                       $handler = $this->getContentHandler();
+                       $format = $this->getContentFormat();
+                       $title = $this->getTitle();
+
+                       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 );
+               }
+
+               return $this->mContent->copy(); // NOTE: copy() will return $this for immutable content objects
+       }
+
+       /**
+        * Returns the content model for this revision.
+        *
+        * If no content model was stored in the database, $this->getTitle()->getContentModel() is
+        * used to determine the content model to use. If no title is know, CONTENT_MODEL_WIKITEXT
+        * is used as a last resort.
+        *
+        * @return String the content model id associated with this revision, see the CONTENT_MODEL_XXX constants.
+        **/
+       public function getContentModel() {
+               if ( !$this->mContentModel ) {
+                       $title = $this->getTitle();
+                       $this->mContentModel = ( $title ? $title->getContentModel() : CONTENT_MODEL_WIKITEXT );
+
+                       assert( !empty( $this->mContentModel ) );
+               }
+
+               return $this->mContentModel;
+       }
+
+       /**
+        * Returns the content format for this revision.
+        *
+        * If no content format was stored in the database, the default format for this
+        * revision's content model is returned.
+        *
+        * @return String the content format id associated with this revision, see the CONTENT_FORMAT_XXX constants.
+        **/
+       public function getContentFormat() {
+               if ( !$this->mContentFormat ) {
+                       $handler = $this->getContentHandler();
+                       $this->mContentFormat = $handler->getDefaultFormat();
+
+                       assert( !empty( $this->mContentFormat ) );
+               }
+
+               return $this->mContentFormat;
+       }
+
+       /**
+        * Returns the content handler appropriate for this revision's content model.
+        *
+        * @return ContentHandler
+        */
+       public function getContentHandler() {
+               if ( !$this->mContentHandler ) {
+                       $model = $this->getContentModel();
+                       $this->mContentHandler = ContentHandler::getForModelID( $model );
+
+                       $format = $this->getContentFormat();
+
+                       if ( !$this->mContentHandler->isSupportedFormat( $format ) ) {
+                               throw new MWException( "Oops, the content format $format is not supported for this content model, $model" );
+                       }
+               }
+
+               return $this->mContentHandler;
+       }
+
        /**
         * @return String
         */
@@ -1004,13 +1220,16 @@ class Revision implements IDBAccessObject {
         * number on success and dies horribly on failure.
         *
         * @param $dbw DatabaseBase: (master connection)
+        * @throws MWException
         * @return Integer
         */
        public function insertOn( $dbw ) {
-               global $wgDefaultExternalStore;
+               global $wgDefaultExternalStore, $wgContentHandlerUseDB;
 
                wfProfileIn( __METHOD__ );
 
+               $this->checkContentModel();
+
                $data = $this->mText;
                $flags = self::compressRevisionText( $data );
 
@@ -1046,27 +1265,47 @@ class Revision implements IDBAccessObject {
                $rev_id = isset( $this->mId )
                        ? $this->mId
                        : $dbw->nextSequenceValue( 'revision_rev_id_seq' );
-               $dbw->insert( 'revision',
-                       array(
-                               'rev_id'         => $rev_id,
-                               'rev_page'       => $this->mPage,
-                               'rev_text_id'    => $this->mTextId,
-                               'rev_comment'    => $this->mComment,
-                               'rev_minor_edit' => $this->mMinorEdit ? 1 : 0,
-                               'rev_user'       => $this->mUser,
-                               'rev_user_text'  => $this->mUserText,
-                               'rev_timestamp'  => $dbw->timestamp( $this->mTimestamp ),
-                               'rev_deleted'    => $this->mDeleted,
-                               'rev_len'        => $this->mSize,
-                               'rev_parent_id'  => is_null( $this->mParentId )
-                                       ? $this->getPreviousRevisionId( $dbw )
-                                       : $this->mParentId,
-                               'rev_sha1'       => is_null( $this->mSha1 )
-                                       ? self::base36Sha1( $this->mText )
-                                       : $this->mSha1
-                       ), __METHOD__
+               $row = array(
+                       'rev_id'         => $rev_id,
+                       'rev_page'       => $this->mPage,
+                       'rev_text_id'    => $this->mTextId,
+                       'rev_comment'    => $this->mComment,
+                       'rev_minor_edit' => $this->mMinorEdit ? 1 : 0,
+                       'rev_user'       => $this->mUser,
+                       'rev_user_text'  => $this->mUserText,
+                       'rev_timestamp'  => $dbw->timestamp( $this->mTimestamp ),
+                       'rev_deleted'    => $this->mDeleted,
+                       'rev_len'        => $this->mSize,
+                       'rev_parent_id'  => is_null( $this->mParentId )
+                               ? $this->getPreviousRevisionId( $dbw )
+                               : $this->mParentId,
+                       'rev_sha1'       => is_null( $this->mSha1 )
+                               ? Revision::base36Sha1( $this->mText )
+                               : $this->mSha1,
                );
 
+               if ( $wgContentHandlerUseDB ) {
+                       //NOTE: Store null for the default model and format, to save space.
+                       //XXX: Makes the DB sensitive to changed defaults. Make this behaviour optional? Only in miser mode?
+
+                       $model = $this->getContentModel();
+                       $format = $this->getContentFormat();
+
+                       $title = $this->getTitle();
+
+                       if ( $title === null ) {
+                               throw new MWException( "Insufficient information to determine the title of the revision's page!" );
+                       }
+
+                       $defaultModel = ContentHandler::getDefaultModelFor( $title );
+                       $defaultFormat = ContentHandler::getForModelID( $defaultModel )->getDefaultFormat();
+
+                       $row[ 'rev_content_model' ] = ( $model === $defaultModel ) ? null : $model;
+                       $row[ 'rev_content_format' ] = ( $format === $defaultFormat ) ? null : $format;
+               }
+
+               $dbw->insert( 'revision', $row, __METHOD__ );
+
                $this->mId = !is_null( $rev_id ) ? $rev_id : $dbw->insertId();
 
                wfRunHooks( 'RevisionInsertComplete', array( &$this, $data, $flags ) );
@@ -1075,6 +1314,52 @@ class Revision implements IDBAccessObject {
                return $this->mId;
        }
 
+       protected function checkContentModel() {
+               global $wgContentHandlerUseDB;
+
+               $title = $this->getTitle(); //note: may return null for revisions that have not yet been inserted.
+
+               $model = $this->getContentModel();
+               $format = $this->getContentFormat();
+               $handler = $this->getContentHandler();
+
+               if ( !$handler->isSupportedFormat( $format ) ) {
+                       $t = $title->getPrefixedDBkey();
+
+                       throw new MWException( "Can't use format $format with content model $model on $t" );
+               }
+
+               if ( !$wgContentHandlerUseDB && $title ) {
+                       // if $wgContentHandlerUseDB is not set, all revisions must use the default content model and format.
+
+                       $defaultModel = ContentHandler::getDefaultModelFor( $title );
+                       $defaultHandler = ContentHandler::getForModelID( $defaultModel );
+                       $defaultFormat = $defaultHandler->getDefaultFormat();
+
+                       if ( $this->getContentModel() != $defaultModel ) {
+                               $t = $title->getPrefixedDBkey();
+
+                               throw new MWException( "Can't save non-default content model with \$wgContentHandlerUseDB disabled: "
+                                                                               . "model is $model , default for $t is $defaultModel" );
+                       }
+
+                       if ( $this->getContentFormat() != $defaultFormat ) {
+                               $t = $title->getPrefixedDBkey();
+
+                               throw new MWException( "Can't use non-default content format with \$wgContentHandlerUseDB disabled: "
+                                                                               . "format is $format, default for $t is $defaultFormat" );
+                       }
+               }
+
+               $content = $this->getContent( Revision::RAW );
+
+               if ( !$content->isValid() ) {
+                       $t = $title->getPrefixedDBkey();
+
+                       throw new MWException( "Content of $t is not valid! Content model is $model" );
+               }
+       }
+
        /**
         * Get the base 36 SHA-1 value for a string of text
         * @param $text String
@@ -1159,12 +1444,21 @@ class Revision implements IDBAccessObject {
         * @return Revision|null on error
         */
        public static function newNullRevision( $dbw, $pageId, $summary, $minor ) {
+               global $wgContentHandlerUseDB;
+
                wfProfileIn( __METHOD__ );
 
+               $fields = array( 'page_latest', 'page_namespace', 'page_title',
+                                               'rev_text_id', 'rev_len', 'rev_sha1' );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'rev_content_model';
+                       $fields[] = 'rev_content_format';
+               }
+
                $current = $dbw->selectRow(
                        array( 'page', 'revision' ),
-                       array( 'page_latest', 'page_namespace', 'page_title',
-                               'rev_text_id', 'rev_len', 'rev_sha1' ),
+                       $fields,
                        array(
                                'page_id' => $pageId,
                                'page_latest=rev_id',
@@ -1172,7 +1466,7 @@ class Revision implements IDBAccessObject {
                        __METHOD__ );
 
                if( $current ) {
-                       $revision = new Revision( array(
+                       $row = array(
                                'page'       => $pageId,
                                'comment'    => $summary,
                                'minor_edit' => $minor,
@@ -1180,7 +1474,14 @@ class Revision implements IDBAccessObject {
                                'parent_id'  => $current->page_latest,
                                'len'        => $current->rev_len,
                                'sha1'       => $current->rev_sha1
-                               ) );
+                       );
+
+                       if ( $wgContentHandlerUseDB ) {
+                               $row[ 'content_model' ] = $current->rev_content_model;
+                               $row[ 'content_format' ] = $current->rev_content_format;
+                       }
+
+                       $revision = new Revision( $row );
                        $revision->setTitle( Title::makeTitle( $current->page_namespace, $current->page_title ) );
                } else {
                        $revision = null;
@@ -1290,4 +1591,42 @@ class Revision implements IDBAccessObject {
                }
                return 0;
        }
+
+       /**
+        * Check if no edits were made by other users since
+        * the time a user started editing the page. Limit to
+        * 50 revisions for the sake of performance.
+        *
+        * @since 1.20
+        *
+        * @param DatabaseBase|int $db the Database to perform the check on. May be given as a Database object or
+        *        a database identifier usable with wfGetDB.
+        * @param int $pageId the ID of the page in question
+        * @param int $userId the ID of the user in question
+        * @param string $since look at edits since this time
+        *
+        * @return bool True if the given user was the only one to edit since the given timestamp
+        */
+       public static function userWasLastToEdit( $db, $pageId, $userId, $since ) {
+               if ( !$userId ) return false;
+
+               if ( is_int( $db ) ) {
+                       $db = wfGetDB( $db );
+               }
+
+               $res = $db->select( 'revision',
+                       'rev_user',
+                       array(
+                               'rev_page' => $pageId,
+                               'rev_timestamp > ' . $db->addQuotes( $db->timestamp( $since ) )
+                       ),
+                       __METHOD__,
+                       array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 50 ) );
+               foreach ( $res as $row ) {
+                       if ( $row->rev_user != $userId ) {
+                               return false;
+                       }
+               }
+               return true;
+       }
 }
index a0c77da..8919f10 100644 (file)
@@ -692,7 +692,9 @@ class Sanitizer {
                                }
                        }
 
-                       if ( $attribute === 'align' && !in_array( $element, $cells ) ) {
+                       // 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';
@@ -910,7 +912,7 @@ class Sanitizer {
                // Reject problematic keywords and control characters
                if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) {
                        return '/* invalid control char */';
-               } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( !ix', $value ) ) {
+               } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( !ix', $value ) ) {
                        return '/* insecure input */';
                }
                return $value;
@@ -1026,7 +1028,7 @@ class Sanitizer {
 
                # Stupid hack
                $encValue = preg_replace_callback(
-                       '/(' . wfUrlProtocols() . ')/',
+                       '/((?i)' . wfUrlProtocols() . ')/',
                        array( 'Sanitizer', 'armorLinksCallback' ),
                        $encValue );
                return $encValue;
@@ -1181,6 +1183,7 @@ class Sanitizer {
         * attribs regex matches.
         *
         * @param $set Array
+        * @throws MWException
         * @return String
         */
        private static function getTagAttributeCallback( $set ) {
index baf7b35..83ca516 100644 (file)
@@ -317,12 +317,6 @@ if ( $wgUseFileCache || $wgUseSquid ) {
        $wgDebugToolbar = false;
 }
 
-# $wgAllowRealName and $wgAllowUserSkin were removed in 1.16
-# in favor of $wgHiddenPrefs, handle b/c here
-if ( !$wgAllowRealName ) {
-       $wgHiddenPrefs[] = 'realname';
-}
-
 # Doesn't make sense to have if disabled.
 if ( !$wgEnotifMinorEdits ) {
        $wgHiddenPrefs[] = 'enotifminoredits';
@@ -332,9 +326,6 @@ if ( !$wgEnotifMinorEdits ) {
 foreach( $wgDisabledActions as $action ){
        $wgActions[$action] = false;
 }
-if( !$wgAllowPageInfo ){
-       $wgActions['info'] = false;
-}
 
 if ( !$wgHtml5Version && $wgHtml5 && $wgAllowRdfaAttributes ) {
        # see http://www.w3.org/TR/rdfa-in-html/#document-conformance
@@ -372,7 +363,7 @@ if ( $wgNewUserLog ) {
 }
 
 if ( $wgCookieSecure === 'detect' ) {
-       $wgCookieSecure = ( WebRequest::detectProtocol() === 'https:' );
+       $wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
 }
 
 // Disable MWDebug for command line mode, this prevents MWDebug from eating up
index 7f3f655..01841b6 100644 (file)
@@ -48,8 +48,7 @@ class SiteStats {
                        # Update schema
                        $u = new SiteStatsUpdate( 0, 0, 0 );
                        $u->doUpdate();
-                       $dbr = wfGetDB( DB_SLAVE );
-                       self::$row = $dbr->selectRow( 'site_stats', '*', false, __METHOD__ );
+                       self::$row = self::doLoad( wfGetDB( DB_SLAVE ) );
                }
 
                self::$loaded = true;
@@ -91,7 +90,16 @@ class SiteStats {
         * @return Bool|ResultWrapper
         */
        static function doLoad( $db ) {
-               return $db->selectRow( 'site_stats', '*', false, __METHOD__ );
+               return $db->selectRow( 'site_stats', array(
+                               'ss_row_id',
+                               'ss_total_views',
+                               'ss_total_edits',
+                               'ss_good_articles',
+                               'ss_total_pages',
+                               'ss_users',
+                               'ss_active_users',
+                               'ss_images',
+                       ), false, __METHOD__ );
        }
 
        /**
@@ -286,6 +294,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        $this->doUpdatePendingDeltas();
                } else {
                        $dbw = wfGetDB( DB_MASTER );
+                       // Need a separate transaction because this a global lock
+                       $dbw->begin( __METHOD__ );
 
                        $lockKey = wfMemcKey( 'site_stats' ); // prepend wiki ID
                        if ( $rate ) {
@@ -306,9 +316,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
                                $this->images   += ( $pd['ss_images']['+'] - $pd['ss_images']['-'] );
                        }
 
-                       // Need a separate transaction because this a global lock
-                       $dbw->begin( __METHOD__ );
-
                        // Build up an SQL query of deltas and apply them...
                        $updates = '';
                        $this->appendUpdate( $updates, 'ss_total_views', $this->views );
@@ -347,8 +354,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        array(
                                'rc_user != 0',
                                'rc_bot' => 0,
-                               "rc_log_type != 'newusers' OR rc_log_type IS NULL",
-                               "rc_timestamp >= '{$dbw->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 )}'",
+                               'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL',
+                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 ) ),
                        ),
                        __METHOD__
                );
index 5af6aec..24d48bc 100644 (file)
@@ -290,8 +290,8 @@ abstract class Skin extends ContextSource {
                        return $this->mRelevantUser;
                }
                $title = $this->getRelevantTitle();
-               if( $title->getNamespace() == NS_USER || $title->getNamespace() == NS_USER_TALK ) {
-                       $rootUser = strtok( $title->getText(), '/' );
+               if( $title->hasSubjectNamespace( NS_USER ) ) {
+                       $rootUser = $title->getRootText();
                        if ( User::isIP( $rootUser ) ) {
                                $this->mRelevantUser = User::newFromName( $rootUser, false );
                        } else {
@@ -437,7 +437,7 @@ abstract class Skin extends ContextSource {
                if ( !empty( $allCats['normal'] ) ) {
                        $t = $embed . implode( "{$pop}{$embed}" , $allCats['normal'] ) . $pop;
 
-                       $msg = $this->msg( 'pagecategories', count( $allCats['normal'] ) )->escaped();
+                       $msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) )->escaped();
                        $linkPage = wfMessage( 'pagecategorieslink' )->inContentLanguage()->text();
                        $s .= '<div id="mw-normal-catlinks" class="mw-normal-catlinks">' .
                                Linker::link( Title::newFromText( $linkPage ), $msg )
@@ -455,7 +455,7 @@ abstract class Skin extends ContextSource {
                        }
 
                        $s .= "<div id=\"mw-hidden-catlinks\" class=\"mw-hidden-catlinks$class\">" .
-                               $this->msg( 'hidden-categories', count( $allCats['hidden'] ) )->escaped() .
+                               $this->msg( 'hidden-categories' )->numParams( count( $allCats['hidden'] ) )->escaped() .
                                $colon . '<ul>' . $embed . implode( "{$pop}{$embed}" , $allCats['hidden'] ) . $pop . '</ul>' .
                                '</div>';
                }
@@ -568,71 +568,7 @@ abstract class Skin extends ContextSource {
         * @return String HTML containing debug data, if enabled (otherwise empty).
         */
        protected function generateDebugHTML() {
-               global $wgShowDebug;
-
-               $html = MWDebug::getDebugHTML( $this->getContext() );
-
-               if ( $wgShowDebug ) {
-                       $listInternals = $this->formatDebugHTML( $this->getOutput()->mDebugtext );
-                       $html .= "\n<hr />\n<strong>Debug data:</strong><ul id=\"mw-debug-html\">" .
-                               $listInternals . "</ul>\n";
-               }
-
-               return $html;
-       }
-
-       /**
-        * @param $debugText string
-        * @return string
-        */
-       private function formatDebugHTML( $debugText ) {
-               global $wgDebugTimestamps;
-
-               $lines = explode( "\n", $debugText );
-               $curIdent = 0;
-               $ret = '<li>';
-
-               foreach ( $lines as $line ) {
-                       $pre = '';
-                       if ( $wgDebugTimestamps ) {
-                               $matches = array();
-                               if ( preg_match( '/^(\d+\.\d+ {1,3}\d+.\dM\s{2})/', $line, $matches ) ) {
-                                       $pre = $matches[1];
-                                       $line = substr( $line, strlen( $pre ) );
-                               }
-                       }
-                       $display = ltrim( $line );
-                       $ident = strlen( $line ) - strlen( $display );
-                       $diff = $ident - $curIdent;
-
-                       $display = $pre . $display;
-                       if ( $display == '' ) {
-                               $display = "\xc2\xa0";
-                       }
-
-                       if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
-                               $ident = $curIdent;
-                               $diff = 0;
-                               $display = '<span style="background:yellow;">' . htmlspecialchars( $display ) . '</span>';
-                       } else {
-                               $display = htmlspecialchars( $display );
-                       }
-
-                       if ( $diff < 0 ) {
-                               $ret .= str_repeat( "</li></ul>\n", -$diff ) . "</li><li>\n";
-                       } elseif ( $diff == 0 ) {
-                               $ret .= "</li><li>\n";
-                       } else {
-                               $ret .= str_repeat( "<ul><li>\n", $diff );
-                       }
-                       $ret .= "<tt>$display</tt>\n";
-
-                       $curIdent = $ident;
-               }
-
-               $ret .= str_repeat( '</li></ul>', $curIdent ) . '</li>';
-
-               return $ret;
+               return MWDebug::getHTMLDebugLog();
        }
 
        /**
@@ -899,7 +835,7 @@ abstract class Skin extends ContextSource {
         */
        function logoText( $align = '' ) {
                if ( $align != '' ) {
-                       $a = " align='{$align}'";
+                       $a = " style='float: {$align};'";
                } else {
                        $a = '';
                }
@@ -1127,7 +1063,7 @@ abstract class Skin extends ContextSource {
         * @return String URL
         */
        static function makeInternalOrExternalUrl( $name ) {
-               if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $name ) ) {
+               if ( preg_match( '/^(?i:' . wfUrlProtocols() . ')/', $name ) ) {
                        return $name;
                } else {
                        return self::makeUrl( $name );
@@ -1291,7 +1227,7 @@ abstract class Skin extends ContextSource {
                                                $text = $line[1];
                                        }
 
-                                       if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $link ) ) {
+                                       if ( preg_match( '/^(?i:' . wfUrlProtocols() . ')/', $link ) ) {
                                                $href = $link;
 
                                                // Parser::getExternalLinkAttribs won't work here because of the Namespace things
@@ -1352,18 +1288,19 @@ abstract class Skin extends ContextSource {
                $ntl = '';
 
                if ( count( $newtalks ) == 1 && $newtalks[0]['wiki'] === wfWikiID() ) {
-                       $userTalkTitle = $this->getUser()->getTalkPage();
+                       $uTalkTitle = $this->getUser()->getTalkPage();
 
-                       if ( !$userTalkTitle->equals( $out->getTitle() ) ) {
+                       if ( !$uTalkTitle->equals( $out->getTitle() ) ) {
                                $lastSeenRev = isset( $newtalks[0]['rev'] ) ? $newtalks[0]['rev'] : null;
                                $nofAuthors = 0;
                                if ( $lastSeenRev !== null ) {
                                        $plural = true; // Default if we have a last seen revision: if unknown, use plural
-                                       $latestRev = Revision::newFromTitle ($userTalkTitle);
+                                       $latestRev = Revision::newFromTitle( $uTalkTitle, false, Revision::READ_NORMAL );
                                        if ( $latestRev !== null ) {
                                                // Singular if only 1 unseen revision, plural if several unseen revisions.
                                                $plural = $latestRev->getParentId() !== $lastSeenRev->getId();
-                                               $nofAuthors = $userTalkTitle->countAuthorsBetween( $lastSeenRev, $latestRev, 10, 'include_new' );
+                                               $nofAuthors = $uTalkTitle->countAuthorsBetween(
+                                                       $lastSeenRev, $latestRev, 10, 'include_new' );
                                        }
                                } else {
                                        // Singular if no revision -> diff link will show latest change only in any case
@@ -1374,14 +1311,14 @@ abstract class Skin extends ContextSource {
                                // the number of revisions or authors is not necessarily the same as the number of
                                // "messages".
                                $newMessagesLink = Linker::linkKnown(
-                                       $userTalkTitle,
+                                       $uTalkTitle,
                                        $this->msg( 'newmessageslinkplural' )->params( $plural )->escaped(),
                                        array(),
                                        array( 'redirect' => 'no' )
                                );
 
                                $newMessagesDiffLink = Linker::linkKnown(
-                                       $userTalkTitle,
+                                       $uTalkTitle,
                                        $this->msg( 'newmessagesdifflinkplural' )->params( $plural )->escaped(),
                                        array(),
                                        $lastSeenRev !== null
@@ -1599,6 +1536,7 @@ abstract class Skin extends ContextSource {
         *
         * @param $fname String Name of called method
         * @param $args Array Arguments to the method
+        * @throws MWException
         * @return mixed
         */
        function __call( $fname, $args ) {
index aa6b22a..7fb17a7 100644 (file)
@@ -120,21 +120,21 @@ class LegacyTemplate extends BaseTemplate {
                }
 
                $s .= "\n<div id='content'>\n<div id='topbar'>\n" .
-                 "<table border='0' cellspacing='0' width='100%'>\n<tr>\n";
+                 "<table cellspacing='0' style='width: 100%;'>\n<tr>\n";
 
                if ( $this->getSkin()->qbSetting() == 0 ) {
-                       $s .= "<td class='top' align='left' valign='top' rowspan='{$rows}'>\n" .
+                       $s .= "<td class='top' style='text-align: left; vertical-align: top;' rowspan='{$rows}'>\n" .
                                $this->getSkin()->logoText( $wgLang->alignStart() ) . '</td>';
                }
 
                $l = $wgLang->alignStart();
-               $s .= "<td {$borderhack} align='$l' valign='top'>\n";
+               $s .= "<td {$borderhack} style='text-align: $l; vertical-align: top;'>\n";
 
                $s .= $this->topLinks();
                $s .= '<p class="subtitle">' . $this->pageTitleLinks() . "</p>\n";
 
                $r = $wgLang->alignEnd();
-               $s .= "</td>\n<td {$borderhack} valign='top' align='$r' nowrap='nowrap'>";
+               $s .= "</td>\n<td {$borderhack} style='text-align: $r; vertical-align: top;' nowrap='nowrap'>";
                $s .= $this->nameAndLogin();
                $s .= "\n<br />" . $this->searchForm() . '</td>';
 
@@ -553,7 +553,7 @@ class LegacyTemplate extends BaseTemplate {
         */
        function getQuickbarCompensator( $rows = 1 ) {
                wfDeprecated( __METHOD__, '1.19' );
-               return "<td width='152' rowspan='{$rows}'>&#160;</td>";
+               return "<td style='width: 152px;' rowspan='{$rows}'>&#160;</td>";
        }
 
        function editThisPage() {
index ace339a..6233228 100644 (file)
@@ -135,7 +135,6 @@ class SkinTemplate extends Skin {
                global $wgDisableCounters, $wgSitename, $wgLogo, $wgHideInterlanguageLinks;
                global $wgMaxCredits, $wgShowCreditsIfMax;
                global $wgPageShowWatchingUsers;
-               global $wgDebugComments;
                global $wgArticlePath, $wgScriptPath, $wgServer;
 
                wfProfileIn( __METHOD__ );
@@ -387,12 +386,6 @@ class SkinTemplate extends Skin {
                        }
                }
 
-               if ( $wgDebugComments ) {
-                       $tpl->setRef( 'debug', $out->mDebugtext );
-               } else {
-                       $tpl->set( 'debug', '' );
-               }
-
                $tpl->set( 'sitenotice', $this->getSiteNotice() );
                $tpl->set( 'bottomscripts', $this->bottomScripts() );
                $tpl->set( 'printfooter', $this->printSource() );
@@ -407,7 +400,7 @@ class SkinTemplate extends Skin {
                if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
                        in_array( $request->getVal( 'action', 'view' ), array( 'view', 'historysubmit' ) ) &&
                        ( $title->exists() || $title->getNamespace() == NS_MEDIAWIKI ) ) {
-                       $pageLang = $title->getPageLanguage();
+                       $pageLang = $title->getPageViewLanguage();
                        $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
                        $realBodyAttribs['dir'] = $pageLang->getDir();
                        $realBodyAttribs['class'] = 'mw-content-'.$pageLang->getDir();
@@ -430,7 +423,7 @@ class SkinTemplate extends Skin {
                                        if ( strval( $ilLangName ) === '' ) {
                                                $ilLangName = $l;
                                        } else {
-                                               $ilLangName = $this->getLanguage()->ucfirst( $ilLangName );
+                                               $ilLangName = $this->formatLanguageName( $ilLangName );
                                        }
                                        $language_urls[] = array(
                                                'href' => $nt->getFullURL(),
@@ -468,6 +461,7 @@ class SkinTemplate extends Skin {
                        $tpl->set( 'headscripts', $out->getHeadScripts() . $out->getHeadItems() );
                }
 
+               $tpl->set( 'debug', '' );
                $tpl->set( 'debughtml', $this->generateDebugHTML() );
                $tpl->set( 'reporttime', wfReportTime() );
 
@@ -504,6 +498,18 @@ class SkinTemplate extends Skin {
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * Format language name for use in sidebar interlanguage links list.
+        * By default it is capitalized.
+        *
+        * @param $name string Language name, e.g. "English" or "español"
+        * @return string
+        * @private
+        */
+       function formatLanguageName( $name ) {
+               return $this->getLanguage()->ucfirst( $name );
+       }
+
        /**
         * Output the string, or print error message if it's
         * an error object of the appropriate type.
@@ -535,6 +541,8 @@ class SkinTemplate extends Skin {
         * @return array
         */
        protected function buildPersonalUrls() {
+               global $wgSecureLogin;
+
                $title = $this->getTitle();
                $request = $this->getRequest();
                $pageurl = $title->getLocalURL();
@@ -557,6 +565,11 @@ class SkinTemplate extends Skin {
                                $a['returntoquery'] = $query;
                        }
                }
+
+               if ( $wgSecureLogin && $request->detectProtocol() === 'https' ) {
+                       $a['wpStickHTTPS'] = true;
+               }
+
                $returnto = wfArrayToCGI( $a );
                if( $this->loggedin ) {
                        $personal_urls['userpage'] = array(
@@ -629,6 +642,7 @@ class SkinTemplate extends Skin {
                        global $wgSecureLogin;
                        $proto = $wgSecureLogin ? PROTO_HTTPS : null;
 
+                       $login_id = $this->showIPinHeader() ? 'anonlogin' : 'login';
                        $login_url = array(
                                'text' => $this->msg( $loginlink )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogin', $returnto, $proto ),
@@ -642,10 +656,6 @@ class SkinTemplate extends Skin {
                                'class' => $wgSecureLogin ? 'link-https' : ''
                        );
 
-                       if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) {
-                               $personal_urls['createaccount'] = $createaccount_url;
-                       }
-
                        if( $this->showIPinHeader() ) {
                                $href = &$this->userpageUrlDetails['href'];
                                $personal_urls['anonuserpage'] = array(
@@ -662,10 +672,13 @@ class SkinTemplate extends Skin {
                                        'class' => $usertalkUrlDetails['exists'] ? false : 'new',
                                        'active' => ( $pageurl == $href )
                                );
-                               $personal_urls['anonlogin'] = $login_url;
-                       } else {
-                               $personal_urls['login'] = $login_url;
                        }
+
+                       if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) {
+                               $personal_urls['createaccount'] = $createaccount_url;
+                       }
+
+                       $personal_urls[$login_id] = $login_url;
                }
 
                wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title ) );
@@ -1136,6 +1149,7 @@ class SkinTemplate extends Skin {
 
                $nav_urls['print'] = false;
                $nav_urls['permalink'] = false;
+               $nav_urls['info'] = false;
                $nav_urls['whatlinkshere'] = false;
                $nav_urls['recentchangeslinked'] = false;
                $nav_urls['contributions'] = false;
@@ -1159,10 +1173,15 @@ class SkinTemplate extends Skin {
                        if ( $revid ) {
                                $nav_urls['permalink'] = array(
                                        'text' => $this->msg( 'permalink' )->text(),
-                                       'href' => $out->getTitle()->getLocalURL( "oldid=$revid" )
+                                       'href' => $this->getTitle()->getLocalURL( "oldid=$revid" )
                                );
                        }
 
+                       $nav_urls['info'] = array(
+                               'text' => $this->msg( 'pageinfo-toolboxlink' )->text(),
+                               'href' => $out->getTitle()->getLocalURL( "action=info" )
+                       );
+
                        // Use the copy of revision ID in case this undocumented, shady hook tries to mess with internals
                        wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
                                array( &$this, &$nav_urls, &$revid, &$revid ) );
@@ -1187,9 +1206,8 @@ class SkinTemplate extends Skin {
                                'href' => self::makeSpecialUrlSubpage( 'Contributions', $rootUser )
                        );
 
-                       $logPage = SpecialPage::getTitleFor( 'Log' );
                        $nav_urls['log'] = array(
-                               'href' => $logPage->getLocalUrl( array( 'user' => $rootUser ) )
+                               'href' => self::makeSpecialUrlSubpage( 'Log', $rootUser )
                        );
 
                        if ( $this->getUser()->isAllowed( 'block' ) ) {
@@ -1232,7 +1250,7 @@ abstract class QuickTemplate {
        /**
         * Constructor
         */
-       public function QuickTemplate() {
+       function __construct() {
                $this->data = array();
                $this->translator = new MediaWiki_I18N();
        }
@@ -1424,6 +1442,10 @@ abstract class BaseTemplate extends QuickTemplate {
                                $toolbox['permalink']['id'] = 't-permalink';
                        }
                }
+               if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
+                       $toolbox['info'] = $this->data['nav_urls']['info'];
+               }
+
                wfRunHooks( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
                wfProfileOut( __METHOD__ );
                return $toolbox;
@@ -1790,11 +1812,15 @@ abstract class BaseTemplate extends QuickTemplate {
                                );
                                unset( $buttonAttrs['src'] );
                                unset( $buttonAttrs['alt'] );
+                               unset( $buttonAttrs['width'] );
+                               unset( $buttonAttrs['height'] );
                                $imgAttrs = array(
                                        'src' => $attrs['src'],
                                        'alt' => isset( $attrs['alt'] )
                                                ? $attrs['alt']
                                                : $this->translator->translate( 'searchbutton' ),
+                                       'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
+                                       'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
                                );
                                return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
                        default:
@@ -1886,13 +1912,7 @@ abstract class BaseTemplate extends QuickTemplate {
        function printTrail() { ?>
 <?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
 <?php $this->html( 'reporttime' ) ?>
-<?php if ( $this->data['debug'] ): ?>
-<!-- Debug output:
-<?php $this->text( 'debug' ); ?>
-
--->
-<?php endif;
+<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() );
        }
 
 }
-
index e2932e1..a72c1af 100644 (file)
@@ -105,19 +105,6 @@ class SpecialPage {
                return SpecialPageFactory::resolveAlias( $alias );
        }
 
-       /**
-        * Add a page to the list of valid special pages. This used to be the preferred
-        * method for adding special pages in extensions. It's now suggested that you add
-        * an associative record to $wgSpecialPages. This avoids autoloading SpecialPage.
-        *
-        * @param $page SpecialPage
-        * @deprecated since 1.7, warnings in 1.17, might be removed in 1.20
-        */
-       static function addPage( &$page ) {
-               wfDeprecated( __METHOD__, '1.7' );
-               SpecialPageFactory::getList()->{$page->mName} = $page;
-       }
-
        /**
         * Add a page to a certain display group for Special:SpecialPages
         *
@@ -267,6 +254,7 @@ class SpecialPage {
         *
         * @param $name String
         * @param $subpage String|Bool subpage string, or false to not use a subpage
+        * @throws MWException
         * @return Title object
         */
        public static function getTitleFor( $name, $subpage = false ) {
@@ -351,7 +339,7 @@ class SpecialPage {
                        $this->mFunction = $function;
                }
                if ( $file === 'default' ) {
-                       $this->mFile = dirname( __FILE__ ) . "/specials/Special$name.php";
+                       $this->mFile = __DIR__ . "/specials/Special$name.php";
                } else {
                        $this->mFile = $file;
                }
@@ -363,6 +351,7 @@ class SpecialPage {
         *
         * @param $fName String Name of called method
         * @param $a Array Arguments to the method
+        * @throws MWException
         * @deprecated since 1.17, call parent::__construct()
         */
        public function __call( $fName, $a ) {
@@ -532,9 +521,8 @@ class SpecialPage {
         *   pages?
         */
        public function isRestricted() {
-               global $wgGroupPermissions;
                // DWIM: If all anons can do something, then it is not restricted
-               return $this->mRestriction != '' && empty( $wgGroupPermissions['*'][$this->mRestriction] );
+               return $this->mRestriction != '' && User::groupHasPermission( '*', $this->mRestriction );
        }
 
        /**
@@ -945,8 +933,8 @@ abstract class FormSpecialPage extends SpecialPage {
         * Called from execute() to check if the given user can perform this action.
         * Failures here must throw subclasses of ErrorPageError.
         * @param $user User
+        * @throws UserBlockedError
         * @return Bool true
-        * @throws ErrorPageError
         */
        protected function checkExecutePermissions( User $user ) {
                $this->checkPermissions();
index 95f75a8..8ed5264 100644 (file)
@@ -155,7 +155,6 @@ class SpecialPageFactory {
                'Blankpage'                 => 'SpecialBlankpage',
                'Blockme'                   => 'SpecialBlockme',
                'Emailuser'                 => 'SpecialEmailUser',
-               'JavaScriptTest'            => 'SpecialJavaScriptTest',
                'Movepage'                  => 'MovePageForm',
                'Mycontributions'           => 'SpecialMycontributions',
                'Mypage'                    => 'SpecialMypage',
@@ -178,7 +177,7 @@ class SpecialPageFactory {
        static function getList() {
                global $wgSpecialPages;
                global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
-               global $wgEnableEmail;
+               global $wgEnableEmail, $wgEnableJavaScriptTest;
 
                if ( !is_object( self::$mList ) ) {
                        wfProfileIn( __METHOD__ );
@@ -200,6 +199,10 @@ class SpecialPageFactory {
                                self::$mList['ChangeEmail'] = 'SpecialChangeEmail';
                        }
 
+                       if( $wgEnableJavaScriptTest ) {
+                               self::$mList['JavaScriptTest'] = 'SpecialJavaScriptTest';
+                       }
+
                        // Add extension special pages
                        self::$mList = array_merge( self::$mList, $wgSpecialPages );
 
index aeb9ba4..13bb361 100644 (file)
@@ -36,11 +36,16 @@ abstract class SqlDataUpdate extends DataUpdate {
        protected $mOptions;       //!< SELECT options to be used (array)
 
        private   $mHasTransaction; //!< bool whether a transaction is open on this object (internal use only!)
+       protected $mUseTransaction; //!< bool whether this update should be wrapped in a transaction
 
        /**
         * Constructor
-       **/
-       public function __construct( ) {
+        *
+        * @param bool $withTransaction whether this update should be wrapped in a transaction (default: true).
+        *             A transaction is only started if no transaction is already in progress,
+        *             see beginTransaction() for details.
+        **/
+       public function __construct( $withTransaction = true ) {
                global $wgAntiLockFlags;
 
                parent::__construct( );
@@ -53,16 +58,22 @@ abstract class SqlDataUpdate extends DataUpdate {
 
                // @todo: get connection only when it's needed? make sure that doesn't break anything, especially transactions!
                $this->mDb = wfGetDB( DB_MASTER );
+
+               $this->mWithTransaction = $withTransaction;
                $this->mHasTransaction = false;
        }
 
        /**
-        * Begin a database transaction.
+        * Begin a database transaction, if $withTransaction was given as true in the constructor for this SqlDataUpdate.
         *
-        * Because nested transactions are not supportred by the Database class, this implementation
-        * checkes Database::trxLevel() and only opens a transaction if none is yet active.
+        * Because nested transactions are not supported by the Database class, this implementation
+        * checks Database::trxLevel() and only opens a transaction if none is already active.
         */
        public function beginTransaction() {
+               if ( !$this->mWithTransaction ) {
+                       return;
+               }
+
                // NOTE: nested transactions are not supported, only start a transaction if none is open
                if ( $this->mDb->trxLevel() === 0 ) {
                        $this->mDb->begin( get_class( $this ) . '::beginTransaction'  );
@@ -76,6 +87,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        public function commitTransaction() {
                if ( $this->mHasTransaction ) {
                        $this->mDb->commit( get_class( $this ) . '::commitTransaction' );
+                       $this->mHasTransaction = false;
                }
        }
 
@@ -83,8 +95,9 @@ abstract class SqlDataUpdate extends DataUpdate {
         * Abort the database transaction started via beginTransaction (if any).
         */
        public function abortTransaction() {
-               if ( $this->mHasTransaction ) {
+               if ( $this->mHasTransaction ) { //XXX: actually... maybe always?
                        $this->mDb->rollback( get_class( $this ) . '::abortTransaction' );
+                       $this->mHasTransaction = false;
                }
        }
 
@@ -95,7 +108,7 @@ abstract class SqlDataUpdate extends DataUpdate {
         * @param $namespace Integer
         * @param $dbkeys Array
         */
-       protected function invalidatePages( $namespace, Array $dbkeys ) {
+       protected function invalidatePages( $namespace, array $dbkeys ) {
                if ( !count( $dbkeys ) ) {
                        return;
                }
index 6539e08..b0e6c12 100644 (file)
@@ -31,15 +31,20 @@ class StreamFile {
         * Stream a file to the browser, adding all the headings and fun stuff.
         * Headers sent include: Content-type, Content-Length, Last-Modified,
         * and Content-Disposition.
-        * 
+        *
         * @param $fname string Full name and path of the file to stream
         * @param $headers array Any additional headers to send
         * @param $sendErrors bool Send error messages if errors occur (like 404)
+        * @throws MWException
         * @return bool Success
         */
        public static function stream( $fname, $headers = array(), $sendErrors = true ) {
                wfProfileIn( __METHOD__ );
 
+               if ( FileBackend::isStoragePath( $fname ) ) { // sanity
+                       throw new MWException( __FUNCTION__ . " given storage path '$fname'." );
+               }
+
                wfSuppressWarnings();
                $stat = stat( $fname );
                wfRestoreWarnings();
@@ -75,8 +80,6 @@ class StreamFile {
        public static function prepareForStream(
                $path, $info, $headers = array(), $sendErrors = true
        ) {
-               global $wgLanguageCode;
-
                if ( !is_array( $info ) ) {
                        if ( $sendErrors ) {
                                header( 'HTTP/1.0 404 Not Found' );
@@ -117,9 +120,6 @@ class StreamFile {
                        return false;
                }
 
-               header( "Content-Disposition: inline;filename*=utf-8'$wgLanguageCode'" .
-                       urlencode( basename( $path ) ) );
-
                // Send additional headers
                foreach ( $headers as $header ) {
                        header( $header );
@@ -142,7 +142,7 @@ class StreamFile {
 
        /**
         * Determine the file type of a file based on the path
-        * 
+        *
         * @param $filename string Storage path or file system path
         * @param $safe bool Whether to do retroactive upload blacklist checks
         * @return null|string
index 615bcb5..cc0adb7 100644 (file)
@@ -108,6 +108,7 @@ class StubObject {
         * @param $name String: name of the method called in this object.
         * @param $level Integer: level to go in the stact trace to get the function
         *               who called this function.
+        * @throws MWException
         */
        function _unstub( $name = '_unstub', $level = 2 ) {
                static $recursionLevel = 0;
diff --git a/includes/Timestamp.php b/includes/Timestamp.php
new file mode 100644 (file)
index 0000000..56ce46c
--- /dev/null
@@ -0,0 +1,238 @@
+<?php
+/**
+ * Creation and parsing of MW-style timestamps.
+ *
+ * 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
+ * @author Tyler Romeo, 2012
+ */
+
+/**
+ * Library for creating and parsing MW-style timestamps. Based on the JS
+ * library that does the same thing.
+ *
+ * @since 1.20
+ */
+class MWTimestamp {
+       /**
+        * Standard gmdate() formats for the different timestamp types.
+        */
+       private static $formats = array(
+               TS_UNIX => 'U',
+               TS_MW => 'YmdHis',
+               TS_DB => 'Y-m-d H:i:s',
+               TS_ISO_8601 => 'Y-m-d\TH:i:s\Z',
+               TS_ISO_8601_BASIC => 'Ymd\THis\Z',
+               TS_EXIF => 'Y:m:d H:i:s', // This shouldn't ever be used, but is included for completeness
+               TS_RFC2822 => 'D, d M Y H:i:s',
+               TS_ORACLE => 'd-m-Y H:i:s.000000', // Was 'd-M-y h.i.s A' . ' +00:00' before r51500
+               TS_POSTGRES => 'Y-m-d H:i:s',
+               TS_DB2 => 'Y-m-d H:i:s',
+       );
+
+       /**
+        * Different units for human readable timestamps.
+        * @see MWTimestamp::getHumanTimestamp
+        */
+       private static $units = array(
+               "milliseconds" => 1,
+               "seconds" => 1000, // 1000 milliseconds per second
+               "minutes" => 60, // 60 seconds per minute
+               "hours" => 60, // 60 minutes per hour
+               "days" => 24 // 24 hours per day
+       );
+
+       /**
+        * The actual timestamp being wrapped. Either a DateTime
+        * object or a string with a Unix timestamp depending on
+        * PHP.
+        * @var string|DateTime
+        */
+       private $timestamp;
+
+       /**
+        * Make a new timestamp and set it to the specified time,
+        * or the current time if unspecified.
+        *
+        * @since 1.20
+        *
+        * @param $timestamp bool|string Timestamp to set, or false for current time
+        */
+       public function __construct( $timestamp = false ) {
+               $this->setTimestamp( $timestamp );
+       }
+
+       /**
+        * Set the timestamp to the specified time, or the current time if unspecified.
+        *
+        * Parse the given timestamp into either a DateTime object or a Unix timestamp,
+        * and then store it.
+        *
+        * @since 1.20
+        *
+        * @param $ts string|bool Timestamp to store, or false for now
+        * @throws TimestampException
+        */
+       public function setTimestamp( $ts = false ) {
+               $da = array();
+               $strtime = '';
+
+               if ( !$ts || $ts === "\0\0\0\0\0\0\0\0\0\0\0\0\0\0" ) { // We want to catch 0, '', null... but not date strings starting with a letter.
+                       $uts = time();
+                       $strtime = "@$uts";
+               } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
+                       # TS_DB
+               } elseif ( preg_match( '/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
+                       # TS_EXIF
+               } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) {
+                       # TS_MW
+               } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) {
+                       # TS_UNIX
+                       $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php
+               } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) {
+                       # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6
+                       $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3",
+                                       str_replace( '+00:00', 'UTC', $ts ) );
+               } elseif ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) {
+                       # TS_ISO_8601
+               } elseif ( preg_match( '/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(?:\.*\d*)?Z$/', $ts, $da ) ) {
+                       #TS_ISO_8601_BASIC
+               } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d*[\+\- ](\d\d)$/', $ts, $da ) ) {
+                       # TS_POSTGRES
+               } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/', $ts, $da ) ) {
+                       # TS_POSTGRES
+               } elseif (preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.\d\d\d$/', $ts, $da ) ) {
+                       # TS_DB2
+               } elseif ( preg_match( '/^[ \t\r\n]*([A-Z][a-z]{2},[ \t\r\n]*)?' . # Day of week
+                                                               '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' .  # dd Mon yyyy
+                                                               '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S', $ts ) ) { # hh:mm:ss
+                       # TS_RFC2822, accepting a trailing comment. See http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html / r77171
+                       # The regex is a superset of rfc2822 for readability
+                       $strtime = strtok( $ts, ';' );
+               } elseif ( preg_match( '/^[A-Z][a-z]{5,8}, \d\d-[A-Z][a-z]{2}-\d{2} \d\d:\d\d:\d\d/', $ts ) ) {
+                       # TS_RFC850
+                       $strtime = $ts;
+               } elseif ( preg_match( '/^[A-Z][a-z]{2} [A-Z][a-z]{2} +\d{1,2} \d\d:\d\d:\d\d \d{4}/', $ts ) ) {
+                       # asctime
+                       $strtime = $ts;
+               } else {
+                       throw new TimestampException( __METHOD__ . " : Invalid timestamp - $ts" );
+               }
+
+               if( !$strtime ) {
+                       $da = array_map( 'intval', $da );
+                       $da[0] = "%04d-%02d-%02dT%02d:%02d:%02d.00+00:00";
+                       $strtime = call_user_func_array( "sprintf", $da );
+               }
+
+               try {
+                       $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
+               } catch(Exception $e) {
+                       throw new TimestampException( __METHOD__ . ' Invalid timestamp format.' );
+               }
+
+               if( $final === false ) {
+                       throw new TimestampException( __METHOD__ . ' Invalid timestamp format.' );
+               }
+               $this->timestamp = $final;
+       }
+
+       /**
+        * Get the timestamp represented by this object in a certain form.
+        *
+        * Convert the internal timestamp to the specified format and then
+        * return it.
+        *
+        * @since 1.20
+        *
+        * @param $style int Constant Output format for timestamp
+        * @throws TimestampException
+        * @return string The formatted timestamp
+        */
+       public function getTimestamp( $style = TS_UNIX ) {
+               if( !isset( self::$formats[$style] ) ) {
+                       throw new TimestampException( __METHOD__ . ' : Illegal timestamp output type.' );
+               }
+
+               if( is_object( $this->timestamp  ) ) {
+                       // DateTime object was used, call DateTime::format.
+                       $output = $this->timestamp->format( self::$formats[$style] );
+               } elseif( TS_UNIX == $style ) {
+                       // Unix timestamp was used and is wanted, just return it.
+                       $output = $this->timestamp;
+               } else {
+                       // Unix timestamp was used, use gmdate().
+                       $output = gmdate( self::$formats[$style], $this->timestamp );
+               }
+
+               if ( ( $style == TS_RFC2822 ) || ( $style == TS_POSTGRES ) ) {
+                       $output .= ' GMT';
+               }
+
+               return $output;
+       }
+
+       /**
+        * Get the timestamp in a human-friendly relative format, e.g., "3 days ago".
+        *
+        * Determine the difference between the timestamp and the current time, and
+        * generate a readable timestamp by returning "<N> <units> ago", where the
+        * largest possible unit is used.
+        *
+        * @since 1.20
+        *
+        * @return Message Formatted timestamp
+        */
+       public function getHumanTimestamp() {
+               $then = $this->getTimestamp( TS_UNIX );
+               $now = time();
+               $timeago = ($now - $then) * 1000;
+               $message = false;
+
+               foreach( self::$units as $unit => $factor ) {
+                       $next = $timeago / $factor;
+                       if( $next < 1 ) {
+                               break;
+                       } else {
+                               $timeago = $next;
+                               $message = array( $unit, floor( $timeago ) );
+                       }
+               }
+
+               if( $message ) {
+                       $initial = call_user_func_array( 'wfMessage', $message );
+                       return wfMessage( 'ago', $initial );
+               } else {
+                       return wfMessage( 'just-now' );
+               }
+       }
+
+       /**
+        * @since 1.20
+        *
+        * @return string
+        */
+       public function __toString() {
+               return $this->getTimestamp();
+       }
+}
+
+/**
+ * @since 1.20
+ */
+class TimestampException extends MWException {}
index b01c00b..3212f54 100644 (file)
@@ -65,6 +65,7 @@ class Title {
        var $mFragment;                   // /< Title fragment (i.e. the bit after the #)
        var $mArticleID = -1;             // /< Article ID, fetched from the link cache on demand
        var $mLatestID = false;           // /< ID of most recent revision
+       var $mContentModel = false;       // /< ID of the page's content model, i.e. one of the CONTENT_MODEL_XXX constants
        private $mEstimateRevisions;      // /< Estimated number of revisions; null of not loaded
        var $mRestrictions = array();     // /< Array of groups allowed to edit this article
        var $mOldRestrictions = false;
@@ -84,7 +85,6 @@ class Title {
        var $mLength = -1;                // /< The page length, 0 for special pages
        var $mRedirect = null;            // /< Is the article at this title a redirect?
        var $mNotificationTimestamp = array(); // /< Associative array of user ID -> timestamp/false
-       var $mBacklinkCache = null;       // /< Cache of links to this title
        var $mHasSubpage;                 // /< Whether a page has any subpages
        // @}
 
@@ -200,6 +200,27 @@ class Title {
                }
        }
 
+       /**
+        * Returns a list of fields that are to be selected for initializing Title objects or LinkCache entries.
+        * Uses $wgContentHandlerUseDB to determine whether to include page_content_model.
+        *
+        * @return array
+        */
+       protected static function getSelectFields() {
+               global $wgContentHandlerUseDB;
+
+               $fields = array(
+                       'page_namespace', 'page_title', 'page_id',
+                       'page_len', 'page_is_redirect', 'page_latest',
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
+
+               return $fields;
+       }
+
        /**
         * Create a new Title from an article ID
         *
@@ -211,10 +232,7 @@ class Title {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
                $row = $db->selectRow(
                        'page',
-                       array(
-                               'page_namespace', 'page_title', 'page_id',
-                               'page_len', 'page_is_redirect', 'page_latest',
-                       ),
+                       self::getSelectFields(),
                        array( 'page_id' => $id ),
                        __METHOD__
                );
@@ -240,10 +258,7 @@ class Title {
 
                $res = $dbr->select(
                        'page',
-                       array(
-                               'page_namespace', 'page_title', 'page_id',
-                               'page_len', 'page_is_redirect', 'page_latest',
-                       ),
+                       self::getSelectFields(),
                        array( 'page_id' => $ids ),
                        __METHOD__
                );
@@ -283,11 +298,16 @@ class Title {
                                $this->mRedirect = (bool)$row->page_is_redirect;
                        if ( isset( $row->page_latest ) )
                                $this->mLatestID = (int)$row->page_latest;
+                       if ( isset( $row->page_content_model ) )
+                               $this->mContentModel = strval( $row->page_content_model );
+                       else
+                               $this->mContentModel = false; # initialized lazily in getContentModel()
                } else { // page not found
                        $this->mArticleID = 0;
                        $this->mLength = 0;
                        $this->mRedirect = false;
                        $this->mLatestID = 0;
+                       $this->mContentModel = false; # initialized lazily in getContentModel()
                }
        }
 
@@ -313,6 +333,7 @@ class Title {
                $t->mArticleID = ( $ns >= 0 ) ? -1 : 0;
                $t->mUrlform = wfUrlencode( $t->mDbkeyform );
                $t->mTextform = str_replace( '_', ' ', $title );
+               $t->mContentModel = false; # initialized lazily in getContentModel()
                return $t;
        }
 
@@ -347,7 +368,7 @@ class Title {
         * @return Title the new object
         */
        public static function newMainPage() {
-               $title = Title::newFromText( wfMsgForContent( 'mainpage' ) );
+               $title = Title::newFromText( wfMessage( 'mainpage' )->inContentLanguage()->text() );
                // Don't give fatal errors if the message is broken
                if ( !$title ) {
                        $title = Title::newFromText( 'Main Page' );
@@ -363,9 +384,11 @@ class Title {
         *
         * @param $text String: Text with possible redirect
         * @return Title: The corresponding Title
+        * @deprecated since 1.21, use Content::getRedirectTarget instead.
         */
        public static function newFromRedirect( $text ) {
-               return self::newFromRedirectInternal( $text );
+               $content = ContentHandler::makeContent( $text, null, CONTENT_MODEL_WIKITEXT );
+               return $content->getRedirectTarget();
        }
 
        /**
@@ -376,10 +399,11 @@ class Title {
         *
         * @param $text String Text with possible redirect
         * @return Title
+        * @deprecated since 1.21, use Content::getUltimateRedirectTarget instead.
         */
        public static function newFromRedirectRecurse( $text ) {
-               $titles = self::newFromRedirectArray( $text );
-               return $titles ? array_pop( $titles ) : null;
+               $content = ContentHandler::makeContent( $text, null, CONTENT_MODEL_WIKITEXT );
+               return $content->getUltimateRedirectTarget();
        }
 
        /**
@@ -390,71 +414,11 @@ class Title {
         *
         * @param $text String Text with possible redirect
         * @return Array of Titles, with the destination last
+        * @deprecated since 1.21, use Content::getRedirectChain instead.
         */
        public static function newFromRedirectArray( $text ) {
-               global $wgMaxRedirects;
-               $title = self::newFromRedirectInternal( $text );
-               if ( is_null( $title ) ) {
-                       return null;
-               }
-               // recursive check to follow double redirects
-               $recurse = $wgMaxRedirects;
-               $titles = array( $title );
-               while ( --$recurse > 0 ) {
-                       if ( $title->isRedirect() ) {
-                               $page = WikiPage::factory( $title );
-                               $newtitle = $page->getRedirectTarget();
-                       } else {
-                               break;
-                       }
-                       // Redirects to some special pages are not permitted
-                       if ( $newtitle instanceOf Title && $newtitle->isValidRedirectTarget() ) {
-                               // the new title passes the checks, so make that our current title so that further recursion can be checked
-                               $title = $newtitle;
-                               $titles[] = $newtitle;
-                       } else {
-                               break;
-                       }
-               }
-               return $titles;
-       }
-
-       /**
-        * Really extract the redirect destination
-        * Do not call this function directly, use one of the newFromRedirect* functions above
-        *
-        * @param $text String Text with possible redirect
-        * @return Title
-        */
-       protected static function newFromRedirectInternal( $text ) {
-               global $wgMaxRedirects;
-               if ( $wgMaxRedirects < 1 ) {
-                       //redirects are disabled, so quit early
-                       return null;
-               }
-               $redir = MagicWord::get( 'redirect' );
-               $text = trim( $text );
-               if ( $redir->matchStartAndRemove( $text ) ) {
-                       // Extract the first link and see if it's usable
-                       // Ensure that it really does come directly after #REDIRECT
-                       // Some older redirects included a colon, so don't freak about that!
-                       $m = array();
-                       if ( preg_match( '!^\s*:?\s*\[{2}(.*?)(?:\|.*?)?\]{2}!', $text, $m ) ) {
-                               // Strip preceding colon used to "escape" categories, etc.
-                               // and URL-decode links
-                               if ( strpos( $m[1], '%' ) !== false ) {
-                                       // Match behavior of inline link parsing here;
-                                       $m[1] = rawurldecode( ltrim( $m[1], ':' ) );
-                               }
-                               $title = Title::newFromText( $m[1] );
-                               // If the title is a redirect to bad special pages or is invalid, return null
-                               if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) {
-                                       return null;
-                               }
-                               return $title;
-                       }
-               }
-               return null;
+               $content = ContentHandler::makeContent( $text, null, CONTENT_MODEL_WIKITEXT );
+               return $content->getRedirectChain();
        }
 
        /**
@@ -702,6 +666,38 @@ class Title {
                return $this->mNamespace;
        }
 
+       /**
+        * Get the page's content model id, see the CONTENT_MODEL_XXX constants.
+        *
+        * @return String: Content model id
+        */
+       public function getContentModel() {
+               if ( !$this->mContentModel ) {
+                       $linkCache = LinkCache::singleton();
+                       $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
+               }
+
+               if ( !$this->mContentModel ) {
+                       $this->mContentModel = ContentHandler::getDefaultModelFor( $this );
+               }
+
+               if( !$this->mContentModel ) {
+                       throw new MWException( "failed to determin content model!" );
+               }
+
+               return $this->mContentModel;
+       }
+
+       /**
+        * Convenience method for checking a title's content model name
+        *
+        * @param String $id The content model ID (use the CONTENT_MODEL_XXX constants).
+        * @return Boolean true if $this->getContentModel() == $id
+        */
+       public function hasContentModel( $id ) {
+               return $this->getContentModel() == $id;
+       }
+
        /**
         * Get the namespace text
         *
@@ -935,6 +931,8 @@ class Title {
         * @return Bool
         */
        public function isConversionTable() {
+               //@todo: ConversionTable should become a separate content model.
+
                return $this->getNamespace() == NS_MEDIAWIKI &&
                        strpos( $this->getText(), 'Conversiontable/' ) === 0;
        }
@@ -945,22 +943,31 @@ class Title {
         * @return Bool
         */
        public function isWikitextPage() {
-               $retval = !$this->isCssOrJsPage() && !$this->isCssJsSubpage();
-               wfRunHooks( 'TitleIsWikitextPage', array( $this, &$retval ) );
-               return $retval;
+               return $this->hasContentModel( CONTENT_MODEL_WIKITEXT );
        }
 
        /**
-        * Could this page contain custom CSS or JavaScript, based
-        * on the title?
+        * Could this page contain custom CSS or JavaScript for the global UI.
+        * This is generally true for pages in the MediaWiki namespace having CONTENT_MODEL_CSS
+        * or CONTENT_MODEL_JAVASCRIPT.
+        *
+        * This method does *not* return true for per-user JS/CSS. Use isCssJsSubpage() for that!
+        *
+        * Note that this method should not return true for pages that contain and show "inactive" CSS or JS.
         *
         * @return Bool
         */
        public function isCssOrJsPage() {
-               $retval = $this->mNamespace == NS_MEDIAWIKI
-                       && preg_match( '!\.(?:css|js)$!u', $this->mTextform ) > 0;
-               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$retval ) );
-               return $retval;
+               $isCssOrJsPage = NS_MEDIAWIKI == $this->mNamespace
+                       && ( $this->hasContentModel( CONTENT_MODEL_CSS )
+                               || $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) );
+
+               #NOTE: this hook is also called in ContentHandler::getDefaultModel. It's called here again to make sure
+               #      hook funktions can force this method to return true even outside the mediawiki namespace.
+
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
+
+               return $isCssOrJsPage;
        }
 
        /**
@@ -968,7 +975,9 @@ class Title {
         * @return Bool
         */
        public function isCssJsSubpage() {
-               return ( NS_USER == $this->mNamespace and preg_match( "/\\/.*\\.(?:css|js)$/", $this->mTextform ) );
+               return ( NS_USER == $this->mNamespace && $this->isSubpage()
+                               && ( $this->hasContentModel( CONTENT_MODEL_CSS )
+                                       || $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) ) );
        }
 
        /**
@@ -991,7 +1000,8 @@ class Title {
         * @return Bool
         */
        public function isCssSubpage() {
-               return ( NS_USER == $this->mNamespace && preg_match( "/\\/.*\\.css$/", $this->mTextform ) );
+               return ( NS_USER == $this->mNamespace && $this->isSubpage()
+                       && $this->hasContentModel( CONTENT_MODEL_CSS ) );
        }
 
        /**
@@ -1000,7 +1010,8 @@ class Title {
         * @return Bool
         */
        public function isJsSubpage() {
-               return ( NS_USER == $this->mNamespace && preg_match( "/\\/.*\\.js$/", $this->mTextform ) );
+               return ( NS_USER == $this->mNamespace && $this->isSubpage()
+                       && $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) );
        }
 
        /**
@@ -1162,7 +1173,49 @@ class Title {
        }
 
        /**
-        * Get the base page name, i.e. the leftmost part before any slashes
+        * Get the root page name text without a namespace, i.e. the leftmost part before any slashes
+        *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getRootText();
+        * # returns: 'Foo'
+        * @endcode
+        *
+        * @return String Root name
+        * @since 1.20
+        */
+       public function getRootText() {
+               if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) {
+                       return $this->getText();
+               }
+
+               return strtok( $this->getText(), '/' );
+       }
+
+       /**
+        * Get the root page name title, i.e. the leftmost part before any slashes
+        *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getRootTitle();
+        * # returns: Title{User:Foo}
+        * @endcode
+        *
+        * @return Title Root title
+        * @since 1.20
+        */
+       public function getRootTitle() {
+               return Title::makeTitle( $this->getNamespace(), $this->getRootText() );
+       }
+
+       /**
+        * Get the base page name without a namespace, i.e. the part before the subpage name
+        *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getBaseText();
+        * # returns: 'Foo/Bar'
+        * @endcode
         *
         * @return String Base name
         */
@@ -1179,9 +1232,31 @@ class Title {
                return implode( '/', $parts );
        }
 
+       /**
+        * Get the base page name title, i.e. the part before the subpage name
+        *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getBaseTitle();
+        * # returns: Title{User:Foo/Bar}
+        * @endcode
+        *
+        * @return Title Base title
+        * @since 1.20
+        */
+       public function getBaseTitle() {
+               return Title::makeTitle( $this->getNamespace(), $this->getBaseText() );
+       }
+
        /**
         * Get the lowest-level subpage name, i.e. the rightmost part after any slashes
         *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getSubpageText();
+        * # returns: "Baz"
+        * @endcode
+        *
         * @return String Subpage name
         */
        public function getSubpageText() {
@@ -1192,6 +1267,23 @@ class Title {
                return( $parts[count( $parts ) - 1] );
        }
 
+       /**
+        * Get the title for a subpage of the current page
+        *
+        * @par Example:
+        * @code
+        * Title::newFromText('User:Foo/Bar/Baz')->getSubpage("Asdf");
+        * # returns: Title{User:Foo/Bar/Baz/Asdf}
+        * @endcode
+        *
+        * @param $text String The subpage name to add to the title
+        * @return Title Subpage title
+        * @since 1.20
+        */
+       public function getSubpage( $text ) {
+               return Title::makeTitleSafe( $this->getNamespace(), $this->getText() . '/' . $text );
+       }
+
        /**
         * Get the HTML-escaped displayable text form.
         * Used for the title field in <a> tags.
@@ -1397,13 +1489,14 @@ class Title {
         *
         * See getLocalURL for the arguments.
         *
+        * @param $proto Protocol to use; setting this will cause a full URL to be used
         * @see self::getLocalURL
         * @return String the URL
         */
-       public function getLinkURL( $query = '', $query2 = false ) {
+       public function getLinkURL( $query = '', $query2 = false, $proto = PROTO_RELATIVE ) {
                wfProfileIn( __METHOD__ );
-               if ( $this->isExternal() ) {
-                       $ret = $this->getFullURL( $query, $query2 );
+               if ( $this->isExternal() || $proto !== PROTO_RELATIVE ) {
+                       $ret = $this->getFullURL( $query, $query2, $proto );
                } elseif ( $this->getPrefixedText() === '' && $this->getFragment() !== '' ) {
                        $ret = $this->getFragmentForURL();
                } else {
@@ -1594,7 +1687,7 @@ class Title {
         *   queries by skipping checks for cascading protections and user blocks.
         * @param $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
-        * @return Array of arguments to wfMsg to explain permissions problems.
+        * @return Array of arguments to wfMessage to explain permissions problems.
         */
        public function getUserPermissionsErrors( $action, $user, $doExpensiveQueries = true, $ignoreErrors = array() ) {
                $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
@@ -1642,15 +1735,8 @@ class Title {
 
                        if ( !$user->isAllowed( 'move' ) ) {
                                // User can't move anything
-                               global $wgGroupPermissions;
-                               $userCanMove = false;
-                               if ( isset( $wgGroupPermissions['user']['move'] ) ) {
-                                       $userCanMove = $wgGroupPermissions['user']['move'];
-                               }
-                               $autoconfirmedCanMove = false;
-                               if ( isset( $wgGroupPermissions['autoconfirmed']['move'] ) ) {
-                                       $autoconfirmedCanMove = $wgGroupPermissions['autoconfirmed']['move'];
-                               }
+                               $userCanMove = User::groupHasPermission( 'user', 'move' );
+                               $autoconfirmedCanMove = User::groupHasPermission( 'autoconfirmed', 'move' );
                                if ( $user->isAnon() && ( $userCanMove || $autoconfirmedCanMove ) ) {
                                        // custom message if logged-in users without any special rights can move
                                        $errors[] = array( 'movenologintext' );
@@ -1751,7 +1837,7 @@ class Title {
                # Check $wgNamespaceProtection for restricted namespaces
                if ( $this->isNamespaceProtected( $user ) ) {
                        $ns = $this->mNamespace == NS_MAIN ?
-                               wfMsg( 'nstab-main' ) : $this->getNsText();
+                               wfMessage( 'nstab-main' )->text() : $this->getNsText();
                        $errors[] = $this->mNamespace == NS_MEDIAWIKI ?
                                array( 'protectedinterface' ) : array( 'namespaceprotected',  $ns );
                }
@@ -1950,7 +2036,7 @@ class Title {
                        $id = $user->blockedBy();
                        $reason = $user->blockedFor();
                        if ( $reason == '' ) {
-                               $reason = wfMsg( 'blockednoreason' );
+                               $reason = wfMessage( 'blockednoreason' )->text();
                        }
                        $ip = $user->getRequest()->getIP();
 
@@ -1991,13 +2077,13 @@ class Title {
         * @return Array list of errors
         */
        private function checkReadPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
-               global $wgWhitelistRead, $wgGroupPermissions, $wgRevokePermissions;
+               global $wgWhitelistRead, $wgRevokePermissions;
                static $useShortcut = null;
 
                # Initialize the $useShortcut boolean, to determine if we can skip quite a bit of code below
                if ( is_null( $useShortcut ) ) {
                        $useShortcut = true;
-                       if ( empty( $wgGroupPermissions['*']['read'] ) ) {
+                       if ( !User::groupHasPermission( '*', 'read' ) ) {
                                # Not a public wiki, so no shortcut
                                $useShortcut = false;
                        } elseif ( !empty( $wgRevokePermissions ) ) {
@@ -2108,7 +2194,7 @@ class Title {
         * @param $user User to check
         * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary queries.
         * @param $short Bool Set this to true to stop after the first permission error.
-        * @return Array of arrays of the arguments to wfMsg to explain permissions problems.
+        * @return Array of arrays of the arguments to wfMessage to explain permissions problems.
         */
        protected function getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries = true, $short = false ) {
                wfProfileIn( __METHOD__ );
@@ -2827,8 +2913,16 @@ class Title {
                if ( !$this->getArticleID( $flags ) ) {
                        return $this->mRedirect = false;
                }
+
                $linkCache = LinkCache::singleton();
-               $this->mRedirect = (bool)$linkCache->getGoodLinkFieldObj( $this, 'redirect' );
+               $cached = $linkCache->getGoodLinkFieldObj( $this, 'redirect' );
+               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
+                       #      as a stop gap, perhaps log this, but don't throw an exception?
+                       throw new MWException( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+               }
+
+               $this->mRedirect = (bool)$cached;
 
                return $this->mRedirect;
        }
@@ -2849,7 +2943,14 @@ class Title {
                        return $this->mLength = 0;
                }
                $linkCache = LinkCache::singleton();
-               $this->mLength = intval( $linkCache->getGoodLinkFieldObj( $this, 'length' ) );
+               $cached = $linkCache->getGoodLinkFieldObj( $this, 'length' );
+               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
+                       #      as a stop gap, perhaps log this, but don't throw an exception?
+                       throw new MWException( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+               }
+
+               $this->mLength = intval( $cached );
 
                return $this->mLength;
        }
@@ -2869,7 +2970,14 @@ class Title {
                        return $this->mLatestID = 0;
                }
                $linkCache = LinkCache::singleton();
-               $this->mLatestID = intval( $linkCache->getGoodLinkFieldObj( $this, 'revision' ) );
+               $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
+                       #      as a stop gap, perhaps log this, but don't throw an exception?
+                       throw new MWException( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+               }
+
+               $this->mLatestID = intval( $cached );
 
                return $this->mLatestID;
        }
@@ -2898,6 +3006,7 @@ class Title {
                $this->mRedirect = null;
                $this->mLength = -1;
                $this->mLatestID = false;
+               $this->mContentModel = false;
                $this->mEstimateRevisions = null;
        }
 
@@ -3136,7 +3245,7 @@ class Title {
 
                $res = $db->select(
                        array( 'page', $table ),
-                       array( 'page_namespace', 'page_title', 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ),
+                       self::getSelectFields(),
                        array(
                                "{$prefix}_from=page_id",
                                "{$prefix}_namespace" => $this->getNamespace(),
@@ -3186,6 +3295,8 @@ class Title {
         * @return Array of Title objects linking here
         */
        public function getLinksFrom( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) {
+               global $wgContentHandlerUseDB;
+
                $id = $this->getArticleID();
 
                # If the page doesn't exist; there can't be any link from this page
@@ -3202,9 +3313,12 @@ class Title {
                $namespaceFiled = "{$prefix}_namespace";
                $titleField = "{$prefix}_title";
 
+               $fields = array( $namespaceFiled, $titleField, 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
+               if ( $wgContentHandlerUseDB ) $fields[] = 'page_content_model';
+
                $res = $db->select(
                        array( $table, 'page' ),
-                       array( $namespaceFiled, $titleField, 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ),
+                       $fields,
                        array( "{$prefix}_from" => $id ),
                        __METHOD__,
                        $options,
@@ -3336,7 +3450,7 @@ class Title {
         * @return Mixed True on success, getUserPermissionsErrors()-like array on failure
         */
        public function isValidMoveOperation( &$nt, $auth = true, $reason = '' ) {
-               global $wgUser;
+               global $wgUser, $wgContentHandlerUseDB;
 
                $errors = array();
                if ( !$nt ) {
@@ -3369,6 +3483,15 @@ class Title {
                        $errors[] = array( 'badarticleerror' );
                }
 
+               // Content model checks
+               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() ) );
+               }
+
                // Image-specific checks
                if ( $this->getNamespace() == NS_FILE ) {
                        $errors = array_merge( $errors, $this->validateFileMoveOperation( $nt ) );
@@ -3546,9 +3669,13 @@ class Title {
                        );
                        # Update the protection log
                        $log = new LogPage( 'protect' );
-                       $comment = wfMsgForContent( 'prot_1movedto2', $this->getPrefixedText(), $nt->getPrefixedText() );
+                       $comment = wfMessage(
+                               'prot_1movedto2',
+                               $this->getPrefixedText(),
+                               $nt->getPrefixedText()
+                       )->inContentLanguage()->text();
                        if ( $reason ) {
-                               $comment .= wfMsgForContent( 'colon-separator' ) . $reason;
+                               $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
                        // @todo FIXME: $params?
                        $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ) );
@@ -3591,7 +3718,14 @@ class Title {
                        $logType = 'move';
                }
 
-               $redirectSuppressed = !$createRedirect;
+               if ( $createRedirect ) {
+                       $contentHandler = ContentHandler::getForTitle( $this );
+                       $redirectContent = $contentHandler->makeRedirectContent( $nt );
+
+                       // NOTE: If this page's content model does not support redirects, $redirectContent will be null.
+               } else {
+                       $redirectContent = null;
+               }
 
                $logEntry = new ManualLogEntry( 'move', $logType );
                $logEntry->setPerformer( $wgUser );
@@ -3599,14 +3733,14 @@ class Title {
                $logEntry->setComment( $reason );
                $logEntry->setParameters( array(
                        '4::target' => $nt->getPrefixedText(),
-                       '5::noredir' => $redirectSuppressed ? '1': '0',
+                       '5::noredir' => $redirectContent ? '0': '1',
                ) );
 
                $formatter = LogFormatter::newFromEntry( $logEntry );
                $formatter->setContext( RequestContext::newExtraneousContext( $this ) );
                $comment = $formatter->getPlainActionText();
                if ( $reason ) {
-                       $comment .= wfMsgForContent( 'colon-separator' ) . $reason;
+                       $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                }
                # Truncate for whole multibyte characters.
                $comment = $wgContLang->truncate( $comment, 255 );
@@ -3634,7 +3768,8 @@ class Title {
                if ( !is_object( $nullRevision ) ) {
                        throw new MWException( 'No valid null revision produced in ' . __METHOD__ );
                }
-               $nullRevId = $nullRevision->insertOn( $dbw );
+
+               $nullRevision->insertOn( $dbw );
 
                # Change the name of the target page:
                $dbw->update( 'page',
@@ -3661,18 +3796,16 @@ class Title {
                }
 
                # Recreate the redirect, this time in the other direction.
-               if ( $redirectSuppressed ) {
+               if ( !$redirectContent ) {
                        WikiPage::onArticleDelete( $this );
                } else {
-                       $mwRedir = MagicWord::get( 'redirect' );
-                       $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $nt->getPrefixedText() . "]]\n";
                        $redirectArticle = WikiPage::factory( $this );
                        $newid = $redirectArticle->insertOn( $dbw );
                        if ( $newid ) { // sanity
                                $redirectRevision = new Revision( array(
                                        'page'    => $newid,
                                        'comment' => $comment,
-                                       'text'    => $redirectText ) );
+                                       'content'    => $redirectContent ) );
                                $redirectRevision->insertOn( $dbw );
                                $redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
 
@@ -3768,10 +3901,16 @@ class Title {
         * @return Bool
         */
        public function isSingleRevRedirect() {
+               global $wgContentHandlerUseDB;
+
                $dbw = wfGetDB( DB_MASTER );
+
                # Is it a redirect?
+               $fields = array( 'page_is_redirect', 'page_latest', 'page_id' );
+               if ( $wgContentHandlerUseDB ) $fields[] = 'page_content_model';
+
                $row = $dbw->selectRow( 'page',
-                       array( 'page_is_redirect', 'page_latest', 'page_id' ),
+                       $fields,
                        $this->pageCond(),
                        __METHOD__,
                        array( 'FOR UPDATE' )
@@ -3780,6 +3919,7 @@ class Title {
                $this->mArticleID = $row ? intval( $row->page_id ) : 0;
                $this->mRedirect = $row ? (bool)$row->page_is_redirect : false;
                $this->mLatestID = $row ? intval( $row->page_latest ) : false;
+               $this->mContentModel = $row && isset( $row->page_content_model ) ? strval( $row->page_content_model ) : false;
                if ( !$this->mRedirect ) {
                        return false;
                }
@@ -3820,28 +3960,29 @@ class Title {
                        return false;
                }
                # Get the article text
-               $rev = Revision::newFromTitle( $nt );
+               $rev = Revision::newFromTitle( $nt, false, Revision::READ_LATEST );
                if( !is_object( $rev ) ){
                        return false;
                }
-               $text = $rev->getText();
+               $content = $rev->getContent();
                # Does the redirect point to the source?
                # Or is it a broken self-redirect, usually caused by namespace collisions?
-               $m = array();
-               if ( preg_match( "/\\[\\[\\s*([^\\]\\|]*)]]/", $text, $m ) ) {
-                       $redirTitle = Title::newFromText( $m[1] );
-                       if ( !is_object( $redirTitle ) ||
-                               ( $redirTitle->getPrefixedDBkey() != $this->getPrefixedDBkey() &&
-                               $redirTitle->getPrefixedDBkey() != $nt->getPrefixedDBkey() ) ) {
+               $redirTitle = $content->getRedirectTarget();
+
+               if ( $redirTitle ) {
+                       if ( $redirTitle->getPrefixedDBkey() != $this->getPrefixedDBkey() &&
+                               $redirTitle->getPrefixedDBkey() != $nt->getPrefixedDBkey() ) {
                                wfDebug( __METHOD__ . ": redirect points to other page\n" );
                                return false;
+                       } else {
+                               return true;
                        }
                } else {
-                       # Fail safe
-                       wfDebug( __METHOD__ . ": failsafe\n" );
+                       # Fail safe (not a redirect after all. strange.)
+                       wfDebug( __METHOD__ . ": failsafe: database sais " . $nt->getPrefixedDBkey() .
+                                               " is a redirect, but it doesn't contain a valid redirect.\n" );
                        return false;
                }
-               return true;
        }
 
        /**
@@ -4113,11 +4254,11 @@ class Title {
                if ( in_array( 'include_old', $options ) ) {
                        $old_cmp = '>=';
                }
-               if ( in_array( 'include_new', $options ) ) {\r
-                       $new_cmp = '<=';\r
-               }\r
-               if ( in_array( 'include_both', $options ) ) {\r
-                       $old_cmp = '>=';\r
+               if ( in_array( 'include_new', $options ) ) {
+                       $new_cmp = '<=';
+               }
+               if ( in_array( 'include_both', $options ) ) {
+                       $old_cmp = '>=';
                        $new_cmp = '<=';
                }
                // No DB query needed if $old and $new are the same or successive revisions:
@@ -4128,7 +4269,7 @@ class Title {
                                return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
                        }
                        return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2;
-               }\r
+               }
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', 'DISTINCT rev_user_text',
                        array(
@@ -4429,6 +4570,11 @@ class Title {
                        'rd_title' => $this->getDBkey(),
                        'rd_from = page_id'
                );
+               if ( $this->isExternal() ) {
+                       $where['rd_interwiki'] = $this->getInterwiki();
+               } else {
+                       $where[] = 'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL';
+               }
                if ( !is_null( $ns ) ) {
                        $where['page_namespace'] = $ns;
                }
@@ -4473,11 +4619,8 @@ class Title {
         *
         * @return BacklinkCache
         */
-       function getBacklinkCache() {
-               if ( is_null( $this->mBacklinkCache ) ) {
-                       $this->mBacklinkCache = new BacklinkCache( $this );
-               }
-               return $this->mBacklinkCache;
+       public function getBacklinkCache() {
+               return BacklinkCache::get( $this );
        }
 
        /**
@@ -4526,9 +4669,9 @@ class Title {
        }
 
        /**
-        * Get the language in which the content of this page is written.
-        * Defaults to $wgContLang, but in certain cases it can be e.g.
-        * $wgLang (such as special pages, which are in the user language).
+        * Get the language in which the content of this page is written in
+        * wikitext. Defaults to $wgContLang, but in certain cases it can be
+        * e.g. $wgLang (such as special pages, which are in the user language).
         *
         * @since 1.18
         * @return Language
@@ -4538,19 +4681,44 @@ class Title {
                if ( $this->isSpecialPage() ) {
                        // special pages are in the user language
                        return $wgLang;
-               } elseif ( $this->isCssOrJsPage() || $this->isCssJsSubpage() ) {
-                       // css/js should always be LTR and is, in fact, English
-                       return wfGetLangObj( 'en' );
-               } elseif ( $this->getNamespace() == NS_MEDIAWIKI ) {
-                       // Parse mediawiki messages with correct target language
-                       list( /* $unused */, $lang ) = MessageCache::singleton()->figureMessage( $this->getText() );
-                       return wfGetLangObj( $lang );
                }
-               global $wgContLang;
-               // If nothing special, it should be in the wiki content language
-               $pageLang = $wgContLang;
+
+               //TODO: use the LinkCache to cache this! Note that this may depend on user settings, so the cache should be only per-request.
+               //NOTE: ContentHandler::getPageLanguage() may need to load the content to determine the page language!
+               $contentHandler = ContentHandler::getForTitle( $this );
+               $pageLang = $contentHandler->getPageLanguage( $this );
+
                // Hook at the end because we don't want to override the above stuff
                wfRunHooks( 'PageContentLanguage', array( $this, &$pageLang, $wgLang ) );
                return wfGetLangObj( $pageLang );
        }
+
+       /**
+        * Get the language in which the content of this page is written when
+        * viewed by user. Defaults to $wgContLang, but in certain cases it can be
+        * e.g. $wgLang (such as special pages, which are in the user language).
+        *
+        * @since 1.20
+        * @return Language
+        */
+       public function getPageViewLanguage() {
+               global $wgLang;
+
+               if ( $this->isSpecialPage() ) {
+                       // If the user chooses a variant, the content is actually
+                       // in a language whose code is the variant code.
+                       $variant = $wgLang->getPreferredVariant();
+                       if ( $wgLang->getCode() !== $variant ) {
+                               return Language::factory( $variant );
+                       }
+
+                       return $wgLang;
+               }
+
+               //NOTE: can't be cached persistently, depends on user settings
+               //NOTE: ContentHandler::getPageViewLanguage() may need to load the content to determine the page language!
+               $contentHandler = ContentHandler::getForTitle( $this );
+               $pageLang = $contentHandler->getPageViewLanguage( $this );
+               return $pageLang;
+       }
 }
diff --git a/includes/Uri.php b/includes/Uri.php
deleted file mode 100644 (file)
index f6cf06f..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/**
- * Class for simple URI parsing and manipulation.
- * Intended to simplify things that were using wfParseUrl and
- * had to do manual concatenation for various needs.
- * Built to match our JS mw.Uri in naming patterns.
- * @file
- * @author Daniel Friesen
- * @since 1.20
- */
-
-class Uri {
-
-       /**
-        * The parsed components of the URI
-        */
-       protected $components;
-
-       protected static $validComponents = array( 'scheme', 'delimiter', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment' );
-       protected static $componentAliases = array( 'protocol' => 'scheme', 'password' => 'pass' );
-
-       /**
-        * parse_url() work-alike, but non-broken.  Differences:
-        *
-        * 1) Does not raise warnings on bad URLs (just returns false)
-        * 2) Handles protocols that don't use :// (e.g., mailto: and news: , as well as protocol-relative URLs) correctly
-        * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2))
-        *
-        * @param $url String: a URL to parse
-        * @return Array: bits of the URL in an associative array, per PHP docs
-        */
-       protected static function parseUri( $url ) {
-               global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
-
-               // Protocol-relative URLs are handled really badly by parse_url(). It's so bad that the easiest
-               // way to handle them is to just prepend 'http:' and strip the protocol out later
-               $wasRelative = substr( $url, 0, 2 ) == '//';
-               if ( $wasRelative ) {
-                       $url = "http:$url";
-               }
-               wfSuppressWarnings();
-               $bits = parse_url( $url );
-               wfRestoreWarnings();
-               // parse_url() returns an array without scheme for some invalid URLs, e.g.
-               // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' )
-               if ( !$bits ||
-                    !isset( $bits['scheme'] ) && strpos( $url, "://" ) !== false ) {
-                       wfDebug( __METHOD__ . ": Invalid URL: $url" );
-                       return false;
-               } else {
-                       $scheme = isset( $bits['scheme'] ) ? $bits['scheme'] : null;
-               }
-
-               // most of the protocols are followed by ://, but mailto: and sometimes news: not, check for it
-               if ( in_array( $scheme . '://', $wgUrlProtocols ) ) {
-                       $bits['delimiter'] = '://';
-               } elseif ( !is_null( $scheme ) && !in_array( $scheme . ':', $wgUrlProtocols ) ) {
-                       wfDebug( __METHOD__ . ": Invalid scheme in URL: $scheme" );
-                       return false;
-               } elseif( !is_null( $scheme ) ) {
-                       if( !in_array( $scheme . ':', $wgUrlProtocols ) ) {
-                               // For URLs that don't have a scheme, but do have a user:password, parse_url
-                               // detects the user as the scheme.
-                               unset( $bits['scheme'] );
-                               $bits['user'] = $scheme;
-                       } else {
-                               $bits['delimiter'] = ':';
-                               // parse_url detects for news: and mailto: the host part of an url as path
-                               // We have to correct this wrong detection
-                               if ( isset( $bits['path'] ) ) {
-                                       $bits['host'] = $bits['path'];
-                                       $bits['path'] = '';
-                               }
-                       }
-               }
-
-               /* Provide an empty host for eg. file:/// urls (see bug 28627) */
-               if ( !isset( $bits['host'] ) && $scheme == "file" ) {
-                       $bits['host'] = '';
-
-                       /* parse_url loses the third / for file:///c:/ urls (but not on variants) */
-                       if ( isset( $bits['path'] ) && substr( $bits['path'], 0, 1 ) !== '/' ) {
-                               $bits['path'] = '/' . $bits['path'];
-                       }
-               }
-
-               // If the URL was protocol-relative, fix scheme and delimiter
-               if ( $wasRelative ) {
-                       $bits['scheme'] = '';
-                       $bits['delimiter'] = '//';
-               }
-               return $bits;
-       }
-
-       /**
-        *
-        * @param $uri mixed URI string or array
-        */
-       public function __construct( $uri ) {
-               $this->components = array();
-               $this->setUri( $uri );
-       }
-
-       /**
-        * Set the Uri to the value of some other URI.
-        *
-        * @param $uri mixed URI string or array
-        */
-       public function setUri( $uri ) {
-               if ( is_string( $uri ) ) {
-                       $parsed = self::parseUri( $uri );
-                       if( $parsed === false ) {
-                               return false;
-                       }
-                       $this->setComponents( $parsed );
-               } elseif ( is_array( $uri ) ) {
-                       $this->setComponents( $uri );
-               } elseif ( $uri instanceof Uri ) {
-                       $this->setComponents( $uri->getComponents() );
-               } else {
-                       throw new MWException( __METHOD__ . ': $uri is not of a valid type.' );
-               }
-       }
-
-       /**
-        * Set the components of this array.
-        * Will output warnings when invalid components or aliases are found.
-        *
-        * @param $components Array The components to set on this Uri.
-        */
-       public function setComponents( array $components ) {
-               foreach ( $components as $name => $value ) {
-                       if ( isset( self::$componentAliases[$name] ) ) {
-                               $canonical = self::$componentAliases[$name];
-                               wfDebug( __METHOD__ . ": Converting alias $name to canonical $canonical." );
-                               $components[$canonical] = $value;
-                               unset( $components[$name] );
-                       } elseif ( !in_array( $name, self::$validComponents ) ) {
-                               throw new MWException( __METHOD__ . ": $name is not a valid component." );
-                       }
-               }
-
-               $this->components = $components;
-       }
-
-       /**
-        * Return the components for this Uri
-        * @return Array
-        */
-       public function getComponents() {
-               return $this->components;
-       }
-
-       /**
-        * Return the value of a specific component
-        *
-        * @param $name string The name of the component to return
-        * @param string|null
-        */
-       public function getComponent( $name ) {
-               if ( isset( self::$componentAliases[$name] ) ) {
-                       // Component is an alias. Get the actual name.
-                       $alias = $name;
-                       $name = self::$componentAliases[$name];
-                       wfDebug( __METHOD__ . ": Converting alias $alias to canonical $name." );
-               }
-
-               if( !in_array( $name, self::$validComponents ) ) {
-                       // Component is invalid
-                       throw new MWException( __METHOD__ . ": $name is not a valid component." );
-               } elseif( !empty( $this->components[$name] ) ) {
-                       // Component is valid and has a value.
-                       return $this->components[$name];
-               } else {
-                       // Component is empty
-                       return null;
-               }
-       }
-
-       /**
-        * Set a component for this Uri
-        * @param $name string The name of the component to set
-        * @param $value string|null The value to set
-        */
-       public function setComponent( $name, $value ) {
-               if ( isset( self::$componentAliases[$name] ) ) {
-                       $alias = $name;
-                       $name = self::$componentAliases[$name];
-                       wfDebug( __METHOD__ . ": Converting alias $alias to canonical $name." );
-               } elseif ( !in_array( $name, self::$validComponents ) ) {
-                       throw new MWException( __METHOD__ . ": $name is not a valid component." );
-               }
-               $this->components[$name] = $value;
-       }
-
-       public function getProtocol() { return $this->getComponent( 'scheme' ); }
-       public function getUser() { return $this->getComponent( 'user' ); }
-       public function getPassword() { return $this->getComponent( 'pass' ); }
-       public function getHost() { return $this->getComponent( 'host' ); }
-       public function getPort() { return $this->getComponent( 'port' ); }
-       public function getPath() { return $this->getComponent( 'path' ); }
-       public function getQueryString() { return $this->getComponent( 'query' ); }
-       public function getFragment() { return $this->getComponent( 'fragment' ); }
-
-       public function setProtocol( $scheme ) { $this->setComponent( 'scheme', $scheme ); }
-       public function setUser( $user ) { $this->setComponent( 'user', $user ); }
-       public function setPassword( $pass ) { $this->setComponent( 'pass', $pass ); }
-       public function setHost( $host ) { $this->setComponent( 'host', $host ); }
-       public function setPort( $port ) { $this->setComponent( 'port', $port ); }
-       public function setPath( $path ) { $this->setComponent( 'path', $path ); }
-       public function setFragment( $fragment ) { $this->setComponent( 'fragment', $fragment ); }
-
-       /**
-        * Gets the protocol-authority delimiter of a URI (:// or //).
-        * @return string|null
-        */
-       public function getDelimiter() {
-               $delimiter = $this->getComponent( 'delimiter' );
-               if ( $delimiter ) {
-                       // A specific delimiter is set, so return it.
-                       return $delimiter;
-               }
-               if ( $this->getAuthority() && $this->getProtocol() ) {
-                       // If the URI has a protocol and a body (i.e., some sort of host, etc.)
-                       // the default delimiter is "://", e.g., "http://test.com".
-                       return '://';
-               }
-               return null;
-       }
-
-       /**
-        * Gets query portion of a URI in array format.
-        * @return string
-        */
-       public function getQuery() {
-               return wfCgiToArray( $this->getQueryString() );
-       }
-
-       /**
-        * Gets query portion of a URI.
-        * @param string|array $query
-        */
-       public function setQuery( $query ) {
-               if ( is_array( $query ) ) {
-                       $query = wfArrayToCGI( $query );
-               }
-               $this->setComponent( 'query', $query );
-       }
-
-       /**
-        * Extend the query -- supply query parameters to override or add to ours
-        * @param Array|string $parameters query parameters to override or add
-        * @return Uri this URI object
-        */
-       public function extendQuery( $parameters ) {
-               if ( !is_array( $parameters ) ) {
-                       $parameters = wfCgiToArray( $parameters );
-               }
-
-               $query = $this->getQuery();
-               foreach( $parameters as $key => $value ) {
-                       $query[$key] = $value;
-               }
-
-               $this->setQuery( $query );
-               return $this;
-       }
-
-       /**
-        * Returns user and password portion of a URI.
-        * @return string
-        */
-       public function getUserInfo() {
-               $user = $this->getComponent( 'user' );
-               $pass = $this->getComponent( 'pass' );
-               return $pass ? "$user:$pass" : $user;
-       }
-
-       /**
-        * Gets host and port portion of a URI.
-        * @return string
-        */
-       public function getHostPort() {
-               $host = $this->getComponent( 'host' );
-               $port = $this->getComponent( 'port' );
-               return $port ? "$host:$port" : $host;
-       }
-
-       /**
-        * 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
-        */
-       public function getAuthority() {
-               $userinfo = $this->getUserInfo();
-               $hostinfo = $this->getHostPort();
-               return $userinfo ? "$userinfo@$hostinfo" : $hostinfo;
-       }
-
-       /**
-        * Returns everything after the authority section of the URI
-        * @return String
-        */
-       public function getRelativePath() {
-               $path = $this->getComponent( 'path' );
-               $query = $this->getComponent( 'query' );
-               $fragment = $this->getComponent( 'fragment' );
-
-               $retval = $path;
-               if( $query ) {
-                       $retval .= "?$query";
-               }
-               if( $fragment ) {
-                       $retval .= "#$fragment";
-               }
-               return $retval;
-       }
-
-       /**
-        * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-        * @return String the URI string
-        */
-       public function toString() {
-               return $this->getComponent( 'scheme' ) . $this->getDelimiter() . $this->getAuthority() . $this->getRelativePath();
-       }
-
-       /**
-        * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-        * @return String the URI string
-        */
-       public function __toString() {
-               return $this->toString();
-       }
-
-}
index f43844e..e3d22b0 100644 (file)
@@ -286,7 +286,10 @@ class User {
                                $this->loadFromId();
                                break;
                        case 'session':
-                               $this->loadFromSession();
+                               if( !$this->loadFromSession() ) {
+                                       // Loading from session failed. Load defaults.
+                                       $this->loadDefaults();
+                               }
                                wfRunHooks( 'UserLoadAfterLoadFromSession', array( $this ) );
                                break;
                        default:
@@ -624,7 +627,7 @@ class User {
                // Certain names may be reserved for batch processes.
                foreach ( $reservedUsernames as $reserved ) {
                        if ( substr( $reserved, 0, 4 ) == 'msg:' ) {
-                               $reserved = wfMsgForContent( substr( $reserved, 4 ) );
+                               $reserved = wfMessage( substr( $reserved, 4 ) )->inContentLanguage()->text();
                        }
                        if ( $reserved == $name ) {
                                return false;
@@ -762,6 +765,7 @@ class User {
         *                - 'usable'     Valid for batch processes and login
         *                - 'creatable'  Valid for batch processes, login and account creation
         *
+        * @throws MWException
         * @return bool|string
         */
        public static function getCanonicalName( $name, $validate = 'valid' ) {
@@ -933,8 +937,7 @@ class User {
        }
 
        /**
-        * Load user data from the session or login cookie. If there are no valid
-        * credentials, initialises the user as an anonymous user.
+        * Load user data from the session or login cookie.
         * @return Bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
@@ -962,7 +965,6 @@ class User {
                if ( $cookieId !== null ) {
                        $sId = intval( $cookieId );
                        if( $sessId !== null && $cookieId != $sessId ) {
-                               $this->loadDefaults(); // Possible collision!
                                wfDebugLog( 'loginSessions', "Session user ID ($sessId) and
                                        cookie user ID ($sId) don't match!" );
                                return false;
@@ -971,7 +973,6 @@ class User {
                } elseif ( $sessId !== null && $sessId != 0 ) {
                        $sId = $sessId;
                } else {
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -981,21 +982,18 @@ class User {
                        $sName = $request->getCookie( 'UserName' );
                        $request->setSessionData( 'wsUserName', $sName );
                } else {
-                       $this->loadDefaults();
                        return false;
                }
 
                $proposedUser = User::newFromId( $sId );
                if ( !$proposedUser->isLoggedIn() ) {
                        # Not a valid ID
-                       $this->loadDefaults();
                        return false;
                }
 
                global $wgBlockDisablesLogin;
                if( $wgBlockDisablesLogin && $proposedUser->isBlocked() ) {
                        # User blocked and we've disabled blocked user logins
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -1007,7 +1005,6 @@ class User {
                        $from = 'cookie';
                } else {
                        # No session or persistent login cookie
-                       $this->loadDefaults();
                        return false;
                }
 
@@ -1019,7 +1016,6 @@ class User {
                } else {
                        # Invalid credentials
                        wfDebug( "User: can't log in from $from, invalid credentials\n" );
-                       $this->loadDefaults();
                        return false;
                }
        }
@@ -1209,6 +1205,7 @@ class User {
                $this->mEffectiveGroups = null;
                $this->mImplicitGroups = null;
                $this->mOptions = null;
+               $this->mEditCount = null;
 
                if ( $reloadFrom ) {
                        $this->mLoadedItems = array();
@@ -1227,9 +1224,8 @@ class User {
 
                $defOpt = $wgDefaultUserOptions;
                # default language setting
-               $variant = $wgContLang->getDefaultVariant();
-               $defOpt['variant'] = $variant;
-               $defOpt['language'] = $variant;
+               $defOpt['variant'] = $wgContLang->getCode();
+               $defOpt['language'] = $wgContLang->getCode();
                foreach( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
                        $defOpt['searchNs'.$nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
                }
@@ -1305,13 +1301,13 @@ class User {
                        # Local list
                        if ( self::isLocallyBlockedProxy( $ip ) ) {
                                $block = new Block;
-                               $block->setBlocker( wfMsg( 'proxyblocker' ) );
-                               $block->mReason = wfMsg( 'proxyblockreason' );
+                               $block->setBlocker( wfMessage( 'proxyblocker' )->text() );
+                               $block->mReason = wfMessage( 'proxyblockreason' )->text();
                                $block->setTarget( $ip );
                        } elseif ( $this->isAnon() && $this->isDnsBlacklisted( $ip ) ) {
                                $block = new Block;
-                               $block->setBlocker( wfMsg( 'sorbs' ) );
-                               $block->mReason = wfMsg( 'sorbsreason' );
+                               $block->setBlocker( wfMessage( 'sorbs' )->text() );
+                               $block->mReason = wfMessage( 'sorbsreason' )->text();
                                $block->setTarget( $ip );
                        }
                }
@@ -2016,7 +2012,7 @@ class User {
 
                if( $str !== null ) {
                        if( !$wgAuth->allowPasswordChange() ) {
-                               throw new PasswordError( wfMsg( 'password-change-forbidden' ) );
+                               throw new PasswordError( wfMessage( 'password-change-forbidden' )->text() );
                        }
 
                        if( !$this->isValidPassword( $str ) ) {
@@ -2029,12 +2025,12 @@ class User {
                                        $message = $valid;
                                        $params = array( $wgMinimalPasswordLength );
                                }
-                               throw new PasswordError( wfMsgExt( $message, array( 'parsemag' ), $params ) );
+                               throw new PasswordError( wfMessage( $message, $params )->text() );
                        }
                }
 
                if( !$wgAuth->setPassword( $this, $str ) ) {
-                       throw new PasswordError( wfMsg( 'externaldberror' ) );
+                       throw new PasswordError( wfMessage( 'externaldberror' )->text() );
                }
 
                $this->setInternalPassword( $str );
@@ -2798,9 +2794,13 @@ class User {
         * @param $value String Value to set
         * @param $exp Int Expiration time, as a UNIX time value;
         *                   if 0 or not specified, use the default $wgCookieExpiration
+        * @param $secure Bool
+        *  true: Force setting the secure attribute when setting the cookie
+        *  false: Force NOT setting the secure attribute when setting the cookie
+        *  null (default): Use the default ($wgCookieSecure) to set the secure attribute
         */
-       protected function setCookie( $name, $value, $exp = 0 ) {
-               $this->getRequest()->response()->setcookie( $name, $value, $exp );
+       protected function setCookie( $name, $value, $exp = 0, $secure = null ) {
+               $this->getRequest()->response()->setcookie( $name, $value, $exp, null, null, $secure );
        }
 
        /**
@@ -2816,8 +2816,9 @@ class User {
         *
         * @param $request WebRequest object to use; $wgRequest will be used if null
         *        is passed.
+        * @param $secure Whether to force secure/insecure cookies or use default
         */
-       public function setCookies( $request = null ) {
+       public function setCookies( $request = null, $secure = null ) {
                if ( $request === null ) {
                        $request = $this->getRequest();
                }
@@ -2856,9 +2857,18 @@ class User {
                        if ( $value === false ) {
                                $this->clearCookie( $name );
                        } else {
-                               $this->setCookie( $name, $value );
+                               $this->setCookie( $name, $value, 0, $secure );
                        }
                }
+
+               /**
+                * If wpStickHTTPS was selected, also set an insecure cookie that
+                * will cause the site to redirect the user to HTTPS, if they access
+                * it over HTTP. Bug 29898.
+                */
+               if ( $request->getCheck( 'wpStickHTTPS' ) ) {
+                       $this->setCookie( 'forceHTTPS', 'true', time() + 2592000, false ); //30 days
+               }
        }
 
        /**
@@ -2881,6 +2891,7 @@ class User {
 
                $this->clearCookie( 'UserID' );
                $this->clearCookie( 'Token' );
+               $this->clearCookie( 'forceHTTPS' );
 
                # Remember when user logged out, to prevent seeing cached pages
                $this->setCookie( 'LoggedOut', wfTimestampNow(), time() + 86400 );
@@ -2891,11 +2902,16 @@ class User {
         * @todo Only rarely do all these fields need to be set!
         */
        public function saveSettings() {
+               global $wgAuth;
+
                $this->load();
                if ( wfReadOnly() ) { return; }
                if ( 0 == $this->mId ) { return; }
 
                $this->mTouched = self::newTouchedTimestamp();
+               if ( !$wgAuth->allowSetLocalPassword() ) {
+                       $this->mPassword = '';
+               }
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->update( 'user',
@@ -3353,15 +3369,15 @@ class User {
                        $message = 'confirmemail_body_' . $type;
                }
 
-               return $this->sendMail( wfMsg( 'confirmemail_subject' ),
-                       wfMsg( $message,
+               return $this->sendMail( wfMessage( 'confirmemail_subject' )->text(),
+                       wfMessage( $message,
                                $this->getRequest()->getIP(),
                                $this->getName(),
                                $url,
                                $wgLang->timeanddate( $expiration, false ),
                                $invalidateURL,
                                $wgLang->date( $expiration, false ),
-                               $wgLang->time( $expiration, false ) ) );
+                               $wgLang->time( $expiration, false ) )->text() );
        }
 
        /**
@@ -3624,14 +3640,27 @@ class User {
        public static function getGroupsWithPermission( $role ) {
                global $wgGroupPermissions;
                $allowedGroups = array();
-               foreach ( $wgGroupPermissions as $group => $rights ) {
-                       if ( isset( $rights[$role] ) && $rights[$role] ) {
+               foreach ( array_keys( $wgGroupPermissions ) as $group ) {
+                       if ( self::groupHasPermission( $group, $role ) ) {
                                $allowedGroups[] = $group;
                        }
                }
                return $allowedGroups;
        }
 
+       /**
+        * Check, if the given group has the given permission
+        *
+        * @param $group String Group to check
+        * @param $role String Role to check
+        * @return bool
+        */
+       public static function groupHasPermission( $group, $role ) {
+               global $wgGroupPermissions, $wgRevokePermissions;
+               return isset( $wgGroupPermissions[$group][$role] ) && $wgGroupPermissions[$group][$role]
+                       && !( isset( $wgRevokePermissions[$group][$role] ) && $wgRevokePermissions[$group][$role] );
+       }
+
        /**
         * Get the localized descriptive name for a group, if it exists
         *
@@ -4013,10 +4042,10 @@ class User {
                        $action = 'create2';
                        if ( $byEmail ) {
                                if ( $reason === '' ) {
-                                       $reason = wfMsgForContent( 'newuserlog-byemail' );
+                                       $reason = wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text();
                                } else {
                                        $reason = $wgContLang->commaList( array(
-                                               $reason, wfMsgForContent( 'newuserlog-byemail' ) ) );
+                                               $reason, wfMessage( 'newuserlog-byemail' )->inContentLanguage()->text() ) );
                                }
                        }
                }
@@ -4049,12 +4078,28 @@ class User {
         * @todo document
         */
        protected function loadOptions() {
+               global $wgContLang;
+
                $this->load();
-               if ( $this->mOptionsLoaded || !$this->getId() )
+
+               if ( $this->mOptionsLoaded ) {
                        return;
+               }
 
                $this->mOptions = self::getDefaultOptions();
 
+               if ( !$this->getId() ) {
+                       // For unlogged-in users, load language/variant options from request.
+                       // There's no need to do it for logged-in users: they can set preferences,
+                       // and handling of page content is done by $pageLang->getPreferredVariant() and such,
+                       // so don't override user's choice (especially when the user chooses site default).
+                       $variant = $wgContLang->getDefaultVariant();
+                       $this->mOptions['variant'] = $variant;
+                       $this->mOptions['language'] = $variant;
+                       $this->mOptionsLoaded = true;
+                       return;
+               }
+
                // Maybe load from the object
                if ( !is_null( $this->mOptionOverrides ) ) {
                        wfDebug( "User: loading options for user " . $this->getId() . " from override cache.\n" );
@@ -4185,8 +4230,8 @@ class User {
                /*
                if ( $wgMinimalPasswordLength > 1 ) {
                        $ret['pattern'] = '.{' . intval( $wgMinimalPasswordLength ) . ',}';
-                       $ret['title'] = wfMsgExt( 'passwordtooshort', 'parsemag',
-                               $wgMinimalPasswordLength );
+                       $ret['title'] = wfMessage( 'passwordtooshort' )
+                               ->numParams( $wgMinimalPasswordLength )->text();
                }
                */
 
index 36da6fb..9830f69 100644 (file)
@@ -152,6 +152,7 @@ class UserMailer {
         * @param $body String: email's text.
         * @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' ) {
@@ -194,7 +195,7 @@ class UserMailer {
                #  NOTE: To: is for presentation, the actual recipient is specified
                #  by the mailer using the Rcpt-To: header.
                #
-               # Subject: 
+               # Subject:
                #  PHP mail() second argument to pass the subject, passing a Subject
                #  as an additional header will result in a duplicate header.
                #
@@ -228,7 +229,7 @@ class UserMailer {
                if ( is_array( $wgSMTP ) ) {
                        #
                        # PEAR MAILER
-                       # 
+                       #
 
                        if ( function_exists( 'stream_resolve_include_path' ) ) {
                                $found = stream_resolve_include_path( 'Mail.php' );
@@ -260,7 +261,7 @@ class UserMailer {
                        }
 
                        # Split jobs since SMTP servers tends to limit the maximum
-                       # number of possible recipients.        
+                       # number of possible recipients.
                        $chunks = array_chunk( $to, $wgEnotifMaxRecips );
                        foreach ( $chunks as $chunk ) {
                                $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
@@ -273,7 +274,7 @@ class UserMailer {
                        wfRestoreWarnings();
                        return Status::newGood();
                } else  {
-                       # 
+                       #
                        # PHP mail()
                        #
 
@@ -446,19 +447,23 @@ class EmailNotification {
                                $watchers[] = intval( $row->wl_user );
                        }
                        if ( $watchers ) {
-                               // Update wl_notificationtimestamp for all watching users except
-                               // the editor
-                               $dbw->begin( __METHOD__ );
-                               $dbw->update( 'watchlist',
-                                       array( /* SET */
-                                               'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
-                                       ), array( /* WHERE */
-                                               'wl_user' => $watchers,
-                                               'wl_namespace' => $title->getNamespace(),
-                                               'wl_title' => $title->getDBkey(),
-                                       ), __METHOD__
+                               // Update wl_notificationtimestamp for all watching users except the editor
+                               $fname = __METHOD__;
+                               $dbw->onTransactionIdle(
+                                       function() use ( $dbw, $timestamp, $watchers, $title, $fname ) {
+                                               $dbw->begin( $fname );
+                                               $dbw->update( 'watchlist',
+                                                       array( /* SET */
+                                                               'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
+                                                       ), array( /* WHERE */
+                                                               'wl_user'      => $watchers,
+                                                               'wl_namespace' => $title->getNamespace(),
+                                                               'wl_title'     => $title->getDBkey(),
+                                                       ), $fname
+                                               );
+                                               $dbw->commit( $fname );
+                                       }
                                );
-                               $dbw->commit( __METHOD__ );
                        }
                }
 
@@ -623,32 +628,36 @@ class EmailNotification {
 
                if ( $this->oldid ) {
                        // Always show a link to the diff which triggered the mail. See bug 32210.
-                       $keys['$NEWPAGE'] = wfMsgForContent( 'enotif_lastdiff',
-                               $this->title->getCanonicalUrl( 'diff=next&oldid=' . $this->oldid ) );
+                       $keys['$NEWPAGE'] = 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" . wfMsgForContent( 'enotif_lastvisited',
-                                       $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) );
+                               $keys['$NEWPAGE'] .= " \n" . wfMessage( 'enotif_lastvisited',
+                                       $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) )
+                                       ->inContentLanguage()->text();
                        }
                        $keys['$OLDID']   = $this->oldid;
-                       $keys['$CHANGEDORCREATED'] = wfMsgForContent( 'changed' );
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
-                       $keys['$NEWPAGE'] = wfMsgForContent( 'enotif_newpagetext' );
+                       $keys['$NEWPAGE'] = wfMessage( 'enotif_newpagetext' )->inContentLanguage()->text();
                        # clear $OLDID placeholder in the message template
                        $keys['$OLDID']   = '';
-                       $keys['$CHANGEDORCREATED'] = wfMsgForContent( 'created' );
+                       $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
                $keys['$PAGETITLE'] = $this->title->getPrefixedText();
                $keys['$PAGETITLE_URL'] = $this->title->getCanonicalUrl();
-               $keys['$PAGEMINOREDIT'] = $this->minorEdit ? wfMsgForContent( 'minoredit' ) : '';
+               $keys['$PAGEMINOREDIT'] = $this->minorEdit ?
+                       wfMessage( 'minoredit' )->inContentLanguage()->text() : '';
                $keys['$UNWATCHURL'] = $this->title->getCanonicalUrl( 'action=unwatch' );
 
                if ( $this->editor->isAnon() ) {
                        # real anon (user:xxx.xxx.xxx.xxx)
-                       $keys['$PAGEEDITOR'] = wfMsgForContent( 'enotif_anon_editor', $this->editor->getName() );
-                       $keys['$PAGEEDITOR_EMAIL'] = wfMsgForContent( 'noemailtitle' );
+                       $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() );
@@ -662,12 +671,12 @@ class EmailNotification {
 
                # Now build message's subject and body
 
-               $subject = wfMsgExt( 'enotif_subject', 'content' );
+               $subject = wfMessage( 'enotif_subject' )->inContentLanguage()->plain();
                $subject = strtr( $subject, $keys );
                $subject = MessageCache::singleton()->transform( $subject, false, null, $this->title );
                $this->subject = strtr( $subject, $postTransformKeys );
 
-               $body = wfMsgExt( 'enotif_body', 'content' );
+               $body = wfMessage( 'enotif_body' )->inContentLanguage()->plain();
                $body = strtr( $body, $keys );
                $body = MessageCache::singleton()->transform( $body, false, null, $this->title );
                $this->body = wordwrap( strtr( $body, $postTransformKeys ), 72 );
@@ -769,7 +778,7 @@ class EmailNotification {
                                array( '$WATCHINGUSERNAME',
                                        '$PAGEEDITDATE',
                                        '$PAGEEDITTIME' ),
-                               array( wfMsgForContent( 'enotif_impersonal_salutation' ),
+                               array( wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(),
                                        $wgContLang->date( $this->timestamp, false, false ),
                                        $wgContLang->time( $this->timestamp, false, false ) ),
                                $this->body );
index 2cc6338..80fb81a 100644 (file)
@@ -620,6 +620,7 @@ class WebRequest {
         * Return the path and query string portion of the request URI.
         * This will be suitable for use as a relative link in HTML output.
         *
+        * @throws MWException
         * @return String
         */
        public function getRequestURL() {
@@ -907,6 +908,7 @@ class WebRequest {
         * false if an error message has been shown and the request should be aborted.
         *
         * @param $extWhitelist array
+        * @throws HttpError
         * @return bool
         */
        public function checkUrlExtension( $extWhitelist = array() ) {
@@ -1056,9 +1058,10 @@ HTML;
        /**
         * Work out the IP address based on various globals
         * For trusted proxies, use the XFF client IP (first of the chain)
-        * 
+        *
         * @since 1.19
         *
+        * @throws MWException
         * @return string
         */
        public function getIP() {
@@ -1238,6 +1241,7 @@ class FauxRequest extends WebRequest {
         *   fake GET/POST values
         * @param $wasPosted Bool: whether to treat the data as POST
         * @param $session Mixed: session array or null
+        * @throws MWException
         */
        public function __construct( $data = array(), $wasPosted = false, $session = null ) {
                if( is_array( $data ) ) {
index 193101b..9c613a9 100644 (file)
@@ -45,8 +45,12 @@ class WebResponse {
         * @param $expire Int: number of seconds til cookie expires
         * @param $prefix String: Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
         * @param @domain String: Cookie domain to use, if not $wgCookieDomain
+        * @param $forceSecure Bool:
+        *   true: force the cookie to be set with the secure attribute
+        *   false: force the cookie to be set without the secure attribute
+        *   null: use the value from $wgCookieSecure
         */
-       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null ) {
+       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain;
                global $wgCookieSecure,$wgCookieExpiration, $wgCookieHttpOnly;
                if ( $expire == 0 ) {
@@ -58,6 +62,13 @@ class WebResponse {
                if( $domain === null ) {
                        $domain = $wgCookieDomain;
                }
+
+               if ( is_null( $forceSecure ) ) {
+                       $secureCookie = $wgCookieSecure;
+               } else {
+                       $secureCookie = $forceSecure;
+               }
+
                $httpOnlySafe = wfHttpOnlySafe() && $wgCookieHttpOnly;
                wfDebugLog( 'cookie',
                        'setcookie: "' . implode( '", "',
@@ -67,14 +78,14 @@ class WebResponse {
                                        $expire,
                                        $wgCookiePath,
                                        $domain,
-                                       $wgCookieSecure,
+                                       $secureCookie,
                                        $httpOnlySafe ) ) . '"' );
                setcookie( $prefix . $name,
                        $value,
                        $expire,
                        $wgCookiePath,
                        $domain,
-                       $wgCookieSecure,
+                       $secureCookie,
                        $httpOnlySafe );
        }
 }
@@ -140,7 +151,7 @@ class FauxResponse extends WebResponse {
         * @param $domain TODO DOCUMENT (Default: null)
         *
         */
-       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null ) {
+       public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                $this->cookies[$name] = $value;
        }
 
index 17f8216..247f810 100644 (file)
@@ -81,7 +81,7 @@ define( 'MEDIAWIKI', true );
 # Full path to working directory.
 # Makes it possible to for example to have effective exclude path in apc.
 # Also doesn't break installations using symlinked includes, like
-# dirname( __FILE__ ) would do.
+# __DIR__ would do.
 $IP = getenv( 'MW_INSTALL_PATH' );
 if ( $IP === false ) {
        $IP = realpath( '.' );
@@ -156,4 +156,3 @@ wfProfileOut( 'WebStart.php-ob_start' );
 if ( !defined( 'MW_NO_SETUP' ) ) {
        require_once( MWInit::compiledPath( "includes/Setup.php" ) );
 }
-
index a4a8903..e6ccbe5 100644 (file)
@@ -169,6 +169,7 @@ class MediaWiki {
         * - special pages
         * - normal pages
         *
+        * @throws MWException|PermissionsError|BadTitleError|HttpError
         * @return void
         */
        private function performRequest() {
@@ -490,6 +491,23 @@ class MediaWiki {
 
                $request = $this->context->getRequest();
 
+               if ( $request->getCookie( 'forceHTTPS' )
+                       && $request->detectProtocol() == 'http'
+                       && $request->getMethod() == 'GET'
+               ) {
+                       $redirUrl = $request->getFullRequestURL();
+                       $redirUrl = str_replace( 'http://' , 'https://' , $redirUrl );
+
+                       // Setup dummy Title, otherwise OutputPage::redirect will fail
+                       $title = Title::newFromText( NS_MAIN, 'REDIR' );
+                       $this->context->setTitle( $title );
+                       $output = $this->context->getOutput();
+                       $output->redirect( $redirUrl );
+                       $output->output();
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
                // Send Ajax requests to the Ajax dispatcher.
                if ( $wgUseAjax && $request->getVal( 'action', 'view' ) == 'ajax' ) {
 
index 7c167f6..45ee20c 100644 (file)
@@ -91,22 +91,22 @@ class WikiErrorMsg extends WikiError {
                wfDeprecated( __METHOD__, '1.17' );
                $args = func_get_args();
                array_shift( $args );
-               $this->mMessage = wfMsgReal( $message, $args, true );
+               $this->mMessage = wfMessage( $message )->rawParams( $args )->text();
                $this->mMsgKey = $message;
                $this->mMsgArgs = $args;
        }
-       
+
        function getMessageKey() {
                return $this->mMsgKey;
        }
-       
+
        function getMessageArgs() {
                return $this->mMsgArgs;
        }
 }
 
 /**
- * Error class designed to handle errors involved with 
+ * Error class designed to handle errors involved with
  * XML parsing
  * @ingroup Exception
  */
@@ -134,12 +134,12 @@ class WikiXmlError extends WikiError {
        /** @return string */
        function getMessage() {
                // '$1 at line $2, col $3 (byte $4): $5',
-               return wfMsgHtml( 'xml-error-string',
+               return wfMessage( 'xml-error-string',
                        $this->mMessage,
                        $this->mLine,
                        $this->mColumn,
                        $this->mByte . $this->mContext,
-                       xml_error_string( $this->mXmlError ) );
+                       xml_error_string( $this->mXmlError ) )->escaped();
        }
 
        function _extractContext( $context, $offset ) {
index 9fb1522..0114cce 100644 (file)
@@ -41,7 +41,9 @@ class WikiFilePage extends WikiPage {
        }
 
        public function getActionOverrides() {
-               return array( 'revert' => 'RevertFileAction' );
+               $overrides = parent::getActionOverrides();
+               $overrides[ 'revert' ] = 'RevertFileAction';
+               return $overrides;
        }
 
        /**
@@ -103,13 +105,12 @@ class WikiFilePage extends WikiPage {
        }
 
        /**
-        * @param bool $text
         * @return bool
         */
-       public function isRedirect( $text = false ) {
+       public function isRedirect( ) {
                $this->loadFile();
                if ( $this->mFile->isLocal() ) {
-                       return parent::isRedirect( $text );
+                       return parent::isRedirect();
                }
 
                return (bool)$this->mFile->getRedirected();
index 5ec5819..770c37a 100644 (file)
@@ -92,6 +92,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * Create a WikiPage object of the appropriate class for the given title.
         *
         * @param $title Title
+        * @throws MWException
         * @return WikiPage object of the appropriate type
         */
        public static function factory( Title $title ) {
@@ -186,7 +187,21 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return Array
         */
        public function getActionOverrides() {
-               return array();
+               $content_handler = $this->getContentHandler();
+               return $content_handler->getActionOverrides();
+       }
+
+       /**
+        * Returns the ContentHandler instance to be used to deal with the content of this WikiPage.
+        *
+        * Shorthand for ContentHandler::getForModelID( $this->getContentModel() );
+        *
+        * @return ContentHandler
+        *
+        * @since 1.21
+        */
+       public function getContentHandler() {
+               return ContentHandler::getForModelID( $this->getContentModel() );
        }
 
        /**
@@ -230,7 +245,9 @@ class WikiPage extends Page implements IDBAccessObject {
         * @return array
         */
        public static function selectFields() {
-               return array(
+               global $wgContentHandlerUseDB;
+
+               $fields = array(
                        'page_id',
                        'page_namespace',
                        'page_title',
@@ -243,6 +260,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        'page_latest',
                        'page_len',
                );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
+
+               return $fields;
        }
 
        /**
@@ -417,21 +440,42 @@ class WikiPage extends Page implements IDBAccessObject {
        }
 
        /**
-        * Tests if the article text represents a redirect
+        * Tests if the article content represents a redirect
         *
-        * @param $text mixed string containing article contents, or boolean
         * @return bool
         */
-       public function isRedirect( $text = false ) {
-               if ( $text === false ) {
-                       if ( !$this->mDataLoaded ) {
-                               $this->loadPageData();
-                       }
+       public function isRedirect( ) {
+               $content = $this->getContent();
+               if ( !$content ) return false;
 
-                       return (bool)$this->mIsRedirect;
-               } else {
-                       return Title::newFromRedirect( $text ) !== null;
+               return $content->isRedirect();
+       }
+
+       /**
+        * Returns the page's content model id (see the CONTENT_MODEL_XXX constants).
+        *
+        * Will use the revisions actual content model if the page exists,
+        * and the page's default if the page doesn't exist yet.
+        *
+        * @return String
+        *
+        * @since 1.21
+        */
+       public function getContentModel() {
+               if ( $this->exists() ) {
+                       # look at the revision's actual content model
+                       $rev = $this->getRevision();
+
+                       if ( $rev !== null ) {
+                               return $rev->getContentModel();
+                       } else {
+                               $title = $this->mTitle->getPrefixedDBkey();
+                               wfWarn( "Page $title exists but has no (visible) revisions!" );
+                       }
                }
+
+               # use the default model for this page
+               return $this->mTitle->getContentModel();
        }
 
        /**
@@ -554,35 +598,59 @@ class WikiPage extends Page implements IDBAccessObject {
        }
 
        /**
-        * Get the text of the current revision. No side-effects...
+        * Get the content of the current revision. No side-effects...
         *
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
         *      Revision::FOR_THIS_USER    to be displayed to $wgUser
         *      Revision::RAW              get the text regardless of permissions
-        * @return String|bool The text of the current revision. False on failure
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
+        * @return Content|null The content of the current revision
+        *
+        * @since 1.21
         */
-       public function getText( $audience = Revision::FOR_PUBLIC ) {
+       public function getContent( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getText( $audience );
+                       return $this->mLastRevision->getContent( $audience );
                }
-               return false;
+               return null;
        }
 
        /**
         * Get the text of the current revision. No side-effects...
         *
-        * @return String|bool The text of the current revision. False on failure
+        * @param $audience Integer: one of:
+        *      Revision::FOR_PUBLIC       to be displayed to all users
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
+        *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
+        * @return String|false The text of the current revision
+        * @deprecated as of 1.21, getContent() should be used instead.
         */
-       public function getRawText() {
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) { #@todo: deprecated, replace usage!
+               wfDeprecated( __METHOD__, '1.21' );
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getRawText();
+                       return $this->mLastRevision->getText( $audience, $user );
                }
                return false;
        }
 
+       /**
+        * Get the text of the current revision. No side-effects...
+        *
+        * @return String|bool The text of the current revision. False on failure
+        * @deprecated as of 1.21, getContent() should be used instead.
+        */
+       public function getRawText() {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               return $this->getText( Revision::RAW );
+       }
+
        /**
         * @return string MW timestamp of last article revision
         */
@@ -607,14 +675,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return int user ID for the user that made the last article revision
         */
-       public function getUser( $audience = Revision::FOR_PUBLIC ) {
+       public function getUser( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUser( $audience );
+                       return $this->mLastRevision->getUser( $audience, $user );
                } else {
                        return -1;
                }
@@ -624,14 +694,16 @@ class WikiPage extends Page implements IDBAccessObject {
         * Get the User object of the user who created the page
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return User|null
         */
-       public function getCreator( $audience = Revision::FOR_PUBLIC ) {
+       public function getCreator( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $revision = $this->getOldestRevision();
                if ( $revision ) {
-                       $userName = $revision->getUserText( $audience );
+                       $userName = $revision->getUserText( $audience, $user );
                        return User::newFromName( $userName, false );
                } else {
                        return null;
@@ -641,14 +713,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return string username of the user that made the last article revision
         */
-       public function getUserText( $audience = Revision::FOR_PUBLIC ) {
+       public function getUserText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUserText( $audience );
+                       return $this->mLastRevision->getUserText( $audience, $user );
                } else {
                        return '';
                }
@@ -657,14 +731,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return string Comment stored for the last article revision
         */
-       public function getComment( $audience = Revision::FOR_PUBLIC ) {
+       public function getComment( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getComment( $audience );
+                       return $this->mLastRevision->getComment( $audience, $user );
                } else {
                        return '';
                }
@@ -711,7 +787,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * Determine whether a page would be suitable for being counted as an
         * article in the site_stats table based on the title & its content
         *
-        * @param $editInfo Object or false: object returned by prepareTextForEdit(),
+        * @param $editInfo Object|bool (false): object returned by prepareTextForEdit(),
         *        if false, the current database state will be used
         * @return Boolean
         */
@@ -722,32 +798,34 @@ class WikiPage extends Page implements IDBAccessObject {
                        return false;
                }
 
-               $text = $editInfo ? $editInfo->pst : false;
+               if ( $editInfo ) {
+                       $content = $editInfo->pstContent;
+               } else {
+                       $content = $this->getContent();
+               }
 
-               if ( $this->isRedirect( $text ) ) {
+               if ( !$content || $content->isRedirect( ) ) {
                        return false;
                }
 
-               switch ( $wgArticleCountMethod ) {
-               case 'any':
-                       return true;
-               case 'comma':
-                       if ( $text === false ) {
-                               $text = $this->getRawText();
-                       }
-                       return strpos( $text,  ',' ) !== false;
-               case 'link':
+               $hasLinks = null;
+
+               if ( $wgArticleCountMethod === 'link' ) {
+                       # nasty special case to avoid re-parsing to detect links
+
                        if ( $editInfo ) {
                                // ParserOutput::getLinks() is a 2D array of page links, so
                                // to be really correct we would need to recurse in the array
                                // but the main array should only have items in it if there are
                                // links.
-                               return (bool)count( $editInfo->output->getLinks() );
+                               $hasLinks = (bool)count( $editInfo->output->getLinks() );
                        } else {
-                               return (bool)wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
+                               $hasLinks = (bool)wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
                                        array( 'pl_from' => $this->getId() ), __METHOD__ );
                        }
                }
+
+               return $content->isCountable( $hasLinks );
        }
 
        /**
@@ -793,7 +871,8 @@ class WikiPage extends Page implements IDBAccessObject {
         */
        public function insertRedirect() {
                // recurse through to only get the final target
-               $retval = Title::newFromRedirectRecurse( $this->getRawText() );
+               $content = $this->getContent();
+               $retval = $content ? $content->getUltimateRedirectTarget() : null;
                if ( !$retval ) {
                        return null;
                }
@@ -989,7 +1068,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        && $parserOptions->getStubThreshold() == 0
                        && $this->mTitle->exists()
                        && ( $oldid === null || $oldid === 0 || $oldid === $this->getLatest() )
-                       && $this->mTitle->isWikitextPage();
+                       && $this->getContentHandler()->isParserCacheSupported();
        }
 
        /**
@@ -1000,6 +1079,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $parserOptions ParserOptions to use for the parse operation
         * @param $oldid Revision ID to get the text from, passing null or 0 will
         *               get the current revision (default value)
+        *
         * @return ParserOutput or false if the revision was not found
         */
        public function getParserOutput( ParserOptions $parserOptions, $oldid = null ) {
@@ -1077,8 +1157,16 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+                       //@todo: move this logic to MessageCache
+
                        if ( $this->mTitle->exists() ) {
-                               $text = $this->getRawText();
+                               // NOTE: use transclusion text for messages.
+                               //       This is consistent with  MessageCache::getMsgFromNamespace()
+
+                               $content = $this->getContent();
+                               $text = $content === null ? null : $content->getWikitextForTransclusion();
+
+                               if ( $text === null ) $text = false;
                        } else {
                                $text = false;
                        }
@@ -1143,11 +1231,13 @@ class WikiPage extends Page implements IDBAccessObject {
         * @private
         */
        public function updateRevisionOn( $dbw, $revision, $lastRevision = null, $lastRevIsRedirect = null ) {
+               global $wgContentHandlerUseDB;
+
                wfProfileIn( __METHOD__ );
 
-               $text = $revision->getText();
-               $len = strlen( $text );
-               $rt = Title::newFromRedirectRecurse( $text );
+               $content = $revision->getContent();
+               $len = $content->getSize();
+               $rt = $content->getUltimateRedirectTarget();
 
                $conditions = array( 'page_id' => $this->getId() );
 
@@ -1157,14 +1247,20 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                $now = wfTimestampNow();
+               $row = array( /* SET */
+                       'page_latest'      => $revision->getId(),
+                       'page_touched'     => $dbw->timestamp( $now ),
+                       'page_is_new'      => ( $lastRevision === 0 ) ? 1 : 0,
+                       'page_is_redirect' => $rt !== null ? 1 : 0,
+                       'page_len'         => $len,
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $row[ 'page_content_model' ] = $revision->getContentModel();
+               }
+
                $dbw->update( 'page',
-                       array( /* SET */
-                               'page_latest'      => $revision->getId(),
-                               'page_touched'     => $dbw->timestamp( $now ),
-                               'page_is_new'      => ( $lastRevision === 0 ) ? 1 : 0,
-                               'page_is_redirect' => $rt !== null ? 1 : 0,
-                               'page_len'         => $len,
-                       ),
+                       $row,
                        $conditions,
                        __METHOD__ );
 
@@ -1176,7 +1272,8 @@ class WikiPage extends Page implements IDBAccessObject {
                        $this->mLatest = $revision->getId();
                        $this->mIsRedirect = (bool)$rt;
                        # Update the LinkCache.
-                       LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect, $this->mLatest );
+                       LinkCache::singleton()->addGoodLinkObj( $this->getId(), $this->mTitle, $len, $this->mIsRedirect,
+                                                                                                       $this->mLatest, $revision->getContentModel() );
                }
 
                wfProfileOut( __METHOD__ );
@@ -1259,6 +1356,21 @@ class WikiPage extends Page implements IDBAccessObject {
                return $ret;
        }
 
+       /**
+        * Get the content that needs to be saved in order to undo all revisions
+        * between $undo and $undoafter. Revisions must belong to the same page,
+        * must exist and must not be deleted
+        * @param $undo Revision
+        * @param $undoafter Revision Must be an earlier revision than $undo
+        * @return mixed string on success, false on failure
+        * @since 1.21
+        * Before we had the Content object, this was done in getUndoText
+        */
+       public function getUndoContent( Revision $undo, Revision $undoafter = null ) {
+               $handler = $undo->getContentHandler();
+               return $handler->getUndoContent( $this->getRevision(), $undo, $undoafter );
+       }
+
        /**
         * Get the text that needs to be saved in order to undo all revisions
         * between $undo and $undoafter. Revisions must belong to the same page,
@@ -1266,27 +1378,29 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $undo Revision
         * @param $undoafter Revision Must be an earlier revision than $undo
         * @return mixed string on success, false on failure
+        * @deprecated since 1.21: use ContentHandler::getUndoContent() instead.
         */
        public function getUndoText( Revision $undo, Revision $undoafter = null ) {
-               $cur_text = $this->getRawText();
-               if ( $cur_text === false ) {
-                       return false; // no page
-               }
-               $undo_text = $undo->getText();
-               $undoafter_text = $undoafter->getText();
+               wfDeprecated( __METHOD__, '1.21' );
 
-               if ( $cur_text == $undo_text ) {
-                       # No use doing a merge if it's just a straight revert.
-                       return $undoafter_text;
-               }
+               $this->loadLastEdit();
 
-               $undone_text = '';
+               if ( $this->mLastRevision ) {
+                       if ( is_null( $undoafter ) ) {
+                               $undoafter = $undo->getPrevious();
+                       }
 
-               if ( !wfMerge( $undo_text, $undoafter_text, $cur_text, $undone_text ) ) {
-                       return false;
+                       $handler = $this->getContentHandler();
+                       $undone = $handler->getUndoContent( $this->mLastRevision, $undo, $undoafter );
+
+                       if ( !$undone ) {
+                               return false;
+                       } else {
+                               return ContentHandler::getContentText( $undone );
+                       }
                }
 
-               return $undone_text;
+               return false;
        }
 
        /**
@@ -1294,18 +1408,67 @@ 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
-        * @return string Complete article text, or null if error
+        * @return String new complete article text, or null if error
+        *
+        * @deprecated since 1.21, use replaceSectionContent() instead
         */
        public function replaceSection( $section, $text, $sectionTitle = '', $edittime = null ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               if ( strval( $section ) == '' ) { //NOTE: keep condition in sync with condition in replaceSectionContent!
+                       // Whole-page edit; let the whole text through
+                       return $text;
+               }
+
+               if ( !$this->supportsSections() ) {
+                       throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
+               }
+
+               # could even make section title, but that's not required.
+               $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
+
+               $newContent = $this->replaceSectionContent( $section, $sectionContent, $sectionTitle, $edittime );
+
+               return ContentHandler::getContentText( $newContent );
+       }
+
+       /**
+        * Returns true iff this page's content model supports sections.
+        *
+        * @return boolean whether sections are supported.
+        *
+        * @todo: the skin should check this and not offer section functionality if sections are not supported.
+        * @todo: the EditPage should check this and not offer section functionality if sections are not supported.
+        */
+       public function supportsSections() {
+               return $this->getContentHandler()->supportsSections();
+       }
+
+       /**
+        * @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
+        * @param $content Content: new content 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
+        *
+        * @return Content new complete article content, or null if error
+        *
+        * @since 1.21
+        */
+       public function replaceSectionContent( $section, Content $sectionContent, $sectionTitle = '', $edittime = null ) {
                wfProfileIn( __METHOD__ );
 
                if ( strval( $section ) == '' ) {
                        // Whole-page edit; let the whole text through
+                       $newContent = $sectionContent;
                } else {
+                       if ( !$this->supportsSections() ) {
+                               throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
+                       }
+
                        // Bug 30711: always use current version when adding a new section
                        if ( is_null( $edittime ) || $section == 'new' ) {
-                               $oldtext = $this->getRawText();
-                               if ( $oldtext === false ) {
+                               $oldContent = $this->getContent();
+                               if ( ! $oldContent ) {
                                        wfDebug( __METHOD__ . ": no page text\n" );
                                        wfProfileOut( __METHOD__ );
                                        return null;
@@ -1321,27 +1484,14 @@ class WikiPage extends Page implements IDBAccessObject {
                                        return null;
                                }
 
-                               $oldtext = $rev->getText();
+                               $oldContent = $rev->getContent();
                        }
 
-                       if ( $section == 'new' ) {
-                               # Inserting a new section
-                               $subject = $sectionTitle ? wfMsgForContent( 'newsectionheaderdefaultlevel', $sectionTitle ) . "\n\n" : '';
-                               if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
-                                       $text = strlen( trim( $oldtext ) ) > 0
-                                               ? "{$oldtext}\n\n{$subject}{$text}"
-                                               : "{$subject}{$text}";
-                               }
-                       } else {
-                               # Replacing an existing section; roll out the big guns
-                               global $wgParser;
-
-                               $text = $wgParser->replaceSection( $oldtext, $section, $text );
-                       }
+                       $newContent = $oldContent->replaceSection( $section, $sectionContent, $sectionTitle );
                }
 
                wfProfileOut( __METHOD__ );
-               return $text;
+               return $newContent;
        }
 
        /**
@@ -1389,9 +1539,10 @@ 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 int the revision ID this edit was based off, if any
+        * @param bool|int $baseRevId int the revision ID this edit was based off, if any
         * @param $user User the user doing the edit
         *
+        * @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
@@ -1406,8 +1557,66 @@ class WikiPage extends Page implements IDBAccessObject {
         *     revision:                The revision object for the inserted revision, or null
         *
         *  Compatibility note: this function previously returned a boolean value indicating success/failure
+        *
+        * @deprecated since 1.21: use doEditContent() instead.
         */
        public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+
+               return $this->doEditContent( $content, $summary, $flags, $baseRevId, $user );
+       }
+
+       /**
+        * Change an existing article or create a new article. Updates RC and all necessary caches,
+        * optionally via the deferred update array.
+        *
+        * @param $content Content: new content
+        * @param $summary String: edit summary
+        * @param $flags Integer bitfield:
+        *      EDIT_NEW
+        *          Article is known or assumed to be non-existent, create a new one
+        *      EDIT_UPDATE
+        *          Article is known or assumed to be pre-existing, update it
+        *      EDIT_MINOR
+        *          Mark this edit minor, if the user is allowed to do so
+        *      EDIT_SUPPRESS_RC
+        *          Do not log the change in recentchanges
+        *      EDIT_FORCE_BOT
+        *          Mark the edit a "bot" edit regardless of user rights
+        *      EDIT_DEFER_UPDATES
+        *          Defer some of the updates until the end of index.php
+        *      EDIT_AUTOSUMMARY
+        *          Fill in blank summaries with generated text where possible
+        *
+        * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the article will be detected.
+        * If EDIT_UPDATE is specified and the article doesn't exist, the function will return an
+        * edit-gone-missing error. If EDIT_NEW is specified and the article does exist, an
+        * 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 $user User the user doing the edit
+        * @param $serialisation_format String: format for storing the content in the database
+        *
+        * @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
+        *     edit-conflict:           In update mode, the article changed unexpectedly
+        *     edit-no-change:          Warning that the text was the same as before
+        *     edit-already-exists:     In creation mode, but the article already exists
+        *
+        *  Extensions may define additional errors.
+        *
+        *  $return->value will contain an associative array with members as follows:
+        *     new:                     Boolean indicating if the function attempted to create a new article
+        *     revision:                The revision object for the inserted revision, or null
+        *
+        * @since 1.21
+        */
+       public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
+                                                                  User $user = null, $serialisation_format = null ) {
                global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
 
                # Low-level sanity check
@@ -1417,6 +1626,13 @@ class WikiPage extends Page implements IDBAccessObject {
 
                wfProfileIn( __METHOD__ );
 
+               if ( !$content->getContentHandler()->canBeUsedOn( $this->getTitle() ) ) {
+                       wfProfileOut( __METHOD__ );
+                       return Status::newFatal( 'content-not-allowed-here',
+                               ContentHandler::getLocalizedName( $content->getModel() ),
+                               $this->getTitle()->getPrefixedText() );
+               }
+
                $user = is_null( $user ) ? $wgUser : $user;
                $status = Status::newGood( array() );
 
@@ -1427,10 +1643,14 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $flags = $this->checkFlags( $flags );
 
-               if ( !wfRunHooks( 'ArticleSave', array( &$this, &$user, &$text, &$summary,
-                       $flags & EDIT_MINOR, null, null, &$flags, &$status ) ) )
-               {
-                       wfDebug( __METHOD__ . ": ArticleSave hook aborted save!\n" );
+               # handle hook
+               $hook_args = array( &$this, &$user, &$content, &$summary,
+                                                       $flags & EDIT_MINOR, null, null, &$flags, &$status );
+
+               if ( !wfRunHooks( 'ArticleContentSave', $hook_args )
+                       || !ContentHandler::runLegacyHooks( 'ArticleSave', $hook_args ) ) {
+
+                       wfDebug( __METHOD__ . ": ArticleSave or ArticleSaveContent hook aborted save!\n" );
 
                        if ( $status->isOK() ) {
                                $status->fatal( 'edit-hook-aborted' );
@@ -1444,20 +1664,25 @@ class WikiPage extends Page implements IDBAccessObject {
                $isminor = ( $flags & EDIT_MINOR ) && $user->isAllowed( 'minoredit' );
                $bot = $flags & EDIT_FORCE_BOT;
 
-               $oldtext = $this->getRawText(); // current revision
-               $oldsize = strlen( $oldtext );
+               $old_content = $this->getContent( Revision::RAW ); // current revision's content
+
+               $oldsize = $old_content ? $old_content->getSize() : 0;
                $oldid = $this->getLatest();
                $oldIsRedirect = $this->isRedirect();
                $oldcountable = $this->isCountable();
 
+               $handler = $content->getContentHandler();
+
                # Provide autosummaries if one is not provided and autosummaries are enabled.
                if ( $wgUseAutomaticEditSummaries && $flags & EDIT_AUTOSUMMARY && $summary == '' ) {
-                       $summary = self::getAutosummary( $oldtext, $text, $flags );
+                       if ( !$old_content ) $old_content = null;
+                       $summary = $handler->getAutosummary( $old_content, $content, $flags );
                }
 
-               $editInfo = $this->prepareTextForEdit( $text, null, $user );
-               $text = $editInfo->pst;
-               $newsize = strlen( $text );
+               $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialisation_format );
+               $serialized = $editInfo->pst;
+               $content = $editInfo->pstContent;
+               $newsize =  $content->getSize();
 
                $dbw = wfGetDB( DB_MASTER );
                $now = wfTimestampNow();
@@ -1474,7 +1699,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                                wfProfileOut( __METHOD__ );
                                return $status;
-                       } elseif ( $oldtext === false ) {
+                       } elseif ( !$old_content ) {
                                # Sanity check for bug 37225
                                wfProfileOut( __METHOD__ );
                                throw new MWException( "Could not find text for current revision {$oldid}." );
@@ -1484,20 +1709,35 @@ class WikiPage extends Page implements IDBAccessObject {
                                'page'       => $this->getId(),
                                'comment'    => $summary,
                                'minor_edit' => $isminor,
-                               'text'       => $text,
+                               'text'       => $serialized,
+                               'len'        => $newsize,
                                'parent_id'  => $oldid,
                                'user'       => $user->getId(),
                                'user_text'  => $user->getName(),
-                               'timestamp'  => $now
-                       ) );
-                       # Bug 37225: use accessor to get the text as Revision may trim it.
-                       # After trimming, the text may be a duplicate of the current text.
-                       $text = $revision->getText(); // sanity; EditPage should trim already
+                               'timestamp'  => $now,
+                               'content_model' => $content->getModel(),
+                               'content_format' => $serialisation_format,
+                       ) ); #XXX: pass content object?!
 
-                       $changed = ( strcmp( $text, $oldtext ) != 0 );
+                       $changed = !$content->equals( $old_content );
 
                        if ( $changed ) {
+                               if ( !$content->isValid() ) {
+                                       throw new MWException( "New content failed validity check!" );
+                               }
+
                                $dbw->begin( __METHOD__ );
+
+                               $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                               $status->merge( $prepStatus );
+
+                               if ( !$status->isOK() ) {
+                                       $dbw->rollback();
+
+                                       wfProfileOut( __METHOD__ );
+                                       return $status;
+                               }
+
                                $revisionId = $revision->insertOn( $dbw );
 
                                # Update page
@@ -1545,8 +1785,14 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
 
                        # Update links tables, site stats, etc.
-                       $this->doEditUpdates( $revision, $user, array( 'changed' => $changed,
-                               'oldcountable' => $oldcountable ) );
+                       $this->doEditUpdates(
+                               $revision,
+                               $user,
+                               array(
+                                       'changed' => $changed,
+                                       'oldcountable' => $oldcountable
+                               )
+                       );
 
                        if ( !$changed ) {
                                $status->warning( 'edit-no-change' );
@@ -1561,6 +1807,18 @@ class WikiPage extends Page implements IDBAccessObject {
 
                        $dbw->begin( __METHOD__ );
 
+                       $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                       $status->merge( $prepStatus );
+
+                       if ( !$status->isOK() ) {
+                               $dbw->rollback();
+
+                               wfProfileOut( __METHOD__ );
+                               return $status;
+                       }
+
+                       $status->merge( $prepStatus );
+
                        # Add the page record; stake our claim on this title!
                        # This will return false if the article already exists
                        $newid = $this->insertOn( $dbw );
@@ -1578,15 +1836,18 @@ class WikiPage extends Page implements IDBAccessObject {
                                'page'       => $newid,
                                'comment'    => $summary,
                                'minor_edit' => $isminor,
-                               'text'       => $text,
+                               'text'       => $serialized,
+                               'len'        => $newsize,
                                'user'       => $user->getId(),
                                'user_text'  => $user->getName(),
-                               'timestamp'  => $now
+                               'timestamp'  => $now,
+                               'content_model' => $content->getModel(),
+                               'content_format' => $serialisation_format,
                        ) );
                        $revisionId = $revision->insertOn( $dbw );
 
                        # Bug 37225: use accessor to get the text as Revision may trim it
-                       $text = $revision->getText(); // sanity; EditPage should trim already
+                       $content = $revision->getContent(); // sanity; get normalized version
 
                        # Update the page record with revision data
                        $this->updateRevisionOn( $dbw, $revision, 0 );
@@ -1600,7 +1861,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                        $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
                                # Add RC row to the DB
                                $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
-                                       '', strlen( $text ), $revisionId, $patrolled );
+                                       '', $content->getSize(), $revisionId, $patrolled );
 
                                # Log auto-patrolled edits
                                if ( $patrolled ) {
@@ -1613,8 +1874,11 @@ class WikiPage extends Page implements IDBAccessObject {
                        # Update links, etc.
                        $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
 
-                       wfRunHooks( 'ArticleInsertComplete', array( &$this, &$user, $text, $summary,
-                               $flags & EDIT_MINOR, null, null, &$flags, $revision ) );
+                       $hook_args = array( &$this, &$user, $content, $summary,
+                                                               $flags & EDIT_MINOR, null, null, &$flags, $revision );
+
+                       ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $hook_args );
+                       wfRunHooks( 'ArticleContentInsertComplete', $hook_args );
                }
 
                # Do updates right now unless deferral was requested
@@ -1625,8 +1889,11 @@ class WikiPage extends Page implements IDBAccessObject {
                // Return the new revision (or null) to the caller
                $status->value['revision'] = $revision;
 
-               wfRunHooks( 'ArticleSaveComplete', array( &$this, &$user, $text, $summary,
-                       $flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $baseRevId ) );
+               $hook_args = array( &$this, &$user, $content, $summary,
+                                                       $flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $baseRevId );
+
+               ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
+               wfRunHooks( 'ArticleContentSaveComplete', $hook_args );
 
                # Promote user to any groups they meet the criteria for
                $user->addAutopromoteOnceGroups( 'onEdit' );
@@ -1637,33 +1904,65 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
         * Get parser options suitable for rendering the primary article wikitext
-        * @param User|string $user User object or 'canonical'
+        *
+        * @see ContentHandler::makeParserOptions
+        *
+        * @param IContextSource|User|string $context One of the following:
+        *        - IContextSource: Use the User and the Language of the provided
+        *          context
+        *        - User: Use the provided User object and $wgLang for the language,
+        *          so use an IContextSource object if possible.
+        *        - 'canonical': Canonical options (anonymous user with default
+        *          preferences and content language).
         * @return ParserOptions
         */
-       public function makeParserOptions( $user ) {
-               global $wgContLang;
-               if ( $user instanceof User ) { // settings per user (even anons)
-                       $options = ParserOptions::newFromUser( $user );
-               } else { // canonical settings
-                       $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+       public function makeParserOptions( $context ) {
+               $options = $this->getContentHandler()->makeParserOptions( $context );
+
+               if ( $this->getTitle()->isConversionTable() ) {
+                       //@todo: ConversionTable should become a separate content model, so we don't need special cases like this one.
+                       $options->disableContentConversion();
                }
-               $options->enableLimitReport(); // show inclusion/loop reports
-               $options->setTidy( true ); // fix bad HTML
+
                return $options;
        }
 
        /**
         * Prepare text which is about to be saved.
         * Returns a stdclass with source, pst and output members
-        * @return bool|object
+        *
+        * @deprecated in 1.21: use prepareContentForEdit instead.
         */
        public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
+               wfDeprecated( __METHOD__, '1.21' );
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+               return $this->prepareContentForEdit( $content, $revid , $user );
+       }
+
+       /**
+        * Prepare content which is about to be saved.
+        * Returns a stdclass with source, pst and output members
+        *
+        * @param \Content $content
+        * @param null $revid
+        * @param null|\User $user
+        * @param null $serialization_format
+        *
+        * @return bool|object
+        *
+        * @since 1.21
+        */
+       public function prepareContentForEdit( Content $content, $revid = null, User $user = null, $serialization_format = null ) {
                global $wgParser, $wgContLang, $wgUser;
                $user = is_null( $user ) ? $wgUser : $user;
-               // @TODO fixme: check $user->getId() here???
+               //XXX: check $user->getId() here???
+
                if ( $this->mPreparedEdit
-                       && $this->mPreparedEdit->newText == $text
+                       && $this->mPreparedEdit->newContent
+                       && $this->mPreparedEdit->newContent->equals( $content )
                        && $this->mPreparedEdit->revid == $revid
+                       && $this->mPreparedEdit->format == $serialization_format
+                       #XXX: also check $user here?
                ) {
                        // Already prepared
                        return $this->mPreparedEdit;
@@ -1674,11 +1973,21 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $edit = (object)array();
                $edit->revid = $revid;
-               $edit->newText = $text;
-               $edit->pst = $wgParser->preSaveTransform( $text, $this->mTitle, $user, $popts );
+
+               $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->popts = $this->makeParserOptions( 'canonical' );
-               $edit->output = $wgParser->parse( $edit->pst, $this->mTitle, $edit->popts, true, true, $revid );
-               $edit->oldText = $this->getRawText();
+
+               $edit->output = $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts );
+
+               $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 );
+               $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
 
                $this->mPreparedEdit = $edit;
 
@@ -1691,7 +2000,6 @@ class WikiPage extends Page implements IDBAccessObject {
         * Purges pages that include this page if the text was changed here.
         * Every 100th edit, prune the recent changes table.
         *
-        * @private
         * @param $revision Revision object
         * @param $user User object that did the revision
         * @param $options Array of options, following indexes are used:
@@ -1708,13 +2016,13 @@ class WikiPage extends Page implements IDBAccessObject {
                wfProfileIn( __METHOD__ );
 
                $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
-               $text = $revision->getText();
+               $content = $revision->getContent();
 
                # 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->prepareTextForEdit( $text, $revision->getId(), $user );
+                       $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
                } else {
                        wfDebug( __METHOD__ . ": No vary-revision, using prepared edit...\n" );
                        $editInfo = $this->mPreparedEdit;
@@ -1727,7 +2035,7 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                # Update the links tables and other secondary data
-               $updates = $editInfo->output->getSecondaryDataUpdates( $this->mTitle );
+               $updates = $content->getSecondaryDataUpdates( $this->getTitle(), null, true, $editInfo->output );
                DataUpdate::runUpdates( $updates );
 
                wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
@@ -1772,7 +2080,8 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, $good, $total ) );
-               DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $text ) );
+               DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content->getTextForSearchIndex() ) );
+               #@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
@@ -1798,7 +2107,11 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
-                       MessageCache::singleton()->replace( $shortTitle, $text );
+                       #XXX: could skip pseudo-messages like js/css here, based on content model.
+                       $msgtext = $content->getWikitextForTransclusion();
+                       if ( $msgtext === false || $msgtext === null ) $msgtext = '';
+
+                       MessageCache::singleton()->replace( $shortTitle, $msgtext );
                }
 
                if( $options['created'] ) {
@@ -1819,17 +2132,40 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $user User The relevant user
         * @param $comment String: comment submitted
         * @param $minor Boolean: whereas it's a minor modification
+        *
+        * @deprecated since 1.21, use doEditContent() instead.
         */
        public function doQuickEdit( $text, User $user, $comment = '', $minor = 0 ) {
+               wfDeprecated( __METHOD__, "1.21" );
+
+               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+               return $this->doQuickEditContent( $content, $user, $comment , $minor );
+       }
+
+       /**
+        * Edit an article without doing all that other stuff
+        * The article must already exist; link tables etc
+        * are not updated, caches are not flushed.
+        *
+        * @param $content Content: content submitted
+        * @param $user User The relevant user
+        * @param $comment String: comment submitted
+        * @param $serialisation_format String: format for storing the content in the database
+        * @param $minor Boolean: whereas it's a minor modification
+        */
+       public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = 0, $serialisation_format = null ) {
                wfProfileIn( __METHOD__ );
 
+               $serialized = $content->serialize( $serialisation_format );
+
                $dbw = wfGetDB( DB_MASTER );
                $revision = new Revision( array(
                        'page'       => $this->getId(),
-                       'text'       => $text,
+                       'text'       => $serialized,
+                       'length'     => $content->getSize(),
                        'comment'    => $comment,
                        'minor_edit' => $minor ? 1 : 0,
-               ) );
+               ) ); #XXX: set the content object?
                $revision->insertOn( $dbw );
                $this->updateRevisionOn( $dbw, $revision );
 
@@ -1930,12 +2266,15 @@ class WikiPage extends Page implements IDBAccessObject {
                        if ( $restrictions != '' ) {
                                $protectDescription .= $wgContLang->getDirMark() . "[$action=$restrictions] (";
                                if ( $encodedExpiry[$action] != 'infinity' ) {
-                                       $protectDescription .= wfMsgForContent( 'protect-expiring',
+                                       $protectDescription .= wfMessage(
+                                               'protect-expiring',
                                                $wgContLang->timeanddate( $expiry[$action], false, false ) ,
                                                $wgContLang->date( $expiry[$action], false, false ) ,
-                                               $wgContLang->time( $expiry[$action], false, false ) );
+                                               $wgContLang->time( $expiry[$action], false, false )
+                                       )->inContentLanguage()->text();
                                } else {
-                                       $protectDescription .= wfMsgForContent( 'protect-expiry-indefinite' );
+                                       $protectDescription .= wfMessage( 'protect-expiry-indefinite' )
+                                               ->inContentLanguage()->text();
                                }
 
                                $protectDescription .= ') ';
@@ -1976,7 +2315,12 @@ class WikiPage extends Page implements IDBAccessObject {
                        }
 
                        # Prepare a null revision to be added to the history
-                       $editComment = $wgContLang->ucfirst( wfMsgForContent( $revCommentMsg, $this->mTitle->getPrefixedText() ) );
+                       $editComment = $wgContLang->ucfirst(
+                               wfMessage(
+                                       $revCommentMsg,
+                                       $this->mTitle->getPrefixedText()
+                               )->inContentLanguage()->text()
+                       );
                        if ( $reason ) {
                                $editComment .= ": $reason";
                        }
@@ -1984,7 +2328,9 @@ class WikiPage extends Page implements IDBAccessObject {
                                $editComment .= " ($protectDescription)";
                        }
                        if ( $cascade ) {
-                               $editComment .= ' [' . wfMsgForContent( 'protect-summary-cascade' ) . ']';
+                               // FIXME: Should use 'brackets' message.
+                               $editComment .= ' [' . wfMessage( 'protect-summary-cascade' )
+                                       ->inContentLanguage()->text() . ']';
                        }
 
                        # Insert a null revision
@@ -2051,6 +2397,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * Take an array of page restrictions and flatten it to a string
         * suitable for insertion into the page_restrictions field.
         * @param $limit Array
+        * @throws MWException
         * @return String
         */
        protected static function flattenRestrictions( $limit ) {
@@ -2112,7 +2459,7 @@ class WikiPage extends Page implements IDBAccessObject {
        public function doDeleteArticleReal(
                $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
        ) {
-               global $wgUser;
+               global $wgUser, $wgContentHandlerUseDB;
 
                wfDebug( __METHOD__ . "\n" );
 
@@ -2153,6 +2500,9 @@ class WikiPage extends Page implements IDBAccessObject {
                        $bitfield = 'rev_deleted';
                }
 
+               // we need to remember the old content so we can use it to generate all deletion updates.
+               $content = $this->getContent( Revision::RAW );
+
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
                // For now, shunt the revision data into the archive table.
@@ -2165,25 +2515,34 @@ class WikiPage extends Page implements IDBAccessObject {
                //
                // In the future, we may keep revisions and mark them with
                // the rev_deleted field, which is reserved for this purpose.
+
+               $row = array(
+                       'ar_namespace'  => 'page_namespace',
+                       'ar_title'      => 'page_title',
+                       'ar_comment'    => 'rev_comment',
+                       'ar_user'       => 'rev_user',
+                       'ar_user_text'  => 'rev_user_text',
+                       'ar_timestamp'  => 'rev_timestamp',
+                       'ar_minor_edit' => 'rev_minor_edit',
+                       'ar_rev_id'     => 'rev_id',
+                       'ar_parent_id'  => 'rev_parent_id',
+                       'ar_text_id'    => 'rev_text_id',
+                       'ar_text'       => '\'\'', // Be explicit to appease
+                       'ar_flags'      => '\'\'', // MySQL's "strict mode"...
+                       'ar_len'        => 'rev_len',
+                       'ar_page_id'    => 'page_id',
+                       'ar_deleted'    => $bitfield,
+                       'ar_sha1'       => 'rev_sha1',
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $row[ 'ar_content_model' ] = 'rev_content_model';
+                       $row[ 'ar_content_format' ] = 'rev_content_format';
+               }
+
                $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
+                       $row,
                        array(
-                               'ar_namespace'  => 'page_namespace',
-                               'ar_title'      => 'page_title',
-                               'ar_comment'    => 'rev_comment',
-                               'ar_user'       => 'rev_user',
-                               'ar_user_text'  => 'rev_user_text',
-                               'ar_timestamp'  => 'rev_timestamp',
-                               'ar_minor_edit' => 'rev_minor_edit',
-                               'ar_rev_id'     => 'rev_id',
-                               'ar_parent_id'  => 'rev_parent_id',
-                               'ar_text_id'    => 'rev_text_id',
-                               'ar_text'       => '\'\'', // Be explicit to appease
-                               'ar_flags'      => '\'\'', // MySQL's "strict mode"...
-                               'ar_len'        => 'rev_len',
-                               'ar_page_id'    => 'page_id',
-                               'ar_deleted'    => $bitfield,
-                               'ar_sha1'       => 'rev_sha1'
-                       ), array(
                                'page_id' => $id,
                                'page_id = rev_page'
                        ), __METHOD__
@@ -2199,7 +2558,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        return $status;
                }
 
-               $this->doDeleteUpdates( $id );
+               $this->doDeleteUpdates( $id, $content );
 
                # Log the deletion, if the page was suppressed, log it at Oversight instead
                $logtype = $suppress ? 'suppress' : 'delete';
@@ -2215,7 +2574,7 @@ class WikiPage extends Page implements IDBAccessObject {
                        $dbw->commit( __METHOD__ );
                }
 
-               wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id ) );
+               wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
                $status->value = $logid;
                return $status;
        }
@@ -2224,13 +2583,15 @@ class WikiPage extends Page implements IDBAccessObject {
         * Do some database updates after deletion
         *
         * @param $id Int: page_id value of the page being deleted (B/C, currently unused)
+        * @param $content Content: optional page content to be used when determining the required updates.
+        *        This may be needed because $this->getContent() may already return null when the page proper was deleted.
         */
-       public function doDeleteUpdates( $id ) {
+       public function doDeleteUpdates( $id, Content $content = null ) {
                # update site status
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
 
                # remove secondary indexes, etc
-               $updates = $this->getDeletionUpdates( );
+               $updates = $this->getDeletionUpdates( $content );
                DataUpdate::runUpdates( $updates );
 
                # Clear caches
@@ -2243,16 +2604,6 @@ class WikiPage extends Page implements IDBAccessObject {
                $this->mTitle->resetArticleID( 0 );
        }
 
-       public function getDeletionUpdates() {
-               $updates = array(
-                       new LinksDeletionUpdate( $this ),
-               );
-
-               //@todo: make a hook to add update objects
-               //NOTE: deletion updates will be determined by the ContentHandler in the future
-               return $updates;
-       }
-
        /**
         * Roll back the most recent consecutive set of edits to a page
         * from the same user; fails if there are no eligible edits to
@@ -2383,7 +2734,7 @@ class WikiPage extends Page implements IDBAccessObject {
                                array( /* WHERE */
                                        'rc_cur_id' => $current->getPage(),
                                        'rc_user_text' => $current->getUserText(),
-                                       "rc_timestamp > '{$s->rev_timestamp}'",
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
                                ), __METHOD__
                        );
                }
@@ -2392,9 +2743,9 @@ class WikiPage extends Page implements IDBAccessObject {
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
-                               $summary = wfMsgForContent( 'revertpage-nouser' );
+                               $summary = wfMessage( 'revertpage-nouser' );
                        } else {
-                               $summary = wfMsgForContent( 'revertpage' );
+                               $summary = wfMessage( 'revertpage' );
                        }
                }
 
@@ -2404,7 +2755,14 @@ class WikiPage extends Page implements IDBAccessObject {
                        $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
                        $current->getId(), $wgContLang->timeanddate( $current->getTimestamp() )
                );
-               $summary = wfMsgReplaceArgs( $summary, $args );
+               if( $summary instanceof Message ) {
+                       $summary = $summary->params( $args )->inContentLanguage()->text();
+               } else {
+                       $summary = wfMsgReplaceArgs( $summary, $args );
+               }
+
+               # Truncate for whole multibyte characters.
+               $summary = $wgContLang->truncate( $summary, 255 );
 
                # Save
                $flags = EDIT_UPDATE;
@@ -2418,7 +2776,12 @@ class WikiPage extends Page implements IDBAccessObject {
                }
 
                # Actually store the edit
-               $status = $this->doEdit( $target->getText(), $summary, $flags, $target->getId(), $guser );
+               $status = $this->doEditContent( $target->getContent(), $summary, $flags, $target->getId(), $guser );
+
+               if ( !$status->isOK() ) {
+                       return $status->getErrorsArray();
+               }
+
                if ( !empty( $status->value['revision'] ) ) {
                        $revId = $status->value['revision']->getId();
                } else {
@@ -2564,57 +2927,23 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
        * Return an applicable autosummary if one exists for the given edit.
-       * @param $oldtext String: the previous text of the page.
-       * @param $newtext String: The submitted text of the page.
+       * @param $oldtext String|null: the previous text of the page.
+       * @param $newtext String|null: The submitted text of the page.
        * @param $flags Int bitmask: a bitmask of flags submitted for the edit.
        * @return string An appropriate autosummary, or an empty string.
+       *
+       * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
        */
        public static function getAutosummary( $oldtext, $newtext, $flags ) {
-               global $wgContLang;
-
-               # Decide what kind of autosummary is needed.
-
-               # Redirect autosummaries
-               $ot = Title::newFromRedirect( $oldtext );
-               $rt = Title::newFromRedirect( $newtext );
-
-               if ( is_object( $rt ) && ( !is_object( $ot ) || !$rt->equals( $ot ) || $ot->getFragment() != $rt->getFragment() ) ) {
-                       $truncatedtext = $wgContLang->truncate(
-                               str_replace( "\n", ' ', $newtext ),
-                               max( 0, 255
-                                       - strlen( wfMsgForContent( 'autoredircomment' ) )
-                                       - strlen( $rt->getFullText() )
-                               ) );
-                       return wfMsgForContent( 'autoredircomment', $rt->getFullText(), $truncatedtext );
-               }
+               # NOTE: stub for backwards-compatibility. assumes the given text is wikitext. will break horribly if it isn't.
 
-               # New page autosummaries
-               if ( $flags & EDIT_NEW && strlen( $newtext ) ) {
-                       # If they're making a new article, give its text, truncated, in the summary.
+               wfDeprecated( __METHOD__, '1.21' );
 
-                       $truncatedtext = $wgContLang->truncate(
-                               str_replace( "\n", ' ', $newtext ),
-                               max( 0, 200 - strlen( wfMsgForContent( 'autosumm-new' ) ) ) );
+               $handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
+               $oldContent = is_null( $oldtext ) ? null : $handler->unserializeContent( $oldtext );
+               $newContent = is_null( $newtext ) ? null : $handler->unserializeContent( $newtext );
 
-                       return wfMsgForContent( 'autosumm-new', $truncatedtext );
-               }
-
-               # Blanking autosummaries
-               if ( $oldtext != '' && $newtext == '' ) {
-                       return wfMsgForContent( 'autosumm-blank' );
-               } elseif ( strlen( $oldtext ) > 10 * strlen( $newtext ) && strlen( $newtext ) < 500 ) {
-                       # Removing more than 90% of the article
-
-                       $truncatedtext = $wgContLang->truncate(
-                               $newtext,
-                               max( 0, 200 - strlen( wfMsgForContent( 'autosumm-replace' ) ) ) );
-
-                       return wfMsgForContent( 'autosumm-replace', $truncatedtext );
-               }
-
-               # If we reach this point, there's no applicable autosummary for our case, so our
-               # autosummary is empty.
-               return '';
+               return $handler->getAutosummary( $oldContent, $newContent, $flags );
        }
 
        /**
@@ -2625,91 +2954,7 @@ class WikiPage extends Page implements IDBAccessObject {
         *    if no revision occurred
         */
        public function getAutoDeleteReason( &$hasHistory ) {
-               global $wgContLang;
-
-               // Get the last revision
-               $rev = $this->getRevision();
-
-               if ( is_null( $rev ) ) {
-                       return false;
-               }
-
-               // Get the article's contents
-               $contents = $rev->getText();
-               $blank = false;
-
-               // If the page is blank, use the text from the previous revision,
-               // which can only be blank if there's a move/import/protect dummy revision involved
-               if ( $contents == '' ) {
-                       $prev = $rev->getPrevious();
-
-                       if ( $prev )    {
-                               $contents = $prev->getText();
-                               $blank = true;
-                       }
-               }
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Find out if there was only one contributor
-               // Only scan the last 20 revisions
-               $res = $dbw->select( 'revision', 'rev_user_text',
-                       array( 'rev_page' => $this->getID(), $dbw->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0' ),
-                       __METHOD__,
-                       array( 'LIMIT' => 20 )
-               );
-
-               if ( $res === false ) {
-                       // This page has no revisions, which is very weird
-                       return false;
-               }
-
-               $hasHistory = ( $res->numRows() > 1 );
-               $row = $dbw->fetchObject( $res );
-
-               if ( $row ) { // $row is false if the only contributor is hidden
-                       $onlyAuthor = $row->rev_user_text;
-                       // Try to find a second contributor
-                       foreach ( $res as $row ) {
-                               if ( $row->rev_user_text != $onlyAuthor ) { // Bug 22999
-                                       $onlyAuthor = false;
-                                       break;
-                               }
-                       }
-               } else {
-                       $onlyAuthor = false;
-               }
-
-               // Generate the summary with a '$1' placeholder
-               if ( $blank ) {
-                       // The current revision is blank and the one before is also
-                       // blank. It's just not our lucky day
-                       $reason = wfMsgForContent( 'exbeforeblank', '$1' );
-               } else {
-                       if ( $onlyAuthor ) {
-                               $reason = wfMsgForContent( 'excontentauthor', '$1', $onlyAuthor );
-                       } else {
-                               $reason = wfMsgForContent( 'excontent', '$1' );
-                       }
-               }
-
-               if ( $reason == '-' ) {
-                       // Allow these UI messages to be blanked out cleanly
-                       return '';
-               }
-
-               // Replace newlines with spaces to prevent uglyness
-               $contents = preg_replace( "/[\n\r]/", ' ', $contents );
-               // Calculate the maximum amount of chars to get
-               // Max content length = max comment length - length of the comment (excl. $1)
-               $maxLength = 255 - ( strlen( $reason ) - 2 );
-               $contents = $wgContLang->truncate( $contents, $maxLength );
-               // Remove possible unfinished links
-               $contents = preg_replace( '/\[\[([^\]]*)\]?$/', '$1', $contents );
-               // Now replace the '$1' placeholder
-               $reason = str_replace( '$1', $contents, $reason );
-
-               return $reason;
+               return $this->getContentHandler()->getAutoDeleteReason( $this->getTitle(), $hasHistory );
        }
 
        /**
@@ -2943,6 +3188,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
         * @deprecated since 1.18
+        * @param $oldid int
         * @return bool
         */
        public function useParserCache( $oldid ) {
@@ -2950,6 +3196,31 @@ class WikiPage extends Page implements IDBAccessObject {
                global $wgUser;
                return $this->isParserCacheUsed( ParserOptions::newFromUser( $wgUser ), $oldid );
        }
+
+       /**
+        * Returns a list of updates to be performed when this page is deleted. The updates should remove any information
+        * about this page from secondary data stores such as links tables.
+        *
+        * @param Content|null $content optional Content object for determining the necessary updates
+        * @return Array an array of DataUpdates objects
+        */
+       public function getDeletionUpdates( Content $content = null ) {
+               if ( !$content ) {
+                       // load content object, which may be used to determine the necessary updates
+                       // XXX: the content may not be needed to determine the updates, then this would be overhead.
+                       $content = $this->getContent( Revision::RAW );
+               }
+
+               if ( !$content ) {
+                       $updates = array();
+               } else {
+                       $updates = $content->getDeletionUpdates( $this );
+               }
+
+               wfRunHooks( 'WikiPageDeletionUpdates', array( $this, $content, &$updates ) );
+               return $updates;
+       }
+
 }
 
 class PoolWorkArticleView extends PoolCounterWork {
@@ -2975,9 +3246,9 @@ class PoolWorkArticleView extends PoolCounterWork {
        private $parserOptions;
 
        /**
-        * @var string|null
+        * @var Content|null
         */
-       private $text;
+       private $content = null;
 
        /**
         * @var ParserOutput|bool
@@ -3001,14 +3272,20 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @param $revid Integer: ID of the revision being parsed
         * @param $useParserCache Boolean: whether to use the parser cache
         * @param $parserOptions parserOptions to use for the parse operation
-        * @param $text String: text to parse or null to load it
+        * @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, $text = null ) {
+       function __construct( Page $page, ParserOptions $parserOptions, $revid, $useParserCache, $content = null ) {
+               if ( is_string($content) ) { #BC: old style call
+                       $modelId = $page->getRevision()->getContentModel();
+                       $format = $page->getRevision()->getContentFormat();
+                       $content = ContentHandler::makeContent( $content, $page->getTitle(), $modelId, $format );
+               }
+
                $this->page = $page;
                $this->revid = $revid;
                $this->cacheable = $useParserCache;
                $this->parserOptions = $parserOptions;
-               $this->text = $text;
+               $this->content = $content;
                $this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
                parent::__construct( 'ArticleView', $this->cacheKey . ':revid:' . $revid );
        }
@@ -3044,25 +3321,30 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @return bool
         */
        function doWork() {
-               global $wgParser, $wgUseFileCache;
+               global $wgUseFileCache;
+
+               // @todo: several of the methods called on $this->page are not declared in Page, but present
+               //        in WikiPage and delegated by Article.
 
                $isCurrent = $this->revid === $this->page->getLatest();
 
-               if ( $this->text !== null ) {
-                       $text = $this->text;
+               if ( $this->content !== null ) {
+                       $content = $this->content;
                } elseif ( $isCurrent ) {
-                       $text = $this->page->getRawText();
+                       #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 );
                        if ( $rev === null ) {
                                return false;
                        }
-                       $text = $rev->getText();
+
+                       #XXX: why use PUBLIC audience here (default), and RAW above?
+                       $content = $rev->getContent();
                }
 
                $time = - microtime( true );
-               $this->parserOutput = $wgParser->parse( $text, $this->page->getTitle(),
-                       $this->parserOptions, true, true, $this->revid );
+               $this->parserOutput = $content->getParserOutput( $this->page->getTitle(), $this->revid, $this->parserOptions );
                $time += microtime( true );
 
                # Timing hack
@@ -3131,3 +3413,4 @@ class PoolWorkArticleView extends PoolCounterWork {
                return false;
        }
 }
+
index 120312d..35019ff 100644 (file)
@@ -59,6 +59,7 @@ class Xml {
         * The values are passed to Sanitizer::encodeAttribute.
         * Return null if no attributes given.
         * @param $attribs Array of attributes for an XML element
+        * @throws MWException
         * @return null|string
         */
        public static function expandAttributes( $attribs ) {
@@ -198,10 +199,11 @@ class Xml {
                } else {
                        $encYear = '';
                }
-               return Xml::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
-                       Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '.
-                       Xml::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
-                       Xml::monthSelector( $encMonth, -1 );
+               $inputAttribs = array( 'id' => 'year', 'maxlength' => 4, 'size' => 7 );
+               return self::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
+                       Html::input( 'year', $encYear, 'number', $inputAttribs ) . ' '.
+                       self::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
+                       self::monthSelector( $encMonth, -1 );
        }
 
        /**
index b98f521..0cbbad9 100644 (file)
@@ -6716,6 +6716,7 @@ $zh2Hant = array(
 '准话' => '準話',
 '准谱' => '準譜',
 '准货币' => '準貨幣',
+'准军事' => '準軍事',
 '准头' => '準頭',
 '准点' => '準點',
 '溟蒙' => '溟濛',
@@ -15802,6 +15803,7 @@ $zh2TW = array(
 '彩线' => '綵線',
 '彩船' => '綵船',
 '彩衣' => '綵衣',
+'綫' => '線',
 '缉凶' => '緝凶',
 '緝兇' => '緝凶',
 '緝凶' => '緝凶',
@@ -15937,6 +15939,30 @@ $zh2TW = array(
 );
 
 $zh2HK = array(
+'505線' => '505綫',
+'505线' => '505綫',
+'507線' => '507綫',
+'507线' => '507綫',
+'610線' => '610綫',
+'610线' => '610綫',
+'614P線' => '614P綫',
+'614P线' => '614P綫',
+'614线' => '614綫',
+'614線' => '614綫',
+'615P線' => '615P綫',
+'615P线' => '615P綫',
+'615线' => '615綫',
+'615線' => '615綫',
+'705线' => '705綫',
+'705線' => '705綫',
+'706线' => '706綫',
+'706線' => '706綫',
+'751P線' => '751P綫',
+'751P线' => '751P綫',
+'751線' => '751綫',
+'751线' => '751綫',
+'761P线' => '761P綫',
+'761P線' => '761P綫',
 '“' => '「',
 '”' => '」',
 '‘' => '『',
@@ -16173,6 +16199,8 @@ $zh2HK = array(
 '動著者' => '動著者',
 '動著述' => '動著述',
 '動著錄' => '動著錄',
+'北环线' => '北環綫',
+'北環線' => '北環綫',
 '医院里' => '医院裏',
 '波札那' => '博茨瓦納',
 '珍妮弗·卡普里亚蒂' => '卡佩雅蒂',
@@ -16420,6 +16448,8 @@ $zh2HK = array(
 '寫著者' => '寫著者',
 '寫著述' => '寫著述',
 '寫著錄' => '寫著錄',
+'将军澳线' => '將軍澳綫',
+'將軍澳線' => '將軍澳綫',
 '专辑里' => '專輯裏',
 '專輯裡' => '專輯裏',
 '尋著' => '尋着',
@@ -16950,6 +16980,10 @@ $zh2HK = array(
 '本著錄' => '本著錄',
 '村子里' => '村子裏',
 '村子裡' => '村子裏',
+'东涌线' => '東涌綫',
+'東涌線' => '東涌綫',
+'東鐵線' => '東鐵綫',
+'东铁线' => '東鐵綫',
 '枕著' => '枕着',
 '枕著作' => '枕著作',
 '枕著名' => '枕著名',
@@ -16983,6 +17017,8 @@ $zh2HK = array(
 '樂著錄' => '樂著錄',
 '寶獅' => '標致',
 '標誌著' => '標誌着',
+'機場快線' => '機場快綫',
+'机场快线' => '機場快綫',
 '機器人' => '機械人',
 '机器人' => '機械人',
 '历史里' => '歷史裏',
@@ -17015,8 +17051,12 @@ $zh2HK = array(
 '沉著者' => '沉著者',
 '沉著述' => '沉著述',
 '沉著錄' => '沉著錄',
+'沙中线' => '沙中綫',
+'沙中線' => '沙中綫',
 '沙地阿拉伯' => '沙特阿拉伯',
 '沙烏地阿拉伯' => '沙特阿拉伯',
+'沙田至中環線' => '沙田至中環綫',
+'沙田至中环线' => '沙田至中環綫',
 '马拉特·萨芬' => '沙芬',
 '沿著' => '沿着',
 '沿著作' => '沿著作',
@@ -17074,6 +17114,8 @@ $zh2HK = array(
 '涼著錄' => '涼著錄',
 '深淵裡' => '深淵裏',
 '深渊里' => '深渊裏',
+'港岛线' => '港島綫',
+'港島線' => '港島綫',
 '渴著' => '渴着',
 '渴著作' => '渴著作',
 '渴著名' => '渴著名',
@@ -17114,6 +17156,14 @@ $zh2HK = array(
 '潤著者' => '潤著者',
 '潤著述' => '潤著述',
 '潤著錄' => '潤著錄',
+'無線劇集' => '無綫劇集',
+'无线剧集' => '無綫劇集',
+'無線收費' => '無綫收費',
+'无线收费' => '無綫收費',
+'无线节目' => '無綫節目',
+'無線節目' => '無綫節目',
+'无线电视' => '無綫電視',
+'無線電視' => '無綫電視',
 '菸' => '煙',
 '照著' => '照着',
 '照著作' => '照著作',
@@ -17547,6 +17597,8 @@ $zh2HK = array(
 '苦著錄' => '苦著錄',
 '苦里' => '苦裏',
 '苦裡' => '苦裏',
+'荃湾线' => '荃灣綫',
+'荃灣線' => '荃灣綫',
 '莫三比克' => '莫桑比克',
 '賴索托' => '萊索托',
 '馬自達' => '萬事得',
@@ -17630,6 +17682,8 @@ $zh2HK = array(
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
 '裹著錄' => '裹著錄',
+'西铁线' => '西鐵綫',
+'西鐵線' => '西鐵綫',
 '見著' => '見着',
 '見著作' => '見著作',
 '見著名' => '見著名',
@@ -17638,6 +17692,8 @@ $zh2HK = array(
 '見著者' => '見著者',
 '見著述' => '見著述',
 '見著錄' => '見著錄',
+'觀塘線' => '觀塘綫',
+'观塘线' => '觀塘綫',
 '記著' => '記着',
 '記著作' => '記著作',
 '記著名' => '記著名',
@@ -17821,6 +17877,8 @@ $zh2HK = array(
 '辦著錄' => '辦著錄',
 '近角聪信' => '近角聰信',
 '近角聰信' => '近角聰信',
+'迪士尼线' => '迪士尼綫',
+'迪士尼線' => '迪士尼綫',
 '迫著' => '迫着',
 '追著' => '追着',
 '追著作' => '追著作',
@@ -18080,6 +18138,8 @@ $zh2HK = array(
 '馬爾地夫' => '馬爾代夫',
 '馬利共和國' => '馬里共和國',
 '土豆' => '馬鈴薯',
+'馬鞍山線' => '馬鞍山綫',
+'马鞍山线' => '馬鞍山綫',
 '駕著' => '駕着',
 '駕著作' => '駕著作',
 '駕著名' => '駕著名',
index 5b96b40..ccdf2bb 100644 (file)
@@ -596,6 +596,7 @@ class ZipDirectoryReader {
         *
         * @param $offset int The offset into the string at which to start unpacking.
         *
+        * @throws MWException
         * @return array Unpacked associative array. Note that large integers in the input
         *    may be represented as floating point numbers in the return value, so
         *    the use of weak comparison is advised.
@@ -622,7 +623,6 @@ class ZipDirectoryReader {
                        } else {
                                // Unsigned little-endian integer
                                $length = intval( $type );
-                               $bytes = substr( $string, $pos, $length );
 
                                // Calculate the value. Use an algorithm which automatically
                                // upgrades the value to floating point if necessary.
@@ -696,10 +696,10 @@ class ZipDirectoryReader {
  * Internal exception class. Will be caught by private code.
  */
 class ZipDirectoryReaderError extends Exception {
-       var $code;
+       var $errorCode;
 
        function __construct( $code ) {
-               $this->code = $code;
+               $this->errorCode = $code;
                parent::__construct( "ZipDirectoryReader error: $code" );
        }
 
@@ -707,6 +707,6 @@ class ZipDirectoryReaderError extends Exception {
         * @return mixed
         */
        function getErrorCode() {
-               return $this->code;
+               return $this->errorCode;
        }
 }
index 1c57f25..a2d49e6 100644 (file)
@@ -572,7 +572,7 @@ class HistoryPager extends ReverseChronologicalPager {
                } elseif ( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) {
                        // If revision was hidden from sysops, disable the link
                        if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
-                               $cdel = Linker::revDeleteLinkDisabled( false );
+                               $del = Linker::revDeleteLinkDisabled( false );
                        // Otherwise, show the link...
                        } else {
                                $query = array( 'type' => 'revision',
@@ -604,7 +604,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        : 0;
                $sDiff = ChangesList::showCharacterDifference( $prevSize, $rev->getSize() );
                $fSize = Linker::formatRevisionSize($rev->getSize());
-               $s .= " . . $fSize $sDiff";
+               $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 );
@@ -658,7 +658,7 @@ class HistoryPager extends ReverseChronologicalPager {
 
                # Include separator between character difference and following text
                if ( $s2 !== '' ) {
-                       $s .= " . . $s2";
+                       $s .= ' <span class="mw-changeslist-separator">. .</span> ' . $s2;
                }
 
                wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row , &$s, &$classes ) );
@@ -684,7 +684,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $link = Linker::linkKnown(
                                $this->getTitle(),
                                $date,
-                               array(),
+                               array( 'class' => 'mw-changeslist-date' ),
                                array( 'oldid' => $rev->getId() )
                        );
                } else {
index 19a0b06..a4b0cb7 100644 (file)
@@ -56,7 +56,100 @@ class InfoAction extends FormlessAction {
         * @return string Page information that will be added to the output
         */
        public function onView() {
-               global $wgContLang, $wgDisableCounters, $wgRCMaxAge, $wgRestrictionTypes;
+               $content = '';
+
+               // Page header
+               if ( !$this->msg( 'pageinfo-header' )->isDisabled() ) {
+                       $content .= $this->msg( 'pageinfo-header' )->parse();
+               }
+
+               // Hide "This page is a member of # hidden categories" explanation
+               $content .= Html::element( 'style', array(),
+                       '.mw-hiddenCategoriesExplanation { display: none; }' );
+
+               // Hide "Templates used on this page" explanation
+               $content .= Html::element( 'style', array(),
+                       '.mw-templatesUsedExplanation { display: none; }' );
+
+               // Get page information
+               $pageInfo = $this->pageInfo();
+
+               // Allow extensions to add additional information
+               wfRunHooks( 'InfoAction', array( &$pageInfo ) );
+
+               // Render page information
+               foreach ( $pageInfo as $header => $infoTable ) {
+                       $content .= $this->makeHeader( $this->msg( "pageinfo-${header}" )->escaped() );
+                       $table = '';
+                       foreach ( $infoTable as $infoRow ) {
+                               $name = ( $infoRow[0] instanceof Message ) ? $infoRow[0]->escaped() : $infoRow[0];
+                               $value = ( $infoRow[1] instanceof Message ) ? $infoRow[1]->escaped() : $infoRow[1];
+                               $table = $this->addRow( $table, $name, $value );
+                       }
+                       $content = $this->addTable( $content, $table );
+               }
+
+               // Page footer
+               if ( !$this->msg( 'pageinfo-footer' )->isDisabled() ) {
+                       $content .= $this->msg( 'pageinfo-footer' )->parse();
+               }
+
+               // Page credits
+               /*if ( $this->page->exists() ) {
+                       $content .= Html::rawElement( 'div', array( 'id' => 'mw-credits' ), $this->getContributors() );
+               }*/
+
+               return $content;
+       }
+
+       /**
+        * Creates a header that can be added to the output.
+        *
+        * @param $header The header text.
+        * @return string The HTML.
+        */
+       protected function makeHeader( $header ) {
+               global $wgParser;
+               $spanAttribs = array( 'class' => 'mw-headline', 'id' => $wgParser->guessSectionNameFromWikiText( $header ) );
+               return Html::rawElement( 'h2', array(), Html::element( 'span', $spanAttribs, $header ) );
+       }
+
+       /**
+        * Adds a row to a table that will be added to the content.
+        *
+        * @param $table string The table that will be added to the content
+        * @param $name string The name of the row
+        * @param $value string The value of the row
+        * @return string The table with the row added
+        */
+       protected function addRow( $table, $name, $value ) {
+               return $table . Html::rawElement( 'tr', array(),
+                       Html::rawElement( 'td', array( 'style' => 'vertical-align: top;' ), $name ) .
+                       Html::rawElement( 'td', array(), $value )
+               );
+       }
+
+       /**
+        * Adds a table to the content that will be added to the output.
+        *
+        * @param $content string The content that will be added to the output
+        * @param $table string The table
+        * @return string The content with the table added
+        */
+       protected function addTable( $content, $table ) {
+               return $content . Html::rawElement( 'table', array( 'class' => 'wikitable mw-page-info' ),
+                       $table );
+       }
+
+       /**
+        * Returns page information in an easily-manipulated format. Array keys are used so extensions
+        * may add additional information in arbitrary positions. Array values are arrays with one
+        * element to be rendered as a header, arrays with two elements to be rendered as a table row.
+        *
+        * @return array
+        */
+       protected function pageInfo() {
+               global $wgContLang, $wgDisableCounters, $wgRCMaxAge;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
@@ -65,7 +158,7 @@ class InfoAction extends FormlessAction {
 
                // Get page information that would be too "expensive" to retrieve by normal means
                $userCanViewUnwatchedPages = $user->isAllowed( 'unwatchedpages' );
-               $pageInfo = self::pageCountInfo( $title, $userCanViewUnwatchedPages, $wgDisableCounters );
+               $pageCounts = self::pageCounts( $title, $userCanViewUnwatchedPages, $wgDisableCounters );
 
                // Get page properties
                $dbr = wfGetDB( DB_SLAVE );
@@ -81,11 +174,9 @@ class InfoAction extends FormlessAction {
                        $pageProperties[$row->pp_propname] = $row->pp_value;
                }
 
-               $content = '';
-               $table = '';
-
                // Basic information
-               $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-basic' )->text() );
+               $pageInfo = array();
+               $pageInfo['header-basic'] = array();
 
                // Display title
                $displayTitle = $title->getPrefixedText();
@@ -93,8 +184,9 @@ class InfoAction extends FormlessAction {
                        $displayTitle = $pageProperties['displaytitle'];
                }
 
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-display-title' )->escaped(), $displayTitle );
+               $pageInfo['header-basic'][] = array(
+                       $this->msg( 'pageinfo-display-title' ), $displayTitle
+               );
 
                // Default sort key
                $sortKey = $title->getCategorySortKey();
@@ -102,16 +194,15 @@ class InfoAction extends FormlessAction {
                        $sortKey = $pageProperties['defaultsort'];
                }
 
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-default-sort' )->escaped(), $sortKey );
+               $pageInfo['header-basic'][] = array( $this->msg( 'pageinfo-default-sort' ), $sortKey );
 
                // Page length (in bytes)
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-length' )->escaped(), $lang->formatNum( $title->getLength() ) );
+               $pageInfo['header-basic'][] = array(
+                       $this->msg( 'pageinfo-length' ), $lang->formatNum( $title->getLength() )
+               );
 
-               // Page ID (number not localised, as it's a database ID.)
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-article-id' )->escaped(), $id );
+               // Page ID (number not localised, as it's a database ID)
+               $pageInfo['header-basic'][] = array( $this->msg( 'pageinfo-article-id' ), $id );
 
                // Search engine status
                $pOutput = new ParserOutput();
@@ -121,27 +212,27 @@ class InfoAction extends FormlessAction {
 
                // Use robot policy logic
                $policy = $this->page->getRobotPolicy( 'view', $pOutput );
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-robot-policy' )->escaped(),
-                       $this->msg( "pageinfo-robot-${policy['index']}" )->escaped()
+               $pageInfo['header-basic'][] = array(
+                       $this->msg( 'pageinfo-robot-policy' ), $this->msg( "pageinfo-robot-${policy['index']}" )
                );
 
                if ( !$wgDisableCounters ) {
                        // Number of views
-                       $table = $this->addRow( $table,
-                               $this->msg( 'pageinfo-views' )->escaped(), $lang->formatNum( $pageInfo['views'] )
+                       $pageInfo['header-basic'][] = array(
+                               $this->msg( 'pageinfo-views' ), $lang->formatNum( $pageCounts['views'] )
                        );
                }
 
                if ( $userCanViewUnwatchedPages ) {
                        // Number of page watchers
-                       $table = $this->addRow( $table,
-                               $this->msg( 'pageinfo-watchers' )->escaped(), $lang->formatNum( $pageInfo['watchers'] ) );
+                       $pageInfo['header-basic'][] = array(
+                               $this->msg( 'pageinfo-watchers' ), $lang->formatNum( $pageCounts['watchers'] )
+                       );
                }
 
                // Redirects to this page
                $whatLinksHere = SpecialPage::getTitleFor( 'Whatlinkshere', $title->getPrefixedText() );
-               $table = $this->addRow( $table,
+               $pageInfo['header-basic'][] = array(
                        Linker::link(
                                $whatLinksHere,
                                $this->msg( 'pageinfo-redirects-name' )->escaped(),
@@ -149,28 +240,29 @@ class InfoAction extends FormlessAction {
                                array( 'hidelinks' => 1, 'hidetrans' => 1 )
                        ),
                        $this->msg( 'pageinfo-redirects-value' )
-                               ->numParams( count( $title->getRedirectsHere() ) )->escaped()
+                               ->numParams( count( $title->getRedirectsHere() ) )
                );
 
-               // Subpages of this page
-               $prefixIndex = SpecialPage::getTitleFor( 'Prefixindex', $title->getPrefixedText() . '/' );
-               $table = $this->addRow( $table,
-                       Linker::link( $prefixIndex, $this->msg( 'pageinfo-subpages-name' )->escaped() ),
-                       $this->msg( 'pageinfo-subpages-value' )
-                               ->numParams(
-                                       $pageInfo['subpages']['total'],
-                                       $pageInfo['subpages']['redirects'],
-                                       $pageInfo['subpages']['nonredirects'] )->escaped()
-               );
+               // Subpages of this page, if subpages are enabled for the current NS
+               if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+                       $prefixIndex = SpecialPage::getTitleFor( 'Prefixindex', $title->getPrefixedText() . '/' );
+                       $pageInfo['header-basic'][] = array(
+                               Linker::link( $prefixIndex, $this->msg( 'pageinfo-subpages-name' )->escaped() ),
+                               $this->msg( 'pageinfo-subpages-value' )
+                                       ->numParams(
+                                               $pageCounts['subpages']['total'],
+                                               $pageCounts['subpages']['redirects'],
+                                               $pageCounts['subpages']['nonredirects'] )
+                       );
+               }
 
                // Page protection
-               $content = $this->addTable( $content, $table );
-               $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-restrictions' )->text() );
-               $table = '';
+               $pageInfo['header-restrictions'] = array();
 
                // Page protection
-               foreach ( $wgRestrictionTypes as $restrictionType ) {
+               foreach ( $title->getRestrictionTypes() as $restrictionType ) {
                        $protectionLevel = implode( ', ', $title->getRestrictions( $restrictionType ) );
+
                        if ( $protectionLevel == '' ) {
                                // Allow all users
                                $message = $this->msg( 'protect-default' )->escaped();
@@ -185,61 +277,71 @@ class InfoAction extends FormlessAction {
                                }
                        }
 
-                       $table = $this->addRow( $table,
-                               $this->msg( 'pageinfo-restriction',
-                                       $this->msg( "restriction-$restrictionType" )->plain()
-                               )->parse(), $message
+                       $pageInfo['header-restrictions'][] = array(
+                               $this->msg( "restriction-$restrictionType" ), $message
                        );
                }
 
                // Edit history
-               $content = $this->addTable( $content, $table );
-               $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-edits' )->text() );
-               $table = '';
+               $pageInfo['header-edits'] = array();
+
+               $firstRev = $this->page->getOldestRevision();
 
                // Page creator
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-firstuser' )->escaped(), $pageInfo['firstuser']
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-firstuser' ),
+                       Linker::revUserTools( $firstRev )
                );
 
                // Date of page creation
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-firsttime' )->escaped(), $lang->userTimeAndDate( $pageInfo['firsttime'], $user )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-firsttime' ),
+                       Linker::linkKnown(
+                               $title,
+                               $lang->userTimeAndDate( $firstRev->getTimestamp(), $user ),
+                               array(),
+                               array( 'oldid' => $firstRev->getId() )
+                       )
                );
 
                // Latest editor
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-lastuser' )->escaped(), $pageInfo['lastuser']
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-lastuser' ),
+                       Linker::revUserTools( $this->page->getRevision() )
                );
 
                // Date of latest edit
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-lasttime' )->escaped(), $lang->userTimeAndDate( $pageInfo['lasttime'], $user )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-lasttime' ),
+                       Linker::linkKnown(
+                               $title,
+                               $lang->userTimeAndDate( $this->page->getTimestamp(), $user ),
+                               array(),
+                               array( 'oldid' => $this->page->getLatest() )
+                       )
                );
 
                // Total number of edits
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-edits' )->escaped(), $lang->formatNum( $pageInfo['edits'] )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-edits' ), $lang->formatNum( $pageCounts['edits'] )
                );
 
                // Total number of distinct authors
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-authors' )->escaped(), $lang->formatNum( $pageInfo['authors'] )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-authors' ), $lang->formatNum( $pageCounts['authors'] )
                );
 
                // Recent number of edits (within past 30 days)
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-recent-edits', $lang->formatDuration( $wgRCMaxAge ) )->escaped(),
-                       $lang->formatNum( $pageInfo['recent_edits'] )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-recent-edits', $lang->formatDuration( $wgRCMaxAge ) ),
+                       $lang->formatNum( $pageCounts['recent_edits'] )
                );
 
                // Recent number of distinct authors
-               $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-recent-authors' )->escaped(), $lang->formatNum( $pageInfo['recent_authors'] )
+               $pageInfo['header-edits'][] = array(
+                       $this->msg( 'pageinfo-recent-authors' ), $lang->formatNum( $pageCounts['recent_authors'] )
                );
 
-               $content = $this->addTable( $content, $table );
-
                // Array of MagicWord objects
                $magicWords = MagicWord::getDoubleUnderscoreArray();
 
@@ -264,58 +366,47 @@ class InfoAction extends FormlessAction {
                        || count( $hiddenCategories ) > 0
                        || count( $transcludedTemplates ) > 0 ) {
                        // Page properties
-                       $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-properties' )->text() );
-                       $table = '';
+                       $pageInfo['header-properties'] = array();
 
                        // Magic words
                        if ( count( $listItems ) > 0 ) {
-                               $table = $this->addRow( $table,
-                                       $this->msg( 'pageinfo-magic-words' )->numParams( count( $listItems ) )->escaped(),
+                               $pageInfo['header-properties'][] = array(
+                                       $this->msg( 'pageinfo-magic-words' )->numParams( count( $listItems ) ),
                                        $localizedList
                                );
                        }
 
-                       // Hide "This page is a member of # hidden categories explanation
-                       $content .= Html::element( 'style', array(),
-                               '.mw-hiddenCategoriesExplanation { display: none; }' );
-
                        // Hidden categories
                        if ( count( $hiddenCategories ) > 0 ) {
-                               $table = $this->addRow( $table,
+                               $pageInfo['header-properties'][] = array(
                                        $this->msg( 'pageinfo-hidden-categories' )
-                                               ->numParams( count( $hiddenCategories ) )->escaped(),
+                                               ->numParams( count( $hiddenCategories ) ),
                                        Linker::formatHiddenCategories( $hiddenCategories )
                                );
                        }
 
-                       // Hide "Templates used on this page:" explanation
-                       $content .= Html::element( 'style', array(),
-                               '.mw-templatesUsedExplanation { display: none; }' );
-
                        // Transcluded templates
                        if ( count( $transcludedTemplates ) > 0 ) {
-                               $table = $this->addRow( $table,
+                               $pageInfo['header-properties'][] = array(
                                        $this->msg( 'pageinfo-templates' )
-                                               ->numParams( count( $transcludedTemplates ) )->escaped(),
+                                               ->numParams( count( $transcludedTemplates ) ),
                                        Linker::formatTemplates( $transcludedTemplates )
                                );
                        }
-
-                       $content = $this->addTable( $content, $table );
                }
 
-               return $content;
+               return $pageInfo;
        }
 
        /**
-        * Returns page information that would be too "expensive" to retrieve by normal means.
+        * Returns page counts that would be too "expensive" to retrieve by normal means.
         *
         * @param $title Title object
         * @param $canViewUnwatched bool
         * @param $disableCounter bool
         * @return array
         */
-       public static function pageCountInfo( $title, $canViewUnwatched, $disableCounter ) {
+       protected static function pageCounts( $title, $canViewUnwatched, $disableCounter ) {
                global $wgRCMaxAge;
 
                wfProfileIn( __METHOD__ );
@@ -394,95 +485,106 @@ class InfoAction extends FormlessAction {
                );
                $result['recent_authors'] = $authors;
 
-               $conds = array( 'page_namespace' => $title->getNamespace(), 'page_is_redirect' => 1 );
-               $conds[] = 'page_title ' . $dbr->buildLike( $title->getDBkey() . '/', $dbr->anyString() );
-
-               // Subpages of this page (redirects)
-               $result['subpages']['redirects'] = (int) $dbr->selectField(
-                       'page',
-                       'COUNT(page_id)',
-                       $conds,
-                       __METHOD__ );
-
-               // Subpages of this page (non-redirects)
-               $conds['page_is_redirect'] = 0;
-               $result['subpages']['nonredirects'] = (int) $dbr->selectField(
-                       'page',
-                       'COUNT(page_id)',
-                       $conds,
-                       __METHOD__
-               );
-
-               // Subpages of this page (total)
-               $result['subpages']['total'] = $result['subpages']['redirects']
-                       + $result['subpages']['nonredirects'];
+               // Subpages (if enabled)
+               if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+                       $conds = array( 'page_namespace' => $title->getNamespace() );
+                       $conds[] = 'page_title ' . $dbr->buildLike( $title->getDBkey() . '/', $dbr->anyString() );
 
-               // Latest editor + date of latest edit
-               $options = array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 1 );
-               $row = $dbr->fetchRow( $dbr->select(
-                       'revision',
-                       array( 'rev_user_text', 'rev_timestamp' ),
-                       array( 'rev_page' => $id ),
-                       __METHOD__,
-                       $options
-               ) );
-
-               $result['firstuser'] = $row['rev_user_text'];
-               $result['firsttime'] = $row['rev_timestamp'];
+                       // Subpages of this page (redirects)
+                       $conds['page_is_redirect'] = 1;
+                       $result['subpages']['redirects'] = (int) $dbr->selectField(
+                               'page',
+                               'COUNT(page_id)',
+                               $conds,
+                               __METHOD__ );
 
-               // Latest editor + date of latest edit
-               $options['ORDER BY'] = 'rev_timestamp DESC';
-               $row = $dbr->fetchRow( $dbr->select(
-                       'revision',
-                       array( 'rev_user_text', 'rev_timestamp' ),
-                       array( 'rev_page' => $id ),
-                       __METHOD__,
-                       $options
-               ) );
+                       // Subpages of this page (non-redirects)
+                       $conds['page_is_redirect'] = 0;
+                       $result['subpages']['nonredirects'] = (int) $dbr->selectField(
+                               'page',
+                               'COUNT(page_id)',
+                               $conds,
+                               __METHOD__
+                       );
 
-               $result['lastuser'] = $row['rev_user_text'];
-               $result['lasttime'] = $row['rev_timestamp'];
+                       // Subpages of this page (total)
+                       $result['subpages']['total'] = $result['subpages']['redirects']
+                               + $result['subpages']['nonredirects'];
+               }
 
                wfProfileOut( __METHOD__ );
                return $result;
        }
 
        /**
-        * Adds a header to the content that will be added to the output.
+        * Returns the name that goes in the <h1> page title.
         *
-        * @param $content string The content that will be added to the output
-        * @param $header string The value of the header
-        * @return string The content with the header added
+        * @return string
         */
-       protected function addHeader( $content, $header ) {
-               return $content . Html::element( 'h2', array(), $header );
+       protected function getPageTitle() {
+               return $this->msg( 'pageinfo-title', $this->getTitle()->getPrefixedText() )->text();
        }
 
        /**
-        * Adds a row to a table that will be added to the content.
-        *
-        * @param $table string The table that will be added to the content
-        * @param $name string The name of the row
-        * @param $value string The value of the row
-        * @return string The table with the row added
+        * Get a list of contributors of $article
+        * @return string: html
         */
-       protected function addRow( $table, $name, $value ) {
-               return $table . Html::rawElement( 'tr', array(),
-                       Html::rawElement( 'td', array(), $name ) .
-                       Html::rawElement( 'td', array(), $value )
-               );
-       }
+       protected function getContributors() {
+               global $wgHiddenPrefs;
+
+               $contributors = $this->page->getContributors();
+               $real_names = array();
+               $user_names = array();
+               $anon_ips = array();
+
+               # Sift for real versus user names
+               foreach ( $contributors as $user ) {
+                       $page = $user->isAnon()
+                               ? SpecialPage::getTitleFor( 'Contributions', $user->getName() )
+                               : $user->getUserPage();
+
+                       if ( $user->getID() == 0 ) {
+                               $anon_ips[] = Linker::link( $page, htmlspecialchars( $user->getName() ) );
+                       } elseif ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) {
+                               $real_names[] = Linker::link( $page, htmlspecialchars( $user->getRealName() ) );
+                       } else {
+                               $user_names[] = Linker::link( $page, htmlspecialchars( $user->getName() ) );
+                       }
+               }
 
-       /**
-        * Adds a table to the content that will be added to the output.
-        *
-        * @param $content string The content that will be added to the output
-        * @param $table string The table
-        * @return string The content with the table added
-        */
-       protected function addTable( $content, $table ) {
-               return $content . Html::rawElement( 'table', array( 'class' => 'wikitable mw-page-info' ),
-                       $table );
+               $lang = $this->getLanguage();
+
+               $real = $lang->listToText( $real_names );
+
+               # "ThisSite user(s) A, B and C"
+               if ( count( $user_names ) ) {
+                       $user = $this->msg( 'siteusers' )->rawParams( $lang->listToText( $user_names ) )->params(
+                               count( $user_names ) )->escaped();
+               } else {
+                       $user = false;
+               }
+
+               if ( count( $anon_ips ) ) {
+                       $anon = $this->msg( 'anonusers' )->rawParams( $lang->listToText( $anon_ips ) )->params(
+                               count( $anon_ips ) )->escaped();
+               } else {
+                       $anon = false;
+               }
+
+               # This is the big list, all mooshed together. We sift for blank strings
+               $fulllist = array();
+               foreach ( array( $real, $user, $anon ) as $s ) {
+                       if ( $s !== '' ) {
+                               array_push( $fulllist, $s );
+                       }
+               }
+
+               $count = count( $fulllist );
+               # "Based on work by ..."
+               return $count
+                       ? $this->msg( 'othercontribs' )->rawParams(
+                               $lang->listToText( $fulllist ) )->params( $count )->escaped()
+                       : '';
        }
 
        /**
@@ -493,13 +595,4 @@ class InfoAction extends FormlessAction {
        protected function getDescription() {
                return '';
        }
-
-       /**
-        * Returns the name that goes in the <h1> page title.
-        *
-        * @return string
-        */
-       protected function getPageTitle() {
-               return $this->msg( 'pageinfo-title', $this->getTitle()->getPrefixedText() )->text();
-       }
 }
index 174ca3f..7e7784c 100644 (file)
@@ -46,7 +46,7 @@ class RawAction extends FormlessAction {
        }
 
        function onView() {
-               global $wgGroupPermissions, $wgSquidMaxage, $wgForcedRawSMaxage, $wgJsMimeType;
+               global $wgSquidMaxage, $wgForcedRawSMaxage, $wgJsMimeType;
 
                $this->getOutput()->disable();
                $request = $this->getRequest();
@@ -91,7 +91,7 @@ class RawAction extends FormlessAction {
                $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
                # Output may contain user-specific data;
                # vary generated content for open sessions on private wikis
-               $privateCache = !$wgGroupPermissions['*']['read'] && ( $smaxage == 0 || session_id() != '' );
+               $privateCache = !User::groupHasPermission( '*', 'read' ) && ( $smaxage == 0 || session_id() != '' );
                # allow the client to cache this for 24 hours
                $mode = $privateCache ? 'private' : 'public';
                $response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage );
@@ -148,11 +148,20 @@ class RawAction extends FormlessAction {
                                $request->response()->header( "Last-modified: $lastmod" );
 
                                // Public-only due to cache headers
-                               $text = $rev->getText();
+                               $content = $rev->getContent();
+
+                               if ( !$content instanceof TextContent ) {
+                                       wfHttpError( 406, "Not Acceptable", "The requested page uses the content model `"
+                                                                                                               . $content->getModel() . "` which is not supported via this interface." );
+                                       die();
+                               }
+
                                $section = $request->getIntOrNull( 'section' );
                                if ( $section !== null ) {
-                                       $text = $wgParser->getSection( $text, $section );
+                                       $content = $content->getSection( $section );
                                }
+
+                               $text = $content->getNativeData();
                        }
                }
 
index 7743438..1fc7e90 100644 (file)
@@ -115,7 +115,7 @@ class RevertFileAction extends FormAction {
                $source = $this->page->getFile()->getArchiveVirtualUrl( $this->getRequest()->getText( 'oldimage' ) );
                $comment = $data['comment'];
                // TODO: Preserve file properties from database instead of reloading from file
-               return $this->page->getFile()->upload( $source, $comment, $comment );
+               return $this->page->getFile()->upload( $source, $comment, $comment, 0, false, false, $this->getUser() );
        }
 
        public function onSuccess() {
index 0d9a902..81bad9d 100644 (file)
@@ -71,45 +71,32 @@ class RollbackAction extends FormlessAction {
                        return;
                }
 
-               # Display permissions errors before read-only message -- there's no
-               # point in misleading the user into thinking the inability to rollback
-               # is only temporary.
-               if ( !empty( $result ) && $result !== array( array( 'readonlytext' ) ) ) {
-                       # array_diff is completely broken for arrays of arrays, sigh.
-                       # Remove any 'readonlytext' error manually.
-                       $out = array();
-                       foreach ( $result as $error ) {
-                               if ( $error != array( 'readonlytext' ) ) {
-                                       $out [] = $error;
-                               }
-                       }
-                       throw new PermissionsError( 'rollback', $out );
-               }
+               #NOTE: Permission errors already handled by Action::checkExecute.
 
                if ( $result == array( array( 'readonlytext' ) ) ) {
                        throw new ReadOnlyError;
                }
 
+               #XXX: Would be nice if ErrorPageError could take multiple errors, and/or a status object.
+               #     Right now, we only show the first error
+               foreach ( $result as $error ) {
+                       throw new ErrorPageError( 'rollbackfailed', $error[0], array_slice( $error, 1 ) );
+               }
+
                $current = $details['current'];
                $target = $details['target'];
                $newId = $details['newid'];
                $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
                $this->getOutput()->setRobotPolicy( 'noindex,nofollow' );
 
-               if ( $current->getUserText() === '' ) {
-                       $old = $this->msg( 'rev-deleted-user' )->escaped();
-               } else {
-                       $old = Linker::userLink( $current->getUser(), $current->getUserText() )
-                               . Linker::userToolLinks( $current->getUser(), $current->getUserText() );
-               }
-
-               $new = Linker::userLink( $target->getUser(), $target->getUserText() )
-                       . Linker::userToolLinks( $target->getUser(), $target->getUserText() );
+               $old = Linker::revUserTools( $current );
+               $new = Linker::revUserTools( $target );
                $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )->parseAsBlock() );
                $this->getOutput()->returnToMain( false, $this->getTitle() );
 
                if ( !$request->getBool( 'hidediff', false ) && !$this->getUser()->getBoolOption( 'norollbackdiff', false ) ) {
-                       $de = new DifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
+                       $contentHandler = $current->getContentHandler();
+                       $de = $contentHandler->createDifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
                        $de->showDiff( '', '' );
                }
        }
index 1e62766..1513e7d 100644 (file)
@@ -929,9 +929,9 @@ abstract class ApiBase extends ContextSource {
                                ApiBase::dieDebug( __METHOD__, "Boolean param $encParamName's default is set to '$default'. Boolean parameters must default to false." );
                        }
 
-                       $value = $this->getRequest()->getCheck( $encParamName );
+                       $value = $this->getMain()->getCheck( $encParamName );
                } else {
-                       $value = $this->getRequest()->getVal( $encParamName, $default );
+                       $value = $this->getMain()->getVal( $encParamName, $default );
 
                        if ( isset( $value ) && $type == 'namespace' ) {
                                $type = MWNamespace::getValidNamespaces();
@@ -1401,10 +1401,9 @@ abstract class ApiBase extends ContextSource {
                }
 
                if ( isset( self::$messageMap[$key] ) ) {
-                       return array( 'code' =>
-                       wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
-                               'info' =>
-                               wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
+                       return array(
+                               'code' => wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
+                               'info' => wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
                        );
                }
 
index ed72b29..6741259 100644 (file)
@@ -35,7 +35,15 @@ class ApiComparePages extends ApiBase {
                $rev1 = $this->revisionOrTitleOrId( $params['fromrev'], $params['fromtitle'], $params['fromid'] );
                $rev2 = $this->revisionOrTitleOrId( $params['torev'], $params['totitle'], $params['toid'] );
 
-               $de = new DifferenceEngine( $this->getContext(),
+               $revision = Revision::newFromId( $rev1 );
+
+               if ( !$revision ) {
+                       $this->dieUsage( 'The diff cannot be retrieved, ' .
+                               'one revision does not exist or you do not have permission to view it.', 'baddiff' );
+               }
+
+               $contentHandler = $revision->getContentHandler();
+               $de = $contentHandler->createDifferenceEngine( $this->getContext(),
                        $rev1,
                        $rev2,
                        null, // rcid
index 2d36f19..283250c 100644 (file)
@@ -61,6 +61,9 @@ class ApiDelete extends ApiBase {
                        $status = self::delete( $pageObj, $user, $params['token'], $reason );
                }
 
+               if ( is_array( $status ) ) {
+                       $this->dieUsageMsg( $status[0] );
+               }
                if ( !$status->isGood() ) {
                        $errors = $status->getErrorsArray();
                        $this->dieUsageMsg( $errors[0] ); // We don't care about multiple errors, just report one of them
@@ -98,11 +101,11 @@ class ApiDelete extends ApiBase {
        /**
         * We have our own delete() function, since Article.php's implementation is split in two phases
         *
-        * @param $page WikiPage object to work on
+        * @param $page Page|WikiPage object to work on
         * @param $user User doing the action
-        * @param $token String: delete token (same as edit token)
-        * @param $reason String: reason for the deletion. Autogenerated if NULL
-        * @return Status
+        * @param $token String delete token (same as edit token)
+        * @param $reason String|null reason for the deletion. Autogenerated if NULL
+        * @return Status|array
         */
        public static function delete( Page $page, User $user, $token, &$reason = null ) {
                $title = $page->getTitle();
@@ -116,7 +119,7 @@ class ApiDelete extends ApiBase {
                        // Need to pass a throwaway variable because generateReason expects
                        // a reference
                        $hasHistory = false;
-                       $reason = $page->getAutoDeleteReason( $hasHistory );
+                       $reason = $page->getAutoDeleteReason( $hasHistory ); 
                        if ( $reason === false ) {
                                return array( array( 'cannotdelete', $title->getPrefixedText() ) );
                        }
@@ -128,13 +131,13 @@ class ApiDelete extends ApiBase {
        }
 
        /**
-        * @param $page WikiPage object to work on
+        * @param $page WikiPage|Page object to work on
         * @param $user User doing the action
         * @param $token
         * @param $oldimage
         * @param $reason
         * @param $suppress bool
-        * @return Status
+        * @return Status|array
         */
        public static function deleteFile( Page $page, User $user, $token, $oldimage, &$reason = null, $suppress = false ) {
                $title = $page->getTitle();
@@ -161,7 +164,7 @@ class ApiDelete extends ApiBase {
                if ( is_null( $reason ) ) { // Log and RC don't like null reasons
                        $reason = '';
                }
-               return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress );
+               return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress, $user );
        }
 
        public function mustBePosted() {
index 3be4b00..87302e6 100644 (file)
@@ -54,13 +54,37 @@ 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'] ) {
                        if ( $titleObj->isRedirect() ) {
                                $oldTitle = $titleObj;
 
-                               $titles = Title::newFromRedirectArray( Revision::newFromTitle( $oldTitle )->getText( Revision::FOR_THIS_USER ) );
+                               $titles = Revision::newFromTitle( $oldTitle, false, Revision::READ_LATEST )
+                                                       ->getContent( Revision::FOR_THIS_USER, $user )
+                                                       ->getRedirectChain();
                                // array_shift( $titles );
 
                                $redirValues = array();
@@ -99,31 +123,58 @@ class ApiEditPage extends ApiBase {
                        $this->dieUsageMsg( $errors[0] );
                }
 
-               $articleObj = Article::newFromTitle( $titleObj, $this->getContext() );
-
                $toMD5 = $params['text'];
                if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) )
                {
-                       // For non-existent pages, Article::getContent()
-                       // returns an interface message rather than ''
-                       // We do want getContent()'s behavior for non-existent
-                       // MediaWiki: pages, though
-                       if ( $articleObj->getID() == 0 && $titleObj->getNamespace() != NS_MEDIAWIKI ) {
-                               $content = '';
-                       } else {
-                               $content = $articleObj->getContent();
+                       $content = $pageObj->getContent();
+
+                       // @todo: Add support for appending/prepending to the Content interface
+
+                       if ( !( $content instanceof TextContent ) ) {
+                               $mode = $contentHandler->getModelID();
+                               $this->dieUsage( "Can't append to pages using content model $mode", 'appendnotsupported' );
+                       }
+
+                       if ( !$content ) {
+                               # If this is a MediaWiki:x message, then load the messages
+                               # and return the message value for x.
+                               if ( $titleObj->getNamespace() == NS_MEDIAWIKI ) {
+                                       $text = $titleObj->getDefaultMessageText();
+                                       if ( $text === false ) {
+                                               $text = '';
+                                       }
+
+                                       try {
+                                               $content = ContentHandler::makeContent( $text, $this->getTitle() );
+                                       } catch ( MWContentSerializationException $ex ) {
+                                               $this->dieUsage( $ex->getMessage(), 'parseerror' );
+                                               return;
+                                       }
+                               }
                        }
 
                        if ( !is_null( $params['section'] ) ) {
+                               if ( !$contentHandler->supportsSections() ) {
+                                       $modelName = $contentHandler->getModelID();
+                                       $this->dieUsage( "Sections are not supported for this content model: $modelName.", 'sectionsnotsupported' );
+                               }
+
                                // Process the content for section edits
-                               global $wgParser;
                                $section = intval( $params['section'] );
-                               $content = $wgParser->getSection( $content, $section, false );
-                               if ( $content === false ) {
+                               $content = $content->getSection( $section );
+
+                               if ( !$content ) {
                                        $this->dieUsage( "There is no section {$section}.", 'nosuchsection' );
                                }
                        }
-                       $params['text'] = $params['prependtext'] . $content . $params['appendtext'];
+
+                       if ( !$content ) {
+                               $text = '';
+                       } else {
+                               $text = $content->serialize( $contentFormat );
+                       }
+
+                       $params['text'] = $params['prependtext'] . $text . $params['appendtext'];
                        $toMD5 = $params['prependtext'] . $params['appendtext'];
                }
 
@@ -147,18 +198,21 @@ class ApiEditPage extends ApiBase {
                                $this->dieUsageMsg( array( 'nosuchrevid', $params['undoafter'] ) );
                        }
 
-                       if ( $undoRev->getPage() != $articleObj->getID() ) {
+                       if ( $undoRev->getPage() != $pageObj->getID() ) {
                                $this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(), $titleObj->getPrefixedText() ) );
                        }
-                       if ( $undoafterRev->getPage() != $articleObj->getID() ) {
+                       if ( $undoafterRev->getPage() != $pageObj->getID() ) {
                                $this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(), $titleObj->getPrefixedText() ) );
                        }
 
-                       $newtext = $articleObj->getUndoText( $undoRev, $undoafterRev );
-                       if ( $newtext === false ) {
+                       $newContent = $contentHandler->getUndoContent( $pageObj->getRevision(), $undoRev, $undoafterRev );
+
+                       if ( !$newContent ) {
                                $this->dieUsageMsg( 'undo-failure' );
                        }
-                       $params['text'] = $newtext;
+
+                       $params['text'] = $newContent->serialize( $params['contentformat'] );
+
                        // If no summary was given and we only undid one rev,
                        // use an autosummary
                        if ( is_null( $params['summary'] ) && $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo'] ) {
@@ -175,6 +229,8 @@ class ApiEditPage extends ApiBase {
                // That interface kind of sucks, but it's workable
                $requestArray = array(
                        'wpTextbox1' => $params['text'],
+                       'format' => $contentFormat,
+                       'model' => $contentHandler->getModelID(),
                        'wpEditToken' => $params['token'],
                        'wpIgnoreBlankSummary' => ''
                );
@@ -182,7 +238,7 @@ class ApiEditPage extends ApiBase {
                if ( !is_null( $params['summary'] ) ) {
                        $requestArray['wpSummary'] = $params['summary'];
                }
-               
+
                if ( !is_null( $params['sectiontitle'] ) ) {
                        $requestArray['wpSectionTitle'] = $params['sectiontitle'];
                }
@@ -192,7 +248,7 @@ class ApiEditPage extends ApiBase {
                if ( !is_null( $params['basetimestamp'] ) && $params['basetimestamp'] != '' ) {
                        $requestArray['wpEdittime'] = wfTimestamp( TS_MW, $params['basetimestamp'] );
                } else {
-                       $requestArray['wpEdittime'] = $articleObj->getTimestamp();
+                       $requestArray['wpEdittime'] = $pageObj->getTimestamp();
                }
 
                if ( !is_null( $params['starttimestamp'] ) && $params['starttimestamp'] != '' ) {
@@ -240,7 +296,12 @@ class ApiEditPage extends ApiBase {
                // TODO: Make them not or check if they still do
                $wgTitle = $titleObj;
 
-               $ep = new EditPage( $articleObj );
+               $articleObject = new Article( $titleObj );
+               $ep = new EditPage( $articleObject );
+
+               // allow editing of non-textual content.
+               $ep->allowNonTextContent = true;
+
                $ep->setContextTitle( $titleObj );
                $ep->importFormData( $req );
 
@@ -258,7 +319,7 @@ class ApiEditPage extends ApiBase {
                }
 
                // Do the actual save
-               $oldRevId = $articleObj->getRevIdFetched();
+               $oldRevId = $articleObject->getRevIdFetched();
                $result = null;
                // Fake $wgRequest for some hooks inside EditPage
                // @todo FIXME: This interface SUCKS
@@ -274,6 +335,9 @@ class ApiEditPage extends ApiBase {
                        case EditPage::AS_HOOK_ERROR_EXPECTED:
                                $this->dieUsageMsg( 'hookaborted' );
 
+                       case EditPage::AS_PARSE_ERROR:
+                               $this->dieUsage( $status->getMessage(), 'parseerror' );
+
                        case EditPage::AS_IMAGE_REDIRECT_ANON:
                                $this->dieUsageMsg( 'noimageredirect-anon' );
 
@@ -325,14 +389,15 @@ class ApiEditPage extends ApiBase {
                                $r['result'] = 'Success';
                                $r['pageid'] = intval( $titleObj->getArticleID() );
                                $r['title'] = $titleObj->getPrefixedText();
-                               $newRevId = $articleObj->getLatest();
+                               $r['contentmodel'] = $titleObj->getContentModel();
+                               $newRevId = $articleObject->getLatest();
                                if ( $newRevId == $oldRevId ) {
                                        $r['nochange'] = '';
                                } else {
                                        $r['oldrevid'] = intval( $oldRevId );
                                        $r['newrevid'] = intval( $newRevId );
                                        $r['newtimestamp'] = wfTimestamp( TS_ISO_8601,
-                                               $articleObj->getTimestamp() );
+                                               $pageObj->getTimestamp() );
                                }
                                break;
 
@@ -376,6 +441,7 @@ class ApiEditPage extends ApiBase {
                                array( 'undo-failure' ),
                                array( 'hashcheckfailed' ),
                                array( 'hookaborted' ),
+                               array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
                                array( 'noimageredirect-anon' ),
                                array( 'noimageredirect-logged' ),
                                array( 'spamdetected', 'spam' ),
@@ -393,6 +459,13 @@ class ApiEditPage extends ApiBase {
                                array( 'unknownerror', 'retval' ),
                                array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
                                array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
+                               array( 'code' => 'sectionsnotsupported', 'info' => 'Sections are not supported for this type of page.' ),
+                               array( 'code' => 'editnotsupported', 'info' => 'Editing of this type of page is not supported using '
+                                                                                                                               . 'the text based edit API.' ),
+                               array( 'code' => 'appendnotsupported', 'info' => 'This type of page can not be edited by appending '
+                                                                                                                               . 'or prepending text.' ),
+                               array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied to '
+                                                                                                               . 'the page\'s content model' ),
                                array( 'customcssprotected' ),
                                array( 'customjsprotected' ),
                        )
@@ -456,6 +529,12 @@ class ApiEditPage extends ApiBase {
                                ApiBase::PARAM_TYPE => 'boolean',
                                ApiBase::PARAM_DFLT => false,
                        ),
+                       'contentformat' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+                       ),
+                       'contentmodel' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+                       )
                );
        }
 
@@ -494,6 +573,8 @@ class ApiEditPage extends ApiBase {
                        'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
                        'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
                        'redirect' => 'Automatically resolve redirects',
+                       'contentformat' => 'Content serialization format used for the input text',
+                       'contentmodel' => 'Content model of the new content',
                );
        }
 
index 1cf760a..fb6a06f 100644 (file)
@@ -130,10 +130,22 @@ class ApiFeedContributions extends ApiBase {
        protected function feedItemDesc( $revision ) {
                if( $revision ) {
                        $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+                       $content = $revision->getContent();
+
+                       if ( $content instanceof TextContent ) {
+                               // only textual content has a "source view".
+                               $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
+                       } else {
+                               //XXX: we could get an HTML representation of the content via getParserOutput, but that may
+                               //     contain JS magic and generally may not be suitable for inclusion in a feed.
+                               //     Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+                               //Compare also FeedUtils::formatDiffRow.
+                               $html = '';
+                       }
+
                        return '<p>' . htmlspecialchars( $revision->getUserText() ) . $msg .
                                htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
-                               "</p>\n<hr />\n<div>" .
-                               nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
+                               "</p>\n<hr />\n<div>" . $html . "</div>";
                }
                return '';
        }
index 83d078d..092b003 100644 (file)
@@ -50,7 +50,7 @@ class ApiFileRevert extends ApiBase {
                $this->checkPermissions( $this->getUser() );
 
                $sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
-               $status = $this->file->upload( $sourceUrl, $this->params['comment'], $this->params['comment'] );
+               $status = $this->file->upload( $sourceUrl, $this->params['comment'], $this->params['comment'], 0, false, false, $this->getUser() );
 
                if ( $status->isGood() ) {
                        $result = array( 'result' => 'Success' );
index a8d69f5..8ad9b8c 100644 (file)
@@ -143,6 +143,12 @@ abstract class ApiFormatBase extends ApiBase {
 
                $this->getMain()->getRequest()->response()->header( "Content-Type: $mime; charset=utf-8" );
 
+               //Set X-Frame-Options API results (bug 39180)
+               global $wgApiFrameOptions;
+               if ( $wgApiFrameOptions ) {
+                       $this->getMain()->getRequest()->response()->header( "X-Frame-Options: $wgApiFrameOptions" );
+               }
+
                if ( $isHtml ) {
 ?>
 <!DOCTYPE HTML>
@@ -265,7 +271,7 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
                // identify URLs
                $protos = wfUrlProtocolsWithoutProtRel();
                // This regex hacks around bug 13218 (&quot; included in the URL)
-               $text = preg_replace( "#(($protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#", '<a href="\\1">\\1</a>\\3\\4', $text );
+               $text = preg_replace( "#(((?i)$protos).*?)(&quot;)?([ \\'\"<>\n]|&lt;|&gt;|&quot;)#", '<a href="\\1">\\1</a>\\3\\4', $text );
                // identify requests to api.php
                $text = preg_replace( "#api\\.php\\?[^ <\n\t]+#", '<a href="\\0">\\0</a>', $text );
                if ( $this->mHelp ) {
diff --git a/includes/api/ApiFormatNone.php b/includes/api/ApiFormatNone.php
new file mode 100644 (file)
index 0000000..31c90e1
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ *
+ *
+ * Created on Oct 22, 2006
+ *
+ * Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@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
+ */
+
+/**
+ * API Serialized PHP output formatter
+ * @ingroup API
+ */
+class ApiFormatNone extends ApiFormatBase {
+
+       public function __construct( $main, $format ) {
+               parent::__construct( $main, $format );
+       }
+
+       public function getMimeType() {
+               return 'text/plain';
+       }
+
+       public function execute() {
+       }
+
+       public function getDescription() {
+               return 'Output nothing' . parent::getDescription();
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
index 420acd3..7d7eb14 100644 (file)
@@ -105,6 +105,7 @@ class ApiMain extends ApiBase {
                'dbgfm' => 'ApiFormatDbg',
                'dump' => 'ApiFormatDump',
                'dumpfm' => 'ApiFormatDump',
+               'none' => 'ApiFormatNone',
        );
 
        /**
@@ -135,6 +136,7 @@ class ApiMain extends ApiBase {
 
        private $mCacheMode = 'private';
        private $mCacheControl = array();
+       private $mParamsUsed = array();
 
        /**
         * Constructs an instance of ApiMain that utilizes the module and format specified by $request.
@@ -168,7 +170,7 @@ class ApiMain extends ApiBase {
                        // Remove all modules other than login
                        global $wgUser;
 
-                       if ( $this->getRequest()->getVal( 'callback' ) !== null ) {
+                       if ( $this->getVal( 'callback' ) !== null ) {
                                // JSON callback allows cross-site reads.
                                // For safety, strip user credentials.
                                wfDebug( "API: stripping user credentials for JSON callback\n" );
@@ -365,9 +367,13 @@ class ApiMain extends ApiBase {
                // clear the output buffer and print just the error information
                ob_start();
 
+               $t = microtime( true );
                try {
                        $this->executeAction();
                } catch ( Exception $e ) {
+                       // Allow extra cleanup and logging
+                       wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
+
                        // Log it
                        if ( !( $e instanceof UsageException ) ) {
                                wfDebugLog( 'exception', $e->getLogMessage() );
@@ -398,6 +404,9 @@ class ApiMain extends ApiBase {
                        $this->printResult( true );
                }
 
+               // Log the request whether or not there was an error
+               $this->logRequest( microtime( true ) - $t);
+
                // Send cache headers after any code which might generate an error, to
                // avoid sending public cache headers for errors.
                $this->sendCacheHeaders();
@@ -758,6 +767,12 @@ class ApiMain extends ApiBase {
                                $this->dieReadOnly();
                        }
                }
+
+               // Allow extensions to stop execution for arbitrary reasons.
+               $message = false;
+               if( !wfRunHooks( 'ApiCheckCanExecute', array( $module, $user, &$message ) ) ) {
+                       $this->dieUsageMsg( $message );
+               }
        }
 
        /**
@@ -807,6 +822,9 @@ class ApiMain extends ApiBase {
                $module->profileOut();
 
                if ( !$this->mInternalMode ) {
+                       // Report unused params
+                       $this->reportUnusedParams();
+
                        //append Debug information
                        MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
 
@@ -815,6 +833,88 @@ class ApiMain extends ApiBase {
                }
        }
 
+       /**
+        * Log the preceding request
+        * @param $time Time in seconds
+        */
+       protected function logRequest( $time ) {
+               $request = $this->getRequest();
+               $milliseconds = $time === null ? '?' : round( $time * 1000 );
+               $s = 'API' . 
+                       ' ' . $request->getMethod() .
+                       ' ' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
+                       ' ' . $request->getIP() .
+                       ' T=' . $milliseconds .'ms';
+               foreach ( $this->getParamsUsed() as $name ) {
+                       $value = $request->getVal( $name );
+                       if ( $value === null ) {
+                               continue;
+                       }
+                       $s .= ' ' . $name . '=';
+                       if ( strlen( $value ) > 256 ) {
+                               $encValue = $this->encodeRequestLogValue( substr( $value, 0, 256 ) );
+                               $s .= $encValue . '[...]';
+                       } else {
+                               $s .= $this->encodeRequestLogValue( $value );
+                       }
+               }
+               $s .= "\n";
+               wfDebugLog( 'api', $s, false );
+       }
+
+       /**
+        * Encode a value in a format suitable for a space-separated log line.
+        */
+       protected function encodeRequestLogValue( $s ) {
+               static $table;
+               if ( !$table ) {
+                       $chars = ';@$!*(),/:';
+                       for ( $i = 0; $i < strlen( $chars ); $i++ ) {
+                               $table[ rawurlencode( $chars[$i] ) ] = $chars[$i];
+                       }
+               }
+               return strtr( rawurlencode( $s ), $table );
+       }
+
+       /**
+        * Get the request parameters used in the course of the preceding execute() request
+        */
+       protected function getParamsUsed() {
+               return array_keys( $this->mParamsUsed );
+       }
+
+       /**
+        * Get a request value, and register the fact that it was used, for logging.
+        */
+       public function getVal( $name, $default = null ) {
+               $this->mParamsUsed[$name] = true;
+               return $this->getRequest()->getVal( $name, $default );
+       }
+
+       /**
+        * Get a boolean request value, and register the fact that the parameter
+        * was used, for logging.
+        */
+       public function getCheck( $name ) {
+               $this->mParamsUsed[$name] = true;
+               return $this->getRequest()->getCheck( $name );          
+       }
+
+       /**
+        * Report unused parameters, so the client gets a hint in case it gave us parameters we don't know,
+        * for example in case of spelling mistakes or a missing 'g' prefix for generators.
+        */
+       protected function reportUnusedParams() {
+               $paramsUsed = $this->getParamsUsed();
+               $allParams = $this->getRequest()->getValueNames();
+
+               $unusedParams = array_diff( $allParams, $paramsUsed );
+               if( count( $unusedParams ) ) {
+                       $s = count( $unusedParams ) > 1 ? 's' : '';
+                       $this->setWarning( "Unrecognized parameter$s: '" . implode( $unusedParams, "', '" ) . "'" );
+               }
+       }
+
        /**
         * Print results using the current printer
         *
index 55148b1..9d73562 100644 (file)
@@ -75,6 +75,7 @@ class ApiMove extends ApiBase {
                }
 
                // Move the page
+               $toTitleExists = $toTitle->exists();
                $retval = $fromTitle->moveTo( $toTitle, true, $params['reason'], !$params['noredirect'] );
                if ( $retval !== true ) {
                        $this->dieUsageMsg( reset( $retval ) );
@@ -84,13 +85,20 @@ class ApiMove extends ApiBase {
                if ( !$params['noredirect'] || !$user->isAllowed( 'suppressredirect' ) ) {
                        $r['redirectcreated'] = '';
                }
+               if( $toTitleExists ) {
+                       $r['moveoverredirect'] = '';
+               }
 
                // Move the talk page
                if ( $params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
+                       $toTalkExists = $toTalk->exists();
                        $retval = $fromTalk->moveTo( $toTalk, true, $params['reason'], !$params['noredirect'] );
                        if ( $retval === true ) {
                                $r['talkfrom'] = $fromTalk->getPrefixedText();
                                $r['talkto'] = $toTalk->getPrefixedText();
+                               if( $toTalkExists ) {
+                                       $r['talkmoveoverredirect'] = '';
+                               }
                        } else {
                                // We're not gonna dieUsage() on failure, since we already changed something
                                $parsed = $this->parseMsg( reset( $retval ) );
@@ -231,6 +239,7 @@ class ApiMove extends ApiBase {
                                'to' => 'string',
                                'reason' => 'string',
                                'redirectcreated' => 'boolean',
+                               'moveoverredirect' => 'boolean',
                                'talkfrom' => array(
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
@@ -239,6 +248,7 @@ class ApiMove extends ApiBase {
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
                                ),
+                               'talkmoveoverredirect' => 'boolean',
                                'talkmove-error-code' => array(
                                        ApiBase::PROP_TYPE => 'string',
                                        ApiBase::PROP_NULLABLE => true
index 5a78354..ef56274 100644 (file)
@@ -45,7 +45,7 @@ class ApiOpenSearch extends ApiBase {
                $namespaces = $params['namespace'];
                $suggest = $params['suggest'];
 
-               // MWSuggest or similar hit
+               // Some script that was loaded regardless of wgEnableOpenSearchSuggest, likely cached.
                if ( $suggest && !$wgEnableOpenSearchSuggest ) {
                        $searches = array();
                } else {
index c63ae8a..312e439 100644 (file)
  * @ingroup API
  */
 class ApiParse extends ApiBase {
-       private $section, $text, $pstText = null;
+
+       /** @var String $section */
+       private $section = null;
+
+       /** @var Content $content */
+       private $content = null;
+
+       /** @var Content $pstContent */
+       private $pstContent = null;
 
        public function __construct( $main, $action ) {
                parent::__construct( $main, $action );
@@ -44,6 +52,9 @@ class ApiParse extends ApiBase {
                $pageid = $params['pageid'];
                $oldid = $params['oldid'];
 
+               $model = $params['contentmodel'];
+               $format = $params['contentformat'];
+
                if ( !is_null( $page ) && ( !is_null( $text ) || $title != 'API' ) ) {
                        $this->dieUsage( 'The page parameter cannot be used together with the text and title parameters', 'params' );
                }
@@ -68,10 +79,6 @@ class ApiParse extends ApiBase {
                        $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
                }
 
-               $popts = ParserOptions::newFromContext( $this->getContext() );
-               $popts->setTidy( true );
-               $popts->enableLimitReport( !$params['disablepp'] );
-
                $redirValues = null;
 
                // Return result
@@ -89,23 +96,25 @@ class ApiParse extends ApiBase {
                                }
 
                                $titleObj = $rev->getTitle();
-
                                $wgTitle = $titleObj;
+                               $pageObj = WikiPage::factory( $titleObj );
+                               $popts = $pageObj->makeParserOptions( $this->getContext() );
+                               $popts->enableLimitReport( !$params['disablepp'] );
 
                                // If for some reason the "oldid" is actually the current revision, it may be cached
-                               if ( $titleObj->getLatestRevID() === intval( $oldid ) )  {
+                               if ( $rev->isCurrent() )  {
                                        // May get from/save to parser cache
-                                       $p_result = $this->getParsedSectionOrText( $titleObj, $popts, $pageid,
-                                                isset( $prop['wikitext'] ) ) ;
+                                       $p_result = $this->getParsedContent( $pageObj, $popts,
+                                               $pageid, isset( $prop['wikitext'] ) ) ;
                                } else { // This is an old revision, so get the text differently
-                                       $this->text = $rev->getText( Revision::FOR_THIS_USER, $this->getUser() );
+                                       $this->content = $rev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
 
                                        if ( $this->section !== false ) {
-                                               $this->text = $this->getSectionText( $this->text, 'r' . $rev->getId() );
+                                               $this->content = $this->getSectionContent( $this->content, 'r' . $rev->getId() );
                                        }
 
                                        // Should we save old revision parses to the parser cache?
-                                       $p_result = $wgParser->parse( $this->text, $titleObj, $popts );
+                                       $p_result = $this->content->getParserOutput( $titleObj, $popts );
                                }
                        } else { // Not $oldid, but $pageid or $page
                                if ( $params['redirects'] ) {
@@ -129,67 +138,76 @@ class ApiParse extends ApiBase {
                                        foreach ( (array)$redirValues as $r ) {
                                                $to = $r['to'];
                                        }
-                                       $titleObj = Title::newFromText( $to );
-                               } else {
-                                       if ( !is_null ( $pageid ) ) {
-                                               $reqParams['pageids'] = $pageid;
-                                               $titleObj = Title::newFromID( $pageid );
-                                       } else { // $page
-                                               $to = $page;
-                                               $titleObj = Title::newFromText( $to );
-                                       }
-                               }
-                               if ( !is_null ( $pageid ) ) {
-                                       if ( !$titleObj ) {
-                                               // Still throw nosuchpageid error if pageid was provided
-                                               $this->dieUsageMsg( array( 'nosuchpageid', $pageid ) );
-                                       }
-                               } elseif ( !$titleObj || !$titleObj->exists() ) {
-                                       $this->dieUsage( "The page you specified doesn't exist", 'missingtitle' );
+                                       $pageParams = array( 'title' => $to );
+                               } elseif ( !is_null( $pageid ) ) {
+                                       $pageParams = array( 'pageid' => $pageid );
+                               } else { // $page
+                                       $pageParams = array( 'title' => $page );
                                }
+
+                               $pageObj = $this->getTitleOrPageId( $pageParams, 'fromdb' );
+                               $titleObj = $pageObj->getTitle();
                                $wgTitle = $titleObj;
 
                                if ( isset( $prop['revid'] ) ) {
-                                       $oldid = $titleObj->getLatestRevID();
+                                       $oldid = $pageObj->getLatest();
                                }
 
+
+                               $popts = $pageObj->makeParserOptions( $this->getContext() );
+                               $popts->enableLimitReport( !$params['disablepp'] );
+
                                // Potentially cached
-                               $p_result = $this->getParsedSectionOrText( $titleObj, $popts, $pageid,
-                                        isset( $prop['wikitext'] ) ) ;
+                               $p_result = $this->getParsedContent( $pageObj, $popts, $pageid, 
+                                       isset( $prop['wikitext'] ) ) ;
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
-
-                       if ( is_null( $text ) ) {
-                               $this->dieUsage( 'The text parameter should be passed with the title parameter. Should you be using the "page" parameter instead?', 'params' );
-                       }
-                       $this->text = $text;
                        $titleObj = Title::newFromText( $title );
                        if ( !$titleObj ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                        }
                        $wgTitle = $titleObj;
+                       $pageObj = WikiPage::factory( $titleObj );
+
+                       $popts = $pageObj->makeParserOptions( $this->getContext() );
+                       $popts->enableLimitReport( !$params['disablepp'] );
+
+                       if ( is_null( $text ) ) {
+                               $this->dieUsage( 'The text parameter should be passed with the title parameter. Should you be using the "page" parameter instead?', 'params' );
+                       }
+
+                       try {
+                               $this->content = ContentHandler::makeContent( $text, $titleObj, $model, $format );
+                       } catch ( MWContentSerializationException $ex ) {
+                               $this->dieUsage( $ex->getMessage(), 'parseerror' );
+                       }
 
                        if ( $this->section !== false ) {
-                               $this->text = $this->getSectionText( $this->text, $titleObj->getText() );
+                               $this->content = $this->getSectionContent( $this->content, $titleObj->getText() );
                        }
 
                        if ( $params['pst'] || $params['onlypst'] ) {
-                               $this->pstText = $wgParser->preSaveTransform( $this->text, $titleObj, $this->getUser(), $popts );
+                               $this->pstContent = $this->content->preSaveTransform( $titleObj, $this->getUser(), $popts );
                        }
                        if ( $params['onlypst'] ) {
                                // Build a result and bail out
                                $result_array = array();
                                $result_array['text'] = array();
-                               $result->setContent( $result_array['text'], $this->pstText );
+                               $result->setContent( $result_array['text'], $this->pstContent->serialize( $format ) );
                                if ( isset( $prop['wikitext'] ) ) {
                                        $result_array['wikitext'] = array();
-                                       $result->setContent( $result_array['wikitext'], $this->text );
+                                       $result->setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
                                }
                                $result->addValue( null, $this->getModuleName(), $result_array );
                                return;
                        }
+
                        // Not cached (save or load)
-                       $p_result = $wgParser->parse( $params['pst'] ? $this->pstText : $this->text, $titleObj, $popts );
+                       if ( $params['pst'] ) {
+                               $p_result = $this->pstContent->getParserOutput( $titleObj, $popts );
+                       } else {
+                               $p_result = $this->content->getParserOutput( $titleObj, $popts );
+                       }
                }
 
                $result_array = array();
@@ -279,10 +297,10 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['wikitext'] ) ) {
                        $result_array['wikitext'] = array();
-                       $result->setContent( $result_array['wikitext'], $this->text );
-                       if ( !is_null( $this->pstText ) ) {
+                       $result->setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
+                       if ( !is_null( $this->pstContent ) ) {
                                $result_array['psttext'] = array();
-                               $result->setContent( $result_array['psttext'], $this->pstText );
+                               $result->setContent( $result_array['psttext'], $this->pstContent->serialize( $format ) );
                        }
                }
                if ( isset( $prop['properties'] ) ) {
@@ -290,8 +308,12 @@ class ApiParse extends ApiBase {
                }
 
                if ( $params['generatexml'] ) {
+                       if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
+                               $this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
+                       }
+
                        $wgParser->startExternalParse( $titleObj, $popts, OT_PREPROCESS );
-                       $dom = $wgParser->preprocessToDom( $this->text );
+                       $dom = $wgParser->preprocessToDom( $this->content->getNativeData() );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
                                $xml = $dom->saveXML();
                        } else {
@@ -323,23 +345,22 @@ class ApiParse extends ApiBase {
        }
 
        /**
-        * @param $titleObj Title
+        * @param $page WikiPage
         * @param $popts ParserOptions
         * @param $pageId Int
         * @param $getWikitext Bool
         * @return ParserOutput
         */
-       private function getParsedSectionOrText( $titleObj, $popts, $pageId = null, $getWikitext = false ) {
-               global $wgParser;
-
-               $page = WikiPage::factory( $titleObj );
+       private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
+               $this->content = $page->getContent( Revision::RAW ); //XXX: really raw?
 
                if ( $this->section !== false ) {
-                       $this->text = $this->getSectionText( $page->getRawText(), !is_null( $pageId )
-                                       ? 'page id ' . $pageId : $titleObj->getText() );
+                       $this->content = $this->getSectionContent(
+                               $this->content,
+                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText() );
 
                        // Not cached (save or load)
-                       return $wgParser->parse( $this->text, $titleObj, $popts );
+                       return $this->content->getParserOutput( $page->getTitle(), $popts );
                } else {
                        // Try the parser cache first
                        // getParserOutput will save to Parser cache if able
@@ -348,20 +369,23 @@ class ApiParse extends ApiBase {
                                $this->dieUsage( "There is no revision ID {$page->getLatest()}", 'missingrev' );
                        }
                        if ( $getWikitext ) {
-                               $this->text = $page->getRawText();
+                               $this->content = $page->getContent( Revision::RAW );
                        }
                        return $pout;
                }
        }
 
-       private function getSectionText( $text, $what ) {
-               global $wgParser;
+       private function getSectionContent( Content $content, $what ) {
                // Not cached (save or load)
-               $text = $wgParser->getSection( $text, $this->section, false );
-               if ( $text === false ) {
+               $section = $content->getSection( $this->section );
+               if ( $section === false ) {
                        $this->dieUsage( "There is no section {$this->section} in " . $what, 'nosuchsection' );
                }
-               return $text;
+               if ( $section === null ) {
+                       $this->dieUsage( "Sections are not supported by " . $what, 'nosuchsection' );
+                       $section = false;
+               }
+               return $section;
        }
 
        private function formatLangLinks( $links ) {
@@ -554,6 +578,12 @@ class ApiParse extends ApiBase {
                        'section' => null,
                        'disablepp' => false,
                        'generatexml' => false,
+                       'contentformat' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+                       ),
+                       'contentmodel' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+                       )
                );
        }
 
@@ -599,6 +629,8 @@ class ApiParse extends ApiBase {
                        'section' => 'Only retrieve the content of this section number',
                        'disablepp' => 'Disable the PP Report from the parser output',
                        'generatexml' => 'Generate XML parse tree',
+                       'contentformat' => 'Content serialization format used for the input text',
+                       'contentmodel' => 'Content model of the new content',
                );
        }
 
@@ -619,6 +651,8 @@ class ApiParse extends ApiBase {
                        array( 'code' => 'nosuchsection', 'info' => 'There is no section sectionnumber in page' ),
                        array( 'nosuchpageid' ),
                        array( 'invalidtitle', 'title' ),
+                       array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
+                       array( 'code' => 'notwikitext', 'info' => 'The requested operation is only supported on wikitext content.' ),
                ) );
        }
 
index 9fedaf1..dbfa89c 100644 (file)
@@ -86,14 +86,16 @@ class ApiPurge extends ApiBase {
 
                        if( $forceLinkUpdate ) {
                                if ( !$user->pingLimiter() ) {
-                                       global $wgParser, $wgEnableParserCache;
+                                       global $wgEnableParserCache;
 
                                        $popts = $page->makeParserOptions( 'canonical' );
-                                       $p_result = $wgParser->parse( $page->getRawText(), $title, $popts,
-                                               true, true, $page->getLatest() );
+
+                                       # Parse content; note that HTML generation is only needed if we want to cache the result.
+                                       $content = $page->getContent( Revision::RAW );
+                                       $p_result = $content->getParserOutput( $title, $page->getLatest(), $popts, $wgEnableParserCache );
 
                                        # Update the links tables
-                                       $updates = $p_result->getSecondaryDataUpdates( $title );
+                                       $updates = $content->getSecondaryDataUpdates( $title, null, true, $p_result );
                                        DataUpdate::runUpdates( $updates );
 
                                        $r['linkupdate'] = '';
index 7823e2f..64399b2 100644 (file)
@@ -47,55 +47,55 @@ class ApiQuery extends ApiBase {
        private $params, $redirects, $convertTitles, $iwUrl;
 
        private $mQueryPropModules = array(
+               'categories' => 'ApiQueryCategories',
+               'categoryinfo' => 'ApiQueryCategoryInfo',
+               'duplicatefiles' => 'ApiQueryDuplicateFiles',
+               'extlinks' => 'ApiQueryExternalLinks',
+               'images' => 'ApiQueryImages',
+               'imageinfo' => 'ApiQueryImageInfo',
                'info' => 'ApiQueryInfo',
-               'revisions' => 'ApiQueryRevisions',
                'links' => 'ApiQueryLinks',
                'iwlinks' => 'ApiQueryIWLinks',
                'langlinks' => 'ApiQueryLangLinks',
-               'images' => 'ApiQueryImages',
-               'imageinfo' => 'ApiQueryImageInfo',
+               'pageprops' => 'ApiQueryPageProps',
+               'revisions' => 'ApiQueryRevisions',
                'stashimageinfo' => 'ApiQueryStashImageInfo',
                'templates' => 'ApiQueryLinks',
-               'categories' => 'ApiQueryCategories',
-               'extlinks' => 'ApiQueryExternalLinks',
-               'categoryinfo' => 'ApiQueryCategoryInfo',
-               'duplicatefiles' => 'ApiQueryDuplicateFiles',
-               'pageprops' => 'ApiQueryPageProps',
        );
 
        private $mQueryListModules = array(
+               'allcategories' => 'ApiQueryAllCategories',
                'allimages' => 'ApiQueryAllImages',
-               'allpages' => 'ApiQueryAllPages',
                'alllinks' => 'ApiQueryAllLinks',
-               'allcategories' => 'ApiQueryAllCategories',
+               'allpages' => 'ApiQueryAllPages',
                'allusers' => 'ApiQueryAllUsers',
                'backlinks' => 'ApiQueryBacklinks',
                'blocks' => 'ApiQueryBlocks',
                'categorymembers' => 'ApiQueryCategoryMembers',
                'deletedrevs' => 'ApiQueryDeletedrevs',
                'embeddedin' => 'ApiQueryBacklinks',
+               'exturlusage' => 'ApiQueryExtLinksUsage',
                'filearchive' => 'ApiQueryFilearchive',
                'imageusage' => 'ApiQueryBacklinks',
                'iwbacklinks' => 'ApiQueryIWBacklinks',
                'langbacklinks' => 'ApiQueryLangBacklinks',
                'logevents' => 'ApiQueryLogEvents',
+               'protectedtitles' => 'ApiQueryProtectedTitles',
+               'querypage' => 'ApiQueryQueryPage',
+               'random' => 'ApiQueryRandom',
                'recentchanges' => 'ApiQueryRecentChanges',
                'search' => 'ApiQuerySearch',
                'tags' => 'ApiQueryTags',
                'usercontribs' => 'ApiQueryContributions',
+               'users' => 'ApiQueryUsers',
                'watchlist' => 'ApiQueryWatchlist',
                'watchlistraw' => 'ApiQueryWatchlistRaw',
-               'exturlusage' => 'ApiQueryExtLinksUsage',
-               'users' => 'ApiQueryUsers',
-               'random' => 'ApiQueryRandom',
-               'protectedtitles' => 'ApiQueryProtectedTitles',
-               'querypage' => 'ApiQueryQueryPage',
        );
 
        private $mQueryMetaModules = array(
+               'allmessages' => 'ApiQueryAllMessages',
                'siteinfo' => 'ApiQuerySiteinfo',
                'userinfo' => 'ApiQueryUserInfo',
-               'allmessages' => 'ApiQueryAllMessages',
        );
 
        private $mSlaveDB = null;
@@ -111,7 +111,8 @@ class ApiQuery extends ApiBase {
                parent::__construct( $main, $action );
 
                // Allow custom modules to be added in LocalSettings.php
-               global $wgAPIPropModules, $wgAPIListModules, $wgAPIMetaModules;
+               global $wgAPIPropModules, $wgAPIListModules, $wgAPIMetaModules,
+                       $wgMemc, $wgAPICacheHelpTimeout;
                self::appendUserModules( $this->mQueryPropModules, $wgAPIPropModules );
                self::appendUserModules( $this->mQueryListModules, $wgAPIListModules );
                self::appendUserModules( $this->mQueryMetaModules, $wgAPIMetaModules );
@@ -120,8 +121,22 @@ class ApiQuery extends ApiBase {
                $this->mListModuleNames = array_keys( $this->mQueryListModules );
                $this->mMetaModuleNames = array_keys( $this->mQueryMetaModules );
 
+               // Get array of query generators from cache if present
+               $key = wfMemcKey( 'apiquerygenerators', SpecialVersion::getVersion( 'nodb' ) );
+
+               if ( $wgAPICacheHelpTimeout > 0 ) {
+                       $cached = $wgMemc->get( $key );
+                       if ( $cached ) {
+                               $this->mAllowedGenerators = $cached;
+                               return;
+                       }
+               }
                $this->makeGeneratorList( $this->mQueryPropModules );
                $this->makeGeneratorList( $this->mQueryListModules );
+
+               if ( $wgAPICacheHelpTimeout > 0 ) {
+                       $wgMemc->set( $key, $this->mAllowedGenerators, $wgAPICacheHelpTimeout );
+               }
        }
 
        /**
@@ -498,8 +513,9 @@ class ApiQuery extends ApiBase {
                $exportTitles = array();
                $titles = $pageSet->getGoodTitles();
                if ( count( $titles ) ) {
+                       $user = $this->getUser();
                        foreach ( $titles as $title ) {
-                               if ( $title->userCan( 'read' ) ) {
+                               if ( $title->userCan( 'read', $user ) ) {
                                        $exportTitles[] = $title;
                                }
                        }
index 1325662..7f50cba 100644 (file)
@@ -252,7 +252,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        if ( $fld_groups ) {
                                if ( !isset( $lastUserData['groups'] ) ) {
                                        if ( $lastUserObj ) {
-                                               $lastUserData['groups'] = ApiQueryUsers::getAutoGroups( $lastUserObj );
+                                               $lastUserData['groups'] = $lastUserObj->getAutomaticGroups();
                                        } else {
                                                // This should not normally happen
                                                $lastUserData['groups'] = array();
@@ -267,7 +267,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
 
                        if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) && $lastUserObj ) {
-                               $lastUserData['implicitgroups'] = ApiQueryUsers::getAutoGroups( $lastUserObj );
+                               $lastUserData['implicitgroups'] = $lastUserObj->getAutomaticGroups();
                                $result->setIndexedTagName( $lastUserData['implicitgroups'], 'g' );
                        }
                        if ( $fld_rights ) {
index 42b398b..6081601 100644 (file)
@@ -121,8 +121,12 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                        ApiQueryBase::addTitleInfo( $vals, $title );
                                }
                                if ( $fld_url ) {
-                                       // We *could* run this through wfExpandUrl() but I think it's better to output the link verbatim, even if it's protocol-relative --Roan
-                                       $vals['url'] = $row->el_to;
+                                       $to = $row->el_to;
+                                       // expand protocol-relative urls
+                                       if( $params['expandurl'] ) {
+                                               $to = wfExpandUrl( $to, PROTO_CANONICAL );
+                                       }
+                                       $vals['url'] = $to;
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
@@ -169,7 +173,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       )
+                       ),
+                       'expandurl' => false,
                );
        }
 
@@ -218,7 +223,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        ),
                        'query' => 'Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links',
                        'namespace' => 'The page namespace(s) to enumerate.',
-                       'limit' => 'How many pages to return.'
+                       'limit' => 'How many pages to return.',
+                       'expandurl' => 'Expand protocol-relative urls with the canonical protocol',
                );
 
                if ( $wgMiserMode ) {
index 9365a9b..1449a96 100644 (file)
@@ -86,8 +86,12 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                break;
                        }
                        $entry = array();
-                       // We *could* run this through wfExpandUrl() but I think it's better to output the link verbatim, even if it's protocol-relative --Roan
-                       ApiResult::setContent( $entry, $row->el_to );
+                       $to = $row->el_to;
+                       // expand protocol-relative urls
+                       if( $params['expandurl'] ) {
+                               $to = wfExpandUrl( $to, PROTO_CANONICAL );
+                       }
+                       ApiResult::setContent( $entry, $to );
                        $fit = $this->addPageSubItem( $row->el_from, $entry );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
@@ -117,6 +121,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                ApiBase::PARAM_DFLT => '',
                        ),
                        'query' => null,
+                       'expandurl' => false,
                );
        }
 
@@ -130,6 +135,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                "Leave both this and {$p}query empty to list all external links"
                        ),
                        'query' => 'Search string without protocol. Useful for checking whether a certain page contains a certain external url',
+                       'expandurl' => 'Expand protocol-relative urls with the canonical protocol',
                );
        }
 
index d822eed..ee55fb5 100644 (file)
@@ -377,8 +377,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
                }
 
                if ( $meta ) {
+                       wfSuppressWarnings();
                        $metadata = unserialize( $file->getMetadata() );
-                       if ( $version !== 'latest' ) {
+                       wfRestoreWarnings();
+                       if ( $metadata && $version !== 'latest' ) {
                                $metadata = $file->convertMetadataVersion( $metadata, $version );
                        }
                        $vals['metadata'] = $metadata ? self::processMetaData( $metadata, $result ) : null;
index 5d4f034..b617ed0 100644 (file)
@@ -406,7 +406,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
                        $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
                }
-               if ( $this->fld_readable && $title->userCan( 'read' ) ) {
+               if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
                        $pageInfo['readable'] = '';
                }
 
index f2fd425..5d85c22 100644 (file)
@@ -263,6 +263,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
                if ( !is_null( $params ) ) {
                        $result->setIndexedTagName( $params, 'param' );
+                       $result->setIndexedTagName_recursive( $params, 'param' );
                        $vals = array_merge( $vals, $params );
                }
                return $vals;
index 7ae4f37..84c2332 100644 (file)
@@ -214,8 +214,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        'rc_title',
                        'rc_cur_id',
                        'rc_type',
-                       'rc_moved_to_ns',
-                       'rc_moved_to_title',
                        'rc_deleted'
                ) );
 
@@ -321,12 +319,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
         * @access public
         */
        public function extractRowInfo( $row ) {
-               /* If page was moved somewhere, get the title of the move target. */
-               $movedToTitle = false;
-               if ( isset( $row->rc_moved_to_title ) && $row->rc_moved_to_title !== '' ) {
-                       $movedToTitle = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title );
-               }
-
                /* Determine the title of the page that has been changed. */
                $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
 
@@ -359,9 +351,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                /* Create a new entry in the result for the title. */
                if ( $this->fld_title ) {
                        ApiQueryBase::addTitleInfo( $vals, $title );
-                       if ( $movedToTitle ) {
-                               ApiQueryBase::addTitleInfo( $vals, $movedToTitle, 'new_' );
-                       }
                }
 
                /* Add ids, such as rcid, pageid, revid, and oldid to the change's info. */
index b89a8ea..5aff1e9 100644 (file)
 class ApiQueryRevisions extends ApiQueryBase {
 
        private $diffto, $difftotext, $expandTemplates, $generateXML, $section,
-               $token, $parseContent;
+               $token, $parseContent, $contentFormat;
 
        public function __construct( $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'rv' );
        }
 
-       private $fld_ids = false, $fld_flags = false, $fld_timestamp = false, $fld_size = false,
+       private $fld_ids = false, $fld_flags = false, $fld_timestamp = false, $fld_size = false, $fld_sha1 = false,
                        $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
-                       $fld_content = false, $fld_tags = false;
+                       $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
 
        private $tokenFunctions;
 
@@ -155,10 +155,15 @@ class ApiQueryRevisions extends ApiQueryBase {
                $this->fld_parsedcomment = isset ( $prop['parsedcomment'] );
                $this->fld_size = isset ( $prop['size'] );
                $this->fld_sha1 = isset ( $prop['sha1'] );
+               $this->fld_contentmodel = isset ( $prop['contentmodel'] );
                $this->fld_userid = isset( $prop['userid'] );
                $this->fld_user = isset ( $prop['user'] );
                $this->token = $params['token'];
 
+               if ( !empty( $params['contentformat'] ) ) {
+                       $this->contentFormat = $params['contentformat'];
+               }
+
                // Possible indexes used
                $index = array();
 
@@ -191,8 +196,9 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                if ( isset( $prop['content'] ) || !is_null( $this->difftotext ) ) {
                        // For each page we will request, the user must have read rights for that page
+                       $user = $this->getUser();
                        foreach ( $pageSet->getGoodTitles() as $title ) {
-                               if ( !$title->userCan( 'read' ) ) {
+                               if ( !$title->userCan( 'read', $user ) ) {
                                        $this->dieUsage(
                                                'The current user is not allowed to read ' . $title->getPrefixedText(),
                                                'accessdenied' );
@@ -441,6 +447,10 @@ class ApiQueryRevisions extends ApiQueryBase {
                        }
                }
 
+               if ( $this->fld_contentmodel ) {
+                       $vals['contentmodel'] = $revision->getContentModel();
+               }
+
                if ( $this->fld_comment || $this->fld_parsedcomment ) {
                        if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
                                $vals['commenthidden'] = '';
@@ -479,39 +489,79 @@ class ApiQueryRevisions extends ApiQueryBase {
                        }
                }
 
-               $text = null;
+               $content = null;
                global $wgParser;
                if ( $this->fld_content || !is_null( $this->difftotext ) ) {
-                       $text = $revision->getText();
+                       $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 ) {
-                               $text = $wgParser->getSection( $text, $this->section, false );
-                               if ( $text === 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 ) ) {
+                       $text = null;
+
                        if ( $this->generateXML ) {
-                               $wgParser->startExternalParse( $title, ParserOptions::newFromContext( $this->getContext() ), OT_PREPROCESS );
-                               $dom = $wgParser->preprocessToDom( $text );
-                               if ( is_callable( array( $dom, 'saveXML' ) ) ) {
-                                       $xml = $dom->saveXML();
+                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $t = $content->getNativeData(); # note: don't set $text
+
+                                       $wgParser->startExternalParse( $title, ParserOptions::newFromContext( $this->getContext() ), OT_PREPROCESS );
+                                       $dom = $wgParser->preprocessToDom( $t );
+                                       if ( is_callable( array( $dom, 'saveXML' ) ) ) {
+                                               $xml = $dom->saveXML();
+                                       } else {
+                                               $xml = $dom->__toString();
+                                       }
+                                       $vals['parsetree'] = $xml;
                                } else {
-                                       $xml = $dom->__toString();
+                                       $this->setWarning( "Conversion to XML is supported for wikitext only, " .
+                                                                               $title->getPrefixedDBkey() .
+                                                                               " uses content model " . $content->getModel() . ")" );
                                }
-                               $vals['parsetree'] = $xml;
-
                        }
+
                        if ( $this->expandTemplates && !$this->parseContent ) {
-                               $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+                               #XXX: implement template expansion for all content types in ContentHandler?
+                               if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $text = $content->getNativeData();
+
+                                       $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+                               } else {
+                                       $this->setWarning( "Template expansion is supported for wikitext only, " .
+                                               $title->getPrefixedDBkey() .
+                                               " uses content model " . $content->getModel() . ")" );
+
+                                       $text = false;
+                               }
                        }
                        if ( $this->parseContent ) {
-                               $text = $wgParser->parse( $text, $title, ParserOptions::newFromContext( $this->getContext() ) )->getText();
+                               $po = $content->getParserOutput( $title, ParserOptions::newFromContext( $this->getContext() ) );
+                               $text = $po->getText();
+                       }
+
+                       if ( $text === null ) {
+                               $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
+
+                               if ( !$content->isSupportedFormat( $format ) ) {
+                                       $model = $content->getModel();
+                                       $name = $title->getPrefixedDBkey();
+
+                                       $this->dieUsage( "The requested format {$this->contentFormat} is not supported ".
+                                                                       "for content model $model used by $name", 'badformat' );
+                               }
+
+                               $text = $content->serialize( $format );
+                               $vals['contentformat'] = $format;
+                       }
+
+                       if ( $text !== false ) {
+                               ApiResult::setContent( $vals, $text );
                        }
-                       ApiResult::setContent( $vals, $text );
                } elseif ( $this->fld_content ) {
                        $vals['texthidden'] = '';
                }
@@ -523,11 +573,26 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $vals['diff'] = array();
                                $context = new DerivativeContext( $this->getContext() );
                                $context->setTitle( $title );
+                               $handler = $revision->getContentHandler();
+
                                if ( !is_null( $this->difftotext ) ) {
-                                       $engine = new DifferenceEngine( $context );
-                                       $engine->setText( $text, $this->difftotext );
+                                       $model = $title->getContentModel();
+
+                                       if ( $this->contentFormat
+                                               && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat ) ) {
+
+                                               $name = $title->getPrefixedDBkey();
+
+                                               $this->dieUsage( "The requested format {$this->contentFormat} is not supported for ".
+                                                                                       "content model $model used by $name", 'badformat' );
+                                       }
+
+                                       $difftocontent = ContentHandler::makeContent( $this->difftotext, $title, $model, $this->contentFormat );
+
+                                       $engine = $handler->createDifferenceEngine( $context );
+                                       $engine->setContent( $content, $difftocontent );
                                } else {
-                                       $engine = new DifferenceEngine( $context, $revision->getID(), $this->diffto );
+                                       $engine = $handler->createDifferenceEngine( $context, $revision->getID(), $this->diffto );
                                        $vals['diff']['from'] = $engine->getOldid();
                                        $vals['diff']['to'] = $engine->getNewid();
                                }
@@ -567,6 +632,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        'userid',
                                        'size',
                                        'sha1',
+                                       'contentmodel',
                                        'comment',
                                        'parsedcomment',
                                        'content',
@@ -616,6 +682,10 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'continue' => null,
                        'diffto' => null,
                        'difftotext' => null,
+                       'contentformat' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+                               ApiBase::PARAM_DFLT => null
+                       ),
                );
        }
 
@@ -631,6 +701,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ' userid         - User id of revision creator',
                                ' size           - Length (bytes) of the revision',
                                ' sha1           - SHA-1 (base 16) of the revision',
+                               ' contentmodel   - Content model id',
                                ' comment        - Comment by the user for revision',
                                ' parsedcomment  - Parsed comment by the user for the revision',
                                ' content        - Text of the revision',
@@ -655,6 +726,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'difftotext' => array( 'Text to diff each revision to. Only diffs a limited number of revisions.',
                                "Overrides {$p}diffto. If {$p}section is set, only that section will be diffed against this text" ),
                        'tag' => 'Only list revisions tagged with this tag',
+                       'contentformat' => 'Serialization format used for difftotext and expected for output of content',
                );
        }
 
@@ -732,13 +804,18 @@ class ApiQueryRevisions extends ApiQueryBase {
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(), array(
                        array( 'nosuchrevid', 'diffto' ),
-                       array( 'code' => 'revids', 'info' => 'The revids= parameter may not be used with the list options (limit, startid, endid, dirNewer, start, end).' ),
-                       array( 'code' => 'multpages', 'info' => 'titles, pageids or a generator was used to supply multiple pages, but the limit, startid, endid, dirNewer, user, excludeuser, start and end parameters may only be used on a single page.' ),
+                       array( 'code' => 'revids', 'info' => 'The revids= parameter may not be used with the list options '
+                                       . '(limit, startid, endid, dirNewer, start, end).' ),
+                       array( 'code' => 'multpages', 'info' => 'titles, pageids or a generator was used to supply multiple pages, '
+                                       . ' but the limit, startid, endid, dirNewer, user, excludeuser, '
+                                       . 'start and end parameters may only be used on a single page.' ),
                        array( 'code' => 'diffto', 'info' => 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"' ),
                        array( 'code' => 'badparams', 'info' => 'start and startid cannot be used together' ),
                        array( 'code' => 'badparams', 'info' => 'end and endid cannot be used together' ),
                        array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
                        array( 'code' => 'nosuchsection', 'info' => 'There is no section section in rID' ),
+                       array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied '
+                                                                                                       . ' to the page\'s content model' ),
                ) );
        }
 
index d211918..6690665 100644 (file)
@@ -76,14 +76,12 @@ class ApiQueryUserInfo extends ApiQueryBase {
                }
 
                if ( isset( $this->prop['groups'] ) ) {
-                       $autolist = ApiQueryUsers::getAutoGroups( $user );
-
-                       $vals['groups'] = array_merge( $autolist, $user->getGroups() );
+                       $vals['groups'] = $user->getEffectiveGroups();
                        $result->setIndexedTagName( $vals['groups'], 'g' );     // even if empty
                }
 
                if ( isset( $this->prop['implicitgroups'] ) ) {
-                       $vals['implicitgroups'] = ApiQueryUsers::getAutoGroups( $user );
+                       $vals['implicitgroups'] = $user->getAutomaticGroups();
                        $result->setIndexedTagName( $vals['implicitgroups'], 'g' );     // even if empty
                }
 
index 855e270..bf438d1 100644 (file)
@@ -138,7 +138,7 @@ class ApiQueryUsers extends ApiQueryBase {
 
                                if ( isset( $this->prop['groups'] ) ) {
                                        if ( !isset( $data[$name]['groups'] ) ) {
-                                               $data[$name]['groups'] = self::getAutoGroups( $user );
+                                               $data[$name]['groups'] = $user->getAutomaticGroups();
                                        }
 
                                        if ( !is_null( $row->ug_group ) ) {
@@ -148,7 +148,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                }
 
                                if ( isset( $this->prop['implicitgroups'] ) && !isset( $data[$name]['implicitgroups'] ) ) {
-                                       $data[$name]['implicitgroups'] =  self::getAutoGroups( $user );
+                                       $data[$name]['implicitgroups'] =  $user->getAutomaticGroups();
                                }
 
                                if ( isset( $this->prop['rights'] ) ) {
@@ -249,20 +249,15 @@ class ApiQueryUsers extends ApiQueryBase {
 
        /**
        * Gets all the groups that a user is automatically a member of (implicit groups)
+       *
+       * @deprecated since 1.20; call User::getAutomaticGroups() directly.
        * @param $user User
        * @return array
        */
        public static function getAutoGroups( $user ) {
-               // FIXME this logic is duplicated from User::getEffectiveGroups(), centralize this
-               $groups = array();
-               $groups[] = '*';
+               wfDeprecated( __METHOD__, '1.20' );
 
-               if ( !$user->isAnon() ) {
-                       $groups[] = 'user';
-                       $groups = array_merge( $groups, Autopromote::getAutopromoteGroups( $user ) );
-               }
-
-               return $groups;
+               return $user->getAutomaticGroups();
        }
 
        public function getCacheMode( $params ) {
index c996251..2ee8641 100644 (file)
@@ -61,7 +61,13 @@ class ApiUndelete extends ApiBase {
                }
 
                $pa = new PageArchive( $titleObj );
-               $retval = $pa->undelete( ( isset( $params['timestamps'] ) ? $params['timestamps'] : array() ), $params['reason'] );
+               $retval = $pa->undelete(
+                       ( isset( $params['timestamps'] ) ? $params['timestamps'] : array() ),
+                       $params['reason'],
+                       array(),
+                       false,
+                       $this->getUser()
+               );
                if ( !is_array( $retval ) ) {
                        $this->dieUsageMsg( 'cannotundelete' );
                }
index 6bfeed3..fca071a 100644 (file)
@@ -33,6 +33,7 @@ class HTMLFileCache extends FileCacheBase {
         * Construct an ObjectFileCache from a Title and an action
         * @param $title Title|string Title object or prefixed DB key string
         * @param $action string
+        * @throws MWException
         * @return HTMLFileCache
         */
        public static function newFromTitle( $title, $action ) {
index f759c02..623f545 100644 (file)
@@ -74,7 +74,7 @@ class LinkCache {
         * Get a field of a title object from cache.
         * If this link is not good, it will return NULL.
         * @param $title Title
-        * @param $field String: ('length','redirect','revision')
+        * @param $field String: ('length','redirect','revision','model')
         * @return mixed
         */
        public function getGoodLinkFieldObj( $title, $field ) {
@@ -102,14 +102,16 @@ class LinkCache {
         * @param $len Integer: text's length
         * @param $redir Integer: whether the page is a redirect
         * @param $revision Integer: latest revision's ID
+        * @param $model Integer: latest revision's content model ID
         */
-       public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false ) {
+       public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false, $model = false ) {
                $dbkey = $title->getPrefixedDbKey();
                $this->mGoodLinks[$dbkey] = intval( $id );
                $this->mGoodLinkFields[$dbkey] = array(
                        'length' => intval( $len ),
                        'redirect' => intval( $redir ),
-                       'revision' => intval( $revision ) );
+                       'revision' => intval( $revision ),
+                       'model' => intval( $model ) );
        }
 
        /**
@@ -117,7 +119,7 @@ class LinkCache {
         * @since 1.19
         * @param $title Title
         * @param $row object which has the fields page_id, page_is_redirect,
-        *  page_latest
+        *  page_latest and page_content_model
         */
        public function addGoodLinkObjFromRow( $title, $row ) {
                $dbkey = $title->getPrefixedDbKey();
@@ -126,6 +128,7 @@ class LinkCache {
                        'length' => intval( $row->page_len ),
                        'redirect' => intval( $row->page_is_redirect ),
                        'revision' => intval( $row->page_latest ),
+                       'model' => !empty( $row->page_content_model ) ? strval( $row->page_content_model ) : null,
                );
        }
 
@@ -178,7 +181,8 @@ class LinkCache {
         * @return Integer
         */
        public function addLinkObj( $nt ) {
-               global $wgAntiLockFlags;
+               global $wgAntiLockFlags, $wgContentHandlerUseDB;
+
                wfProfileIn( __METHOD__ );
 
                $key = $nt->getPrefixedDBkey();
@@ -210,8 +214,10 @@ class LinkCache {
                        $options = array();
                }
 
-               $s = $db->selectRow( 'page',
-                       array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ),
+               $f = array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
+               if ( $wgContentHandlerUseDB ) $f[] = 'page_content_model';
+
+               $s = $db->selectRow( 'page', $f,
                        array( 'page_namespace' => $nt->getNamespace(), 'page_title' => $nt->getDBkey() ),
                        __METHOD__, $options );
                # Set fields...
index 24f32d6..e061101 100644 (file)
@@ -596,7 +596,7 @@ class MessageCache {
         * @param $key String: the message cache key
         * @param $useDB Boolean: get the message from the DB, false to use only
         *               the localisation
-        * @param $langcode String: code of the language to get the message for, if
+        * @param bool|string $langcode Code of the language to get the message for, if
         *                  it is a valid code create a language for that language,
         *                  if it is a string but not a valid code then make a basic
         *                  language object, if it is a false boolean then use the
@@ -607,6 +607,7 @@ class MessageCache {
         * @param $isFullKey Boolean: specifies whether $key is a two part key
         *                   "msg/lang".
         *
+        * @throws MWException
         * @return string|bool
         */
        function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) {
@@ -766,18 +767,36 @@ class MessageCache {
                }
 
                # Try loading it from the database
-               $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+               $revision = Revision::newFromTitle(
+                       Title::makeTitle( NS_MEDIAWIKI, $title ), false, Revision::READ_LATEST
+               );
                if ( $revision ) {
-                       $message = $revision->getText();
-                       if ($message === false) {
+                       $content = $revision->getContent();
+                       if ( !$content ) {
                                // A possibly temporary loading failure.
                                wfDebugLog( 'MessageCache', __METHOD__ . ": failed to load message page text for {$title} ($code)" );
+                               $message = null; // no negative caching
                        } else {
-                               $this->mCache[$code][$title] = ' ' . $message;
-                               $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry );
+                               // XXX: Is this the right way to turn a Content object into a message?
+                               // NOTE: $content is typically either WikitextContent, JavaScriptContent or CssContent.
+                               //       MessageContent is *not* used for storing messages, it's only used for wrapping them when needed.
+                               $message = $content->getWikitextForTransclusion();
+
+                               if ( $message === false || $message === null ) {
+                                       wfDebugLog( 'MessageCache', __METHOD__ . ": message content doesn't provide wikitext "
+                                                               . "(content model: " . $content->getContentHandler() . ")" );
+
+                                       $message = false; // negative caching
+                               } else {
+                                       $this->mCache[$code][$title] = ' ' . $message;
+                                       $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry );
+                               }
                        }
                } else {
-                       $message = false;
+                       $message = false; // negative caching
+               }
+
+               if ( $message === false ) { // negative caching
                        $this->mCache[$code][$title] = '!NONEXISTENT';
                        $this->mMemc->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
                }
index 93204ea..22c621f 100644 (file)
@@ -97,6 +97,7 @@ abstract class Conf {
         * Initialize a new child class based on a configuration array
         * @param $conf Array of configuration settings, see $wgConfiguration
         *   for details
+        * @throws MWException
         * @return Conf
         */
        private static function newFromSettings( $conf ) {
@@ -109,7 +110,8 @@ abstract class Conf {
 
        /**
         * Get the singleton if we don't want a specific wiki
-        * @param $wiki String An id for a remote wiki
+        * @param bool|string $wiki An id for a remote wiki
+        * @throws MWException
         * @return Conf child
         */
        public static function load( $wiki = false ) {
diff --git a/includes/content/AbstractContent.php b/includes/content/AbstractContent.php
new file mode 100644 (file)
index 0000000..860b4c3
--- /dev/null
@@ -0,0 +1,326 @@
+<?php
+/**
+ * A content object represents page content, e.g. the text to show on a page.
+ * Content objects have no knowledge about how they relate to Wiki pages.
+ *
+ * @since 1.21
+ */
+abstract class AbstractContent implements Content {
+
+       /**
+        * Name of the content model this Content object represents.
+        * Use with CONTENT_MODEL_XXX constants
+        *
+        * @var string $model_id
+        */
+       protected $model_id;
+
+       /**
+        * @param String $model_id
+        */
+       public function __construct( $model_id = null ) {
+               $this->model_id = $model_id;
+       }
+
+       /**
+        * @see Content::getModel()
+        */
+       public function getModel() {
+               return $this->model_id;
+       }
+
+       /**
+        * Throws an MWException if $model_id is not the id of the content model
+        * supported by this Content object.
+        *
+        * @param $model_id int the model to check
+        *
+        * @throws MWException
+        */
+       protected function checkModelID( $model_id ) {
+               if ( $model_id !== $this->model_id ) {
+                       throw new MWException( "Bad content model: " .
+                               "expected {$this->model_id}  " .
+                               "but got $model_id." );
+               }
+       }
+
+       /**
+        * @see Content::getContentHandler()
+        */
+       public function getContentHandler() {
+               return ContentHandler::getForContent( $this );
+       }
+
+       /**
+        * @see Content::getDefaultFormat()
+        */
+       public function getDefaultFormat() {
+               return $this->getContentHandler()->getDefaultFormat();
+       }
+
+       /**
+        * @see Content::getSupportedFormats()
+        */
+       public function getSupportedFormats() {
+               return $this->getContentHandler()->getSupportedFormats();
+       }
+
+       /**
+        * @see Content::isSupportedFormat()
+        */
+       public function isSupportedFormat( $format ) {
+               if ( !$format ) {
+                       return true; // this means "use the default"
+               }
+
+               return $this->getContentHandler()->isSupportedFormat( $format );
+       }
+
+       /**
+        * Throws an MWException if $this->isSupportedFormat( $format ) doesn't
+        * return true.
+        *
+        * @param $format
+        * @throws MWException
+        */
+       protected function checkFormat( $format ) {
+               if ( !$this->isSupportedFormat( $format ) ) {
+                       throw new MWException( "Format $format is not supported for content model " .
+                               $this->getModel() );
+               }
+       }
+
+       /**
+        * @see Content::serialize
+        */
+       public function serialize( $format = null ) {
+               return $this->getContentHandler()->serializeContent( $this, $format );
+       }
+
+       /**
+        * @see Content::isEmpty()
+        */
+       public function isEmpty() {
+               return $this->getSize() === 0;
+       }
+
+       /**
+        * @see Content::isValid()
+        */
+       public function isValid() {
+               return true;
+       }
+
+       /**
+        * @see Content::equals()
+        */
+       public function equals( Content $that = null ) {
+               if ( is_null( $that ) ) {
+                       return false;
+               }
+
+               if ( $that === $this ) {
+                       return true;
+               }
+
+               if ( $that->getModel() !== $this->getModel() ) {
+                       return false;
+               }
+
+               return $this->getNativeData() === $that->getNativeData();
+       }
+
+
+       /**
+        * Returns a list of DataUpdate objects for recording information about this
+        * Content in some secondary data store.
+        *
+        * This default implementation calls
+        * $this->getParserOutput( $content, $title, null, null, false ),
+        * and then calls getSecondaryDataUpdates( $title, $recursive ) on the
+        * resulting ParserOutput object.
+        *
+        * Subclasses may override this to determine the secondary data updates more
+        * efficiently, preferrably without the need to generate a parser output object.
+        *
+        * @see Content::getSecondaryDataUpdates()
+        *
+        * @param $title Title The context for determining the necessary updates
+        * @param $old Content|null An optional Content object representing the
+        *    previous content, i.e. the content being replaced by this Content
+        *    object.
+        * @param $recursive boolean Whether to include recursive updates (default:
+        *    false).
+        * @param $parserOutput ParserOutput|null Optional ParserOutput object.
+        *    Provide if you have one handy, to avoid re-parsing of the content.
+        *
+        * @return Array. A list of DataUpdate objects for putting information
+        *    about this content object somewhere.
+        *
+        * @since 1.21
+        */
+       public function getSecondaryDataUpdates( Title $title,
+               Content $old = null,
+               $recursive = true, ParserOutput $parserOutput = null
+       ) {
+               if ( !$parserOutput ) {
+                       $parserOutput = $this->getParserOutput( $title, null, null, false );
+               }
+
+               return $parserOutput->getSecondaryDataUpdates( $title, $recursive );
+       }
+
+
+       /**
+        * @see Content::getRedirectChain()
+        */
+       public function getRedirectChain() {
+               global $wgMaxRedirects;
+               $title = $this->getRedirectTarget();
+               if ( is_null( $title ) ) {
+                       return null;
+               }
+               // recursive check to follow double redirects
+               $recurse = $wgMaxRedirects;
+               $titles = array( $title );
+               while ( --$recurse > 0 ) {
+                       if ( $title->isRedirect() ) {
+                               $page = WikiPage::factory( $title );
+                               $newtitle = $page->getRedirectTarget();
+                       } else {
+                               break;
+                       }
+                       // Redirects to some special pages are not permitted
+                       if ( $newtitle instanceOf Title && $newtitle->isValidRedirectTarget() ) {
+                               // The new title passes the checks, so make that our current
+                               // title so that further recursion can be checked
+                               $title = $newtitle;
+                               $titles[] = $newtitle;
+                       } else {
+                               break;
+                       }
+               }
+               return $titles;
+       }
+
+       /**
+        * @see Content::getRedirectTarget()
+        */
+       public function getRedirectTarget() {
+               return null;
+       }
+
+       /**
+        * @see Content::getUltimateRedirectTarget()
+        * @note: migrated here from Title::newFromRedirectRecurse
+        */
+       public function getUltimateRedirectTarget() {
+               $titles = $this->getRedirectChain();
+               return $titles ? array_pop( $titles ) : null;
+       }
+
+       /**
+        * @see Content::isRedirect()
+        *
+        * @since 1.21
+        *
+        * @return bool
+        */
+       public function isRedirect() {
+               return $this->getRedirectTarget() !== null;
+       }
+
+       /**
+        * @see Content::updateRedirect()
+        *
+        * This default implementation always returns $this.
+        *
+        * @since 1.21
+        *
+        * @return Content $this
+        */
+       public function updateRedirect( Title $target ) {
+               return $this;
+       }
+
+       /**
+        * @see Content::getSection()
+        */
+       public function getSection( $sectionId ) {
+               return null;
+       }
+
+       /**
+        * @see Content::replaceSection()
+        */
+       public function replaceSection( $section, Content $with, $sectionTitle = ''  ) {
+               return null;
+       }
+
+       /**
+        * @see Content::preSaveTransform()
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+               return $this;
+       }
+
+       /**
+        * @see Content::addSectionHeader()
+        */
+       public function addSectionHeader( $header ) {
+               return $this;
+       }
+
+       /**
+        * @see Content::preloadTransform()
+        */
+       public function preloadTransform( Title $title, ParserOptions $popts ) {
+               return $this;
+       }
+
+       /**
+        * @see  Content::prepareSave()
+        */
+       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
+               if ( $this->isValid() ) {
+                       return Status::newGood();
+               } else {
+                       return Status::newFatal( "invalid-content-data" );
+               }
+       }
+
+       /**
+        * @see  Content::getDeletionUpdates()
+        *
+        * @since 1.21
+        *
+        * @param $page \WikiPage the deleted page
+        * @param $parserOutput null|\ParserOutput optional parser output object
+        *    for efficient access to meta-information about the content object.
+        *    Provide if you have one handy.
+        *
+        * @return array A list of DataUpdate instances that will clean up the
+        *    database after deletion.
+        */
+       public function getDeletionUpdates( WikiPage $page,
+               ParserOutput $parserOutput = null )
+       {
+               return array(
+                       new LinksDeletionUpdate( $page ),
+               );
+       }
+
+       /**
+        * @see  Content::matchMagicWord()
+        *
+        * This default implementation always returns false. Subclasses may override this to supply matching logic.
+        *
+        * @param MagicWord $word
+        *
+        * @return bool
+        */
+       public function matchMagicWord( MagicWord $word ) {
+               return false;
+       }
+}
\ No newline at end of file
diff --git a/includes/content/Content.php b/includes/content/Content.php
new file mode 100644 (file)
index 0000000..6cb9d89
--- /dev/null
@@ -0,0 +1,466 @@
+<?php
+/**
+ * A content object represents page content, e.g. the text to show on a page.
+ * Content objects have no knowledge about how they relate to wiki pages.
+ *
+ * @since 1.21
+ */
+interface Content {
+
+       /**
+        * @since 1.21
+        *
+        * @return string A string representing the content in a way useful for
+        *   building a full text search index. If no useful representation exists,
+        *   this method returns an empty string.
+        *
+        * @todo: test that this actually works
+        * @todo: make sure this also works with LuceneSearch / WikiSearch
+        */
+       public function getTextForSearchIndex( );
+
+       /**
+        * @since 1.21
+        *
+        * @return string 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
+        *    for includable special pages.
+        * @TODO: allow transclusion into other content models than Wikitext!
+        * @TODO: used in WikiPage and MessageCache to get message text. Not so
+        *    nice. What should we use instead?!
+        */
+       public function getWikitextForTransclusion( );
+
+       /**
+        * Returns a textual representation of the content suitable for use in edit
+        * summaries and log messages.
+        *
+        * @since 1.21
+        *
+        * @param $maxlength int Maximum length of the summary text
+        * @return   The summary text
+        */
+       public function getTextForSummary( $maxlength = 250 );
+
+       /**
+        * Returns native representation of the data. Interpretation depends on
+        * the data model used, as given by getDataModel().
+        *
+        * @since 1.21
+        *
+        * @return mixed The native representation of the content. Could be a
+        *    string, a nested array structure, an object, a binary blob...
+        *    anything, really.
+        *
+        * @NOTE: Caller must be aware of content model!
+        */
+       public function getNativeData( );
+
+       /**
+        * Returns the content's nominal size in bogo-bytes.
+        *
+        * @return int
+        */
+       public function getSize( );
+
+       /**
+        * Returns the ID of the content model used by this Content object.
+        * Corresponds to the CONTENT_MODEL_XXX constants.
+        *
+        * @since 1.21
+        *
+        * @return String The model id
+        */
+       public function getModel();
+
+       /**
+        * Convenience method that returns the ContentHandler singleton for handling
+        * the content model that this Content object uses.
+        *
+        * Shorthand for ContentHandler::getForContent( $this )
+        *
+        * @since 1.21
+        *
+        * @return ContentHandler
+        */
+       public function getContentHandler();
+
+       /**
+        * Convenience method that returns the default serialization format for the
+        * content model that this Content object uses.
+        *
+        * Shorthand for $this->getContentHandler()->getDefaultFormat()
+        *
+        * @since 1.21
+        *
+        * @return String
+        */
+       public function getDefaultFormat();
+
+       /**
+        * Convenience method that returns the list of serialization formats
+        * supported for the content model that this Content object uses.
+        *
+        * Shorthand for $this->getContentHandler()->getSupportedFormats()
+        *
+        * @since 1.21
+        *
+        * @return Array of supported serialization formats
+        */
+       public function getSupportedFormats();
+
+       /**
+        * Returns true if $format is a supported serialization format for this
+        * Content object, false if it isn't.
+        *
+        * Note that this should always return true if $format is null, because null
+        * stands for the default serialization.
+        *
+        * Shorthand for $this->getContentHandler()->isSupportedFormat( $format )
+        *
+        * @since 1.21
+        *
+        * @param $format string The format to check
+        * @return bool Whether the format is supported
+        */
+       public function isSupportedFormat( $format );
+
+       /**
+        * Convenience method for serializing this Content object.
+        *
+        * Shorthand for $this->getContentHandler()->serializeContent( $this, $format )
+        *
+        * @since 1.21
+        *
+        * @param $format null|string The desired serialization format (or null for
+        *    the default format).
+        * @return string Serialized form of this Content object
+        */
+       public function serialize( $format = null );
+
+       /**
+        * Returns true if this Content object represents empty content.
+        *
+        * @since 1.21
+        *
+        * @return bool Whether this Content object is empty
+        */
+       public function isEmpty();
+
+       /**
+        * Returns whether the content is valid. This is intended for local validity
+        * checks, not considering global consistency.
+        *
+        * Content needs to be valid before it can be saved.
+        *
+        * This default implementation always returns true.
+        *
+        * @since 1.21
+        *
+        * @return boolean
+        */
+       public function isValid();
+
+       /**
+        * Returns true if this Content objects is conceptually equivalent to the
+        * given Content object.
+        *
+        * Contract:
+        *
+        * - Will return false if $that is null.
+        * - Will return true if $that === $this.
+        * - Will return false if $that->getModel() != $this->getModel().
+        * - Will return false if $that->getNativeData() is not equal to $this->getNativeData(),
+        *   where the meaning of "equal" depends on the actual data model.
+        *
+        * Implementations should be careful to make equals() transitive and reflexive:
+        *
+        * - $a->equals( $b ) <=> $b->equals( $a )
+        * - $a->equals( $b ) &&  $b->equals( $c ) ==> $a->equals( $c )
+        *
+        * @since 1.21
+        *
+        * @param $that Content The Content object to compare to
+        * @return bool True if this Content object is equal to $that, false otherwise.
+        */
+       public function equals( Content $that = null );
+
+       /**
+        * Return a copy of this Content object. The following must be true for the
+        * object returned:
+        *
+        * if $copy = $original->copy()
+        *
+        * - get_class($original) === get_class($copy)
+        * - $original->getModel() === $copy->getModel()
+        * - $original->equals( $copy )
+        *
+        * If and only if the Content object is immutable, the copy() method can and
+        * should return $this. That is, $copy === $original may be true, but only
+        * for immutable content objects.
+        *
+        * @since 1.21
+        *
+        * @return Content. A copy of this object
+        */
+       public function copy( );
+
+       /**
+        * Returns true if this content is countable as a "real" wiki page, provided
+        * that it's also in a countable location (e.g. a current revision in the
+        * main namespace).
+        *
+        * @since 1.21
+        *
+        * @param $hasLinks Bool: If it is known whether this content contains
+        *    links, provide this information here, to avoid redundant parsing to
+        *    find out.
+        * @return boolean
+        */
+       public function isCountable( $hasLinks = null );
+
+
+       /**
+        * Parse the Content object and generate a ParserOutput from the result.
+        * $result->getText() can be used to obtain the generated HTML. If no HTML
+        * is needed, $generateHtml can be set to false; in that case,
+        * $result->getText() may return null.
+        *
+        * @param $title Title The page title to use as a context for rendering
+        * @param $revId null|int The revision being rendered (optional)
+        * @param $options null|ParserOptions Any parser options
+        * @param $generateHtml Boolean Whether to generate HTML (default: true). If false,
+        *        the result of calling getText() on the ParserOutput object returned by
+        *        this method is undefined.
+        *
+        * @since 1.21
+        *
+        * @return ParserOutput
+        */
+       public function getParserOutput( Title $title,
+               $revId = null,
+               ParserOptions $options = null, $generateHtml = true );
+       # TODO: make RenderOutput and RenderOptions base classes
+
+       /**
+        * Returns a list of DataUpdate objects for recording information about this
+        * Content in some secondary data store. If the optional second argument,
+        * $old, is given, the updates may model only the changes that need to be
+        * made to replace information about the old content with information about
+        * the new content.
+        *
+        * This default implementation calls
+        * $this->getParserOutput( $content, $title, null, null, false ),
+        * and then calls getSecondaryDataUpdates( $title, $recursive ) on the
+        * resulting ParserOutput object.
+        *
+        * Subclasses may implement this to determine the necessary updates more
+        * efficiently, or make use of information about the old content.
+        *
+        * @param $title Title The context for determining the necessary updates
+        * @param $old Content|null An optional Content object representing the
+        *    previous content, i.e. the content being replaced by this Content
+        *    object.
+        * @param $recursive boolean Whether to include recursive updates (default:
+        *    false).
+        * @param $parserOutput ParserOutput|null Optional ParserOutput object.
+        *    Provide if you have one handy, to avoid re-parsing of the content.
+        *
+        * @return Array. A list of DataUpdate objects for putting information
+        *    about this content object somewhere.
+        *
+        * @since 1.21
+        */
+       public function getSecondaryDataUpdates( Title $title,
+               Content $old = null,
+               $recursive = true, ParserOutput $parserOutput = null
+       );
+
+       /**
+        * Construct the redirect destination from this content and return an
+        * array of Titles, or null if this content doesn't represent a redirect.
+        * The last element in the array is the final destination after all redirects
+        * have been resolved (up to $wgMaxRedirects times).
+        *
+        * @since 1.21
+        *
+        * @return Array of Titles, with the destination last
+        */
+       public function getRedirectChain();
+
+       /**
+        * Construct the redirect destination from this content and return a Title,
+        * or null if this content doesn't represent a redirect.
+        * This will only return the immediate redirect target, useful for
+        * the redirect table and other checks that don't need full recursion.
+        *
+        * @since 1.21
+        *
+        * @return Title: The corresponding Title
+        */
+       public function getRedirectTarget();
+
+       /**
+        * Construct the redirect destination from this content and return the
+        * Title, or null if this content doesn't represent a redirect.
+        *
+        * This will recurse down $wgMaxRedirects times or until a non-redirect
+        * target is hit in order to provide (hopefully) the Title of the final
+        * destination instead of another redirect.
+        *
+        * There is usually no need to override the default behaviour, subclasses that
+        * want to implement redirects should override getRedirectTarget().
+        *
+        * @since 1.21
+        *
+        * @return Title
+        */
+       public function getUltimateRedirectTarget();
+
+       /**
+        * Returns whether this Content represents a redirect.
+        * Shorthand for getRedirectTarget() !== null.
+        *
+        * @since 1.21
+        *
+        * @return bool
+        */
+       public function isRedirect();
+
+       /**
+        * If this Content object is a redirect, this method updates the redirect target.
+        * Otherwise, it does nothing.
+        *
+        * @since 1.21
+        *
+        * @param Title $target the new redirect target
+        *
+        * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+        */
+       public function updateRedirect( Title $target );
+
+       /**
+        * Returns the section with the given ID.
+        *
+        * @since 1.21
+        *
+        * @param $sectionId string The section's ID, given as a numeric string.
+        *    The ID "0" retrieves the section before the first heading, "1" the
+        *    text between the first heading (included) and the second heading
+        *    (excluded), etc.
+        * @return Content|Boolean|null The section, or false if no such section
+        *    exist, or null if sections are not supported.
+        */
+       public function getSection( $sectionId );
+
+       /**
+        * Replaces a section of the content and returns a Content object with the
+        * section replaced.
+        *
+        * @since 1.21
+        *
+        * @param $section Empty/null/false or a section number (0, 1, 2, T1, T2...), or "new"
+        * @param $with Content: new content of the section
+        * @param $sectionTitle String: new section's subject, only if $section is 'new'
+        * @return string Complete article text, or null if error
+        */
+       public function replaceSection( $section, Content $with, $sectionTitle = ''  );
+
+       /**
+        * Returns a Content object with pre-save transformations applied (or this
+        * object if no transformations apply).
+        *
+        * @since 1.21
+        *
+        * @param $title Title
+        * @param $user User
+        * @param $popts null|ParserOptions
+        * @return Content
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts );
+
+       /**
+        * Returns a new WikitextContent object with the given section heading
+        * prepended, if supported. The default implementation just returns this
+        * Content object unmodified, ignoring the section header.
+        *
+        * @since 1.21
+        *
+        * @param $header string
+        * @return Content
+        */
+       public function addSectionHeader( $header );
+
+       /**
+        * Returns a Content object with preload transformations applied (or this
+        * object if no transformations apply).
+        *
+        * @since 1.21
+        *
+        * @param $title Title
+        * @param $popts null|ParserOptions
+        * @return Content
+        */
+       public function preloadTransform( Title $title, ParserOptions $popts );
+
+       /**
+        * Prepare Content for saving. Called before Content is saved by WikiPage::doEditContent() and in
+        * similar places.
+        *
+        * This may be used to check the content's consistency with global state. This function should
+        * NOT write any information to the database.
+        *
+        * Note that this method will usually be called inside the same transaction bracket that will be used
+        * to save the new revision.
+        *
+        * Note that this method is called before any update to the page table is performed. This means that
+        * $page may not yet know a page ID.
+        *
+        * @param WikiPage $page The page to be saved.
+        * @param int      $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
+        * @param int      $baseRevId the ID of the current revision
+        * @param User     $user
+        *
+        * @return Status A status object indicating whether the content was successfully prepared for saving.
+        *                If the returned status indicates an error, a rollback will be performed and the
+        *                transaction aborted.
+        *
+        * @see see WikiPage::doEditContent()
+        */
+       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user );
+
+       /**
+        * Returns a list of updates to perform when this content is deleted.
+        * The necessary updates may be taken from the Content object, or depend on
+        * the current state of the database.
+        *
+        * @since 1.21
+        *
+        * @param $page \WikiPage the deleted page
+        * @param $parserOutput null|\ParserOutput optional parser output object
+        *    for efficient access to meta-information about the content object.
+        *    Provide if you have one handy.
+        *
+        * @return array A list of DataUpdate instances that will clean up the
+        *    database after deletion.
+        */
+       public function getDeletionUpdates( WikiPage $page,
+               ParserOutput $parserOutput = null );
+
+       /**
+        * Returns true if this Content object matches the given magic word.
+        *
+        * @param MagicWord $word the magic word to match
+        *
+        * @return bool whether this Content object matches the given magic word.
+        */
+       public function matchMagicWord( MagicWord $word );
+
+       # TODO: ImagePage and CategoryPage interfere with per-content action handlers
+       # TODO: nice&sane integration of GeSHi syntax highlighting
+       #   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
+       #   config to set the class which handles syntax highlighting
+       #   [12:00] <vvv> And default it to a DummyHighlighter
+}
\ No newline at end of file
diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php
new file mode 100644 (file)
index 0000000..00761cf
--- /dev/null
@@ -0,0 +1,1259 @@
+<?php
+
+/**
+ * Exception representing a failure to serialize or unserialize a content object.
+ */
+class MWContentSerializationException extends MWException {
+
+}
+
+/**
+ * A content handler knows how do deal with a specific type of content on a wiki
+ * page. Content is stored in the database in a serialized form (using a
+ * serialization format a.k.a. MIME type) and is unserialized into its native
+ * PHP representation (the content model), which is wrapped in an instance of
+ * the appropriate subclass of Content.
+ *
+ * ContentHandler instances are stateless singletons that serve, among other
+ * things, as a factory for Content objects. Generally, there is one subclass
+ * of ContentHandler and one subclass of Content for every type of content model.
+ *
+ * Some content types have a flat model, that is, their native representation
+ * is the same as their serialized form. Examples would be JavaScript and CSS
+ * code. As of now, this also applies to wikitext (MediaWiki's default content
+ * type), but wikitext content may be represented by a DOM or AST structure in
+ * the future.
+ *
+ * @since 1.21
+ */
+abstract class ContentHandler {
+
+       /**
+        * Convenience function for getting flat text from a Content object. This
+        * should only be used in the context of backwards compatibility with code
+        * that is not yet able to handle Content objects!
+        *
+        * If $content is null, this method returns the empty string.
+        *
+        * If $content is an instance of TextContent, this method returns the flat
+        * text as returned by $content->getNativeData().
+        *
+        * If $content is not a TextContent object, the behavior of this method
+        * depends on the global $wgContentHandlerTextFallback:
+        * - If $wgContentHandlerTextFallback is 'fail' and $content is not a
+        *   TextContent object, an MWException is thrown.
+        * - If $wgContentHandlerTextFallback is 'serialize' and $content is not a
+        *   TextContent object, $content->serialize() is called to get a string
+        *   form of the content.
+        * - If $wgContentHandlerTextFallback is 'ignore' and $content is not a
+        *   TextContent object, this method returns null.
+        * - otherwise, the behaviour is undefined.
+        *
+        * @since 1.21
+        * @deprecated since 1.21. Always try to use the content object.
+        *
+        * @static
+        * @param $content Content|null
+        * @return null|string the textual form of $content, if available
+        * @throws MWException if $content is not an instance of TextContent and
+        *   $wgContentHandlerTextFallback was set to 'fail'.
+        */
+       public static function getContentText( Content $content = null ) {
+               global $wgContentHandlerTextFallback;
+
+               if ( is_null( $content ) ) {
+                       return '';
+               }
+
+               if ( $content instanceof TextContent ) {
+                       return $content->getNativeData();
+               }
+
+               if ( $wgContentHandlerTextFallback == 'fail' ) {
+                       throw new MWException(
+                               "Attempt to get text from Content with model " .
+                               $content->getModel()
+                       );
+               }
+
+               if ( $wgContentHandlerTextFallback == 'serialize' ) {
+                       return $content->serialize();
+               }
+
+               return null;
+       }
+
+       /**
+        * Convenience function for creating a Content object from a given textual
+        * representation.
+        *
+        * $text will be deserialized into a Content object of the model specified
+        * by $modelId (or, if that is not given, $title->getContentModel()) using
+        * the given format.
+        *
+        * @since 1.21
+        *
+        * @static
+        *
+        * @param $text string the textual representation, will be
+        *    unserialized to create the Content object
+        * @param $title null|Title the title of the page this text belongs to.
+        *    Required if $modelId is not provided.
+        * @param $modelId null|string the model to deserialize to. If not provided,
+        *    $title->getContentModel() is used.
+        * @param $format null|string the format to use for deserialization. If not
+        *    given, the model's default format is used.
+        *
+        * @return Content a Content object representing $text
+        *
+        * @throw MWException if $model or $format is not supported or if $text can
+        *    not be unserialized using $format.
+        */
+       public static function makeContent( $text, Title $title = null,
+               $modelId = null, $format = null )
+       {
+               if ( is_null( $modelId ) ) {
+                       if ( is_null( $title ) ) {
+                               throw new MWException( "Must provide a Title object or a content model ID." );
+                       }
+
+                       $modelId = $title->getContentModel();
+               }
+
+               $handler = ContentHandler::getForModelID( $modelId );
+               return $handler->unserializeContent( $text, $format );
+       }
+
+       /**
+        * Returns the name of the default content model to be used for the page
+        * with the given title.
+        *
+        * Note: There should rarely be need to call this method directly.
+        * To determine the actual content model for a given page, use
+        * Title::getContentModel().
+        *
+        * Which model is to be used by default for the page is determined based
+        * on several factors:
+        * - The global setting $wgNamespaceContentModels specifies a content model
+        *   per namespace.
+        * - The hook ContentHandlerDefaultModelFor may be used to override the page's default
+        *   model.
+        * - Pages in NS_MEDIAWIKI and NS_USER default to the CSS or JavaScript
+        *   model if they end in .js or .css, respectively.
+        * - Pages in NS_MEDIAWIKI default to the wikitext model otherwise.
+        * - The hook TitleIsCssOrJsPage may be used to force a page to use the CSS
+        *   or JavaScript model. This is a compatibility feature. The ContentHandlerDefaultModelFor
+        *   hook should be used instead if possible.
+        * - The hook TitleIsWikitextPage may be used to force a page to use the
+        *   wikitext model. This is a compatibility feature. The ContentHandlerDefaultModelFor
+        *   hook should be used instead if possible.
+        *
+        * If none of the above applies, the wikitext model is used.
+        *
+        * Note: this is used by, and may thus not use, Title::getContentModel()
+        *
+        * @since 1.21
+        *
+        * @static
+        * @param $title Title
+        * @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.
+
+               $ns = $title->getNamespace();
+
+               $ext = false;
+               $m = null;
+               $model = null;
+
+               if ( !empty( $wgNamespaceContentModels[ $ns ] ) ) {
+                       $model = $wgNamespaceContentModels[ $ns ];
+               }
+
+               // Hook can determine default model
+               if ( !wfRunHooks( 'ContentHandlerDefaultModelFor', array( $title, &$model ) ) ) {
+                       if ( !is_null( $model ) ) {
+                               return $model;
+                       }
+               }
+
+               // Could this page contain custom CSS or JavaScript, based on the title?
+               $isCssOrJsPage = NS_MEDIAWIKI == $ns && preg_match( '!\.(css|js)$!u', $title->getText(), $m );
+               if ( $isCssOrJsPage ) {
+                       $ext = $m[1];
+               }
+
+               // Hook can force JS/CSS
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ) );
+
+               // Is this a .css subpage of a user page?
+               $isJsCssSubpage = NS_USER == $ns
+                       && !$isCssOrJsPage
+                       && preg_match( "/\\/.*\\.(js|css)$/", $title->getText(), $m );
+               if ( $isJsCssSubpage ) {
+                       $ext = $m[1];
+               }
+
+               // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
+               $isWikitext = is_null( $model ) || $model == CONTENT_MODEL_WIKITEXT;
+               $isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage;
+
+               // Hook can override $isWikitext
+               wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ) );
+
+               if ( !$isWikitext ) {
+                       switch ( $ext ) {
+                               case 'js':
+                                       return CONTENT_MODEL_JAVASCRIPT;
+                               case 'css':
+                                       return CONTENT_MODEL_CSS;
+                               default:
+                                       return is_null( $model ) ? CONTENT_MODEL_TEXT : $model;
+                       }
+               }
+
+               // We established that it must be wikitext
+
+               return CONTENT_MODEL_WIKITEXT;
+       }
+
+       /**
+        * Returns the appropriate ContentHandler singleton for the given title.
+        *
+        * @since 1.21
+        *
+        * @static
+        * @param $title Title
+        * @return ContentHandler
+        */
+       public static function getForTitle( Title $title ) {
+               $modelId = $title->getContentModel();
+               return ContentHandler::getForModelID( $modelId );
+       }
+
+       /**
+        * Returns the appropriate ContentHandler singleton for the given Content
+        * object.
+        *
+        * @since 1.21
+        *
+        * @static
+        * @param $content Content
+        * @return ContentHandler
+        */
+       public static function getForContent( Content $content ) {
+               $modelId = $content->getModel();
+               return ContentHandler::getForModelID( $modelId );
+       }
+
+       /**
+        * @var Array A Cache of ContentHandler instances by model id
+        */
+       static $handlers;
+
+       /**
+        * Returns the ContentHandler singleton for the given model ID. Use the
+        * CONTENT_MODEL_XXX constants to identify the desired content model.
+        *
+        * ContentHandler singletons are taken from the global $wgContentHandlers
+        * array. Keys in that array are model names, the values are either
+        * ContentHandler singleton objects, or strings specifying the appropriate
+        * subclass of ContentHandler.
+        *
+        * If a class name is encountered when looking up the singleton for a given
+        * model name, the class is instantiated and the class name is replaced by
+        * the resulting singleton in $wgContentHandlers.
+        *
+        * If no ContentHandler is defined for the desired $modelId, the
+        * ContentHandler may be provided by the ContentHandlerForModelID hook.
+        * If no ContentHandler can be determined, an MWException is raised.
+        *
+        * @since 1.21
+        *
+        * @static
+        * @param $modelId String The ID of the content model for which to get a
+        *    handler. Use CONTENT_MODEL_XXX constants.
+        * @return ContentHandler The ContentHandler singleton for handling the
+        *    model given by $modelId
+        * @throws MWException if no handler is known for $modelId.
+        */
+       public static function getForModelID( $modelId ) {
+               global $wgContentHandlers;
+
+               if ( isset( ContentHandler::$handlers[$modelId] ) ) {
+                       return ContentHandler::$handlers[$modelId];
+               }
+
+               if ( empty( $wgContentHandlers[$modelId] ) ) {
+                       $handler = null;
+
+                       wfRunHooks( 'ContentHandlerForModelID', array( $modelId, &$handler ) );
+
+                       if ( $handler === null ) {
+                               throw new MWException( "No handler for model #$modelId registered in \$wgContentHandlers" );
+                       }
+
+                       if ( !( $handler instanceof ContentHandler ) ) {
+                               throw new MWException( "ContentHandlerForModelID must supply a ContentHandler instance" );
+                       }
+               } else {
+                       $class = $wgContentHandlers[$modelId];
+                       $handler = new $class( $modelId );
+
+                       if ( !( $handler instanceof ContentHandler ) ) {
+                               throw new MWException( "$class from \$wgContentHandlers is not compatible with ContentHandler" );
+                       }
+               }
+
+               ContentHandler::$handlers[$modelId] = $handler;
+               return ContentHandler::$handlers[$modelId];
+       }
+
+       /**
+        * Returns the localized name for a given content model.
+        *
+        * Model names are localized using system messages. Message keys
+        * have the form content-model-$name, where $name is getContentModelName( $id ).
+        *
+        * @static
+        * @param $name String The content model ID, as given by a CONTENT_MODEL_XXX
+        *    constant or returned by Revision::getContentModel().
+        *
+        * @return string The content format's localized name.
+        * @throws MWException if the model id isn't known.
+        */
+       public static function getLocalizedName( $name ) {
+               $key = "content-model-$name";
+
+               $msg = wfMessage( $key );
+
+               return $msg->exists() ? $msg->plain() : $name;
+       }
+
+       public static function getContentModels() {
+               global $wgContentHandlers;
+
+               return array_keys( $wgContentHandlers );
+       }
+
+       public static function getAllContentFormats() {
+               global $wgContentHandlers;
+
+               $formats = array();
+
+               foreach ( $wgContentHandlers as $model => $class ) {
+                       $handler = ContentHandler::getForModelID( $model );
+                       $formats = array_merge( $formats, $handler->getSupportedFormats() );
+               }
+
+               $formats = array_unique( $formats );
+               return $formats;
+       }
+
+       // ------------------------------------------------------------------------
+
+       protected $mModelID;
+       protected $mSupportedFormats;
+
+       /**
+        * Constructor, initializing the ContentHandler instance with its model ID
+        * and a list of supported formats. Values for the parameters are typically
+        * provided as literals by subclass's constructors.
+        *
+        * @param $modelId String (use CONTENT_MODEL_XXX constants).
+        * @param $formats array List for supported serialization formats
+        *    (typically as MIME types)
+        */
+       public function __construct( $modelId, $formats ) {
+               $this->mModelID = $modelId;
+               $this->mSupportedFormats = $formats;
+
+               $this->mModelName = preg_replace( '/(Content)?Handler$/', '', get_class( $this ) );
+               $this->mModelName = preg_replace( '/[_\\\\]/', '', $this->mModelName );
+               $this->mModelName = strtolower( $this->mModelName );
+       }
+
+       /**
+        * Serializes a Content object of the type supported by this ContentHandler.
+        *
+        * @since 1.21
+        *
+        * @abstract
+        * @param $content Content The Content object to serialize
+        * @param $format null|String The desired serialization format
+        * @return string Serialized form of the content
+        */
+       public abstract function serializeContent( Content $content, $format = null );
+
+       /**
+        * Unserializes a Content object of the type supported by this ContentHandler.
+        *
+        * @since 1.21
+        *
+        * @abstract
+        * @param $blob string serialized form of the content
+        * @param $format null|String the format used for serialization
+        * @return Content the Content object created by deserializing $blob
+        */
+       public abstract function unserializeContent( $blob, $format = null );
+
+       /**
+        * Creates an empty Content object of the type supported by this
+        * ContentHandler.
+        *
+        * @since 1.21
+        *
+        * @return Content
+        */
+       public abstract function makeEmptyContent();
+
+       /**
+        * Creates a new Content object that acts as a redirect to the given page,
+        * or null of redirects are not supported by this content model.
+        *
+        * This default implementation always returns null. Subclasses supporting redirects
+        * must override this method.
+        *
+        * @since 1.21
+        *
+        * @param Title $destination the page to redirect to.
+        *
+        * @return Content
+        */
+       public function makeRedirectContent( Title $destination ) {
+               return null;
+       }
+
+       /**
+        * Returns the model id that identifies the content model this
+        * ContentHandler can handle. Use with the CONTENT_MODEL_XXX constants.
+        *
+        * @since 1.21
+        *
+        * @return String The model ID
+        */
+       public function getModelID() {
+               return $this->mModelID;
+       }
+
+       /**
+        * Throws an MWException if $model_id is not the ID of the content model
+        * supported by this ContentHandler.
+        *
+        * @since 1.21
+        *
+        * @param String $model_id The model to check
+        *
+        * @throws MWException
+        */
+       protected function checkModelID( $model_id ) {
+               if ( $model_id !== $this->mModelID ) {
+                       throw new MWException( "Bad content model: " .
+                               "expected {$this->mModelID} " .
+                               "but got $model_id." );
+               }
+       }
+
+       /**
+        * Returns a list of serialization formats supported by the
+        * serializeContent() and unserializeContent() methods of this
+        * ContentHandler.
+        *
+        * @since 1.21
+        *
+        * @return array of serialization formats as MIME type like strings
+        */
+       public function getSupportedFormats() {
+               return $this->mSupportedFormats;
+       }
+
+       /**
+        * The format used for serialization/deserialization by default by this
+        * ContentHandler.
+        *
+        * This default implementation will return the first element of the array
+        * of formats that was passed to the constructor.
+        *
+        * @since 1.21
+        *
+        * @return string the name of the default serialization format as a MIME type
+        */
+       public function getDefaultFormat() {
+               return $this->mSupportedFormats[0];
+       }
+
+       /**
+        * Returns true if $format is a serialization format supported by this
+        * ContentHandler, and false otherwise.
+        *
+        * Note that if $format is null, this method always returns true, because
+        * null means "use the default format".
+        *
+        * @since 1.21
+        *
+        * @param $format string the serialization format to check
+        * @return bool
+        */
+       public function isSupportedFormat( $format ) {
+
+               if ( !$format ) {
+                       return true; // this means "use the default"
+               }
+
+               return in_array( $format, $this->mSupportedFormats );
+       }
+
+       /**
+        * Throws an MWException if isSupportedFormat( $format ) is not true.
+        * Convenient for checking whether a format provided as a parameter is
+        * actually supported.
+        *
+        * @param $format string the serialization format to check
+        *
+        * @throws MWException
+        */
+       protected function checkFormat( $format ) {
+               if ( !$this->isSupportedFormat( $format ) ) {
+                       throw new MWException(
+                               "Format $format is not supported for content model "
+                               . $this->getModelID()
+                       );
+               }
+       }
+
+       /**
+        * Returns overrides for action handlers.
+        * Classes listed here will be used instead of the default one when
+        * (and only when) $wgActions[$action] === true. This allows subclasses
+        * to override the default action handlers.
+        *
+        * @since 1.21
+        *
+        * @return Array
+        */
+       public function getActionOverrides() {
+               return array();
+       }
+
+       /**
+        * Factory for creating an appropriate DifferenceEngine for this content model.
+        *
+        * @since 1.21
+        *
+        * @param $context IContextSource context to use, anything else will be
+        *    ignored
+        * @param $old Integer Old ID we want to show and diff with.
+        * @param $new int|string String either 'prev' or 'next'.
+        * @param $rcid Integer ??? FIXME (default 0)
+        * @param $refreshCache boolean If set, refreshes the diff cache
+        * @param $unhide boolean If set, allow viewing deleted revs
+        *
+        * @return DifferenceEngine
+        */
+       public function createDifferenceEngine( IContextSource $context,
+               $old = 0, $new = 0,
+               $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 );
+       }
+
+       /**
+        * Get the language in which the content of the given page is written.
+        *
+        * This default implementation just returns $wgContLang (except for pages in the MediaWiki namespace)
+        *
+        * Note that the pages language is not cacheable, since it may in some cases depend on user settings.
+        *
+        * Also note that the page language may or may not depend on the actual content of the page,
+        * that is, this method may load the content in order to determine the language.
+        *
+        * @since 1.21
+        *
+        * @param Title        $title the page to determine the language for.
+        * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
+        *
+        * @return Language the page's language
+        */
+       public function getPageLanguage( Title $title, Content $content = null ) {
+               global $wgContLang;
+
+               if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+                       // Parse mediawiki messages with correct target language
+                       list( /* $unused */, $lang ) = MessageCache::singleton()->figureMessage( $title->getText() );
+                       return wfGetLangObj( $lang );
+               }
+
+               return $wgContLang;
+       }
+
+       /**
+        * Get the language in which the content of this page is written when
+        * viewed by user. Defaults to $this->getPageLanguage(), but if the user
+        * specified a preferred variant, the variant will be used.
+        *
+        * This default implementation just returns $this->getPageLanguage( $title, $content ) unless
+        * the user specified a preferred variant.
+        *
+        * Note that the pages view language is not cacheable, since it depends on user settings.
+        *
+        * Also note that the page language may or may not depend on the actual content of the page,
+        * that is, this method may load the content in order to determine the language.
+        *
+        * @since 1.21
+        *
+        * @param Title        $title the page to determine the language for.
+        * @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
+        *
+        * @return Language the page's language for viewing
+        */
+       public function getPageViewLanguage( Title $title, Content $content = null ) {
+               $pageLang = $this->getPageLanguage( $title, $content );
+
+               if ( $title->getNamespace() !== NS_MEDIAWIKI ) {
+                       // If the user chooses a variant, the content is actually
+                       // in a language whose code is the variant code.
+                       $variant = $pageLang->getPreferredVariant();
+                       if ( $pageLang->getCode() !== $variant ) {
+                               $pageLang = Language::factory( $variant );
+                       }
+               }
+
+               return $pageLang;
+       }
+
+       /**
+        * Determines whether the content type handled by this ContentHandler
+        * can be used on the given page.
+        *
+        * This default implementation always returns true.
+        * Subclasses may override this to restrict the use of this content model to specific locations,
+        * typically based on the namespace or some other aspect of the title, such as a special suffix
+        * (e.g. ".svg" for SVG content).
+        *
+        * @param Title $title the page's title.
+        *
+        * @return bool true if content of this kind can be used on the given page, false otherwise.
+        */
+       public function canBeUsedOn( Title $title ) {
+               return true;
+       }
+
+       /**
+        * Returns the name of the diff engine to use.
+        *
+        * @since 1.21
+        *
+        * @return string
+        */
+       protected function getDiffEngineClass() {
+               return 'DifferenceEngine';
+       }
+
+       /**
+        * Attempts to merge differences between three versions.
+        * Returns a new Content object for a clean merge and false for failure or
+        * a conflict.
+        *
+        * This default implementation always returns false.
+        *
+        * @since 1.21
+        *
+        * @param $oldContent Content|string  String
+        * @param $myContent Content|string   String
+        * @param $yourContent Content|string String
+        *
+        * @return Content|Bool
+        */
+       public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
+               return false;
+       }
+
+       /**
+        * Return an applicable auto-summary if one exists for the given edit.
+        *
+        * @since 1.21
+        *
+        * @param $oldContent Content|null: the previous text of the page.
+        * @param $newContent Content|null: The submitted text of the page.
+        * @param $flags int Bit mask: a bit mask of flags submitted for the edit.
+        *
+        * @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
+
+               /**
+                * @var $ot Title
+                * @var $rt Title
+                */
+
+               $ot = !is_null( $oldContent ) ? $oldContent->getRedirectTarget() : null;
+               $rt = !is_null( $newContent ) ? $newContent->getRedirectTarget() : null;
+
+               if ( is_object( $rt ) ) {
+                       if ( !is_object( $ot )
+                               || !$rt->equals( $ot )
+                               || $ot->getFragment() != $rt->getFragment() )
+                       {
+                               $truncatedtext = $newContent->getTextForSummary(
+                                       250
+                                               - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
+                                               - strlen( $rt->getFullText() ) );
+
+                               return wfMessage( 'autoredircomment', $rt->getFullText() )
+                                               ->rawParams( $truncatedtext )->inContentLanguage()->text();
+                       }
+               }
+
+               // New page auto-summaries
+               if ( $flags & EDIT_NEW && $newContent->getSize() > 0 ) {
+                       // If they're making a new article, give its text, truncated, in
+                       // the summary.
+
+                       $truncatedtext = $newContent->getTextForSummary(
+                               200 - strlen( wfMessage( 'autosumm-new' )->inContentLanguage()->text() ) );
+
+                       return wfMessage( 'autosumm-new' )->rawParams( $truncatedtext )
+                                       ->inContentLanguage()->text();
+               }
+
+               // Blanking auto-summaries
+               if ( !empty( $oldContent ) && $oldContent->getSize() > 0 && $newContent->getSize() == 0 ) {
+                       return wfMessage( 'autosumm-blank' )->inContentLanguage()->text();
+               } elseif ( !empty( $oldContent )
+                       && $oldContent->getSize() > 10 * $newContent->getSize()
+                       && $newContent->getSize() < 500 )
+               {
+                       // Removing more than 90% of the article
+
+                       $truncatedtext = $newContent->getTextForSummary(
+                               200 - strlen( wfMessage( 'autosumm-replace' )->inContentLanguage()->text() ) );
+
+                       return wfMessage( 'autosumm-replace' )->rawParams( $truncatedtext )
+                                       ->inContentLanguage()->text();
+               }
+
+               // If we reach this point, there's no applicable auto-summary for our
+               // case, so our auto-summary is empty.
+               return '';
+       }
+
+       /**
+        * Auto-generates a deletion reason
+        *
+        * @since 1.21
+        *
+        * @param $title Title: the page's title
+        * @param &$hasHistory Boolean: whether the page has a history
+        * @return mixed String containing deletion reason or empty string, or
+        *    boolean false if no revision occurred
+        *
+        * @XXX &$hasHistory is extremely ugly, it's here because
+        * WikiPage::getAutoDeleteReason() and Article::getReason()
+        * have it / want it.
+        */
+       public function getAutoDeleteReason( Title $title, &$hasHistory ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               // Get the last revision
+               $rev = Revision::newFromTitle( $title );
+
+               if ( is_null( $rev ) ) {
+                       return false;
+               }
+
+               // Get the article's contents
+               $content = $rev->getContent();
+               $blank = false;
+
+               $this->checkModelID( $content->getModel() );
+
+               // If the page is blank, use the text from the previous revision,
+               // which can only be blank if there's a move/import/protect dummy
+               // revision involved
+               if ( $content->getSize() == 0 ) {
+                       $prev = $rev->getPrevious();
+
+                       if ( $prev )    {
+                               $content = $prev->getContent();
+                               $blank = true;
+                       }
+               }
+
+               // Find out if there was only one contributor
+               // Only scan the last 20 revisions
+               $res = $dbw->select( 'revision', 'rev_user_text',
+                       array(
+                               'rev_page' => $title->getArticleID(),
+                               $dbw->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0'
+                       ),
+                       __METHOD__,
+                       array( 'LIMIT' => 20 )
+               );
+
+               if ( $res === false ) {
+                       // This page has no revisions, which is very weird
+                       return false;
+               }
+
+               $hasHistory = ( $res->numRows() > 1 );
+               $row = $dbw->fetchObject( $res );
+
+               if ( $row ) { // $row is false if the only contributor is hidden
+                       $onlyAuthor = $row->rev_user_text;
+                       // Try to find a second contributor
+                       foreach ( $res as $row ) {
+                               if ( $row->rev_user_text != $onlyAuthor ) { // Bug 22999
+                                       $onlyAuthor = false;
+                                       break;
+                               }
+                       }
+               } else {
+                       $onlyAuthor = false;
+               }
+
+               // Generate the summary with a '$1' placeholder
+               if ( $blank ) {
+                       // The current revision is blank and the one before is also
+                       // blank. It's just not our lucky day
+                       $reason = wfMessage( 'exbeforeblank', '$1' )->inContentLanguage()->text();
+               } else {
+                       if ( $onlyAuthor ) {
+                               $reason = wfMessage(
+                                       'excontentauthor',
+                                       '$1',
+                                       $onlyAuthor
+                               )->inContentLanguage()->text();
+                       } else {
+                               $reason = wfMessage( 'excontent', '$1' )->inContentLanguage()->text();
+                       }
+               }
+
+               if ( $reason == '-' ) {
+                       // Allow these UI messages to be blanked out cleanly
+                       return '';
+               }
+
+               // Max content length = max comment length - length of the comment (excl. $1)
+               $text = $content->getTextForSummary( 255 - ( strlen( $reason ) - 2 ) );
+
+               // Now replace the '$1' placeholder
+               $reason = str_replace( '$1', $text, $reason );
+
+               return $reason;
+       }
+
+       /**
+        * Get the Content object that needs to be saved in order to undo all revisions
+        * between $undo and $undoafter. Revisions must belong to the same page,
+        * must exist and must not be deleted.
+        *
+        * @since 1.21
+        *
+        * @param $current Revision The current text
+        * @param $undo Revision The revision to undo
+        * @param $undoafter Revision Must be an earlier revision than $undo
+        *
+        * @return mixed String on success, false on failure
+        */
+       public function getUndoContent( Revision $current, Revision $undo, Revision $undoafter ) {
+               $cur_content = $current->getContent();
+
+               if ( empty( $cur_content ) ) {
+                       return false; // no page
+               }
+
+               $undo_content = $undo->getContent();
+               $undoafter_content = $undoafter->getContent();
+
+               $this->checkModelID( $cur_content->getModel() );
+               $this->checkModelID( $undo_content->getModel() );
+               $this->checkModelID( $undoafter_content->getModel() );
+
+               if ( $cur_content->equals( $undo_content ) ) {
+                       // No use doing a merge if it's just a straight revert.
+                       return $undoafter_content;
+               }
+
+               $undone_content = $this->merge3( $undo_content, $undoafter_content, $cur_content );
+
+               return $undone_content;
+       }
+
+       /**
+        * Get parser options suitable for rendering the primary article wikitext
+        *
+        * @param IContextSource|User|string $context One of the following:
+        *        - IContextSource: Use the User and the Language of the provided
+        *                                            context
+        *        - User: Use the provided User object and $wgLang for the language,
+        *                                            so use an IContextSource object if possible.
+        *        - 'canonical': Canonical options (anonymous user with default
+        *                                            preferences and content language).
+        *
+        * @param IContextSource|User|string $context
+        *
+        * @throws MWException
+        * @return ParserOptions
+        */
+       public function makeParserOptions( $context ) {
+               global $wgContLang;
+
+               if ( $context instanceof IContextSource ) {
+                       $options = ParserOptions::newFromContext( $context );
+               } elseif ( $context instanceof User ) { // settings per user (even anons)
+                       $options = ParserOptions::newFromUser( $context );
+               } elseif ( $context === 'canonical' ) { // canonical settings
+                       $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+               } else {
+                       throw new MWException( "Bad context for parser options: $context" );
+               }
+
+               $options->enableLimitReport(); // show inclusion/loop reports
+               $options->setTidy( true ); // fix bad HTML
+
+               return $options;
+       }
+
+       /**
+        * Returns true for content models that support caching using the
+        * ParserCache mechanism. See WikiPage::isParserCacheUsed().
+        *
+        * @since 1.21
+        *
+        * @return bool
+        */
+       public function isParserCacheSupported() {
+               return false;
+       }
+
+       /**
+        * Returns true if this content model supports sections.
+        *
+        * This default implementation returns false.
+        *
+        * @return boolean whether sections are supported.
+        */
+       public function supportsSections() {
+               return false;
+       }
+
+       /**
+        * Call a legacy hook that uses text instead of Content objects.
+        * Will log a warning when a matching hook function is registered.
+        * If the textual representation of the content is changed by the
+        * hook function, a new Content object is constructed from the new
+        * text.
+        *
+        * @param $event String: event name
+        * @param $args Array: parameters passed to hook functions
+        * @param $warn bool: whether to log a warning (default: true). Should generally be true,
+        *                    may be set to false for testing.
+        *
+        * @return Boolean True if no handler aborted the hook
+        */
+       public static function runLegacyHooks( $event, $args = array(), $warn = true ) {
+               global $wgHooks; //@todo: once I39bd5de2 is merged, direct access to $wgHooks is no longer needed.
+
+               if ( !Hooks::isRegistered( $event ) && empty( $wgHooks[$event] ) ) {
+                       return true; // nothing to do here
+               }
+
+               if ( $warn ) {
+                       // Log information about which handlers are registered for the legacy hook,
+                       // so we can find and fix them.
+
+                       $handlers = Hooks::getHandlers( $event );
+                       $handlerInfo = array();
+
+                       wfSuppressWarnings();
+
+                       foreach ( $handlers as $handler ) {
+                               $info = '';
+
+                               if ( is_array( $handler ) ) {
+                                       if ( is_object( $handler[0] ) ) {
+                                               $info = get_class( $handler[0] );
+                                       } else {
+                                               $info = $handler[0];
+                                       }
+
+                                       if ( isset( $handler[1] ) ) {
+                                               $info .= '::' . $handler[1];
+                                       }
+                               } else if ( is_object( $handler ) ) {
+                                       $info = get_class( $handler[0] );
+                                       $info .= '::on' . $event;
+                               } else {
+                                       $info = $handler;
+                               }
+
+                               $handlerInfo[] = $info;
+                       }
+
+                       wfRestoreWarnings();
+
+                       wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " . implode(', ', $handlerInfo), 2 );
+               }
+
+               // convert Content objects to text
+               $contentObjects = array();
+               $contentTexts = array();
+
+               foreach ( $args as $k => $v ) {
+                       if ( $v instanceof Content ) {
+                               /* @var Content $v */
+
+                               $contentObjects[$k] = $v;
+
+                               $v = $v->serialize();
+                               $contentTexts[ $k ] = $v;
+                               $args[ $k ] = $v;
+                       }
+               }
+
+               // call the hook functions
+               $ok = wfRunHooks( $event, $args );
+
+               // see if the hook changed the text
+               foreach ( $contentTexts as $k => $orig ) {
+                       /* @var Content $content */
+
+                       $modified = $args[ $k ];
+                       $content = $contentObjects[$k];
+
+                       if ( $modified !== $orig ) {
+                               // text was changed, create updated Content object
+                               $content = $content->getContentHandler()->unserializeContent( $modified );
+                       }
+
+                       $args[ $k ] = $content;
+               }
+
+               return $ok;
+       }
+}
+
+/**
+ * @since 1.21
+ */
+abstract class TextContentHandler extends ContentHandler {
+
+       public function __construct( $modelId, $formats ) {
+               parent::__construct( $modelId, $formats );
+       }
+
+       /**
+        * Returns the content's text as-is.
+        *
+        * @param $content Content
+        * @param $format string|null
+        * @return mixed
+        */
+       public function serializeContent( Content $content, $format = null ) {
+               $this->checkFormat( $format );
+               return $content->getNativeData();
+       }
+
+       /**
+        * Attempts to merge differences between three versions. Returns a new
+        * Content object for a clean merge and false for failure or a conflict.
+        *
+        * All three Content objects passed as parameters must have the same
+        * content model.
+        *
+        * This text-based implementation uses wfMerge().
+        *
+        * @param $oldContent \Content|string  String
+        * @param $myContent \Content|string   String
+        * @param $yourContent \Content|string String
+        *
+        * @return Content|Bool
+        */
+       public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
+               $this->checkModelID( $oldContent->getModel() );
+               $this->checkModelID( $myContent->getModel() );
+               $this->checkModelID( $yourContent->getModel() );
+
+               $format = $this->getDefaultFormat();
+
+               $old = $this->serializeContent( $oldContent, $format );
+               $mine = $this->serializeContent( $myContent, $format );
+               $yours = $this->serializeContent( $yourContent, $format );
+
+               $ok = wfMerge( $old, $mine, $yours, $result );
+
+               if ( !$ok ) {
+                       return false;
+               }
+
+               if ( !$result ) {
+                       return $this->makeEmptyContent();
+               }
+
+               $mergedContent = $this->unserializeContent( $result, $format );
+               return $mergedContent;
+       }
+
+}
+
+/**
+ * @since 1.21
+ */
+class WikitextContentHandler extends TextContentHandler {
+
+       public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
+               parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
+       }
+
+       public function unserializeContent( $text, $format = null ) {
+               $this->checkFormat( $format );
+
+               return new WikitextContent( $text );
+       }
+
+       /**
+        * @see ContentHandler::makeEmptyContent
+        *
+        * @return Content
+        */
+       public function makeEmptyContent() {
+               return new WikitextContent( '' );
+       }
+
+
+       /**
+        * Returns a WikitextContent object representing a redirect to the given destination page.
+        *
+        * @see ContentHandler::makeRedirectContent
+        *
+        * @param Title $destination the page to redirect to.
+        *
+        * @return Content
+        */
+       public function makeRedirectContent( Title $destination ) {
+               $mwRedir = MagicWord::get( 'redirect' );
+               $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . "]]\n";
+
+               return new WikitextContent( $redirectText );
+       }
+
+       /**
+        * Returns true because wikitext supports sections.
+        *
+        * @return boolean whether sections are supported.
+        */
+       public function supportsSections() {
+               return true;
+       }
+
+       /**
+        * Returns true, because wikitext supports caching using the
+        * ParserCache mechanism.
+        *
+        * @since 1.21
+        * @return bool
+        */
+       public function isParserCacheSupported() {
+               return true;
+       }
+}
+
+# XXX: make ScriptContentHandler base class, do highlighting stuff there?
+
+/**
+ * @since 1.21
+ */
+class JavaScriptContentHandler extends TextContentHandler {
+
+       public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
+               parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
+       }
+
+       public function unserializeContent( $text, $format = null ) {
+               $this->checkFormat( $format );
+
+               return new JavaScriptContent( $text );
+       }
+
+       public function makeEmptyContent() {
+               return new JavaScriptContent( '' );
+       }
+
+       /**
+        * Returns the english language, because JS is english, and should be handled as such.
+        *
+        * @return Language wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageLanguage()
+        */
+       public function getPageLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+
+       /**
+        * Returns the english language, because CSS is english, and should be handled as such.
+        *
+        * @return Language wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageViewLanguage()
+        */
+       public function getPageViewLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+}
+
+/**
+ * @since 1.21
+ */
+class CssContentHandler extends TextContentHandler {
+
+       public function __construct( $modelId = CONTENT_MODEL_CSS ) {
+               parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
+       }
+
+       public function unserializeContent( $text, $format = null ) {
+               $this->checkFormat( $format );
+
+               return new CssContent( $text );
+       }
+
+       public function makeEmptyContent() {
+               return new CssContent( '' );
+       }
+
+       /**
+        * Returns the english language, because CSS is english, and should be handled as such.
+        *
+        * @return Language wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageLanguage()
+        */
+       public function getPageLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+
+       /**
+        * Returns the english language, because CSS is english, and should be handled as such.
+        *
+        * @return Language wfGetLangObj( 'en' )
+        *
+        * @see ContentHandler::getPageViewLanguage()
+        */
+       public function getPageViewLanguage( Title $title, Content $content = null ) {
+               return wfGetLangObj( 'en' );
+       }
+}
diff --git a/includes/content/CssContent.php b/includes/content/CssContent.php
new file mode 100644 (file)
index 0000000..c881380
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @since 1.21
+ */
+class CssContent extends TextContent {
+       public function __construct( $text ) {
+               parent::__construct( $text, CONTENT_MODEL_CSS );
+       }
+
+       /**
+        * Returns a Content object with pre-save transformations applied using
+        * Parser::preSaveTransform().
+        *
+        * @param $title Title
+        * @param $user User
+        * @param $popts ParserOptions
+        * @return Content
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+               global $wgParser;
+               // @todo: make pre-save transformation optional for script pages
+
+               $text = $this->getNativeData();
+               $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
+
+               return new CssContent( $pst );
+       }
+
+
+       protected function getHtml( ) {
+               $html = "";
+               $html .= "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n";
+               $html .= $this->getHighlightHtml( );
+               $html .= "\n</pre>\n";
+
+               return $html;
+       }
+}
diff --git a/includes/content/JavaScriptContent.php b/includes/content/JavaScriptContent.php
new file mode 100644 (file)
index 0000000..ef0a4ac
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @since 1.21
+ */
+class JavaScriptContent extends TextContent {
+       public function __construct( $text ) {
+               parent::__construct( $text, CONTENT_MODEL_JAVASCRIPT );
+       }
+
+       /**
+        * Returns a Content object with pre-save transformations applied using
+        * Parser::preSaveTransform().
+        *
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $popts
+        * @return Content
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+               global $wgParser;
+               // @todo: make pre-save transformation optional for script pages
+               // See bug #32858
+
+               $text = $this->getNativeData();
+               $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
+
+               return new JavaScriptContent( $pst );
+       }
+
+
+       protected function getHtml( ) {
+               $html = "";
+               $html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
+               $html .= $this->getHighlightHtml( );
+               $html .= "\n</pre>\n";
+
+               return $html;
+       }
+}
\ No newline at end of file
diff --git a/includes/content/MessageContent.php b/includes/content/MessageContent.php
new file mode 100644 (file)
index 0000000..0e231d8
--- /dev/null
@@ -0,0 +1,132 @@
+<?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.
+ *
+ * @since 1.21
+ */
+class MessageContent extends AbstractContent {
+
+       /**
+        * @var Message
+        */
+       protected $mMessage;
+
+       /**
+        * @param Message|String $msg    A Message object, or a message key
+        * @param array|null     $params An optional array of message parameters
+        */
+       public function __construct( $msg, $params = null ) {
+               # XXX: messages may be wikitext, html or plain text! and maybe even something else entirely.
+               parent::__construct( CONTENT_MODEL_WIKITEXT );
+
+               if ( is_string( $msg ) ) {
+                       $this->mMessage = wfMessage( $msg );
+               } else {
+                       $this->mMessage = clone $msg;
+               }
+
+               if ( $params ) {
+                       $this->mMessage = $this->mMessage->params( $params );
+               }
+       }
+
+       /**
+        * Returns the message as rendered HTML
+        *
+        * @return string The message text, parsed into html
+        */
+       public function getHtml() {
+               return $this->mMessage->parse();
+       }
+
+       /**
+        * Returns the message as rendered HTML
+        *
+        * @return string The message text, parsed into html
+        */
+       public function getWikitext() {
+               return $this->mMessage->text();
+       }
+
+       /**
+        * Returns the message object, with any parameters already substituted.
+        *
+        * @return Message The message object.
+        */
+       public function getNativeData() {
+               //NOTE: Message objects are mutable. Cloning here makes MessageContent immutable.
+               return clone $this->mMessage;
+       }
+
+       /**
+        * @see Content::getTextForSearchIndex
+        */
+       public function getTextForSearchIndex() {
+               return $this->mMessage->plain();
+       }
+
+       /**
+        * @see Content::getWikitextForTransclusion
+        */
+       public function getWikitextForTransclusion() {
+               return $this->getWikitext();
+       }
+
+       /**
+        * @see Content::getTextForSummary
+        */
+       public function getTextForSummary( $maxlength = 250 ) {
+               return substr( $this->mMessage->plain(), 0, $maxlength );
+       }
+
+       /**
+        * @see Content::getSize
+        *
+        * @return int
+        */
+       public function getSize() {
+               return strlen( $this->mMessage->plain() );
+       }
+
+       /**
+        * @see Content::copy
+        *
+        * @return Content. A copy of this object
+        */
+       public function copy() {
+               // MessageContent is immutable (because getNativeData() returns a clone of the Message object)
+               return $this;
+       }
+
+       /**
+        * @see Content::isCountable
+        *
+        * @return bool false
+        */
+       public function isCountable( $hasLinks = null ) {
+               return false;
+       }
+
+       /**
+        * @see Content::getParserOutput
+        *
+        * @return ParserOutput
+        */
+       public function getParserOutput(
+               Title $title, $revId = null,
+               ParserOptions $options = null, $generateHtml = true
+       ) {
+
+               if ( $generateHtml ) {
+                       $html = $this->getHtml();
+               } else {
+                       $html = '';
+               }
+
+               $po = new ParserOutput( $html );
+               return $po;
+       }
+}
\ No newline at end of file
diff --git a/includes/content/TextContent.php b/includes/content/TextContent.php
new file mode 100644 (file)
index 0000000..68e6c39
--- /dev/null
@@ -0,0 +1,180 @@
+<?php
+
+/**
+ * Content object implementation for representing flat text.
+ *
+ * TextContent instances are immutable
+ *
+ * @since 1.21
+ */
+abstract class TextContent extends AbstractContent {
+
+       public function __construct( $text, $model_id = null ) {
+               parent::__construct( $model_id );
+
+               $this->mText = $text;
+       }
+
+       public function copy() {
+               return $this; # NOTE: this is ok since TextContent are immutable.
+       }
+
+       public function getTextForSummary( $maxlength = 250 ) {
+               global $wgContLang;
+
+               $text = $this->getNativeData();
+
+               $truncatedtext = $wgContLang->truncate(
+                       preg_replace( "/[\n\r]/", ' ', $text ),
+                       max( 0, $maxlength ) );
+
+               return $truncatedtext;
+       }
+
+       /**
+        * returns the text's size in bytes.
+        *
+        * @return int The size
+        */
+       public function getSize( ) {
+               $text = $this->getNativeData( );
+               return strlen( $text );
+       }
+
+       /**
+        * Returns true if this content is not a redirect, and $wgArticleCountMethod
+        * is "any".
+        *
+        * @param $hasLinks Bool: if it is known whether this content contains links,
+        * provide this information here, to avoid redundant parsing to find out.
+        *
+        * @return bool True if the content is countable
+        */
+       public function isCountable( $hasLinks = null ) {
+               global $wgArticleCountMethod;
+
+               if ( $this->isRedirect( ) ) {
+                       return false;
+               }
+
+               if ( $wgArticleCountMethod === 'any' ) {
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * Returns the text represented by this Content object, as a string.
+        *
+        * @param   the raw text
+        */
+       public function getNativeData( ) {
+               $text = $this->mText;
+               return $text;
+       }
+
+       /**
+        * Returns the text represented by this Content object, as a string.
+        *
+        * @param   the raw text
+        */
+       public function getTextForSearchIndex( ) {
+               return $this->getNativeData();
+       }
+
+       /**
+        * Returns the text represented by this Content object, as a string.
+        *
+        * @param   the raw text
+        */
+       public function getWikitextForTransclusion( ) {
+               return $this->getNativeData();
+       }
+
+       /**
+        * Diff this content object with another content object..
+        *
+        * @since 1.21diff
+        *
+        * @param $that Content the other content object to compare this content object to
+        * @param $lang Language the language object to use for text segmentation.
+        *    If not given, $wgContentLang is used.
+        *
+        * @return DiffResult a diff representing the changes that would have to be
+        *    made to this content object to make it equal to $that.
+        */
+       public function diff( Content $that, Language $lang = null ) {
+               global $wgContLang;
+
+               $this->checkModelID( $that->getModel() );
+
+               # @todo: could implement this in DifferenceEngine and just delegate here?
+
+               if ( !$lang ) $lang = $wgContLang;
+
+               $otext = $this->getNativeData();
+               $ntext = $this->getNativeData();
+
+               # Note: Use native PHP diff, external engines don't give us abstract output
+               $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) );
+               $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) );
+
+               $diff = new Diff( $ota, $nta );
+               return $diff;
+       }
+
+
+       /**
+        * Returns a generic ParserOutput object, wrapping the HTML returned by
+        * getHtml().
+        *
+        * @param $title Title Context title for parsing
+        * @param $revId int|null Revision ID (for {{REVISIONID}})
+        * @param $options ParserOptions|null Parser options
+        * @param $generateHtml bool Whether or not to generate HTML
+        *
+        * @return ParserOutput representing the HTML form of the text
+        */
+       public function getParserOutput( Title $title,
+               $revId = null,
+               ParserOptions $options = null, $generateHtml = true
+       ) {
+               # Generic implementation, relying on $this->getHtml()
+
+               if ( $generateHtml ) {
+                       $html = $this->getHtml();
+               } else {
+                       $html = '';
+               }
+
+               $po = new ParserOutput( $html );
+               return $po;
+       }
+
+       /**
+        * Generates an HTML version of the content, for display. Used by
+        * getParserOutput() to construct a ParserOutput object.
+        *
+        * This default implementation just calls getHighlightHtml(). Content
+        * models that have another mapping to HTML (as is the case for markup
+        * languages like wikitext) should override this method to generate the
+        * appropriate HTML.
+        *
+        * @return string An HTML representation of the content
+        */
+       protected function getHtml() {
+               return $this->getHighlightHtml();
+       }
+
+       /**
+        * Generates a syntax-highlighted version of the content, as HTML.
+        * Used by the default implementation of getHtml().
+        *
+        * @return string an HTML representation of the content's markup
+        */
+       protected function getHighlightHtml( ) {
+               # TODO: make Highlighter interface, use highlighter here, if available
+               return htmlspecialchars( $this->getNativeData() );
+       }
+}
\ No newline at end of file
diff --git a/includes/content/WikitextContent.php b/includes/content/WikitextContent.php
new file mode 100644 (file)
index 0000000..b660fc0
--- /dev/null
@@ -0,0 +1,289 @@
+<?php
+/**
+ * @since 1.21
+ */
+class WikitextContent extends TextContent {
+
+       public function __construct( $text ) {
+               parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
+       }
+
+       /**
+        * @see Content::getSection()
+        */
+       public function getSection( $section ) {
+               global $wgParser;
+
+               $text = $this->getNativeData();
+               $sect = $wgParser->getSection( $text, $section, false );
+
+               return new WikitextContent( $sect );
+       }
+
+       /**
+        * @see Content::replaceSection()
+        */
+       public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
+               wfProfileIn( __METHOD__ );
+
+               $myModelId = $this->getModel();
+               $sectionModelId = $with->getModel();
+
+               if ( $sectionModelId != $myModelId  ) {
+                       throw new MWException( "Incompatible content model for section: " .
+                               "document uses $myModelId but " .
+                               "section uses $sectionModelId." );
+               }
+
+               $oldtext = $this->getNativeData();
+               $text = $with->getNativeData();
+
+               if ( $section === '' ) {
+                       return $with; # XXX: copy first?
+               } if ( $section == 'new' ) {
+                       # Inserting a new section
+                       $subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
+                               ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
+                       if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
+                               $text = strlen( trim( $oldtext ) ) > 0
+                                       ? "{$oldtext}\n\n{$subject}{$text}"
+                                       : "{$subject}{$text}";
+                       }
+               } else {
+                       # Replacing an existing section; roll out the big guns
+                       global $wgParser;
+
+                       $text = $wgParser->replaceSection( $oldtext, $section, $text );
+               }
+
+               $newContent = new WikitextContent( $text );
+
+               wfProfileOut( __METHOD__ );
+               return $newContent;
+       }
+
+       /**
+        * Returns a new WikitextContent object with the given section heading
+        * prepended.
+        *
+        * @param $header string
+        * @return Content
+        */
+       public function addSectionHeader( $header ) {
+               $text = wfMessage( 'newsectionheaderdefaultlevel' )
+                       ->rawParams( $header )->inContentLanguage()->text();
+               $text .= "\n\n";
+               $text .= $this->getNativeData();
+
+               return new WikitextContent( $text );
+       }
+
+       /**
+        * Returns a Content object with pre-save transformations applied using
+        * Parser::preSaveTransform().
+        *
+        * @param $title Title
+        * @param $user User
+        * @param $popts ParserOptions
+        * @return Content
+        */
+       public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+               global $wgParser;
+
+               $text = $this->getNativeData();
+               $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
+
+               return new WikitextContent( $pst );
+       }
+
+       /**
+        * Returns a Content object with preload transformations applied (or this
+        * object if no transformations apply).
+        *
+        * @param $title Title
+        * @param $popts ParserOptions
+        * @return Content
+        */
+       public function preloadTransform( Title $title, ParserOptions $popts ) {
+               global $wgParser;
+
+               $text = $this->getNativeData();
+               $plt = $wgParser->getPreloadText( $text, $title, $popts );
+
+               return new WikitextContent( $plt );
+       }
+
+       /**
+        * Implement redirect extraction for wikitext.
+        *
+        * @return null|Title
+        *
+        * @note: migrated here from Title::newFromRedirectInternal()
+        *
+        * @see Content::getRedirectTarget
+        * @see AbstractContent::getRedirectTarget
+        */
+       public function getRedirectTarget() {
+               global $wgMaxRedirects;
+               if ( $wgMaxRedirects < 1 ) {
+                       // redirects are disabled, so quit early
+                       return null;
+               }
+               $redir = MagicWord::get( 'redirect' );
+               $text = trim( $this->getNativeData() );
+               if ( $redir->matchStartAndRemove( $text ) ) {
+                       // Extract the first link and see if it's usable
+                       // Ensure that it really does come directly after #REDIRECT
+                       // Some older redirects included a colon, so don't freak about that!
+                       $m = array();
+                       if ( preg_match( '!^\s*:?\s*\[{2}(.*?)(?:\|.*?)?\]{2}!', $text, $m ) ) {
+                               // Strip preceding colon used to "escape" categories, etc.
+                               // and URL-decode links
+                               if ( strpos( $m[1], '%' ) !== false ) {
+                                       // Match behavior of inline link parsing here;
+                                       $m[1] = rawurldecode( ltrim( $m[1], ':' ) );
+                               }
+                               $title = Title::newFromText( $m[1] );
+                               // If the title is a redirect to bad special pages or is invalid, return null
+                               if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) {
+                                       return null;
+                               }
+                               return $title;
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * @see   Content::updateRedirect()
+        *
+        * This implementation replaces the first link on the page with the given new target
+        * if this Content object is a redirect. Otherwise, this method returns $this.
+        *
+        * @since 1.21
+        *
+        * @param Title $target
+        *
+        * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+        */
+       public function updateRedirect( Title $target ) {
+               if ( !$this->isRedirect() ) {
+                       return $this;
+               }
+
+               # Fix the text
+               # Remember that redirect pages can have categories, templates, etc.,
+               # so the regex has to be fairly general
+               $newText = preg_replace( '/ \[ \[  [^\]]*  \] \] /x',
+                       '[[' . $target->getFullText() . ']]',
+                       $this->getNativeData(), 1 );
+
+               return new WikitextContent( $newText );
+       }
+
+       /**
+        * Returns true if this content is not a redirect, and this content's text
+        * is countable according to the criteria defined by $wgArticleCountMethod.
+        *
+        * @param $hasLinks Bool  if it is known whether this content contains
+        *    links, provide this information here, to avoid redundant parsing to
+        *    find out.
+        * @param $title null|\Title
+        *
+        * @internal param \IContextSource $context context for parsing if necessary
+        *
+        * @return bool True if the content is countable
+        */
+       public function isCountable( $hasLinks = null, Title $title = null ) {
+               global $wgArticleCountMethod;
+
+               if ( $this->isRedirect( ) ) {
+                       return false;
+               }
+
+               $text = $this->getNativeData();
+
+               switch ( $wgArticleCountMethod ) {
+                       case 'any':
+                               return true;
+                       case 'comma':
+                               return strpos( $text,  ',' ) !== false;
+                       case 'link':
+                               if ( $hasLinks === null ) { # not known, find out
+                                       if ( !$title ) {
+                                               $context = RequestContext::getMain();
+                                               $title = $context->getTitle();
+                                       }
+
+                                       $po = $this->getParserOutput( $title, null, null, false );
+                                       $links = $po->getLinks();
+                                       $hasLinks = !empty( $links );
+                               }
+
+                               return $hasLinks;
+               }
+
+               return false;
+       }
+
+       public function getTextForSummary( $maxlength = 250 ) {
+               $truncatedtext = parent::getTextForSummary( $maxlength );
+
+               # clean up unfinished links
+               # XXX: make this optional? wasn't there in autosummary, but required for
+               # deletion summary.
+               $truncatedtext = preg_replace( '/\[\[([^\]]*)\]?$/', '$1', $truncatedtext );
+
+               return $truncatedtext;
+       }
+
+       /**
+        * Returns a ParserOutput object resulting from parsing the content's text
+        * using $wgParser.
+        *
+        * @since    1.21
+        *
+        * @param $content Content the content to render
+        * @param $title \Title
+        * @param $revId null
+        * @param $options null|ParserOptions
+        * @param $generateHtml bool
+        *
+        * @internal param \IContextSource|null $context
+        * @return ParserOutput representing the HTML form of the text
+        */
+       public function getParserOutput( Title $title,
+               $revId = null,
+               ParserOptions $options = null, $generateHtml = true
+       ) {
+               global $wgParser;
+
+               if ( !$options ) {
+                       //NOTE: use canonical options per default to produce cacheable output
+                       $options = $this->getContentHandler()->makeParserOptions( 'canonical' );
+               }
+
+               $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
+               return $po;
+       }
+
+       protected function getHtml() {
+               throw new MWException(
+                       "getHtml() not implemented for wikitext. "
+                               . "Use getParserOutput()->getText()."
+               );
+       }
+
+       /**
+        * @see  Content::matchMagicWord()
+        *
+        * This implementation calls $word->match() on the this TextContent object's text.
+        *
+        * @param MagicWord $word
+        *
+        * @return bool whether this Content object matches the given magic word.
+        */
+       public function matchMagicWord( MagicWord $word ) {
+               return $word->match( $this->getNativeData() );
+       }
+}
\ No newline at end of file
index 5adf362..a4e3272 100644 (file)
@@ -222,6 +222,7 @@ class DerivativeContext extends ContextSource {
         * Set the Language object
         *
         * @param $l Mixed Language instance or language code
+        * @throws MWException
         * @since 1.19
         */
        public function setLanguage( $l ) {
index 1ffbc08..a528f22 100644 (file)
@@ -148,6 +148,7 @@ class RequestContext implements IContextSource {
         * canUseWikiPage() to check whether this method can be called safely.
         *
         * @since 1.19
+        * @throws MWException
         * @return WikiPage
         */
        public function getWikiPage() {
@@ -237,6 +238,7 @@ class RequestContext implements IContextSource {
         * Set the Language object
         *
         * @param $l Mixed Language instance or language code
+        * @throws MWException
         * @since 1.19
         */
        public function setLanguage( $l ) {
index e30522a..f847b98 100644 (file)
@@ -41,6 +41,8 @@
  *   - b) Determine the new row (expensive, so we don't want to hold locks now)
  *   - c) Re-read the current row with READ_LOCKING; if it changed then bail out
  *   - d) otherwise, do the updates
+ *
+ * @since 1.20
  */
 interface IDBAccessObject {
        // Constants for object loading bitfield flags (higher => higher QoS)
index 61061b2..a942afe 100644 (file)
@@ -225,12 +225,15 @@ abstract class DatabaseBase implements DatabaseType {
 
        protected $mServer, $mUser, $mPassword, $mDBname;
 
-       /**
-        * @var DatabaseBase
-        */
        protected $mConn = null;
        protected $mOpened = false;
 
+       /**
+        * @since 1.20
+        * @var array of callable
+        */
+       protected $trxIdleCallbacks = array();
+
        protected $mTablePrefix;
        protected $mFlags;
        protected $mTrxLevel = 0;
@@ -246,6 +249,31 @@ abstract class DatabaseBase implements DatabaseType {
 
        protected $delimiter = ';';
 
+       /**
+        * Remembers the function name given for starting the most recent transaction via begin().
+        * Used to provide additional context for error reporting.
+        *
+        * @var String
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxFname = null;
+
+       /**
+        * Record if possible write queries were done in the last transaction started
+        *
+        * @var Bool
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxDoneWrites = false;
+
+       /**
+        * Record if the current transaction was started implicitly due to DBO_TRX being set.
+        *
+        * @var Bool
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxAutomatic = false;
+
 # ------------------------------------------------------------------------------
 # Accessors
 # ------------------------------------------------------------------------------
@@ -725,8 +753,14 @@ abstract class DatabaseBase implements DatabaseType {
                $this->mOpened = false;
                if ( $this->mConn ) {
                        if ( $this->trxLevel() ) {
-                               $this->commit( __METHOD__ );
+                               if ( !$this->mTrxAutomatic ) {
+                                       wfWarn( "Transaction still in progress (from {$this->mTrxFname}), " .
+                                               " performing implicit commit before closing connection!" );
+                               }
+
+                               $this->commit( __METHOD__, 'flush' );
                        }
+
                        $ret = $this->closeConnection();
                        $this->mConn = false;
                        return $ret;
@@ -744,6 +778,7 @@ abstract class DatabaseBase implements DatabaseType {
 
        /**
         * @param $error String: fallback error message, used if none is given by DB
+        * @throws DBConnectionError
         */
        function reportConnectionError( $error = 'Unknown error' ) {
                $myError = $this->lastError();
@@ -793,9 +828,9 @@ abstract class DatabaseBase implements DatabaseType {
         *     comment (you can use __METHOD__ or add some extra info)
         * @param  $tempIgnore Boolean:   Whether to avoid throwing an exception on errors...
         *     maybe best to catch the exception instead?
+        * @throws MWException
         * @return boolean|ResultWrapper. true for a successful write query, ResultWrapper object
         *     for a successful read query, or false on failure if $tempIgnore set
-        * @throws DBQueryError Thrown when the database returns an error of any kind
         */
        public function query( $sql, $fname = '', $tempIgnore = false ) {
                $isMaster = !is_null( $this->getLBInfo( 'master' ) );
@@ -836,9 +871,10 @@ abstract class DatabaseBase implements DatabaseType {
                $commentedSql = preg_replace( '/\s/', " /* $fname $userName */ ", $sql, 1 );
 
                # If DBO_TRX is set, start a transaction
-               if ( ( $this->mFlags & DBO_TRX ) && !$this->trxLevel() &&
-                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' ) {
-                       # avoid establishing transactions for SHOW and SET statements too -
+               if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
+                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
+               {
+                       # Avoid establishing transactions for SHOW and SET statements too -
                        # that would delay transaction initializations to once connection
                        # is really used by application
                        $sqlstart = substr( $sql, 0, 10 ); // very much worth it, benchmark certified(tm)
@@ -848,9 +884,15 @@ abstract class DatabaseBase implements DatabaseType {
                                        wfDebug("Implicit transaction start.\n");
                                }
                                $this->begin( __METHOD__ . " ($fname)" );
+                               $this->mTrxAutomatic = true;
                        }
                }
 
+               # Keep track of whether the transaction has write queries pending
+               if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
+                       $this->mTrxDoneWrites = true;
+               }
+
                if ( $this->debug() ) {
                        static $cnt = 0;
 
@@ -877,6 +919,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
                        wfDebug( "Connection lost, reconnecting...\n" );
 
                        if ( $this->ping() ) {
@@ -916,6 +959,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $sql String
         * @param $fname String
         * @param $tempIgnore Boolean
+        * @throws DBQueryError
         */
        public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
                # Ignore errors during error handling to avoid infinite recursion
@@ -1002,6 +1046,7 @@ abstract class DatabaseBase implements DatabaseType {
         * while we're doing this.
         *
         * @param $matches Array
+        * @throws DBUnexpectedError
         * @return String
         */
        protected function fillPreparedArg( $matches ) {
@@ -1103,7 +1148,10 @@ abstract class DatabaseBase implements DatabaseType {
                }
 
                if ( isset( $options['HAVING'] ) ) {
-                       $preLimitTail .= " HAVING {$options['HAVING']}";
+                       $having = is_array( $options['HAVING'] )
+                               ? $this->makeList( $options['HAVING'], LIST_AND )
+                               : $options['HAVING'];
+                       $preLimitTail .= " HAVING {$having}";
                }
 
                if ( isset( $options['ORDER BY'] ) ) {
@@ -1264,7 +1312,9 @@ abstract class DatabaseBase implements DatabaseType {
         *   - GROUP BY: May be either an SQL fragment string naming a field or
         *     expression to group by, or an array of such SQL fragments.
         *
-        *   - HAVING: A string containing a HAVING clause.
+        *   - HAVING: May be either an string containing a HAVING clause or an array of
+        *     conditions building the HAVING clause. If an array is given, the conditions
+        *     constructed from each element are combined with AND.
         *
         *   - ORDER BY: May be either an SQL fragment giving a field name or
         *     expression to order by, or an array of such SQL fragments.
@@ -1712,7 +1762,7 @@ abstract class DatabaseBase implements DatabaseType {
        /**
         * Makes an encoded list of strings from an array
         * @param $a Array containing the data
-        * @param $mode int Constant
+        * @param int $mode Constant
         *      - LIST_COMMA:          comma separated, no field names
         *      - LIST_AND:            ANDed WHERE clause (without the WHERE). See
         *        the documentation for $conds in DatabaseBase::select().
@@ -1720,6 +1770,7 @@ abstract class DatabaseBase implements DatabaseType {
         *      - LIST_SET:            comma separated with field names, like a SET clause
         *      - LIST_NAMES:          comma separated field names
         *
+        * @throws MWException|DBUnexpectedError
         * @return string
         */
        public function makeList( $a, $mode = LIST_COMMA ) {
@@ -2421,6 +2472,7 @@ abstract class DatabaseBase implements DatabaseType {
         *                    ANDed together in the WHERE clause
         * @param $fname      String: Calling function name (use __METHOD__) for
         *                    logs/profiling
+        * @throws DBUnexpectedError
         */
        public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
                $fname = 'DatabaseBase::deleteJoin' )
@@ -2486,6 +2538,7 @@ abstract class DatabaseBase implements DatabaseType {
         *               the format. Use $conds == "*" to delete all rows
         * @param $fname String name of the calling function
         *
+        * @throws DBUnexpectedError
         * @return bool
         */
        public function delete( $table, $conds, $fname = 'DatabaseBase::delete' ) {
@@ -2584,6 +2637,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $limit Integer the SQL limit
         * @param $offset Integer|bool the SQL offset (default false)
         *
+        * @throws DBUnexpectedError
         * @return string
         */
        public function limitResult( $sql, $limit, $offset = false ) {
@@ -2621,12 +2675,15 @@ abstract class DatabaseBase implements DatabaseType {
         * Returns an SQL expression for a simple conditional.  This doesn't need
         * to be overridden unless CASE isn't supported in your DBMS.
         *
-        * @param $cond String: SQL expression which will result in a boolean value
+        * @param $cond string|array SQL expression which will result in a boolean value
         * @param $trueVal String: SQL expression to return if true
         * @param $falseVal String: SQL expression to return if false
         * @return String: SQL fragment
         */
        public function conditional( $cond, $trueVal, $falseVal ) {
+               if ( is_array( $cond ) ) {
+                       $cond = $this->makeList( $cond, LIST_AND );
+               }
                return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
        }
 
@@ -2823,21 +2880,131 @@ abstract class DatabaseBase implements DatabaseType {
        }
 
        /**
-        * Begin a transaction
+        * Run an anonymous function as soon as there is no transaction pending.
+        * If there is a transaction and it is rolled back, then the callback is cancelled.
+        * Callbacks must commit any transactions that they begin.
+        *
+        * This is useful for updates to different systems or separate transactions are needed.
+        *
+        * @since 1.20
+        *
+        * @param Closure $callback
+        */
+       final public function onTransactionIdle( Closure $callback ) {
+               if ( $this->mTrxLevel ) {
+                       $this->trxIdleCallbacks[] = $callback;
+               } else {
+                       $callback();
+               }
+       }
+
+       /**
+        * Actually run the "on transaction idle" callbacks.
+        *
+        * @since 1.20
+        */
+       protected function runOnTransactionIdleCallbacks() {
+               $e = null; // last exception
+               do { // callbacks may add callbacks :)
+                       $callbacks = $this->trxIdleCallbacks;
+                       $this->trxIdleCallbacks = array(); // recursion guard
+                       foreach ( $callbacks as $callback ) {
+                               try {
+                                       $callback();
+                               } catch ( Exception $e ) {}
+                       }
+               } while ( count( $this->trxIdleCallbacks ) );
+
+               if ( $e instanceof Exception ) {
+                       throw $e; // re-throw any last exception
+               }
+       }
+
+       /**
+        * Begin a transaction. If a transaction is already in progress, that transaction will be committed before the
+        * new transaction is started.
+        *
+        * Note that when the DBO_TRX flag is set (which is usually the case for web requests, but not for maintenance scripts),
+        * any previous database query will have started a transaction automatically.
+        *
+        * Nesting of transactions is not supported. Attempts to nest transactions will cause a warning, unless the current
+        * transaction was started automatically because of the DBO_TRX flag.
         *
         * @param $fname string
         */
-       public function begin( $fname = 'DatabaseBase::begin' ) {
+       final public function begin( $fname = 'DatabaseBase::begin' ) {
+               global $wgDebugDBTransactions;
+
+               if ( $this->mTrxLevel ) { // implicit commit
+                       if ( !$this->mTrxAutomatic ) {
+                               // We want to warn about inadvertently nested begin/commit pairs, but not about auto-committing
+                               // implicit transactions that were started by query() because DBO_TRX was set.
+
+                               wfWarn( "$fname: Transaction already in progress (from {$this->mTrxFname}), " .
+                                       " performing implicit commit!" );
+                       } else {
+                               // if the transaction was automatic and has done write operations,
+                               // log it if $wgDebugDBTransactions is enabled.
+
+                               if ( $this->mTrxDoneWrites && $wgDebugDBTransactions ) {
+                                       wfDebug( "$fname: Automatic transaction with writes in progress (from {$this->mTrxFname}), " .
+                                               " performing implicit commit!\n" );
+                               }
+                       }
+
+                       $this->doCommit( $fname );
+                       $this->runOnTransactionIdleCallbacks();
+               }
+
+               $this->doBegin( $fname );
+               $this->mTrxFname = $fname;
+               $this->mTrxDoneWrites = false;
+               $this->mTrxAutomatic = false;
+       }
+
+       /**
+        * Issues the BEGIN command to the database server.
+        *
+        * @see DatabaseBase::begin()
+        * @param type $fname
+        */
+       protected function doBegin( $fname ) {
                $this->query( 'BEGIN', $fname );
                $this->mTrxLevel = 1;
        }
 
        /**
-        * End a transaction
+        * Commits a transaction previously started using begin().
+        * If no transaction is in progress, a warning is issued.
+        *
+        * Nesting of transactions is not supported.
         *
         * @param $fname string
+        * @param $flush String Flush flag, set to 'flush' to disable warnings about explicitly committing implicit
+        *        transactions, or calling commit when no transaction is in progress.
+        *        This will silently break any ongoing explicit transaction. Only set the flush flag if you are sure
+        *        that it is safe to ignore these warnings in your context.
+        */
+       final public function commit( $fname = 'DatabaseBase::commit', $flush = '' ) {
+               if ( $flush != 'flush' ) {
+                       if ( !$this->mTrxLevel ) {
+                               wfWarn( "$fname: No transaction to commit, something got out of sync!" );
+                       } elseif( $this->mTrxAutomatic ) {
+                               wfWarn( "$fname: Explicit commit of implicit transaction. Something may be out of sync!" );
+                       }
+               }
+
+               $this->doCommit( $fname );
+               $this->runOnTransactionIdleCallbacks();
+       }
+
+       /**
+        * Issues the COMMIT command to the database server.
+        *
+        * @see DatabaseBase::commit()
+        * @param type $fname
         */
-       public function commit( $fname = 'DatabaseBase::commit' ) {
+       protected function doCommit( $fname ) {
                if ( $this->mTrxLevel ) {
                        $this->query( 'COMMIT', $fname );
                        $this->mTrxLevel = 0;
@@ -2845,12 +3012,28 @@ abstract class DatabaseBase implements DatabaseType {
        }
 
        /**
-        * Rollback a transaction.
+        * Rollback a transaction previously started using begin().
+        * If no transaction is in progress, a warning is issued.
+        *
         * No-op on non-transactional databases.
         *
         * @param $fname string
         */
-       public function rollback( $fname = 'DatabaseBase::rollback' ) {
+       final public function rollback( $fname = 'DatabaseBase::rollback' ) {
+               if ( !$this->mTrxLevel ) {
+                       wfWarn( "$fname: No transaction to rollback, something got out of sync!" );
+               }
+               $this->doRollback( $fname );
+               $this->trxIdleCallbacks = array(); // cancel
+       }
+
+       /**
+        * Issues the ROLLBACK command to the database server.
+        *
+        * @see DatabaseBase::rollback()
+        * @param type $fname
+        */
+       protected function doRollback( $fname ) {
                if ( $this->mTrxLevel ) {
                        $this->query( 'ROLLBACK', $fname, true );
                        $this->mTrxLevel = 0;
@@ -2869,6 +3052,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $newName String: name of table to be created
         * @param $temporary Boolean: whether the new table should be temporary
         * @param $fname String: calling function name
+        * @throws MWException
         * @return Boolean: true if operation was successful
         */
        public function duplicateTableStructure( $oldName, $newName, $temporary = false,
@@ -2883,6 +3067,7 @@ abstract class DatabaseBase implements DatabaseType {
         *
         * @param $prefix string Only show tables with this prefix, e.g. mw_
         * @param $fname String: calling function name
+        * @throws MWException
         */
        function listTables( $prefix = null, $fname = 'DatabaseBase::listTables' ) {
                throw new MWException( 'DatabaseBase::listTables is not implemented in descendant class' );
@@ -3026,10 +3211,11 @@ abstract class DatabaseBase implements DatabaseType {
         * on object's error ignore settings).
         *
         * @param $filename String: File name to open
-        * @param $lineCallback Callback: Optional function called before reading each line
-        * @param $resultCallback Callback: Optional function called for each MySQL result
-        * @param $fname String: Calling function name or false if name should be
+        * @param bool|callable $lineCallback Optional function called before reading each line
+        * @param bool|callable $resultCallback Optional function called for each MySQL result
+        * @param bool|string $fname Calling function name or false if name should be
         *      generated dynamically using $filename
+        * @throws MWException
         * @return bool|string
         */
        public function sourceFile(
index 80220af..62c90d1 100644 (file)
@@ -496,6 +496,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * @param $user String
         * @param $password String
         * @param $dbName String: database name
+        * @throws DBConnectionError
         * @return DatabaseBase a fresh connection
         */
        public function open( $server, $user, $password, $dbName ) {
@@ -622,6 +623,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * The DBMS-dependent part of query()
         * @param  $sql String: SQL query.
+        * @throws DBUnexpectedError
         * @return object Result object for fetch functions or false on failure
         */
        protected function doQuery( $sql ) {
@@ -807,7 +809,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * Start a transaction (mandatory)
         */
-       public function begin( $fname = 'DatabaseIbm_db2::begin' ) {
+       protected function doBegin( $fname = 'DatabaseIbm_db2::begin' ) {
                // BEGIN is implicit for DB2
                // However, it requires that AutoCommit be off.
 
@@ -823,7 +825,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * End a transaction
         * Must have a preceding begin()
         */
-       public function commit( $fname = 'DatabaseIbm_db2::commit' ) {
+       protected function doCommit( $fname = 'DatabaseIbm_db2::commit' ) {
                db2_commit( $this->mConn );
 
                // Some MediaWiki code is still transaction-less (?).
@@ -837,7 +839,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * Cancel a transaction
         */
-       public function rollback( $fname = 'DatabaseIbm_db2::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseIbm_db2::rollback' ) {
                db2_rollback( $this->mConn );
                // turn auto-commit back on
                // not sure if this is appropriate
@@ -854,6 +856,9 @@ class DatabaseIbm_db2 extends DatabaseBase {
         *   LIST_SET           - comma separated with field names, like a SET clause
         *   LIST_NAMES         - comma separated field names
         *   LIST_SET_PREPARED  - like LIST_SET, except with ? tokens as values
+        * @param array $a
+        * @param int $mode
+        * @throws DBUnexpectedError
         * @return string
         */
        function makeList( $a, $mode = LIST_COMMA ) {
@@ -891,7 +896,8 @@ class DatabaseIbm_db2 extends DatabaseBase {
         *
         * @param $sql string SQL query we will append the limit too
         * @param $limit integer the SQL limit
-        * @param $offset integer the SQL offset (default false)
+        * @param bool|int $offset SQL offset (default false)
+        * @throws DBUnexpectedError
         * @return string
         */
        public function limitResult( $sql, $limit, $offset=false ) {
@@ -1173,6 +1179,10 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * DELETE query wrapper
         *
         * Use $conds == "*" to delete all rows
+        * @param array $table
+        * @param array|string $conds
+        * @param string $fname
+        * @throws DBUnexpectedError
         * @return bool|\ResultWrapper
         */
        public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) {
@@ -1247,6 +1257,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
        /**
         * Frees memory associated with a statement resource
         * @param $res Object: statement resource to free
+        * @throws DBUnexpectedError
         * @return Boolean success or failure
         */
        public function freeResult( $res ) {
index 3846e96..ff67f47 100644 (file)
@@ -61,6 +61,11 @@ class DatabaseMssql extends DatabaseBase {
 
        /**
         * Usually aborts on failure
+        * @param String $server
+        * @param String $user
+        * @param String $password
+        * @param String $dbName
+        * @throws DBConnectionError
         * @return bool|DatabaseBase|null
         */
        function open( $server, $user, $password, $dbName ) {
@@ -380,6 +385,11 @@ class DatabaseMssql extends DatabaseBase {
         *
         * Usually aborts on failure
         * If errors are explicitly ignored, returns success
+        * @param String $table
+        * @param Array $arrToInsert
+        * @param string $fname
+        * @param array $options
+        * @throws DBQueryError
         * @return bool
         */
        function insert( $table, $arrToInsert, $fname = 'DatabaseMssql::insert', $options = array() ) {
@@ -510,6 +520,14 @@ class DatabaseMssql extends DatabaseBase {
         * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes()
         * $conds may be "*" to copy the whole table
         * srcTable may be an array of tables.
+        * @param string $destTable
+        * @param array|string $srcTable
+        * @param array $varMap
+        * @param array $conds
+        * @param string $fname
+        * @param array $insertOptions
+        * @param array $selectOptions
+        * @throws DBQueryError
         * @return null|\ResultWrapper
         */
        function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'DatabaseMssql::insertSelect',
@@ -694,7 +712,7 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * Begin a transaction, committing any previously open transaction
         */
-       function begin( $fname = 'DatabaseMssql::begin' ) {
+       protected function doBegin( $fname = 'DatabaseMssql::begin' ) {
                sqlsrv_begin_transaction( $this->mConn );
                $this->mTrxLevel = 1;
        }
@@ -702,7 +720,7 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * End a transaction
         */
-       function commit( $fname = 'DatabaseMssql::commit' ) {
+       protected function doCommit( $fname = 'DatabaseMssql::commit' ) {
                sqlsrv_commit( $this->mConn );
                $this->mTrxLevel = 0;
        }
@@ -711,7 +729,7 @@ class DatabaseMssql extends DatabaseBase {
         * Rollback a transaction.
         * No-op on non-transactional databases.
         */
-       function rollback( $fname = 'DatabaseMssql::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseMssql::rollback' ) {
                sqlsrv_rollback( $this->mConn );
                $this->mTrxLevel = 0;
        }
@@ -720,6 +738,8 @@ class DatabaseMssql extends DatabaseBase {
         * Escapes a identifier for use inm SQL.
         * Throws an exception if it is invalid.
         * Reference: http://msdn.microsoft.com/en-us/library/aa224033%28v=SQL.80%29.aspx
+        * @param $identifier
+        * @throws MWException
         * @return string
         */
        private function escapeIdentifier( $identifier ) {
index 4b34310..b509302 100644 (file)
@@ -59,7 +59,7 @@ class DatabaseMysql extends DatabaseBase {
         * @throws DBConnectionError
         */
        function open( $server, $user, $password, $dbName ) {
-               global $wgAllDBsAreLocalhost;
+               global $wgAllDBsAreLocalhost, $wgDBmysql5, $wgSQLMode;
                wfProfileIn( __METHOD__ );
 
                # Load mysql.so if we don't have it
@@ -91,7 +91,7 @@ class DatabaseMysql extends DatabaseBase {
                        $connFlags |= MYSQL_CLIENT_COMPRESS;
                }
 
-               wfProfileIn("dbconnect-$server");
+               wfProfileIn( "dbconnect-$server" );
 
                # The kernel's default SYN retransmission period is far too slow for us,
                # so we use a short timeout plus a manual retry. Retrying means that a small
@@ -118,60 +118,54 @@ class DatabaseMysql extends DatabaseBase {
                                #wfLogDBError("Connect loop error $iplus of $max ($server): " . mysql_errno() . " - " . mysql_error()."\n");
                        #}
                }
-               $phpError = $this->restoreErrorHandler();
+               $error = $this->restoreErrorHandler();
+
+               wfProfileOut( "dbconnect-$server" );
+
                # Always log connection errors
                if ( !$this->mConn ) {
-                       $error = $phpError;
                        if ( !$error ) {
                                $error = $this->lastError();
                        }
                        wfLogDBError( "Error connecting to {$this->mServer}: $error\n" );
-                       wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, User: $user, Password: " .
+                       wfDebug( "DB connection error\n" .
+                               "Server: $server, User: $user, Password: " .
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
-               }
 
-               wfProfileOut("dbconnect-$server");
+                       wfProfileOut( __METHOD__ );
+                       $this->reportConnectionError( $error );
+               }
 
-               if ( $dbName != '' && $this->mConn !== false ) {
+               if ( $dbName != '' ) {
                        wfSuppressWarnings();
                        $success = mysql_select_db( $dbName, $this->mConn );
                        wfRestoreWarnings();
                        if ( !$success ) {
-                               $error = "Error selecting database $dbName on server {$this->mServer} " .
-                                       "from client host " . wfHostname() . "\n";
-                               wfLogDBError(" Error selecting database $dbName on server {$this->mServer} \n");
-                               wfDebug( $error );
-                       }
-               } else {
-                       # Delay USE query
-                       $success = (bool)$this->mConn;
-               }
+                               wfLogDBError( "Error selecting database $dbName on server {$this->mServer}\n" );
+                               wfDebug( "Error selecting database $dbName on server {$this->mServer} " .
+                                       "from client host " . wfHostname() . "\n" );
 
-               if ( $success ) {
-                       // Tell the server we're communicating with it in UTF-8.
-                       // This may engage various charset conversions.
-                       global $wgDBmysql5;
-                       if( $wgDBmysql5 ) {
-                               $this->query( 'SET NAMES utf8', __METHOD__ );
-                       } else {
-                               $this->query( 'SET NAMES binary', __METHOD__ );
-                       }
-                       // Set SQL mode, default is turning them all off, can be overridden or skipped with null
-                       global $wgSQLMode;
-                       if ( is_string( $wgSQLMode ) ) {
-                               $mode = $this->addQuotes( $wgSQLMode );
-                               $this->query( "SET sql_mode = $mode", __METHOD__ );
+                               wfProfileOut( __METHOD__ );
+                               $this->reportConnectionError( "Error selecting database $dbName" );
                        }
+               }
 
-                       // Turn off strict mode if it is on
+               // Tell the server we're communicating with it in UTF-8.
+               // This may engage various charset conversions.
+               if( $wgDBmysql5 ) {
+                       $this->query( 'SET NAMES utf8', __METHOD__ );
                } else {
-                       $this->reportConnectionError( $phpError );
+                       $this->query( 'SET NAMES binary', __METHOD__ );
+               }
+               // Set SQL mode, default is turning them all off, can be overridden or skipped with null
+               if ( is_string( $wgSQLMode ) ) {
+                       $mode = $this->addQuotes( $wgSQLMode );
+                       $this->query( "SET sql_mode = $mode", __METHOD__ );
                }
 
-               $this->mOpened = $success;
+               $this->mOpened = true;
                wfProfileOut( __METHOD__ );
-               return $success;
+               return true;
        }
 
        /**
@@ -209,7 +203,13 @@ class DatabaseMysql extends DatabaseBase {
                wfSuppressWarnings();
                $row = mysql_fetch_object( $res );
                wfRestoreWarnings();
-               if( $this->lastErrno() ) {
+
+               $errno = $this->lastErrno();
+               // Unfortunately, mysql_fetch_object does not reset the last errno.
+               // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
+               // these are the only errors mysql_fetch_object can cause.
+               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
                }
                return $row;
@@ -227,7 +227,13 @@ class DatabaseMysql extends DatabaseBase {
                wfSuppressWarnings();
                $row = mysql_fetch_array( $res );
                wfRestoreWarnings();
-               if ( $this->lastErrno() ) {
+
+               $errno = $this->lastErrno();
+               // Unfortunately, mysql_fetch_array does not reset the last errno.
+               // Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
+               // these are the only errors mysql_fetch_object can cause.
+               // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+               if( $errno == 2000 || $errno == 2013 ) {
                        throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
                }
                return $row;
@@ -799,7 +805,8 @@ class DatabaseMysql extends DatabaseBase {
         * @param $delVar string
         * @param $joinVar string
         * @param $conds array|string
-        * @param $fname bool
+        * @param bool|string $fname bool
+        * @throws DBUnexpectedError
         * @return bool|ResultWrapper
         */
        function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'DatabaseBase::deleteJoin' ) {
@@ -945,13 +952,6 @@ class DatabaseMysql extends DatabaseBase {
 
 }
 
-/**
- * Legacy support: Database == DatabaseMysql
- *
- * @deprecated in 1.16
- */
-class Database extends DatabaseMysql {}
-
 /**
  * Utility class.
  * @ingroup Database
index cf3e45d..aa4da0f 100644 (file)
@@ -241,6 +241,11 @@ class DatabaseOracle extends DatabaseBase {
 
        /**
         * Usually aborts on failure
+        * @param string $server
+        * @param string $user
+        * @param string $password
+        * @param string $dbName
+        * @throws DBConnectionError
         * @return DatabaseBase|null
         */
        function open( $server, $user, $password, $dbName ) {
@@ -955,12 +960,12 @@ class DatabaseOracle extends DatabaseBase {
                return $this->fieldInfoMulti ($table, $field);
        }
 
-       function begin( $fname = 'DatabaseOracle::begin' ) {
+       protected function doBegin( $fname = 'DatabaseOracle::begin' ) {
                $this->mTrxLevel = 1;
                $this->doQuery( 'SET CONSTRAINTS ALL DEFERRED' );
        }
 
-       function commit( $fname = 'DatabaseOracle::commit' ) {
+       protected function doCommit( $fname = 'DatabaseOracle::commit' ) {
                if ( $this->mTrxLevel ) {
                        $ret = oci_commit( $this->mConn );
                        if ( !$ret ) {
@@ -971,7 +976,7 @@ class DatabaseOracle extends DatabaseBase {
                }
        }
 
-       function rollback( $fname = 'DatabaseOracle::rollback' ) {
+       protected function doRollback( $fname = 'DatabaseOracle::rollback' ) {
                if ( $this->mTrxLevel ) {
                        oci_rollback( $this->mConn );
                        $this->mTrxLevel = 0;
index 8f8f5e8..419488e 100644 (file)
@@ -325,6 +325,11 @@ class DatabasePostgres extends DatabaseBase {
 
        /**
         * Usually aborts on failure
+        * @param string $server
+        * @param string $user
+        * @param string $password
+        * @param string $dbName
+        * @throws DBConnectionError
         * @return DatabaseBase|null
         */
        function open( $server, $user, $password, $dbName ) {
@@ -1406,9 +1411,6 @@ SQL;
                if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
                        $postLimitTail .= ' FOR UPDATE';
                }
-               if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) {
-                       $postLimitTail .= ' LOCK IN SHARE MODE';
-               }
                if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
index cb3da1e..1125d4f 100644 (file)
@@ -79,11 +79,12 @@ class DatabaseSqlite extends DatabaseBase {
        /** Open an SQLite database and return a resource handle to it
         *  NOTE: only $dbName is used, the other parameters are irrelevant for SQLite databases
         *
-        * @param $server
-        * @param $user
-        * @param $pass
-        * @param $dbName
+        * @param string $server
+        * @param string $user
+        * @param string $pass
+        * @param string $dbName
         *
+        * @throws DBConnectionError
         * @return PDO
         */
        function open( $server, $user, $pass, $dbName ) {
@@ -103,6 +104,7 @@ class DatabaseSqlite extends DatabaseBase {
         *
         * @param $fileName string
         *
+        * @throws DBConnectionError
         * @return PDO|bool SQL connection or false if failed
         */
        function openFile( $fileName ) {
@@ -645,7 +647,7 @@ class DatabaseSqlite extends DatabaseBase {
                return false;
        }
 
-       function begin( $fname = '' ) {
+       protected function doBegin( $fname = '' ) {
                if ( $this->mTrxLevel == 1 ) {
                        $this->commit( __METHOD__ );
                }
@@ -653,7 +655,7 @@ class DatabaseSqlite extends DatabaseBase {
                $this->mTrxLevel = 1;
        }
 
-       function commit( $fname = '' ) {
+       protected function doCommit( $fname = '' ) {
                if ( $this->mTrxLevel == 0 ) {
                        return;
                }
@@ -661,7 +663,7 @@ class DatabaseSqlite extends DatabaseBase {
                $this->mTrxLevel = 0;
        }
 
-       function rollback( $fname = '' ) {
+       protected function doRollback( $fname = '' ) {
                if ( $this->mTrxLevel == 0 ) {
                        return;
                }
index 6008813..9b468a7 100644 (file)
@@ -70,6 +70,7 @@ class LBFactory_Multi extends LBFactory {
 
        /**
         * @param $conf array
+        * @throws MWException
         */
        function __construct( $conf ) {
                $this->chronProt = new ChronologyProtector;
@@ -153,8 +154,9 @@ class LBFactory_Multi extends LBFactory {
        }
 
        /**
-        * @param $cluster
-        * @param $wiki
+        * @param String $cluster
+        * @param bool $wiki
+        * @throws MWException
         * @return LoadBalancer
         */
        function newExternalLB( $cluster, $wiki = false ) {
index c40ac0c..46d24fc 100644 (file)
@@ -41,6 +41,7 @@ class LoadBalancer {
         *    servers           Required. Array of server info structures.
         *    masterWaitTimeout Replication lag wait timeout
         *    loadMonitor       Name of a class used to fetch server lag and load.
+        * @throws MWException
         */
        function __construct( $params ) {
                if ( !isset( $params['servers'] ) ) {
@@ -197,6 +198,7 @@ class LoadBalancer {
         * Side effect: opens connections to databases
         * @param $group bool
         * @param $wiki bool
+        * @throws MWException
         * @return bool|int|string
         */
        function getReaderIndex( $group = false, $wiki = false ) {
@@ -452,8 +454,9 @@ class LoadBalancer {
         *
         * @param $i Integer: server index
         * @param $groups Array: query groups
-        * @param $wiki String: wiki ID
+        * @param bool|string $wiki Wiki ID
         *
+        * @throws MWException
         * @return DatabaseBase
         */
        public function &getConnection( $i, $groups = array(), $wiki = false ) {
@@ -497,8 +500,8 @@ class LoadBalancer {
                        # Couldn't find a working server in getReaderIndex()?
                        if ( $i === false ) {
                                $this->mLastError = 'No working slave server: ' . $this->mLastError;
-                               $this->reportConnectionError( $this->mErrorConnection );
                                wfProfileOut( __METHOD__ );
+                               $this->reportConnectionError( $this->mErrorConnection );
                                return false;
                        }
                }
@@ -506,6 +509,7 @@ class LoadBalancer {
                # Now we have an explicit index into the servers array
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
+                       wfProfileOut( __METHOD__ );
                        $this->reportConnectionError( $this->mErrorConnection );
                }
 
@@ -519,6 +523,7 @@ class LoadBalancer {
         * the same number of times as getConnection() to work.
         *
         * @param DatabaseBase $conn
+        * @throws MWException
         */
        public function reuseConnection( $conn ) {
                $serverIndex = $conn->getLBInfo('serverIndex');
@@ -585,6 +590,7 @@ class LoadBalancer {
                        $server['serverIndex'] = $i;
                        $conn = $this->reallyOpenConnection( $server, false );
                        if ( $conn->isOpen() ) {
+                               wfDebug( "Connected to database $i at {$this->mServers[$i]['host']}\n" );
                                $this->mConns['local'][$i][0] = $conn;
                        } else {
                                wfDebug( "Failed to connect to database $i at {$this->mServers[$i]['host']}\n" );
@@ -690,6 +696,7 @@ class LoadBalancer {
         *
         * @param $server
         * @param $dbNameOverride bool
+        * @throws MWException
         * @return DatabaseBase
         */
        function reallyOpenConnection( $server, $dbNameOverride = false ) {
@@ -706,7 +713,6 @@ class LoadBalancer {
                }
 
                # Create object
-               wfDebug( "Connecting to $host $dbname...\n" );
                try {
                        $db = DatabaseBase::factory( $server['type'], $server );
                } catch ( DBConnectionError $e ) {
@@ -715,11 +721,6 @@ class LoadBalancer {
                        $db = $e->db;
                }
 
-               if ( $db->isOpen() ) {
-                       wfDebug( "Connected to $host $dbname.\n" );
-               } else {
-                       wfDebug( "Connection failed to $host $dbname.\n" );
-               }
                $db->setLBInfo( $server );
                if ( isset( $server['fakeSlaveLag'] ) ) {
                        $db->setFakeSlaveLag( $server['fakeSlaveLag'] );
@@ -735,8 +736,6 @@ class LoadBalancer {
         * @throws DBConnectionError
         */
        function reportConnectionError( &$conn ) {
-               wfProfileIn( __METHOD__ );
-
                if ( !is_object( $conn ) ) {
                        // No last connection, probably due to all servers being too busy
                        wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}\n" );
@@ -748,7 +747,6 @@ class LoadBalancer {
                        wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
                        $conn->reportConnectionError( "{$this->mLastError} ({$server})" );
                }
-               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -909,7 +907,9 @@ class LoadBalancer {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                foreach ( $conns3 as $conn ) {
-                                       $conn->commit( __METHOD__ );
+                                       if ( $conn->trxLevel() ) {
+                                               $conn->commit( __METHOD__, 'flush' );
+                                       }
                                }
                        }
                }
@@ -926,8 +926,8 @@ class LoadBalancer {
                                continue;
                        }
                        foreach ( $conns2[$masterIndex] as $conn ) {
-                               if ( $conn->doneWrites() ) {
-                                       $conn->commit( __METHOD__ );
+                               if ( $conn->trxLevel() && $conn->doneWrites() ) {
+                                       $conn->commit( __METHOD__, 'flush' );
                                }
                        }
                }
index 1ad25ae..d02bcf5 100644 (file)
@@ -133,70 +133,156 @@ class MWDebug {
         * Adds a warning entry to the log
         *
         * @since 1.19
-        * @param $msg
-        * @param int $callerOffset
+        * @param $msg string
+        * @param $callerOffset int
         * @return mixed
         */
-       public static function warning( $msg, $callerOffset = 1 ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+       public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
+               $callerDescription = self::getCallerDescription( $callerOffset );
 
-               // Check to see if there was already a deprecation notice, so not to
-               // get a duplicate warning
-               $logCount = count( self::$log );
-               $caller = wfGetCaller( $callerOffset + 1 );
-               if ( $logCount ) {
-                       $lastLog = self::$log[ $logCount - 1 ];
-                       if ( $lastLog['type'] == 'deprecated' && $lastLog['caller'] == $caller ) {
-                               return;
-                       }
-               }
+               self::sendWarning( $msg, $callerDescription, $level );
 
-               self::$log[] = array(
-                       'msg' => htmlspecialchars( $msg ),
-                       'type' => 'warn',
-                       'caller' => $caller,
-               );
+               if ( self::$enabled ) {
+                       self::$log[] = array(
+                               'msg' => htmlspecialchars( $msg ),
+                               'type' => 'warn',
+                               'caller' => $callerDescription['func'],
+                       );
+               }
        }
 
        /**
-        * Adds a depreciation entry to the log, along with a backtrace
+        * Show a warning that $function is deprecated.
+        * This will send it to the following locations:
+        * - Debug toolbar, with one item per function and caller, if $wgDebugToolbar
+        *   is set to true.
+        * - PHP's error log, with level E_USER_DEPRECATED, if $wgDevelopmentWarnings
+        *   is set to true.
+        * - MediaWiki's debug log, if $wgDevelopmentWarnings is set to false.
         *
         * @since 1.19
-        * @param $function
-        * @param $version
-        * @param $component
+        * @param $function string: Function that is deprecated.
+        * @param $version string|bool: Version in which the function was deprecated.
+        * @param $component string|bool: Component to which the function belongs.
+        *     If false, it is assumbed the function is in MediaWiki core.
+        * @param $callerOffset integer: How far up the callstack is the original
+        *    caller. 2 = function that called the function that called
+        *    MWDebug::deprecated() (Added in 1.20).
         * @return mixed
         */
-       public static function deprecated( $function, $version, $component ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+       public static function deprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
+               $callerDescription = self::getCallerDescription( $callerOffset );
+               $callerFunc = $callerDescription['func'];
 
-               // Chain: This function -> wfDeprecated -> deprecatedFunction -> caller
-               $caller = wfGetCaller( 4 );
+               $sendToLog = true;
 
                // Check to see if there already was a warning about this function
-               $functionString = "$function-$caller";
-               if ( in_array( $functionString, self::$deprecationWarnings ) ) {
+               if ( isset( self::$deprecationWarnings[$function][$callerFunc] ) ) {
                        return;
+               } elseif ( isset( self::$deprecationWarnings[$function] ) ) {
+                       if ( self::$enabled ) {
+                               $sendToLog = false;
+                       } else {
+                               return;
+                       }
                }
 
-               $version = $version === false ? '(unknown version)' : $version;
-               $component = $component === false ? 'MediaWiki' : $component;
-               $msg = htmlspecialchars( "Use of function $function was deprecated in $component $version" );
-               $msg .= Html::rawElement( 'div', array( 'class' => 'mw-debug-backtrace' ),
-                       Html::element( 'span', array(), 'Backtrace:' )
-                        . wfBacktrace()
-               );
+               self::$deprecationWarnings[$function][$callerFunc] = true;
 
-               self::$deprecationWarnings[] = $functionString;
-               self::$log[] = array(
-                       'msg' => $msg,
-                       'type' => 'deprecated',
-                       'caller' => $caller,
-               );
+               if ( $version ) {
+                       global $wgDeprecationReleaseLimit;
+                       if ( $wgDeprecationReleaseLimit && $component === false ) {
+                               # Strip -* off the end of $version so that branches can use the
+                               # format #.##-branchname to avoid issues if the branch is merged into
+                               # a version of MediaWiki later than what it was branched from
+                               $comparableVersion = preg_replace( '/-.*$/', '', $version );
+
+                               # If the comparableVersion is larger than our release limit then
+                               # skip the warning message for the deprecation
+                               if ( version_compare( $wgDeprecationReleaseLimit, $comparableVersion, '<' ) ) {
+                                       $sendToLog = false;
+                               }
+                       }
+
+                       $component = $component === false ? 'MediaWiki' : $component;
+                       $msg = "Use of $function was deprecated in $component $version.";
+               } else {
+                       $msg = "Use of $function is deprecated.";
+               }
+
+               if ( $sendToLog ) {
+                       self::sendWarning( $msg, $callerDescription, E_USER_DEPRECATED );
+               }
+
+               if ( self::$enabled ) {
+                       $logMsg = htmlspecialchars( $msg ) .
+                               Html::rawElement( 'div', array( 'class' => 'mw-debug-backtrace' ),
+                                       Html::element( 'span', array(), 'Backtrace:' ) . wfBacktrace()
+                               );
+
+                       self::$log[] = array(
+                               'msg' => $logMsg,
+                               'type' => 'deprecated',
+                               'caller' => $callerFunc,
+                       );
+               }
+       }
+
+       /**
+        * Get an array describing the calling function at a specified offset.
+        *
+        * @param $callerOffset integer: How far up the callstack is the original
+        *    caller. 0 = function that called getCallerDescription()
+        * @return array with two keys: 'file' and 'func'
+        */
+       private static function getCallerDescription( $callerOffset ) {
+               $callers = wfDebugBacktrace();
+
+               if ( isset( $callers[$callerOffset] ) ) {
+                       $callerfile = $callers[$callerOffset];
+                       if ( isset( $callerfile['file'] ) && isset( $callerfile['line'] ) ) {
+                               $file = $callerfile['file'] . ' at line ' . $callerfile['line'];
+                       } else {
+                               $file = '(internal function)';
+                       }
+               } else {
+                       $file = '(unknown location)';
+               }
+
+               if ( isset( $callers[$callerOffset + 1] ) ) {
+                       $callerfunc = $callers[$callerOffset + 1];
+                       $func = '';
+                       if ( isset( $callerfunc['class'] ) ) {
+                               $func .= $callerfunc['class'] . '::';
+                       }
+                       if ( isset( $callerfunc['function'] ) ) {
+                               $func .= $callerfunc['function'];
+                       }
+               } else {
+                       $func = 'unknown';
+               }
+
+               return array( 'file' => $file, 'func' => $func );
+       }
+
+       /**
+        * Send a warning either to the debug log or by triggering an user PHP
+        * error depending on $wgDevelopmentWarnings.
+        *
+        * @param $msg string Message to send
+        * @param $caller array caller description get from getCallerDescription()
+        * @param $level error level to use if $wgDevelopmentWarnings is true
+        */
+       private static function sendWarning( $msg, $caller, $level ) {
+               global $wgDevelopmentWarnings;
+
+               $msg .= ' [Called from ' . $caller['func'] . ' in ' . $caller['file'] . ']';
+
+               if ( $wgDevelopmentWarnings ) {
+                       trigger_error( $msg, $level );
+               } else {
+                       wfDebug( "$msg\n" );
+               }
        }
 
        /**
@@ -207,11 +293,11 @@ class MWDebug {
         * @param $str string
         */
        public static function debugMsg( $str ) {
-               if ( !self::$enabled ) {
-                       return;
-               }
+               global $wgDebugComments, $wgShowDebug;
 
-               self::$debug[] = trim( $str );
+               if ( self::$enabled || $wgDebugComments || $wgShowDebug ) {
+                       self::$debug[] = rtrim( $str );
+               }
        }
 
        /**
@@ -283,22 +369,91 @@ class MWDebug {
         * @return string
         */
        public static function getDebugHTML( IContextSource $context ) {
-               if ( !self::$enabled ) {
+               global $wgDebugComments;
+
+               $html = '';
+
+               if ( self::$enabled ) {
+                       MWDebug::log( 'MWDebug output complete' );
+                       $debugInfo = self::getDebugInfo( $context );
+
+                       // Cannot use OutputPage::addJsConfigVars because those are already outputted
+                       // by the time this method is called.
+                       $html = Html::inlineScript(
+                               ResourceLoader::makeLoaderConditionalScript(
+                                       ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
+                               )
+                       );
+               }
+
+               if ( $wgDebugComments ) {
+                       $html .= "<!-- Debug output:\n" .
+                               htmlspecialchars( implode( "\n", self::$debug ) ) .
+                               "\n\n-->";
+               }
+
+               return $html;
+       }
+
+       /**
+        * Generate debug log in HTML for displaying at the bottom of the main
+        * content area.
+        * If $wgShowDebug is false, an empty string is always returned.
+        *
+        * @since 1.20
+        * @return string HTML fragment
+        */
+       public static function getHTMLDebugLog() {
+               global $wgDebugTimestamps, $wgShowDebug;
+
+               if ( !$wgShowDebug ) {
                        return '';
                }
 
-               MWDebug::log( 'MWDebug output complete' );
-               $debugInfo = self::getDebugInfo( $context );
+               $curIdent = 0;
+               $ret = "\n<hr />\n<strong>Debug data:</strong><ul id=\"mw-debug-html\">\n<li>";
 
-               // Cannot use OutputPage::addJsConfigVars because those are already outputted
-               // by the time this method is called.
-               $html = Html::inlineScript(
-                       ResourceLoader::makeLoaderConditionalScript(
-                               ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
-                       )
-               );
+               foreach ( self::$debug as $line ) {
+                       $pre = '';
+                       if ( $wgDebugTimestamps ) {
+                               $matches = array();
+                               if ( preg_match( '/^(\d+\.\d+ {1,3}\d+.\dM\s{2})/', $line, $matches ) ) {
+                                       $pre = $matches[1];
+                                       $line = substr( $line, strlen( $pre ) );
+                               }
+                       }
+                       $display = ltrim( $line );
+                       $ident = strlen( $line ) - strlen( $display );
+                       $diff = $ident - $curIdent;
 
-               return $html;
+                       $display = $pre . $display;
+                       if ( $display == '' ) {
+                               $display = "\xc2\xa0";
+                       }
+
+                       if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
+                               $ident = $curIdent;
+                               $diff = 0;
+                               $display = '<span style="background:yellow;">' . nl2br( htmlspecialchars( $display ) ) . '</span>';
+                       } else {
+                               $display = nl2br( htmlspecialchars( $display ) );
+                       }
+
+                       if ( $diff < 0 ) {
+                               $ret .= str_repeat( "</li></ul>\n", -$diff ) . "</li><li>\n";
+                       } elseif ( $diff == 0 ) {
+                               $ret .= "</li><li>\n";
+                       } else {
+                               $ret .= str_repeat( "<ul><li>\n", $diff );
+                       }
+                       $ret .= "<tt>$display</tt>\n";
+
+                       $curIdent = $ident;
+               }
+
+               $ret .= str_repeat( '</li></ul>', $curIdent ) . "</li>\n</ul>\n";
+
+               return $ret;
        }
 
        /**
index d9092da..18dcfe9 100644 (file)
@@ -38,7 +38,7 @@ class DifferenceEngine extends ContextSource {
         * @private
         */
        var $mOldid, $mNewid;
-       var $mOldtext, $mNewtext;
+       var $mOldContent, $mNewContent;
        protected $mDiffLang;
 
        /**
@@ -224,6 +224,10 @@ class DifferenceEngine extends ContextSource {
                # we'll use the application/x-external-editor interface to call
                # an external diff tool like kompare, kdiff3, etc.
                if ( ExternalEdit::useExternalEngine( $this->getContext(), 'diff' ) ) {
+                       //TODO: come up with a good solution for non-text content here.
+                       //      at least, the content format needs to be passed to the client somehow.
+                       //      Currently, action=raw will just fail for non-text content.
+
                        $urls = array(
                                'File' => array( 'Extension' => 'wiki', 'URL' =>
                                        # This should be mOldPage, but it may not be set, see below.
@@ -510,19 +514,21 @@ class DifferenceEngine extends ContextSource {
                        $out->setRevisionTimestamp( $this->mNewRev->getTimestamp() );
                        $out->setArticleFlag( true );
 
+                       // NOTE: only needed for B/C: custom rendering of JS/CSS via hook
                        if ( $this->mNewPage->isCssJsSubpage() || $this->mNewPage->isCssOrJsPage() ) {
                                // Stolen from Article::view --AG 2007-10-11
                                // Give hooks a chance to customise the output
                                // @TODO: standardize this crap into one function
-                               if ( wfRunHooks( 'ShowRawCssJs', array( $this->mNewtext, $this->mNewPage, $out ) ) ) {
-                                       // Wrap the whole lot in a <pre> and don't parse
-                                       $m = array();
-                                       preg_match( '!\.(css|js)$!u', $this->mNewPage->getText(), $m );
-                                       $out->addHTML( "<pre class=\"mw-code mw-{$m[1]}\" dir=\"ltr\">\n" );
-                                       $out->addHTML( htmlspecialchars( $this->mNewtext ) );
-                                       $out->addHTML( "\n</pre>\n" );
+                               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() );
                                }
-                       } elseif ( !wfRunHooks( 'ArticleViewCustom', array( $this->mNewtext, $this->mNewPage, $out ) ) ) {
+                       } elseif( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                               // Handled by extension
+                       } elseif( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                               // NOTE: deprecated hook, B/C only
                                // Handled by extension
                        } else {
                                // Normal page
@@ -536,15 +542,7 @@ class DifferenceEngine extends ContextSource {
                                        $wikiPage = WikiPage::factory( $this->mNewPage );
                                }
 
-                               $parserOptions = ParserOptions::newFromContext( $this->getContext() );
-                               $parserOptions->enableLimitReport();
-                               $parserOptions->setTidy( true );
-
-                               if ( !$this->mNewRev->isCurrent() ) {
-                                       $parserOptions->setEditSection( false );
-                               }
-
-                               $parserOutput = $wikiPage->getParserOutput( $parserOptions, $this->mNewid );
+                               $parserOutput = $this->getParserOutput( $wikiPage, $this->mNewRev );
 
                                # WikiPage::getParserOutput() should not return false, but just in case
                                if( $parserOutput ) {
@@ -558,6 +556,17 @@ class DifferenceEngine extends ContextSource {
                wfProfileOut( __METHOD__ );
        }
 
+       protected function getParserOutput( WikiPage $page, Revision $rev ) {
+               $parserOptions = $page->makeParserOptions( $this->getContext() );
+
+               if ( !$rev->isCurrent() || !$rev->getTitle()->quickUserCan( "edit" ) ) {
+                       $parserOptions->setEditSection( false );
+               }
+
+               $parserOutput = $page->getParserOutput( $parserOptions, $rev->getId() );
+               return $parserOutput;
+       }
+
        /**
         * Get the diff text, send it to the OutputPage object
         * Returns false if the diff could not be generated, otherwise returns true
@@ -654,7 +663,7 @@ class DifferenceEngine extends ContextSource {
                        return false;
                }
 
-               $difftext = $this->generateDiffBody( $this->mOldtext, $this->mNewtext );
+               $difftext = $this->generateContentDiffBody( $this->mOldContent, $this->mNewContent );
 
                // Save to cache for 7 days
                if ( !wfRunHooks( 'AbortDiffCache', array( &$this ) ) ) {
@@ -691,14 +700,56 @@ class DifferenceEngine extends ContextSource {
                }
        }
 
+       /**
+        * Generate a diff, no caching.
+        *
+        * Subclasses may override this to provide a
+        *
+        * @param $old Content: old content
+        * @param $new Content: new content
+        *
+        * @since 1.21
+        */
+       function generateContentDiffBody( Content $old, Content $new ) {
+               if ( !( $old instanceof TextContent ) ) {
+                       throw new MWException( "Diff not implemented for " . get_class( $old ) . "; "
+                                       . "override generateContentDiffBody to fix this." );
+               }
+
+               if ( !( $new instanceof TextContent ) ) {
+                       throw new MWException( "Diff not implemented for " . get_class( $new ) . "; "
+                               . "override generateContentDiffBody to fix this." );
+               }
+
+               $otext = $old->serialize();
+               $ntext = $new->serialize();
+
+               return $this->generateTextDiffBody( $otext, $ntext );
+       }
+
        /**
         * Generate a diff, no caching
         *
         * @param $otext String: old text, must be already segmented
         * @param $ntext String: new text, must be already segmented
-        * @return bool|string
+        * @deprecated since 1.21, use generateContentDiffBody() instead!
         */
        function generateDiffBody( $otext, $ntext ) {
+               wfDeprecated( __METHOD__, "1.21" );
+
+               return $this->generateTextDiffBody( $otext, $ntext );
+       }
+
+       /**
+        * Generate a diff, no caching
+        *
+        * @todo move this to TextDifferenceEngine, make DifferenceEngine abstract. At some point.
+        *
+        * @param $otext String: old text, must be already segmented
+        * @param $ntext String: new text, must be already segmented
+        * @return bool|string
+        */
+       function generateTextDiffBody( $otext, $ntext ) {
                global $wgExternalDiffEngine, $wgContLang;
 
                wfProfileIn( __METHOD__ );
@@ -861,7 +912,7 @@ class DifferenceEngine extends ContextSource {
         *        the visibility of the revision and a link to edit the page.
         * @return String HTML fragment
         */
-       private function getRevisionHeader( Revision $rev, $complete = '' ) {
+       protected function getRevisionHeader( Revision $rev, $complete = '' ) {
                $lang = $this->getLanguage();
                $user = $this->getUser();
                $revtimestamp = $rev->getTimestamp();
@@ -917,7 +968,7 @@ class DifferenceEngine extends ContextSource {
 
                if ( !$diff && !$otitle ) {
                        $header .= "
-                       <tr valign='top'>
+                       <tr style='vertical-align: top;'>
                        <td class='diff-ntitle'>{$ntitle}</td>
                        </tr>";
                        $multiColspan = 1;
@@ -935,17 +986,17 @@ class DifferenceEngine extends ContextSource {
                                $multiColspan = 2;
                        }
                        $header .= "
-                       <tr valign='top'>
+                       <tr style='vertical-align: top;'>
                        <td colspan='$colspan' class='diff-otitle'>{$otitle}</td>
                        <td colspan='$colspan' class='diff-ntitle'>{$ntitle}</td>
                        </tr>";
                }
 
                if ( $multi != '' ) {
-                       $header .= "<tr><td colspan='{$multiColspan}' align='center' class='diff-multi'>{$multi}</td></tr>";
+                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;' class='diff-multi'>{$multi}</td></tr>";
                }
                if ( $notice != '' ) {
-                       $header .= "<tr><td colspan='{$multiColspan}' align='center'>{$notice}</td></tr>";
+                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;'>{$notice}</td></tr>";
                }
 
                return $header . $diff . "</table>";
@@ -953,10 +1004,25 @@ class DifferenceEngine extends ContextSource {
 
        /**
         * Use specified text instead of loading from the database
+        * @deprecated since 1.21, use setContent() instead.
         */
        function setText( $oldText, $newText ) {
-               $this->mOldtext = $oldText;
-               $this->mNewtext = $newText;
+               wfDeprecated( __METHOD__, "1.21" );
+
+               $oldContent = ContentHandler::makeContent( $oldText, $this->getTitle() );
+               $newContent = ContentHandler::makeContent( $newText, $this->getTitle() );
+
+               $this->setContent( $oldContent, $newContent );
+       }
+
+       /**
+        * Use specified text instead of loading from the database
+        * @since 1.21
+        */
+       function setContent( Content $oldContent, Content $newContent ) {
+               $this->mOldContent = $oldContent;
+               $this->mNewContent = $newContent;
+
                $this->mTextLoaded = 2;
                $this->mRevisionsLoaded = true;
        }
@@ -1084,14 +1150,14 @@ class DifferenceEngine extends ContextSource {
                        return false;
                }
                if ( $this->mOldRev ) {
-                       $this->mOldtext = $this->mOldRev->getText( Revision::FOR_THIS_USER );
-                       if ( $this->mOldtext === false ) {
+                       $this->mOldContent = $this->mOldRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+                       if ( $this->mOldContent === false ) {
                                return false;
                        }
                }
                if ( $this->mNewRev ) {
-                       $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER );
-                       if ( $this->mNewtext === false ) {
+                       $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+                       if ( $this->mNewContent === false ) {
                                return false;
                        }
                }
@@ -1112,7 +1178,7 @@ class DifferenceEngine extends ContextSource {
                if ( !$this->loadRevisionData() ) {
                        return false;
                }
-               $this->mNewtext = $this->mNewRev->getText( Revision::FOR_THIS_USER );
+               $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
                return true;
        }
 }
index a0befd6..0922919 100644 (file)
@@ -644,7 +644,7 @@ class FSFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getFileListInternal()
-        * @return array|FSFileBackendFileList|null
+        * @return Array|FSFileBackendFileList|null
         */
        public function getFileListInternal( $fullCont, $dirRel, array $params ) {
                list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -662,44 +662,56 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
-        * @see FileBackendStore::getLocalReference()
-        * @return FSFile|null
+        * @see FileBackendStore::doGetLocalReferenceMulti()
+        * @return Array
         */
-       public function getLocalReference( array $params ) {
-               $source = $this->resolveToFSPath( $params['src'] );
-               if ( $source === null ) {
-                       return null;
+       protected function doGetLocalReferenceMulti( array $params ) {
+               $fsFiles = array(); // (path => FSFile)
+
+               foreach ( $params['srcs'] as $src ) {
+                       $source = $this->resolveToFSPath( $src );
+                       if ( $source === null ) {
+                               $fsFiles[$src] = null; // invalid path
+                       } else {
+                               $fsFiles[$src] = new FSFile( $source );
+                       }
                }
-               return new FSFile( $source );
+
+               return $fsFiles;
        }
 
        /**
-        * @see FileBackendStore::getLocalCopy()
-        * @return null|TempFSFile
+        * @see FileBackendStore::doGetLocalCopyMulti()
+        * @return Array
         */
-       public function getLocalCopy( array $params ) {
-               $source = $this->resolveToFSPath( $params['src'] );
-               if ( $source === null ) {
-                       return null;
-               }
+       protected function doGetLocalCopyMulti( array $params ) {
+               $tmpFiles = array(); // (path => TempFSFile)
 
-               // Create a new temporary file with the same extension...
-               $ext = FileBackend::extensionFromPath( $params['src'] );
-               $tmpFile = TempFSFile::factory( wfBaseName( $source ) . '_', $ext );
-               if ( !$tmpFile ) {
-                       return null;
-               }
-               $tmpPath = $tmpFile->getPath();
-
-               // Copy the source file over the temp file
-               $ok = copy( $source, $tmpPath );
-               if ( !$ok ) {
-                       return null;
+               foreach ( $params['srcs'] as $src ) {
+                       $source = $this->resolveToFSPath( $src );
+                       if ( $source === null ) {
+                               $tmpFiles[$src] = null; // invalid path
+                       } else {
+                               // Create a new temporary file with the same extension...
+                               $ext = FileBackend::extensionFromPath( $src );
+                               $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
+                               if ( !$tmpFile ) {
+                                       $tmpFiles[$src] = null;
+                               } else {
+                                       $tmpPath = $tmpFile->getPath();
+                                       // Copy the source file over the temp file
+                                       $ok = copy( $source, $tmpPath );
+                                       if ( !$ok ) {
+                                               $tmpFiles[$src] = null;
+                                       } else {
+                                               $this->chmod( $tmpPath );
+                                               $tmpFiles[$src] = $tmpFile;
+                                       }
+                               }
+                       }
                }
 
-               $this->chmod( $tmpPath );
-
-               return $tmpFile;
+               return $tmpFiles;
        }
 
        /**
index 4b707fc..1136fc2 100644 (file)
@@ -39,8 +39,7 @@
  * All "storage paths" are of the format "mwstore://<backend>/<container>/<path>".
  * The "<path>" portion is a relative path that uses UNIX file system (FS)
  * notation, though any particular backend may not actually be using a local
- * filesystem.
- * Therefore, the relative paths are only virtual.
+ * filesystem. Therefore, the relative paths are only virtual.
  *
  * Backend contents are stored under wiki-specific container names by default.
  * For legacy reasons, this has no effect for the FS backend class, and per-wiki
@@ -51,7 +50,7 @@
  * backends with virtual directories may not have this limitation. Callers should
  * store files in such a way that no files and directories are under the same path.
  *
- * Methods should avoid throwing exceptions at all costs.
+ * Methods of subclasses should avoid throwing exceptions at all costs.
  * As a corollary, external dependencies should be kept to a minimum.
  *
  * @ingroup FileBackend
@@ -129,6 +128,17 @@ abstract class FileBackend {
                return $this->name;
        }
 
+       /**
+        * Get the wiki identifier used for this backend (possibly empty).
+        * Note that this might *not* be in the same format as wfWikiID().
+        *
+        * @return string
+        * @since 1.20
+        */
+       final public function getWikiId() {
+               return $this->wikiId;
+       }
+
        /**
         * Check if this backend is read-only
         *
@@ -171,7 +181,8 @@ abstract class FileBackend {
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     );
         * @endcode
         *
@@ -182,7 +193,8 @@ abstract class FileBackend {
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -193,7 +205,8 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -204,7 +217,8 @@ abstract class FileBackend {
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
-        *         'overwriteSame'       => <boolean>
+        *         'overwriteSame'       => <boolean>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         *
@@ -231,6 +245,10 @@ 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
+        *                           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).
         *
         * $opts is an associative of boolean flags, including:
         *   - force               : Operation precondition errors no longer trigger an abort.
@@ -246,6 +264,9 @@ abstract class FileBackend {
         *                           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).
+        *   - 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).
         *
         * @remarks Remarks on locking:
         * File system paths given to operations should refer to files that are
@@ -274,16 +295,6 @@ abstract class FileBackend {
                        unset( $opts['nonLocking'] );
                        unset( $opts['allowStale'] );
                }
-               $opts['concurrency'] = 1; // off
-               if ( $this->parallelize === 'implicit' ) {
-                       if ( !isset( $opts['parallelize'] ) || $opts['parallelize'] ) {
-                               $opts['concurrency'] = $this->concurrency;
-                       }
-               } elseif ( $this->parallelize === 'explicit' ) {
-                       if ( !empty( $opts['parallelize'] ) ) {
-                               $opts['concurrency'] = $this->concurrency;
-                       }
-               }
                return $this->doOperationsInternal( $ops, $opts );
        }
 
@@ -397,7 +408,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
-        *         'content'             => <string of new file contents>
+        *         'content'             => <string of new file contents>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * b) Copy a file system file into storage
@@ -405,7 +417,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * c) Copy a file within storage
@@ -413,7 +426,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'copy',
         *         'src'                 => <storage path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * d) Move a file within storage
@@ -421,7 +435,8 @@ abstract class FileBackend {
         *     array(
         *         'op'                  => 'move',
         *         'src'                 => <storage path>,
-        *         'dst'                 => <storage path>
+        *         'dst'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
         * e) Delete a file within storage
@@ -442,6 +457,10 @@ abstract class FileBackend {
         * @par Boolean flags for operations (operation-specific):
         *   - ignoreMissingSource : The operation will simply succeed and do
         *                           nothing if the source file does not exist.
+        *   - disposition         : When supplied, the backend will add 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).
         *
         * $opts is an associative of boolean flags, including:
         *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20)
@@ -565,8 +584,9 @@ abstract class FileBackend {
         *
         * @param $params Array Operation parameters
         * $params include:
-        *   - srcs : ordered source storage paths (e.g. chunk1, chunk2, ...)
-        *   - dst  : file system path to 0-byte temp file
+        *   - srcs        : ordered source storage paths (e.g. chunk1, chunk2, ...)
+        *   - dst         : file system path to 0-byte temp file
+        *   - parallelize : try to do operations in parallel when possible
         * @return Status
         */
        abstract public function concatenate( array $params );
@@ -658,7 +678,7 @@ abstract class FileBackend {
        /**
         * Delete a storage directory if it is empty.
         * Backends using key/value stores may do nothing unless the directory
-        * is that of an empty container, in which case it should be deleted.
+        * is that of an empty container, in which case it will be deleted.
         *
         * @param $params Array
         * $params include:
@@ -712,7 +732,29 @@ abstract class FileBackend {
         *   - latest : use the latest available data
         * @return string|bool Returns false on failure
         */
-       abstract public function getFileContents( array $params );
+       final public function getFileContents( array $params ) {
+               $contents = $this->getFileContentsMulti(
+                       array( 'srcs' => array( $params['src'] ) ) + $params );
+
+               return $contents[$params['src']];
+       }
+
+       /**
+        * Like getFileContents() except it takes an array of storage paths
+        * and returns a map of storage paths to strings (or null on failure).
+        * The map keys (paths) are in the same order as the provided list of paths.
+        *
+        * @see FileBackend::getFileContents()
+        *
+        * @param $params Array
+        * $params include:
+        *   - srcs        : list of source storage paths
+        *   - latest      : use the latest available data
+        *   - parallelize : try to do operations in parallel when possible
+        * @return Array Map of (path name => string or false on failure)
+        * @since 1.20
+        */
+       abstract public function getFileContentsMulti( array $params );
 
        /**
         * Get the size (bytes) of a file at a storage path in the backend.
@@ -766,15 +808,15 @@ abstract class FileBackend {
 
        /**
         * Stream the file at a storage path in the backend.
-        * If the file does not exists, a 404 error will be given.
+        * If the file does not exists, an HTTP 404 error will be given.
         * Appropriate HTTP headers (Status, Content-Type, Content-Length)
-        * must be sent if streaming began, while none should be sent otherwise.
+        * will be sent if streaming began, while none will be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
         * @param $params Array
         * $params include:
         *   - src     : source storage path
-        *   - headers : additional HTTP headers to send on success
+        *   - headers : list of additional HTTP headers to send on success
         *   - latest  : use the latest available data
         * @return Status
         */
@@ -799,7 +841,29 @@ abstract class FileBackend {
         *   - latest : use the latest available data
         * @return FSFile|null Returns null on failure
         */
-       abstract public function getLocalReference( array $params );
+       final public function getLocalReference( array $params ) {
+               $fsFiles = $this->getLocalReferenceMulti(
+                       array( 'srcs' => array( $params['src'] ) ) + $params );
+
+               return $fsFiles[$params['src']];
+       }
+
+       /**
+        * Like getLocalReference() except it takes an array of storage paths
+        * and returns a map of storage paths to FSFile objects (or null on failure).
+        * The map keys (paths) are in the same order as the provided list of paths.
+        *
+        * @see FileBackend::getLocalReference()
+        *
+        * @param $params Array
+        * $params include:
+        *   - srcs        : list of source storage paths
+        *   - latest      : use the latest available data
+        *   - parallelize : try to do operations in parallel when possible
+        * @return Array Map of (path name => FSFile or null on failure)
+        * @since 1.20
+        */
+       abstract public function getLocalReferenceMulti( array $params );
 
        /**
         * Get a local copy on disk of the file at a storage path in the backend.
@@ -812,7 +876,29 @@ abstract class FileBackend {
         *   - latest : use the latest available data
         * @return TempFSFile|null Returns null on failure
         */
-       abstract public function getLocalCopy( array $params );
+       final public function getLocalCopy( array $params ) {
+               $tmpFiles = $this->getLocalCopyMulti(
+                       array( 'srcs' => array( $params['src'] ) ) + $params );
+
+               return $tmpFiles[$params['src']];
+       }
+
+       /**
+        * Like getLocalCopy() except it takes an array of storage paths and
+        * returns a map of storage paths to TempFSFile objects (or null on failure).
+        * The map keys (paths) are in the same order as the provided list of paths.
+        *
+        * @see FileBackend::getLocalCopy()
+        *
+        * @param $params Array
+        * $params include:
+        *   - srcs        : list of source storage paths
+        *   - latest      : use the latest available data
+        *   - parallelize : try to do operations in parallel when possible
+        * @return Array Map of (path name => TempFSFile or null on failure)
+        * @since 1.20
+        */
+       abstract public function getLocalCopyMulti( array $params );
 
        /**
         * Check if a directory exists at a given storage path.
@@ -832,10 +918,10 @@ abstract class FileBackend {
        /**
         * Get an iterator to list *all* directories under a storage directory.
         * If the directory is of the form "mwstore://backend/container",
-        * then all directories in the container should be listed.
+        * then all directories in the container will be listed.
         * If the directory is of form "mwstore://backend/container/dir",
-        * then all directories directly under that directory should be listed.
-        * Results should be storage directories relative to the given directory.
+        * then all directories directly under that directory will be listed.
+        * Results will be storage directories relative to the given directory.
         *
         * Storage backends with eventual consistency might return stale data.
         *
@@ -867,10 +953,10 @@ abstract class FileBackend {
        /**
         * Get an iterator to list *all* stored files under a storage directory.
         * If the directory is of the form "mwstore://backend/container",
-        * then all files in the container should be listed.
+        * then all files in the container will be listed.
         * If the directory is of form "mwstore://backend/container/dir",
-        * then all files under that directory should be listed.
-        * Results should be storage paths relative to the given directory.
+        * then all files under that directory will be listed.
+        * Results will be storage paths relative to the given directory.
         *
         * Storage backends with eventual consistency might return stale data.
         *
@@ -899,7 +985,16 @@ abstract class FileBackend {
        }
 
        /**
-        * Invalidate any in-process file existence and property cache.
+        * Preload persistent file stat and property cache into in-process cache.
+        * This should be used when stat calls will be made on a known list of a many files.
+        *
+        * @param $paths Array Storage paths
+        * @return void
+        */
+       public function preloadCache( array $paths ) {}
+
+       /**
+        * Invalidate any in-process file stat and property cache.
         * If $paths is given, then only the cache for those files will be cleared.
         *
         * @param $paths Array Storage paths (optional)
@@ -1077,6 +1172,31 @@ abstract class FileBackend {
                return ( self::normalizeContainerPath( $path ) !== null );
        }
 
+       /**
+        * Build a Content-Disposition header value per RFC 6266.
+        *
+        * @param $type string One of (attachment, inline)
+        * @param $filename string Suggested file name (should not contain slashes)
+        * @throws MWException
+        * @return string
+        * @since 1.20
+        */
+       final public static function makeContentDisposition( $type, $filename = '' ) {
+               $parts = array();
+
+               $type = strtolower( $type );
+               if ( !in_array( $type, array( 'inline', 'attachment' ) ) ) {
+                       throw new MWException( "Invalid Content-Disposition type '$type'." );
+               }
+               $parts[] = $type;
+
+               if ( strlen( $filename ) ) {
+                       $parts[] = "filename*=UTF-8''" . rawurlencode( basename( $filename ) );
+               }
+
+               return implode( ';', $parts );
+       }
+
        /**
         * Validate and normalize a relative storage path.
         * Null is returned if the path involves directory traversal.
index 0c8968a..90292ee 100644 (file)
@@ -44,6 +44,8 @@ class FileBackendMultiWrite extends FileBackend {
        protected $backends = array(); // array of (backend index => backends)
        protected $masterIndex = -1; // integer; index of master backend
        protected $syncChecks = 0; // integer; bitfield
+       protected $autoResync = false; // boolean
+
        /** @var Array */
        protected $noPushDirConts = array();
        protected $noPushQuickOps = false; // boolean
@@ -70,6 +72,9 @@ class FileBackendMultiWrite extends FileBackend {
         *                      Possible bits include the FileBackendMultiWrite::CHECK_* constants.
         *                      There are constants for SIZE, TIME, and SHA1.
         *                      The checks are done before allowing any file operations.
+        *   - autoResync     : Automatically resync the clone backends to the master backend
+        *                      when pre-operation sync checks fail. This should only be used
+        *                      if the master backend is stable and not missing any files.
         *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
         *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
         *
@@ -81,6 +86,7 @@ class FileBackendMultiWrite extends FileBackend {
                $this->syncChecks = isset( $config['syncChecks'] )
                        ? $config['syncChecks']
                        : self::CHECK_SIZE;
+               $this->autoResync = !empty( $config['autoResync'] );
                $this->noPushQuickOps = isset( $config['noPushQuickOps'] )
                        ? $config['noPushQuickOps']
                        : false;
@@ -151,19 +157,38 @@ class FileBackendMultiWrite extends FileBackend {
                }
                // Clear any cache entries (after locks acquired)
                $this->clearCache();
-               // Do a consistency check to see if the backends agree
-               $status->merge( $this->consistencyCheck( $this->fileStoragePathsForOps( $ops ) ) );
+               $opts['preserveCache'] = true; // only locked files are cached
+               // Get the list of paths to read/write...
+               $relevantPaths = $this->fileStoragePathsForOps( $ops );
+               // Check if the paths are valid and accessible on all backends...
+               $status->merge( $this->accessibilityCheck( $relevantPaths ) );
                if ( !$status->isOK() ) {
                        return $status; // abort
                }
+               // Do a consistency check to see if the backends are consistent...
+               $syncStatus = $this->consistencyCheck( $relevantPaths );
+               if ( !$syncStatus->isOK() ) {
+                       wfDebugLog( 'FileOperation', get_class( $this ) .
+                               " failed sync check: " . FormatJson::encode( $relevantPaths ) );
+                       // Try to resync the clone backends to the master on the spot...
+                       if ( !$this->autoResync || !$this->resyncFiles( $relevantPaths )->isOK() ) {
+                               $status->merge( $syncStatus );
+                               return $status; // abort
+                       }
+               }
                // Actually attempt the operation batch on the master backend...
                $masterStatus = $mbe->doOperations( $realOps, $opts );
                $status->merge( $masterStatus );
-               // Propagate the operations to the clone backends...
-               foreach ( $this->backends as $index => $backend ) {
-                       if ( $index !== $this->masterIndex ) { // not done already
-                               $realOps = $this->substOpBatchPaths( $ops, $backend );
-                               $status->merge( $backend->doOperations( $realOps, $opts ) );
+               // Propagate the operations to the clone backends if there were no unexpected errors
+               // and if there were either no expected errors or if the 'force' option was used.
+               // However, if nothing succeeded at all, then don't replicate any of the operations.
+               // If $ops only had one operation, this might avoid backend sync inconsistencies.
+               if ( $masterStatus->isOK() && $masterStatus->successCount > 0 ) {
+                       foreach ( $this->backends as $index => $backend ) {
+                               if ( $index !== $this->masterIndex ) { // not done already
+                                       $realOps = $this->substOpBatchPaths( $ops, $backend );
+                                       $status->merge( $backend->doOperations( $realOps, $opts ) );
+                               }
                        }
                }
                // Make 'success', 'successCount', and 'failCount' fields reflect
@@ -189,7 +214,7 @@ class FileBackendMultiWrite extends FileBackend {
                }
 
                $mBackend = $this->backends[$this->masterIndex];
-               foreach ( array_unique( $paths ) as $path ) {
+               foreach ( $paths as $path ) {
                        $params = array( 'src' => $path, 'latest' => true );
                        $mParams = $this->substOpPaths( $params, $mBackend );
                        // Stat the file on the 'master' backend
@@ -199,8 +224,7 @@ class FileBackendMultiWrite extends FileBackend {
                        } else {
                                $mSha1 = false;
                        }
-                       $mUsable = $mBackend->isPathUsableInternal( $mParams['src'] );
-                       // Check of all clone backends agree with the master...
+                       // Check if all clone backends agree with the master...
                        foreach ( $this->backends as $index => $cBackend ) {
                                if ( $index === $this->masterIndex ) {
                                        continue; // master
@@ -237,8 +261,29 @@ class FileBackendMultiWrite extends FileBackend {
                                                $status->fatal( 'backend-fail-synced', $path );
                                        }
                                }
-                               if ( $mUsable !== $cBackend->isPathUsableInternal( $cParams['src'] ) ) {
-                                       $status->fatal( 'backend-fail-synced', $path );
+                       }
+               }
+
+               return $status;
+       }
+
+       /**
+        * Check that a set of file paths are usable across all internal backends
+        *
+        * @param $paths Array List of storage paths
+        * @return Status
+        */
+       public function accessibilityCheck( array $paths ) {
+               $status = Status::newGood();
+               if ( count( $this->backends ) <= 1 ) {
+                       return $status; // skip checks
+               }
+
+               foreach ( $paths as $path ) {
+                       foreach ( $this->backends as $backend ) {
+                               $realPath = $this->substPaths( $path, $backend );
+                               if ( !$backend->isPathUsableInternal( $realPath ) ) {
+                                       $status->fatal( 'backend-fail-usable', $path );
                                }
                        }
                }
@@ -261,6 +306,10 @@ class FileBackendMultiWrite extends FileBackend {
                        $mPath  = $this->substPaths( $path, $mBackend );
                        $mSha1  = $mBackend->getFileSha1Base36( array( 'src' => $mPath ) );
                        $mExist = $mBackend->fileExists( array( 'src' => $mPath ) );
+                       // Check if the master backend is available...
+                       if ( $mExist === null ) {
+                               $status->fatal( 'backend-fail-internal', $this->name );
+                       }
                        // Check of all clone backends agree with the master...
                        foreach ( $this->backends as $index => $cBackend ) {
                                if ( $index === $this->masterIndex ) {
@@ -303,7 +352,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $paths[] = $op['dst'];
                        }
                }
-               return array_unique( $paths );
+               return array_values( array_unique( array_filter( $paths, 'FileBackend::isStoragePath' ) ) );
        }
 
        /**
@@ -487,6 +536,7 @@ class FileBackendMultiWrite extends FileBackend {
        /**
         * @see FileBackend::fileExists()
         * @param $params array
+        * @return bool|null
         */
        public function fileExists( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
@@ -524,13 +574,19 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        /**
-        * @see FileBackend::getFileContents()
+        * @see FileBackend::getFileContentsMulti()
         * @param $params array
         * @return bool|string
         */
-       public function getFileContents( array $params ) {
+       public function getFileContentsMulti( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               return $this->backends[$this->masterIndex]->getFileContents( $realParams );
+               $contentsM = $this->backends[$this->masterIndex]->getFileContentsMulti( $realParams );
+
+               $contents = array(); // (path => FSFile) mapping using the proxy backend's name
+               foreach ( $contentsM as $path => $data ) {
+                       $contents[$this->unsubstPaths( $path )] = $data;
+               }
+               return $contents;
        }
 
        /**
@@ -564,23 +620,35 @@ class FileBackendMultiWrite extends FileBackend {
        }
 
        /**
-        * @see FileBackend::getLocalReference()
+        * @see FileBackend::getLocalReferenceMulti()
         * @param $params array
         * @return FSFile|null
         */
-       public function getLocalReference( array $params ) {
+       public function getLocalReferenceMulti( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               return $this->backends[$this->masterIndex]->getLocalReference( $realParams );
+               $fsFilesM = $this->backends[$this->masterIndex]->getLocalReferenceMulti( $realParams );
+
+               $fsFiles = array(); // (path => FSFile) mapping using the proxy backend's name
+               foreach ( $fsFilesM as $path => $fsFile ) {
+                       $fsFiles[$this->unsubstPaths( $path )] = $fsFile;
+               }
+               return $fsFiles;
        }
 
        /**
-        * @see FileBackend::getLocalCopy()
+        * @see FileBackend::getLocalCopyMulti()
         * @param $params array
         * @return null|TempFSFile
         */
-       public function getLocalCopy( array $params ) {
+       public function getLocalCopyMulti( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
-               return $this->backends[$this->masterIndex]->getLocalCopy( $realParams );
+               $tempFilesM = $this->backends[$this->masterIndex]->getLocalCopyMulti( $realParams );
+
+               $tempFiles = array(); // (path => TempFSFile) mapping using the proxy backend's name
+               foreach ( $tempFilesM as $path => $tempFile ) {
+                       $tempFiles[$this->unsubstPaths( $path )] = $tempFile;
+               }
+               return $tempFiles;
        }
 
        /**
index 852a653..440359d 100644 (file)
@@ -89,6 +89,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - content       : the raw file contents
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - 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.
@@ -105,7 +106,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doCreateInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -125,6 +128,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source path on disk
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - 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.
@@ -141,7 +145,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doStoreInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -161,6 +167,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source storage path
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - 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.
@@ -173,7 +180,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 ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -222,6 +231,7 @@ abstract class FileBackendStore extends FileBackend {
         *   - src           : source storage path
         *   - dst           : destination storage path
         *   - overwrite     : overwrite any file that exists at the destination
+        *   - 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.
@@ -235,7 +245,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 ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -280,8 +292,14 @@ abstract class FileBackendStore extends FileBackend {
                // Try to lock the source files for the scope of this function
                $scopeLockS = $this->getScopedFileLocks( $params['srcs'], LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
-                       // Actually do the concatenation
+                       // Actually do the file concatenation...
+                       $start_time = microtime( true );
                        $status->merge( $this->doConcatenate( $params ) );
+                       $sec = microtime( true ) - $start_time;
+                       if ( !$status->isOK() ) {
+                               wfDebugLog( 'FileOperation', get_class( $this ) . " failed to concatenate " .
+                                       count( $params['srcs'] ) . " file(s) [$sec sec]" );
+                       }
                }
 
                wfProfileOut( __METHOD__ . '-' . $this->name );
@@ -296,31 +314,41 @@ abstract class FileBackendStore extends FileBackend {
        protected function doConcatenate( array $params ) {
                $status = Status::newGood();
                $tmpPath = $params['dst']; // convenience
+               unset( $params['latest'] ); // sanity
 
                // Check that the specified temp file is valid...
                wfSuppressWarnings();
-               $ok = ( is_file( $tmpPath ) && !filesize( $tmpPath ) );
+               $ok = ( is_file( $tmpPath ) && filesize( $tmpPath ) == 0 );
                wfRestoreWarnings();
                if ( !$ok ) { // not present or not empty
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
                        return $status;
                }
 
-               // Build up the temp file using the source chunks (in order)...
+               // Get local FS versions of the chunks needed for the concatenation...
+               $fsFiles = $this->getLocalReferenceMulti( $params );
+               foreach ( $fsFiles as $path => &$fsFile ) {
+                       if ( !$fsFile ) { // chunk failed to download?
+                               $fsFile = $this->getLocalReference( array( 'src' => $path ) );
+                               if ( !$fsFile ) { // retry failed?
+                                       $status->fatal( 'backend-fail-read', $path );
+                                       return $status;
+                               }
+                       }
+               }
+               unset( $fsFile ); // unset reference so we can reuse $fsFile
+
+               // Get a handle for the destination temp file
                $tmpHandle = fopen( $tmpPath, 'ab' );
                if ( $tmpHandle === false ) {
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
                        return $status;
                }
-               foreach ( $params['srcs'] as $virtualSource ) {
-                       // Get a local FS version of the chunk
-                       $tmpFile = $this->getLocalReference( array( 'src' => $virtualSource ) );
-                       if ( !$tmpFile ) {
-                               $status->fatal( 'backend-fail-read', $virtualSource );
-                               return $status;
-                       }
+
+               // Build up the temp file using the source chunks (in order)...
+               foreach ( $fsFiles as $virtualSource => $fsFile ) {
                        // Get a handle to the local FS version
-                       $sourceHandle = fopen( $tmpFile->getPath(), 'r' );
+                       $sourceHandle = fopen( $fsFile->getPath(), 'rb' );
                        if ( $sourceHandle === false ) {
                                fclose( $tmpHandle );
                                $status->fatal( 'backend-fail-read', $virtualSource );
@@ -618,24 +646,33 @@ abstract class FileBackendStore extends FileBackend {
        abstract protected function doGetFileStat( array $params );
 
        /**
-        * @see FileBackend::getFileContents()
-        * @return bool|string
+        * @see FileBackend::getFileContentsMulti()
+        * @return Array
         */
-       public function getFileContents( array $params ) {
+       public function getFileContentsMulti( array $params ) {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
-               $tmpFile = $this->getLocalReference( $params );
-               if ( !$tmpFile ) {
-                       wfProfileOut( __METHOD__ . '-' . $this->name );
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-               wfSuppressWarnings();
-               $data = file_get_contents( $tmpFile->getPath() );
-               wfRestoreWarnings();
+
+               $params = $this->setConcurrencyFlags( $params );
+               $contents = $this->doGetFileContentsMulti( $params );
+
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
-               return $data;
+               return $contents;
+       }
+
+       /**
+        * @see FileBackendStore::getFileContentsMulti()
+        * @return Array
+        */
+       protected function doGetFileContentsMulti( array $params ) {
+               $contents = array();
+               foreach ( $this->doGetLocalReferenceMulti( $params ) as $path => $fsFile ) {
+                       wfSuppressWarnings();
+                       $contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
+                       wfRestoreWarnings();
+               }
+               return $contents;
        }
 
        /**
@@ -702,37 +739,76 @@ abstract class FileBackendStore extends FileBackend {
        }
 
        /**
-        * @see FileBackend::getLocalReference()
-        * @return TempFSFile|null
+        * @see FileBackend::getLocalReferenceMulti()
+        * @return Array
         */
-       public function getLocalReference( array $params ) {
-               $path = self::normalizeStoragePath( $params['src'] );
-               if ( $path === null ) {
-                       return null; // invalid storage path
-               }
+       final public function getLocalReferenceMulti( array $params ) {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
+
+               $params = $this->setConcurrencyFlags( $params );
+
+               $fsFiles = array(); // (path => FSFile)
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( $this->expensiveCache->has( $path, 'localRef' ) ) {
-                       $val = $this->expensiveCache->get( $path, 'localRef' );
-                       // If we want the latest data, check that this cached
-                       // value was in fact fetched with the latest available data.
-                       if ( !$latest || $val['latest'] ) {
-                               wfProfileOut( __METHOD__ . '-' . $this->name );
-                               wfProfileOut( __METHOD__ );
-                               return $val['object'];
+               // Reuse any files already in process cache...
+               foreach ( $params['srcs'] as $src ) {
+                       $path = self::normalizeStoragePath( $src );
+                       if ( $path === null ) {
+                               $fsFiles[$src] = null; // invalid storage path
+                       } elseif ( $this->expensiveCache->has( $path, 'localRef' ) ) {
+                               $val = $this->expensiveCache->get( $path, 'localRef' );
+                               // If we want the latest data, check that this cached
+                               // value was in fact fetched with the latest available data.
+                               if ( !$latest || $val['latest'] ) {
+                                       $fsFiles[$src] = $val['object'];
+                               }
                        }
                }
-               $tmpFile = $this->getLocalCopy( $params );
-               if ( $tmpFile ) { // don't cache negatives
-                       $this->expensiveCache->set( $path, 'localRef',
-                               array( 'object' => $tmpFile, 'latest' => $latest ) );
+               // Fetch local references of any remaning files...
+               $params['srcs'] = array_diff( $params['srcs'], array_keys( $fsFiles ) );
+               foreach ( $this->doGetLocalReferenceMulti( $params ) as $path => $fsFile ) {
+                       $fsFiles[$path] = $fsFile;
+                       if ( $fsFile ) { // update the process cache...
+                               $this->expensiveCache->set( $path, 'localRef',
+                                       array( 'object' => $fsFile, 'latest' => $latest ) );
+                       }
                }
+
+               wfProfileOut( __METHOD__ . '-' . $this->name );
+               wfProfileOut( __METHOD__ );
+               return $fsFiles;
+       }
+
+       /**
+        * @see FileBackendStore::getLocalReferenceMulti()
+        * @return Array
+        */
+       protected function doGetLocalReferenceMulti( array $params ) {
+               return $this->doGetLocalCopyMulti( $params );
+       }
+
+       /**
+        * @see FileBackend::getLocalCopyMulti()
+        * @return Array
+        */
+       final public function getLocalCopyMulti( array $params ) {
+               wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
+
+               $params = $this->setConcurrencyFlags( $params );
+               $tmpFiles = $this->doGetLocalCopyMulti( $params );
+
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
-               return $tmpFile;
+               return $tmpFiles;
        }
 
+       /**
+        * @see FileBackendStore::getLocalCopyMulti()
+        * @return Array
+        */
+       abstract protected function doGetLocalCopyMulti( array $params );
+
        /**
         * @see FileBackend::streamFile()
         * @return Status
@@ -989,13 +1065,16 @@ abstract class FileBackendStore extends FileBackend {
                }
 
                // Clear any file cache entries (after locks acquired)
-               $this->clearCache();
+               if ( empty( $opts['preserveCache'] ) ) {
+                       $this->clearCache();
+               }
 
                // Load from the persistent file and container caches
                $this->primeFileCache( $performOps );
                $this->primeContainerCache( $performOps );
 
                // Actually attempt the operation batch...
+               $opts = $this->setConcurrencyFlags( $opts );
                $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal );
 
                // Merge errors into status fields
@@ -1097,6 +1176,8 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::executeOpHandlesInternal()
+        * @param array $fileOpHandles
+        * @throws MWException
         * @return Array List of corresponding Status objects
         */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
@@ -1106,6 +1187,20 @@ abstract class FileBackendStore extends FileBackend {
                return array();
        }
 
+       /**
+        * @see FileBackend::preloadCache()
+        */
+       final public function preloadCache( array $paths ) {
+               $fullConts = array(); // full container names
+               foreach ( $paths as $path ) {
+                       list( $fullCont, $r, $s ) = $this->resolveStoragePath( $path );
+                       $fullConts[] = $fullCont;
+               }
+               // Load from the persistent file and container caches
+               $this->primeContainerCache( $fullConts );
+               $this->primeFileCache( $paths );
+       }
+
        /**
         * @see FileBackend::clearCache()
         */
@@ -1444,7 +1539,9 @@ abstract class FileBackendStore extends FileBackend {
        }
 
        /**
-        * Set the cached stat info for a file path
+        * Set the cached stat info for a file path.
+        * Negatives (404s) are not cached. By not caching negatives, we can skip cache
+        * salting for the case when a file is created at a path were there was none before.
         *
         * @param $path string Storage path
         * @param $val mixed Information to cache
@@ -1510,6 +1607,26 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
        }
+
+       /**
+        * Set the 'concurrency' option from a list of operation options
+        *
+        * @param $opts array Map of operation options
+        * @return Array
+        */
+       final protected function setConcurrencyFlags( array $opts ) {
+               $opts['concurrency'] = 1; // off
+               if ( $this->parallelize === 'implicit' ) {
+                       if ( !isset( $opts['parallelize'] ) || $opts['parallelize'] ) {
+                               $opts['concurrency'] = $this->concurrency;
+                       }
+               } elseif ( $this->parallelize === 'explicit' ) {
+                       if ( !empty( $opts['parallelize'] ) ) {
+                               $opts['concurrency'] = $this->concurrency;
+                       }
+               }
+               return $opts;
+       }
 }
 
 /**
index fa87c3a..7c43c48 100644 (file)
@@ -431,18 +431,15 @@ abstract class FileOp {
 
 /**
  * Store a file into the backend from a file on the file system.
- * Parameters similar to FileBackendStore::storeInternal(), which include:
- *   - src           : source path on file system
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class StoreFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -508,15 +505,12 @@ class StoreFileOp extends FileOp {
 
 /**
  * Create a file in the backend with the given content.
- * Parameters similar to FileBackendStore::createInternal(), which include:
- *   - content       : the raw file contents
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class CreateFileOp extends FileOp {
        protected function allowedParams() {
-               return array( array( 'content', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'content', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        protected function doPrecheck( array &$predicates ) {
@@ -571,18 +565,15 @@ class CreateFileOp extends FileOp {
 
 /**
  * Copy a file from one storage path to another in the backend.
- * Parameters similar to FileBackendStore::copyInternal(), which include:
- *   - src           : source storage path
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class CopyFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -642,18 +633,15 @@ class CopyFileOp extends FileOp {
 
 /**
  * Move a file from one storage path to another in the backend.
- * Parameters similar to FileBackendStore::moveInternal(), which include:
- *   - src           : source storage path
- *   - dst           : destination storage path
- *   - overwrite     : do nothing and pass if an identical file exists at destination
- *   - overwriteSame : override any existing file at destination
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class MoveFileOp extends FileOp {
        /**
         * @return array
         */
        protected function allowedParams() {
-               return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
+               return array( array( 'src', 'dst' ),
+                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
        }
 
        /**
@@ -719,9 +707,7 @@ class MoveFileOp extends FileOp {
 
 /**
  * Delete a file at the given storage path from the backend.
- * Parameters similar to FileBackendStore::deleteInternal(), which include:
- *   - src                 : source storage path
- *   - ignoreMissingSource : don't return an error if the file does not exist
+ * Parameters for this operation are outlined in FileBackend::doOperations().
  */
 class DeleteFileOp extends FileOp {
        /**
index f54f666..25c14f5 100644 (file)
@@ -81,7 +81,8 @@ class SwiftFileBackend extends FileBackendStore {
         *                             - levels : the number of hash levels (and digits)
         *                             - repeat : hash subdirectories are prefixed with all the
         *                                        parent hash directory names (e.g. "a/ab/abc")
-        *   - cacheAuthInfo      : Whether to cache authentication tokens in APC/XCache.
+        *   - 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.
         */
        public function __construct( array $config ) {
@@ -111,7 +112,7 @@ class SwiftFileBackend extends FileBackendStore {
                        : false;
                $this->swiftCDNExpiry = isset( $config['swiftCDNExpiry'] )
                        ? $config['swiftCDNExpiry']
-                       : 3600; // hour
+                       : 12*3600; // 12 hours is safe (tokens last 24 hours per http://docs.openstack.org)
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
@@ -121,9 +122,13 @@ class SwiftFileBackend extends FileBackendStore {
                $this->connContainerCache = new ProcessCacheLRU( 300 );
                // Cache auth token information to avoid RTTs
                if ( !empty( $config['cacheAuthInfo'] ) ) {
-                       try { // look for APC, XCache, WinCache, ect...
-                               $this->srvCache = ObjectCache::newAccelerator( array() );
-                       } catch ( Exception $e ) {}
+                       if ( php_sapi_name() === 'cli' ) {
+                               $this->srvCache = wfGetMainCache(); // preferrably memcached
+                       } else {
+                               try { // look for APC, XCache, WinCache, ect...
+                                       $this->srvCache = ObjectCache::newAccelerator( array() );
+                               } catch ( Exception $e ) {}
+                       }
                }
                $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
        }
@@ -162,6 +167,24 @@ class SwiftFileBackend extends FileBackendStore {
                return false;
        }
 
+       /**
+        * @param $disposition string Content-Disposition header value
+        * @return string Truncated Content-Disposition header value to meet Swift limits
+        */
+       protected function truncDisp( $disposition ) {
+               $res = '';
+               foreach ( explode( ';', $disposition ) as $part ) {
+                       $part = trim( $part );
+                       $new  = ( $res === '' ) ? $part : "{$res};{$part}";
+                       if ( strlen( $new ) <= 255 ) {
+                               $res = $new;
+                       } else {
+                               break; // too long; sigh
+                       }
+               }
+               return $res;
+       }
+
        /**
         * @see FileBackendStore::doCreateInternal()
         * @return Status
@@ -210,13 +233,21 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
+                       // Set the Content-Disposition header if requested
+                       if ( isset( $params['disposition'] ) ) {
+                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $obj->write_async( $params['content'] );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $handle );
-                               $status->value->affectedObjects[] = $obj;
+                               $op = $obj->write_async( $params['content'] );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $op );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $obj;
+                               }
                        } else { // actually write the object in Swift
                                $obj->write( $params['content'] );
-                               $this->purgeCDNCache( array( $obj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $obj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -292,6 +323,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( !strlen( $obj->content_type ) ) { // special case
                                $obj->content_type = 'unknown/unknown';
                        }
+                       // Set the Content-Disposition header if requested
+                       if ( isset( $params['disposition'] ) ) {
+                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
                                $fp = fopen( $params['src'], 'rb' );
@@ -299,14 +334,18 @@ class SwiftFileBackend extends FileBackendStore {
                                if ( !$fp ) {
                                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                                } else {
-                                       $handle = $obj->write_async( $fp, filesize( $params['src'] ), true );
-                                       $status->value = new SwiftFileOpHandle( $this, $params, 'Store', $handle );
+                                       $op = $obj->write_async( $fp, filesize( $params['src'] ), true );
+                                       $status->value = new SwiftFileOpHandle( $this, $params, 'Store', $op );
                                        $status->value->resourcesToClose[] = $fp;
-                                       $status->value->affectedObjects[] = $obj;
+                                       if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                               $status->value->affectedObjects[] = $obj;
+                                       }
                                }
                        } else { // actually write the object in Swift
                                $obj->load_from_filename( $params['src'], true ); // calls $obj->write()
-                               $this->purgeCDNCache( array( $obj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $obj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -374,13 +413,21 @@ class SwiftFileBackend extends FileBackendStore {
                // (b) Actually copy the file to the destination
                try {
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
+                       $hdrs = array(); // source file headers to override with new values
+                       if ( isset( $params['disposition'] ) ) {
+                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $handle );
-                               $status->value->affectedObjects[] = $dstObj;
+                               $op = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $op );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $dstObj;
+                               }
                        } else { // actually write the object in Swift
-                               $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel );
-                               $this->purgeCDNCache( array( $dstObj ) );
+                               $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $dstObj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -445,14 +492,23 @@ class SwiftFileBackend extends FileBackendStore {
                try {
                        $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
+                       $hdrs = array(); // source file headers to override with new values
+                       if ( isset( $params['disposition'] ) ) {
+                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Move', $handle );
+                               $op = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Move', $op );
                                $status->value->affectedObjects[] = $srcObj;
-                               $status->value->affectedObjects[] = $dstObj;
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $status->value->affectedObjects[] = $dstObj;
+                               }
                        } else { // actually write the object in Swift
-                               $sContObj->move_object_to( $srcRel, $dContObj, $dstRel );
-                               $this->purgeCDNCache( array( $srcObj, $dstObj ) );
+                               $sContObj->move_object_to( $srcRel, $dContObj, $dstRel, null, $hdrs );
+                               $this->purgeCDNCache( array( $srcObj ) );
+                               if ( !empty( $params['overwrite'] ) ) { // file possibly mutated
+                                       $this->purgeCDNCache( array( $dstObj ) );
+                               }
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -493,8 +549,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $sContObj = $this->getContainer( $srcCont );
                        $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        if ( !empty( $params['async'] ) ) { // deferred
-                               $handle = $sContObj->delete_object_async( $srcRel );
-                               $status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $handle );
+                               $op = $sContObj->delete_object_async( $srcRel );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $op );
                                $status->value->affectedObjects[] = $srcObj;
                        } else { // actually write the object in Swift
                                $sContObj->delete_object( $srcRel );
@@ -733,8 +789,7 @@ class SwiftFileBackend extends FileBackendStore {
                $status = Status::newGood();
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
-                       # Do not stat the file in getLocalCopy() to avoid infinite loops
-                       $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1, 'nostat' => 1 ) );
+                       $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1 ) );
                        if ( $tmpFile ) {
                                $hash = $tmpFile->getSha1Base36();
                                if ( $hash !== false ) {
@@ -751,30 +806,77 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * @see FileBackend::getFileContents()
-        * @return bool|null|string
+        * @see FileBackendStore::doGetFileContentsMulti()
+        * @return Array
         */
-       public function getFileContents( array $params ) {
-               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
-               if ( $srcRel === null ) {
-                       return false; // invalid storage path
-               }
-
-               if ( !$this->fileExists( $params ) ) {
-                       return null;
-               }
+       protected function doGetFileContentsMulti( array $params ) {
+               $contents = array();
+
+               $ep = array_diff_key( $params, array( 'srcs' => 1 ) ); // for error logging
+               // Blindly create tmp files and stream to them, catching any exception if the file does
+               // not exist. Doing stats here is useless and will loop infinitely in addMissingMetadata().
+               foreach ( array_chunk( $params['srcs'], $params['concurrency'] ) as $pathBatch ) {
+                       $cfOps = array(); // (path => CF_Async_Op)
+
+                       foreach ( $pathBatch as $path ) { // each path in this concurrent batch
+                               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
+                               if ( $srcRel === null ) {
+                                       $contents[$path] = false;
+                                       continue;
+                               }
+                               $data = false;
+                               try {
+                                       $sContObj = $this->getContainer( $srcCont );
+                                       $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
+                                       // Get source file extension
+                                       $ext = FileBackend::extensionFromPath( $path );
+                                       // Create a new temporary memory file...
+                                       $handle = fopen( 'php://temp', 'wb' );
+                                       if ( $handle ) {
+                                               $headers = $this->headersFromParams( $params );
+                                               if ( count( $pathBatch ) > 1 ) {
+                                                       $cfOps[$path] = $obj->stream_async( $handle, $headers );
+                                                       $cfOps[$path]->_file_handle = $handle; // close this later
+                                               } else {
+                                                       $obj->stream( $handle, $headers );
+                                                       rewind( $handle ); // start from the beginning
+                                                       $data = stream_get_contents( $handle );
+                                                       fclose( $handle );
+                                               }
+                                       } else {
+                                               $data = false;
+                                       }
+                               } catch ( NoSuchContainerException $e ) {
+                                       $data = false;
+                               } catch ( NoSuchObjectException $e ) {
+                                       $data = false;
+                               } catch ( CloudFilesException $e ) { // some other exception?
+                                       $data = false;
+                                       $this->handleException( $e, null, __METHOD__, array( 'src' => $path ) + $ep );
+                               }
+                               $contents[$path] = $data;
+                       }
 
-               $data = false;
-               try {
-                       $sContObj = $this->getContainer( $srcCont );
-                       $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
-                       $data = $obj->read( $this->headersFromParams( $params ) );
-               } catch ( NoSuchContainerException $e ) {
-               } catch ( CloudFilesException $e ) { // some other exception?
-                       $this->handleException( $e, null, __METHOD__, $params );
+                       $batch = new CF_Async_Op_Batch( $cfOps );
+                       $cfOps = $batch->execute();
+                       foreach ( $cfOps as $path => $cfOp ) {
+                               try {
+                                       $cfOp->getLastResponse();
+                                       rewind( $cfOp->_file_handle ); // start from the beginning
+                                       $contents[$path] = stream_get_contents( $cfOp->_file_handle );
+                               } catch ( NoSuchContainerException $e ) {
+                                       $contents[$path] = false;
+                               } catch ( NoSuchObjectException $e ) {
+                                       $contents[$path] = false;
+                               } catch ( CloudFilesException $e ) { // some other exception?
+                                       $contents[$path] = false;
+                                       $this->handleException( $e, null, __METHOD__, array( 'src' => $path ) + $ep );
+                               }
+                               fclose( $cfOp->_file_handle ); // close open handle
+                       }
                }
 
-               return $data;
+               return $contents;
        }
 
        /**
@@ -852,13 +954,13 @@ class SwiftFileBackend extends FileBackendStore {
                                                // See function "create_container_table" in common/db.py.
                                                // If a directory is not "greater" than the last one,
                                                // then it was already listed by the calling iterator.
-                                               if ( $objectDir > $lastDir ) {
+                                               if ( strcmp( $objectDir, $lastDir ) > 0 ) {
                                                        $pDir = $objectDir;
                                                        do { // add dir and all its parent dirs
                                                                $dirs[] = "{$pDir}/";
                                                                $pDir = $this->getParentDir( $pDir );
                                                        } while ( $pDir !== false // sanity
-                                                               && $pDir > $lastDir // not done already
+                                                               && strcmp( $pDir, $lastDir ) > 0 // not done already
                                                                && strlen( $pDir ) > strlen( $dir ) // within $dir
                                                        );
                                                }
@@ -972,6 +1074,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $output = fopen( 'php://output', 'wb' );
                        $obj = new CF_Object( $cont, $srcRel, false, false ); // skip HEAD
                        $obj->stream( $output, $this->headersFromParams( $params ) );
+               } catch ( NoSuchObjectException $e ) {
+                       $status->fatal( 'backend-fail-stream', $params['src'] );
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
                }
@@ -980,45 +1084,76 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * @see FileBackendStore::getLocalCopy()
+        * @see FileBackendStore::doGetLocalCopyMulti()
         * @return null|TempFSFile
         */
-       public function getLocalCopy( array $params ) {
-               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
-               if ( $srcRel === null ) {
-                       return null;
-               }
-
-               # Check the recursion guard to avoid loops when filling metadata
-               if ( empty( $params['nostat'] ) && !$this->fileExists( $params ) ) {
-                       return null;
-               }
+       protected function doGetLocalCopyMulti( array $params ) {
+               $tmpFiles = array();
+
+               $ep = array_diff_key( $params, array( 'srcs' => 1 ) ); // for error logging
+               // Blindly create tmp files and stream to them, catching any exception if the file does
+               // not exist. Doing a stat here is useless causes infinite loops in addMissingMetadata().
+               foreach ( array_chunk( $params['srcs'], $params['concurrency'] ) as $pathBatch ) {
+                       $cfOps = array(); // (path => CF_Async_Op)
+
+                       foreach ( $pathBatch as $path ) { // each path in this concurrent batch
+                               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
+                               if ( $srcRel === null ) {
+                                       $tmpFiles[$path] = null;
+                                       continue;
+                               }
+                               $tmpFile = null;
+                               try {
+                                       $sContObj = $this->getContainer( $srcCont );
+                                       $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
+                                       // Get source file extension
+                                       $ext = FileBackend::extensionFromPath( $path );
+                                       // Create a new temporary file...
+                                       $tmpFile = TempFSFile::factory( 'localcopy_', $ext );
+                                       if ( $tmpFile ) {
+                                               $handle = fopen( $tmpFile->getPath(), 'wb' );
+                                               if ( $handle ) {
+                                                       $headers = $this->headersFromParams( $params );
+                                                       if ( count( $pathBatch ) > 1 ) {
+                                                               $cfOps[$path] = $obj->stream_async( $handle, $headers );
+                                                               $cfOps[$path]->_file_handle = $handle; // close this later
+                                                       } else {
+                                                               $obj->stream( $handle, $headers );
+                                                               fclose( $handle );
+                                                       }
+                                               } else {
+                                                       $tmpFile = null;
+                                               }
+                                       }
+                               } catch ( NoSuchContainerException $e ) {
+                                       $tmpFile = null;
+                               } catch ( NoSuchObjectException $e ) {
+                                       $tmpFile = null;
+                               } catch ( CloudFilesException $e ) { // some other exception?
+                                       $tmpFile = null;
+                                       $this->handleException( $e, null, __METHOD__, array( 'src' => $path ) + $ep );
+                               }
+                               $tmpFiles[$path] = $tmpFile;
+                       }
 
-               $tmpFile = null;
-               try {
-                       $sContObj = $this->getContainer( $srcCont );
-                       $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
-                       // Get source file extension
-                       $ext = FileBackend::extensionFromPath( $srcRel );
-                       // Create a new temporary file...
-                       $tmpFile = TempFSFile::factory( wfBaseName( $srcRel ) . '_', $ext );
-                       if ( $tmpFile ) {
-                               $handle = fopen( $tmpFile->getPath(), 'wb' );
-                               if ( $handle ) {
-                                       $obj->stream( $handle, $this->headersFromParams( $params ) );
-                                       fclose( $handle );
-                               } else {
-                                       $tmpFile = null; // couldn't open temp file
+                       $batch = new CF_Async_Op_Batch( $cfOps );
+                       $cfOps = $batch->execute();
+                       foreach ( $cfOps as $path => $cfOp ) {
+                               try {
+                                       $cfOp->getLastResponse();
+                               } catch ( NoSuchContainerException $e ) {
+                                       $tmpFiles[$path] = null;
+                               } catch ( NoSuchObjectException $e ) {
+                                       $tmpFiles[$path] = null;
+                               } catch ( CloudFilesException $e ) { // some other exception?
+                                       $tmpFiles[$path] = null;
+                                       $this->handleException( $e, null, __METHOD__, array( 'src' => $path ) + $ep );
                                }
+                               fclose( $cfOp->_file_handle ); // close open handle
                        }
-               } catch ( NoSuchContainerException $e ) {
-                       $tmpFile = null;
-               } catch ( CloudFilesException $e ) { // some other exception?
-                       $tmpFile = null;
-                       $this->handleException( $e, null, __METHOD__, $params );
                }
 
-               return $tmpFile;
+               return $tmpFiles;
        }
 
        /**
@@ -1186,6 +1321,19 @@ class SwiftFileBackend extends FileBackendStore {
                return $this->conn;
        }
 
+       /**
+        * Close the connection to the Swift proxy
+        *
+        * @return void
+        */
+       protected function closeConnection() {
+               if ( $this->conn ) {
+                       $this->conn->close(); // close active cURL handles in CF_Http object
+                       $this->sessionStarted = 0;
+                       $this->connContainerCache->clear();
+               }
+       }
+
        /**
         * Get the cache key for a container
         *
@@ -1196,13 +1344,6 @@ class SwiftFileBackend extends FileBackendStore {
                return wfMemcKey( 'backend', $this->getName(), 'usercreds', $username );
        }
 
-       /**
-        * @see FileBackendStore::doClearCache()
-        */
-       protected function doClearCache( array $paths = null ) {
-               $this->connContainerCache->clear(); // clear container object cache
-       }
-
        /**
         * Get a Swift container object, possibly from process cache.
         * Use $reCache if the file count or byte count is needed.
@@ -1297,6 +1438,10 @@ class SwiftFileBackend extends FileBackendStore {
                if ( $e->getMessage() ) {
                        trigger_error( "$func: " . $e->getMessage(), E_USER_WARNING );
                }
+               if ( $e instanceof InvalidResponseException ) { // possibly a stale token
+                       $this->srvCache->delete( $this->getCredsCacheKey( $this->auth->username ) );
+                       $this->closeConnection(); // force a re-connect and re-auth next time
+               }
                wfDebugLog( 'SwiftBackend',
                        get_class( $e ) . " in '{$func}' (given '" . FormatJson::encode( $params ) . "')" .
                        ( $e->getMessage() ? ": {$e->getMessage()}" : "" )
index ed6bf2f..2e45093 100644 (file)
@@ -43,7 +43,7 @@ class TempFSFile extends FSFile {
         */
        public static function factory( $prefix, $extension = '' ) {
                wfProfileIn( __METHOD__ );
-               $base = wfTempDir() . '/' . $prefix . dechex( mt_rand( 0, 99999999 ) );
+               $base = wfTempDir() . '/' . $prefix . wfRandomString( 12 );
                $ext = ( $extension != '' ) ? ".{$extension}" : "";
                for ( $attempt = 1; true; $attempt++ ) {
                        $path = "{$base}-{$attempt}{$ext}";
@@ -54,7 +54,7 @@ class TempFSFile extends FSFile {
                                fclose( $newFileHandle );
                                break; // got it
                        }
-                       if ( $attempt >= 15 ) {
+                       if ( $attempt >= 5 ) {
                                wfProfileOut( __METHOD__ );
                                return null; // give up
                        }
@@ -86,6 +86,10 @@ class TempFSFile extends FSFile {
         */
        public function bind( $object ) {
                if ( is_object( $object ) ) {
+                       if ( !isset( $object->tempFSFileReferences ) ) {
+                               // Init first since $object might use __get() and return only a copy variable
+                               $object->tempFSFileReferences = array();
+                       }
                        $object->tempFSFileReferences[] = $this;
                }
        }
index 8fa4c6f..34f3e53 100644 (file)
@@ -27,6 +27,9 @@
  * @since 1.20
  */
 class DBFileJournal extends FileJournal {
+       /** @var DatabaseBase */
+       protected $dbw;
+
        protected $wiki = false; // string; wiki DB name
 
        /**
@@ -71,9 +74,7 @@ class DBFileJournal extends FileJournal {
                }
 
                try {
-                       $dbw->begin();
                        $dbw->insert( 'filejournal', $data, __METHOD__ );
-                       $dbw->commit();
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbquery', $this->backend );
                        return $status;
@@ -82,6 +83,19 @@ class DBFileJournal extends FileJournal {
                return $status;
        }
 
+       /**
+        * @see FileJournal::doGetCurrentPosition()
+        * @return integer|false
+        */
+       protected function doGetCurrentPosition() {
+               $dbw = $this->getMasterDB();
+
+               return $dbw->selectField( 'filejournal', 'MAX(fj_id)',
+                       array( 'fj_backend' => $this->backend ),
+                       __METHOD__
+               );
+       }
+
        /**
         * @see FileJournal::doGetChangeEntries()
         * @return Array
@@ -125,12 +139,10 @@ class DBFileJournal extends FileJournal {
                $dbw = $this->getMasterDB();
                $dbCutoff = $dbw->timestamp( time() - 86400 * $this->ttlDays );
 
-               $dbw->begin();
                $dbw->delete( 'filejournal',
                        array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
                        __METHOD__
                );
-               $dbw->commit();
 
                return $status;
        }
@@ -142,7 +154,12 @@ class DBFileJournal extends FileJournal {
         * @throws DBError
         */
        protected function getMasterDB() {
-               $lb = wfGetLBFactory()->newMainLB();
-               return $lb->getConnection( DB_MASTER, array(), $this->wiki );
+               if ( !$this->dbw ) {
+                       // Get a separate connection in autocommit mode
+                       $lb = wfGetLBFactory()->newMainLB();
+                       $this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
+                       $this->dbw->clearFlag( DBO_TRX );
+               }
+               return $this->dbw;
        }
 }
index ce029bb..3bc0df7 100644 (file)
@@ -110,6 +110,21 @@ abstract class FileJournal {
         */
        abstract protected function doLogChangeBatch( array $entries, $batchId );
 
+       /**
+        * Get the position ID of the latest journal entry
+        *
+        * @return integer|false
+        */
+       final public function getCurrentPosition() {
+               return $this->doGetCurrentPosition();
+       }
+
+       /**
+        * @see FileJournal::getCurrentPosition()
+        * @return integer|false
+        */
+       abstract protected function doGetCurrentPosition();
+
        /**
         * Get an array of file change log entries.
         * A starting change ID and/or limit can be specified.
@@ -169,7 +184,7 @@ abstract class FileJournal {
  */
 class NullFileJournal extends FileJournal {
        /**
-        * @see FileJournal::logChangeBatch()
+        * @see FileJournal::doLogChangeBatch()
         * @param $entries array
         * @param $batchId string
         * @return Status
@@ -178,6 +193,14 @@ class NullFileJournal extends FileJournal {
                return Status::newGood();
        }
 
+       /**
+        * @see FileJournal::doGetCurrentPosition()
+        * @return integer|false
+        */
+       protected function doGetCurrentPosition() {
+               return false;
+       }
+
        /**
         * @see FileJournal::doGetChangeEntries()
         * @return Array
@@ -187,7 +210,7 @@ class NullFileJournal extends FileJournal {
        }
 
        /**
-        * @see FileJournal::purgeOldLogs()
+        * @see FileJournal::doPurgeOldLogs()
         * @return Status
         */
        protected function doPurgeOldLogs() {
index 204ca3b..a8fe258 100644 (file)
@@ -54,22 +54,22 @@ class DBLockManager extends QuorumLockManager {
         * Construct a new instance from configuration.
         *
         * $config paramaters include:
-        *     'dbServers'   : Associative array of DB names to server configuration.
-        *                     Configuration is an associative array that includes:
-        *                     'host'        - DB server name
-        *                     'dbname'      - DB name
-        *                     'type'        - DB type (mysql,postgres,...)
-        *                     'user'        - DB user
-        *                     'password'    - DB user password
-        *                     'tablePrefix' - DB table prefix
-        *                     'flags'       - DB flags (see DatabaseBase)
-        *     'dbsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
-        *                     each having an odd-numbered list of DB names (peers) as values.
-        *                     Any DB named 'localDBMaster' will automatically use the DB master
-        *                     settings for this wiki (without the need for a dbServers entry).
-        *     'lockExpiry'  : Lock timeout (seconds) for dropped connections. [optional]
-        *                     This tells the DB server how long to wait before assuming
-        *                     connection failure and releasing all the locks for a session.
+        *   - dbServers   : Associative array of DB names to server configuration.
+        *                   Configuration is an associative array that includes:
+        *                     - host        : DB server name
+        *                     - dbname      : DB name
+        *                     - type        : DB type (mysql,postgres,...)
+        *                     - user        : DB user
+        *                     - password    : DB user password
+        *                     - tablePrefix : DB table prefix
+        *                     - flags       : DB flags (see DatabaseBase)
+        *   - dbsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
+        *                   each having an odd-numbered list of DB names (peers) as values.
+        *                   Any DB named 'localDBMaster' will automatically use the DB master
+        *                   settings for this wiki (without the need for a dbServers entry).
+        *   - lockExpiry  : Lock timeout (seconds) for dropped connections. [optional]
+        *                   This tells the DB server how long to wait before assuming
+        *                   connection failure and releasing all the locks for a session.
         *
         * @param Array $config
         */
index 53f3e9f..9a6206f 100644 (file)
@@ -50,7 +50,7 @@ class FSLockManager extends LockManager {
         * Construct a new instance from configuration.
         *
         * $config includes:
-        *     'lockDirectory' : Directory containing the lock files
+        *   - lockDirectory : Directory containing the lock files
         *
         * @param array $config
         */
index 9e81dbf..26a5e2d 100644 (file)
@@ -56,14 +56,15 @@ class MemcLockManager extends QuorumLockManager {
         * Construct a new instance from configuration.
         *
         * $config paramaters include:
-        *   - 'lockServers'  : Associative array of server names to "<IP>:<port>" strings.
-        *   - 'srvsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
-        *                      each having an odd-numbered list of server names (peers) as values.
-        *   - 'memcConfig'   : Configuration array for ObjectCache::newFromParams. [optional]
-        *                      If set, this must use one of the memcached classes.
-        *   - 'wikiId'       : Wiki ID string that all resources are relative to. [optional]
+        *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
+        *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
+        *                    each having an odd-numbered list of server names (peers) as values.
+        *   - memcConfig   : Configuration array for ObjectCache::newFromParams. [optional]
+        *                    If set, this must use one of the memcached classes.
+        *   - wikiId       : Wiki ID string that all resources are relative to. [optional]
         *
         * @param Array $config
+        * @throws MWException
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
index 3159077..e8aa5a6 100644 (file)
@@ -51,6 +51,7 @@ class FileRepo {
        var $pathDisclosureProtection = 'simple'; // 'paranoid'
        var $descriptionCacheExpiry, $url, $thumbUrl;
        var $hashLevels, $deletedHashLevels;
+       protected $abbrvThreshold;
 
        /**
         * Factory functions for creating new files
@@ -113,6 +114,9 @@ class FileRepo {
                        ? $info['deletedHashLevels']
                        : $this->hashLevels;
                $this->transformVia404 = !empty( $info['transformVia404'] );
+               $this->abbrvThreshold = isset( $info['abbrvThreshold'] )
+                       ? $info['abbrvThreshold']
+                       : 255;
                $this->isPrivate = !empty( $info['isPrivate'] );
                // Give defaults for the basic zones...
                $this->zones = isset( $info['zones'] ) ? $info['zones'] : array();
@@ -692,7 +696,7 @@ class FileRepo {
        /**
         * Store a file to a given destination.
         *
-        * @param $srcPath String: source FS path, storage path, or virtual URL
+        * @param $srcPath String: source file system path, storage path, or virtual URL
         * @param $dstZone String: destination zone
         * @param $dstRel String: destination relative path
         * @param $flags Integer: bitwise combination of the following flags:
@@ -837,12 +841,13 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
-        * @param $src string File system path
+        * @param $src string Source file system path, storage path, or virtual URL
         * @param $dst string Virtual URL or storage path
+        * @param $disposition string|null Content-Disposition if given and supported
         * @return FileRepoStatus
         */
-       final public function quickImport( $src, $dst ) {
-               return $this->quickImportBatch( array( array( $src, $dst ) ) );
+       final public function quickImport( $src, $dst, $disposition = null ) {
+               return $this->quickImportBatch( array( array( $src, $dst, $disposition ) ) );
        }
 
        /**
@@ -878,19 +883,24 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
-        * @param $pairs Array List of tuples (file system path, virtual URL or storage path)
+        * All path parameters may be a file system path, storage path, or virtual URL.
+        * When "dispositions" are given they are used as Content-Disposition if supported.
+        *
+        * @param $triples Array List of (source path, destination path, disposition)
         * @return FileRepoStatus
         */
-       public function quickImportBatch( array $pairs ) {
+       public function quickImportBatch( array $triples ) {
                $status = $this->newGood();
                $operations = array();
-               foreach ( $pairs as $pair ) {
-                       list ( $src, $dst ) = $pair;
+               foreach ( $triples as $triple ) {
+                       list( $src, $dst ) = $triple;
+                       $src = $this->resolveToStoragePath( $src );
                        $dst = $this->resolveToStoragePath( $dst );
                        $operations[] = array(
-                               'op'        => 'store',
-                               'src'       => $src,
-                               'dst'       => $dst
+                               'op'          => FileBackend::isStoragePath( $src ) ? 'copy' : 'store',
+                               'src'         => $src,
+                               'dst'         => $dst,
+                               'disposition' => isset( $triple[2] ) ? $triple[2] : null
                        );
                        $status->merge( $this->initDirectory( dirname( $dst ) ) );
                }
@@ -935,19 +945,38 @@ class FileRepo {
        public function storeTemp( $originalName, $srcPath ) {
                $this->assertWritableRepo(); // fail out if read-only
 
-               $date      = gmdate( "YmdHis" );
-               $hashPath  = $this->getHashPath( $originalName );
-               $dstRel    = "{$hashPath}{$date}!{$originalName}";
-               $dstUrlRel = $hashPath . $date . '!' . rawurlencode( $originalName );
+               $date       = gmdate( "YmdHis" );
+               $hashPath   = $this->getHashPath( $originalName );
+               $dstRel     = "{$hashPath}{$date}!{$originalName}";
+               $dstUrlRel  = $hashPath . $date . '!' . rawurlencode( $originalName );
+               $virtualUrl = $this->getVirtualUrl( 'temp' )  . '/' . $dstUrlRel;
 
-               $result = $this->store( $srcPath, 'temp', $dstRel, self::SKIP_LOCKING );
-               $result->value = $this->getVirtualUrl( 'temp' ) . '/' . $dstUrlRel;
+               $result = $this->quickImport( $srcPath, $virtualUrl );
+               $result->value = $virtualUrl;
 
                return $result;
        }
 
        /**
-        * Concatenate a list of files into a target file location.
+        * Remove a temporary file or mark it for garbage collection
+        *
+        * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp()
+        * @return Boolean: true on success, false on failure
+        */
+       public function freeTemp( $virtualUrl ) {
+               $this->assertWritableRepo(); // fail out if read-only
+
+               $temp = $this->getVirtualUrl( 'temp' );
+               if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
+                       wfDebug( __METHOD__.": Invalid temp virtual URL\n" );
+                       return false;
+               }
+
+               return $this->quickPurge( $virtualUrl )->isOK();
+       }
+
+       /**
+        * Concatenate a list of temporary files into a target file location.
         *
         * @param $srcPaths Array Ordered list of source virtual URLs/storage paths
         * @param $dstPath String Target file system path
@@ -961,14 +990,10 @@ class FileRepo {
                $status = $this->newGood();
 
                $sources = array();
-               $deleteOperations = array(); // post-concatenate ops
                foreach ( $srcPaths as $srcPath ) {
                        // Resolve source to a storage path if virtual
                        $source = $this->resolveToStoragePath( $srcPath );
                        $sources[] = $source; // chunk to merge
-                       if ( $flags & self::DELETE_SOURCE ) {
-                               $deleteOperations[] = array( 'op' => 'delete', 'src' => $source );
-                       }
                }
 
                // Concatenate the chunks into one FS file
@@ -979,44 +1004,24 @@ class FileRepo {
                }
 
                // Delete the sources if required
-               if ( $deleteOperations ) {
-                       $opts = array( 'force' => true );
-                       $status->merge( $this->backend->doOperations( $deleteOperations, $opts ) );
+               if ( $flags & self::DELETE_SOURCE ) {
+                       $status->merge( $this->quickPurgeBatch( $srcPaths ) );
                }
 
-               // Make sure status is OK, despite any $deleteOperations fatals
+               // Make sure status is OK, despite any quickPurgeBatch() fatals
                $status->setResult( true );
 
                return $status;
        }
 
-       /**
-        * Remove a temporary file or mark it for garbage collection
-        *
-        * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp()
-        * @return Boolean: true on success, false on failure
-        */
-       public function freeTemp( $virtualUrl ) {
-               $this->assertWritableRepo(); // fail out if read-only
-
-               $temp = "mwrepo://{$this->name}/temp";
-               if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
-                       wfDebug( __METHOD__.": Invalid temp virtual URL\n" );
-                       return false;
-               }
-               $path = $this->resolveVirtualUrl( $virtualUrl );
-
-               return $this->cleanupBatch( array( $path ), self::SKIP_LOCKING )->isOK();
-       }
-
        /**
         * Copy or move a file either from a storage path, virtual URL,
-        * or FS path, into this repository at the specified destination location.
+        * or file system path, into this repository at the specified destination location.
         *
         * Returns a FileRepoStatus object. On success, the value contains "new" or
         * "archived", to indicate whether the file was new with that name.
         *
-        * @param $srcPath String: the source FS path, storage path, or URL
+        * @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.
@@ -1313,9 +1318,13 @@ class FileRepo {
         * e.g. s/z/a/ for sza251lrxrc1jad41h5mgilp8nysje52.jpg
         *
         * @param $key string
+        * @throws MWException
         * @return string
         */
        public function getDeletedHashPath( $key ) {
+               if ( strlen( $key ) < 31 ) {
+                       throw new MWException( "Invalid storage key '$key'." );
+               }
                $path = '';
                for ( $i = 0; $i < $this->deletedHashLevels; $i++ ) {
                        $path .= $key[$i] . '/';
@@ -1554,6 +1563,21 @@ class FileRepo {
                return wfMessageFallback( 'shared-repo-name-' . $this->name, 'shared-repo' )->text();
        }
 
+       /**
+        * Get the portion of the file that contains the origin file name.
+        * If that name is too long, then the name "thumbnail.<ext>" will be given.
+        *
+        * @param $name string
+        * @return string
+        */
+       public function nameForThumb( $name ) {
+               if ( strlen( $name ) > $this->abbrvThreshold ) {
+                       $ext  = FileBackend::extensionFromPath( $name );
+                       $name = ( $ext == '' ) ? 'thumbnail' : "thumbnail.$ext";
+               }
+               return $name;
+       }
+
        /**
         * Returns true if this the local file repository.
         *
index c5a0bd1..c9751be 100644 (file)
@@ -108,6 +108,7 @@ class ArchivedFile {
 
        /**
         * Loads a file object from the filearchive table
+        * @throws MWException
         * @return bool|null True on success or null
         */
        public function load() {
index dd54455..557609d 100644 (file)
@@ -68,6 +68,9 @@ abstract class File {
        const FOR_THIS_USER = 2;
        const RAW = 3;
 
+       // Options for File::thumbName()
+       const THUMB_FULL_NAME = 1;
+
        /**
         * Some member variables can be lazy-initialised using __get(). The
         * initialisation function for these variables is always a function named
@@ -759,15 +762,19 @@ abstract class File {
        }
 
        /**
-        * Return the file name of a thumbnail with the specified parameters
+        * Return the file name of a thumbnail with the specified parameters.
+        * Use File::THUMB_FULL_NAME to always get a name like "<params>-<source>".
+        * Otherwise, the format may be "<params>-<source>" or "<params>-thumbnail.<ext>".
         *
         * @param $params Array: handler-specific parameters
-        * @private -ish
-        *
+        * @param $flags integer Bitfield that supports THUMB_* constants
         * @return string
         */
-       function thumbName( $params ) {
-               return $this->generateThumbName( $this->getName(), $params );
+       public function thumbName( $params, $flags = 0 ) {
+               $name = ( $this->repo && !( $flags & self::THUMB_FULL_NAME ) )
+                       ? $this->repo->nameForThumb( $this->getName() )
+                       : $this->getName();
+               return $this->generateThumbName( $name, $params );
        }
 
        /**
@@ -778,7 +785,7 @@ abstract class File {
         *
         * @return string
         */
-       function generateThumbName( $name, $params ) {
+       public function generateThumbName( $name, $params ) {
                if ( !$this->getHandler() ) {
                        return null;
                }
@@ -942,7 +949,8 @@ abstract class File {
                                }
                        } elseif ( $this->repo && $thumb->hasFile() && !$thumb->fileIsSource() ) {
                                // Copy the thumbnail from the file system into storage...
-                               $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath );
+                               $disposition = $this->getThumbDisposition( $thumbName );
+                               $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath, $disposition );
                                if ( $status->isOK() ) {
                                        $thumb->setStoragePath( $thumbPath );
                                } else {
@@ -966,6 +974,19 @@ abstract class File {
                return is_object( $thumb ) ? $thumb : false;
        }
 
+       /**
+        * @param $thumbName string Thumbnail name
+        * @return string Content-Disposition header value
+        */
+       function getThumbDisposition( $thumbName ) {
+               $fileName = $this->name; // file name to suggest
+               $thumbExt = FileBackend::extensionFromPath( $thumbName );
+               if ( $thumbExt != '' && $thumbExt !== $this->getExtension() ) {
+                       $fileName .= ".$thumbExt";
+               }
+               return FileBackend::makeContentDisposition( 'inline', $fileName );
+       }
+
        /**
         * Hook into transform() to allow migration of thumbnail files
         * STUB
@@ -998,7 +1019,8 @@ abstract class File {
                        $path = '/common/images/icons/' . $icon;
                        $filepath = $wgStyleDirectory . $path;
                        if ( file_exists( $filepath ) ) { // always FS
-                               return new ThumbnailImage( $this, $wgStylePath . $path, 120, 120 );
+                               $params = array( 'width' => 120, 'height' => 120 );
+                               return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
                        }
                }
                return null;
index e849c8e..05958d6 100644 (file)
@@ -1006,7 +1006,7 @@ class LocalFile extends File {
        {
                $pageText = SpecialUpload::getInitialPageText( $desc, $license, $copyStatus, $source );
 
-               if ( !$this->recordUpload2( $oldver, $desc, $pageText ) ) {
+               if ( !$this->recordUpload2( $oldver, $desc, $pageText, false, $timestamp ) ) {
                        return false;
                }
 
@@ -1151,10 +1151,12 @@ class LocalFile extends File {
                # Add the log entry
                $log = new LogPage( 'upload' );
                $action = $reupload ? 'overwrite' : 'upload';
-               $log->addEntry( $action, $descTitle, $comment, array(), $user );
+               $logId = $log->addEntry( $action, $descTitle, $comment, array(), $user );
 
                wfProfileIn( __METHOD__ . '-edit' );
-               if ( $descTitle->exists() ) {
+               $exists = $descTitle->exists();
+
+               if ( $exists ) {
                        # Create a null revision
                        $latest = $descTitle->getLatestRevID();
                        $nullRevision = Revision::newNullRevision(
@@ -1169,21 +1171,37 @@ class LocalFile extends File {
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
                                $wikiPage->updateRevisionOn( $dbw, $nullRevision );
                        }
+               }
+
+               # Commit the transaction now, in case something goes wrong later
+               # The most important thing is that files don't get lost, especially archives
+               # NOTE: once we have support for nested transactions, the commit may be moved
+               #       to after $wikiPage->doEdit has been called.
+               $dbw->commit( __METHOD__ );
+
+               if ( $exists ) {
                        # Invalidate the cache for the description page
                        $descTitle->invalidateCache();
                        $descTitle->purgeSquid();
                } else {
                        # New file; create the description page.
                        # There's already a log entry, so don't make a second RC entry
-                       # Squid and file cache for the description page are purged by doEdit.
-                       $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
+                       # Squid and file cache for the description page are purged by doEditContent.
+                       $content = ContentHandler::makeContent( $pageText, $descTitle );
+                       $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->update( 'logging',
+                                       array( 'log_page' => $status->value['revision']->getPage() ),
+                                       array( 'log_id' => $logId ),
+                                       __METHOD__
+                               );
+                               $dbw->commit(); // commit before anything bad can happen
+                       }
                }
                wfProfileOut( __METHOD__ . '-edit' );
 
-               # Commit the transaction now, in case something goes wrong later
-               # The most important thing is that files don't get lost, especially archives
-               $dbw->commit( __METHOD__ );
-
                # Save to cache and purge the squid
                # We shall not saveToCache before the commit since otherwise
                # in case of a rollback there is an usable file from memcached
@@ -1458,9 +1476,9 @@ class LocalFile extends File {
                global $wgParser;
                $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) return false;
-               $text = $revision->getText();
-               if ( !$text ) return false;
-               $pout = $wgParser->parse( $text, $this->title, new ParserOptions() );
+               $content = $revision->getContent();
+               if ( !$content ) return false;
+               $pout = $content->getParserOutput( $this->title, null, new ParserOptions() );
                return $pout->getText();
        }
 
index d411a27..a575334 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Deployment
  */
 
-require_once( dirname(__FILE__) . '/../../maintenance/Maintenance.php' );
+require_once( __DIR__ . '/../../maintenance/Maintenance.php' );
 
 /**
  * Class for handling database updates. Roughly based off of updaters.inc, with
@@ -177,7 +177,7 @@ abstract class DatabaseUpdater {
         *                Note that callback functions will receive this object as
         *                first parameter.
         */
-       public function addExtensionUpdate( Array $update ) {
+       public function addExtensionUpdate( array $update ) {
                $this->extensionUpdates[] = $update;
        }
 
@@ -558,13 +558,28 @@ abstract class DatabaseUpdater {
        }
 
        /**
+        * If the specified table exists, drop it, or execute the
+        * patch if one is provided.
+        *
+        * Public @since 1.20
+        *
         * @param $table string
-        * @param $patch string
+        * @param $patch string|false
         * @param $fullpath bool
         */
-       protected function dropTable( $table, $patch, $fullpath = false ) {
+       public function dropTable( $table, $patch = false, $fullpath = false ) {
                if ( $this->db->tableExists( $table, __METHOD__ ) ) {
-                       $this->applyPatch( $patch, $fullpath, "Dropping table $table" );
+                       $msg = "Dropping table $table";
+
+                       if ( $patch === false ) {
+                               $this->output( "$msg ..." );
+                               $this->db->dropTable( $table, __METHOD__ );
+                               $this->output( "done.\n" );
+                       }
+                       else {
+                               $this->applyPatch( $patch, $fullpath, $msg );
+                       }
+
                } else {
                        $this->output( "...$table doesn't exist.\n" );
                }
index f812ac2..3a42953 100644 (file)
@@ -87,6 +87,13 @@ class Ibm_db2Updater extends DatabaseUpdater {
 
                        // 1.20
                        array( 'addTable', 'config',                            'patch-config.sql' ),
+
+                       // 1.21
+                       array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
+                       array( 'addField',      'revision',     'rev_content_model',            'patch-revision-rev_content_model.sql' ),
+                       array( 'addField',      'archive',      'ar_content_format',            'patch-archive-ar_content_format.sql' ),
+                       array( 'addField',      'archive',      'ar_content_model',                 'patch-archive-ar_content_model.sql' ),
+                       array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
                );
        }
 }
index caf7b69..c673f6f 100644 (file)
@@ -339,7 +339,7 @@ abstract class Installer {
 
                // Load the installer's i18n file.
                $wgExtensionMessagesFiles['MediawikiInstaller'] =
-                       dirname( __FILE__ ) . '/Installer.i18n.php';
+                       __DIR__ . '/Installer.i18n.php';
 
                // Having a user with id = 0 safeguards us from DB access via User::loadOptions().
                $wgUser = User::newFromId( 0 );
@@ -935,7 +935,7 @@ abstract class Installer {
         */
        protected function envCheckPath() {
                global $IP;
-               $IP = dirname( dirname( dirname( __FILE__ ) ) );
+               $IP = dirname( dirname( __DIR__ ) );
                $this->setVar( 'IP', $IP );
 
                $this->showMessage( 'config-using-uri', $this->getVar( 'wgServer' ), $this->getVar( 'wgScriptPath' ) );
@@ -1594,13 +1594,16 @@ abstract class Installer {
                $status = Status::newGood();
                try {
                        $page = WikiPage::factory( Title::newMainPage() );
-                       $page->doEdit( wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
-                                       wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text(),
+                       $content = new WikitextContent (
+                               wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
+                               wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text()
+                       );
+
+                       $page->doEditContent( $content,
                                        '',
                                        EDIT_NEW,
                                        false,
-                                       User::newFromName( 'MediaWiki default' )
-                       );
+                                       User::newFromName( 'MediaWiki default' ) );
                } catch (MWException $e) {
                        //using raw, because $wgShowExceptionDetails can not be set yet
                        $status->fatal( 'config-install-mainpage-failed', $e->getMessage() );
index d93dba6..00009ca 100644 (file)
@@ -206,6 +206,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        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
@@ -213,6 +214,16 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
                        array( 'addField', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id-index.sql' ),
+                       array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
+
+                       // 1.21
+                       array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
+                       array( 'addField',      'revision',     'rev_content_model',            'patch-revision-rev_content_model.sql' ),
+                       array( 'addField',      'archive',      'ar_content_format',            'patch-archive-ar_content_format.sql' ),
+                       array( 'addField',      'archive',      'ar_content_model',                 'patch-archive-ar_content_model.sql' ),
+                       array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
+                       array( 'dropField', 'site_stats',   'ss_admins',        'patch-drop-ss_admins.sql' ),
+                       array( 'dropField', 'recentchanges', 'rc_moved_to_title',            'patch-rc_moved.sql' ),
                );
        }
 
index a741f26..2f20135 100644 (file)
@@ -71,6 +71,13 @@ class OracleUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
                        array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
 
+                       //1.21
+                       array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
+                       array( 'addField',      'revision',     'rev_content_model',            'patch-revision-rev_content_model.sql' ),
+                       array( 'addField',      'archive',      'ar_content_format',            'patch-archive-ar_content_format.sql' ),
+                       array( 'addField',      'archive',      'ar_content_model',                 'patch-archive-ar_content_model.sql' ),
+                       array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
+
                        // KEEP THIS AT THE BOTTOM!!
                        array( 'doRebuildDuplicateFunction' ),
 
index 3ac2b3a..882ec53 100644 (file)
@@ -190,6 +190,7 @@ class PostgresInstaller extends DatabaseInstaller {
         *                     other similar objects in the new DB.
         *    - create-tables: A connection with a role suitable for creating tables.
         *
+        * @throws MWException
         * @return Status object. On success, a connection object will be in the
         *   value member.
         */
index 9ba9eab..e26aa78 100644 (file)
@@ -85,6 +85,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        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
@@ -92,6 +93,17 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
                        array( 'addField', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id-index.sql' ),
+                       array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
+
+                       // 1.21
+                       array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
+                       array( 'addField', 'revision', 'rev_content_model',  'patch-revision-rev_content_model.sql' ),
+                       array( 'addField', 'archive',  'ar_content_format',  'patch-archive-ar_content_format.sql' ),
+                       array( 'addField', 'archive',  'ar_content_model',   'patch-archive-ar_content_model.sql' ),
+                       array( 'addField', 'page',     'page_content_model', 'patch-page-page_content_model.sql' ),
+
+                       array( 'dropField', 'site_stats',    'ss_admins',         'patch-drop-ss_admins.sql' ),
+                       array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
                );
        }
 
index e1c5c29..2f46ff0 100644 (file)
@@ -362,7 +362,7 @@ class WebInstaller extends Installer {
                        $url = $m[1];
                }
                return md5( serialize( array(
-                       'local path' => dirname( dirname( __FILE__ ) ),
+                       'local path' => dirname( __DIR__ ),
                        'url' => $url,
                        'version' => $GLOBALS['wgVersion']
                ) ) );
@@ -376,7 +376,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $args = array_map( 'htmlspecialchars', $args );
-               $msg = wfMsgReal( $msg, $args, false, false, false );
+               $msg = wfMessage( $msg, $args )->useDatabase( false )->plain();
                $this->output->addHTML( $this->getErrorBox( $msg ) );
        }
 
@@ -655,7 +655,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $args = array_map( 'htmlspecialchars', $args );
-               $text = wfMsgReal( $msg, $args, false, false, false );
+               $text = wfMessage( $msg, $args )->useDatabase( false )->plain();
                $html = $this->parse( $text, true );
 
                return "<div class=\"mw-help-field-container\">\n" .
@@ -685,7 +685,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $html = '<div class="config-message">' .
-                       $this->parse( wfMsgReal( $msg, $args, false, false, false ) ) .
+               $this->parse( wfMessage( $msg, $args )->useDatabase( false )->plain() ) .
                        "</div>\n";
                $this->output->addHTML( $html );
        }
index 9a516a6..f3166c2 100644 (file)
@@ -108,7 +108,7 @@ class WebInstallerOutput {
         * @return String
         */
        public function getCSS( $dir ) {
-               $skinDir = dirname( dirname( dirname( __FILE__ ) ) ) . '/skins';
+               $skinDir = dirname( dirname( __DIR__ ) ) . '/skins';
 
                // All these files will be concatenated in sequence and loaded
                // as one file.
@@ -118,6 +118,7 @@ class WebInstallerOutput {
                $cssFileNames = array(
 
                        // Basically the "skins.vector" ResourceLoader module styles
+                       'common/shared.css',
                        'common/commonElements.css',
                        'common/commonContent.css',
                        'common/commonInterface.css',
index a7ec2df..a193afb 100644 (file)
@@ -1269,7 +1269,7 @@ abstract class WebInstaller_Document extends WebInstallerPage {
        }
 
        public function getFileContents() {
-               $file = dirname( __FILE__ ) . '/../../' . $this->getFileName();
+               $file = __DIR__ . '/../../' . $this->getFileName();
                if( ! file_exists( $file ) ) {
                        return wfMessage( 'config-nofile', $file )->plain();
                }
index 5b86a90..b1b96b6 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup JobQueue
  */
 class DoubleRedirectJob extends Job {
-       var $reason, $redirTitle, $destTitleText;
+       var $reason, $redirTitle;
 
        /**
         * @var User
@@ -77,7 +77,6 @@ class DoubleRedirectJob extends Job {
                parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
                $this->reason = $params['reason'];
                $this->redirTitle = Title::newFromText( $params['redirTitle'] );
-               $this->destTitleText = !empty( $params['destTitle'] ) ? $params['destTitle'] : '';
        }
 
        /**
@@ -89,13 +88,13 @@ class DoubleRedirectJob extends Job {
                        return false;
                }
 
-               $targetRev = Revision::newFromTitle( $this->title );
+               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
                if ( !$targetRev ) {
                        wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
                        return true;
                }
-               $text = $targetRev->getText();
-               $currentDest = Title::newFromRedirect( $text );
+               $content = $targetRev->getContent();
+               $currentDest = $content->getRedirectTarget();
                if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
                        wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
                        return true;
@@ -103,7 +102,7 @@ class DoubleRedirectJob extends Job {
 
                # Check for a suppression tag (used e.g. in periodically archived discussions)
                $mw = MagicWord::get( 'staticredirect' );
-               if ( $mw->match( $text ) ) {
+               if ( $content->matchMagicWord( $mw ) ) {
                        wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
                        return true;
                }
@@ -122,17 +121,13 @@ class DoubleRedirectJob extends Job {
 
                # Preserve fragment (bug 14904)
                $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
-                       $currentDest->getFragment() );
+                       $currentDest->getFragment(), $newTitle->getInterwiki() );
 
                # Fix the text
-               # Remember that redirect pages can have categories, templates, etc.,
-               # so the regex has to be fairly general
-               $newText = preg_replace( '/ \[ \[  [^\]]*  \] \] /x',
-                       '[[' . $newTitle->getFullText() . ']]',
-                       $text, 1 );
-
-               if ( $newText === $text ) {
-                       $this->setLastError( 'Text unchanged???' );
+               $newContent = $content->updateRedirect( $newTitle );
+
+               if ( $newContent->equals( $content ) ) {
+                       $this->setLastError( 'Content unchanged???' );
                        return false;
                }
 
@@ -144,7 +139,7 @@ class DoubleRedirectJob extends Job {
                $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
                        $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
                )->inContentLanguage()->text();
-               $article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
+               $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
                $wgUser = $oldUser;
 
                return true;
@@ -171,9 +166,17 @@ class DoubleRedirectJob extends Job {
                        }
                        $seenTitles[$titleText] = true;
 
+                       if ( $title->getInterwiki() ) {
+                               // If the target is interwiki, we have to break early (bug 40352).
+                               // Otherwise it will look up a row in the local page table
+                               // with the namespace/page of the interwiki target which can cause
+                               // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
+                               break;
+                       }
+
                        $row = $dbw->selectRow(
                                array( 'redirect', 'page' ),
-                               array( 'rd_namespace', 'rd_title' ),
+                               array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
                                array(
                                        'rd_from=page_id',
                                        'page_namespace' => $title->getNamespace(),
@@ -183,7 +186,7 @@ class DoubleRedirectJob extends Job {
                                # No redirect from here, chain terminates
                                break;
                        } else {
-                               $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title );
+                               $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
                        }
                }
                return $dest;
index d7c9563..270671e 100644 (file)
@@ -151,17 +151,21 @@ abstract class Job {
 
                // Try to delete it from the master
                $dbw = wfGetDB( DB_MASTER );
+               $dbw->begin( __METHOD__ );
                $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
                $affected = $dbw->affectedRows();
                $dbw->commit( __METHOD__ );
 
                if ( !$affected ) {
+                       $dbw->begin( __METHOD__ );
+
                        // Failed, someone else beat us to it
                        // Try getting a random row
                        $row = $dbw->selectRow( 'job', array( 'minjob' => 'MIN(job_id)',
                                'maxjob' => 'MAX(job_id)' ), '1=1', __METHOD__ );
                        if ( $row === false || is_null( $row->minjob ) || is_null( $row->maxjob ) ) {
                                // No jobs to get
+                               $dbw->rollback( __METHOD__ );
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
@@ -171,6 +175,7 @@ abstract class Job {
                        if ( $row === false ) {
                                // Random job gone before we got the chance to select it
                                // Give up
+                               $dbw->rollback( __METHOD__ );
                                wfProfileOut( __METHOD__ );
                                return false;
                        }
@@ -403,6 +408,7 @@ abstract class Job {
 
                $fields = $this->insertFields();
                unset( $fields['job_id'] );
+               unset( $fields['job_timestamp'] );
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
                $dbw->delete( 'job', $fields, __METHOD__ );
index 6b8dede..c4370f4 100644 (file)
@@ -55,7 +55,7 @@ class RefreshLinksJob extends Job {
                        wfGetLB()->waitFor( $this->params['masterPos'] );
                }
 
-               $revision = Revision::newFromTitle( $this->title, 0, Revision::READ_NORMAL );
+               $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        $this->error = 'refreshLinks: Article not found "' .
                                $this->title->getPrefixedDBkey() . '"';
@@ -70,16 +70,16 @@ class RefreshLinksJob extends Job {
        }
 
        public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
-               global $wgParser, $wgContLang;
+               global $wgContLang;
 
                wfProfileIn( $fname . '-parse' );
                $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
-               $parserOutput = $wgParser->parse(
-                       $revision->getText(), $title, $options, true, true, $revision->getId() );
+               $content = $revision->getContent();
+               $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
                wfProfileOut( $fname . '-parse' );
 
                wfProfileIn( $fname . '-update' );
-               $updates = $parserOutput->getSecondaryDataUpdates( $title, false );
+               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput  );
                DataUpdate::runUpdates( $updates );
                wfProfileOut( $fname . '-update' );
        }
@@ -185,7 +185,7 @@ class RefreshLinksJob2 extends Job {
                        }
                        # Re-parse each page that transcludes this page and update their tracking links...
                        foreach ( $titles as $title ) {
-                               $revision = Revision::newFromTitle( $title, 0, Revision::READ_NORMAL );
+                               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                                if ( !$revision ) {
                                        $this->error = 'refreshLinks: Article not found "' .
                                                $title->getPrefixedDBkey() . '"';
index aa60fbd..f67700c 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-require_once dirname( __FILE__ ) . '/Services_JSON.php';
+require_once __DIR__ . '/Services_JSON.php';
 
 /**
  * JSON formatter wrapper class
index e6672b4..4ebbc49 100644 (file)
@@ -268,10 +268,17 @@ class CSSJanus {
         * @return string
         */
        private static function fixBackgroundPosition( $css ) {
-               $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage'],
+               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage'],
                        array( 'self', 'calculateNewBackgroundPosition' ), $css );
-               $css = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'],
+               if ( $replaced !== null ) {
+                       // Check for null; sometimes preg_replace_callback() returns null here for some weird reason
+                       $css = $replaced;
+               }
+               $replaced = preg_replace_callback( self::$patterns['bg_horizontal_percentage_x'],
                        array( 'self', 'calculateNewBackgroundPosition' ), $css );
+               if ( $replaced !== null ) {
+                       $css = $replaced;
+               }
 
                return $css;
        }
index d4cc525..e72541c 100644 (file)
@@ -28,7 +28,6 @@
  * @since 1.20
  *
  * @file
- * @ingroup Diff
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
@@ -61,13 +60,11 @@ abstract class GenericArrayObject extends ArrayObject {
         * @return integer
         */
        protected function getNewOffset() {
-               while ( true ) {
-                       if ( !$this->offsetExists( $this->indexOffset ) ) {
-                               return $this->indexOffset;
-                       }
-
+               while ( $this->offsetExists( $this->indexOffset ) ) {
                        $this->indexOffset++;
                }
+
+               return $this->indexOffset;
        }
 
        /**
@@ -142,11 +139,11 @@ abstract class GenericArrayObject extends ArrayObject {
         * @param mixed $index
         * @param mixed $value
         *
-        * @throws Exception
+        * @throws InvalidArgumentException
         */
        protected function setElement( $index, $value ) {
                if ( !$this->hasValidType( $value ) ) {
-                       throw new Exception(
+                       throw new InvalidArgumentException(
                                'Can only add ' . $this->getObjectType() . ' implementing objects to ' . get_called_class() . '.'
                        );
                }
index 6016641..c478b43 100644 (file)
@@ -166,7 +166,7 @@ class LogEventsList extends ContextSource {
                        $query[$queryKey] = $hideVal;
 
                        $link = Linker::linkKnown(
-                               $this->getDisplayTitle(),
+                               $this->getTitle(),
                                $messages[$hideVal],
                                array(),
                                $query
@@ -351,9 +351,9 @@ class LogEventsList extends ContextSource {
                $user = $this->getUser();
                // Don't show useless checkbox to people who cannot hide log entries
                if( $user->isAllowed( 'deletedhistory' ) ) {
-                       if( $row->log_deleted || $user->isAllowed( 'deletelogentry' ) ) {
-                               $canHide = $user->isAllowed( 'deletelogentry' );
-                               if ( $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
+                       $canHide = $user->isAllowed( 'deletelogentry' );
+                       if( $row->log_deleted || $canHide ) {
+                               if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
                                        if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
                                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                                        } else {
index 7586bb6..7d94a30 100644 (file)
@@ -429,6 +429,7 @@ class LogFormatter {
         * value in consideration.
         * @param $title Title the page
         * @param $parameters array query parameters
+        * @throws MWException
         * @return String
         */
        protected function makePageLink( Title $title = null, $parameters = array() ) {
index 8a4b943..ca9b636 100644 (file)
@@ -167,8 +167,11 @@ class BitmapHandler extends ImageHandler {
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
-                       return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
-                               $scalerParams['clientHeight'], false );
+                       $params = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, false, $params );
                }
 
                # Try to make a target path for the thumbnail
@@ -220,8 +223,11 @@ class BitmapHandler extends ImageHandler {
                } elseif ( $mto ) {
                        return $mto;
                } else {
-                       return new ThumbnailImage( $image, $dstUrl, $scalerParams['clientWidth'],
-                               $scalerParams['clientHeight'], $dstPath );
+                       $params = array(
+                               'width' => $scalerParams['clientWidth'],
+                               'height' => $scalerParams['clientHeight']
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
        }
 
@@ -258,14 +264,17 @@ class BitmapHandler extends ImageHandler {
         * client side
         *
         * @param $image File File associated with this thumbnail
-        * @param $params array Array with scaler params
+        * @param $scalerParams array Array with scaler params
         * @return ThumbnailImage
         *
         * @todo fixme: no rotation support
         */
-       protected function getClientScalingThumbnailImage( $image, $params ) {
-               return new ThumbnailImage( $image, $image->getURL(),
-                       $params['clientWidth'], $params['clientHeight'], null );
+       protected function getClientScalingThumbnailImage( $image, $scalerParams ) {
+               $params = array(
+                       'width' => $scalerParams['clientWidth'],
+                       'height' => $scalerParams['clientHeight']
+               );
+               return new ThumbnailImage( $image, $image->getURL(), null, $params );
        }
 
        /**
@@ -614,7 +623,8 @@ class BitmapHandler extends ImageHandler {
         * to filter down to users.
         *
         * @param $path string The file path
-        * @param $scene string The scene specification, or false if there is none
+        * @param bool|string $scene The scene specification, or false if there is none
+        * @throws MWException
         * @return string
         */
        function escapeMagickInput( $path, $scene = false ) {
@@ -645,7 +655,8 @@ class BitmapHandler extends ImageHandler {
         * helper function for escapeMagickInput() and escapeMagickOutput().
         *
         * @param $path string The file path
-        * @param $scene string The scene specification, or false if there is none
+        * @param bool|string $scene The scene specification, or false if there is none
+        * @throws MWException
         * @return string
         */
        protected function escapeMagickPath( $path, $scene = false ) {
index 0a19554..d2edc9f 100644 (file)
@@ -257,6 +257,7 @@ class BitmapMetadataHandler {
         *
         * The various exceptions this throws are caught later.
         * @param $filename String
+        * @throws MWException
         * @return Array The metadata.
         */
        static public function Tiff ( $filename ) {
index 8cb5138..63af255 100644 (file)
@@ -52,7 +52,6 @@ class BitmapHandler_ClientOnly extends BitmapHandler {
                if ( !$this->normaliseParams( $image, $params ) ) {
                        return new TransformParameterError( $params );
                }
-               return new ThumbnailImage( $image, $image->getURL(), $params['width'], 
-                       $params['height'], $image->getLocalRefPath() );
+               return new ThumbnailImage( $image, $image->getURL(), $image->getLocalRefPath(), $params );
        }
 }
index ea4888a..84672e0 100644 (file)
@@ -157,7 +157,12 @@ class DjVuHandler extends ImageHandler {
                }
 
                if ( $flags & self::TRANSFORM_LATER ) {
-                       return new ThumbnailImage( $image, $dstUrl, $width, $height, $dstPath, $page );
+                       $params = array(
+                               'width' => $width,
+                               'height' => $height,
+                               'page' => $page
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
 
                if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
@@ -192,7 +197,12 @@ class DjVuHandler extends ImageHandler {
                                        wfHostname(), $retval, trim($err), $cmd ) );
                        return new MediaTransformError( 'thumbnail_error', $width, $height, $err );
                } else {
-                       return new ThumbnailImage( $image, $dstUrl, $width, $height, $dstPath, $page );
+                       $params = array(
+                               'width' => $width,
+                               'height' => $height,
+                               'page' => $page
+                       );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
        }
 
index f5dc020..104ba55 100644 (file)
@@ -104,6 +104,7 @@ class Exif {
         *
         * @param $file String: filename.
         * @param $byteOrder String Type of byte ordering either 'BE' (Big Endian) or 'LE' (Little Endian). Default ''.
+        * @throws MWException
         * @todo FIXME: The following are broke:
         * SubjectArea. Need to test the more obscure tags.
         *
@@ -370,6 +371,12 @@ class Exif {
                $this->exifGPStoNumber( 'GPSDestLongitude' );
 
                if ( isset( $this->mFilteredExifData['GPSAltitude'] ) && isset( $this->mFilteredExifData['GPSAltitudeRef'] ) ) {
+
+                       // We know altitude data is a <num>/<denom> from the validation functions ran earlier.
+                       // But multiplying such a string by -1 doesn't work well, so convert.
+                       list( $num, $denom ) = explode( '/', $this->mFilteredExifData['GPSAltitude'] );
+                       $this->mFilteredExifData['GPSAltitude'] = $num / $denom;
+
                        if ( $this->mFilteredExifData['GPSAltitudeRef'] === "\1" ) {
                                $this->mFilteredExifData['GPSAltitude'] *= - 1;
                        }
index 35305d1..f2710f7 100644 (file)
@@ -100,14 +100,20 @@ class FormatMetadata {
                                ) {
                                        continue;
                                }
-                               $tags[$tag] = intval( $h[0] / $h[1] )
+                               $tags[$tag] = str_pad( intval( $h[0] / $h[1] ), 2, '0', STR_PAD_LEFT )
                                        . ':' . str_pad( intval( $m[0] / $m[1] ), 2, '0', STR_PAD_LEFT )
                                        . ':' . str_pad( intval( $s[0] / $s[1] ), 2, '0', STR_PAD_LEFT );
 
-                               $time = wfTimestamp( TS_MW, '1971:01:01 ' . $tags[$tag] );
-                               // the 1971:01:01 is just a placeholder, and not shown to user.
-                               if ( $time && intval( $time ) > 0 ) {
-                                       $tags[$tag] = $wgLang->time( $time );
+                               try {
+                                       $time = wfTimestamp( TS_MW, '1971:01:01 ' . $tags[$tag] );
+                                       // the 1971:01:01 is just a placeholder, and not shown to user.
+                                       if ( $time && intval( $time ) > 0 ) {
+                                               $tags[$tag] = $wgLang->time( $time );
+                                       }
+                               } catch ( TimestampException $e ) {
+                                       // This shouldn't happen, but we've seen bad formats
+                                       // such as 4-digit seconds in the wild.
+                                       // leave $tags[$tag] as-is
                                }
                                continue;
                        }
@@ -1355,7 +1361,7 @@ class FormatExif {
         * @param $meta array
         */
        function FormatExif( $meta ) {
-               wfDeprecated(__METHOD__);
+               wfDeprecated( __METHOD__, '1.18' );
                $this->meta = $meta;
        }
 
index 5fc5c1a..f6ca775 100644 (file)
@@ -260,6 +260,7 @@ class GIFMetadataExtractor {
 
        /**
         * @param $data
+        * @throws Exception
         * @return int
         */
        static function decodeBPP( $data ) {
@@ -276,7 +277,7 @@ class GIFMetadataExtractor {
 
        /**
         * @param $fh
-        * @return
+        * @throws Exception
         */
        static function skipBlock( $fh ) {
                while ( !feof( $fh ) ) {
@@ -290,6 +291,7 @@ class GIFMetadataExtractor {
                        fread( $fh, $block_len );
                }
        }
+
        /**
         * Read a block. In the GIF format, a block is made up of
         * several sub-blocks. Each sub block starts with one byte
@@ -301,6 +303,7 @@ class GIFMetadataExtractor {
         *  sub-blocks in the returned value. Normally this is false,
         *  except XMP is weird and does a hack where you need to keep
         *  these length bytes.
+        * @throws Exception
         * @return string The data.
         */
        static function readBlock( $fh, $includeLengths = false ) {
index 65757c9..6175907 100644 (file)
@@ -189,11 +189,9 @@ abstract class ImageHandler extends MediaHandler {
                        return false;
                }
                $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
-               $page = isset( $params['page'] ) ? $params['page'] : false;
 
                if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
-                       return new ThumbnailImage( $image,
-                               $url, $params['width'], $params['height'], false, $page );
+                       return new ThumbnailImage( $image, $url, false, $params );
                }
        }
 
index 8d7e43b..ecf216a 100644 (file)
@@ -165,10 +165,11 @@ class JpegMetadataExtractor {
        }
 
        /**
-       * Helper function for jpegSegmentSplitter
-       * @param &$fh FileHandle for jpeg file
-       * @return string data content of segment.
-       */
+        * Helper function for jpegSegmentSplitter
+        * @param &$fh FileHandle for jpeg file
+        * @throws MWException
+        * @return string data content of segment.
+        */
        private static function jpegExtractMarker( &$fh ) {
                $size = wfUnpack( "nint", fread( $fh, 2 ), 2 );
                if ( $size['int'] <= 2 ) {
index cee5bbf..c5e4566 100644 (file)
@@ -214,25 +214,46 @@ class ThumbnailImage extends MediaTransformOutput {
         * Get a thumbnail object from a file and parameters.
         * If $path is set to null, the output file is treated as a source copy.
         * If $path is set to false, no output file will be created.
+        * $parameters should include, as a minimum, (file) 'width' and 'height'.
+        * It may also include a 'page' parameter for multipage files.
         *
         * @param $file File object
         * @param $url String: URL path to the thumb
-        * @param $width Integer: file's width
-        * @param $height Integer: file's height
         * @param $path String|bool|null: filesystem path to the thumb
-        * @param $page Integer: page number, for multipage files
+        * @param $parameters Array: Associative array of parameters
         * @private
         */
-       function __construct( $file, $url, $width, $height, $path = false, $page = false ) {
+       function __construct( $file, $url, $path = false, $parameters = array() ) {
+               # Previous parameters:
+               #   $file, $url, $width, $height, $path = false, $page = false
+
+               if( is_array( $parameters ) ){
+                       $defaults = array(
+                               'page' => false
+                       );
+                       $actualParams = $parameters + $defaults;
+               } else {
+                       # Using old format, should convert. Later a warning could be added here.
+                       $numArgs = func_num_args();
+                       $actualParams = array(
+                               'width' => $path,
+                               'height' => $parameters,
+                               'page' => ( $numArgs > 5 ) ? func_get_arg( 5 ) : false
+                       );
+                       $path = ( $numArgs > 4 ) ? func_get_arg( 4 ) : false;
+               }
+
                $this->file = $file;
                $this->url = $url;
+               $this->path = $path;
+
                # These should be integers when they get here.
                # If not, there's a bug somewhere.  But let's at
                # least produce valid HTML code regardless.
-               $this->width = round( $width );
-               $this->height = round( $height );
-               $this->path = $path;
-               $this->page = $page;
+               $this->width = round( $actualParams['width'] );
+               $this->height = round( $actualParams['height'] );
+
+               $this->page = $actualParams['page'];
        }
 
        /**
@@ -260,6 +281,7 @@ class ThumbnailImage extends MediaTransformOutput {
         * For images, desc-link and file-link are implemented as a click-through. For
         * sounds and videos, they may be displayed in other ways.
         *
+        * @throws MWException
         * @return string
         */
        function toHtml( $options = array() ) {
index a5ce1fa..75d474c 100644 (file)
@@ -117,7 +117,7 @@ class SvgHandler extends ImageHandler {
                $physicalHeight = $params['physicalHeight'];
 
                if ( $flags & self::TRANSFORM_LATER ) {
-                       return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                }
 
                if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) {
@@ -128,21 +128,22 @@ class SvgHandler extends ImageHandler {
                $srcPath = $image->getLocalRefPath();
                $status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight );
                if( $status === true ) {
-                       return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
+                       return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
                } else {
                        return $status; // MediaTransformError
                }
        }
 
        /**
-       * Transform an SVG file to PNG
-       * This function can be called outside of thumbnail contexts
-       * @param string $srcPath
-       * @param string $dstPath
-       * @param string $width
-       * @param string $height
-       * @return bool|MediaTransformError
-       */
+        * Transform an SVG file to PNG
+        * This function can be called outside of thumbnail contexts
+        * @param string $srcPath
+        * @param string $dstPath
+        * @param string $width
+        * @param string $height
+        * @throws MWException
+        * @return bool|MediaTransformError
+        */
        public function rasterize( $srcPath, $dstPath, $width, $height ) {
                global $wgSVGConverters, $wgSVGConverter, $wgSVGConverterPath;
                $err = false;
@@ -275,7 +276,15 @@ class SvgHandler extends ImageHandler {
        }
 
        function isMetadataValid( $image, $metadata ) {
-               return $this->unpackMetadata( $metadata ) !== false;
+               $meta = $this->unpackMetadata( $metadata );
+               if ( $meta === false ) {
+                       return self::METADATA_BAD;
+               }
+               if ( !isset( $meta['originalWidth'] ) ) {
+                       // Old but compatible
+                       return self::METADATA_COMPATIBLE;
+               }
+               return self::METADATA_GOOD;
        }
 
        function visibleMetadataFields() {
@@ -312,8 +321,8 @@ class SvgHandler extends ImageHandler {
                // Rename fields to be compatible with exif, so that
                // the labels for these fields work and reuse existing messages.
                $conversion = array(
-                       'width' => 'imagewidth',
-                       'height' => 'imagelength',
+                       'originalwidth' => 'imagewidth',
+                       'originalheight' => 'imagelength',
                        'description' => 'imagedescription',
                        'title' => 'objectname',
                );
index 89e1e0c..871d419 100644 (file)
@@ -52,6 +52,7 @@ class SVGReader {
         *
         * Creates an SVGReader drawing from the source provided
         * @param $source String: URI from which to read
+        * @throws MWException|Exception
         */
        function __construct( $source ) {
                global $wgSVGMetadataCutoff;
@@ -83,6 +84,12 @@ class SVGReader {
                $this->metadata['width'] = self::DEFAULT_WIDTH;
                $this->metadata['height'] = self::DEFAULT_HEIGHT;
 
+               // The size in the units specified by the SVG file
+               // (for the metadata box)
+               // Per the SVG spec, if unspecified, default to '100%'
+               $this->metadata['originalWidth'] = '100%';
+               $this->metadata['originalHeight'] = '100%';
+
                // Because we cut off the end of the svg making an invalid one. Complicated
                // try catch thing to make sure warnings get restored. Seems like there should
                // be a better way.
@@ -90,6 +97,8 @@ class SVGReader {
                try {
                        $this->read();
                } catch( Exception $e ) {
+                       // Note, if this happens, the width/height will be taken to be 0x0.
+                       // Should we consider it the default 512x512 instead?
                        wfRestoreWarnings();
                        throw $e;
                }
@@ -105,6 +114,7 @@ class SVGReader {
 
        /**
         * Read the SVG
+        * @throws MWException
         * @return bool
         */
        public function read() {
@@ -188,6 +198,7 @@ class SVGReader {
         * Read an XML snippet from an element
         *
         * @param String $metafield that we will fill with the result
+        * @throws MWException
         */
        private function readXml( $metafield=null ) {
                $this->debug ( "Read top level metadata" );
@@ -288,9 +299,11 @@ class SVGReader {
                }
                if( $this->reader->getAttribute('width') ) {
                        $width = $this->scaleSVGUnit( $this->reader->getAttribute('width'), $defaultWidth );
+                       $this->metadata['originalWidth'] = $this->reader->getAttribute( 'width' );
                }
                if( $this->reader->getAttribute('height') ) {
                        $height = $this->scaleSVGUnit( $this->reader->getAttribute('height'), $defaultHeight );
+                       $this->metadata['originalHeight'] = $this->reader->getAttribute( 'height' );
                }
 
                if( !isset( $width ) && !isset( $height ) ) {
index d95c907..55dff77 100644 (file)
@@ -70,8 +70,9 @@ class TiffHandler extends ExifBitmapHandler {
        }
 
        /**
-        * @param $image
-        * @param $filename
+        * @param File $image
+        * @param string $filename
+        * @throws MWException
         * @return string
         */
        function getMetadata( $image, $filename ) {
index 75fdd96..c5743d7 100644 (file)
@@ -213,10 +213,16 @@ class XMPReader {
                unset( $data['xmp-special'] );
 
                // Convert GPSAltitude to negative if below sea level.
-               if ( isset( $data['xmp-exif']['GPSAltitudeRef'] ) ) {
-                       if ( $data['xmp-exif']['GPSAltitudeRef'] == '1'
-                               && isset( $data['xmp-exif']['GPSAltitude'] )
-                       ) {
+               if ( isset( $data['xmp-exif']['GPSAltitudeRef'] )
+                       && isset( $data['xmp-exif']['GPSAltitude'] )
+               ) {
+
+                       // Must convert to a real before multiplying by -1
+                       // XMPValidate guarantees there will always be a '/' in this value.
+                       list( $nom, $denom ) = explode( '/', $data['xmp-exif']['GPSAltitude'] );
+                       $data['xmp-exif']['GPSAltitude'] = $nom / $denom;
+
+                       if ( $data['xmp-exif']['GPSAltitudeRef'] == '1' ) {
                                $data['xmp-exif']['GPSAltitude'] *= -1;
                        }
                        unset( $data['xmp-exif']['GPSAltitudeRef'] );
@@ -226,17 +232,18 @@ class XMPReader {
        }
 
        /**
-       * Main function to call to parse XMP. Use getResults to
-       * get results.
-       *
-       * Also catches any errors during processing, writes them to
-       * debug log, blanks result array and returns false.
-       *
-       * @param $content String: XMP data
-       * @param $allOfIt Boolean: If this is all the data (true) or if its split up (false). Default true
-       * @param $reset Boolean: does xml parser need to be reset. Default false
-       * @return Boolean success.
-       */
+        * Main function to call to parse XMP. Use getResults to
+        * get results.
+        *
+        * Also catches any errors during processing, writes them to
+        * debug log, blanks result array and returns false.
+        *
+        * @param $content String: XMP data
+        * @param $allOfIt Boolean: If this is all the data (true) or if its split up (false). Default true
+        * @param $reset Boolean: does xml parser need to be reset. Default false
+        * @throws MWException
+        * @return Boolean success.
+        */
        public function parse( $content, $allOfIt = true, $reset = false ) {
                if ( $reset ) {
                        $this->resetXMLParser();
@@ -457,22 +464,23 @@ class XMPReader {
        }
 
        /**
-       * Hit a closing element in MODE_STRUCT, MODE_SEQ, MODE_BAG
-       * generally means we've finished processing a nested structure.
-       * resets some internal variables to indicate that.
-       *
-       * Note this means we hit the closing element not the "</rdf:Seq>".
-       *
-       * @par For example, when processing:
-       * @code{,xml}
-       * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
-       *   </rdf:Seq> </exif:ISOSpeedRatings>
-       * @endcode
-       *
-       * This method is called when we hit the "</exif:ISOSpeedRatings>" tag.
-       *
-       * @param $elm String namespace . space . tag name.
-       */
+        * Hit a closing element in MODE_STRUCT, MODE_SEQ, MODE_BAG
+        * generally means we've finished processing a nested structure.
+        * resets some internal variables to indicate that.
+        *
+        * Note this means we hit the closing element not the "</rdf:Seq>".
+        *
+        * @par For example, when processing:
+        * @code{,xml}
+        * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
+        *   </rdf:Seq> </exif:ISOSpeedRatings>
+        * @endcode
+        *
+        * This method is called when we hit the "</exif:ISOSpeedRatings>" tag.
+        *
+        * @param $elm String namespace . space . tag name.
+        * @throws MWException
+        */
        private function endElementNested( $elm ) {
 
                /* cur item must be the same as $elm, unless if in MODE_STRUCT
@@ -522,23 +530,24 @@ class XMPReader {
        }
 
        /**
-       * Hit a closing element in MODE_LI (either rdf:Seq, or rdf:Bag )
-       * Add information about what type of element this is.
-       *
-       * Note we still have to hit the outer "</property>"
-       *
-       * @par For example, when processing:
-       * @code{,xml}
-       * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
-       *   </rdf:Seq> </exif:ISOSpeedRatings>
-       * @endcode
-       *
-       * This method is called when we hit the "</rdf:Seq>".
-       * (For comparison, we call endElementModeSimple when we
-       * hit the "</rdf:li>")
-       *
-       * @param $elm String namespace . ' ' . element name
-       */
+        * Hit a closing element in MODE_LI (either rdf:Seq, or rdf:Bag )
+        * Add information about what type of element this is.
+        *
+        * Note we still have to hit the outer "</property>"
+        *
+        * @par For example, when processing:
+        * @code{,xml}
+        * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
+        *   </rdf:Seq> </exif:ISOSpeedRatings>
+        * @endcode
+        *
+        * This method is called when we hit the "</rdf:Seq>".
+        * (For comparison, we call endElementModeSimple when we
+        * hit the "</rdf:li>")
+        *
+        * @param $elm String namespace . ' ' . element name
+        * @throws MWException
+        */
        private function endElementModeLi( $elm ) {
 
                list( $ns, $tag ) = explode( ' ', $this->curItem[0], 2 );
@@ -593,17 +602,18 @@ class XMPReader {
        }
 
        /**
-       * Handler for hitting a closing element.
-       *
-       * generally just calls a helper function depending on what
-       * mode we're in.
-       *
-       * Ignores the outer wrapping elements that are optional in
-       * xmp and have no meaning.
-       *
-       * @param $parser XMLParser
-       * @param $elm String namespace . ' ' . element name
-       */
+        * Handler for hitting a closing element.
+        *
+        * generally just calls a helper function depending on what
+        * mode we're in.
+        *
+        * Ignores the outer wrapping elements that are optional in
+        * xmp and have no meaning.
+        *
+        * @param $parser XMLParser
+        * @param $elm String namespace . ' ' . element name
+        * @throws MWException
+        */
        function endElement( $parser, $elm ) {
                if ( $elm === ( self::NS_RDF . ' RDF' )
                        || $elm === 'adobe:ns:meta/ xmpmeta'
@@ -753,22 +763,23 @@ class XMPReader {
        }
 
        /**
-       * Handle an opening element when in MODE_SIMPLE
-       *
-       * This should not happen often. This is for if a simple element
-       * already opened has a child element. Could happen for a
-       * qualified element.
-       *
-       * For example:
-       * <exif:DigitalZoomRatio><rdf:Description><rdf:value>0/10</rdf:value>
-       *   <foo:someQualifier>Bar</foo:someQualifier> </rdf:Description>
-       *   </exif:DigitalZoomRatio>
-       *
-       * This method is called when processing the <rdf:Description> element
-       *
-       * @param $elm String namespace and tag names separated by space.
-       * @param $attribs Array Attributes of the element.
-       */
+        * Handle an opening element when in MODE_SIMPLE
+        *
+        * This should not happen often. This is for if a simple element
+        * already opened has a child element. Could happen for a
+        * qualified element.
+        *
+        * For example:
+        * <exif:DigitalZoomRatio><rdf:Description><rdf:value>0/10</rdf:value>
+        *   <foo:someQualifier>Bar</foo:someQualifier> </rdf:Description>
+        *   </exif:DigitalZoomRatio>
+        *
+        * This method is called when processing the <rdf:Description> element
+        *
+        * @param $elm String namespace and tag names separated by space.
+        * @param $attribs Array Attributes of the element.
+        * @throws MWException
+        */
        private function startElementModeSimple( $elm, $attribs ) {
                if ( $elm === self::NS_RDF . ' Description' ) {
                        // If this value has qualifiers
@@ -818,16 +829,17 @@ class XMPReader {
        }
 
        /**
-       * Starting an element when in MODE_INITIAL
-       * This usually happens when we hit an element inside
-       * the outer rdf:Description
-       *
-       * This is generally where most properties start.
-       *
-       * @param $ns String Namespace
-       * @param $tag String tag name (without namespace prefix)
-       * @param $attribs Array array of attributes
-       */
+        * Starting an element when in MODE_INITIAL
+        * This usually happens when we hit an element inside
+        * the outer rdf:Description
+        *
+        * This is generally where most properties start.
+        *
+        * @param $ns String Namespace
+        * @param $tag String tag name (without namespace prefix)
+        * @param $attribs Array array of attributes
+        * @throws MWException
+        */
        private function startElementModeInitial( $ns, $tag, $attribs ) {
                if ( $ns !== self::NS_RDF ) {
 
@@ -871,23 +883,24 @@ class XMPReader {
        }
 
        /**
-       * Hit an opening element when in a Struct (MODE_STRUCT)
-       * This is generally for fields of a compound property.
-       *
-       * Example of a struct (abbreviated; flash has more properties):
-       *
-       * <exif:Flash> <rdf:Description> <exif:Fired>True</exif:Fired>
-       *  <exif:Mode>1</exif:Mode></rdf:Description></exif:Flash>
-       *
-       * or:
-       *
-       * <exif:Flash rdf:parseType='Resource'> <exif:Fired>True</exif:Fired>
-       *  <exif:Mode>1</exif:Mode></exif:Flash>
-       *
-       * @param $ns String namespace
-       * @param $tag String tag name (no ns)
-       * @param $attribs Array array of attribs w/ values.
-       */
+        * Hit an opening element when in a Struct (MODE_STRUCT)
+        * This is generally for fields of a compound property.
+        *
+        * Example of a struct (abbreviated; flash has more properties):
+        *
+        * <exif:Flash> <rdf:Description> <exif:Fired>True</exif:Fired>
+        *  <exif:Mode>1</exif:Mode></rdf:Description></exif:Flash>
+        *
+        * or:
+        *
+        * <exif:Flash rdf:parseType='Resource'> <exif:Fired>True</exif:Fired>
+        *  <exif:Mode>1</exif:Mode></exif:Flash>
+        *
+        * @param $ns String namespace
+        * @param $tag String tag name (no ns)
+        * @param $attribs Array array of attribs w/ values.
+        * @throws MWException
+        */
        private function startElementModeStruct( $ns, $tag, $attribs ) {
                if ( $ns !== self::NS_RDF ) {
 
@@ -1009,14 +1022,15 @@ class XMPReader {
        }
 
        /**
-       * Hits an opening element.
-       * Generally just calls a helper based on what MODE we're in.
-       * Also does some initial set up for the wrapper element
-       *
-       * @param $parser XMLParser
-       * @param $elm String namespace "<space>" element
-       * @param $attribs Array attribute name => value
-       */
+        * Hits an opening element.
+        * Generally just calls a helper based on what MODE we're in.
+        * Also does some initial set up for the wrapper element
+        *
+        * @param $parser XMLParser
+        * @param $elm String namespace "<space>" element
+        * @param $attribs Array attribute name => value
+        * @throws MWException
+        */
        function startElement( $parser, $elm, $attribs ) {
 
                if ( $elm === self::NS_RDF . ' RDF'
@@ -1094,19 +1108,20 @@ class XMPReader {
        }
 
        /**
-       * Process attributes.
-       * Simple values can be stored as either a tag or attribute
-       *
-       * Often the initial "<rdf:Description>" tag just has all the simple
-       * properties as attributes.
-       *
-       * @par Example:
-       * @code
-       * <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" exif:DigitalZoomRatio="0/10">
-       * @endcode
-       *
-       * @param $attribs Array attribute=>value array.
-       */
+        * Process attributes.
+        * Simple values can be stored as either a tag or attribute
+        *
+        * Often the initial "<rdf:Description>" tag just has all the simple
+        * properties as attributes.
+        *
+        * @par Example:
+        * @code
+        * <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" exif:DigitalZoomRatio="0/10">
+        * @endcode
+        *
+        * @param $attribs Array attribute=>value array.
+        * @throws MWException
+        */
        private function doAttribs( $attribs ) {
 
                // first check for rdf:parseType attribute, as that can change
index d96cb09..23471e9 100644 (file)
@@ -57,10 +57,6 @@ function donorm( $str ) {
        return rtrim( utf8_normalize( $str . "\x01", UtfNormal::UNORM_NFC ), "\x01" );
 }
 
-function wfMsg($x) {
-       return $x;
-}
-
 function showDiffs( $a, $b ) {
        $ota = explode( "\n", str_replace( "\r\n", "\n", $a ) );
        $nta = explode( "\n", str_replace( "\r\n", "\n", $b ) );
index 2b400e5..08f85bd 100644 (file)
@@ -190,7 +190,7 @@ class UtfNormal {
         */
        static function loadData() {
                if( !isset( self::$utfCombiningClass ) ) {
-                       require_once( dirname(__FILE__) . '/UtfNormalData.inc' );
+                       require_once( __DIR__ . '/UtfNormalData.inc' );
                }
        }
 
index 5a7729b..1a0de21 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
-
        /**
         * @param $key string
         * @return mixed
@@ -36,7 +35,11 @@ class APCBagOStuff extends BagOStuff {
                $val = apc_fetch( $key );
 
                if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
                }
 
                return $val;
@@ -49,7 +52,11 @@ class APCBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
-               apc_store( $key, serialize( $value ), $exptime );
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               apc_store( $key, $value, $exptime );
 
                return true;
        }
@@ -65,6 +72,14 @@ class APCBagOStuff extends BagOStuff {
                return true;
        }
 
+       public function incr( $key, $value = 1 ) {
+               return apc_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return apc_dec( $key, $value );
+       }
+
        /**
         * @return Array
         */
@@ -80,4 +95,3 @@ class APCBagOStuff extends BagOStuff {
                return $keys;
        }
 }
-
index fcc3aa9..7bbaff9 100644 (file)
@@ -164,21 +164,21 @@ abstract class BagOStuff {
        }
 
        /**
+        * Increase stored value of $key by $value while preserving its TTL
         * @param $key String: Key to increase
         * @param $value Integer: Value to add to $key (Default 1)
-        * @return null if lock is not possible else $key value increased by $value
-        * @return bool success
+        * @return integer|bool New value or false on failure
         */
        public function incr( $key, $value = 1 ) {
                if ( !$this->lock( $key ) ) {
-                       return null;
+                       return false;
                }
-
-               $value = intval( $value );
-
-               if ( ( $n = $this->get( $key ) ) !== false ) {
-                       $n += $value;
-                       $this->set( $key, $n ); // exptime?
+               $n = $this->get( $key );
+               if ( $this->isInteger( $n ) ) { // key exists?
+                       $n += intval( $value );
+                       $this->set( $key, max( 0, $n ) ); // exptime?
+               } else {
+                       $n = false;
                }
                $this->unlock( $key );
 
@@ -186,9 +186,10 @@ abstract class BagOStuff {
        }
 
        /**
+        * Decrease stored value of $key by $value while preserving its TTL
         * @param $key String
         * @param $value Integer
-        * @return bool success
+        * @return integer
         */
        public function decr( $key, $value = 1 ) {
                return $this->incr( $key, - $value );
@@ -218,7 +219,7 @@ abstract class BagOStuff {
        }
 
        /**
-        * Convert an optionally absolute expiry time to a relative time. If an 
+        * Convert an optionally absolute expiry time to a relative time. If an
         * absolute time is specified which is in the past, use a short expiry time.
         *
         * @param $exptime integer
@@ -235,4 +236,14 @@ abstract class BagOStuff {
                        return $exptime;
                }
        }
+
+       /**
+        * Check if a value is an integer
+        *
+        * @param $value mixed
+        * @return bool
+        */
+       protected function isInteger( $value ) {
+               return ( is_int( $value ) || ctype_digit( $value ) );
+       }
 }
index 8483d7e..36ced49 100644 (file)
@@ -45,8 +45,7 @@ class DBABagOStuff extends BagOStuff {
                        $params['dir'] = wfTempDir();
                }
 
-               $this->mFile = $params['dir']."/mw-cache-" . wfWikiID();
-               $this->mFile .= '.db';
+               $this->mFile = $params['dir'] . '/mw-cache-' . wfWikiID() . '.db';
                wfDebug( __CLASS__ . ": using cache file {$this->mFile}\n" );
                $this->mHandler = $wgDBAhandler;
        }
@@ -58,7 +57,7 @@ class DBABagOStuff extends BagOStuff {
         *
         * @return string
         */
-       function encode( $value, $expiry ) {
+       protected function encode( $value, $expiry ) {
                # Convert to absolute time
                $expiry = $this->convertExpiry( $expiry );
 
@@ -69,9 +68,9 @@ class DBABagOStuff extends BagOStuff {
         * @param $blob string
         * @return array list containing value first and expiry second
         */
-       function decode( $blob ) {
+       protected function decode( $blob ) {
                if ( !is_string( $blob ) ) {
-                       return array( null, 0 );
+                       return array( false, 0 );
                } else {
                        return array(
                                unserialize( substr( $blob, 11 ) ),
@@ -83,7 +82,7 @@ class DBABagOStuff extends BagOStuff {
        /**
         * @return resource
         */
-       function getReader() {
+       protected function getReader() {
                if ( file_exists( $this->mFile ) ) {
                        $handle = dba_open( $this->mFile, 'rl', $this->mHandler );
                } else {
@@ -100,7 +99,7 @@ class DBABagOStuff extends BagOStuff {
        /**
         * @return resource
         */
-       function getWriter() {
+       protected function getWriter() {
                $handle = dba_open( $this->mFile, 'cl', $this->mHandler );
 
                if ( !$handle ) {
@@ -112,16 +111,16 @@ class DBABagOStuff extends BagOStuff {
 
        /**
         * @param $key string
-        * @return mixed|null|string
+        * @return mixed
         */
-       function get( $key ) {
+       public function get( $key ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
                $handle = $this->getReader();
                if ( !$handle ) {
                        wfProfileOut( __METHOD__ );
-                       return null;
+                       return false;
                }
 
                $val = dba_fetch( $key, $handle );
@@ -130,13 +129,13 @@ class DBABagOStuff extends BagOStuff {
                # Must close ASAP because locks are held
                dba_close( $handle );
 
-               if ( !is_null( $val ) && $expiry && $expiry < time() ) {
+               if ( $val !== false && $expiry && $expiry < time() ) {
                        # Key is expired, delete it
                        $handle = $this->getWriter();
                        dba_delete( $key, $handle );
                        dba_close( $handle );
                        wfDebug( __METHOD__ . ": $key expired\n" );
-                       $val = null;
+                       $val = false;
                }
 
                wfProfileOut( __METHOD__ );
@@ -149,7 +148,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $exptime int
         * @return bool
         */
-       function set( $key, $value, $exptime = 0 ) {
+       public function set( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -173,7 +172,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $time int
         * @return bool
         */
-       function delete( $key, $time = 0 ) {
+       public function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
 
@@ -183,7 +182,7 @@ class DBABagOStuff extends BagOStuff {
                        return false;
                }
 
-               $ret = dba_delete( $key, $handle );
+               $ret = !dba_exists( $key, $handle ) || dba_delete( $key, $handle );
                dba_close( $handle );
 
                wfProfileOut( __METHOD__ );
@@ -196,7 +195,7 @@ class DBABagOStuff extends BagOStuff {
         * @param $exptime int
         * @return bool
         */
-       function add( $key, $value, $exptime = 0 ) {
+       public function add( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
 
                $blob = $this->encode( $value, $exptime );
@@ -214,7 +213,7 @@ class DBABagOStuff extends BagOStuff {
                if ( !$ret ) {
                        list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
 
-                       if ( $expiry < time() ) {
+                       if ( $expiry && $expiry < time() ) {
                                # Yes expired, delete and try again
                                dba_delete( $key, $handle );
                                $ret = dba_insert( $key, $blob, $handle );
@@ -229,8 +228,43 @@ class DBABagOStuff extends BagOStuff {
        }
 
        /**
-        * @return Array
+        * @param $key string
+        * @param $step integer
+        * @return integer|bool
         */
+       public function incr( $key, $step = 1 ) {
+               wfProfileIn( __METHOD__ );
+
+               $handle = $this->getWriter();
+
+               if ( !$handle ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
+               if ( $value !== false ) {
+                       if ( $expiry && $expiry < time() ) {
+                               # Key is expired, delete it
+                               dba_delete( $key, $handle );
+                               wfDebug( __METHOD__ . ": $key expired\n" );
+                               $value = false;
+                       } else {
+                               $value += $step;
+                               $blob = $this->encode( $value, $expiry );
+
+                               $ret = dba_replace( $key, $blob, $handle );
+                               $value = $ret ? $value : false;
+                       }
+               }
+
+               dba_close( $handle );
+
+               wfProfileOut( __METHOD__ );
+
+               return ( $value === false ) ? false : (int)$value;
+       }
+
        function keys() {
                $reader = $this->getReader();
                $k1 = dba_firstkey( $reader );
@@ -250,4 +284,3 @@ class DBABagOStuff extends BagOStuff {
                return $result;
        }
 }
-
index f86cf15..156c39e 100644 (file)
@@ -35,6 +35,7 @@ class EhcacheBagOStuff extends BagOStuff {
 
        /**
         * @param $params array
+        * @throws MWException
         */
        function __construct( $params ) {
                if ( !defined( 'CURLOPT_TIMEOUT_MS' ) ) {
index e6c6881..f55da94 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/*
+/**
  * Session storage in object cache.
  *
  * This program is free software; you can redistribute it and/or modify
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Session storage in object cache.
+ * Used if $wgSessionsInObjectCache is true.
+ *
+ * @ingroup Cache
+ */
 class ObjectCacheSessionHandler {
        /**
         * Install a session handler for the current web request
@@ -129,7 +136,7 @@ class ObjectCacheSessionHandler {
        }
 
        /**
-        * Shutdown function. See the comment inside ObjectCacheSessionHandler::install 
+        * Shutdown function. See the comment inside ObjectCacheSessionHandler::install
         * for rationale.
         */
        static function handleShutdown() {
index 67a3337..40784f5 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using Redis (http://redis.io/).
+ *
+ * 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 RedisBagOStuff extends BagOStuff {
        protected $connectTimeout, $persistent, $password, $automaticFailover;
@@ -9,16 +30,16 @@ class RedisBagOStuff extends BagOStuff {
        protected $servers;
 
        /**
-        * A cache of Redis objects, representing connections to Redis servers. 
+        * A cache of Redis objects, representing connections to Redis servers.
         * The key is the server name.
         */
        protected $conns = array();
 
        /**
-        * An array listing "dead" servers which have had a connection error in 
-        * the past. Servers are marked dead for a limited period of time, to 
+        * An array listing "dead" servers which have had a connection error in
+        * the past. Servers are marked dead for a limited period of time, to
         * avoid excessive overhead from repeated connection timeouts. The key in
-        * the array is the server name, the value is the UNIX timestamp at which 
+        * the array is the server name, the value is the UNIX timestamp at which
         * the server is resurrected.
         */
        protected $deadServers = array();
@@ -26,9 +47,9 @@ class RedisBagOStuff extends BagOStuff {
        /**
         * Construct a RedisBagOStuff object. Parameters are:
         *
-        *   - servers: An array of server names. A server name may be a hostname, 
+        *   - servers: An array of server names. A server name may be a hostname,
         *     a hostname/port combination or the absolute path of a UNIX socket.
-        *     If a hostname is specified but no port, the standard port number 
+        *     If a hostname is specified but no port, the standard port number
         *     6379 will be used. Required.
         *
         *   - connectTimeout: The timeout for new connections, in seconds. Optional,
@@ -37,16 +58,16 @@ class RedisBagOStuff extends BagOStuff {
         *   - persistent: Set this to true to allow connections to persist across
         *     multiple web requests. False by default.
         *
-        *   - password: The authentication password, will be sent to Redis in 
+        *   - password: The authentication password, will be sent to Redis in
         *     clear text. Optional, if it is unspecified, no AUTH command will be
         *     sent.
         *
         *   - automaticFailover: If this is false, then each key will be mapped to
         *     a single server, and if that server is down, any requests for that key
         *     will fail. If this is true, a connection failure will cause the client
-        *     to immediately try the next server in the list (as determined by a 
-        *     consistent hashing algorithm). True by default. This has the 
-        *     potential to create consistency issues if a server is slow enough to 
+        *     to immediately try the next server in the list (as determined by a
+        *     consistent hashing algorithm). True by default. This has the
+        *     potential to create consistency issues if a server is slow enough to
         *     flap, for example if it is in swap death.
         */
        function __construct( $params ) {
@@ -56,7 +77,7 @@ class RedisBagOStuff extends BagOStuff {
                }
 
                $this->servers = $params['servers'];
-               $this->connectTimeout = isset( $params['connectTimeout'] ) 
+               $this->connectTimeout = isset( $params['connectTimeout'] )
                        ? $params['connectTimeout'] : 1;
                $this->persistent = !empty( $params['persistent'] );
                if ( isset( $params['password'] ) ) {
@@ -106,7 +127,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-               
+
                $this->logRequest( 'set', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -196,7 +217,7 @@ class RedisBagOStuff extends BagOStuff {
        }
 
        /**
-        * Non-atomic implementation of replace(). Could perhaps be done atomically 
+        * Non-atomic implementation of replace(). Could perhaps be done atomically
         * with WATCH or scripting, but this function is rarely used.
         */
        public function replace( $key, $value, $expiry = 0 ) {
@@ -222,19 +243,19 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-                       
+
                $this->logRequest( 'replace', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
        }
 
        /**
-        * Non-atomic implementation of incr(). 
+        * Non-atomic implementation of incr().
         *
-        * Probably all callers actually want incr() to atomically initialise 
-        * values to zero if they don't exist, as provided by the Redis INCR 
-        * command. But we are constrained by the memcached-like interface to 
-        * return null in that case. Once the key exists, further increments are 
+        * Probably all callers actually want incr() to atomically initialise
+        * values to zero if they don't exist, as provided by the Redis INCR
+        * command. But we are constrained by the memcached-like interface to
+        * return null in that case. Once the key exists, further increments are
         * atomic.
         */
        public function incr( $key, $value = 1 ) {
@@ -254,7 +275,7 @@ class RedisBagOStuff extends BagOStuff {
                        $result = false;
                        $this->handleException( $server, $e );
                }
-                       
+
                $this->logRequest( 'incr', $key, $server, $result );
                wfProfileOut( __METHOD__ );
                return $result;
@@ -268,6 +289,12 @@ class RedisBagOStuff extends BagOStuff {
                        $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 );
@@ -294,6 +321,8 @@ class RedisBagOStuff extends BagOStuff {
         * Get a connection to the server with the specified name. Connections
         * are cached, and failures are persistent to avoid multiple timeouts.
         *
+        * @param $server
+        * @throws MWException
         * @return Redis object, or false on failure
         */
        protected function getConnectionToServer( $server ) {
@@ -317,7 +346,7 @@ class RedisBagOStuff extends BagOStuff {
 
                if ( substr( $server, 0, 1 ) === '/' ) {
                        // UNIX domain socket
-                       // These are required by the redis extension to start with a slash, but 
+                       // These are required by the redis extension to start with a slash, but
                        // we still need to set the port to a special value to make it work.
                        $host = $server;
                        $port = 0;
@@ -372,8 +401,8 @@ class RedisBagOStuff extends BagOStuff {
 
        /**
         * The redis extension throws an exception in response to various read, write
-        * and protocol errors. Sometimes it also closes the connection, sometimes 
-        * not. The safest response for us is to explicitly destroy the connection 
+        * and protocol errors. Sometimes it also closes the connection, sometimes
+        * not. The safest response for us is to explicitly destroy the connection
         * object and let it be reopened during the next request.
         */
        protected function handleException( $server, $e ) {
@@ -385,7 +414,7 @@ class RedisBagOStuff extends BagOStuff {
         * Send information about a single request to the debug log
         */
        public function logRequest( $method, $key, $server, $result ) {
-               $this->debug( "$method $key on $server: " . 
+               $this->debug( "$method $key on $server: " .
                        ( $result === false ? "failure" : "success" ) );
        }
 }
index a3d2d89..54051dc 100644 (file)
@@ -163,7 +163,7 @@ class SqlBagOStuff extends BagOStuff {
         */
        public function get( $key ) {
                $values = $this->getMulti( array( $key ) );
-               return $values[$key];
+               return array_key_exists( $key, $values ) ? $values[$key] : false;
        }
 
        /**
index 08f52b7..6c88289 100644 (file)
@@ -38,7 +38,11 @@ class XCacheBagOStuff extends BagOStuff {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
-                       $val = unserialize( $val );
+                       if ( $this->isInteger( $val ) ) {
+                               $val = intval( $val );
+                       } else {
+                               $val = unserialize( $val );
+                       }
                }
 
                return $val;
@@ -53,7 +57,11 @@ class XCacheBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $expire = 0 ) {
-               xcache_set( $key, serialize( $value ), $expire );
+               if ( !$this->isInteger( $value ) ) {
+                       $value = serialize( $value );
+               }
+
+               xcache_set( $key, $value, $expire );
                return true;
        }
 
@@ -68,5 +76,12 @@ class XCacheBagOStuff extends BagOStuff {
                xcache_unset( $key );
                return true;
        }
-}
 
+       public function incr( $key, $value = 1 ) {
+               return xcache_inc( $key, $value );
+       }
+
+       public function decr( $key, $value = 1 ) {
+               return xcache_dec( $key, $value );
+       }
+}
index e42c464..881dded 100644 (file)
@@ -1,7 +1,6 @@
 <?php
-
 /**
- * @todo document
+ * Parser cache specific expiry check.
  *
  * 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
  * @file
  * @ingroup Parser
  */
+
+/**
+ * Parser cache specific expiry check.
+ *
+ * @ingroup Parser
+ */
 class CacheTime {
 
        var     $mVersion = Parser::VERSION,  # Compatibility check
@@ -124,4 +129,4 @@ class CacheTime {
                        version_compare( $this->mVersion, Parser::VERSION, "lt" );
        }
 
-}
\ No newline at end of file
+}
index 4c6a22f..8917b6d 100644 (file)
@@ -342,6 +342,7 @@ class CoreParserFunctions {
        static function plural( $parser, $text = '' ) {
                $forms = array_slice( func_get_args(), 2 );
                $text = $parser->getFunctionLang()->parseFormattedNumber( $text );
+               settype( $text, ctype_digit( $text ) ? 'int' : 'float' );
                return $parser->getFunctionLang()->convertPlural( $text, $forms );
        }
 
@@ -660,7 +661,7 @@ class CoreParserFunctions {
                if( isset( $cache[$page] ) ) {
                        $length = $cache[$page];
                } elseif( $parser->incrementExpensiveFunctionCount() ) {
-                       $rev = Revision::newFromTitle( $title );
+                       $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $id = $rev ? $rev->getPage() : 0;
                        $length = $cache[$page] = $rev ? $rev->getSize() : 0;
 
index 296be66..6505183 100644 (file)
@@ -72,6 +72,7 @@ class CoreTagHooks {
         * @param $content string
         * @param $attributes array
         * @param $parser Parser
+        * @throws MWException
         * @return array
         */
        static function html( $content, $attributes, $parser ) {
index 489451a..8671665 100644 (file)
@@ -163,7 +163,8 @@ class Parser {
        var $mLinkHolders;
 
        var $mLinkID;
-       var $mIncludeSizes, $mPPNodeCount, $mHighestExpansionDepth, $mDefaultSort;
+       var $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
+       var $mDefaultSort;
        var $mTplExpandCache; # empty-frame expansion cache
        var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
        var $mExpensiveFunctionCount; # number of expensive parser function calls
@@ -199,6 +200,13 @@ class Parser {
         */
        var $mUniqPrefix;
 
+       /**
+        * @var Array with the language name of each language link (i.e. the
+        * interwiki prefix) in the key, value arbitrary. Used to avoid sending
+        * duplicate language links to the ParserOutput.
+        */
+       var $mLangLinkLanguages;
+
        /**
         * Constructor
         *
@@ -207,7 +215,7 @@ class Parser {
        public function __construct( $conf = array() ) {
                $this->mConf = $conf;
                $this->mUrlProtocols = wfUrlProtocols();
-               $this->mExtLinkBracketedRegex = '/\[((' . $this->mUrlProtocols . ')'.
+               $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')'.
                        self::EXT_LINK_URL_CLASS.'+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
                if ( isset( $conf['preprocessorClass'] ) ) {
                        $this->mPreprocessorClass = $conf['preprocessorClass'];
@@ -281,6 +289,7 @@ class Parser {
                        $this->mRevisionId = $this->mRevisionUser = null;
                $this->mVarCache = array();
                $this->mUser = null;
+               $this->mLangLinkLanguages = array();
 
                /**
                 * Prefix for temporary replacement strings for the multipass parser.
@@ -306,6 +315,7 @@ class Parser {
                        'arg' => 0,
                );
                $this->mPPNodeCount = 0;
+               $this->mGeneratedPPNodeCount = 0;
                $this->mHighestExpansionDepth = 0;
                $this->mDefaultSort = false;
                $this->mHeadings = array();
@@ -339,7 +349,7 @@ class Parser {
                 * to internalParse() which does all the real work.
                 */
 
-               global $wgUseTidy, $wgAlwaysUseTidy, $wgDisableLangConversion, $wgDisableTitleConversion;
+               global $wgUseTidy, $wgAlwaysUseTidy;
                $fname = __METHOD__.'-' . wfGetCaller();
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
@@ -392,9 +402,8 @@ class Parser {
                 * c) It's a conversion table
                 * d) it is an interface message (which is in the user language)
                 */
-               if ( !( $wgDisableLangConversion
-                               || isset( $this->mDoubleUnderscores['nocontentconvert'] )
-                               || $this->mTitle->isConversionTable() ) )
+               if ( !( $options->getDisableContentConversion()
+                               || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
                {
                        # Run convert unconditionally in 1.18-compatible mode
                        global $wgBug34832TransitionalRollback;
@@ -413,8 +422,7 @@ class Parser {
                 * {{DISPLAYTITLE:...}} is present. DISPLAYTITLE takes precedence over
                 * automatic link conversion.
                 */
-               if ( !( $wgDisableLangConversion
-                               || $wgDisableTitleConversion
+               if ( !( $options->getDisableTitleConversion()
                                || isset( $this->mDoubleUnderscores['nocontentconvert'] )
                                || isset( $this->mDoubleUnderscores['notitleconvert'] )
                                || $this->mOutput->getDisplayTitle() !== false ) )
@@ -482,13 +490,20 @@ class Parser {
                        $PFreport = "Expensive parser function count: {$this->mExpensiveFunctionCount}/{$this->mOptions->getExpensiveParserFunctionLimit()}\n";
                        $limitReport =
                                "NewPP limit report\n" .
-                               "Preprocessor node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
+                               "Preprocessor visited node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
+                               "Preprocessor generated node count: " .
+                                       "{$this->mGeneratedPPNodeCount}/{$this->mOptions->getMaxGeneratedPPNodeCount()}\n" .
                                "Post-expand include size: {$this->mIncludeSizes['post-expand']}/$max bytes\n" .
                                "Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n".
                                "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n".
                                $PFreport;
                        wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
                        $text .= "\n<!-- \n$limitReport-->\n";
+
+                       if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
+                               wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
+                                       $this->mTitle->getPrefixedDBkey() );
+                       }
                }
                $this->mOutput->setText( $text );
 
@@ -738,6 +753,7 @@ class Parser {
         *
         * @since 1.19
         *
+        * @throws MWException
         * @return Language|null
         */
        public function getTargetLanguage() {
@@ -1187,7 +1203,7 @@ class Parser {
                        '!(?:                           # Start cases
                                (<a[ \t\r\n>].*?</a>) |     # m[1]: Skip link text
                                (<.*?>) |                   # m[2]: Skip stuff inside HTML elements' . "
-                               (\\b(?:$prots)$urlChar+) |  # m[3]: Free external links" . '
+                               (\\b(?i:$prots)$urlChar+) |  # m[3]: Free external links" . '
                                (?:RFC|PMID)\s+([0-9]+) |   # m[4]: RFC or PMID, capture number
                                ISBN\s+(\b                  # m[5]: ISBN, capture number
                                        (?: 97[89] [\ \-]? )?   # optional 13-digit ISBN prefix
@@ -1516,6 +1532,7 @@ class Parser {
         *
         * @param $text string
         *
+        * @throws MWException
         * @return string
         */
        function replaceExternalLinks( $text ) {
@@ -1530,6 +1547,7 @@ class Parser {
                $i = 0;
                while ( $i<count( $bits ) ) {
                        $url = $bits[$i++];
+                       // @todo FIXME: Unused variable.
                        $protocol = $bits[$i++];
                        $text = $bits[$i++];
                        $trail = $bits[$i++];
@@ -1719,6 +1737,8 @@ class Parser {
 
        /**
         * Process [[ ]] wikilinks (RIL)
+        * @param $s
+        * @throws MWException
         * @return LinkHolderArray
         *
         * @private
@@ -1853,7 +1873,7 @@ class Parser {
                        # Don't allow internal links to pages containing
                        # PROTO: where PROTO is a valid URL protocol; these
                        # should be external links.
-                       if ( preg_match( '/^(?:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
+                       if ( preg_match( '/^(?i:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
                                $s .= $prefix . '[[' . $line ;
                                wfProfileOut( __METHOD__."-misc" );
                                continue;
@@ -1946,7 +1966,14 @@ class Parser {
                                # Interwikis
                                wfProfileIn( __METHOD__."-interwiki" );
                                if ( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && Language::fetchLanguageName( $iw, null, 'mw' ) ) {
-                                       $this->mOutput->addLanguageLink( $nt->getFullText() );
+                                       // XXX: the above check prevents links to sites with identifiers that are not language codes
+
+                                       # Bug 24502: filter duplicates
+                                       if ( !isset( $this->mLangLinkLanguages[$iw] ) ) {
+                                               $this->mLangLinkLanguages[$iw] = true;
+                                               $this->mOutput->addLanguageLink( $nt->getFullText() );
+                                       }
+
                                        $s = rtrim( $s . $prefix );
                                        $s .= trim( $trail, "\n" ) == '' ? '': $prefix . $trail;
                                        wfProfileOut( __METHOD__."-interwiki" );
@@ -2090,7 +2117,7 @@ class Parser {
         * @return String: less-or-more HTML with NOPARSE bits
         */
        function armorLinks( $text ) {
-               return preg_replace( '/\b(' . $this->mUrlProtocols . ')/',
+               return preg_replace( '/\b((?i)' . $this->mUrlProtocols . ')/',
                        "{$this->mUniqPrefix}NOPARSE$1", $text );
        }
 
@@ -2429,6 +2456,7 @@ class Parser {
         * @param $str String the string to split
         * @param &$before String set to everything before the ':'
         * @param &$after String set to everything after the ':'
+        * @throws MWException
         * @return String the position of the ':', or false if none found
         */
        function findColonNoLinks( $str, &$before, &$after ) {
@@ -2593,8 +2621,9 @@ class Parser {
         * @private
         *
         * @param $index integer
-        * @param $frame PPFrame
+        * @param bool|\PPFrame $frame
         *
+        * @throws MWException
         * @return string
         */
        function getVariableValue( $index, $frame = false ) {
@@ -3086,7 +3115,7 @@ class Parser {
         * @param $max int|null Maximum allowed, when an explicit limit has been
         *       exceeded, provide the values (optional)
         */
-       function limitationWarn( $limitationType, $current = null, $max = null) {
+       function limitationWarn( $limitationType, $current = '', $max = '' ) {
                # does no harm if $current and $max are present but are unnecessary for the message
                $warning = wfMessage( "$limitationType-warning" )->numParams( $current, $max )
                        ->inContentLanguage()->escaped();
@@ -3103,6 +3132,7 @@ class Parser {
         *  $piece['parts']: the parameter array
         *  $piece['lineStart']: whether the brace was at the start of a line
         * @param $frame PPFrame The current frame, contains template arguments
+        * @throws MWException
         * @return String: the text of the template
         * @private
         */
@@ -3565,7 +3595,7 @@ class Parser {
                        # Get the revision
                        $rev = $id
                                ? Revision::newFromId( $id )
-                               : Revision::newFromTitle( $title, 0, Revision::READ_NORMAL );
+                               : Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $rev_id = $rev ? $rev->getId() : 0;
                        # If there is no current revision, there is no page
                        if ( $id === false && !$rev ) {
@@ -3586,7 +3616,13 @@ class Parser {
                        }
 
                        if ( $rev ) {
-                               $text = $rev->getText();
+                               $content = $rev->getContent();
+                               $text = $content->getWikitextForTransclusion();
+
+                               if ( $text === false || $text === null ) {
+                                       $text = false;
+                                       break;
+                               }
                        } elseif ( $title->getNamespace() == NS_MEDIAWIKI ) {
                                global $wgContLang;
                                $message = wfMessage( $wgContLang->lcfirst( $title->getText() ) )->inContentLanguage();
@@ -3594,16 +3630,17 @@ class Parser {
                                        $text = false;
                                        break;
                                }
+                               $content = $message->content();
                                $text = $message->plain();
                        } else {
                                break;
                        }
-                       if ( $text === false ) {
+                       if ( !$content ) {
                                break;
                        }
                        # Redirect?
                        $finalTitle = $title;
-                       $title = Title::newFromRedirect( $text );
+                       $title = $content->getRedirectTarget();
                }
                return array(
                        'text' => $text,
@@ -3692,8 +3729,13 @@ class Parser {
                        return $obj->tc_contents;
                }
 
-               $text = Http::get( $url );
-               if ( !$text ) {
+               $req = MWHttpRequest::factory( $url );
+               $status = $req->execute(); // Status object
+               if ( $status->isOK() ) {
+                       $text = $req->getContent();
+               } elseif ( $req->getStatus() != 200 ) { // Though we failed to fetch the content, this status is useless.
+                       return wfMessage( 'scarytranscludefailed-httpstatus', $url, $req->getStatus() /* HTTP status */ )->inContentLanguage()->text();
+               } else {
                        return wfMessage( 'scarytranscludefailed', $url )->inContentLanguage()->text();
                }
 
@@ -3768,6 +3810,7 @@ class Parser {
         *     noClose    Original text did not have a close tag
         * @param $frame PPFrame
         *
+        * @throws MWException
         * @return string
         */
        function extensionSubstitution( $params, $frame ) {
@@ -4137,10 +4180,16 @@ class Parser {
                        $safeHeadline = $this->mStripState->unstripBoth( $safeHeadline );
 
                        # Strip out HTML (first regex removes any tag not allowed)
-                       # Allowed tags are <sup> and <sub> (bug 8393), <i> (bug 26375) and <b> (r105284)
-                       # We strip any parameter from accepted tags (second regex)
+                       # Allowed tags are:
+                       # * <sup> and <sub> (bug 8393)
+                       # * <i> (bug 26375)
+                       # * <b> (r105284)
+                       # * <span dir="rtl"> and <span dir="ltr"> (bug 35167)
+                       #
+                       # We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
+                       # to allow setting directionality in toc items.
                        $tocline = preg_replace(
-                               array( '#<(?!/?(sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(sup|sub|i|b))(?: .*?)?'.'>#' ),
+                               array( '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?'.'>#' ),
                                array( '',                          '<$1>' ),
                                $safeHeadline
                        );
@@ -4659,6 +4708,7 @@ class Parser {
         *
         * @param $tag Mixed: the tag to use, e.g. 'hook' for "<hook>"
         * @param $callback Mixed: the callback function (and object) to use for the tag
+        * @throws MWException
         * @return Mixed|null The old value of the mTagHooks array associated with the hook
         */
        public function setHook( $tag, $callback ) {
@@ -4689,6 +4739,7 @@ class Parser {
         *
         * @param $tag Mixed: the tag to use, e.g. 'hook' for "<hook>"
         * @param $callback Mixed: the callback function (and object) to use for the tag
+        * @throws MWException
         * @return Mixed|null The old value of the mTagHooks array associated with the hook
         */
        function setTransparentTagHook( $tag, $callback ) {
@@ -4751,6 +4802,7 @@ class Parser {
         *     Please read the documentation in includes/parser/Preprocessor.php for more information
         *     about the methods available in PPFrame and PPNode.
         *
+        * @throws MWException
         * @return string|callback The old callback function for this name, if any
         */
        public function setFunctionHook( $id, $callback, $flags = 0 ) {
@@ -4798,6 +4850,10 @@ class Parser {
         * Create a tag function, e.g. "<test>some stuff</test>".
         * Unlike tag hooks, tag functions are parsed at preprocessor level.
         * Unlike parser functions, their content is not preprocessed.
+        * @param $tag
+        * @param $callback
+        * @param $flags
+        * @throws MWException
         * @return null
         */
        function setFunctionTagHook( $tag, $callback, $flags ) {
@@ -5095,8 +5151,8 @@ class Parser {
                                                                $paramName = 'no-link';
                                                                $value = true;
                                                                $validated = true;
-                                                       } elseif ( preg_match( "/^$prots/", $value ) ) {
-                                                               if ( preg_match( "/^($prots)$chars+$/u", $value, $m ) ) {
+                                                       } elseif ( preg_match( "/^(?i)$prots/", $value ) ) {
+                                                               if ( preg_match( "/^((?i)$prots)$chars+$/u", $value, $m ) ) {
                                                                        $paramName = 'link-url';
                                                                        $this->mOutput->addExternalLink( $value );
                                                                        if ( $this->mOptions->getExternalLinkTarget() ) {
@@ -5622,7 +5678,7 @@ class Parser {
                # @todo FIXME: Not tolerant to blank link text
                # I.E. [http://www.mediawiki.org] will render as [1] or something depending
                # on how many empty links there are on the page - need to figure that out.
-               $text = preg_replace( '/\[(?:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
+               $text = preg_replace( '/\[(?i:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
 
                # Parse wikitext quotes (italics & bold)
                $text = $this->doQuotes( $text );
@@ -5761,6 +5817,7 @@ class Parser {
         * check whether it is still valid, by calling isValidHalfParsedText().
         *
         * @param $data array Serialized data
+        * @throws MWException
         * @return String
         */
        function unserializeHalfParsedText( $data ) {
index 6a4ef0c..e5beba8 100644 (file)
@@ -48,6 +48,7 @@ class ParserCache {
         * May be a memcached client or a BagOStuff derivative.
         *
         * @param $memCached Object
+        * @throws MWException
         */
        protected function __construct( $memCached ) {
                if ( !$memCached ) {
index 211fcd6..009b18a 100644 (file)
@@ -94,6 +94,11 @@ class ParserOptions {
         * Maximum number of nodes touched by PPFrame::expand()
         */
        var $mMaxPPNodeCount;
+
+       /**
+        * Maximum number of nodes generated by Preprocessor::preprocessToObj()
+        */
+       var $mMaxGeneratedPPNodeCount;
        
        /**
         * Maximum recursion depth in PPFrame::expand()
@@ -149,6 +154,16 @@ class ParserOptions {
         */
        var $mPreSaveTransform = true;
 
+       /**
+        * Whether content conversion should be disabled
+        */
+       var $mDisableContentConversion;
+
+       /**
+        * Whether title conversion should be disabled
+        */
+       var $mDisableTitleConversion;
+
        /**
         * Automatically number headings?
         */
@@ -219,6 +234,7 @@ class ParserOptions {
        function getTargetLanguage()                { return $this->mTargetLanguage; }
        function getMaxIncludeSize()                { return $this->mMaxIncludeSize; }
        function getMaxPPNodeCount()                { return $this->mMaxPPNodeCount; }
+       function getMaxGeneratedPPNodeCount()       { return $this->mMaxGeneratedPPNodeCount; }
        function getMaxPPExpandDepth()              { return $this->mMaxPPExpandDepth; }
        function getMaxTemplateDepth()              { return $this->mMaxTemplateDepth; }
        /* @since 1.20 */
@@ -228,6 +244,8 @@ class ParserOptions {
        function getEnableLimitReport()             { return $this->mEnableLimitReport; }
        function getCleanSignatures()               { return $this->mCleanSignatures; }
        function getExternalLinkTarget()            { return $this->mExternalLinkTarget; }
+       function getDisableContentConversion()      { return $this->mDisableContentConversion; }
+       function getDisableTitleConversion()        { return $this->mDisableTitleConversion; }
        function getMath()                          { $this->optionUsed( 'math' );
                                                                                                  return $this->mMath; }
        function getThumbSize()                     { $this->optionUsed( 'thumbsize' );
@@ -307,6 +325,7 @@ class ParserOptions {
        function setTargetLanguage( $x )            { return wfSetVar( $this->mTargetLanguage, $x, true ); }
        function setMaxIncludeSize( $x )            { return wfSetVar( $this->mMaxIncludeSize, $x ); }
        function setMaxPPNodeCount( $x )            { return wfSetVar( $this->mMaxPPNodeCount, $x ); }
+       function setMaxGeneratedPPNodeCount( $x )   { return wfSetVar( $this->mMaxGeneratedPPNodeCount, $x ); }
        function setMaxTemplateDepth( $x )          { return wfSetVar( $this->mMaxTemplateDepth, $x ); }
        /* @since 1.20 */
        function setExpensiveParserFunctionLimit( $x ) { return wfSetVar( $this->mExpensiveParserFunctionLimit, $x ); }
@@ -316,6 +335,8 @@ class ParserOptions {
        function setTimestamp( $x )                 { return wfSetVar( $this->mTimestamp, $x ); }
        function setCleanSignatures( $x )           { return wfSetVar( $this->mCleanSignatures, $x ); }
        function setExternalLinkTarget( $x )        { return wfSetVar( $this->mExternalLinkTarget, $x ); }
+       function disableContentConversion( $x = true ) { return wfSetVar( $this->mDisableContentConversion, $x ); }
+       function disableTitleConversion( $x = true ) { return wfSetVar( $this->mDisableTitleConversion, $x ); }
        function setMath( $x )                      { return wfSetVar( $this->mMath, $x ); }
        function setUserLang( $x )                  {
                if ( is_string( $x ) ) {
@@ -404,7 +425,8 @@ class ParserOptions {
                global $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages,
                        $wgAllowExternalImagesFrom, $wgEnableImageWhitelist, $wgAllowSpecialInclusion,
                        $wgMaxArticleSize, $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth,
-                       $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit;
+                       $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit,
+                       $wgMaxGeneratedPPNodeCount, $wgDisableLangConversion, $wgDisableTitleConversion;
 
                wfProfileIn( __METHOD__ );
 
@@ -416,11 +438,14 @@ class ParserOptions {
                $this->mAllowSpecialInclusion = $wgAllowSpecialInclusion;
                $this->mMaxIncludeSize = $wgMaxArticleSize * 1024;
                $this->mMaxPPNodeCount = $wgMaxPPNodeCount;
+               $this->mMaxGeneratedPPNodeCount = $wgMaxGeneratedPPNodeCount;
                $this->mMaxPPExpandDepth = $wgMaxPPExpandDepth;
                $this->mMaxTemplateDepth = $wgMaxTemplateDepth;
                $this->mExpensiveParserFunctionLimit = $wgExpensiveParserFunctionLimit;
                $this->mCleanSignatures = $wgCleanSignatures;
                $this->mExternalLinkTarget = $wgExternalLinkTarget;
+               $this->mDisableContentConversion = $wgDisableLangConversion;
+               $this->mDisableTitleConversion = $wgDisableLangConversion || $wgDisableTitleConversion;
 
                $this->mUser = $user;
                $this->mNumberHeadings = $user->getOption( 'numberheadings' );
index 41b4a38..b6bcf63 100644 (file)
@@ -50,7 +50,7 @@ class ParserOutput extends CacheTime {
                $mTimestamp;                  # Timestamp of the revision
                private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
                private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
-               private $mSecondaryDataUpdates = array(); # List of instances of SecondaryDataObject(), used to cause some information extracted from the page in a custom place.
+               private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else.
 
        const EDITSECTION_REGEX = '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
 
@@ -75,6 +75,8 @@ class ParserOutput extends CacheTime {
        /**
         * callback used by getText to replace editsection tokens
         * @private
+        * @param $m
+        * @throws MWException
         * @return mixed
         */
        function replaceEditSectionLinksCallback( $m ) {
@@ -150,11 +152,35 @@ class ParserOutput extends CacheTime {
                return (bool)$this->mNewSection;
        }
 
+       /**
+        * Checks, if a url is pointing to the own server
+        *
+        * @param $internal String the server to check against
+        * @param $url String the url to check
+        * @return bool
+        */
+       static function isLinkInternal( $internal, $url ) {
+               return (bool)preg_match( '/^' .
+                       # If server is proto relative, check also for http/https links
+                       ( substr( $internal, 0, 2 ) === '//' ? '(?:https?:)?' : '' ) .
+                       preg_quote( $internal, '/' ) .
+                       # check for query/path/anchor or end of link in each case
+                       '(?:[\?\/\#]|$)/i',
+                       $url
+               );
+       }
+
        function addExternalLink( $url ) {
                # We don't register links pointing to our own server, unless... :-)
                global $wgServer, $wgRegisterInternalExternals;
-               if( $wgRegisterInternalExternals or stripos($url,$wgServer.'/')!==0)
+
+               $registerExternalLink = true;
+               if( !$wgRegisterInternalExternals ) {
+                       $registerExternalLink = !self::isLinkInternal( $wgServer, $url );
+               }
+               if( $registerExternalLink ) {
                        $this->mExternalLinks[$url] = 1;
+               }
        }
 
        /**
@@ -375,9 +401,13 @@ class ParserOutput extends CacheTime {
         * extracted from the page's content, including a LinksUpdate object for all links stored in
         * this ParserOutput object.
         *
+        * @note: Avoid using this method directly, use ContentHandler::getSecondaryDataUpdates() instead! The content
+        *        handler may provide additional update objects.
+        *
         * @since 1.20
         *
-        * @param $title Title of the page we're updating. If not given, a title object will be created based on $this->getTitleText()
+        * @param $title Title The title of the page we're updating. If not given, a title object will be created
+        *                      based on $this->getTitleText()
         * @param $recursive Boolean: queue jobs for recursive updates?
         *
         * @return Array. An array of instances of DataUpdate
index 9555bdb..9c750b8 100644 (file)
@@ -84,11 +84,11 @@ class Parser_LinkHooks extends Parser {
         * Create a link hook, e.g. [[Namepsace:...|display}}
         * The callback function should have the form:
         *    function myLinkCallback( $parser, $holders, $markers,
-        *      Title $title, $titleText, &$sortText = null, &$leadingColon = false ) { ... }
+        *      Title $title, $titleText, &$sortText = null, &$leadingColon = false ) { ... }
         *
         * Or with SLH_PATTERN:
         *    function myLinkCallback( $parser, $holders, $markers, )
-        *      &$titleText, &$sortText = null, &$leadingColon = false ) { ... }
+        *      &$titleText, &$sortText = null, &$leadingColon = false ) { ... }
         *
         * The callback may either return a number of different possible values:
         * String) Text result of the link
@@ -100,6 +100,7 @@ class Parser_LinkHooks extends Parser {
         * @param $flags Integer: a combination of the following flags:
         *     SLH_PATTERN   Use a regex link pattern rather than a namespace
         *
+        * @throws MWException
         * @return callback|null The old callback function for this name, if any
         */
        public function setLinkHook( $ns, $callback, $flags = 0 ) {
@@ -120,9 +121,11 @@ class Parser_LinkHooks extends Parser {
        function getLinkHooks() {
                return array_keys( $this->mLinkHooks );
        }
-       
+
        /**
         * Process [[ ]] wikilinks
+        * @param $s
+        * @throws MWException
         * @return LinkHolderArray
         *
         * @private
@@ -226,7 +229,7 @@ class Parser_LinkHooks extends Parser {
                # 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(?:' . wfUrlProtocols() . ')/', $titleText) ) {
+               if( preg_match('/^\b(?i:' . wfUrlProtocols() . ')/', $titleText) ) {
                        wfProfileOut( __METHOD__ );
                        return $wt;
                }
index e75237b..15ea5e4 100644 (file)
@@ -126,6 +126,7 @@ class Preprocessor_DOM implements Preprocessor {
         * cache may be implemented at a later date which takes further advantage of these strict
         * dependency requirements.
         *
+        * @throws MWException
         * @return PPNode_DOM
         */
        function preprocessToObj( $text, $flags = 0 ) {
@@ -162,6 +163,15 @@ class Preprocessor_DOM implements Preprocessor {
                        }
 
                }
+
+               // Fail if the number of elements exceeds acceptable limits
+               // Do not attempt to generate the DOM 
+               $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
+               $max = $this->parser->mOptions->getMaxGeneratedPPNodeCount();
+               if ( $this->parser->mGeneratedPPNodeCount > $max ) {
+                       throw new MWException( __METHOD__.': generated node count limit exceeded' );
+               }
+
                wfProfileIn( __METHOD__.'-loadXML' );
                $dom = new DOMDocument;
                wfSuppressWarnings();
@@ -1664,6 +1674,7 @@ class PPNode_DOM implements PPNode {
         *  - index         String index
         *  - value         PPNode value
         *
+        * @throws MWException
         * @return array
         */
        function splitArg() {
@@ -1685,6 +1696,7 @@ class PPNode_DOM implements PPNode {
         * Split an "<ext>" node into an associative array containing name, attr, inner and close
         * All values in the resulting array are PPNodes. Inner and close are optional.
         *
+        * @throws MWException
         * @return array
         */
        function splitExt() {
@@ -1710,6 +1722,7 @@ class PPNode_DOM implements PPNode {
 
        /**
         * Split a "<h>" node
+        * @throws MWException
         * @return array
         */
        function splitHeading() {
index 4f04c86..a4e408e 100644 (file)
@@ -105,6 +105,7 @@ class Preprocessor_Hash implements Preprocessor {
         * cache may be implemented at a later date which takes further advantage of these strict
         * dependency requirements.
         *
+        * @throws MWException
         * @return PPNode_Hash_Tree
         */
        function preprocessToObj( $text, $flags = 0 ) {
@@ -884,9 +885,11 @@ class PPFrame_Hash implements PPFrame {
         * Create a new child frame
         * $args is optionally a multi-root PPNode or array containing the template arguments
         *
-        * @param $args PPNode_Hash_Array|array
+        * @param array|bool|\PPNode_Hash_Array $args PPNode_Hash_Array|array
         * @param $title Title|bool
         *
+        * @param int $indexOffset
+        * @throws MWException
         * @return PPTemplateFrame_Hash
         */
        function newChild( $args = false, $title = false, $indexOffset = 0 ) {
@@ -1609,6 +1612,7 @@ class PPNode_Hash_Tree implements PPNode {
         *  - index         String index
         *  - value         PPNode value
         *
+        * @throws MWException
         * @return array
         */
        function splitArg() {
@@ -1642,6 +1646,7 @@ class PPNode_Hash_Tree implements PPNode {
         * Split an "<ext>" node into an associative array containing name, attr, inner and close
         * All values in the resulting array are PPNodes. Inner and close are optional.
         *
+        * @throws MWException
         * @return array
         */
        function splitExt() {
@@ -1669,6 +1674,7 @@ class PPNode_Hash_Tree implements PPNode {
        /**
         * Split an "<h>" node
         *
+        * @throws MWException
         * @return array
         */
        function splitHeading() {
@@ -1695,6 +1701,7 @@ class PPNode_Hash_Tree implements PPNode {
        /**
         * Split a "<template>" or "<tplarg>" node
         *
+        * @throws MWException
         * @return array
         */
        function splitTemplate() {
index 2593b58..8059e35 100644 (file)
@@ -51,7 +51,7 @@ class Preprocessor_HipHop implements Preprocessor {
         * @param $args array
         * @return PPCustomFrame_HipHop
         */
-       function newCustomFrame( array $args ) {
+       function newCustomFrame( $args ) {
                return new PPCustomFrame_HipHop( $this, $args );
        }
 
@@ -109,7 +109,7 @@ class Preprocessor_HipHop implements Preprocessor {
         * @throws MWException
         * @return PPNode_HipHop_Tree
         */
-       function preprocessToObj( string $text, int $flags = 0 ) {
+       function preprocessToObj( $text, $flags = 0 ) {
                wfProfileIn( __METHOD__ );
 
                // Check cache.
@@ -1066,11 +1066,12 @@ class PPFrame_HipHop implements PPFrame {
         *
         * @param $args PPNode_HipHop_Array|array|bool
         * @param $title Title|bool
+        * @param $indexOffset A number subtracted from the index attributes of the arguments
         *
         * @throws MWException
         * @return PPTemplateFrame_HipHop
         */
-       function newChild( $args = false, $title = false ) {
+       function newChild( $args = false, $title = false, $indexOffset = 0 ) {
                $namedArgs = array();
                $numberedArgs = array();
                if ( $title === false ) {
@@ -1883,6 +1884,7 @@ class PPNode_HipHop_Tree implements PPNode {
        /**
         * Split a <template> or <tplarg> node
         *
+        * @throws MWException
         * @return array
         */
        function splitTemplate() {
index 99fe7ed..f98266e 100644 (file)
@@ -163,11 +163,11 @@ class ResourceLoader {
                                                $wgResourceLoaderMinifierStatementsOnOwnLine,
                                                $wgResourceLoaderMinifierMaxLineLength
                                        );
-                                       $result .= "\n\n/* cache key: $key */\n";
+                                       $result .= "\n/* cache key: $key */";
                                        break;
                                case 'minify-css':
                                        $result = CSSMin::minify( $data );
-                                       $result .= "\n\n/* cache key: $key */\n";
+                                       $result .= "\n/* cache key: $key */";
                                        break;
                        }
 
@@ -309,6 +309,7 @@ class ResourceLoader {
         *
         * @param $id Mixed: source ID (string), or array( id1 => props1, id2 => props2, ... )
         * @param $properties Array: source properties
+        * @throws MWException
         */
        public function addSource( $id, $properties = null) {
                // Allow multiple sources to be registered in one call
@@ -703,7 +704,7 @@ class ResourceLoader {
                                                $scripts = $module->getScriptURLsForDebug( $context );
                                        } else {
                                                $scripts = $module->getScript( $context );
-                                               if ( is_string( $scripts ) ) {
+                                               if ( is_string( $scripts ) && strlen( $scripts ) && substr( $scripts, -1 ) !== ';' ) {
                                                        // bug 27054: Append semicolon to prevent weird bugs
                                                        // caused by files not terminating their statements right
                                                        $scripts .= ";\n";
@@ -720,19 +721,31 @@ class ResourceLoader {
                                                // If we are in debug mode without &only= set, we'll want to return an array of URLs
                                                // See comment near shouldIncludeScripts() for more details
                                                if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
-                                                       $styles = $module->getStyleURLsForDebug( $context );
+                                                       $styles = array(
+                                                               'url' => $module->getStyleURLsForDebug( $context )
+                                                       );
                                                } else {
                                                        // Minify CSS before embedding in mw.loader.implement call
                                                        // (unless in debug mode)
                                                        if ( !$context->getDebug() ) {
                                                                foreach ( $stylePairs as $media => $style ) {
-                                                                       if ( is_string( $style ) ) {
+                                                                       // Can be either a string or an array of strings.
+                                                                       if ( is_array( $style ) ) {
+                                                                               $stylePairs[$media] = array();
+                                                                               foreach ( $style as $cssText ) {
+                                                                                       if ( is_string( $cssText ) ) {
+                                                                                               $stylePairs[$media][] = $this->filter( 'minify-css', $cssText );
+                                                                                       }
+                                                                               }
+                                                                       } elseif ( is_string( $style ) ) {
                                                                                $stylePairs[$media] = $this->filter( 'minify-css', $style );
                                                                        }
                                                                }
                                                        }
-                                                       // Combine styles into @media groups as one big string
-                                                       $styles = array( '' => self::makeCombinedStyles( $stylePairs ) );
+                                                       // Wrap styles into @media groups as needed and flatten into a numerical array
+                                                       $styles = array(
+                                                               'css' => self::makeCombinedStyles( $stylePairs )
+                                                       );
                                                }
                                        }
                                }
@@ -752,11 +765,10 @@ class ResourceLoader {
                                                }
                                                break;
                                        case 'styles':
-                                               // We no longer seperate into media, they are all concatenated now with
-                                               // custom media type groups into @media .. {} sections.
-                                               // Module returns either an empty array or an array with '' (no media type) as
-                                               // only key.
-                                               $out .= isset( $styles[''] ) ? $styles[''] : '';
+                                               // We no longer seperate into media, they are all combined now with
+                                               // custom media type groups into @media .. {} sections as part of the css string.
+                                               // Module returns either an empty array or a numerical array with css strings.
+                                               $out .= isset( $styles['css'] ) ? implode( '', $styles['css'] ) : '';
                                                break;
                                        case 'messages':
                                                $out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) );
@@ -821,6 +833,7 @@ class ResourceLoader {
         *     associative array mapping message key to value, or a JSON-encoded message blob containing
         *     the same data, wrapped in an XmlJsCode object.
         *
+        * @throws MWException
         * @return string
         */
        public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages ) {
@@ -860,24 +873,32 @@ class ResourceLoader {
         * Combines an associative array mapping media type to CSS into a
         * single stylesheet with "@media" blocks.
         *
-        * @param $styles Array: List of CSS strings keyed by media type
+        * @param $styles Array: Array keyed by media type containing (arrays of) CSS strings.
         *
-        * @return string
+        * @return Array
         */
-       public static function makeCombinedStyles( array $styles ) {
-               $out = '';
-               foreach ( $styles as $media => $style ) {
-                       // Transform the media type based on request params and config
-                       // The way that this relies on $wgRequest to propagate request params is slightly evil
-                       $media = OutputPage::transformCssMedia( $media );
-
-                       if ( $media === null ) {
-                               // Skip
-                       } elseif ( $media === '' || $media == 'all' ) {
-                               // Don't output invalid or frivolous @media statements
-                               $out .= "$style\n";
-                       } else {
-                               $out .= "@media $media {\n" . str_replace( "\n", "\n\t", "\t" . $style ) . "\n}\n";
+       private static function makeCombinedStyles( array $stylePairs ) {
+               $out = array();
+               foreach ( $stylePairs as $media => $styles ) {
+                       // ResourceLoaderFileModule::getStyle can return the styles
+                       // as a string or an array of strings. This is to allow separation in
+                       // the front-end.
+                       $styles = (array) $styles;
+                       foreach ( $styles as $style ) {
+                               $style = trim( $style );
+                               // Don't output an empty "@media print { }" block (bug 40498)
+                               if ( $style !== '' ) {
+                                       // Transform the media type based on request params and config
+                                       // The way that this relies on $wgRequest to propagate request params is slightly evil
+                                       $media = OutputPage::transformCssMedia( $media );
+
+                                       if ( $media === '' || $media == 'all' ) {
+                                               $out[] = $style;
+                                       } else if ( is_string( $media ) ) {
+                                               $out[] = "@media $media {\n" . str_replace( "\n", "\n\t", "\t" . $style ) . "}";
+                                       }
+                                       // else: skip
+                               }
                        }
                }
                return $out;
index f0892ec..7231c0f 100644 (file)
@@ -143,44 +143,45 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         *     to $wgScriptPath
         *
         * Below is a description for the $options array:
+        * @throws MWException
         * @par Construction options:
         * @code
-        *      array(
-        *              // Base path to prepend to all local paths in $options. Defaults to $IP
-        *              'localBasePath' => [base path],
-        *              // Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath
-        *              'remoteBasePath' => [base path],
-        *              // Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath
-        *              'remoteExtPath' => [base path],
-        *              // Scripts to always include
-        *              'scripts' => [file path string or array of file path strings],
-        *              // Scripts to include in specific language contexts
-        *              'languageScripts' => array(
-        *                      [language code] => [file path string or array of file path strings],
-        *              ),
-        *              // Scripts to include in specific skin contexts
-        *              'skinScripts' => array(
-        *                      [skin name] => [file path string or array of file path strings],
-        *              ),
-        *              // Scripts to include in debug contexts
-        *              'debugScripts' => [file path string or array of file path strings],
-        *              // 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],
-        *              // Styles to always load
-        *              'styles' => [file path string or array of file path strings],
-        *              // Styles to include in specific skin contexts
-        *              'skinStyles' => array(
-        *                      [skin name] => [file path string or array of file path strings],
-        *              ),
-        *              // Messages to always load
-        *              'messages' => [array of message key strings],
-        *              // Group which this module should be loaded together with
-        *              'group' => [group name string],
-        *              // Position on the page to load this module at
-        *              'position' => ['bottom' (default) or 'top']
-        *      )
+        *     array(
+        *         // Base path to prepend to all local paths in $options. Defaults to $IP
+        *         'localBasePath' => [base path],
+        *         // Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath
+        *         'remoteBasePath' => [base path],
+        *         // Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath
+        *         'remoteExtPath' => [base path],
+        *         // Scripts to always include
+        *         'scripts' => [file path string or array of file path strings],
+        *         // Scripts to include in specific language contexts
+        *         'languageScripts' => array(
+        *             [language code] => [file path string or array of file path strings],
+        *         ),
+        *         // Scripts to include in specific skin contexts
+        *         'skinScripts' => array(
+        *             [skin name] => [file path string or array of file path strings],
+        *         ),
+        *         // Scripts to include in debug contexts
+        *         'debugScripts' => [file path string or array of file path strings],
+        *         // 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],
+        *         // Styles to always load
+        *         'styles' => [file path string or array of file path strings],
+        *         // Styles to include in specific skin contexts
+        *         'skinStyles' => array(
+        *             [skin name] => [file path string or array of file path strings],
+        *         ),
+        *         // Messages to always load
+        *         'messages' => [array of message key strings],
+        *         // Group which this module should be loaded together with
+        *         'group' => [group name string],
+        *         // Position on the page to load this module at
+        *         'position' => ['bottom' (default) or 'top']
+        *     )
         * @endcode
         */
        public function __construct( $options = array(), $localBasePath = null,
@@ -550,6 +551,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * Gets the contents of a list of JavaScript files.
         *
         * @param $scripts Array: List of file paths to scripts to read, remap and concetenate
+        * @throws MWException
         * @return String: Concatenated and remapped JavaScript data from $scripts
         */
        protected function readScriptFiles( array $scripts ) {
@@ -634,7 +636,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                // Get and register local file references
                $this->localFileRefs = array_merge(
                        $this->localFileRefs,
-                       CSSMin::getLocalFileReferences( $style, $dir ) );
+                       CSSMin::getLocalFileReferences( $style, $dir )
+               );
                return CSSMin::remap(
                        $style, $dir, $remoteDir, true
                );
index a36aaec..c916c4a 100644 (file)
@@ -29,7 +29,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
 
        protected $language;
        /**
-        * Get the grammer forms for the site content language.
+        * Get the grammar forms for the site content language.
         *
         * @return array
         */
@@ -37,6 +37,15 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
                return $this->language->getGrammarForms();
        }
 
+       /**
+        * Get the plural forms for the site content language.
+        *
+        * @return array
+        */
+       protected function getPluralRules() {
+               return $this->language->getPluralRules();
+       }
+
        /**
         * Get the digit transform table for the content language
         * Seperator transform table also required here to convert
@@ -61,17 +70,19 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
         * @return array
         */
        protected function getData() {
-               return array( 'grammarForms' => $this->getSiteLangGrammarForms(),
-                               'digitTransformTable' => $this->getDigitTransformTable()
-                       );
+               return array(
+                       'digitTransformTable' => $this->getDigitTransformTable(),
+                       'grammarForms' => $this->getSiteLangGrammarForms(),
+                       'pluralRules' => $this->getPluralRules(),
+               );
        }
 
        /**
         * @param $context ResourceLoaderContext
-        * @return string: Javascript code
+        * @return string: JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
-               $this->language = Language::factory( $context ->getLanguage() );
+               $this->language = Language::factory( $context->getLanguage() );
                return Xml::encodeJsCall( 'mw.language.setData', array(
                        $this->language->getCode(),
                        $this->getData()
index 1e19d0f..e364b71 100644 (file)
@@ -172,7 +172,9 @@ abstract class ResourceLoaderModule {
         * Get all CSS for this module for a given skin.
         *
         * @param $context ResourceLoaderContext: Context object
-        * @return Array: List of CSS strings keyed by media type
+        * @return Array: List of CSS strings or array of CSS strings keyed by media type.
+        *  like array( 'screen' => '.foo { width: 0 }' );
+        *  or array( 'screen' => array( '.foo { width: 0 }' ) );
         */
        public function getStyles( ResourceLoaderContext $context ) {
                // Stub, override expected
@@ -332,8 +334,9 @@ abstract class ResourceLoaderModule {
         */
        public function getMsgBlobMtime( $lang ) {
                if ( !isset( $this->msgBlobMtime[$lang] ) ) {
-                       if ( !count( $this->getMessages() ) )
+                       if ( !count( $this->getMessages() ) ) {
                                return 0;
+                       }
 
                        $dbr = wfGetDB( DB_SLAVE );
                        $msgBlobMtime = $dbr->selectField( 'msg_resource', 'mr_timestamp', array(
@@ -424,10 +427,10 @@ abstract class ResourceLoaderModule {
                        try {
                                $parser->parse( $contents, $fileName, 1 );
                                $result = $contents;
-                       } catch (Exception $e) {
+                       } catch ( Exception $e ) {
                                // We'll save this to cache to avoid having to validate broken JS over and over...
                                $err = $e->getMessage();
-                               $result = "throw new Error(" . Xml::encodeJsVar("JavaScript parse error: $err") . ");";
+                               $result = "throw new Error(" . Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");";
                        }
 
                        $cache->set( $key, $result );
index c86ed1d..20ee83f 100644 (file)
@@ -37,8 +37,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
        protected function getConfig( $context ) {
                global $wgLoadScript, $wgScript, $wgStylePath, $wgScriptExtension,
                        $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang,
-                       $wgVariantArticlePath, $wgActionPaths, $wgUseAjax, $wgVersion,
-                       $wgEnableAPI, $wgEnableWriteAPI, $wgDBname, $wgEnableMWSuggest,
+                       $wgVariantArticlePath, $wgActionPaths, $wgVersion,
+                       $wgEnableAPI, $wgEnableWriteAPI, $wgDBname,
                        $wgSitename, $wgFileExtensions, $wgExtensionAssetsPath,
                        $wgCookiePrefix, $wgResourceLoaderMaxQueryLength;
 
@@ -95,9 +95,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgResourceLoaderMaxQueryLength' => $wgResourceLoaderMaxQueryLength,
                        'wgCaseSensitiveNamespaces' => $caseSensitiveNamespaces,
                );
-               if ( $wgUseAjax && $wgEnableMWSuggest ) {
-                       $vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate();
-               }
 
                wfRunHooks( 'ResourceLoaderGetConfigVars', array( &$vars ) );
 
index 9dd6939..28c3426 100644 (file)
@@ -68,20 +68,23 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @return null|string
         */
        protected function getContent( $title ) {
-               if ( $title->getNamespace() === NS_MEDIAWIKI ) {
-                       // The first "true" is to use the database, the second is to use the content langue
-                       // and the last one is to specify the message key already contains the language in it ("/de", etc.)
-                       $text = MessageCache::singleton()->get( $title->getDBkey(), true, true, true );
-                       return $text === false ? '' : $text;
-               }
                if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) {
                        return null;
                }
-               $revision = Revision::newFromTitle( $title );
+               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        return null;
                }
-               return $revision->getRawText();
+
+               $content = $revision->getContent( Revision::RAW );
+               $model = $content->getModel();
+
+               if ( $model !== CONTENT_MODEL_CSS && $model !== CONTENT_MODEL_JAVASCRIPT ) {
+                       wfDebug( __METHOD__ . "bad content model #$model for JS/CSS page!\n" );
+                       return null;
+               }
+
+               return $content->getNativeData(); //NOTE: this is safe, we know it's JS or CSS
        }
 
        /* Methods */
@@ -138,12 +141,12 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        }
                        $style = CSSMin::remap( $style, false, $wgScriptPath, true );
                        if ( !isset( $styles[$media] ) ) {
-                               $styles[$media] = '';
+                               $styles[$media] = array();
                        }
                        if ( strpos( $titleText, '*/' ) === false ) {
-                               $styles[$media] .=  "/* $titleText */\n";
+                               $style =  "/* $titleText */\n" . $style;
                        }
-                       $styles[$media] .= $style . "\n";
+                       $styles[$media][] = $style;
                }
                return $styles;
        }
@@ -182,7 +185,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        // We're dealing with a subclass that doesn't have a DB
                        return array();
                }
-               
+
                $hash = $context->getHash();
                if ( isset( $this->titleMtimes[$hash] ) ) {
                        return $this->titleMtimes[$hash];
index 4f58099..8b8a3a3 100644 (file)
@@ -184,6 +184,7 @@ abstract class RevDel_List extends RevisionListBase {
         *     comment:         The log comment
         *     authorsIds:      The array of the user IDs of the offenders
         *     authorsIPs:      The array of the IP/anon user offenders
+        * @throws MWException
         */
        protected function updateLog( $params ) {
                // Get the URL param's corresponding DB field
index b505592..e1bb32f 100644 (file)
@@ -505,19 +505,6 @@ class SearchEngine {
                        return $wgCanonicalServer . wfScript( 'api' ) . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
                }
        }
-
-       /**
-        * Get internal MediaWiki Suggest template
-        *
-        * @return String
-        */
-       public static function getMWSuggestTemplate() {
-               global $wgMWSuggestTemplate, $wgServer;
-               if ( $wgMWSuggestTemplate )
-                       return $wgMWSuggestTemplate;
-               else
-                       return $wgServer . wfScript( 'api' ) . '?action=opensearch&search={searchTerms}&namespace={namespaces}&suggest';
-       }
 }
 
 /**
@@ -756,8 +743,10 @@ class SearchResult {
        protected function initFromTitle( $title ) {
                $this->mTitle = $title;
                if ( !is_null( $this->mTitle ) ) {
+                       $id = false;
+                       wfRunHooks( 'SearchResultInitFromTitle', array( $title, &$id ) );
                        $this->mRevision = Revision::newFromTitle(
-                               $this->mTitle, false, Revision::READ_NORMAL );
+                               $this->mTitle, $id, Revision::READ_NORMAL );
                        if ( $this->mTitle->getNamespace() === NS_FILE )
                                $this->mImage = wfFindFile( $this->mTitle );
                }
@@ -802,11 +791,14 @@ class SearchResult {
         */
        protected function initText() {
                if ( !isset( $this->mText ) ) {
-                       if ( $this->mRevision != null )
-                               $this->mText = $this->mRevision->getText();
-                       else // TODO: can we fetch raw wikitext for commons images?
+                       if ( $this->mRevision != null ) {
+                               //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();
+                       } else { // TODO: can we fetch raw wikitext for commons images?
                                $this->mText = '';
-
+                       }
                }
        }
 
@@ -817,6 +809,8 @@ class SearchResult {
        function getTextSnippet( $terms ) {
                global $wgUser, $wgAdvancedSearchHighlighting;
                $this->initText();
+
+               // TODO: make highliter take a content object. Make ContentHandler a factory for SearchHighliter.
                list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs( $wgUser );
                $h = new SearchHighlighter();
                if ( $wgAdvancedSearchHighlighting )
index aefa6cc..994365e 100644 (file)
@@ -93,9 +93,11 @@ class ActiveUsersPager extends UsersPager {
        function getQueryInfo() {
                $dbr = wfGetDB( DB_SLAVE );
                $conds = array( 'rc_user > 0' ); // Users - no anons
-               $conds[] = 'ipb_deleted IS NULL'; // don't show hidden names
-               $conds[] = "rc_log_type IS NULL OR rc_log_type != 'newusers'";
-               $conds[] = "rc_timestamp >= '{$dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 )}'";
+               if( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; // don't show hidden names
+               }
+               $conds[] = 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' );
+               $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
 
                if( $this->requestedUser != '' ) {
                        $conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser );
@@ -107,7 +109,7 @@ class ActiveUsersPager extends UsersPager {
                                'rc_user_text', // for Pager
                                'user_id',
                                'recentedits' => 'COUNT(*)',
-                               'blocked' => 'MAX(ipb_user)'
+                               'ipb_deleted' => 'MAX(ipb_deleted)'
                        ),
                        'options' => array(
                                'GROUP BY' => array( 'rc_user_text', 'user_id' ),
@@ -115,7 +117,10 @@ class ActiveUsersPager extends UsersPager {
                        ),
                        'join_conds' => array(
                                'user' => array( 'INNER JOIN', 'rc_user_text=user_name' ),
-                               'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user AND ipb_auto=0 AND ipb_deleted=1' ),
+                               'ipblocks' => array( 'LEFT JOIN', array(
+                                       'user_id=ipb_user',
+                                       'ipb_auto' => 0
+                               )),
                        ),
                        'conds' => $conds
                );
@@ -158,9 +163,12 @@ class ActiveUsersPager extends UsersPager {
                $groups = $lang->commaList( $list );
 
                $item = $lang->specialList( $ulinks, $groups );
+               if( $row->ipb_deleted ) {
+                       $item = "<span class=\"deleted\">$item</span>";
+               }
                $count = $this->msg( 'activeusers-count' )->numParams( $row->recentedits )
                        ->params( $userName )->numParams( $this->RCMaxAge )->escaped();
-               $blocked = $row->blocked ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : '';
+               $blocked = !is_null( $row->ipb_deleted ) ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : '';
 
                return Html::rawElement( 'li', array(), "{$item} [{$count}]{$blocked}" );
        }
index 6e3d49b..fc5df4f 100644 (file)
@@ -36,7 +36,9 @@ class AncientPagesPage extends QueryPage {
                return true;
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array(
index b6484ce..1d6656a 100644 (file)
@@ -106,9 +106,9 @@ class SpecialBlock extends FormSpecialPage {
                $form->setSubmitTextMsg( $msg );
 
                # Don't need to do anything if the form has been posted
-               if( !$this->getRequest()->wasPosted() && $this->preErrors ){
+               if ( !$this->getRequest()->wasPosted() && $this->preErrors ) {
                        $s = HTMLForm::formatErrors( $this->preErrors );
-                       if( $s ){
+                       if ( $s ) {
                                $form->addHeaderText( Html::rawElement(
                                                'div',
                                                array( 'class' => 'error' ),
@@ -122,7 +122,7 @@ class SpecialBlock extends FormSpecialPage {
         * Get the HTMLForm descriptor array for the block form
         * @return Array
         */
-       protected function getFormFields(){
+       protected function getFormFields() {
                global $wgBlockAllowsUTEdit;
 
                $user = $this->getUser();
@@ -158,14 +158,14 @@ class SpecialBlock extends FormSpecialPage {
                        ),
                );
 
-               if( self::canBlockEmail( $user ) ) {
+               if ( self::canBlockEmail( $user ) ) {
                        $a['DisableEmail'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbemailban',
                        );
                }
 
-               if( $wgBlockAllowsUTEdit ){
+               if ( $wgBlockAllowsUTEdit ) {
                        $a['DisableUTEdit'] = array(
                                'type' => 'check',
                                'label-message' => 'ipb-disableusertalk',
@@ -180,7 +180,7 @@ class SpecialBlock extends FormSpecialPage {
                );
 
                # Allow some users to hide name from block log, blocklist and listusers
-               if( $user->isAllowed( 'hideuser' ) ) {
+               if ( $user->isAllowed( 'hideuser' ) ) {
                        $a['HideUser'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbhidename',
@@ -189,7 +189,7 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # Watchlist their user page? (Only if user is logged in)
-               if( $user->isLoggedIn() ) {
+               if ( $user->isLoggedIn() ) {
                        $a['Watch'] = array(
                                'type' => 'check',
                                'label-message' => 'ipbwatchuser',
@@ -228,7 +228,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return Bool whether fields were altered (that is, whether the target is
         *     already blocked)
         */
-       protected function maybeAlterFormDefaults( &$fields ){
+       protected function maybeAlterFormDefaults( &$fields ) {
                # This will be overwritten by request data
                $fields['Target']['default'] = (string)$this->target;
 
@@ -237,7 +237,7 @@ class SpecialBlock extends FormSpecialPage {
 
                $block = Block::newFromTarget( $this->target );
 
-               if( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
+               if ( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
                        && ( $this->type != Block::TYPE_RANGE # The block isn't a rangeblock
                          || $block->getTarget() == $this->target ) # or if it is, the range is what we're about to block
                        )
@@ -246,21 +246,27 @@ class SpecialBlock extends FormSpecialPage {
                        $fields['CreateAccount']['default'] = $block->prevents( 'createaccount' );
                        $fields['AutoBlock']['default'] = $block->isAutoblocking();
 
-                       if( isset( $fields['DisableEmail'] ) ){
+                       if ( isset( $fields['DisableEmail'] ) ) {
                                $fields['DisableEmail']['default'] = $block->prevents( 'sendemail' );
                        }
 
-                       if( isset( $fields['HideUser'] ) ){
+                       if ( isset( $fields['HideUser'] ) ) {
                                $fields['HideUser']['default'] = $block->mHideName;
                        }
 
-                       if( isset( $fields['DisableUTEdit'] ) ){
+                       if ( isset( $fields['DisableUTEdit'] ) ) {
                                $fields['DisableUTEdit']['default'] = $block->prevents( 'editownusertalk' );
                        }
 
-                       $fields['Reason']['default'] = $block->mReason;
+                       // If the username was hidden (ipb_deleted == 1), don't show the reason
+                       // unless this user also has rights to hideuser: Bug 35839
+                       if ( !$block->mHideName || $this->getUser()->isAllowed( 'hideuser' ) ) {
+                               $fields['Reason']['default'] = $block->mReason;
+                       } else {
+                               $fields['Reason']['default'] = '';
+                       }
 
-                       if( $this->getRequest()->wasPosted() ){
+                       if ( $this->getRequest()->wasPosted() ) {
                                # Ok, so we got a POST submission asking us to reblock a user.  So show the
                                # confirm checkbox; the user will only see it if they haven't previously
                                $fields['Confirm']['type'] = 'check';
@@ -271,7 +277,7 @@ class SpecialBlock extends FormSpecialPage {
                                $fields['Confirm']['default'] = 1;
                        }
 
-                       if( $block->mExpiry == 'infinity' ) {
+                       if ( $block->mExpiry == 'infinity' ) {
                                $fields['Expiry']['default'] = 'infinite';
                        } else {
                                $fields['Expiry']['default'] = wfTimestamp( TS_RFC2822, $block->mExpiry );
@@ -282,14 +288,14 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # We always need confirmation to do HideUser
-               if( $this->requestedHideUser ){
+               if ( $this->requestedHideUser ) {
                        $fields['Confirm']['type'] = 'check';
                        unset( $fields['Confirm']['default'] );
                        $this->preErrors[] = 'ipb-confirmhideuser';
                }
 
                # Or if the user is trying to block themselves
-               if( (string)$this->target === $this->getUser()->getName() ){
+               if ( (string)$this->target === $this->getUser()->getName() ) {
                        $fields['Confirm']['type'] = 'check';
                        unset( $fields['Confirm']['default'] );
                        $this->preErrors[] = 'ipb-blockingself';
@@ -300,17 +306,17 @@ class SpecialBlock extends FormSpecialPage {
         * Add header elements like block log entries, etc.
         * @return String
         */
-       protected function preText(){
+       protected function preText() {
                $this->getOutput()->addModules( 'mediawiki.special.block' );
 
                $text = $this->msg( 'blockiptext' )->parse();
 
                $otherBlockMessages = array();
-               if( $this->target !== null ) {
+               if ( $this->target !== null ) {
                        # Get other blocks, i.e. from GlobalBlocking or TorBlock extension
                        wfRunHooks( 'OtherBlockLogLink', array( &$otherBlockMessages, $this->target ) );
 
-                       if( count( $otherBlockMessages ) ) {
+                       if ( count( $otherBlockMessages ) ) {
                                $s = Html::rawElement(
                                        'h2',
                                        array(),
@@ -319,7 +325,7 @@ class SpecialBlock extends FormSpecialPage {
 
                                $list = '';
 
-                               foreach( $otherBlockMessages as $link ) {
+                               foreach ( $otherBlockMessages as $link ) {
                                        $list .= Html::rawElement( 'li', array(), $link ) . "\n";
                                }
 
@@ -340,11 +346,11 @@ class SpecialBlock extends FormSpecialPage {
         * Add footer elements to the form
         * @return string
         */
-       protected function postText(){
+       protected function postText() {
                $links = array();
 
                # Link to the user's contributions, if applicable
-               if( $this->target instanceof User ){
+               if ( $this->target instanceof User ) {
                        $contribsPage = SpecialPage::getTitleFor( 'Contributions', $this->target->getName() );
                        $links[] = Linker::link(
                                $contribsPage,
@@ -353,7 +359,7 @@ class SpecialBlock extends FormSpecialPage {
                }
 
                # Link to unblock the specified user, or to a blank unblock form
-               if( $this->target instanceof User ) {
+               if ( $this->target instanceof User ) {
                        $message = $this->msg( 'ipb-unblock-addr', wfEscapeWikiText( $this->target->getName() ) )->parse();
                        $list = SpecialPage::getTitleFor( 'Unblock', $this->target->getName() );
                } else {
@@ -387,7 +393,7 @@ class SpecialBlock extends FormSpecialPage {
                );
 
                $userTitle = self::getTargetUserTitle( $this->target );
-               if( $userTitle ){
+               if ( $userTitle ) {
                        # Get relevant extracts from the block and suppression logs, if possible
                        $out = '';
 
@@ -405,7 +411,7 @@ class SpecialBlock extends FormSpecialPage {
                        $text .= $out;
 
                        # Add suppression block entries if allowed
-                       if( $user->isAllowed( 'suppressionlog' ) ) {
+                       if ( $user->isAllowed( 'suppressionlog' ) ) {
                                LogEventsList::showLogExtract(
                                        $out,
                                        'suppress',
@@ -433,7 +439,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return Title|null
         */
        protected static function getTargetUserTitle( $target ) {
-               if( $target instanceof User ) {
+               if ( $target instanceof User ) {
                        return $target->getUserPage();
                } elseif ( IP::isIPAddress( $target ) ) {
                        return Title::makeTitleSafe( NS_USER, $target );
@@ -449,18 +455,18 @@ class SpecialBlock extends FormSpecialPage {
         * @param $request WebRequest optionally try and get data from a request too
         * @return array( User|string|null, Block::TYPE_ constant|null )
         */
-       public static function getTargetAndType( $par, WebRequest $request = null ){
+       public static function getTargetAndType( $par, WebRequest $request = null ) {
                $i = 0;
                $target = null;
 
-               while( true ){
-                       switch( $i++ ){
+               while( true ) {
+                       switch( $i++ ) {
                                case 0:
                                        # The HTMLForm will check wpTarget first and only if it doesn't get
                                        # a value use the default, which will be generated from the options
                                        # below; so this has to have a higher precedence here than $par, or
                                        # we could end up with different values in $this->target and the HTMLForm!
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'wpTarget', null );
                                        }
                                        break;
@@ -468,13 +474,13 @@ class SpecialBlock extends FormSpecialPage {
                                        $target = $par;
                                        break;
                                case 2:
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'ip', null );
                                        }
                                        break;
                                case 3:
                                        # B/C @since 1.18
-                                       if( $request instanceof WebRequest ){
+                                       if ( $request instanceof WebRequest ) {
                                                $target = $request->getText( 'wpBlockAddress', null );
                                        }
                                        break;
@@ -484,7 +490,7 @@ class SpecialBlock extends FormSpecialPage {
 
                        list( $target, $type ) = Block::parseTarget( $target );
 
-                       if( $type !== null ){
+                       if ( $type !== null ) {
                                return array( $target, $type );
                        }
                }
@@ -505,9 +511,9 @@ class SpecialBlock extends FormSpecialPage {
 
                list( $target, $type ) = self::getTargetAndType( $value );
 
-               if( $type == Block::TYPE_USER ){
+               if ( $type == Block::TYPE_USER ) {
                        # TODO: why do we not have a User->exists() method?
-                       if( !$target->getId() ){
+                       if ( !$target->getId() ) {
                                return $form->msg( 'nosuchusershort',
                                        wfEscapeWikiText( $target->getName() ) );
                        }
@@ -517,31 +523,31 @@ class SpecialBlock extends FormSpecialPage {
                                return $form->msg( 'badaccess', $status );
                        }
 
-               } elseif( $type == Block::TYPE_RANGE ){
+               } elseif ( $type == Block::TYPE_RANGE ) {
                        list( $ip, $range ) = explode( '/', $target, 2 );
 
-                       if( ( IP::isIPv4( $ip ) && $wgBlockCIDRLimit['IPv4'] == 32 )
+                       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 ) && $range > 32 )
+                       if ( ( IP::isIPv4( $ip ) && $range > 32 )
                                || ( IP::isIPv6( $ip ) && $range > 128 ) )
                        {
                                # Dodgy range
                                return $form->msg( 'ip_range_invalid' );
                        }
 
-                       if( IP::isIPv4( $ip ) && $range < $wgBlockCIDRLimit['IPv4'] ) {
+                       if ( IP::isIPv4( $ip ) && $range < $wgBlockCIDRLimit['IPv4'] ) {
                                return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv4'] );
                        }
 
-                       if( IP::isIPv6( $ip ) && $range < $wgBlockCIDRLimit['IPv6'] ) {
+                       if ( IP::isIPv6( $ip ) && $range < $wgBlockCIDRLimit['IPv6'] ) {
                                return $form->msg( 'ip_range_toolarge', $wgBlockCIDRLimit['IPv6'] );
                        }
-               } elseif( $type == Block::TYPE_IP ){
+               } elseif ( $type == Block::TYPE_IP ) {
                        # All is well
                } else {
                        return $form->msg( 'badipaddress' );
@@ -566,7 +572,7 @@ class SpecialBlock extends FormSpecialPage {
         * @param  $context IContextSource
         * @return Bool|String
         */
-       public static function processForm( array $data, IContextSource $context ){
+       public static function processForm( array $data, IContextSource $context ) {
                global $wgBlockAllowsUTEdit;
 
                $performer = $context->getUser();
@@ -579,7 +585,7 @@ class SpecialBlock extends FormSpecialPage {
                $data['Confirm'] = !in_array( $data['Confirm'], array( '', '0', null, false ), true );
 
                list( $target, $type ) = self::getTargetAndType( $data['Target'] );
-               if( $type == Block::TYPE_USER ){
+               if ( $type == Block::TYPE_USER ) {
                        $user = $target;
                        $target = $user->getName();
                        $userId = $user->getId();
@@ -591,14 +597,14 @@ class SpecialBlock extends FormSpecialPage {
                        # since both $data['PreviousTarget'] and $target are normalized
                        # but $data['target'] gets overriden by (non-normalized) request variable
                        # from previous request.
-                       if( $target === $performer->getName() &&
+                       if ( $target === $performer->getName() &&
                                ( $data['PreviousTarget'] !== $target || !$data['Confirm'] ) )
                        {
                                return array( 'ipb-blockingself' );
                        }
-               } elseif( $type == Block::TYPE_RANGE ){
+               } elseif ( $type == Block::TYPE_RANGE ) {
                        $userId = 0;
-               } elseif( $type == Block::TYPE_IP ){
+               } elseif ( $type == Block::TYPE_IP ) {
                        $target = $target->getName();
                        $userId = 0;
                } else {
@@ -606,24 +612,24 @@ class SpecialBlock extends FormSpecialPage {
                        return array( 'badipaddress' );
                }
 
-               if( ( strlen( $data['Expiry'] ) == 0) || ( strlen( $data['Expiry'] ) > 50 )
+               if ( ( strlen( $data['Expiry'] ) == 0) || ( strlen( $data['Expiry'] ) > 50 )
                        || !self::parseExpiryInput( $data['Expiry'] ) )
                {
                        return array( 'ipb_expiry_invalid' );
                }
 
-               if( !isset( $data['DisableEmail'] ) ){
+               if ( !isset( $data['DisableEmail'] ) ) {
                        $data['DisableEmail'] = false;
                }
 
                # If the user has done the form 'properly', they won't even have been given the
                # option to suppress-block unless they have the 'hideuser' permission
-               if( !isset( $data['HideUser'] ) ){
+               if ( !isset( $data['HideUser'] ) ) {
                        $data['HideUser'] = false;
                }
 
-               if( $data['HideUser'] ) {
-                       if( !$performer->isAllowed('hideuser') ){
+               if ( $data['HideUser'] ) {
+                       if ( !$performer->isAllowed('hideuser') ) {
                                # this codepath is unreachable except by a malicious user spoofing forms,
                                # or by race conditions (user has oversight and sysop, loads block form,
                                # and is de-oversighted before submission); so need to fail completely
@@ -632,16 +638,16 @@ class SpecialBlock extends FormSpecialPage {
                        }
 
                        # Recheck params here...
-                       if( $type != Block::TYPE_USER ) {
+                       if ( $type != Block::TYPE_USER ) {
                                $data['HideUser'] = false; # IP users should not be hidden
-                       } elseif( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
+                       } elseif ( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
                                # Bad expiry.
                                return array( 'ipb_expiry_temp' );
-                       } elseif( $user->getEditCount() > self::HIDEUSER_CONTRIBLIMIT ) {
+                       } elseif ( $user->getEditCount() > self::HIDEUSER_CONTRIBLIMIT ) {
                                # Typically, the user should have a handful of edits.
                                # Disallow hiding users with many edits for performance.
                                return array( 'ipb_hide_invalid' );
-                       } elseif( !$data['Confirm'] ){
+                       } elseif ( !$data['Confirm'] ) {
                                return array( 'ipb-confirmhideuser' );
                        }
                }
@@ -659,15 +665,15 @@ class SpecialBlock extends FormSpecialPage {
                $block->isAutoblocking( $data['AutoBlock'] );
                $block->mHideName = $data['HideUser'];
 
-               if( !wfRunHooks( 'BlockIp', array( &$block, &$performer ) ) ) {
+               if ( !wfRunHooks( 'BlockIp', array( &$block, &$performer ) ) ) {
                        return array( 'hookaborted' );
                }
 
                # Try to insert block. Is there a conflicting block?
                $status = $block->insert();
-               if( !$status ) {
+               if ( !$status ) {
                        # Show form unless the user is already aware of this...
-                       if( !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
+                       if ( !$data['Confirm'] || ( array_key_exists( 'PreviousTarget', $data )
                                && $data['PreviousTarget'] !== $target ) )
                        {
                                return array( array( 'ipb_already_blocked', $block->getTarget() ) );
@@ -677,13 +683,13 @@ class SpecialBlock extends FormSpecialPage {
                                # be sure the user is blocked by now it should work for our purposes
                                $currentBlock = Block::newFromTarget( $target );
 
-                               if( $block->equals( $currentBlock ) ) {
+                               if ( $block->equals( $currentBlock ) ) {
                                        return array( array( 'ipb_already_blocked', $block->getTarget() ) );
                                }
 
                                # If the name was hidden and the blocking user cannot hide
                                # names, then don't allow any block changes...
-                               if( $currentBlock->mHideName && !$performer->isAllowed( 'hideuser' ) ) {
+                               if ( $currentBlock->mHideName && !$performer->isAllowed( 'hideuser' ) ) {
                                        return array( 'cant-see-hidden-user' );
                                }
 
@@ -692,12 +698,12 @@ class SpecialBlock extends FormSpecialPage {
                                $logaction = 'reblock';
 
                                # Unset _deleted fields if requested
-                               if( $currentBlock->mHideName && !$data['HideUser'] ) {
+                               if ( $currentBlock->mHideName && !$data['HideUser'] ) {
                                        RevisionDeleteUser::unsuppressUserName( $target, $userId );
                                }
 
                                # If hiding/unhiding a name, this should go in the private logs
-                               if( (bool)$currentBlock->mHideName ){
+                               if ( (bool)$currentBlock->mHideName ) {
                                        $data['HideUser'] = true;
                                }
                        }
@@ -708,12 +714,12 @@ class SpecialBlock extends FormSpecialPage {
                wfRunHooks( 'BlockIpComplete', array( $block, $performer ) );
 
                # Set *_deleted fields if requested
-               if( $data['HideUser'] ) {
+               if ( $data['HideUser'] ) {
                        RevisionDeleteUser::suppressUserName( $target, $userId );
                }
 
                # Can't watch a rangeblock
-               if( $type != Block::TYPE_RANGE && $data['Watch'] ) {
+               if ( $type != Block::TYPE_RANGE && $data['Watch'] ) {
                        $performer->addWatch( Title::makeTitle( NS_USER, $target ) );
                }
 
@@ -751,18 +757,18 @@ class SpecialBlock extends FormSpecialPage {
         *     the wiki's content language
         * @return Array
         */
-       public static function getSuggestedDurations( $lang = null ){
+       public static function getSuggestedDurations( $lang = null ) {
                $a = array();
                $msg = $lang === null
                        ? wfMessage( 'ipboptions' )->inContentLanguage()->text()
                        : wfMessage( 'ipboptions' )->inLanguage( $lang )->text();
 
-               if( $msg == '-' ){
+               if ( $msg == '-' ) {
                        return array();
                }
 
-               foreach( explode( ',', $msg ) as $option ) {
-                       if( strpos( $option, ':' ) === false ){
+               foreach ( explode( ',', $msg ) as $option ) {
+                       if ( strpos( $option, ':' ) === false ) {
                                $option = "$option:$option";
                        }
 
@@ -781,7 +787,7 @@ class SpecialBlock extends FormSpecialPage {
         */
        public static function parseExpiryInput( $expiry ) {
                static $infinity;
-               if( $infinity == null ){
+               if ( $infinity == null ) {
                        $infinity = wfGetDB( DB_SLAVE )->getInfinity();
                }
 
@@ -826,8 +832,8 @@ class SpecialBlock extends FormSpecialPage {
                        $user = User::newFromName( $user );
                }
 
-               if( $performer->isBlocked() ){
-                       if( $user instanceof User && $user->getId() == $performer->getId() ) {
+               if ( $performer->isBlocked() ) {
+                       if ( $user instanceof User && $user->getId() == $performer->getId() ) {
                                # User is trying to unblock themselves
                                if ( $performer->isAllowed( 'unblockself' ) ) {
                                        return true;
@@ -851,40 +857,41 @@ class SpecialBlock extends FormSpecialPage {
         * reader for this block, to provide more information in the logs
         * @param $data Array from HTMLForm data
         * @param $type Block::TYPE_ constant (USER, RANGE, or IP)
-        * @return array
+        * @return string
         */
        protected static function blockLogFlags( array $data, $type ) {
                global $wgBlockAllowsUTEdit;
                $flags = array();
 
-               # when blocking a user the option 'anononly' is not available/has no effect -> do not write this into log
-               if( !$data['HardBlock'] && $type != Block::TYPE_USER ){
+               # when blocking a user the option 'anononly' is not available/has no effect
+               # -> do not write this into log
+               if ( !$data['HardBlock'] && $type != Block::TYPE_USER ) {
                        // For grepping: message block-log-flags-anononly
                        $flags[] = 'anononly';
                }
 
-               if( $data['CreateAccount'] ){
+               if ( $data['CreateAccount'] ) {
                        // For grepping: message block-log-flags-nocreate
                        $flags[] = 'nocreate';
                }
 
                # Same as anononly, this is not displayed when blocking an IP address
-               if( !$data['AutoBlock'] && $type == Block::TYPE_USER ){
+               if ( !$data['AutoBlock'] && $type == Block::TYPE_USER ) {
                        // For grepping: message block-log-flags-noautoblock
                        $flags[] = 'noautoblock';
                }
 
-               if( $data['DisableEmail'] ){
+               if ( $data['DisableEmail'] ) {
                        // For grepping: message block-log-flags-noemail
                        $flags[] = 'noemail';
                }
 
-               if( $wgBlockAllowsUTEdit && $data['DisableUTEdit'] ){
+               if ( $wgBlockAllowsUTEdit && $data['DisableUTEdit'] ) {
                        // For grepping: message block-log-flags-nousertalk
                        $flags[] = 'nousertalk';
                }
 
-               if( $data['HideUser'] ){
+               if ( $data['HideUser'] ) {
                        // For grepping: message block-log-flags-hiddenname
                        $flags[] = 'hiddenname';
                }
index bf7de3f..fb65326 100644 (file)
@@ -144,8 +144,17 @@ class SpecialBookSources extends SpecialPage {
                $title = Title::makeTitleSafe( NS_PROJECT, $page ); # Show list in content language
                if( is_object( $title ) && $title->exists() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                       $this->getOutput()->addWikiText( str_replace( 'MAGICNUMBER', $this->isbn, $rev->getText() ) );
-                       return true;
+                       $content = $rev->getContent();
+
+                       if ( $content instanceof TextContent ) {
+                               //XXX: in the future, this could be stored as structured data, defining a list of book sources
+
+                               $text = $content->getNativeData();
+                               $this->getOutput()->addWikiText( str_replace( 'MAGICNUMBER', $this->isbn, $text ) );
+                               return true;
+                       } else {
+                               throw new MWException( "Unexpected content type for book sources: " . $content->getModel() );
+                       }
                }
 
                # Fall back to the defaults given in the language file
index 8119e6d..97de72a 100644 (file)
@@ -33,9 +33,17 @@ class BrokenRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getPageHeader() {
                return $this->msg( 'brokenredirectstext' )->parseAsBlock();
@@ -43,25 +51,35 @@ class BrokenRedirectsPage extends QueryPage {
 
        function getQueryInfo() {
                return array(
-                       'tables' => array( 'redirect', 'p1' => 'page',
-                                       'p2' => 'page' ),
-                       'fields' => array( 'namespace' => 'p1.page_namespace',
-                                       'title' => 'p1.page_title',
-                                       'value' => 'p1.page_title',
-                                       'rd_namespace',
-                                       'rd_title'
+                       'tables' => array(
+                               'redirect',
+                               'p1' => 'page',
+                               'p2' => 'page',
+                       ),
+                       'fields' => array(
+                               'namespace' => 'p1.page_namespace',
+                               'title' => 'p1.page_title',
+                               'value' => 'p1.page_title',
+                               'rd_namespace',
+                               'rd_title',
+                       ),
+                       'conds' => array(
+                               // Exclude pages that don't exist locally as wiki pages,
+                               // but aren't "broken" either.
+                               // Special pages and interwiki links
+                               'rd_namespace >= 0',
+                               '(rd_interwiki IS NULL OR rd_interwiki = "")',
+                               'p2.page_namespace IS NULL',
                        ),
-                       'conds' => array( 'rd_namespace >= 0',
-                                       'p2.page_namespace IS NULL'
+                       'join_conds' => array(
+                               'p1' => array( 'JOIN', array(
+                                       'rd_from=p1.page_id',
+                               ) ),
+                               'p2' => array( 'LEFT JOIN', array(
+                                       'rd_namespace=p2.page_namespace',
+                                       'rd_title=p2.page_title'
+                               ) ),
                        ),
-                       'join_conds' => array( 'p1' => array( 'JOIN', array(
-                                               'rd_from=p1.page_id',
-                                       ) ),
-                                       'p2' => array( 'LEFT JOIN', array(
-                                               'rd_namespace=p2.page_namespace',
-                                               'rd_title=p2.page_title'
-                                       ) )
-                       )
                );
        }
 
index fc72610..0996de3 100644 (file)
@@ -151,7 +151,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $items = array(
                        array( 'wpName', 'username', 'text', $user->getName() ),
                        array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
-                       array( 'wpNewEmail', 'changeemail-newemail', 'input', $this->mNewEmail ),
+                       array( 'wpNewEmail', 'changeemail-newemail', 'email', $this->mNewEmail ),
                );
                if ( $wgRequirePasswordforEmailChange ) {
                        $items[] = array( 'wpPassword', 'yourpassword', 'password', $this->mPassword );
index 9e3c52b..2b7036c 100644 (file)
@@ -111,14 +111,19 @@ class SpecialComparePages extends SpecialPage {
                $rev2 = self::revOrTitle( $data['Revision2'], $data['Page2'] );
 
                if( $rev1 && $rev2 ) {
-                       $de = new DifferenceEngine( $form->getContext(),
-                               $rev1,
-                               $rev2,
-                               null, // rcid
-                               ( $data['Action'] == 'purge' ),
-                               ( $data['Unhide'] == '1' )
-                       );
-                       $de->showDiffPage( true );
+                       $revision = Revision::newFromId( $rev1 );
+
+                       if ( $revision ) { // NOTE: $rev1 was already checked, should exist.
+                               $contentHandler = $revision->getContentHandler();
+                               $de = $contentHandler->createDifferenceEngine( $form->getContext(),
+                                       $rev1,
+                                       $rev2,
+                                       null, // rcid
+                                       ( $data['Action'] == 'purge' ),
+                                       ( $data['Unhide'] == '1' )
+                               );
+                               $de->showDiffPage( true );
+                       }
                }
        }
 
index fb94ff7..54f8e26 100644 (file)
@@ -841,7 +841,7 @@ class ContribsPager extends ReverseChronologicalPager {
                        $link = Linker::link(
                                $page,
                                htmlspecialchars( $page->getPrefixedText() ),
-                               array(),
+                               array( 'class' => 'mw-contributions-title' ),
                                $page->isRedirect() ? array( 'redirect' => 'no' ) : array()
                        );
                        # Mark current revisions
@@ -882,11 +882,11 @@ class ContribsPager extends ReverseChronologicalPager {
                                // For some reason rev_parent_id isn't populated for this row.
                                // Its rumoured this is true on wikipedia for some revisions (bug 34922).
                                // Next best thing is to have the total number of bytes.
-                               $chardiff = ' . . ' . Linker::formatRevisionSize( $row->rev_len ) . ' . . ';
+                               $chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . Linker::formatRevisionSize( $row->rev_len ) . ' <span class="mw-changeslist-separator">. .</span> ';
                        } else {
                                $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0;
-                               $chardiff = ' . . ' . ChangesList::showCharacterDifference(
-                                               $parentLen, $row->rev_len, $this->getContext() ) . ' . . ';
+                               $chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . ChangesList::showCharacterDifference(
+                                               $parentLen, $row->rev_len, $this->getContext() ) . ' <span class="mw-changeslist-separator">. .</span> ';
                        }
 
                        $lang = $this->getLanguage();
@@ -896,7 +896,7 @@ class ContribsPager extends ReverseChronologicalPager {
                                $d = Linker::linkKnown(
                                        $page,
                                        htmlspecialchars( $date ),
-                                       array(),
+                                       array( 'class' => 'mw-changeslist-date' ),
                                        array( 'oldid' => intval( $row->rev_id ) )
                                );
                        } else {
index ff2a901..c880b61 100644 (file)
@@ -94,17 +94,17 @@ class DeletedContribsPager extends IndexPager {
                if ( isset( $this->mNavigationBar ) ) {
                        return $this->mNavigationBar;
                }
-               $lang = $this->getLanguage();
-               $fmtLimit = $lang->formatNum( $this->mLimit );
+
                $linkTexts = array(
-                       'prev' => $this->msg( 'pager-newer-n', $fmtLimit )->escaped(),
-                       'next' => $this->msg( 'pager-older-n', $fmtLimit )->escaped(),
+                       'prev' => $this->msg( 'pager-newer-n' )->numParams( $this->mLimit )->escaped(),
+                       'next' => $this->msg( 'pager-older-n' )->numParams( $this->mLimit )->escaped(),
                        'first' => $this->msg( 'histlast' )->escaped(),
                        'last' => $this->msg( 'histfirst' )->escaped()
                );
 
                $pagingLinks = $this->getPagingLinks( $linkTexts );
                $limitLinks = $this->getLimitLinks();
+               $lang = $this->getLanguage();
                $limits = $lang->pipeList( $limitLinks );
 
                $this->mNavigationBar = "(" . $lang->pipeList( array( $pagingLinks['first'], $pagingLinks['last'] ) ) . ") " .
@@ -191,7 +191,7 @@ class DeletedContribsPager extends IndexPager {
                        $link = Linker::linkKnown(
                                $undelete,
                                $date,
-                               array(),
+                               array( 'class' => 'mw-changeslist-date' ),
                                array(
                                        'target' => $page->getPrefixedText(),
                                        'timestamp' => $rev->getTimestamp()
@@ -203,7 +203,11 @@ class DeletedContribsPager extends IndexPager {
                        $link = '<span class="history-deleted">' . $link . '</span>';
                }
 
-               $pagelink = Linker::link( $page );
+               $pagelink = Linker::link(
+                       $page,
+                       null,
+                       array( 'class' => 'mw-changeslist-title' )
+               );
 
                if( $rev->isMinor() ) {
                        $mflag = ChangesList::flag( 'minor' );
@@ -222,7 +226,8 @@ class DeletedContribsPager extends IndexPager {
                                array( $last, $dellog, $reviewlink ) ) )->escaped()
                );
 
-               $ret = "{$del}{$link} {$tools} . . {$mflag} {$pagelink} {$comment}";
+               $separator = '<span class="mw-changeslist-separator">. .</span>';
+               $ret = "{$del}{$link} {$tools} {$separator} {$mflag} {$pagelink} {$comment}";
 
                # Denote if username is redacted for this edit
                if( $rev->isDeleted( Revision::DELETED_USER ) ) {
index 5864ca9..ee07323 100644 (file)
@@ -33,9 +33,17 @@ class DoubleRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getPageHeader() {
                return $this->msg( 'doubleredirectstext' )->parseAsBlock();
@@ -44,22 +52,43 @@ class DoubleRedirectsPage extends QueryPage {
        function reallyGetQueryInfo( $namespace = null, $title = null ) {
                $limitToTitle = !( $namespace === null && $title === null );
                $retval = array (
-                       'tables' => array ( 'ra' => 'redirect',
-                                       'rb' => 'redirect', 'pa' => 'page',
-                                       'pb' => 'page', 'pc' => 'page' ),
-                       'fields' => array ( 'namespace' => 'pa.page_namespace',
-                                       'title' => 'pa.page_title',
-                                       'value' => 'pa.page_title',
-                                       'nsb' => 'pb.page_namespace',
-                                       'tb' => 'pb.page_title',
-                                       'nsc' => 'pc.page_namespace',
-                                       'tc' => 'pc.page_title' ),
-                       'conds' => array ( 'ra.rd_from = pa.page_id',
-                                       'pb.page_namespace = ra.rd_namespace',
-                                       'pb.page_title = ra.rd_title',
-                                       'rb.rd_from = pb.page_id',
-                                       'pc.page_namespace = rb.rd_namespace',
-                                       'pc.page_title = rb.rd_title' )
+                       'tables' => array (
+                               'ra' => 'redirect',
+                               'rb' => 'redirect',
+                               'pa' => 'page',
+                               'pb' => 'page'
+                       ),
+                       'fields' => array(
+                               'namespace' => 'pa.page_namespace',
+                               'title' => 'pa.page_title',
+                               'value' => 'pa.page_title',
+
+                               'nsb' => 'pb.page_namespace',
+                               'tb' => 'pb.page_title',
+
+                               // Select fields from redirect instead of page. Because there may
+                               // not actually be a page table row for this target (e.g. for interwiki redirects)
+                               'nsc' => 'rb.rd_namespace',
+                               'tc' => 'rb.rd_title',
+                               'iwc' => 'rb.rd_interwiki',
+                       ),
+                       'conds' => array(
+                               'ra.rd_from = pa.page_id',
+
+                               // Filter out redirects where the target goes interwiki (bug 40353).
+                               // This isn't an optimization, it is required for correct results,
+                               // otherwise a non-double redirect like Bar -> w:Foo will show up
+                               // like "Bar -> Foo -> w:Foo".
+
+                               // Need to check both NULL and "" for some reason,
+                               // apparently either can be stored for non-iw entries.
+                               '(ra.rd_interwiki IS NULL OR ra.rd_interwiki = "")',
+
+                               'pb.page_namespace = ra.rd_namespace',
+                               'pb.page_title = ra.rd_title',
+
+                               'rb.rd_from = pb.page_id',
+                       )
                );
                if ( $limitToTitle ) {
                        $retval['conds']['pa.page_namespace'] = $namespace;
@@ -79,6 +108,11 @@ class DoubleRedirectsPage extends QueryPage {
        function formatResult( $skin, $result ) {
                $titleA = Title::makeTitle( $result->namespace, $result->title );
 
+               // If only titleA is in the query, it means this came from
+               // querycache (which only saves 3 columns).
+               // That does save the bulk of the query cost, but now we need to
+               // get a little more detail about each individual entry quickly
+               // using the filter of reallyGetQueryInfo.
                if ( $result && !isset( $result->nsb ) ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $qi = $this->reallyGetQueryInfo( $result->namespace,
@@ -94,7 +128,7 @@ class DoubleRedirectsPage extends QueryPage {
                }
 
                $titleB = Title::makeTitle( $result->nsb, $result->tb );
-               $titleC = Title::makeTitle( $result->nsc, $result->tc );
+               $titleC = Title::makeTitle( $result->nsc, $result->tc, '',  $result->iwc );
 
                $linkA = Linker::linkKnown(
                        $titleA,
index 2bea3a3..23cd9aa 100644 (file)
@@ -510,7 +510,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                $this->toc .= Linker::tocLine( "editwatchlist-{$data['section']}", $nsText,
                                        $this->getLanguage()->formatNum( ++$tocLength ), 1 ) . Linker::tocLineEnd();
                        }
-                       $this->toc = Linker::tocList( $this->toc, $this->getLanguage()->getCode() );
+                       $this->toc = Linker::tocList( $this->toc );
                } else {
                        $this->toc = false;
                }
index ccf8ba1..96739ea 100644 (file)
@@ -40,9 +40,17 @@ class FileDuplicateSearchPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isSyndicated() { return false; }
-       function isCacheable() { return false; }
-       function isCached() { return false; }
+       function isSyndicated() {
+               return false;
+       }
+
+       function isCacheable() {
+               return false;
+       }
+
+       function isCached() {
+               return false;
+       }
 
        function linkParameters() {
                return array( 'filename' => $this->filename );
index c217ecc..84e3cb7 100644 (file)
@@ -40,19 +40,11 @@ class SpecialJavaScriptTest extends SpecialPage {
        }
 
        public function execute( $par ) {
-               global $wgEnableJavaScriptTest;
-
                $out = $this->getOutput();
 
                $this->setHeaders();
                $out->disallowUserJs();
 
-               // Abort early if we're disabled
-               if ( $wgEnableJavaScriptTest !== true ) {
-                       $out->addWikiMsg( 'javascripttest-disabled' );
-                       return;
-               }
-
                $out->addModules( 'mediawiki.special.javaScriptTest' );
 
                // Determine framework
@@ -112,6 +104,7 @@ class SpecialJavaScriptTest extends SpecialPage {
         * be thrown.
         * @param $html String: The raw HTML.
         * @param $state String: State, one of 'noframework', 'unknownframework' or 'frameworkfound'
+        * @throws MWException
         * @return string
         */
        private function wrapSummaryHtml( $html, $state ) {
@@ -164,10 +157,4 @@ HTML;
                // $wgJavaScriptTestConfig in DefaultSettings.php
                $out->addJsConfigVars( 'QUnitTestSwarmInjectJSPath', $wgJavaScriptTestConfig['qunit']['testswarm-injectjs'] );
        }
-
-       public function isListed(){
-               global $wgEnableJavaScriptTest;
-               return $wgEnableJavaScriptTest === true;
-       }
-
 }
index fe338a0..f4acd64 100644 (file)
@@ -34,9 +34,17 @@ class ListredirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array(
index 923a18d..11d7f4d 100644 (file)
@@ -88,8 +88,8 @@ class UsersPager extends AlphabeticPager {
                $dbr = wfGetDB( DB_SLAVE );
                $conds = array();
                // Don't show hidden names
-               if( !$this->getUser()->isAllowed('hideuser') ) {
-                       $conds[] = 'ipb_deleted IS NULL';
+               if( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0';
                }
 
                $options = array();
@@ -116,18 +116,21 @@ class UsersPager extends AlphabeticPager {
                $query = array(
                        'tables' => array( 'user', 'user_groups', 'ipblocks'),
                        'fields' => array(
-                               $this->creationSort ? 'MAX(user_name) AS user_name' : 'user_name',
-                               $this->creationSort ? 'user_id' : 'MAX(user_id) AS user_id',
-                               'MAX(user_editcount) AS edits',
-                               'COUNT(ug_group) AS numgroups',
-                               'MAX(ug_group) AS singlegroup', // the usergroup if there is only one
-                               'MIN(user_registration) AS creation',
-                               'MAX(ipb_deleted) AS ipb_deleted' // block/hide status
+                               'user_name' => $this->creationSort ? 'MAX(user_name)' : 'user_name',
+                               'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)',
+                               'edits' => 'MAX(user_editcount)',
+                               'numgroups' => 'COUNT(ug_group)',
+                               'singlegroup' => 'MAX(ug_group)', // the usergroup if there is only one
+                               'creation' => 'MIN(user_registration)',
+                               'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status
                        ),
                        'options' => $options,
                        'join_conds' => array(
                                'user_groups' => array( 'LEFT JOIN', 'user_id=ug_user' ),
-                               'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user AND ipb_deleted=1 AND ipb_auto=0' ),
+                               'ipblocks' => array( 'LEFT JOIN', array(
+                                       'user_id=ipb_user',
+                                       'ipb_auto' => 0
+                               )),
                        ),
                        'conds' => $conds
                );
@@ -181,9 +184,10 @@ class UsersPager extends AlphabeticPager {
                        $created = $this->msg( 'usercreated', $d, $t, $row->user_name )->escaped();
                        $created = ' ' . $this->msg( 'parentheses' )->rawParams( $created )->escaped();
                }
+               $blocked = !is_null( $row->ipb_deleted ) ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : '';
 
                wfRunHooks( 'SpecialListusersFormatRow', array( &$item, $row ) );
-               return "<li>{$item}{$edits}{$created}</li>";
+               return Html::rawElement( 'li', array(), "{$item}{$edits}{$created}{$blocked}" );
        }
 
        function doBatchLookups() {
@@ -294,14 +298,13 @@ class UsersPager extends AlphabeticPager {
 /**
  * @ingroup SpecialPage
  */
-class SpecialListUsers extends SpecialPage {
+class SpecialListUsers extends IncludableSpecialPage {
 
        /**
         * Constructor
         */
        public function __construct() {
                parent::__construct( 'Listusers' );
-               $this->mIncludable = true;
        }
 
        /**
index 8ab0976..7800e56 100644 (file)
@@ -33,7 +33,7 @@ class SpecialLog extends SpecialPage {
        /**
         * List log type for which the target is a user
         * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER
-        * Title user instead. 
+        * Title user instead.
         */
        private $typeOnUser = array(
                'block',
@@ -47,7 +47,7 @@ class SpecialLog extends SpecialPage {
 
        public function execute( $par ) {
                global $wgLogRestrictions;
-               
+
                $this->setHeaders();
                $this->outputHeader();
 
@@ -65,7 +65,7 @@ class SpecialLog extends SpecialPage {
 
                // Set values
                $opts->fetchValuesFromRequest( $this->getRequest() );
-               if ( $par ) {
+               if ( $par !== null ) {
                        $this->parseParams( $opts, (string)$par );
                }
 
index 763bbdb..2889f7e 100644 (file)
@@ -44,7 +44,10 @@ class LonelyPagesPage extends PageQueryPage {
        function isExpensive() {
                return true;
        }
-       function isSyndicated() { return false; }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 104c653..432956f 100644 (file)
@@ -34,9 +34,17 @@ class MIMEsearchPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function isCacheable() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function isCacheable() {
+               return false;
+       }
 
        function linkParameters() {
                return array( 'mime' => "{$this->major}/{$this->minor}" );
index 1f05749..bc9a3d9 100644 (file)
@@ -373,26 +373,32 @@ class SpecialMergeHistory extends SpecialPage {
                                        $destTitle->getPrefixedText()
                                )->inContentLanguage()->text();
                        }
-                       $mwRedir = MagicWord::get( 'redirect' );
-                       $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destTitle->getPrefixedText() . "]]\n";
-                       $redirectPage = WikiPage::factory( $targetTitle );
-                       $redirectRevision = new Revision( array(
-                               'page'    => $this->mTargetID,
-                               'comment' => $comment,
-                               'text'    => $redirectText ) );
-                       $redirectRevision->insertOn( $dbw );
-                       $redirectPage->updateRevisionOn( $dbw, $redirectRevision );
-
-                       # Now, we record the link from the redirect to the new title.
-                       # It should have no other outgoing links...
-                       $dbw->delete( 'pagelinks', array( 'pl_from' => $this->mDestID ), __METHOD__ );
-                       $dbw->insert( 'pagelinks',
-                               array(
-                                       'pl_from'      => $this->mDestID,
-                                       'pl_namespace' => $destTitle->getNamespace(),
-                                       'pl_title'     => $destTitle->getDBkey() ),
-                               __METHOD__
-                       );
+
+                       $contentHandler = ContentHandler::getForTitle( $targetTitle );
+                       $redirectContent = $contentHandler->makeRedirectContent( $destTitle );
+
+                       if ( $redirectContent ) {
+                               $redirectPage = WikiPage::factory( $targetTitle );
+                               $redirectRevision = new Revision( array(
+                                       'page'    => $this->mTargetID,
+                                       'comment' => $comment,
+                                       'content' => $redirectContent ) );
+                               $redirectRevision->insertOn( $dbw );
+                               $redirectPage->updateRevisionOn( $dbw, $redirectRevision );
+
+                               # Now, we record the link from the redirect to the new title.
+                               # It should have no other outgoing links...
+                               $dbw->delete( 'pagelinks', array( 'pl_from' => $this->mDestID ), __METHOD__ );
+                               $dbw->insert( 'pagelinks',
+                                       array(
+                                               'pl_from'      => $this->mDestID,
+                                               'pl_namespace' => $destTitle->getNamespace(),
+                                               'pl_title'     => $destTitle->getDBkey() ),
+                                       __METHOD__
+                               );
+                       } else {
+                               // would be nice to show a warning if we couldn't create a redirect
+                       }
                } else {
                        $targetTitle->invalidateCache(); // update histories
                }
index 3f0bafa..085a09f 100644 (file)
@@ -35,8 +35,13 @@ class MostcategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 3d79790..01a5caf 100644 (file)
@@ -35,8 +35,13 @@ class MostimagesPage extends ImageQueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 894d697..e08cdf3 100644 (file)
@@ -35,8 +35,13 @@ class MostinterwikisPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 89c4350..66814cb 100644 (file)
@@ -36,8 +36,13 @@ class MostlinkedPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index dadef8b..df2975c 100644 (file)
@@ -35,7 +35,9 @@ class MostlinkedCategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
@@ -46,7 +48,9 @@ class MostlinkedCategoriesPage extends QueryPage {
                );
        }
 
-       function sortDescending() { return true; }
+       function sortDescending() {
+               return true;
+       }
 
        /**
         * Fetch user page links and cache their existence
index 3ece917..af3dbf3 100644 (file)
@@ -258,7 +258,7 @@ class MovePageForm extends UnlistedSpecialPage {
                         Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) .
                         Xml::openElement( 'fieldset' ) .
                         Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                        Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-movepage-table' ) ) .
+                        Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) ) .
                         "<tr>
                                <td class='mw-label'>" .
                                        $this->msg( 'movearticle' )->escaped() .
index 8e15d55..bd7b41f 100644 (file)
@@ -164,8 +164,6 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function filterLinks() {
-               global $wgGroupPermissions;
-
                // show/hide links
                $showhide = array( $this->msg( 'show' )->escaped(), $this->msg( 'hide' )->escaped() );
 
@@ -181,8 +179,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                }
 
                // Disable some if needed
-               # @todo FIXME: Throws E_NOTICEs if not set; and doesn't obey hooks etc.
-               if ( $wgGroupPermissions['*']['createpage'] !== true ) {
+               if ( !User::groupHasPermission( '*', 'createpage' ) ) {
                        unset( $filters['hideliu'] );
                }
                if ( !$this->getUser()->useNPPatrol() ) {
@@ -459,11 +456,12 @@ class SpecialNewpages extends IncludableSpecialPage {
        protected function feedItemDesc( $row ) {
                $revision = Revision::newFromId( $row->rev_id );
                if( $revision ) {
+                       //XXX: include content model/type in feed item?
                        return '<p>' . htmlspecialchars( $revision->getUserText() ) .
                                $this->msg( 'colon-separator' )->inContentLanguage()->escaped() .
                                htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
                                "</p>\n<hr />\n<div>" .
-                               nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
+                               nl2br( htmlspecialchars( $revision->getContent()->serialize() ) ) . "</div>";
                }
                return '';
        }
@@ -488,7 +486,7 @@ class NewPagesPager extends ReverseChronologicalPager {
        }
 
        function getQueryInfo() {
-               global $wgEnableNewpagesUserFilter, $wgGroupPermissions;
+               global $wgEnableNewpagesUserFilter;
                $conds = array();
                $conds['rc_new'] = 1;
 
@@ -510,7 +508,7 @@ class NewPagesPager extends ReverseChronologicalPager {
                        $conds['rc_user_text'] = $user->getText();
                        $rcIndexes = 'rc_user_text';
                # If anons cannot make new pages, don't "exclude logged in users"!
-               } elseif( $wgGroupPermissions['*']['createpage'] && $this->opts->getValue( 'hideliu' ) ) {
+               } elseif( User::groupHasPermission( '*', 'createpage' ) && $this->opts->getValue( 'hideliu' ) ) {
                        $conds['rc_user'] = 0;
                }
                # If this user cannot see patrolled edits or they are off, don't do dumb queries!
index efb5765..97f0037 100644 (file)
@@ -121,6 +121,8 @@ class SpecialPasswordReset extends FormSpecialPage {
         * userCanExecute(), and if the data array contains 'Username', etc, then Username
         * resets are allowed.
         * @param $data array
+        * @throws MWException
+        * @throws ThrottledError|PermissionsError
         * @return Bool|Array
         */
        public function onSubmit( array $data ) {
@@ -247,7 +249,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        $username,
                        $passwordBlock,
                        count( $passwords ),
-                       Title::newMainPage()->getCanonicalUrl(),
+                       '<' . Title::newMainPage()->getCanonicalUrl() . '>',
                        round( $wgNewPasswordExpiry / 86400 )
                );
 
index 448d179..5a9f3f7 100644 (file)
@@ -37,7 +37,9 @@ class PopularPagesPage extends QueryPage {
                return true;
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index c37bb1d..7740b32 100644 (file)
@@ -188,7 +188,7 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                        $n = 0;
                        if( $res->numRows() > 0 ) {
-                               $out = Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-prefixindex-list-table' ) );
+                               $out = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-list-table' ) );
 
                                while( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
                                        $t = Title::makeTitle( $s->page_namespace, $s->page_title );
@@ -227,7 +227,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                } else {
                        $nsForm = $this->namespacePrefixForm( $namespace, $prefix, $hideredirects );
                        $self = $this->getTitle();
-                       $out2 = Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-prefixindex-nav-table' ) )  .
+                       $out2 = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-nav-table' ) )  .
                                '<tr>
                                        <td>' .
                                                $nsForm .
index 089f967..7856e54 100644 (file)
@@ -504,6 +504,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
        /**
         * UI entry point for form submission.
+        * @throws PermissionsError
         * @return bool
         */
        protected function submit() {
index 3344436..6c33bb8 100644 (file)
@@ -300,7 +300,7 @@ class SpecialSearch extends SpecialPage {
                        )
                );
                $out->addHtml(
-                       Xml::openElement( 'table', array( 'id'=>'mw-search-top-table', 'border'=>0, 'cellpadding'=>0, 'cellspacing'=>0 ) ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-search-top-table', 'cellpadding' => 0, 'cellspacing' => 0 ) ) .
                        Xml::openElement( 'tr' ) .
                        Xml::openElement( 'td' ) . "\n" .
                        $this->shortDialog( $term ) .
@@ -423,7 +423,7 @@ class SpecialSearch extends SpecialPage {
 
                if( $t->isKnown() ) {
                        $messageName = 'searchmenu-exists';
-               } elseif( $t->userCan( 'create' ) ) {
+               } elseif( $t->userCan( 'create', $this->getUser() ) ) {
                        $messageName = 'searchmenu-new';
                } else {
                        $messageName = 'searchmenu-new-nocreate';
@@ -449,7 +449,9 @@ class SpecialSearch extends SpecialPage {
                $out = $this->getOutput();
                if( strval( $term ) !== ''  ) {
                        $out->setPageTitle( $this->msg( 'searchresults' ) );
-                       $out->setHTMLTitle( $this->msg( 'pagetitle', $this->msg( 'searchresults-title', $term )->plain() ) );
+                       $out->setHTMLTitle( $this->msg( 'pagetitle' )->rawParams(
+                               $this->msg( 'searchresults-title' )->rawParams( $term )->text()
+                       ) );
                }
                // add javascript specific to special:search
                $out->addModules( 'mediawiki.special.search' );
@@ -559,7 +561,7 @@ class SpecialSearch extends SpecialPage {
                //If page content is not readable, just return the title.
                //This is not quite safe, but better than showing excerpts from non-readable pages
                //Note that hiding the entry entirely would screw up paging.
-               if( !$t->userCan( 'read' ) ) {
+               if( !$t->userCan( 'read', $this->getUser() ) ) {
                        wfProfileOut( __METHOD__ );
                        return "<li>{$link}</li>\n";
                }
@@ -667,10 +669,10 @@ class SpecialSearch extends SpecialPage {
                                        return "<li>" .
                                                '<table class="searchResultImage">' .
                                                '<tr>' .
-                                               '<td width="120" align="center" valign="top">' .
+                                               '<td style="width: 120px; text-align: center; vertical-align: top;">' .
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
-                                               '<td valign="top">' .
+                                               '<td style="vertical-align: top;">' .
                                                $link .
                                                $extract .
                                                "<div class='mw-search-result-data'>{$score}{$desc} - {$date}{$related}</div>" .
@@ -868,7 +870,7 @@ class SpecialSearch extends SpecialPage {
                for( $i = 0; $i < $numRows; $i += 4 ) {
                        $namespaceTables .= Xml::openElement(
                                'table',
-                               array( 'cellpadding' => 0, 'cellspacing' => 0, 'border' => 0 )
+                               array( 'cellpadding' => 0, 'cellspacing' => 0 )
                        );
                        for( $j = $i; $j < $i + 4 && $j < $numRows; $j++ ) {
                                $namespaceTables .= Xml::tags( 'tr', null, $rows[$j] );
index c895dae..4036ebb 100644 (file)
@@ -69,7 +69,7 @@ class SpecialTags extends SpecialPage {
                }
 
                $newRow = '';
-               $newRow .= Xml::tags( 'td', null, Xml::element( 'tt', null, $tag ) );
+               $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $disp = ChangeTags::tagDescription( $tag );
                $disp .= ' ';
index fb2005b..853a805 100644 (file)
@@ -149,6 +149,7 @@ class SpecialUnblock extends SpecialPage {
         *
         * @param $data Array
         * @param $context IContextSource
+        * @throws ErrorPageError
         * @return Array( Array(message key, parameters) ) on failure, True on success
         */
        public static function processUnblock( array $data, IContextSource $context ){
index 1226a6c..37fcb2f 100644 (file)
@@ -41,7 +41,10 @@ class UncategorizedPagesPage extends PageQueryPage {
        function isExpensive() {
                return true;
        }
-       function isSyndicated() { return false; }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index b1555c6..b735b18 100644 (file)
@@ -32,7 +32,16 @@ class PageArchive {
         * @var Title
         */
        protected $title;
-       var $fileStatus;
+
+       /**
+        * @var Status
+        */
+       protected $fileStatus;
+
+       /**
+        * @var Status
+        */
+       protected $revisionStatus;
 
        function __construct( $title ) {
                if( is_null( $title ) ) {
@@ -112,15 +121,25 @@ class PageArchive {
         * @return ResultWrapper
         */
        function listRevisions() {
+               global $wgContentHandlerNoDB;
+
                $dbr = wfGetDB( DB_SLAVE );
+
+               $fields = array(
+                       'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text',
+                       'ar_comment', 'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1',
+               );
+
+               if ( !$wgContentHandlerNoDB ) {
+                       $fields[] = 'ar_content_format';
+                       $fields[] = 'ar_content_model';
+               }
+
                $res = $dbr->select( 'archive',
-                       array(
-                               'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text',
-                               'ar_comment', 'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1'
-                       ),
+                       $fields,
                        array( 'ar_namespace' => $this->title->getNamespace(),
                                   'ar_title' => $this->title->getDBkey() ),
-                       'PageArchive::listRevisions',
+                       __METHOD__,
                        array( 'ORDER BY' => 'ar_timestamp DESC' ) );
                $ret = $dbr->resultObject( $res );
                return $ret;
@@ -174,28 +193,38 @@ class PageArchive {
         * @return Revision
         */
        function getRevision( $timestamp ) {
+               global $wgContentHandlerNoDB;
+
                $dbr = wfGetDB( DB_SLAVE );
+
+               $fields = array(
+                       'ar_rev_id',
+                       'ar_text',
+                       'ar_comment',
+                       'ar_user',
+                       'ar_user_text',
+                       'ar_timestamp',
+                       'ar_minor_edit',
+                       'ar_flags',
+                       'ar_text_id',
+                       'ar_deleted',
+                       'ar_len',
+                       'ar_sha1',
+               );
+
+               if ( !$wgContentHandlerNoDB ) {
+                       $fields[] = 'ar_content_format';
+                       $fields[] = 'ar_content_model';
+               }
+
                $row = $dbr->selectRow( 'archive',
-                       array(
-                               'ar_rev_id',
-                               'ar_text',
-                               'ar_comment',
-                               'ar_user',
-                               'ar_user_text',
-                               'ar_timestamp',
-                               'ar_minor_edit',
-                               'ar_flags',
-                               'ar_text_id',
-                               'ar_deleted',
-                               'ar_len',
-                               'ar_sha1',
-                       ),
+                       $fields,
                        array( 'ar_namespace' => $this->title->getNamespace(),
                                        'ar_title' => $this->title->getDBkey(),
                                        'ar_timestamp' => $dbr->timestamp( $timestamp ) ),
                        __METHOD__ );
                if( $row ) {
-                       return Revision::newFromArchiveRow( $row, array( 'page' => $this->title->getArticleID() ) );
+                       return Revision::newFromArchiveRow( $row, array( 'title' => $this->title ) );
                } else {
                        return null;
                }
@@ -308,7 +337,9 @@ class PageArchive {
                $dbr = wfGetDB( DB_SLAVE );
                $n = $dbr->selectField( 'archive', 'COUNT(ar_title)',
                        array( 'ar_namespace' => $this->title->getNamespace(),
-                                  'ar_title' => $this->title->getDBkey() ) );
+                                  'ar_title' => $this->title->getDBkey() ),
+                       __METHOD__
+               );
                return ( $n > 0 );
        }
 
@@ -327,8 +358,6 @@ class PageArchive {
         * on success, false on failure
         */
        function undelete( $timestamps, $comment = '', $fileVersions = array(), $unsuppress = false, User $user = null ) {
-               global $wgContLang, $wgUser;
-
                // If both the set of text revisions and file revisions are empty,
                // restore everything. Otherwise, just restore the requested items.
                $restoreAll = empty( $timestamps ) && empty( $fileVersions );
@@ -339,7 +368,7 @@ class PageArchive {
                if( $restoreFiles && $this->title->getNamespace() == NS_FILE ) {
                        $img = wfLocalFile( $this->title );
                        $this->fileStatus = $img->restore( $fileVersions, $unsuppress );
-                       if ( !$this->fileStatus->isOk() ) {
+                       if ( !$this->fileStatus->isOK() ) {
                                return false;
                        }
                        $filesRestored = $this->fileStatus->successCount;
@@ -348,10 +377,12 @@ class PageArchive {
                }
 
                if( $restoreText ) {
-                       $textRestored = $this->undeleteRevisions( $timestamps, $unsuppress, $comment );
-                       if( $textRestored === false ) { // It must be one of UNDELETE_*
+                       $this->revisionStatus = $this->undeleteRevisions( $timestamps, $unsuppress, $comment );
+                       if( !$this->revisionStatus->isOK() ) {
                                return false;
                        }
+
+                       $textRestored = $this->revisionStatus->getValue();
                } else {
                        $textRestored = 0;
                }
@@ -377,6 +408,7 @@ class PageArchive {
                }
 
                if ( $user === null ) {
+                       global $wgUser;
                        $user = $wgUser;
                }
 
@@ -399,11 +431,13 @@ class PageArchive {
         * @param $comment String
         * @param $unsuppress Boolean: remove all ar_deleted/fa_deleted restrictions of seletected revs
         *
-        * @return Mixed: number of revisions restored or false on failure
+        * @return Status, containing the number of revisions restored on success
         */
        private function undeleteRevisions( $timestamps, $unsuppress = false, $comment = '' ) {
+               global $wgContentHandlerNoDB;
+
                if ( wfReadOnly() ) {
-                       return false;
+                       throw new ReadOnlyError();
                }
                $restoreAll = empty( $timestamps );
 
@@ -433,9 +467,14 @@ class PageArchive {
                        $previousTimestamp = $dbw->selectField( 'revision', 'rev_timestamp',
                                array( 'rev_id' => $previousRevId ),
                                __METHOD__ );
+
                        if( $previousTimestamp === false ) {
                                wfDebug( __METHOD__.": existing page refers to a page_latest that does not exist\n" );
-                               return 0;
+
+                               $status = Status::newGood( 0 );
+                               $status->warning( 'undeleterevision-missing' );
+
+                               return $status;
                        }
                } else {
                        # Have to create a new article...
@@ -455,24 +494,31 @@ class PageArchive {
                        $oldones = "ar_timestamp IN ( {$oldts} )";
                }
 
+               $fields = array(
+                       'ar_rev_id',
+                       'ar_text',
+                       'ar_comment',
+                       'ar_user',
+                       'ar_user_text',
+                       'ar_timestamp',
+                       'ar_minor_edit',
+                       'ar_flags',
+                       'ar_text_id',
+                       'ar_deleted',
+                       'ar_page_id',
+                       'ar_len',
+                       'ar_sha1');
+
+               if ( !$wgContentHandlerNoDB ) {
+                       $fields[] = 'ar_content_format';
+                       $fields[] = 'ar_content_model';
+               }
+
                /**
                 * Select each archived revision...
                 */
                $result = $dbw->select( 'archive',
-                       /* fields */ array(
-                               'ar_rev_id',
-                               'ar_text',
-                               'ar_comment',
-                               'ar_user',
-                               'ar_user_text',
-                               'ar_timestamp',
-                               'ar_minor_edit',
-                               'ar_flags',
-                               'ar_text_id',
-                               'ar_deleted',
-                               'ar_page_id',
-                               'ar_len',
-                               'ar_sha1' ),
+                       $fields,
                        /* WHERE */ array(
                                'ar_namespace' => $this->title->getNamespace(),
                                'ar_title'     => $this->title->getDBkey(),
@@ -484,17 +530,38 @@ class PageArchive {
                $rev_count = $dbw->numRows( $result );
                if( !$rev_count ) {
                        wfDebug( __METHOD__ . ": no revisions to restore\n" );
-                       return false; // ???
+
+                       $status = Status::newGood( 0 );
+                       $status->warning( "undelete-no-results" );
+                       return $status;
                }
 
                $ret->seek( $rev_count - 1 ); // move to last
                $row = $ret->fetchObject(); // get newest archived rev
                $ret->seek( 0 ); // move back
 
+               // grab the content to check consistency with global state before restoring the page.
+               $revision = Revision::newFromArchiveRow( $row,
+                       array(
+                               'title' => $article->getTitle(), // used to derive default content model
+                       ) );
+
+               $m = $revision->getContentModel();
+
+               $user = User::newFromName( $revision->getRawUserText(), false );
+               $content = $revision->getContent( Revision::RAW );
+
+               //NOTE: article ID may not be known yet. prepareSave() should not modify the database.
+               $status = $content->prepareSave( $article, 0, -1, $user );
+
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
                if( $makepage ) {
                        // Check the state of the newest to-be version...
                        if( !$unsuppress && ( $row->ar_deleted & Revision::DELETED_TEXT ) ) {
-                               return false; // we can't leave the current revision like this!
+                               return Status::newFatal( "undeleterevdel" );
                        }
                        // Safe to insert now...
                        $newid  = $article->insertOn( $dbw );
@@ -504,7 +571,7 @@ class PageArchive {
                        if( $row->ar_timestamp > $previousTimestamp ) {
                                // Check the state of the newest to-be version...
                                if( !$unsuppress && ( $row->ar_deleted & Revision::DELETED_TEXT ) ) {
-                                       return false; // we can't leave the current revision like this!
+                                       return Status::newFatal( "undeleterevdel" );
                                }
                        }
                }
@@ -525,7 +592,7 @@ class PageArchive {
                        // unless we are specifically removing all restrictions...
                        $revision = Revision::newFromArchiveRow( $row,
                                array(
-                                       'page' => $pageId,
+                                       'title' => $this->title,
                                        'deleted' => $unsuppress ? 0 : $row->ar_deleted
                                ) );
 
@@ -544,7 +611,7 @@ class PageArchive {
 
                // Was anything restored at all?
                if ( $restored == 0 ) {
-                       return 0;
+                       return Status::newGood( 0 );
                }
 
                $created = (bool)$newid;
@@ -564,13 +631,18 @@ class PageArchive {
                        $update->doUpdate();
                }
 
-               return $restored;
+               return Status::newGood( $restored );
        }
 
        /**
         * @return Status
         */
        function getFileStatus() { return $this->fileStatus; }
+
+       /**
+        * @return Status
+        */
+       function getRevisionStatus() { return $this->revisionStatus; }
 }
 
 /**
@@ -778,11 +850,13 @@ class SpecialUndelete extends SpecialPage {
 
        private function showRevision( $timestamp ) {
                if( !preg_match( '/[0-9]{14}/', $timestamp ) ) {
-                       return 0;
+                       return;
                }
 
                $archive = new PageArchive( $this->mTargetObj );
-               wfRunHooks( 'UndeleteForm::showRevision', array( &$archive, $this->mTargetObj ) );
+               if ( !wfRunHooks( 'UndeleteForm::showRevision', array( &$archive, $this->mTargetObj ) ) ) {
+                       return;
+               }
                $rev = $archive->getRevision( $timestamp );
 
                $out = $this->getOutput();
@@ -832,7 +906,11 @@ class SpecialUndelete extends SpecialPage {
                $t = $lang->userTime( $timestamp, $user );
                $userLink = Linker::revUserTools( $rev );
 
-               if( $this->mPreview ) {
+               $content = $rev->getContent( Revision::FOR_THIS_USER, $user );
+
+               $isText = ( $content instanceof TextContent );
+
+               if( $this->mPreview || $isText ) {
                        $openDiv = '<div id="mw-undelete-revision" class="mw-warning">';
                } else {
                        $openDiv = '<div id="mw-undelete-revision">';
@@ -849,23 +927,48 @@ class SpecialUndelete extends SpecialPage {
 
                $out->addHTML( $this->msg( 'undelete-revision' )->rawParams( $link )->params(
                        $time )->rawParams( $userLink )->params( $d, $t )->parse() . '</div>' );
-               wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) );
 
-               if( $this->mPreview ) {
+               if ( !wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) ) ) {
+                       return;
+               }
+
+               if( $this->mPreview || !$isText ) {
+                       // NOTE: non-text content has no source view, so always use rendered preview
+
                        // Hide [edit]s
                        $popts = $out->parserOptions();
                        $popts->setEditSection( false );
-                       $out->parserOptions( $popts );
-                       $out->addWikiTextTitleTidy( $rev->getText( Revision::FOR_THIS_USER, $user ), $this->mTargetObj, true );
+
+                       $pout = $content->getParserOutput( $this->mTargetObj, $rev->getId(), $popts, true );
+                       $out->addParserOutput( $pout );
                }
 
+               if ( $isText ) {
+                       // source view for textual content
+                       $sourceView = Xml::element( 'textarea', array(
+                               'readonly' => 'readonly',
+                               'cols' => intval( $user->getOption( 'cols' ) ),
+                               'rows' => intval( $user->getOption( 'rows' ) ) ),
+                               $content->getNativeData() . "\n" );
+
+                       $previewButton = Xml::element( 'input', array(
+                               'type' => 'submit',
+                               'name' => 'preview',
+                               'value' => $this->msg( 'showpreview' )->text() ) );
+               } else {
+                       $sourceView = '';
+                       $previewButton = '';
+               }
+
+               $diffButton = Xml::element( 'input', array(
+                       'name' => 'diff',
+                       'type' => 'submit',
+                       'value' => $this->msg( 'showdiff' )->text() ) );
+
                $out->addHTML(
-                       Xml::element( 'textarea', array(
-                                       'readonly' => 'readonly',
-                                       'cols' => intval( $user->getOption( 'cols' ) ),
-                                       'rows' => intval( $user->getOption( 'rows' ) ) ),
-                               $rev->getText( Revision::FOR_THIS_USER, $user ) . "\n" ) .
-                       Xml::openElement( 'div' ) .
+                       $sourceView .
+                       Xml::openElement( 'div', array(
+                               'style' => 'clear: both' ) ) .
                        Xml::openElement( 'form', array(
                                'method' => 'post',
                                'action' => $this->getTitle()->getLocalURL( array( 'action' => 'submit' ) ) ) ) .
@@ -881,14 +984,8 @@ class SpecialUndelete extends SpecialPage {
                                'type' => 'hidden',
                                'name' => 'wpEditToken',
                                'value' => $user->getEditToken() ) ) .
-                       Xml::element( 'input', array(
-                               'type' => 'submit',
-                               'name' => 'preview',
-                               'value' => $this->msg( 'showpreview' )->text() ) ) .
-                       Xml::element( 'input', array(
-                               'name' => 'diff',
-                               'type' => 'submit',
-                               'value' => $this->msg( 'showdiff' )->text() ) ) .
+                       $previewButton .
+                       $diffButton .
                        Xml::closeElement( 'form' ) .
                        Xml::closeElement( 'div' ) );
        }
@@ -902,26 +999,30 @@ class SpecialUndelete extends SpecialPage {
         * @return String: HTML
         */
        function showDiff( $previousRev, $currentRev ) {
-               $diffEngine = new DifferenceEngine( $this->getContext() );
+               $diffContext = clone $this->getContext();
+               $diffContext->setTitle( $currentRev->getTitle() );
+               $diffContext->setWikiPage( WikiPage::factory( $currentRev->getTitle() ) );
+
+               $diffEngine = $currentRev->getContentHandler()->createDifferenceEngine( $diffContext );
                $diffEngine->showDiffStyle();
                $this->getOutput()->addHTML(
                        "<div>" .
-                       "<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>" .
+                       "<table style='width: 98%;' cellpadding='0' cellspacing='4' class='diff'>" .
                        "<col class='diff-marker' />" .
                        "<col class='diff-content' />" .
                        "<col class='diff-marker' />" .
                        "<col class='diff-content' />" .
                        "<tr>" .
-                               "<td colspan='2' width='50%' align='center' class='diff-otitle'>" .
+                               "<td colspan='2' style='width: 50%; text-align: center' class='diff-otitle'>" .
                                $this->diffHeader( $previousRev, 'o' ) .
                                "</td>\n" .
-                               "<td colspan='2' width='50%' align='center' class='diff-ntitle'>" .
+                               "<td colspan='2' style='width: 50%;  text-align: center' class='diff-ntitle'>" .
                                $this->diffHeader( $currentRev, 'n' ) .
                                "</td>\n" .
                        "</tr>" .
-                       $diffEngine->generateDiffBody(
-                               $previousRev->getText( Revision::FOR_THIS_USER, $this->getUser() ),
-                               $currentRev->getText( Revision::FOR_THIS_USER, $this->getUser() ) ) .
+                       $diffEngine->generateContentDiffBody(
+                               $previousRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ),
+                               $currentRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ) ) .
                        "</table>" .
                        "</div>\n"
                );
@@ -1178,7 +1279,10 @@ class SpecialUndelete extends SpecialPage {
 
        private function formatRevisionRow( $row, $earliestLiveTime, $remaining ) {
                $rev = Revision::newFromArchiveRow( $row,
-                       array( 'page' => $this->mTargetObj->getArticleID() ) );
+                       array(
+                               'title' => $this->mTargetObj
+                       ) );
+
                $revTextSize = '';
                $ts = wfTimestamp( TS_MW, $row->ar_timestamp );
                // Build checkboxen...
@@ -1415,11 +1519,15 @@ class SpecialUndelete extends SpecialPage {
                        $out->addHTML( $this->msg( 'undeletedpage' )->rawParams( $link )->parse() );
                } else {
                        $out->setPageTitle( $this->msg( 'undelete-error' ) );
-                       $out->addWikiMsg( 'cannotundelete' );
-                       $out->addWikiMsg( 'undeleterevdel' );
                }
 
-               // Show file deletion warnings and errors
+               // Show revision undeletion warnings and errors
+               $status = $archive->getRevisionStatus();
+               if( $status && !$status->isGood() ) {
+                       $out->addWikiText( '<div class="error">' . $status->getWikiText( 'cannotundelete', 'cannotundelete' ) . '</div>' );
+               }
+
+               // Show file undeletion warnings and errors
                $status = $archive->getFileStatus();
                if( $status && !$status->isGood() ) {
                        $out->addWikiText( '<div class="error">' . $status->getWikiText( 'undelete-error-short', 'undelete-error-long' ) . '</div>' );
index 1bd38e1..69c42d5 100644 (file)
@@ -26,7 +26,9 @@
  */
 class UnusedCategoriesPage extends QueryPage {
 
-       function isExpensive() { return true; }
+       function isExpensive() {
+               return true;
+       }
 
        function __construct( $name = 'Unusedcategories' ) {
                parent::__construct( $name );
index 06077d1..fe79731 100644 (file)
@@ -35,9 +35,17 @@ class UnusedtemplatesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index e5a7941..d397149 100644 (file)
@@ -35,8 +35,13 @@ class UnwatchedpagesPage extends QueryPage {
                parent::__construct( $name, 'unwatchedpages' );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
@@ -54,7 +59,9 @@ class UnwatchedpagesPage extends QueryPage {
                );
        }
 
-       function sortDescending() { return false; }
+       function sortDescending() {
+               return false;
+       }
 
        function getOrderFields() {
                return array( 'page_namespace', 'page_title' );
index d1a9b16..a15fdd2 100644 (file)
@@ -525,6 +525,7 @@ class SpecialUpload extends SpecialPage {
         * Provides output to the user for a result of UploadBase::verifyUpload
         *
         * @param $details Array: result of UploadBase::verifyUpload
+        * @throws MWException
         */
        protected function processVerificationError( $details ) {
                global $wgFileExtensions;
@@ -702,21 +703,18 @@ class SpecialUpload extends SpecialPage {
         * @return string
         */
        public static function getDupeWarning( $dupes ) {
-               global $wgOut;
-               if( $dupes ) {
-                       $msg = '<gallery>';
-                       foreach( $dupes as $file ) {
-                               $title = $file->getTitle();
-                               $msg .= $title->getPrefixedText() .
-                                       '|' . $title->getText() . "\n";
-                       }
-                       $msg .= '</gallery>';
-                       return '<li>' .
-                               wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
-                               $wgOut->parse( $msg ) . "</li>\n";
-               } else {
+               if ( !$dupes ) {
                        return '';
                }
+
+               $gallery = new ImageGallery;
+               $gallery->setShowBytes( false );
+               foreach( $dupes as $file ) {
+                       $gallery->add( $file->getTitle() );
+               }
+               return '<li>' .
+                       wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
+                       $gallery->toHtml() . "</li>\n";
        }
 
 }
index 1a00d73..6353b1c 100644 (file)
@@ -74,6 +74,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * n.b. Most sanity checking done in UploadStashLocalFile, so this is straightforward.
         *
         * @param $key String: the key of a particular requested file
+        * @throws HttpError
         * @return bool
         */
        public function showUpload( $key ) {
@@ -113,6 +114,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * application the transform parameters
         *
         * @param string $key
+        * @throws UploadStashBadPathException
         * @return array
         */
        private function parseKey( $key ) {
@@ -164,10 +166,11 @@ class SpecialUploadStash extends UnlistedSpecialPage {
 
        /**
         * Scale a file (probably with a locally installed imagemagick, or similar) and output it to STDOUT.
-        * @param $file: File object
-        * @param $params: scaling parameters ( e.g. array( width => '50' ) );
-        * @param $flags: scaling flags ( see File:: constants )
+        * @param $file File
+        * @param $params array Scaling parameters ( e.g. array( width => '50' ) );
+        * @param $flags int Scaling flags ( see File:: constants )
         * @throws MWException
+        * @throws UploadStashFileNotFoundException
         * @return boolean success
         */
        private function outputLocallyScaledThumb( $file, $params, $flags ) {
@@ -258,6 +261,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * Side effect: writes HTTP response to STDOUT.
         *
         * @param $file File object with a local path (e.g. UnregisteredLocalFile, LocalFile. Oddly these don't share an ancestor!)
+        * @throws SpecialUploadStashTooLargeException
         * @return bool
         */
        private function outputLocalFile( File $file ) {
@@ -275,6 +279,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * Side effect: writes HTTP response to STDOUT.
         * @param $content String content
         * @param $contentType String mime type
+        * @throws SpecialUploadStashTooLargeException
         * @return bool
         */
        private function outputContents( $content, $contentType ) {
index c101897..0e0b712 100644 (file)
@@ -149,6 +149,23 @@ class LoginForm extends SpecialPage {
                $this->load();
                $this->setHeaders();
 
+               global $wgSecureLogin;
+               if (
+                       $this->mType !== 'signup' &&
+                       $wgSecureLogin &&
+                       WebRequest::detectProtocol() !== 'https'
+               ) {
+                       $title = $this->getFullTitle();
+                       $query = array(
+                               'returnto' => $this->mReturnTo,
+                               'returntoquery' => $this->mReturnToQuery,
+                               'wpStickHTTPS' => $this->mStickHTTPS
+                       );
+                       $url = $title->getFullURL( $query, false, PROTO_HTTPS );
+                       $this->getOutput()->redirect( $url );
+                       return;
+               }
+
                if ( $par == 'signup' ) { # Check for [[Special:Userlogin/signup]]
                        $this->mType = 'signup';
                }
@@ -269,6 +286,7 @@ class LoginForm extends SpecialPage {
 
        /**
         * @private
+        * @throws PermissionsError|ReadOnlyError
         * @return bool|User
         */
        function addNewAccountInternal() {
@@ -464,8 +482,7 @@ class LoginForm extends SpecialPage {
                $u->saveSettings();
 
                # Update user count
-               $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
-               $ssUpdate->doUpdate();
+               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
 
                return $u;
        }
@@ -722,6 +739,7 @@ class LoginForm extends SpecialPage {
 
                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' ) ) {
@@ -730,7 +748,12 @@ class LoginForm extends SpecialPage {
                                } else {
                                        $user->invalidateCache();
                                }
-                               $user->setCookies();
+
+                               if( $wgSecureLogin && !$this->mStickHTTPS ) {
+                                       $user->setCookies( null, false );
+                               } else {
+                                       $user->setCookies();
+                               }
                                self::clearLoginToken();
 
                                // Reset the throttle
@@ -833,7 +856,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, '<' . $wgServer . $wgScript . '>',
                        round( $wgNewPasswordExpiry / 86400 ) )->inLanguage( $userLanguage )->text();
                $result = $u->sendMail( $this->msg( $emailTitle )->inLanguage( $userLanguage )->text(), $m );
 
@@ -963,14 +986,22 @@ class LoginForm extends SpecialPage {
                        $returnToTitle = Title::newMainPage();
                }
 
+               if ( $wgSecureLogin && !$this->mStickHTTPS ) {
+                       $options = array( 'http' );
+                       $proto = PROTO_HTTP;
+               } elseif( $wgSecureLogin ) {
+                       $options = array( 'https' );
+                       $proto = PROTO_HTTPS;
+               } else {
+                       $options = array();
+                       $proto = PROTO_RELATIVE;
+               }
+
                if ( $type == 'successredirect' ) {
-                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery );
-                       if( $wgSecureLogin && !$this->mStickHTTPS ) {
-                               $redirectUrl = preg_replace( '/^https:/', 'http:', $redirectUrl );
-                       }
+                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery, false, $proto );
                        $this->getOutput()->redirect( $redirectUrl );
                } else {
-                       $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery );
+                       $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery, null, $options );
                }
        }
 
index ab2bf0a..4be36c6 100644 (file)
@@ -49,8 +49,11 @@ class SpecialUserlogout extends UnlistedSpecialPage {
                $oldName = $user->getName();
                $user->logout();
 
+               $loginURL = SpecialPage::getTitleFor( 'Userlogin' )->getFullURL(
+                       $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+
                $out = $this->getOutput();
-               $out->addWikiMsg( 'logouttext' );
+               $out->addWikiMsg( 'logouttext', $loginURL );
 
                // Hook.
                $injected_html = '';
index 59d983f..56ae302 100644 (file)
@@ -62,6 +62,7 @@ class UserrightsPage extends SpecialPage {
         * Depending on the submit button used, call a form or a save function.
         *
         * @param $par Mixed: string if any subpage provided, else null
+        * @throws UserBlockedError|PermissionsError
         */
        public function execute( $par ) {
                // If the visitor doesn't have permissions to assign or remove
@@ -449,7 +450,7 @@ class UserrightsPage extends SpecialPage {
                        $this->msg( 'userrights-groups-help', $user->getName() )->parse() .
                        $grouplist .
                        Xml::tags( 'p', null, $this->groupCheckboxes( $groups, $user ) ) .
-                       Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-userrights-table-outer' ) ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-userrights-table-outer' ) ) .
                                "<tr>
                                        <td class='mw-label'>" .
                                                Xml::label( $this->msg( 'userrights-reason' )->text(), 'wpReason' ) .
@@ -534,7 +535,7 @@ class UserrightsPage extends SpecialPage {
                }
 
                # Build the HTML table
-               $ret .= Xml::openElement( 'table', array( 'border' => '0', 'class' => 'mw-userrights-groups' ) ) .
+               $ret .= Xml::openElement( 'table', array( 'class' => 'mw-userrights-groups' ) ) .
                        "<tr>\n";
                foreach( $columns as $name => $column ) {
                        if( $column === array() )
index fbc2c93..4e5b6bf 100644 (file)
@@ -83,7 +83,7 @@ class SpecialVersion extends SpecialPage {
                $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMessage( 'version-license' )->text() );
 
                // This text is always left-to-right.
-               $ret .= '<div>';
+               $ret .= '<div class="plainlinks">';
                $ret .= "__NOTOC__
                " . self::getCopyrightAndAuthorList() . "\n
                " . wfMessage( 'version-license-info' )->text();
@@ -109,7 +109,9 @@ class SpecialVersion extends SpecialPage {
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
                        'Timo Tijhof',
-                       wfMessage( 'version-poweredby-others' )->text()
+                       '[{{SERVER}}{{SCRIPTPATH}}/CREDITS ' .
+                       wfMessage( 'version-poweredby-others' )->text() .
+                       ']'
                );
 
                return wfMessage( 'version-poweredby-credits', date( 'Y' ),
@@ -136,7 +138,7 @@ class SpecialVersion extends SpecialPage {
                wfRunHooks( 'SoftwareInfo', array( &$software ) );
 
                $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) .
-                          Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-software' ) ) .
+                          Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) .
                                "<tr>
                                        <th>" . wfMessage( 'version-software-product' )->text() . "</th>
                                        <th>" . wfMessage( 'version-software-version' )->text() . "</th>
@@ -327,7 +329,7 @@ class SpecialVersion extends SpecialPage {
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
                $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), $this->msg( 'version-extensions' )->text() ) .
-                       Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-ext' ) );
+                       Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-ext' ) );
 
                // Make sure the 'other' type is set to an array.
                if ( !array_key_exists( 'other', $wgExtensionCredits ) ) {
@@ -760,7 +762,7 @@ class SpecialVersion extends SpecialPage {
                );
 
                $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), $this->msg( 'version-entrypoints' )->text() ) .
-                       Html::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'mw-version-entrypoints-table' ) ) .
+                       Html::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'mw-version-entrypoints-table' ) ) .
                        Html::openElement( 'tr' ) .
                        Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) .
                        Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-url' )->text() ) .
index 7673305..dec123d 100644 (file)
@@ -30,7 +30,10 @@ class WantedPagesPage extends WantedQueryPage {
        
        function __construct( $name = 'Wantedpages' ) {
                parent::__construct( $name );
-               $this->mIncludable = true;
+       }
+
+       function isIncludable() {
+               return true;
        }
 
        function execute( $par ) {
index 5d6a112..f135649 100644 (file)
@@ -163,7 +163,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                        'rd_from = page_id',
                        'rd_namespace' => $target->getNamespace(),
                        'rd_title' => $target->getDBkey(),
-                       '(rd_interwiki is NULL) or (rd_interwiki = \'\')'
+                       'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL'
                )));
 
                if( $fetchlinks ) {
index a3f6a38..182992a 100644 (file)
@@ -25,8 +25,6 @@
  * @defgroup Templates Templates
  */
 
-if( !defined( 'MEDIAWIKI' ) ) die( -1 );
-
 /**
  * HTML template for Special:Userlogin form
  * @ingroup Templates
index 479083e..aa333fc 100644 (file)
@@ -16,4 +16,4 @@ quiet: yes
 quote-nbsp: yes
 fix-backslash: no
 fix-uri: no
-new-inline-tags: video,audio,source,track
+new-inline-tags: video,audio,source,track,bdi
index 54a68af..b0e5fb6 100644 (file)
@@ -61,35 +61,35 @@ class UploadFromChunks extends UploadFromFile {
                return true;
        }
        /**
-        * Calls the parent stashFile and updates the uploadsession table to handle "chunks" 
+        * Calls the parent stashFile and updates the uploadsession table to handle "chunks"
         *
         * @return UploadStashFile stashed file
         */
        public function stashFile() {
-               // Stash file is the called on creating a new chunk session: 
+               // Stash file is the called on creating a new chunk session:
                $this->mChunkIndex = 0;
                $this->mOffset = 0;
                // Create a local stash target
                $this->mLocalFile = parent::stashFile();
-               // Update the initial file offset ( based on file size ) 
+               // Update the initial file offset ( based on file size )
                $this->mOffset = $this->mLocalFile->getSize();
                $this->mFileKey = $this->mLocalFile->getFileKey();
 
                // Output a copy of this first to chunk 0 location:
-               $status = $this->outputChunk( $this->mLocalFile->getPath() );
+               $this->outputChunk( $this->mLocalFile->getPath() );
 
-               // Update db table to reflect initial "chunk" state 
+               // Update db table to reflect initial "chunk" state
                $this->updateChunkStatus();
                return $this->mLocalFile;
        }
 
        /**
         * Continue chunk uploading
-        */     
+        */
        public function continueChunks( $name, $key, $webRequestUpload ) {
                $this->mFileKey = $key;
                $this->mUpload = $webRequestUpload;
-               // Get the chunk status form the db: 
+               // Get the chunk status form the db:
                $this->getChunkStatus();
 
                $metadata = $this->stash->getMetadata( $key );
@@ -105,7 +105,7 @@ class UploadFromChunks extends UploadFromFile {
         * @return FileRepoStatus
         */
        public function concatenateChunks() {
-               wfDebug( __METHOD__ . " concatenate {$this->mChunkIndex} chunks:" . 
+               wfDebug( __METHOD__ . " concatenate {$this->mChunkIndex} chunks:" .
                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                // Concatenate all the chunks to mVirtualTempPath
@@ -125,10 +125,10 @@ class UploadFromChunks extends UploadFromFile {
                // Concatenate the chunks at the temp file
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
                if( !$status->isOk() ){
-                       return $status; 
+                       return $status;
                }
                // Update the mTempPath and mLocalFile
-               // ( for FileUpload or normal Stash to take over )  
+               // ( for FileUpload or normal Stash to take over )
                $this->mTempPath = $tmpPath; // file system path
                $this->mLocalFile = parent::stashFile();
 
@@ -149,16 +149,16 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Returns the virtual chunk location:  
+        * Returns the virtual chunk location:
         * @param $index
         * @return string
         */
        function getVirtualChunkLocation( $index ){
-               return $this->repo->getVirtualUrl( 'temp' ) . 
+               return $this->repo->getVirtualUrl( 'temp' ) .
                                '/' .
-                               $this->repo->getHashPath( 
+                               $this->repo->getHashPath(
                                        $this->getChunkFileKey( $index )
-                               ) . 
+                               ) .
                                $this->getChunkFileKey( $index );
        }
 
@@ -173,20 +173,20 @@ class UploadFromChunks extends UploadFromFile {
        public function addChunk( $chunkPath, $chunkSize, $offset ) {
                // Get the offset before we add the chunk to the file system
                $preAppendOffset = $this->getOffset();
-               
+
                if ( $preAppendOffset + $chunkSize > $this->getMaxUploadSize()) {
                        $status = Status::newFatal( 'file-too-large' );
                } else {
                        // Make sure the client is uploading the correct chunk with a matching offset.
                        if ( $preAppendOffset == $offset ) {
-                               // Update local chunk index for the current chunk   
+                               // Update local chunk index for the current chunk
                                $this->mChunkIndex++;
                                $status = $this->outputChunk( $chunkPath );
                                if( $status->isGood() ){
-                                       // Update local offset: 
+                                       // Update local offset:
                                        $this->mOffset = $preAppendOffset + $chunkSize;
-                                       // Update chunk table status db         
-                                       $this->updateChunkStatus();             
+                                       // Update chunk table status db
+                                       $this->updateChunkStatus();
                                }
                        } else {
                                $status = Status::newFatal( 'invalid-chunk-offset' );
@@ -196,16 +196,16 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Update the chunk db table with the current status: 
+        * Update the chunk db table with the current status:
         */
        private function updateChunkStatus(){
-               wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" . 
+               wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" .
                                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                $dbw = $this->repo->getMasterDb();
                $dbw->update(
                        'uploadstash',
-                       array( 
+                       array(
                                'us_status' => 'chunks',
                                'us_chunk_inx' => $this->getChunkIndex(),
                                'us_size' => $this->getOffset()
@@ -219,12 +219,12 @@ class UploadFromChunks extends UploadFromFile {
         * Get the chunk db state and populate update relevant local values
         */
        private function getChunkStatus(){
-               // get Master db to avoid race conditions. 
+               // get Master db to avoid race conditions.
                // Otherwise, if chunk upload time < replag there will be spurious errors
                $dbw = $this->repo->getMasterDb();
                $row = $dbw->selectRow(
-                       'uploadstash', 
-                       array( 
+                       'uploadstash',
+                       array(
                                'us_chunk_inx',
                                'us_size',
                                'us_path',
@@ -241,7 +241,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Get the current Chunk index 
+        * Get the current Chunk index
         * @return Integer index of the current chunk
         */
        private function getChunkIndex(){
@@ -252,8 +252,8 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Gets the current offset in fromt the stashedupload table 
-        * @return Integer current byte offset of the chunk file set 
+        * Gets the current offset in fromt the stashedupload table
+        * @return Integer current byte offset of the chunk file set
         */
        private function getOffset(){
                if ( $this->mOffset !== null ){
@@ -272,11 +272,12 @@ class UploadFromChunks extends UploadFromFile {
        private function outputChunk( $chunkPath ){
                // Key is fileKey + chunk index
                $fileKey = $this->getChunkFileKey();
-               
-               // Store the chunk per its indexed fileKey: 
+
+               // Store the chunk per its indexed fileKey:
                $hashPath = $this->repo->getHashPath( $fileKey );
-               $storeStatus = $this->repo->store( $chunkPath, 'temp', "$hashPath$fileKey" );
-               
+               $storeStatus = $this->repo->quickImport( $chunkPath,
+                       $this->repo->getZonePath( 'temp' ) . "/{$hashPath}{$fileKey}" );
+
                // Check for error in stashing the chunk:
                if ( ! $storeStatus->isOK() ) {
                        $error = $storeStatus->getErrorsArray();
index fdd2b1a..7f430c5 100644 (file)
@@ -61,6 +61,8 @@ class UploadFromUrl extends UploadBase {
 
        /**
         * Checks whether the URL is for an allowed host
+        * The domains in the whitelist can include wildcard characters (*) in place
+        * of any of the domain levels, e.g. '*.flickr.com' or 'upload.*.gov.uk'.
         *
         * @param $url string
         * @return bool
@@ -70,17 +72,34 @@ class UploadFromUrl extends UploadBase {
                if ( !count( $wgCopyUploadsDomains ) ) {
                        return true;
                }
-               $uri = new Uri( $url );
-               $parsedDomain = $uri->getHost();
-               if ( $parsedDomain === null ) {
+               $parsedUrl = wfParseUrl( $url );
+               if ( !$parsedUrl ) {
                        return false;
                }
                $valid = false;
                foreach( $wgCopyUploadsDomains as $domain ) {
-                       if ( $parsedDomain === $domain ) {
+                       // See if the domain for the upload matches this whitelisted domain
+                       $whitelistedDomainPieces = explode( '.', $domain );
+                       $uploadDomainPieces = explode( '.', $parsedUrl['host'] );
+                       if ( count( $whitelistedDomainPieces ) === count( $uploadDomainPieces ) ) {
+                               $valid = true;
+                               // See if all the pieces match or not (excluding wildcards)
+                               foreach ( $whitelistedDomainPieces as $index => $piece ) {
+                                       if ( $piece !== '*' && $piece !== $uploadDomainPieces[$index] ) {
+                                               $valid = false;
+                                       }
+                               }
+                               if ( $valid ) {
+                                       // We found a match, so quit comparing against the list
+                                       break;
+                               }
+                       }
+                       /* Non-wildcard test
+                       if ( $parsedUrl['host'] === $domain ) {
                                $valid = true;
                                break;
                        }
+                       */
                }
                return $valid;
        }
@@ -208,9 +227,14 @@ class UploadFromUrl extends UploadBase {
                $this->mRemoveTempFile = true;
                $this->mFileSize = 0;
 
-               $req = MWHttpRequest::factory( $this->mUrl, array(
+               $options = array(
                        'followRedirects' => true
-               ) );
+               );
+               global $wgCopyUploadProxy;
+               if ( $wgCopyUploadProxy !== false ) {
+                       $options['proxy'] = $wgCopyUploadProxy;
+               }
+               $req = MWHttpRequest::factory( $this->mUrl, $options );
                $req->setCallback( array( $this, 'saveTempFileChunk' ) );
                $status = $req->execute();
 
index aa65ffe..560acde 100644 (file)
@@ -319,8 +319,8 @@ class UploadStash {
        /**
         * Remove a particular file from the stash.  Also removes it from the repo.
         *
-        * @throws UploadStashNotLoggedInException
-        * @throws UploadStashWrongOwnerException
+        * @param $key
+        * @throws UploadStashNoSuchKeyException|UploadStashNotLoggedInException|UploadStashWrongOwnerException
         * @return boolean: success
         */
        public function removeFile( $key ) {
@@ -361,14 +361,11 @@ class UploadStash {
 
                $dbw = $this->repo->getMasterDb();
 
-               // this gets its own transaction since it's called serially by the cleanupUploadStash maintenance script
-               $dbw->begin( __METHOD__ );
                $dbw->delete(
                        'uploadstash',
                        array( 'us_key' => $key ),
                        __METHOD__
                );
-               $dbw->commit( __METHOD__ );
 
                // TODO: look into UnregisteredLocalFile and find out why the rv here is sometimes wrong (false when file was removed)
                // for now, ignore.
@@ -419,6 +416,8 @@ class UploadStash {
         * with an extension.
         * XXX this is somewhat redundant with the checks that ApiUpload.php does with incoming
         * uploads versus the desired filename. Maybe we can get that passed to us...
+        * @param $path
+        * @throws UploadStashFileException
         * @return string
         */
        public static function getExtensionForPath( $path ) {
@@ -572,9 +571,10 @@ class UploadStashFile extends UnregisteredLocalFile {
         * ugly file name.
         *
         * @param $params Array: handler-specific parameters
+        * @param $flags integer Bitfield that supports THUMB_* constants
         * @return String: base name for URL, like '120px-12345.jpg', or null if there is no handler
         */
-       function thumbName( $params ) {
+       function thumbName( $params, $flags = 0 ) {
                return $this->generateThumbName( $this->getUrlName(), $params );
        }
 
index 2bb53ab..fd603ce 100755 (executable)
@@ -31,7 +31,7 @@ def unichr3( *args ):
 
 # DEFINE
 UNIHAN_VER = '5.2.0'
-SF_MIRROR = 'cdnetworks-kr-2'
+SF_MIRROR = 'dfn'
 SCIM_TABLES_VER = '0.5.10'
 SCIM_PINYIN_VER = '0.5.91'
 LIBTABE_VER = '0.2.3'
@@ -370,7 +370,7 @@ $zh2Hant = array(\n'''
         +  PHPArray( toCN ) \
         +  '\n);\n\n$zh2SG = array(\n' \
         +  PHPArray( toSG ) \
-        +  '\n);'
+        +  '\n);\n'
     
     f = open( os.path.join( '..', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
     print ('Writing ZhConversion.php ... ')
index 2ebb750..1f7fe7d 100644 (file)
 分布于      分佈於
 分布於      分佈於
 想象 想像
+無線電視   無綫電視
+无线电视   無綫電視
+無線收費   無綫收費
+无线收费   無綫收費
+無線節目   無綫節目
+无线节目   無綫節目
+無線劇集   無綫劇集
+无线剧集   無綫劇集
+東鐵線      東鐵綫
+东铁线      東鐵綫
+觀塘線      觀塘綫
+观塘线      觀塘綫
+荃灣線      荃灣綫
+荃湾线      荃灣綫
+港島線      港島綫
+港岛线      港島綫
+東涌線      東涌綫
+东涌线      東涌綫
+將軍澳線   將軍澳綫
+将军澳线   將軍澳綫
+西鐵線      西鐵綫
+西铁线      西鐵綫
+馬鞍山線   馬鞍山綫
+马鞍山线   馬鞍山綫
+迪士尼線   迪士尼綫
+迪士尼线   迪士尼綫
+沙田至中環線     沙田至中環綫
+沙田至中环线     沙田至中環綫
+沙中線      沙中綫
+沙中线      沙中綫
+北環線      北環綫
+北环线      北環綫
+機場快線   機場快綫
+机场快线   機場快綫
+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綫
index 35b6268..1a14e99 100644 (file)
 想象 想像
 锎    鉲
 信道 信道
+綫    線
index 9a9534f..e20ca05 100644 (file)
 一個準
 準擬
 準貨幣
+準軍事
 準式
 認準
 三準
index 2010878..0e9676d 100644 (file)
--- a/index.php
+++ b/index.php
@@ -41,6 +41,7 @@
 # PHP 4. Setup.php and ObjectCache.php have structures invalid in PHP 5.0 and
 # 5.1, respectively.
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'index.php' );
 }
@@ -51,7 +52,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 $mediaWiki = new MediaWiki();
index ae66d7c..c4807a6 100644 (file)
@@ -32,7 +32,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 
 # Read language names
 global $wgLanguageNames;
-require_once( dirname( __FILE__ ) . '/Names.php' );
+require_once( __DIR__ . '/Names.php' );
 
 if ( function_exists( 'mb_strtoupper' ) ) {
        mb_internal_encoding( 'UTF-8' );
@@ -48,12 +48,13 @@ class FakeConverter {
        /**
         * @var Language
         */
-       var $mLang;
+       public $mLang;
        function __construct( $langobj ) { $this->mLang = $langobj; }
        function autoConvertToAllVariants( $text ) { return array( $this->mLang->getCode() => $text ); }
        function convert( $t ) { return $t; }
        function convertTo( $text, $variant ) { return $text; }
        function convertTitle( $t ) { return $t->getPrefixedText(); }
+       function convertNamespace( $ns ) { return $this->mLang->getFormattedNsText( $ns ); }
        function getVariants() { return array( $this->mLang->getCode() ); }
        function getPreferredVariant() { return $this->mLang->getCode(); }
        function getDefaultVariant() { return $this->mLang->getCode(); }
@@ -77,21 +78,21 @@ class Language {
        /**
         * @var LanguageConverter
         */
-       var $mConverter;
+       public $mConverter;
 
-       var $mVariants, $mCode, $mLoaded = false;
-       var $mMagicExtensions = array(), $mMagicHookDone = false;
+       public $mVariants, $mCode, $mLoaded = false;
+       public $mMagicExtensions = array(), $mMagicHookDone = false;
        private $mHtmlCode = null;
 
-       var $dateFormatStrings = array();
-       var $mExtendedSpecialPageAliases;
+       public $dateFormatStrings = array();
+       public $mExtendedSpecialPageAliases;
 
        protected $namespaceNames, $mNamespaceIds, $namespaceAliases;
 
        /**
         * ReplacementArray object caches
         */
-       var $transformData = array();
+       public $transformData = array();
 
        /**
         * @var LocalisationCache
@@ -266,9 +267,9 @@ class Language {
         */
        public static function isValidBuiltInCode( $code ) {
 
-               if( !is_string($code) ) {
+               if ( !is_string( $code ) ) {
                        $type = gettype( $code );
-                       if( $type === 'object' ) {
+                       if ( $type === 'object' ) {
                                $addmsg = " of class " . get_class( $code );
                        } else {
                                $addmsg = '';
@@ -356,7 +357,7 @@ class Language {
         * @deprecated in 1.19
         */
        function getFallbackLanguageCode() {
-               wfDeprecated( __METHOD__ );
+               wfDeprecated( __METHOD__, '1.19' );
                return self::getFallbackFor( $this->mCode );
        }
 
@@ -419,6 +420,16 @@ class Language {
         */
        public function setNamespaces( array $namespaces ) {
                $this->namespaceNames = $namespaces;
+               $this->mNamespaceIds = null;
+       }
+
+       /**
+        * Resets all of the namespace caches. Mainly used for testing
+        */
+       public function resetNamespaces( ) {
+               $this->namespaceNames = null;
+               $this->mNamespaceIds = null;
+               $this->namespaceAliases = null;
        }
 
        /**
@@ -742,7 +753,7 @@ class Language {
 
                $names = array();
 
-               if( $inLanguage ) {
+               if ( $inLanguage ) {
                        # TODO: also include when $inLanguage is null, when this code is more efficient
                        wfRunHooks( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
                }
@@ -762,11 +773,11 @@ class Language {
 
                $returnMw = array();
                $coreCodes = array_keys( $mwNames );
-               foreach( $coreCodes as $coreCode ) {
+               foreach ( $coreCodes as $coreCode ) {
                        $returnMw[$coreCode] = $names[$coreCode];
                }
 
-               if( $include === 'mwfile' ) {
+               if ( $include === 'mwfile' ) {
                        $namesMwFile = array();
                        # We do this using a foreach over the codes instead of a directory
                        # loop so that messages files in extensions will work correctly.
@@ -3005,7 +3016,7 @@ class Language {
        function listToText( array $l ) {
                $s = '';
                $m = count( $l ) - 1;
-               
+
                if ( $m === 0 ) {
                        return $l[0];
                } elseif ( $m === 1 ) {
@@ -3409,9 +3420,21 @@ class Language {
                if ( !count( $forms ) ) {
                        return '';
                }
-               $forms = $this->preConvertPlural( $forms, 2 );
 
-               return ( $count == 1 ) ? $forms[0] : $forms[1];
+               // Handle explicit 0= and 1= forms
+               foreach ( $forms as $index => $form ) {
+                       if ( isset( $form[1] ) && $form[1] === '=' ) {
+                               if ( $form[0] === (string) $count ) {
+                                       return substr( $form, 2 );
+                               }
+                               unset( $forms[$index] );
+                       }
+               }
+               $forms = array_values( $forms );
+
+               $pluralForm = $this->getPluralForm( $count );
+               $pluralForm = min( $pluralForm, count( $forms ) - 1 );
+               return $forms[$pluralForm];
        }
 
        /**
@@ -3524,6 +3547,16 @@ class Language {
                return $this->mConverter->convertTitle( $title );
        }
 
+       /**
+        * Convert a namespace index to a string in the preferred variant
+        *
+        * @param $ns int
+        * @return string
+        */
+       public function convertNamespace( $ns ) {
+               return $this->mConverter->convertNamespace( $ns );
+       }
+
        /**
         * Check if this is a language with variants
         *
@@ -4180,4 +4213,54 @@ class Language {
        public function getConvRuleTitle() {
                return $this->mConverter->getConvRuleTitle();
        }
+
+       /**
+        * Get the compiled plural rules for the language
+        * @since 1.20
+        * @return array Associative array with plural form, and plural rule as key-value pairs
+        */
+       public function getCompiledPluralRules() {
+               $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'compiledPluralRules' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRules ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRules = self::$dataCache->getItem( strtolower( $fallbackCode ), 'compiledPluralRules' );
+                               if ( $pluralRules ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRules;
+       }
+
+       /**
+        * Get the plural rules for the language
+        * @since 1.20
+        * @return array Associative array with plural form, and plural rule as key-value pairs
+        */
+       public function getPluralRules() {
+               $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRules ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRules = self::$dataCache->getItem( strtolower( $fallbackCode ), 'pluralRules' );
+                               if ( $pluralRules ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRules;
+       }
+
+       /**
+        * Find the plural form matching to the given number
+        * It return the form index.
+        * @return int The index of the plural form
+        */
+       private function getPluralForm( $number ) {
+               $pluralRules = $this->getCompiledPluralRules();
+               $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
+               return $form;
+       }
+
 }
index fe670e1..09e850e 100644 (file)
@@ -47,28 +47,28 @@ class LanguageConverter {
                'zh',
        );
 
-       var $mMainLanguageCode;
-       var $mVariants, $mVariantFallbacks, $mVariantNames;
-       var $mTablesLoaded = false;
-       var $mTables;
+       public $mMainLanguageCode;
+       public $mVariants, $mVariantFallbacks, $mVariantNames;
+       public $mTablesLoaded = false;
+       public $mTables;
        // 'bidirectional' 'unidirectional' 'disable' for each variant
-       var $mManualLevel;
+       public $mManualLevel;
 
        /**
         * @var String: memcached key name
         */
-       var $mCacheKey;
-
-       var $mLangObj;
-       var $mFlags;
-       var $mDescCodeSep = ':', $mDescVarSep = ';';
-       var $mUcfirst = false;
-       var $mConvRuleTitle = false;
-       var $mURLVariant;
-       var $mUserVariant;
-       var $mHeaderVariant;
-       var $mMaxDepth = 10;
-       var $mVarSeparatorPattern;
+       public $mCacheKey;
+
+       public $mLangObj;
+       public $mFlags;
+       public $mDescCodeSep = ':', $mDescVarSep = ';';
+       public $mUcfirst = false;
+       public $mConvRuleTitle = false;
+       public $mURLVariant;
+       public $mUserVariant;
+       public $mHeaderVariant;
+       public $mMaxDepth = 10;
+       public $mVarSeparatorPattern;
 
        const CACHE_VERSION_KEY = 'VERSION 6';
 
@@ -184,7 +184,7 @@ class LanguageConverter {
 
        /**
         * Get default variant.
-        * This function would not be affected by user's settings or headers
+        * This function would not be affected by user's settings
         * @return String: the default variant code
         */
        public function getDefaultVariant() {
@@ -192,6 +192,10 @@ class LanguageConverter {
 
                $req = $this->getURLVariant();
 
+               if ( !$req ) {
+                       $req = $this->getHeaderVariant();
+               }
+
                if ( $wgDefaultLanguageVariant && !$req ) {
                        $req = $this->validateVariant( $wgDefaultLanguageVariant );
                }
@@ -295,7 +299,7 @@ class LanguageConverter {
                        // We record these fallback variants, and process
                        // them later.
                        $fallbacks = $this->getVariantFallbacks( $language );
-                       if ( is_string( $fallbacks ) ) {
+                       if ( is_string( $fallbacks ) && $fallbacks !== $this->mMainLanguageCode ) {
                                $fallbackLanguages[] = $fallbacks;
                        } elseif ( is_array( $fallbacks ) ) {
                                $fallbackLanguages =
@@ -546,24 +550,41 @@ class LanguageConverter {
        public function convertTitle( $title ) {
                $variant = $this->getPreferredVariant();
                $index = $title->getNamespace();
-               if ( $index === NS_MAIN ) {
+               if ( $index !== NS_MAIN ) {
+                       $text = $this->convertNamespace( $index ) . ':';
+               } else {
                        $text = '';
+               }
+               $text .= $this->translate( $title->getText(), $variant );
+               return $text;
+       }
+
+       /**
+        * Get the namespace display name in the preferred variant.
+        *
+        * @param $index int namespace id
+        * @return String: namespace name for display
+        */
+       public function convertNamespace( $index ) {
+               $variant = $this->getPreferredVariant();
+               if ( $index === NS_MAIN ) {
+                       return '';
                } else {
-                       // first let's check if a message has given us a converted name
+                       // First check if a message gives a converted name in the target variant.
+                       $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inLanguage( $variant );
+                       if ( $nsConvMsg->exists() ) {
+                               return $nsConvMsg->plain();
+                       }
+                       // Then check if a message gives a converted name in content language
+                       // which needs extra translation to the target variant.
                        $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inContentLanguage();
                        if ( $nsConvMsg->exists() ) {
-                               $text = $nsConvMsg->plain();
-                       } else {
-                               // the message does not exist, try retrieve it from the current
-                               // variant's namespace names.
-                               $langObj = $this->mLangObj->factory( $variant );
-                               $text = $langObj->getFormattedNsText( $index );
+                               return $this->translate( $nsConvMsg->plain(), $variant );
                        }
-                       $text .= ':';
+                       // No message exists, retrieve it from the target variant's namespace names.
+                       $langObj = $this->mLangObj->factory( $variant );
+                       return $langObj->getFormattedNsText( $index );
                }
-               $text .= $title->getText();
-               $text = $this->translate( $text, $variant );
-               return $text;
        }
 
        /**
@@ -925,7 +946,11 @@ class LanguageConverter {
                        if ( $title && $title->exists() ) {
                                $revision = Revision::newFromTitle( $title );
                                if ( $revision ) {
-                                       $txt = $revision->getRawText();
+                                       if ( $revision->getContentModel() == CONTENT_MODEL_WIKITEXT ) {
+                                               $txt = $revision->getContent( Revision::RAW )->getNativeData();
+                                       }
+
+                                       //@todo: in the future, use a specialized content model, perhaps based on json!
                                }
                        }
                }
@@ -1035,9 +1060,9 @@ class LanguageConverter {
         * MediaWiki:Conversiontable* is updated.
         * @private
         *
-        * @param $article Article object
+        * @param $page WikiPage object
         * @param $user Object: User object for the current user
-        * @param $text String: article text (?)
+        * @param $content Content: new page content
         * @param $summary String: edit summary of the edit
         * @param $isMinor Boolean: was the edit marked as minor?
         * @param $isWatch Boolean: did the user watch this page or not?
@@ -1046,9 +1071,9 @@ class LanguageConverter {
         * @param $revision Object: new Revision object or null
         * @return Boolean: true
         */
-       function OnArticleSaveComplete( $article, $user, $text, $summary, $isMinor,
+       function OnArticleContentSaveComplete( $page, $user, $content, $summary, $isMinor,
                        $isWatch, $section, $flags, $revision ) {
-               $titleobj = $article->getTitle();
+               $titleobj = $page->getTitle();
                if ( $titleobj->getNamespace() == NS_MEDIAWIKI ) {
                        $title = $titleobj->getDBkey();
                        $t = explode( '/', $title, 3 );
@@ -1113,17 +1138,17 @@ class LanguageConverter {
  * @author fdcn <fdcn64@gmail.com>, PhiLiP <philip.npc@gmail.com>
  */
 class ConverterRule {
-       var $mText; // original text in -{text}-
-       var $mConverter; // LanguageConverter object
-       var $mRuleDisplay = '';
-       var $mRuleTitle = false;
-       var $mRules = '';// string : the text of the rules
-       var $mRulesAction = 'none';
-       var $mFlags = array();
-       var $mVariantFlags = array();
-       var $mConvTable = array();
-       var $mBidtable = array();// array of the translation in each variant
-       var $mUnidtable = array();// array of the translation in each variant
+       public $mText; // original text in -{text}-
+       public $mConverter; // LanguageConverter object
+       public $mRuleDisplay = '';
+       public $mRuleTitle = false;
+       public $mRules = '';// string : the text of the rules
+       public $mRulesAction = 'none';
+       public $mFlags = array();
+       public $mVariantFlags = array();
+       public $mConvTable = array();
+       public $mBidtable = array();// array of the translation in each variant
+       public $mUnidtable = array();// array of the translation in each variant
 
        /**
         * Constructor
index 8f158a4..da55c82 100644 (file)
   * These determine things like interwikis, language selectors, and so on.
   * Safe to change without running scripts on the respective sites.
   *
+  * \xE2\x80\x8E is the left-to-right marker and
+  * \xE2\x80\x8F is the right-to-left marker.
+  * They are required for ensuring the correct display of brackets in
+  * mixed rtl/ltr environment.
+  *
   * @ingroup Language
   */
 /* private */ $coreLanguageNames = array(
@@ -56,8 +61,8 @@
        'bcc' => 'بلوچی مکرانی', # Southern Balochi
        'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
        'be' => 'беларуская', #  Belarusian normative
-       'be-tarask' => "\xE2\x80\xAAбеларуская (тарашкевіца)\xE2\x80\xAC", # Belarusian in Taraskievica orthography
-       'be-x-old' => "\xE2\x80\xAAбеларуская (тарашкевіца)\xE2\x80\xAC",  # Belarusian in Taraskievica orthography; compat link
+       'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
+       'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # Belarusian in Taraskievica orthography; compat link
        'bg' => 'български',   # Bulgarian
        'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho). The name actually says "Bhojpuri".
        'bho' => 'भोजपुरी',       # Bhojpuri
@@ -87,8 +92,8 @@
        'cps' => 'Capiceño', # Capiznon
        'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
        'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
-       'crh-latn' => "\xE2\x80\xAAqırımtatarca (Latin)\xE2\x80\xAC",       # Crimean Tatar (Latin)
-       'crh-cyrl' => "\xE2\x80\xAAкъырымтатарджа (Кирилл)\xE2\x80\xAC",       # Crimean Tatar (Cyrillic)
+       'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E",       # Crimean Tatar (Latin)
+       'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E",       # Crimean Tatar (Cyrillic)
        'cs' => 'česky',       # Czech
        'csb' => 'kaszëbsczi', # Cassubian
        'cu' => 'словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',      # Old Church Slavonic (ancient language)
        'de' => 'Deutsch',              # German ("Du")
        'de-at' => 'Österreichisches Deutsch',         # Austrian German
        'de-ch' => 'Schweizer Hochdeutsch',             # Swiss Standard German
-       'de-formal' => "\xE2\x80\xAADeutsch (Sie-Form)\xE2\x80\xAC",            # German - formal address ("Sie")
+       'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E",                # German - formal address ("Sie")
        'diq' => 'Zazaki',              # Zazaki
        'dsb' => 'dolnoserbski', # Lower Sorbian
        'dtp' => 'Dusun Bundu-liwan', # Central Dusun
        'ga' => 'Gaeilge',              # Irish
        'gag' => 'Gagauz',              # Gagauz
        'gan' => '贛語',              # Gan (multiple scripts - defaults to Traditional)
-       'gan-hans' => "\xE2\x80\xAA赣语(简体)\xE2\x80\xAC",     # Gan (Simplified Han)
-       'gan-hant' => "\xE2\x80\xAA贛語(繁體)\xE2\x80\xAC",     # Gan (Traditional Han)
+       'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
+       'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
        'gd' => 'Gàidhlig',    # Scots Gaelic
        'gl' => 'galego',               # Galician
        'glk' => 'گیلکی',  # Gilaki
        'gsw' => 'Alemannisch', # Alemannic
        'gu' => 'ગુજરાતી',        # Gujarati
        'gv' => 'Gaelg',                # Manx
-       'ha' => 'هَوُسَ', # Hausa
+       'ha' => 'Hausa',        # Hausa
        'hak' => 'Hak-kâ-fa',  # Hakka
        'haw' => 'Hawai`i',             # Hawaiian
        'he' => 'עברית',   # Hebrew
        'kiu' => 'Kırmancki',  # Kirmanjki
        'kj' => 'Kwanyama',     # Kwanyama
        'kk' => 'қазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
-       'kk-arab' => "\xE2\x80\xABقازاقشا (تٴوتە)\xE2\x80\xAC",     # Kazakh Arabic
-       'kk-cyrl' => "\xE2\x80\xAAқазақша (кирил)\xE2\x80\xAC",     # Kazakh Cyrillic
-       'kk-latn' => "\xE2\x80\xAAqazaqşa (latın)\xE2\x80\xAC",       # Kazakh Latin
-       'kk-cn' => "\xE2\x80\xABقازاقشا (جۇنگو)\xE2\x80\xAC",       # Kazakh (China)
-       'kk-kz' => "\xE2\x80\xAAқазақша (Қазақстан)\xE2\x80\xAC",       # Kazakh (Kazakhstan)
-       'kk-tr' => "\xE2\x80\xAAqazaqşa (Türkïya)\xE2\x80\xAC",      # Kazakh (Turkey)
+       'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
+       'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
+       'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E",   # Kazakh Latin
+       'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F",   # Kazakh (China)
+       'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E",   # Kazakh (Kazakhstan)
+       'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E",  # Kazakh (Turkey)
        'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
        'km' => 'ភាសាខ្មែរ',  # Khmer, Central
        'kn' => 'ಕನ್ನಡ',      # Kannada
        'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
        'ksh' => 'Ripoarisch',  # Ripuarian
        'ku'  => 'Kurdî',      # Kurdish (multiple scripts - defaults to Latin)
-       'ku-latn' => "\xE2\x80\xAAKurdî (latînî)\xE2\x80\xAC",       # Northern Kurdish (Latin script)
-       'ku-arab' => "\xE2\x80\xABكوردي (عەرەبی)\xE2\x80\xAC",       # Northern Kurdish (Arabic script) (falls back to ckb)
+       'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
+       'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
        'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
        'kw' => 'kernowek',             # Cornish
        'ky' => 'Кыргызча',     # Kirghiz
        'nah' => 'Nāhuatl',            # Nahuatl, en:Wikipedia writes Nahuatlahtolli, while another form is Náhuatl
        'nan' => 'Bân-lâm-gú', # Min-nan -- (bug 8217) nan instead of zh-min-nan, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=n
        'nap' => 'Nnapulitano', # Neapolitan
-       'nb' => "\xE2\x80\xAAnorsk (bokmål)\xE2\x80\xAC",              # Norwegian (Bokmal)
+       'nb' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (Bokmal)
        'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
        'nds-nl' => 'Nedersaksisch',    # Dutch Low Saxon
        'ne' => 'नेपाली',   # Nepali
        'ng' => 'Oshiwambo',            # Ndonga
        'niu' => 'Niuē',       # Niuean
        'nl' => 'Nederlands',   # Dutch
-       'nl-informal' => "\xE2\x80\xAANederlands (informeel)\xE2\x80\xAC",      # Dutch (informal address ("je"))
-       'nn' => "\xE2\x80\xAAnorsk (nynorsk)\xE2\x80\xAC",      # Norwegian (Nynorsk)
-       'no' => "\xE2\x80\xAAnorsk (bokmål)\xE2\x80\xAC",              # Norwegian (falls back to nb).
+       'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E",  # Dutch (informal address ("je"))
+       'nn' => "norsk (nynorsk)\xE2\x80\x8E",  # Norwegian (Nynorsk)
+       'no' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (falls back to nb).
        'nov' => 'Novial',              # Novial
        'nrm' => 'Nouormand',   # Norman
        'nso' => 'Sesotho sa Leboa',    # Northern Sotho
        'so' => 'Soomaaliga',   # Somali
        'sq' => 'shqip',                # Albanian
        'sr' => 'српски / srpski',        # Serbian (multiple scripts - defaults to Cyrillic)
-       'sr-ec' => "\xE2\x80\xAAсрпски (ћирилица)\xE2\x80\xAC",   # Serbian Cyrillic ekavian
-       'sr-el' => "\xE2\x80\xAAsrpski (latinica)\xE2\x80\xAC", # Serbian Latin ekavian
+       'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
+       'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
        'srn' => 'Sranantongo',         # Sranan Tongo
        'ss' => 'SiSwati',              # Swati
        'st' => 'Sesotho',              # Southern Sotho
        'zea' => 'Zeêuws',     # Zeeuws/Zeaws
        'zh' => '中文',                                               # (Zhōng Wén) - Chinese
        'zh-classical' => '文言',                     # Classical Chinese/Literary Chinese -- (see bug 8217)
-       'zh-cn' => "\xE2\x80\xAA中文(中国大陆)\xE2\x80\xAC",  # Chinese (PRC)
-       'zh-hans' => "\xE2\x80\xAA中文(简体)\xE2\x80\xAC",      # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
-       'zh-hant' => "\xE2\x80\xAA中文(繁體)\xE2\x80\xAC",      # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
-       'zh-hk' => "\xE2\x80\xAA中文(香港)\xE2\x80\xAC",        # Chinese (Hong Kong)
+       'zh-cn' => "中文(中国大陆)\xE2\x80\x8E",      # Chinese (PRC)
+       'zh-hans' => "中文(简体)\xE2\x80\x8E",  # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
+       'zh-hant' => "中文(繁體)\xE2\x80\x8E",  # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
+       'zh-hk' => "中文(香港)\xE2\x80\x8E",    # Chinese (Hong Kong)
        'zh-min-nan' => 'Bân-lâm-gú',                                # Min-nan -- (see bug 8217)
-       'zh-mo' => "\xE2\x80\xAA中文(澳門)\xE2\x80\xAC",        # Chinese (Macau)
-       'zh-my' => "\xE2\x80\xAA中文(马来西亚)\xE2\x80\xAC",  # Chinese (Malaysia)
-       'zh-sg' => "\xE2\x80\xAA中文(新加坡)\xE2\x80\xAC",     # Chinese (Singapore)
-       'zh-tw' => "\xE2\x80\xAA中文(台灣)\xE2\x80\xAC",        # Chinese (Taiwan)
+       'zh-mo' => "中文(澳門)\xE2\x80\x8E",    # Chinese (Macau)
+       'zh-my' => "中文(马来西亚)\xE2\x80\x8E",      # Chinese (Malaysia)
+       'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
+       'zh-tw' => "中文(台灣)\xE2\x80\x8E",    # Chinese (Taiwan)
        'zh-yue' => '粵語',                                   # Cantonese -- (see bug 8217)
        'zu' => 'isiZulu'               # Zulu
 );
diff --git a/languages/classes/LanguageAm.php b/languages/classes/LanguageAm.php
deleted file mode 100644 (file)
index 4c39c26..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Amharic (አማርኛ) specific code.
- *
- * 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 Language
- */
-
-/**
- * Amharic (አማርኛ)
- *
- * @ingroup Language
- */
-class LanguageAm extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index cc6b85c..553ff07 100644 (file)
  */
 class LanguageAr extends Language {
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 6 );
-
-               if ( $count == 0 ) {
-                       $index = 0;
-               } elseif ( $count == 1 ) {
-                       $index = 1;
-               } elseif ( $count == 2 ) {
-                       $index = 2;
-               } elseif ( $count % 100 >= 3 && $count % 100 <= 10 ) {
-                       $index = 3;
-               } elseif ( $count % 100 >= 11 && $count % 100 <= 99 ) {
-                       $index = 4;
-               } else {
-                       $index = 5;
-               }
-               return $forms[$index];
-       }
-
        /**
         * Temporary hack for bug 9413: replace Arabic presentation forms with their
         * standard equivalents.
diff --git a/languages/classes/LanguageBe.php b/languages/classes/LanguageBe.php
deleted file mode 100644 (file)
index b5b5966..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Belarusian normative (Беларуская мова) specific code.
- *
- * 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 Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
- * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
- * @ingroup Language
- */
-
-/**
- * Belarusian normative (Беларуская мова)
- *
- * This is still the version from Be-x-old, only duplicated for consistency of
- * plural and grammar functions. If there are errors please send a patch.
- *
- * @ingroup Language
- * @see http://be.wikipedia.org/wiki/Talk:LanguageBe.php
- */
-class LanguageBe extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               // @todo FIXME: CLDR defines 4 plural forms instead of 3
-               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
-                       return $forms[2];
-               } else {
-                       switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
-                               case 2:
-                               case 3:
-                               case 4:  return $forms[1];
-                               default: return $forms[2];
-                       }
-               }
-       }
-}
diff --git a/languages/classes/LanguageBh.php b/languages/classes/LanguageBh.php
deleted file mode 100644 (file)
index 0eaf2ff..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Bihari (भोजपुरी) specific code.
- *
- * 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 Language
- */
-
-/**
- * Bihari (भोजपुरी)
- *
- * @ingroup Language
- */
-class LanguageBh extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index 0929641..3da7711 100644 (file)
  */
 class LanguageBs extends Language {
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               // @todo FIXME: CLDR defines 4 plural forms instead of 3. Plural for decimals is missing.
-               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
-               if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
-                       return $forms[2];
-               } else {
-                       switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
-                               case 2:
-                               case 3:
-                               case 4:  return $forms[1];
-                               default: return $forms[2];
-                       }
-               }
-       }
 
        /**
         * Convert from the nominative form of a noun to some other case
diff --git a/languages/classes/LanguageCs.php b/languages/classes/LanguageCs.php
deleted file mode 100644 (file)
index 49c4756..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.]) specific code.
- *
- * 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 Language
- */
-
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.])
- *
- * @ingroup Language
- */
-class LanguageCs extends Language {
-
-       /**
-        * Plural transformations
-        * Invoked by putting
-        * {{plural:count|form1|form2-4|form0,5+}} for two forms plurals
-        * {{plural:count|form1|form0,2+}} for single form plurals
-        * in a message
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               switch ( $count ) {
-                       case 1:
-                               return $forms[0];
-                       case 2:
-                       case 3:
-                       case 4:
-                               return $forms[1];
-                       default:
-                               return $forms[2];
-               }
-       }
-}
index bfa95cf..2016a43 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  * @ingroup Language
  */
+
 /**
  * Old Church Slavonic (Ѩзыкъ словѣньскъ)
  *
diff --git a/languages/classes/LanguageCy.php b/languages/classes/LanguageCy.php
deleted file mode 100644 (file)
index 9c28279..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Welsh (Cymraeg) specific code.
- *
- * 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 Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Welsh (Cymraeg)
- *
- * @ingroup Language
- */
-class LanguageCy extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 6 );
-               $count = abs( $count );
-               if ( $count >= 0 && $count <= 3 ) {
-                       return $forms[$count];
-               } elseif ( $count == 6 ) {
-                       return $forms[4];
-               } else {
-                       return $forms[5];
-               }
-       }
-}
index b8ed7fc..975157f 100644 (file)
@@ -54,21 +54,4 @@ class LanguageDsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               switch ( abs( $count ) % 100 ) {
-                       case 1:  return $forms[0]; // singular
-                       case 2:  return $forms[1]; // dual
-                       case 3:
-                       case 4:  return $forms[2]; // plural
-                       default: return $forms[3]; // pluralgen
-               }
-       }
 }
index 1865cc5..6a2820d 100644 (file)
@@ -102,7 +102,7 @@ class LanguageFi extends Language {
                        'monday' => 'maanantai',
                        'tuesday' => 'tiistai',
                        'wednesday' => 'keskiviikko',
-                       'thursay' => 'torstai',
+                       'thursday' => 'torstai',
                        'friday' => 'perjantai',
                        'saturday' => 'lauantai',
                        'sunday' => 'sunnuntai',
diff --git a/languages/classes/LanguageFr.php b/languages/classes/LanguageFr.php
deleted file mode 100644 (file)
index edbe1fb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * French (Français) specific code.
- *
- * 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 Language
- */
-
-/**
- * French (Français)
- *
- * @ingroup Language
- */
-class LanguageFr extends Language {
-       /**
-        * Use singular form for zero (see bug 7309)
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index cb9fa04..2f58384 100644 (file)
@@ -64,24 +64,4 @@ class LanguageGa extends Language {
                return $word;
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ga
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
 }
index 4fd41cf..0c8bd22 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageZh.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageZh.php' );
 
 /**
  * @ingroup Language
@@ -58,7 +58,7 @@ class GanConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require( dirname( __FILE__ ) . "/../../includes/ZhConversion.php" );
+               require( __DIR__ . "/../../includes/ZhConversion.php" );
                $this->mTables = array(
                        'gan-hans' => new ReplacementArray( $zh2Hans ),
                        'gan-hant' => new ReplacementArray( $zh2Hant ),
@@ -116,7 +116,7 @@ class LanguageGan extends LanguageZh {
                                                                array(),
                                                                $ml );
 
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 
        /**
diff --git a/languages/classes/LanguageGd.php b/languages/classes/LanguageGd.php
deleted file mode 100644 (file)
index f042b02..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Scots Gaelic (Gàidhlig) specific code.
- *
- * 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 Raimond Spekking
- * @author Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Scots Gaelic (Gàidhlig)
- *
- * @ingroup Language
- */
-class LanguageGd extends Language {
-
-       /**
-        * Plural form transformations
-        * Based on this discussion: http://translatewiki.net/wiki/Thread:Support/New_plural_rules_for_Scots_Gaelic_(gd)
-        *
-        * $forms[0] - 1
-        * $forms[1] - 2
-        * $forms[2] - 11
-        * $forms[3] - 12
-        * $forms[4] - 3-10, 13-19
-        * $forms[5] - 0, 20, rest
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 6 );
-
-               $count = abs( $count );
-               if ( $count == 1 ) {
-                       return $forms[0];
-               } elseif ( $count == 2 ) {
-                       return $forms[1];
-               } elseif ( $count == 11 ) {
-                       return $forms[2];
-               } elseif ( $count == 12 ) {
-                       return $forms[3];
-               } elseif ( ($count >= 3 && $count <= 10) || ($count >= 13 && $count <= 19) ) {
-                       return $forms[4];
-               } else {
-                       return $forms[5];
-               }
-       }
-}
index 22be1de..48c0c05 100644 (file)
@@ -68,23 +68,4 @@ class LanguageHe extends Language {
                return $word;
        }
 
-       /**
-        * Gets a number and uses the suited form of the word.
-        *
-        * @param $count Integer: the number of items
-        * @param $forms Array with 3 items: the three plural forms
-        * @return String: the suited form of word
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       return $forms[0]; // Singular
-               } elseif ( $count == 2 ) {
-                       return $forms[2]; // Dual or plural if dual is not provided (filled in preConvertPlural)
-               } else {
-                       return $forms[1]; // Plural
-               }
-       }
 }
index 965ea6a..5623f3c 100644 (file)
@@ -54,21 +54,4 @@ class LanguageHsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               switch ( abs( $count ) % 100 ) {
-                       case 1:  return $forms[0]; // singular
-                       case 2:  return $forms[1]; // dual
-                       case 3:
-                       case 4:  return $forms[2]; // plural
-                       default: return $forms[3]; // pluralgen
-               }
-       }
 }
index 090d626..3ff336b 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Conversion script between Latin and Syllabics for Inuktitut.
@@ -38,7 +38,7 @@ require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
 class IuConverter extends LanguageConverter {
 
        protected $mDoContentConvert;
-       var $mToLatin = array(
+       public $mToLatin = array(
                'ᐦ' => 'h',   'ᐃ' => 'i',    'ᐄ' => 'ii',    'ᐅ' => 'u',    'ᐆ' => 'uu',    'ᐊ' => 'a',    'ᐋ' => 'aa',
                'ᑉ' => 'p',   'ᐱ' => 'pi',   'ᐲ' => 'pii',   'ᐳ' => 'pu',   'ᐴ' => 'puu',   'ᐸ' => 'pa',   'ᐹ' => 'paa',
                'ᑦ' => 't',   'ᑎ' => 'ti',   'ᑏ' => 'tii',   'ᑐ' => 'tu',   'ᑑ' => 'tuu',   'ᑕ' => 'ta',   'ᑖ' => 'taa',
@@ -58,7 +58,7 @@ class IuConverter extends LanguageConverter {
                'ᖦ' => 'ɫ',   'ᖠ' => 'ɫi',    'ᖡ' => 'ɫii',   'ᖢ' => 'ɫu',    'ᖣ' => 'ɫuu',   'ᖤ' => 'ɫa',    'ᖥ' => 'ɫaa',
        );
 
-       var $mUpperToLowerCaseLatin = array(
+       public $mUpperToLowerCaseLatin = array(
                'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
                'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
                'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
@@ -67,7 +67,7 @@ class IuConverter extends LanguageConverter {
                'Z' => 'z',
        );
 
-       var $mToSyllabics = array(
+       public $mToSyllabics = array(
                'h' => 'ᐦ',   'i' => 'ᐃ',    'ii' => 'ᐄ',    'u' => 'ᐅ',    'uu' => 'ᐆ',    'a' => 'ᐊ',    'aa' => 'ᐋ',
                'p' => 'ᑉ',   'pi' => 'ᐱ',   'pii' => 'ᐲ',   'pu' => 'ᐳ',   'puu' => 'ᐴ',   'pa' => 'ᐸ',   'paa' => 'ᐹ',
                't' => 'ᑦ',   'ti' => 'ᑎ',   'tii' => 'ᑏ',   'tu' => 'ᑐ',   'tuu' => 'ᑑ',   'ta' => 'ᑕ',   'taa' => 'ᑖ',
@@ -233,6 +233,6 @@ class LanguageIu extends Language {
 
                $flags = array();
                $this->mConverter = new IuConverter( $this, 'iu', $variants, $variantfallbacks, $flags );
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 }
index 7eb0b6c..a7e5866 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageKk_cyrl.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageKk_cyrl.php' );
 
 define( 'KK_C_UC', 'АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҰҮФХҺЦЧШЩЪЫІЬЭЮЯ' ); # Kazakh Cyrillic uppercase
 define( 'KK_C_LC', 'аәбвгғдеёжзийкқлмнңоөпрстуұүфхһцчшщъыіьэюя' ); # Kazakh Cyrillic lowercase
@@ -62,7 +62,7 @@ class KkConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               // require( dirname(__FILE__)."/../../includes/KkConversion.php" );
+               // require( __DIR__."/../../includes/KkConversion.php" );
                // Placeholder for future implementing. Remove variables declarations
                // after generating KkConversion.php
                $kk2Cyrl = array();
@@ -440,21 +440,7 @@ class LanguageKk extends LanguageKk_cyrl {
 
                $this->mConverter = new KkConverter( $this, 'kk', $variants, $variantfallbacks );
 
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
-       }
-
-       /**
-        * Work around for right-to-left direction support in kk-arab and kk-cn
-        *
-        * @return bool
-        */
-       function isRTL() {
-               $variant = $this->getPreferredVariant();
-               if ( $variant == 'kk-arab' || $variant == 'kk-cn' ) {
-                       return true;
-               } else {
-                       return parent::isRTL();
-               }
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 
        /**
index 18c8564..9150663 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageKu_ku.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageKu_ku.php' );
 
 /**
  * Kurdish converter routines
@@ -30,7 +30,7 @@ require_once( dirname( __FILE__ ) . '/LanguageKu_ku.php' );
  * @ingroup Language
  */
 class KuConverter extends LanguageConverter {
-       var $mArabicToLatin = array(
+       public $mArabicToLatin = array(
                'ب' => 'b', 'ج' => 'c', 'چ' => 'ç', 'د' => 'd', 'ف' => 'f', 'گ' => 'g', 'ھ' => 'h',
                'ہ' => 'h', 'ه' => 'h', 'ح' => 'h', 'ژ' => 'j', 'ك' => 'k', 'ک' => 'k', 'ل' => 'l',
                'م' => 'm', 'ن' => 'n', 'پ' => 'p', 'ق' => 'q', 'ر' => 'r', 'س' => 's', 'ش' => 'ş',
@@ -72,7 +72,7 @@ class KuConverter extends LanguageConverter {
                '٩' => '9', # &#x0669;
        );
 
-       var $mLatinToArabic = array(
+       public $mLatinToArabic = array(
                'b' => 'ب', 'c' => 'ج', 'ç' => 'چ', 'd' => 'د', 'f' => 'ف', 'g' => 'گ',
                'h' => 'ه', 'j' => 'ژ', 'k' => 'ک', 'l' => 'ل',
                'm' => 'م', 'n' => 'ن', 'p' => 'پ', 'q' => 'ق', 'r' => 'ر', 's' => 'س', 'ş' => 'ش',
@@ -273,6 +273,6 @@ class LanguageKu extends LanguageKu_ku {
                );
 
                $this->mConverter = new KuConverter( $this, 'ku', $variants, $variantfallbacks );
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 }
diff --git a/languages/classes/LanguageLn.php b/languages/classes/LanguageLn.php
deleted file mode 100644 (file)
index d7329d5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Lingala (Lingála) specific code.
- *
- * 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 Language
- */
-
-/**
- * Lingala (Lingála)
- *
- * @ingroup Language
- */
-class LanguageLn extends Language {
-       /**
-        * Use singular form for zero
-        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ln
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageMo.php b/languages/classes/LanguageMo.php
deleted file mode 100644 (file)
index bf8a10d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Moldavian (Молдовеняскэ) specific code.
- *
- * 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 Language
- */
-
-/**
- * Moldavian (Молдовеняскэ)
- *
- * @ingroup Language
- */
-class LanguageMo extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               // Plural rules per
-               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mo
-               // Identical to Romanian (ro).
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 0 || ( $count % 100 > 0 && $count % 100 < 20 ) ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
index 8e2115c..9d92834 100644 (file)
@@ -36,6 +36,6 @@ class LanguageQqx extends Language {
         * @return string
         */
        function getMessage( $key ) {
-               return "($key)";
+               return "($key$*)";
        }
 }
diff --git a/languages/classes/LanguageRo.php b/languages/classes/LanguageRo.php
deleted file mode 100644 (file)
index 0db2ec0..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Romanian (Română) specific code.
- *
- * 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 Language
- */
-
-/**
- * Romanian (Română)
- *
- * @ingroup Language
- */
-class LanguageRo extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               // Plural rules per
-               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ro
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 0 || ( $count % 100 > 0 && $count % 100 < 20 ) ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
diff --git a/languages/classes/LanguageSe.php b/languages/classes/LanguageSe.php
deleted file mode 100644 (file)
index 25b61c3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Northern Sami (Sámegiella) specific code.
- *
- * 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 Language
- */
-
-/**
- * Northern Sami (Sámegiella)
- *
- * @ingroup Language
- */
-class LanguageSe extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#se
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
index ab34440..335d551 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Conversion script between Latin and Tifinagh for Tachelhit.
@@ -39,7 +39,7 @@ class ShiConverter extends LanguageConverter {
 
        protected $mDoContentConvert;
 
-       var $mToLatin = array(
+       public $mToLatin = array(
                'ⴰ' => 'a', 'ⴱ' => 'b', 'ⴳ' => 'g', 'ⴷ' => 'd', 'ⴹ' => 'ḍ', 'ⴻ' => 'e',
                'ⴼ' => 'f', 'ⴽ' => 'k', 'ⵀ' => 'h', 'ⵃ' => 'ḥ', 'ⵄ' => 'ε', 'ⵅ' => 'x',
                'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j',  'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
@@ -48,7 +48,7 @@ class ShiConverter extends LanguageConverter {
                'ⵥ' => 'ẓ', 'ⵯ' => 'ʷ', 'ⵖ' => 'ɣ', 'ⵠ' => 'v', 'ⵒ' => 'p',
        );
 
-       var $mUpperToLowerCaseLatin = array(
+       public $mUpperToLowerCaseLatin = array(
                'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
                'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
                'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
@@ -57,7 +57,7 @@ class ShiConverter extends LanguageConverter {
                'Z' => 'z', 'Ɣ' => 'ɣ',
        );
 
-       var $mToTifinagh = array(
+       public $mToTifinagh = array(
                'a' => 'ⴰ', 'b' => 'ⴱ', 'g' => 'ⴳ', 'd' => 'ⴷ', 'ḍ' => 'ⴹ', 'e' => 'ⴻ',
                'f' => 'ⴼ', 'k' => 'ⴽ', 'h' => 'ⵀ', 'ḥ' => 'ⵃ', 'ε' => 'ⵄ', 'x' => 'ⵅ',
                'q' => 'ⵇ', 'i' => 'ⵉ', 'j' => 'ⵊ',  'l' => 'ⵍ', 'm' => 'ⵎ', 'n' => 'ⵏ',
@@ -212,6 +212,6 @@ class LanguageShi extends Language {
 
                $flags = array();
                $this->mConverter = new ShiConverter( $this, 'shi', $variants, $variantfallbacks, $flags );
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 }
diff --git a/languages/classes/LanguageSma.php b/languages/classes/LanguageSma.php
deleted file mode 100644 (file)
index 1961871..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Southern Sami (Åarjelsaemien) specific code.
- *
- * 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 Language
- */
-
-/**
- * Southern Sami (Åarjelsaemien)
- *
- * @ingroup Language
- */
-class LanguageSma extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sma
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
index 26d6853..b043778 100644 (file)
@@ -21,9 +21,9 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageSr_ec.php' );
-require_once( dirname( __FILE__ ) . '/LanguageSr_el.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageSr_ec.php' );
+require_once( __DIR__ . '/LanguageSr_el.php' );
 
 /**
  * There are two levels of conversion for Serbian: the script level
@@ -35,7 +35,7 @@ require_once( dirname( __FILE__ ) . '/LanguageSr_el.php' );
  * @ingroup Language
  */
 class SrConverter extends LanguageConverter {
-       var $mToLatin = array(
+       public $mToLatin = array(
                'а' => 'a', 'б' => 'b',  'в' => 'v', 'г' => 'g',  'д' => 'd',
                'ђ' => 'đ', 'е' => 'e',  'ж' => 'ž', 'з' => 'z',  'и' => 'i',
                'ј' => 'j', 'к' => 'k',  'л' => 'l', 'љ' => 'lj', 'м' => 'm',
@@ -51,7 +51,7 @@ class SrConverter extends LanguageConverter {
                'Х' => 'H', 'Ц' => 'C',  'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
        );
 
-       var $mToCyrillics = array(
+       public $mToCyrillics = array(
                'a' => 'а', 'b'  => 'б', 'c' => 'ц', 'č' => 'ч', 'ć'  => 'ћ',
                'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f'  => 'ф',
                'g' => 'г', 'h'  => 'х', 'i' => 'и', 'j' => 'ј', 'k'  => 'к',
@@ -246,7 +246,7 @@ class LanguageSr extends LanguageSr_ec {
                        'W' => 'W', 'реч'   => 'W', 'reč'   => 'W', 'ријеч' => 'W', 'riječ' => 'W'
                );
                $this->mConverter = new SrConverter( $this, 'sr', $variants, $variantfallbacks, $flags );
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 
        /**
index 90d5761..3ec1476 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * Converts Tajiki to latin orthography
index e0f45cd..2db64a7 100644 (file)
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
 
 /**
  * @ingroup Language
  */
 class UzConverter extends LanguageConverter {
-       var $toLatin = array(
+       public $toLatin = array(
                'а' => 'a', 'А' => 'A',
                'б' => 'b', 'Б' => 'B',
                'д' => 'd', 'Д' => 'D',
@@ -65,7 +65,7 @@ class UzConverter extends LanguageConverter {
                'ъ' => 'ʼ',
        );
 
-       var $toCyrillic = array(
+       public $toCyrillic = array(
                'a' => 'а', 'A' => 'А',
                'b' => 'б', 'B' => 'Б',
                'd' => 'д', 'D' => 'Д',
@@ -132,6 +132,6 @@ class LanguageUz extends Language {
                );
 
                $this->mConverter = new UzConverter( $this, 'uz', $variants, $variantfallbacks );
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 }
index 8a4aca6..9e90c7f 100644 (file)
@@ -58,7 +58,9 @@ class LanguageWa extends Language {
         */
        function date( $ts, $adj = false, $format = true, $tc = false ) {
                $ts = wfTimestamp( TS_MW, $ts );
-               if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
+               if ( $adj ) {
+                       $ts = $this->userAdjust( $ts, $tc );
+               }
                $datePreference = $this->dateFormat( $format );
 
                # ISO (YYYY-mm-dd) format
index 96eea7c..11cf0cf 100644 (file)
@@ -21,8 +21,8 @@
  * @ingroup Language
  */
 
-require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
-require_once( dirname( __FILE__ ) . '/LanguageZh_hans.php' );
+require_once( __DIR__ . '/../LanguageConverter.php' );
+require_once( __DIR__ . '/LanguageZh_hans.php' );
 
 /**
  * @ingroup Language
@@ -64,7 +64,7 @@ class ZhConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require( dirname( __FILE__ ) . "/../../includes/ZhConversion.php" );
+               require( __DIR__ . "/../../includes/ZhConversion.php" );
                $this->mTables = array(
                        'zh-hans' => new ReplacementArray( $zh2Hans ),
                        'zh-hant' => new ReplacementArray( $zh2Hant ),
@@ -146,7 +146,7 @@ class LanguageZh extends LanguageZh_hans {
                                                                array(),
                                                                $ml );
 
-               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+               $wgHooks['ArticleContentSaveComplete'][] = $this->mConverter;
        }
 
        /**
diff --git a/languages/data/plurals-mediawiki.xml b/languages/data/plurals-mediawiki.xml
new file mode 100644 (file)
index 0000000..0a5f059
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
+<supplementalData>
+       <plurals>
+               <pluralRules locales="he">
+                       <pluralRule count="one">n is 1</pluralRule>
+                       <pluralRule count="two">n is 2</pluralRule>
+               </pluralRules>
+               <pluralRules locales="dsb hsb">
+                       <pluralRule count="one">n mod 100 is 1</pluralRule>
+                       <pluralRule count="two">n mod 100 is 2</pluralRule>
+                       <pluralRule count="few">n mod 100 in 3..4</pluralRule>
+               </pluralRules>
+               <!-- Copied from "be" -->
+               <pluralRules locales="be-tarask">
+                       <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+                       <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule>
+                       <pluralRule count="many">n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14</pluralRule>
+                       <!-- others are fractions -->
+               </pluralRules>
+               <pluralRules locales="cu">
+                       <pluralRule count="one">n mod 10 is 1</pluralRule>
+                       <pluralRule count="two">n mod 10 is 2</pluralRule>
+                       <pluralRule count="few">n mod 10 in 3..4</pluralRule>
+               </pluralRules>
+               <!-- Plural form transformations
+               Based on this discussion: http://translatewiki.net/wiki/Thread:Support/New_plural_rules_for_Scots_Gaelic_(gd)
+               $forms[0] - 1
+               $forms[1] - 2
+               $forms[2] - 11
+               $forms[3] - 12
+               $forms[4] - 3-10, 13-19
+               $forms[5] - 0, 20, rest -->
+               <pluralRules locales="gd">
+                       <pluralRule count="one">n is 1</pluralRule>
+                       <pluralRule count="two">n is 2</pluralRule>
+                       <pluralRule count="elevan">n is 11</pluralRule>
+                       <pluralRule count="twelve">n is 12</pluralRule>
+                       <pluralRule count="few">n in 3..10 or n in 13..19</pluralRule>
+               </pluralRules>
+               <!-- Hopefully temporary overrides for bug 40251 -->
+               <pluralRules locales="fa hu ja vi">
+                       <pluralRule count="one">n is 1</pluralRule>
+               </pluralRules>
+       </plurals>
+</supplementalData>
diff --git a/languages/data/plurals.xml b/languages/data/plurals.xml
new file mode 100644 (file)
index 0000000..a2992c8
--- /dev/null
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
+<supplementalData>
+    <version number="$Revision: 7657 $"/>
+    <generation date="$Date: 2012-08-29 11:20:56 -0700 (Wed, 29 Aug 2012) $"/>
+    <plurals>
+        <!-- if locale is known to have no plurals, there are no rules -->
+        <pluralRules locales="az bm bo dz fa id ig ii hu ja jv ka kde kea km kn ko lo ms my sah ses sg th to tr vi wo yo zh"/> 
+        <pluralRules locales="ar">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n mod 100 in 3..10</pluralRule>
+            <pluralRule count="many">n mod 100 in 11..99</pluralRule>
+        </pluralRules>
+        <pluralRules locales="he">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="many">n is not 0 AND n mod 10 is 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="asa ast af bem bez bg bn brx ca cgg chr ckb da de dv ee el en eo es et eu fi fo fur fy gl gsw gu ha haw is it jgo jmc kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn mr nah nb nd ne nl nn nnh no nr ny nyn om or os pa pap ps pt rof rm rwk saq seh sn so sq ss ssy st sv sw syr ta te teo tig tk tn ts ur vo wae ve vun xh xog zu">
+            <pluralRule count="one">n is 1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ak am bh fil tl guw hi ln mg nso ti wa">
+            <pluralRule count="one">n in 0..1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ff fr kab">
+            <pluralRule count="one">n within 0..2 and n is not 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lv">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+        </pluralRules>
+        <pluralRules locales="iu kw naq se sma smi smj smn sms">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ga"> <!-- http://unicode.org/cldr/trac/ticket/3915 -->
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n in 3..6</pluralRule>
+            <pluralRule count="many">n in 7..10</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ro mo">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n is 0 OR n is not 1 AND n mod 100 in 1..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lt">
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11..19</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..9 and n mod 100 not in 11..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="be bs hr ru sh sr uk">
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule>
+            <pluralRule count="many">n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14</pluralRule>
+            <!-- others are fractions -->
+        </pluralRules>
+        <pluralRules locales="cs sk">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n in 2..4</pluralRule>
+        </pluralRules>
+        <pluralRules locales="pl">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule>
+            <pluralRule count="many">n is not 1 and n mod 10 in 0..1 or n mod 10 in 5..9 or n mod 100 in 12..14</pluralRule>
+            <!-- others are fractions -->
+            <!-- and n mod 100 not in 22..24 from Tamplin -->
+        </pluralRules>
+        <pluralRules locales="sl">
+            <pluralRule count="one">n mod 100 is 1</pluralRule>
+            <pluralRule count="two">n mod 100 is 2</pluralRule>
+            <pluralRule count="few">n mod 100 in 3..4</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mt"> <!-- from Tamplin's data -->
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="few">n is 0 or n mod 100 in 2..10</pluralRule>
+            <pluralRule count="many">n mod 100 in 11..19</pluralRule>
+        </pluralRules>
+        <pluralRules locales="mk"> <!-- from Tamplin's data -->
+            <pluralRule count="one">n mod 10 is 1 and n is not 11</pluralRule>
+        </pluralRules>
+        <pluralRules locales="cy"> <!-- from http://www.saltcymru.org/wordpress/?p=99&lang=en -->
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="few">n is 3</pluralRule>
+            <pluralRule count="many">n is 6</pluralRule>
+        </pluralRules>
+        <pluralRules locales="lag">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n within 0..2 and n is not 0 and n is not 2</pluralRule>
+        </pluralRules>
+        <pluralRules locales="shi">
+            <pluralRule count="one">n within 0..1</pluralRule>
+            <pluralRule count="few">n in 2..10</pluralRule>
+        </pluralRules>
+        <pluralRules locales="br"> <!-- from http://unicode.org/cldr/trac/ticket/2886 -->
+            <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11,71,91</pluralRule>
+            <pluralRule count="two">n mod 10 is 2 and n mod 100 not in 12,72,92</pluralRule>
+            <pluralRule count="few">n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99</pluralRule>
+            <pluralRule count="many">n is not 0 and n mod 1000000 is 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="ksh">
+            <pluralRule count="zero">n is 0</pluralRule>
+            <pluralRule count="one">n is 1</pluralRule>
+        </pluralRules>
+        <pluralRules locales="tzm">
+            <pluralRule count="one">n in 0..1 or n in 11..99</pluralRule>
+        </pluralRules>
+        <pluralRules locales="gv">
+            <pluralRule count="one">n mod 10 in 1..2 or n mod 20 is 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="gd">
+            <pluralRule count="one">n in 1,11</pluralRule>
+            <pluralRule count="two">n in 2,12</pluralRule>
+            <pluralRule count="few">n in 3..10,13..19</pluralRule>
+        </pluralRules>
+    </plurals>
+</supplementalData>
index d177278..cb6269f 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Abkhazian (Ð\90Ò§Ñ\81Ñ\83а)
+/** Abkhazian (Ð\90Ò§Ñ\81Ñ\88Ó\99а)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -74,149 +74,149 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'language'                => array( '0', '#АБЫЗШӘА:', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'цастәи', 'служебная', 'special' ),
-       'index'                   => array( '1', '__АИНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
+       'language'                  => array( '0', '#АБЫЗШӘА:', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'цастәи', 'служебная', 'special' ),
+       'index'                     => array( '1', '__АИНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
 );
 
 $messages = array(
 # Dates
-'sunday'        => 'амҽыш',
-'monday'        => 'ашәахь',
-'tuesday'       => 'аҩаш',
-'wednesday'     => 'ахаш',
-'thursday'      => 'аҧшьаш',
-'friday'        => 'ахәуаш',
-'saturday'      => 'асабш',
-'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'    => 'нанҳәа',
+'sunday' => 'амҽыш',
+'monday' => 'ашәахь',
+'tuesday' => 'аҩаш',
+'wednesday' => 'ахаш',
+'thursday' => 'аҧшьаш',
+'friday' => 'ахәуаш',
+'saturday' => 'асабш',
+'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'           => 'ҧхҷ',
+'october-gen' => 'жьҭаара',
+'november-gen' => 'абҵара',
+'december-gen' => 'ҧхынҷкәын',
+'jan' => 'ажь',
+'feb' => 'жәа',
+'mar' => 'хәа',
+'apr' => 'мша',
+'may' => 'лаҵ',
+'jun' => 'раш',
+'jul' => 'ҧхг',
+'aug' => 'нан',
+'sep' => 'цәы',
+'oct' => 'жьҭ',
+'nov' => 'абҵ',
+'dec' => 'ҧхҷ',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Акатегориа|Акатегориақәа}}',
 
-'article'    => 'Адаҟьа',
-'mytalk'     => 'Сахцәажәара',
+'article' => 'Адаҟьа',
+'mytalk' => 'Сахцәажәара',
 'navigation' => 'Анавигациа',
 
 # Cologne Blue skin
-'qbfind'         => 'Аҧшаара',
-'qbedit'         => 'Ариашара',
-'qbpageoptions'  => 'Ари адаҟьа',
+'qbfind' => 'Аҧшаара',
+'qbedit' => 'Ариашара',
+'qbpageoptions' => 'Ари адаҟьа',
 'qbspecialpages' => 'Цастәи адаҟьақәа',
 
 # Vector skin
-'vector-action-move'     => 'Ахьӡ аҧсахра',
-'vector-view-create'     => 'Арҿиара',
-'vector-view-edit'       => 'Ариашамҭа',
-'vector-view-history'    => 'Аҭоурых',
-'vector-view-view'       => 'Аҧхьара',
+'vector-action-move' => 'Ахьӡ аҧсахра',
+'vector-view-create' => 'Арҿиара',
+'vector-view-edit' => 'Ариашамҭа',
+'vector-view-history' => 'Аҭоурых',
+'vector-view-view' => 'Аҧхьара',
 'vector-view-viewsource' => 'Ахәаҧшра',
 
-'help'             => 'Ацхыраара',
-'search'           => 'Аҧшаара',
-'searchbutton'     => 'Аҧшаара',
-'searcharticle'    => 'Адаҟьа',
-'history'          => 'Аҭоурых',
-'history_short'    => 'Аҭоурых',
+'help' => 'Ацхыраара',
+'search' => 'Аҧшаара',
+'searchbutton' => 'Аҧшаара',
+'searcharticle' => 'Адаҟьа',
+'history' => 'Аҭоурых',
+'history_short' => 'Аҭоурых',
 'printableversion' => 'Акьыҧхьразы аверсиа',
-'permalink'        => 'Еисымшатәи ахьарҧш',
-'edit'             => 'Ариашамҭа',
-'create'           => 'Арҿиара',
+'permalink' => 'Еисымшатәи ахьарҧш',
+'edit' => 'Ариашамҭа',
+'create' => 'Арҿиара',
 'create-this-page' => 'Ариашара ари адаҟьа',
-'newpage'          => 'Адаҟьа Ҿыц',
+'newpage' => 'Адаҟьа Ҿыц',
 'talkpagelinktext' => 'Ахцәажәара',
-'specialpage'      => 'Цастәи адаҟьа',
-'talk'             => 'Ахцәажәара',
-'toolbox'          => 'Амаҵыругақәа',
-'otherlanguages'   => 'Абызшәақәа',
-'lastmodifiedat'   => 'Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.',
+'specialpage' => 'Цастәи адаҟьа',
+'talk' => 'Ахцәажәара',
+'toolbox' => 'Амаҵыругақәа',
+'otherlanguages' => 'Абызшәақәа',
+'lastmodifiedat' => 'Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.',
 'jumptonavigation' => 'Анавигациа',
-'jumptosearch'     => 'Аҧшаара',
+'jumptosearch' => 'Аҧшаара',
 
 # 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}} иазкны',
-'currentevents'        => 'Ииасуа ахҭысқәа',
-'mainpage'             => 'Ихадоу Адаҟьа',
+'aboutsite' => '{{SITENAME}} иазкны',
+'currentevents' => 'Ииасуа ахҭысқәа',
+'mainpage' => 'Ихадоу Адаҟьа',
 'mainpage-description' => 'Ихадоу адаҟьа',
-'privacy'              => 'Аконфиденциалтә аполитика',
-'privacypage'          => 'Project: Аконфиденциалтә аполитика',
+'privacy' => 'Аконфиденциалтә аполитика',
+'privacypage' => 'Project: Аконфиденциалтә аполитика',
 
-'youhavenewmessages'  => 'Уара $1 уауит ($2).',
-'newmessageslink'     => 'адырра ҿыцқәа',
+'youhavenewmessages' => 'Уара $1 уауит ($2).',
+'newmessageslink' => 'адырра ҿыцқәа',
 'newmessagesdifflink' => 'аҵыхәтәатәи аҽеиҭакра',
-'editsection'         => 'ариашамҭа',
-'editold'             => 'ариашара',
-'editlink'            => 'ариашара',
+'editsection' => 'ариашамҭа',
+'editold' => 'ариашара',
+'editlink' => 'ариашара',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Адаҟьа',
-'nstab-user'     => 'Алахәыла',
-'nstab-special'  => 'Цастәи адаҟьа',
-'nstab-image'    => 'Афаил',
+'nstab-main' => 'Адаҟьа',
+'nstab-user' => 'Алахәыла',
+'nstab-special' => 'Цастәи адаҟьа',
+'nstab-image' => 'Афаил',
 'nstab-template' => 'Ашаблон',
-'nstab-help'     => 'Ацхыраара',
+'nstab-help' => 'Ацхыраара',
 'nstab-category' => 'Акатегориа',
 
 # General errors
 'viewsource' => 'Ахәаҧшра',
 
 # Login and logout pages
-'login'                   => 'Урдырра',
+'login' => 'Урдырра',
 'nav-login-createaccount' => 'Урдырра / Арегистрациара',
-'userlogin'               => 'Урдырра/Арегистрациара',
-'logout'                  => 'Асеанс дәылҵра',
-'userlogout'              => 'Асеанс дәылҵра',
-'loginlanguagelabel'      => 'Абызшәа: $1',
+'userlogin' => 'Урдырра/Арегистрациара',
+'logout' => 'Асеанс дәылҵра',
+'userlogout' => 'Асеанс дәылҵра',
+'loginlanguagelabel' => 'Абызшәа: $1',
 
 # Edit pages
-'summary'     => 'Описание изменений:',
+'summary' => 'Описание изменений:',
 'savearticle' => 'Адаҟьа ахьчара',
-'editing'     => 'Ариашамҭа: $1',
+'editing' => 'Ариашамҭа: $1',
 
 # Search results
 'searchresults-title' => 'Аҧшаара «$1»',
 
 # Preferences page
-'preferences'       => 'Архиарақәа',
-'mypreferences'     => 'Архиарақәа',
+'preferences' => 'Архиарақәа',
+'mypreferences' => 'Архиарақәа',
 'searchresultshead' => 'Аҧшаара',
-'uid'               => 'Алахәыла ID:',
-'yourlanguage'      => 'Абызшәа:',
-'prefs-signature'   => 'Анапынҵамҭа',
+'uid' => 'Алахәыла ID:',
+'yourlanguage' => 'Абызшәа:',
+'prefs-signature' => 'Анапынҵамҭа',
 
 # Groups
 'group-user' => 'Алахәылацәа',
@@ -230,8 +230,8 @@ $messages = array(
 'newpageletter' => 'Ҿ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Еимадоу ариашарақәа',
-'recentchangeslinked-feed'    => 'Еимадоу ариашарақәа',
+'recentchangeslinked' => 'Еимадоу ариашарақәа',
+'recentchangeslinked-feed' => 'Еимадоу ариашарақәа',
 'recentchangeslinked-toolbox' => 'Еимадоу ариашарақәа',
 
 # Upload
@@ -247,8 +247,8 @@ $messages = array(
 
 # Miscellaneous special pages
 'newpages-username' => 'Алахәыла:',
-'move'              => 'Ахьӡ аҧсахра',
-'movethispage'      => 'Ахьӡ аҧсахра ари адаҟьа',
+'move' => 'Ахьӡ аҧсахра',
+'movethispage' => 'Ахьӡ аҧсахра ари адаҟьа',
 
 # Special:Log
 'specialloguserlabel' => 'Алахәыла:',
@@ -260,21 +260,21 @@ $messages = array(
 'linksearch-ok' => 'Аҧшаара',
 
 # Watchlist
-'watchlist'   => 'Ашклаҧшра асна',
+'watchlist' => 'Ашклаҧшра асна',
 'mywatchlist' => 'Ашклаҧшра асна',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Ариашамҭа',
 
 # Contributions
-'mycontris'   => 'Салагала',
+'mycontris' => 'Салагала',
 'contribsub2' => 'Алагала $1 ($2)',
 
-'sp-contributions-talk'   => 'ахцәажәара',
+'sp-contributions-talk' => 'ахцәажәара',
 'sp-contributions-submit' => 'Аҧшаара',
 
 # What links here
-'whatlinkshere'      => 'Арахьтәи ахьарҧшқәа',
+'whatlinkshere' => 'Арахьтәи ахьарҧшқәа',
 'whatlinkshere-page' => 'Адаҟьа:',
 
 # Block/unblock
@@ -292,13 +292,13 @@ $messages = array(
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'зегьы',
 'namespacesall' => 'зегьы',
-'monthsall'     => 'зегьы',
+'monthsall' => 'зегьы',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-submit' => 'Аҧшаара',
 
 # Special:SpecialPages
-'specialpages'             => 'Цастәи адаҟьақәа',
+'specialpages' => 'Цастәи адаҟьақәа',
 'specialpages-group-login' => 'Урдырра / Арегистрациара',
 
 );
index 7803258..a770906 100644 (file)
@@ -336,7 +336,7 @@ $messages = array(
 'history_short' => 'Atra u likôt',
 'updatedmarker' => 'geuubah yoh seunaweue keuneulheueh lon phon kon',
 'printableversion' => 'Seunalén citak',
-'permalink' => 'Hubông teutap',
+'permalink' => 'Neuhubông teutap',
 'print' => 'Rakam',
 'view' => 'Beuet',
 'edit' => 'Andam',
@@ -354,13 +354,13 @@ $messages = array(
 'unprotectthispage' => 'Gantoe neulindông ôn nyoë',
 'newpage' => 'Ôn barô',
 'talkpage' => 'Peugah haba bhah ôn nyoë',
-'talkpagelinktext' => 'Peugah haba',
+'talkpagelinktext' => 'Marit',
 'specialpage' => 'Ôn kusuih',
 'personaltools' => 'Alat droë',
 'postcomment' => 'Beunagi baro',
 'articlepage' => 'Eu ôn asoë',
 'talk' => 'Peugah haba',
-'views' => 'Leumah',
+'views' => 'Ôn',
 'toolbox' => 'Plôk alat',
 'userpage' => 'Eu on ureueng nguy',
 'projectpage' => 'Eu ôn buët',
@@ -376,9 +376,14 @@ $messages = array(
 'lastmodifiedat' => 'Ôn nyoë keuneulheuëh geu’ubah bak $2, $1.',
 'viewcount' => 'On nyoe ka geusaweue {{PLURAL:$1|sigo|$sigo}}.<br />',
 'protectedpage' => 'Ôn teupeulindông',
-'jumpto' => 'Langsông u:',
+'jumpto' => 'Lansông u:',
 'jumptonavigation' => 'navigasi',
 'jumptosearch' => 'mita',
+'view-pool-error' => "Meu'ah, server teungoh sibuk jinoe
+Le that ureueng nyang meuh'eut jak eu on nyoe
+Neupreh si'at yoh goh neubaci lom
+
+$1",
 'pool-timeout' => 'Liwat watee preh gunci',
 'pool-queuefull' => 'Seunapat neupreh peunoh',
 'pool-errorunknown' => 'Salah hana meukon',
@@ -405,13 +410,21 @@ $messages = array(
 
 'badaccess' => 'Salah khut/hak tamöng',
 'badaccess-group0' => 'Droeneuh hana geupeuidin keu neupeulaku buet nyang neulakee',
+'badaccess-groups' => 'Buet nyang neulakee geupeubatah keu ureueng nguy lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.',
 
 'versionrequired' => 'Peureulee MediaWiki versi $1',
+'versionrequiredtext' => "MediaWiki versi $1 geupeureulee keu neunguy on nyoe. Neu'eu [[Special:Version|on versi]]",
 
-'retrievedfrom' => 'Meurumpok nibak "$1"',
+'ok' => 'Ka göt',
+'retrievedfrom' => 'Geurumpok nibak "$1"',
 'youhavenewmessages' => 'Droëneuh   na $1 ($2).',
 'newmessageslink' => 'peusan barô',
 'newmessagesdifflink' => 'neuubah keuneulheuëh',
+'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3||}}ureueng nguy la'en ($2).",
+'youhavenewmessagesmanyusers' => "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
+'newmessageslinkplural' => '{{PLURAL:$1|saboh peusan baro|peusan baro}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|neuubah|neuubah}} baro',
+'youhavenewmessagesmulti' => 'Droëneuh na padum boh peusan barô bak $1',
 'editsection' => 'andam',
 'editold' => 'andam',
 'viewsourceold' => 'Eu nè',
@@ -421,11 +434,21 @@ $messages = array(
 'toc' => 'Asoë',
 'showtoc' => 'peuleumah',
 'hidetoc' => 'peusom',
+'collapsible-collapse' => 'Peuubeut',
+'collapsible-expand' => 'Peuluwaih',
+'thisisdeleted' => 'Eu atawa peuriwang $1?',
+'viewdeleted' => 'Eu $1?',
+'restorelink' => '$1 {{PLURAL:$1|neuandam|neuandam}} nyang ka geusampoh',
+'feedlinks' => 'Umpeuen:',
+'feed-invalid' => 'Jeuneh neulakee umpeuen hana paih',
+'feed-unavailable' => 'Umpeuen sindikasi hana',
 'site-rss-feed' => 'Umpeuën RSS $1',
 'site-atom-feed' => 'Umpeuën Atôm $1',
 'page-rss-feed' => 'Umpeuën RSS "$1"',
 'page-atom-feed' => 'Umpeuën Atom "$1"',
 'red-link-title' => '$1 (ôn goh na)',
+'sort-descending' => 'Peuurot tren',
+'sort-ascending' => 'Peuurot ek',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Ôn',
@@ -439,15 +462,35 @@ $messages = array(
 'nstab-help' => 'Beunantu',
 'nstab-category' => 'Kawan',
 
+# Main script and global functions
+'nosuchaction' => 'Hana buet nyan',
+'nosuchactiontext' => 'Buet nyang geulakee le URL nyan hana sah. Droeneuh kadang salah neukeutik URL, atawa neuseutot saboh neuhubong nyang hana beutoy. Hay nyoe kadang jeuet keu lageuem saboh bug bak alat leumiek nyang geunguy le {{SITENAME}}.',
+'nosuchspecialpage' => 'Hana on kusuih lagee nyan',
+'nospecialpagetext' => '<strong>Droeneuh neulakee on kusuih nyang hana sah.</strong>',
+
 # General errors
 'error' => 'Seunalah',
 'databaseerror' => 'Kesalahan basis data',
+'dberrortext' => 'Na salah bak syntax neulakee basis data.
+Nyoe kadang tanda na saboh bug lam alat leumiek.
+Neulakee basis data keuneulheueh nakeuh:
+<blockquote><code>$1</code></blockquote>
+nibak function "<code>$2</code>".
+Basis data na salah "<samp>$3: $4</samp>".',
+'dberrortextcl' => 'Na salah sintaks bak neulakee basis data.
+Neulakee basis data nyang keuneulheueh nakeuh:
+"$1"
+nibak fungsi "$2"
+Basis data geupeuhase salah "$3: $4".',
+'laggedslavemode' => 'Peuneugah: On nyoe kadang hana neuubah baro',
 'missing-article' => 'Basis data h’an jeuët jiteumèë naseukah nibak ôn nyang sipatôtjih na, nakeuh "$1" $2.
 
 Nyoë biasajih sabab hubông useuëng u geunantoë away nyang ka teusampôh.
 
 Meunyo kön nyoë sababjih, Droëneuh kadang ka neuteumèë saboh bug lam software. Neutulông peugah bhah nyoë bak salah sidroë [[Special:ListUsers/sysop|Nyang urôh]], ngön neupeugah alamat URL nyang neusaweuë.',
 'missingarticle-rev' => '(revisi#: $1)',
+'internalerror' => 'Salah bak dalam',
+'internalerror_info' => 'Salah bak dalam: $1',
 'badtitle' => 'Nan hana sah',
 'badtitletext' => 'Nan ôn nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.',
 'viewsource' => 'Eu nè',
@@ -642,7 +685,7 @@ Alasan-alasan nyan hana geupeureumeuen.",
 'searchprofile-images-tooltip' => 'Mita beureukaih',
 'searchprofile-everything-tooltip' => 'Mita ban dum ôn asoë (rôh ôn marit)',
 'searchprofile-advanced-tooltip' => 'Mita bak ruweueng nan meupat-pat',
-'search-result-size' => '$1 ({{PLURAL:$2|1 kata|$2 kata}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1 narit|$2 narit}})',
 'search-result-category-size' => '{{PLURAL:$1|1 anggeeta|$1 anggeeta}} ({{PLURAL:$2|1 aneuk kawan|$2 aneuk kawan}}, {{PLURAL:$3|1 beureukaih|$3 beureukaih}})',
 'search-redirect' => '(peuninah $1)',
 'search-section' => '(bagian $1)',
@@ -650,8 +693,6 @@ Alasan-alasan nyan hana geupeureumeuen.",
 'search-interwiki-caption' => 'Buët la’én',
 'search-interwiki-default' => 'Hasé $1:',
 'search-interwiki-more' => '(lom)',
-'search-mwsuggest-enabled' => 'ngon saran',
-'search-mwsuggest-disabled' => 'hana saran',
 'searchrelated' => 'meusambat',
 'searchall' => 'ban dum',
 'showingresultsheader' => "{{PLURAL:$5|Hase '''$1''' nibak '''$3'''|Hase '''$1 - $2''' nibak '''$3'''}} keu '''$4'''",
@@ -732,7 +773,7 @@ Ceunatat: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = ôn barô,
 'recentchangeslinked-to' => 'Peuleumah neu’ubah nibak ôn-ôn nyang meusambông ngön ôn nyang geubri',
 
 # Upload
-'upload' => 'Peutamong',
+'upload' => 'Peutamong beureukaih',
 'uploadbtn' => 'Peutamong beureukah',
 'uploadlogpage' => 'Log peutamöng',
 'filedesc' => 'Ehtisa',
@@ -932,7 +973,7 @@ 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',
-'blanknamespace' => '(Utama)',
+'blanknamespace' => '(Keuë)',
 
 # Contributions
 'contributions' => 'Peuneugöt',
@@ -955,7 +996,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'sp-contributions-submit' => 'Mita',
 
 # What links here
-'whatlinkshere' => 'Hubông balék',
+'whatlinkshere' => 'Neuhubông balék',
 'whatlinkshere-title' => 'Ôn nyang na hubông u $1',
 'whatlinkshere-page' => 'Ôn:',
 'linkshere' => "Ôn-ôn nyoë meuhubông u '''[[:$1]]''':",
@@ -1033,10 +1074,10 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'tooltip-pt-preferences' => 'Atô',
 'tooltip-pt-watchlist' => 'Dapeuta ôn nyang lôn kalön',
 'tooltip-pt-mycontris' => 'Dapeuta peuneugöt Droëneuh',
-'tooltip-pt-login' => 'Droën geupeusaran keu tamong log, bahpih nyan hana geupeuwajéb.',
+'tooltip-pt-login' => 'Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.',
 'tooltip-pt-logout' => 'Teubiët',
 'tooltip-ca-talk' => 'Peugah haba ôn asoë',
-'tooltip-ca-edit' => 'Andam ôn nyoë. Nguy tumbôy euë dilèë yôh goh lom keumeubah.',
+'tooltip-ca-edit' => 'Droëneuh jeuët neuandam ôn nyoë. Neunguy tumbôy eu dilèë yôh goh neukeubah.',
 'tooltip-ca-addsection' => 'Puphôn beunagi barô',
 'tooltip-ca-viewsource' => 'Ôn nyoë geupeulindông.
 Droëneuh cit jeuët neu’eu nèjih.',
@@ -1046,24 +1087,24 @@ Droëneuh cit jeuët neu’eu nèjih.',
 'tooltip-ca-move' => 'Peupinah ôn nyoë',
 'tooltip-ca-watch' => 'Peutamah ôn nyoë u dapeuta kalön Droëneuh',
 'tooltip-ca-unwatch' => 'Sampôh ôn nyoë nibak dapeuta keunalön Droëneuh',
-'tooltip-search' => 'Mita lam {{SITENAME}} nyoë',
+'tooltip-search' => 'Mita {{SITENAME}}',
 'tooltip-search-go' => 'Mita saboh ôn ngon nan nyang peureuséh lagèë nyoë meunyo na',
 'tooltip-search-fulltext' => 'Mita ôn nyang na asoë lagèë nyoë',
 'tooltip-p-logo' => 'Saweuë Ôn Keuë',
 'tooltip-n-mainpage' => 'Jak u Ôn Keuë',
 'tooltip-n-mainpage-description' => 'Saweuë Ôn Keuë',
-'tooltip-n-portal' => 'Bhah buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
-'tooltip-n-currentevents' => 'Mita beurita nyang paléng barô',
+'tooltip-n-portal' => 'Bhaih buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
+'tooltip-n-currentevents' => 'Mita haba barô',
 'tooltip-n-recentchanges' => 'Dapeuta nyang ban meu’ubah lam wiki.',
 'tooltip-n-randompage' => 'Peuleumah beurangkari ôn',
 'tooltip-n-help' => 'Bak mita bantu.',
-'tooltip-t-whatlinkshere' => 'Dapeuta mandum ôn wiki nyang na hubông u ôn nyoë',
+'tooltip-t-whatlinkshere' => 'Dapeuta ban dum ôn wiki nyang na neuhubông u ôn nyoë',
 'tooltip-t-recentchangeslinked' => 'Neuubah barô ôn-ôn nyang na hubông u ôn nyoë',
 'tooltip-feed-rss' => 'Umpeuën RSS keu ôn nyoë',
 'tooltip-feed-atom' => 'Umpeuën Atom keu ôn nyoë',
 'tooltip-t-contributions' => 'Eu dapeuta nyang ka geutuléh lé ureuëng nguy nyoë',
 'tooltip-t-emailuser' => 'Kirém surat-e u ureuëng nguy nyoë',
-'tooltip-t-upload' => 'Peutamong gamba atawa beureukah alat',
+'tooltip-t-upload' => 'Peutamong beureukaih',
 'tooltip-t-specialpages' => 'Dapeuta ban dum ôn kusuih',
 'tooltip-t-print' => 'Seunalén citak ôn nyoë',
 'tooltip-t-permalink' => '
@@ -1165,4 +1206,7 @@ Data nyang la'én eunteuk teupeusom keudroë.
 # Special:Tags
 'tag-filter' => 'Filter [[Special:Tags|tag]]:',
 
+# Search suggestions
+'searchsuggest-search' => 'Mita',
+
 );
index 2e2ed5e..3aa6b1f 100644 (file)
@@ -417,7 +417,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''أنت الآن غير مسجل الدخول.'''
 
-تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو [[Special:UserLogin|الدخول مرة أخرى]] بنفس الاسم أو باسم آخر.
+تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.
 من الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
 'welcomecreation' => '== مرحبا، $1! ==
 تم إنشاء حسابك.
index fbb4d25..517745c 100644 (file)
@@ -48,65 +48,65 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#AANSTUUR', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GEENIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GEENGALERY__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__DWINGIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__IO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HUIDIGEJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HUIDIGETYD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HUIDIGEUUR', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'AANTALBLADSYE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AANTALARTIKELS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AANTALLêERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'VOLBLADSYNAAM', 'FULLPAGENAME' ),
-       'img_thumbnail'           => array( '1', 'duimnael', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'regs', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'geen', 'none' ),
-       'img_center'              => array( '1', 'senter', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'omraam', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'raamloos', 'frameless' ),
-       'img_border'              => array( '1', 'raam', 'border' ),
-       'img_top'                 => array( '1', 'bo', 'top' ),
-       'img_text_top'            => array( '1', 'teks-bo', 'text-top' ),
-       'img_middle'              => array( '1', 'middel', 'middle' ),
-       'img_bottom'              => array( '1', 'onder', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'teks-onder', 'text-bottom' ),
-       'img_link'                => array( '1', 'skakel=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'WERFNAAM', 'SITENAME' ),
-       'server'                  => array( '0', 'BEDIENER', 'SERVER' ),
-       'servername'              => array( '0', 'BEDIENERNAAM', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'GESLAG:', 'GENDER:' ),
-       'localweek'               => array( '1', 'HUIDIGEWEEK', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'MEERVOUD', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'VOLURL', 'FULLURL:' ),
-       'displaytitle'            => array( '1', 'VERTOONTITEL', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'HUIDIGEWEERGAWE', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'spesiaal', 'special' ),
-       'filepath'                => array( '0', 'LêERPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'tag' ),
-       'pagesize'                => array( '1', 'BLADSYGROOTTE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__GEENINDEKS__', '__NOINDEX__' ),
-       'url_path'                => array( '0', 'PAD', 'PATH' ),
+       'redirect'                  => array( '0', '#AANSTUUR', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GEENIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GEENGALERY__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__DWINGIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__IO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HUIDIGEJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HUIDIGETYD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HUIDIGEUUR', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'AANTALBLADSYE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AANTALARTIKELS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AANTALLêERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'VOLBLADSYNAAM', 'FULLPAGENAME' ),
+       'img_thumbnail'             => array( '1', 'duimnael', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'regs', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'geen', 'none' ),
+       'img_center'                => array( '1', 'senter', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'omraam', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'raamloos', 'frameless' ),
+       'img_border'                => array( '1', 'raam', 'border' ),
+       'img_top'                   => array( '1', 'bo', 'top' ),
+       'img_text_top'              => array( '1', 'teks-bo', 'text-top' ),
+       'img_middle'                => array( '1', 'middel', 'middle' ),
+       'img_bottom'                => array( '1', 'onder', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'teks-onder', 'text-bottom' ),
+       'img_link'                  => array( '1', 'skakel=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'WERFNAAM', 'SITENAME' ),
+       'server'                    => array( '0', 'BEDIENER', 'SERVER' ),
+       'servername'                => array( '0', 'BEDIENERNAAM', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'GESLAG:', 'GENDER:' ),
+       'localweek'                 => array( '1', 'HUIDIGEWEEK', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'MEERVOUD', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'VOLURL', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'VERTOONTITEL', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'HUIDIGEWEERGAWE', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'spesiaal', 'special' ),
+       'filepath'                  => array( '0', 'LêERPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'tag' ),
+       'pagesize'                  => array( '1', 'BLADSYGROOTTE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__GEENINDEKS__', '__NOINDEX__' ),
+       'url_path'                  => array( '0', 'PAD', 'PATH' ),
 );
 
 $specialPageAliases = array(
@@ -526,12 +526,12 @@ Dit kan ook dui op 'n fout in die sagteware van {{SITENAME}}.",
 # General errors
 'error' => 'Fout',
 'databaseerror' => 'Databasisfout',
-'dberrortext' => 'Sintaksisfout in databasisnavraag.
+'dberrortext' => 'Daar was \'n sintaksisfout in die databasisnavraag.
 Dit kan moontlik dui op \'n fout in die sagteware.
 Die laaste navraag was:
-<blockquote><tt>$1</tt></blockquote>
-vanuit funksie "<tt>$2</tt>".
-Databasis gee foutboodskap "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+vanuit funksie "<code>$2</code>".
+Databasis gee foutboodskap "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Sintaksisfout in databasisnavraag.
 Die laaste navraag was:
 "$1"
@@ -616,7 +616,7 @@ Die rede hiervoor is "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''U is nou uitgeteken'''
 
-U kan aanhou om {{SITENAME}} anoniem te gebruik; of u kan weer [[Special:UserLogin|inteken]] as dieselfde of 'n ander gebruiker.
+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;
@@ -880,7 +880,6 @@ Die laaste inskrywing in die blokkeerlogboek word hieronder vertoon:',
 * '''Firefox / Safari:''' hou ''Shift'' en kliek ''Reload'', of druk ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-R'' op 'n Mac)
 * '''Google Chrome:''' druk ''Ctrl-Shift-R'' (''⌘-Shift-R'' op 'n Mac)
 * '''Internet Explorer:''' hou ''Ctrl'' en kliek ''Refresh'', of druk ''Ctrl-F5''
-* '''Konqueror:''' kliek ''Reload'' of druk ''F5''
 * '''Opera:''' maak die kas skoon by ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe CSS te toets voor u dit stoor.",
 'userjsyoucanpreview' => "'''Wenk:''' Gebruik die \"{{int:showpreview}}\"-knoppie om u nuwe JS te toets voor u dit stoor.",
@@ -1230,8 +1229,6 @@ Details kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} s
 'search-interwiki-caption' => 'Suster projekte',
 'search-interwiki-default' => '$1 resultate:',
 'search-interwiki-more' => '(meer)',
-'search-mwsuggest-enabled' => 'met voorstelle',
-'search-mwsuggest-disabled' => 'geen voorstelle',
 'search-relatedarticle' => 'Verwante',
 'mwsuggest-disable' => 'Deaktiveer AJAX-voorstelle',
 'searcheverything-enable' => 'Soek in alle naamruimtes',
@@ -2867,7 +2864,6 @@ Die lêer is slegs gedeeltelik opgelaai.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript toetsing',
-'javascripttest-disabled' => 'Die funksie is nie op hierdie wiki geaktiveer nie.',
 'javascripttest-title' => 'Voer toetse uit vir $1',
 'javascripttest-pagetext-noframework' => 'Hierdie bladsy is gereserveer vir die uitvoer van JavaScript-toetse.',
 'javascripttest-pagetext-unknownframework' => 'Onbekende toetsraamwerk "$1".',
@@ -2976,11 +2972,11 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 
 # Info page
 'pageinfo-title' => 'Inligting oor "$1"',
-'pageinfo-header-edits' => 'Wysigings',
+'pageinfo-header-edits' => 'Wysigingsgeskiedenis',
 'pageinfo-views' => 'Aantal kere gewys',
 'pageinfo-watchers' => 'Aantal dophouers',
-'pageinfo-edits' => 'Aantal wysigings',
-'pageinfo-authors' => 'Aantal verskillende outeurs',
+'pageinfo-edits' => 'Totale aantal wysigings',
+'pageinfo-authors' => 'Totale aantal verskillende outeurs',
 
 # Skin names
 'skinname-standard' => 'Standaard',
@@ -3825,6 +3821,10 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 'feedback-bugcheck' => 'Gaaf! Kontroleer of dit nie dalk een van die [$1 bekende foute] is nie.',
 'feedback-bugnew' => "Ek het gekontroleer. Rapporteer 'n nuwe fout.",
 
+# Search suggestions
+'searchsuggest-search' => 'Soek',
+'searchsuggest-containing' => 'bevat...',
+
 # API errors
 'api-error-badaccess-groups' => 'U word nie toegelaat om lêers te laai op hierdie wiki.',
 'api-error-badtoken' => 'Interne fout: slegte teken.',
index 0c96ecb..bb3265b 100644 (file)
  * @author Paa.kwesi
  */
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Spesial',
+       NS_TALK             => 'Nkɔmbɔ',
+       NS_USER             => 'User',
+       NS_USER_TALK        => 'User_nkɔmbɔ',
+       NS_PROJECT_TALK     => '$1_nkɔmbɔ',
+       NS_FILE             => 'Fayl',
+       NS_FILE_TALK        => 'Fayl_nkɔmbɔ',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_nkɔmbɔ',
+       NS_TEMPLATE         => 'Şablon',
+       NS_TEMPLATE_TALK    => 'Şablon_nkɔmbɔ',
+       NS_HELP             => 'Help',
+       NS_HELP_TALK        => 'Help_nkɔmbɔ',
+       NS_CATEGORY         => 'Kategori',
+       NS_CATEGORY_TALK    => 'Kategori_nkɔmbɔ',
+);
+
 $messages = array(
 # User preference toggles
-'tog-underline'             => 'Twa lenk nyina ase:',
-'tog-justify'               => 'Gyastefae mparagraf',
-'tog-hideminor'             => 'Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa',
-'tog-hidepatrolled'         => 'Suma nsesae a wɔapatrole wɔn ndansa yi ara',
+'tog-underline' => 'Twa lenk nyina ase:',
+'tog-justify' => 'Gyastefae mparagraf',
+'tog-hideminor' => 'Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa',
+'tog-hidepatrolled' => 'Suma nsesae a wɔapatrole wɔn ndansa yi ara',
 'tog-newpageshidepatrolled' => 'Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so',
-'tog-extendwatchlist'       => 'San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so',
-'tog-usenewrc'              => 'Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)',
-'tog-numberheadings'        => 'Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba',
-'tog-showtoolbar'           => 'Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)',
-'tog-editondblclick'        => 'Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)',
+'tog-extendwatchlist' => 'San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so',
+'tog-usenewrc' => 'Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)',
+'tog-numberheadings' => 'Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba',
+'tog-showtoolbar' => 'Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)',
+'tog-editondblclick' => 'Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)',
 
 # Dates
-'sunday'    => 'Kwasiada',
-'monday'    => 'Ɛdwoada',
-'tuesday'   => 'Ɛbenada',
+'sunday' => 'Kwasiada',
+'monday' => 'Ɛdwoada',
+'tuesday' => 'Ɛbenada',
 'wednesday' => 'Wukuada',
-'thursday'  => 'Yawoada',
-'friday'    => 'Efiada',
-'saturday'  => 'Memeneda',
-'january'   => 'Ɔpɛpɔn',
-'february'  => 'Ɔgyefuo',
-'march'     => 'Ɔbenem',
-'april'     => 'Oforisuo',
-'may_long'  => 'Kɔtonimma',
-'june'      => 'Ayɛwohomumu',
-'july'      => 'Kutawonsa',
-'august'    => 'Ɔsannaa',
+'thursday' => 'Yawoada',
+'friday' => 'Efiada',
+'saturday' => 'Memeneda',
+'january' => 'Ɔpɛpɔn',
+'february' => 'Ɔgyefuo',
+'march' => 'Ɔbenem',
+'april' => 'Oforisuo',
+'may_long' => 'Kɔtonimma',
+'june' => 'Ayɛwohomumu',
+'july' => 'Kutawonsa',
+'august' => 'Ɔsannaa',
 'september' => 'Ɛbɔ',
-'october'   => 'Ahinime',
-'november'  => 'Obubuo',
-'december'  => 'Ɔpenimma',
+'october' => 'Ahinime',
+'november' => 'Obubuo',
+'december' => 'Ɔpenimma',
 
 # Categories related messages
 'listingcontinuesabbrev' => 'toa so',
 
-'search'           => 'Hwehwɛ',
-'searchbutton'     => 'Hwehwɛ',
-'go'               => 'Kɔ',
-'searcharticle'    => 'Kɔ',
-'history'          => 'Krataafa abakɔsɛm',
-'history_short'    => 'Abakɔsɛm',
+'search' => 'Hwehwɛ',
+'searchbutton' => 'Hwehwɛ',
+'go' => 'Kɔ',
+'searcharticle' => 'Kɔ',
+'history' => 'Krataafa abakɔsɛm',
+'history_short' => 'Abakɔsɛm',
 'talkpagelinktext' => 'Kasa',
-'talk'             => 'Nkɔmbɔ',
-'jumptosearch'     => 'hwehwɛ',
+'talk' => 'Nkɔmbɔ',
+'jumptosearch' => 'hwehwɛ',
 
 # 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' => 'Fa {{SITENAME}} ho',
-'mainpage'  => 'Krataafa Titiriw',
+'mainpage' => 'Krataafa Titiriw',
 
-'editsection'     => 'sesa',
+'editsection' => 'sesa',
 'editsectionhint' => 'Sesa sɛkhyɛn: $1',
-'red-link-title'  => '$1 (krataafa nni hɔ)',
+'red-link-title' => '$1 (krataafa nni hɔ)',
 
 # Login and logout pages
-'login'                   => 'Bra mu',
+'login' => 'Bra mu',
 'nav-login-createaccount' => 'Bra mu / yɛ akawnt',
-'userlogin'               => 'Bra mu / yɛ akawnt',
-'logout'                  => 'Pue',
-'userlogout'              => 'Pue',
-'notloggedin'             => 'Mmbaa mu',
-'nologin'                 => 'Wo nni akawnt anaa? $1.',
+'userlogin' => 'Bra mu / yɛ akawnt',
+'logout' => 'Pue',
+'userlogout' => 'Pue',
+'notloggedin' => 'Mmbaa mu',
+'nologin' => 'Wo nni akawnt anaa? $1.',
 
 # Search results
 'powersearch' => 'Hwehwɛ',
index 688a179..a94eac8 100644 (file)
@@ -54,16 +54,16 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'MUEJIAKTUAL', 'MUEJIAKTUAL2', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MUEJIAKTUAL1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'EMNIMUEJITAKTUAL', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
-       'currenttime'             => array( '1', 'KOHATASH', 'KOHATANI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORATASH', 'ORATANI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MUEJILOKAL', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'img_center'              => array( '1', 'qendër', 'qendrore', 'qëndër', 'qëndrore', 'center', 'centre' ),
-       'img_baseline'            => array( '1', 'vijabazë', 'linjabazë', 'baseline' ),
-       'servername'              => array( '0', 'EMNISERVERIT', 'EMRIISERVERIT', 'SERVERNAME' ),
-       'currentweek'             => array( '1', 'JAVAAKTUALE', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
+       'currentmonth'              => array( '1', 'MUEJIAKTUAL', 'MUEJIAKTUAL2', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MUEJIAKTUAL1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'EMNIMUEJITAKTUAL', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
+       'currenttime'               => array( '1', 'KOHATASH', 'KOHATANI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORATASH', 'ORATANI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MUEJILOKAL', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'img_center'                => array( '1', 'qendër', 'qendrore', 'qëndër', 'qëndrore', 'center', 'centre' ),
+       'img_baseline'              => array( '1', 'vijabazë', 'linjabazë', 'baseline' ),
+       'servername'                => array( '0', 'EMNISERVERIT', 'EMRIISERVERIT', 'SERVERNAME' ),
+       'currentweek'               => array( '1', 'JAVAAKTUALE', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
 );
 
 $messages = array(
@@ -451,7 +451,7 @@ Arsyeja e dhânë âsht "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Jeni çlajmërue.'''
 
-Mundeni me vazhdue me shfrytëzue {{SITENAME}} në mënyrë anonime, apo mundeni [[Special:UserLogin|me u kyçë]] si përdoruesi i njêjtë apo si nji tjetër.
+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! ==
 
@@ -929,8 +929,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'search-interwiki-caption' => 'Projektet simotra',
 'search-interwiki-default' => '$1 rezultate:',
 'search-interwiki-more' => '(mâ shumë)',
-'search-mwsuggest-enabled' => 'me parahedhje',
-'search-mwsuggest-disabled' => "s'ka parahedhje",
 'search-relatedarticle' => 'Të ngjajshme',
 'mwsuggest-disable' => 'Deaktivizo sygjerimet me AJAX',
 'searcheverything-enable' => 'Kërko në tâna hapësinat',
@@ -1621,4 +1619,8 @@ Tjerat kanë me mbetë të mshefuna.
 'revdelete-restricted' => 'u vendosën kufizime për administruesit',
 'revdelete-unrestricted' => 'u hoqën kufizimet për administruesit',
 
+# Search suggestions
+'searchsuggest-search' => 'Kërkim',
+'searchsuggest-containing' => 'përmban ...',
+
 );
index 22468f8..06124d0 100644 (file)
@@ -197,7 +197,7 @@ $messages = array(
 'vector-action-unprotect' => 'አለመቆለፍ',
 'vector-view-create' => 'አዲስ ፍጠር',
 'vector-view-edit' => 'አርም',
-'vector-view-history' => ' ታሪኩን አሳይ',
+'vector-view-history' => 'ታሪኩን አሳይ',
 'vector-view-view' => 'ለማንበብ',
 'vector-view-viewsource' => 'ጥሬ ኮድ ለመመልከት',
 
@@ -736,8 +736,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'search-interwiki-caption' => 'ተዛማጅ ስራዎች',
 'search-interwiki-default' => '$1 ውጤቶች፦',
 'search-interwiki-more' => '(ተጨማሪ)',
-'search-mwsuggest-enabled' => 'ከ አማራጮች ጋር',
-'search-mwsuggest-disabled' => 'አማራጭ አልተገኘለትም',
 'search-relatedarticle' => 'የተዛመደ',
 'searchrelated' => 'የተዛመደ',
 'searchall' => 'ሁሉ',
@@ -946,6 +944,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'recentchanges-legend' => 'የቅርብ ለውጥ አማራጮች፦',
 'recentchanges-summary' => 'በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።',
 'recentchanges-feed-description' => 'በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ',
+'recentchanges-label-minor' => 'ይህ ለውጥ ጥቃቅን ነው።',
 'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
 'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
 'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
@@ -2267,6 +2266,10 @@ $3
 # New logging system
 'newuserlog-byemail' => 'ማለፊያ-ቃል በኤ-መልዕክት ተልኳል',
 
+# Search suggestions
+'searchsuggest-search' => 'ፈልግ',
+'searchsuggest-containing' => 'በመጣጥፎች ይዘት ለመፈልግ...',
+
 # API errors
 'api-error-badaccess-groups' => 'እርስዎ በዚህ ውኪ ላይ ፋይል እንድሊኩ አልተፈቀደም።',
 'api-error-badtoken' => 'የውስጥ ስህተት: መጥፎ ጥቅል።',
index ad39818..491b186 100644 (file)
@@ -47,16 +47,16 @@ $namespaceAliases = array(
 $namespaceGenderAliases = array();
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ENDRECERA', '#REENDRECERA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'namespace'               => array( '1', 'ESPACIODENOMBRES', 'ESPACIODENOMBRE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACIODENOMBRESE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
-       'img_right'               => array( '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ),
-       'img_left'                => array( '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ),
-       'ns'                      => array( '0', 'EN:', 'EDN:', 'NS:' ),
-       'displaytitle'            => array( '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#LUENGA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'especial', 'espezial', 'special' ),
+       'redirect'                  => array( '0', '#ENDRECERA', '#REENDRECERA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'namespace'                 => array( '1', 'ESPACIODENOMBRES', 'ESPACIODENOMBRE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACIODENOMBRESE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
+       'img_right'                 => array( '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ),
+       'img_left'                  => array( '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ),
+       'ns'                        => array( '0', 'EN:', 'EDN:', 'NS:' ),
+       'displaytitle'              => array( '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#LUENGA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'especial', 'espezial', 'special' ),
 );
 
 $specialPageAliases = array(
@@ -522,7 +522,7 @@ A razón data ye ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Ha rematato a sesión.'''
 
-Puede continar navegando por {{SITENAME}} anonimament, u puede [[Special:UserLogin|encetar]] 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.",
+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}}]].",
@@ -1085,8 +1085,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
 'search-interwiki-caption' => 'Prochectos chermans',
 'search-interwiki-default' => '$1 resultaus:',
 'search-interwiki-more' => '(más)',
-'search-mwsuggest-enabled' => 'con socherencias',
-'search-mwsuggest-disabled' => 'garra socherencia',
 'search-relatedarticle' => 'Relacionato',
 'mwsuggest-disable' => "Desactivar as socherencias d'AJAX",
 'searcheverything-enable' => 'Mirar en totz os espacios de nombres',
@@ -2651,7 +2649,6 @@ Alce-lo en o suyo ordenador y cargue-lo aquí.",
 
 # JavaScriptTest
 'javascripttest' => 'Prebatinas de JavaScript',
-'javascripttest-disabled' => 'Ista función ye desactivata.',
 'javascripttest-title' => 'Fendo as prebas de $1',
 'javascripttest-pagetext-noframework' => 'Ista pachina ye reservada ta fer as prebas de JavaScrip.',
 'javascripttest-pagetext-unknownframework' => 'Bastida de prebas "$1" desconoixida.',
@@ -3633,6 +3630,10 @@ Si no, puet usar o siguient formulario. O suyo comentario será adhibiu a la pac
 'feedback-bugcheck' => 'Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].',
 'feedback-bugnew' => "L'he comprebau. Informar d'un nuevo fallo.",
 
+# Search suggestions
+'searchsuggest-search' => 'Mirar',
+'searchsuggest-containing' => 'que contién...',
+
 # API errors
 'api-error-badaccess-groups' => 'No puetz cargar fichers en iste wiki.',
 'api-error-badtoken' => 'Error interna: Simbolo incorrecto.',
index 6c4919e..3b55cfb 100644 (file)
@@ -359,7 +359,7 @@ Cȳþþuhord edƿende ƿōh "<tt>$3: $4</tt>"',
 # Login and logout pages
 'logouttext' => "'''Þū eart nū ūtmeldod.'''
 
-Þū canst ætfeolan tō brūcenne {{SITENAME}} ungecūðe, oþþe þū canst [[Special:UserLogin|inmeldian eft]] tō ylcan oþþe ōðrum brūcende.
+Þū 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! ==
 
@@ -568,8 +568,6 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'search-interwiki-caption' => 'Sƿeostorƿeorc',
 'search-interwiki-default' => '$1 becymas:',
 'search-interwiki-more' => '(mā)',
-'search-mwsuggest-enabled' => 'mid teohhungum',
-'search-mwsuggest-disabled' => 'nān teohhunga',
 'searchrelated' => 'ȝesibbed',
 'searchall' => 'eall',
 'showingresults' => 'Īewan under oþ <b>$1</b> tōhīgunga onginnenda mid #<b>$2</b>.',
index 0a34a77..8d82e18 100644 (file)
@@ -300,8 +300,6 @@ Hindi (hi)फ़िलहाल इस पन्ने पर कोई सा
 'search-interwiki-caption' => 'अन्य प्रकल्प',
 'search-interwiki-default' => '$1 के रिज़ल्ट:',
 'search-interwiki-more' => '(आरू)',
-'search-mwsuggest-enabled' => 'सुझाव सहित',
-'search-mwsuggest-disabled' => 'कोनो सुझाव नै',
 'nonefound' => "'''सूचना''': मूलतः कुछ ही नामस्थानॊ मॆं खोजलॊ जाय छै. अगर आपने कॆ सब नामस्थानॊ मॆं खोजना छै तॆ खोजशब्दॊ के पहले ''all:'' लगायकॆ खोजै के कोशिश करॊ या फिर कोनो नामस्थान के नाम लिखॊ.",
 'powersearch' => 'उन्नत खोज',
 'powersearch-legend' => 'उन्नत खोज',
index f18996b..a378245 100644 (file)
@@ -187,158 +187,166 @@ $namespaceGenderAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تحويل', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__لافهرس__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__لامعرض__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرس__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__لاعنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'شهر_حالي', 'شهر_حالي2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'اسم_الشهر_الحالي_المولد', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'اختصار_الشهر_الحالي', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'يوم_حالي', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'يوم_حالي2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'عام_حالي', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'وقت_حالي', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'شهر_محلي', 'شهر_محلي2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'شهر_محلي1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'اسم_الشهر_المحلي', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'اسم_الشهر_المحلي_المولد', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'اختصار_الشهر_المحلي', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'يوم_محلي', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'يوم_محلي2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'اسم_اليوم_المحلي', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'عام_محلي', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'وقت_محلي', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ساعة_محلية', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'عدد_الصفحات', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'عدد_المقالات', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'عدد_الملفات', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نطاق', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'رسالة:', 'MSG:' ),
-       'subst'                   => array( '0', 'نسخ:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'تصغير', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'يمين', 'right' ),
-       'img_left'                => array( '1', 'يسار', 'left' ),
-       'img_none'                => array( '1', 'بدون', 'بلا', 'none' ),
-       'img_width'               => array( '1', '$1بك', '$1عن', '$1px' ),
-       'img_center'              => array( '1', 'مركز', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'لاإطار', 'frameless' ),
-       'img_page'                => array( '1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'حدود', 'border' ),
-       'img_baseline'            => array( '1', 'خط_أساسي', 'baseline' ),
-       'img_sub'                 => array( '1', 'فرعي', 'sub' ),
-       'img_super'               => array( '1', 'سوبر', 'سب', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'أعلى', 'top' ),
-       'img_text_top'            => array( '1', 'نص_أعلى', 'text-top' ),
-       'img_middle'              => array( '1', 'وسط', 'middle' ),
-       'img_bottom'              => array( '1', 'أسفل', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'نص_أسفل', 'text-bottom' ),
-       'img_link'                => array( '1', 'وصلة=$1', 'رابط=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'بديل=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'محتوى:', 'INT:' ),
-       'sitename'                => array( '1', 'اسم_الموقع', 'SITENAME' ),
-       'ns'                      => array( '0', 'نط:', 'NS:' ),
-       'nse'                     => array( '0', 'نطم:', 'NSE:' ),
-       'localurl'                => array( '0', 'مسار_محلي:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'مسار_المقالة', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'خادم', 'SERVER' ),
-       'servername'              => array( '0', 'اسم_الخادم', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'مسار_الهيئة', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'قواعد_اللغة:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'نوع:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__لاتحويل_عنوان__', '__لاتع__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__لاتحويل_محتوى__', '__لاتم__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'أسبوع_حالي', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'يوم_حالي_مأ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'أسبوع_محلي', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'يوم_محلي_مأ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'رقم_المراجعة', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'جمع:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'عنوان_قاعدة:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'مسار_قاعدة:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'صغير:', 'LC:' ),
-       'uc'                      => array( '0', 'كبير:', 'UC:' ),
-       'raw'                     => array( '0', 'خام:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'أر', 'آر', 'R' ),
-       'newsectionlink'          => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'كود_المسار:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'كود_الأنكور', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'طابع_الوقت_الحالي', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'طابع_الوقت_المحلي', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'علامة_الاتجاه', 'علامة_اتجاه', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#لغة:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'لغة_المحتوى', 'لغة_محتوى', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'صفحات_في_نطاق:', 'صفحات_في_نط:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'عدد_الإداريين', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'صيغة_رقم', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'باد_يسار', 'PADLEFT' ),
-       'padright'                => array( '0', 'باد_يمين', 'PADRIGHT' ),
-       'special'                 => array( '0', 'خاص', 'special' ),
-       'defaultsort'             => array( '1', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'وسم', 'tag' ),
-       'hiddencat'               => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'حجم_الصفحة', 'PAGESIZE' ),
-       'index'                   => array( '1', '__فهرسة__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__لافهرسة__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'مسار', 'PATH' ),
-       'url_wiki'                => array( '0', 'ويكي', 'WIKI' ),
-       'url_query'               => array( '0', 'استعلام', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'لاخطأ', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'لاتستبدل', 'noreplace' ),
+       'redirect'                  => array( '0', '#تحويل', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__لافهرس__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__لامعرض__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'شهر_حالي', 'شهر_حالي2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'اسم_الشهر_الحالي_المولد', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'اختصار_الشهر_الحالي', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'يوم_حالي', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'يوم_حالي2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'عام_حالي', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'وقت_حالي', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'شهر_محلي', 'شهر_محلي2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'شهر_محلي1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'اسم_الشهر_المحلي', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'اسم_الشهر_المحلي_المولد', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'اختصار_الشهر_المحلي', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'يوم_محلي', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'يوم_محلي2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'اسم_اليوم_المحلي', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'عام_محلي', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'وقت_محلي', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ساعة_محلية', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'عدد_الصفحات', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'عدد_المقالات', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'عدد_الملفات', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نطاق', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'عدد_نطاق', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'رسالة:', 'MSG:' ),
+       'subst'                     => array( '0', 'نسخ:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'تصغير', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'يمين', 'right' ),
+       'img_left'                  => array( '1', 'يسار', 'left' ),
+       'img_none'                  => array( '1', 'بدون', 'بلا', 'none' ),
+       'img_width'                 => array( '1', '$1بك', '$1عن', '$1px' ),
+       'img_center'                => array( '1', 'مركز', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'لاإطار', 'frameless' ),
+       'img_page'                  => array( '1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'حدود', 'border' ),
+       'img_baseline'              => array( '1', 'خط_أساسي', 'baseline' ),
+       'img_sub'                   => array( '1', 'فرعي', 'sub' ),
+       'img_super'                 => array( '1', 'سوبر', 'سب', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'أعلى', 'top' ),
+       'img_text_top'              => array( '1', 'نص_أعلى', 'text-top' ),
+       'img_middle'                => array( '1', 'وسط', 'middle' ),
+       'img_bottom'                => array( '1', 'أسفل', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'نص_أسفل', 'text-bottom' ),
+       'img_link'                  => array( '1', 'وصلة=$1', 'رابط=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'بديل=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', 'رتبة=$1', 'class=$1' ),
+       'int'                       => array( '0', 'محتوى:', 'INT:' ),
+       'sitename'                  => array( '1', 'اسم_الموقع', 'SITENAME' ),
+       'ns'                        => array( '0', 'نط:', 'NS:' ),
+       'nse'                       => array( '0', 'نطم:', 'NSE:' ),
+       'localurl'                  => array( '0', 'مسار_محلي:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'مسار_المقالة', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'رقم_صفحة', 'PAGEID' ),
+       'server'                    => array( '0', 'خادم', 'SERVER' ),
+       'servername'                => array( '0', 'اسم_الخادم', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'مسار_الهيئة', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'قواعد_اللغة:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'نوع:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__لاتحويل_عنوان__', '__لاتع__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__لاتحويل_محتوى__', '__لاتم__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'أسبوع_حالي', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'يوم_حالي_مأ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'أسبوع_محلي', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'يوم_محلي_مأ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'رقم_المراجعة', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'عنوان_قاعدة:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'مسار_قاعدة:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'صغير:', 'LC:' ),
+       'uc'                        => array( '0', 'كبير:', 'UC:' ),
+       'raw'                       => array( '0', 'خام:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'أر', 'آر', 'R' ),
+       'newsectionlink'            => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'كود_المسار:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'كود_الأنكور', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'طابع_الوقت_الحالي', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'طابع_الوقت_المحلي', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'علامة_الاتجاه', 'علامة_اتجاه', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#لغة:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'لغة_المحتوى', 'لغة_محتوى', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'صفحات_في_نطاق:', 'صفحات_في_نط:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'عدد_الإداريين', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'صيغة_رقم', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'باد_يسار', 'PADLEFT' ),
+       'padright'                  => array( '0', 'باد_يمين', 'PADRIGHT' ),
+       'special'                   => array( '0', 'خاص', 'special' ),
+       'speciale'                  => array( '0', 'عنوان_خاص', 'speciale' ),
+       'defaultsort'               => array( '1', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'وسم', 'tag' ),
+       'hiddencat'                 => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'حجم_الصفحة', 'PAGESIZE' ),
+       'index'                     => array( '1', '__فهرسة__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__لافهرسة__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'مسار', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ويكي', 'WIKI' ),
+       'url_query'                 => array( '0', 'استعلام', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'لاخطأ', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'لاتستبدل', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'كل', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'صفحات', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'تصنيفات_فرعية', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'ملفات', 'files' ),
 );
 
 $specialPageAliases = array(
@@ -388,6 +396,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'بحث_ميم' ),
        'Mostcategories'            => array( 'الأكثر_تصنيفا' ),
        'Mostimages'                => array( 'أكثر_الملفات_وصلا', 'أكثر_الملفات', 'أكثر_الصور' ),
+       'Mostinterwikis'            => array( 'الأكثر_إنترويكي' ),
        'Mostlinked'                => array( 'أكثر_الصفحات_وصلا', 'الأكثر_وصلا' ),
        'Mostlinkedcategories'      => array( 'أكثر_التصنيفات_وصلا', 'أكثر_التصنيفات_استخداما' ),
        'Mostlinkedtemplates'       => array( 'أكثر_القوالب_وصلا', 'أكثر_القوالب_استخداما' ),
@@ -842,10 +851,11 @@ $1',
 'protectedpagetext' => 'هذه الصفحة تمت حمايتها لمنع التعديل.',
 'viewsourcetext' => 'يمكنك رؤية ونسخ مصدر هذه الصفحة:',
 'viewyourtext' => "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
-'protectedinterface' => 'هذه الصفحة توفر نص الواجهة للبرنامج، وهي مقفلة لمنع التخريب.',
+'protectedinterface' => 'توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.
+لإضافة أو تغيير الترجمات لجميع مشاريع الويكي، رجاءً أستخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.',
 'editinginterface' => "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.
-سوف تؤثر التغييرات على هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين.
لترجمات، من فضلك استخدم مشروع ترجمة ميدياويكي [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+سوف تؤثر التغييرات في هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين على هذا الويكي.
إضافة أو تغيير الترجمات في جميع مشاريع الويكي، رجاءً استخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
 'sqlhidden' => '(استعلام SQL مخفي)',
 'cascadeprotected' => 'تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية "حماية الصفحات المدمجة" {{PLURAL:$1||بها|بهما|بها}}:
 $2',
@@ -871,7 +881,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''أنت الآن غير مسجل الدخول.'''
 
-تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو [[Special:UserLogin|الدخول مرة أخرى]] بنفس الاسم أو باسم آخر.
+تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.
 من الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
 'welcomecreation' => '== مرحبا، $1! ==
 تم إنشاء حسابك.
@@ -916,7 +926,7 @@ $2',
 تأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.',
 'noname' => 'لم تحدد اسم مستخدم صحيح.',
 'loginsuccesstitle' => 'تم الدخول بشكل صحيح',
-'loginsuccess' => "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"\$1\".'''",
+'loginsuccess' => "'''لقد سجلت الدخول ل{{SITENAME}} باسم \"\$1\".'''",
 'nosuchuser' => 'لا يوجد مستخدم بالاسم "$1".
 أسماء المستخدمين حساسة لحالة الحروف.
 تأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].',
@@ -1133,7 +1143,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}}" غير موجودة.
 
 هذا يحدث عادة عن طريق اتباع وصلة تاريخ قديمة لصفحة تم حذفها.
@@ -1408,8 +1419,9 @@ $1",
 'revdelete-only-restricted' => 'خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.',
 'revdelete-reason-dropdown' => '* أسباب حذف عامة
 ** خرق لحقوق النشر
-** معلومات شخصية غير ملائمة
-**معلومات تشهيرية محتملة',
+** تعليق أو معلومات شخصية غير ملائمة
+** اسم مستخدم غير ملائم
+** معلومات تشهيرية محتملة',
 'revdelete-otherreason' => 'سبب آخر/إضافي:',
 'revdelete-reasonotherlist' => 'سبب آخر',
 'revdelete-edit-reasonlist' => 'عدل أسباب الحذف',
@@ -1508,8 +1520,6 @@ $1",
 'search-interwiki-caption' => 'المشاريع الشقيقة',
 'search-interwiki-default' => '$1 نتيجة:',
 'search-interwiki-more' => '(المزيد)',
-'search-mwsuggest-enabled' => 'مع اقتراحات',
-'search-mwsuggest-disabled' => 'لا اقتراحات',
 'search-relatedarticle' => 'مرتبطة',
 'mwsuggest-disable' => 'عطل اقتراحات أجاكس',
 'searcheverything-enable' => 'ابحث في جميع النطاقات',
@@ -1608,7 +1618,7 @@ $1",
 'timezoneregion-indian' => 'المحيط الهندي',
 'timezoneregion-pacific' => 'المحيط الهادي',
 'allowemail' => 'مكن تلقي البريد الإلكتروني من المستخدمين الآخرين',
-'prefs-searchoptions' => 'Ø®Ù\8aارات Ø§Ù\84بحث',
+'prefs-searchoptions' => 'البحث',
 'prefs-namespaces' => 'أسماء النطاقات',
 'defaultns' => 'أو ابحث في هذه النطاقات:',
 'default' => 'افتراضي',
@@ -1760,7 +1770,7 @@ $1",
 'right-noratelimit' => 'غير متأثر بحدود المعدل',
 'right-import' => 'استيراد الصفحات من ويكيات أخرى',
 'right-importupload' => 'استيراد الصفحات من ملف مرفوع',
-'right-patrol' => 'اÙ\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ù\83مراجعة',
+'right-patrol' => 'تعÙ\84Ù\8aÙ\85 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
 'right-autopatrol' => 'علم تعديلات المستخدم مراجعة تلقائيا',
 'right-patrolmarks' => 'رؤية علامات المراجعة في أحدث التغييرات',
 'right-unwatchedpages' => 'رؤية قائمة بالصفحات غير المراقبة',
@@ -1807,7 +1817,7 @@ $1",
 'action-rollback' => 'استرجاع تعديلات آخر مستخدم عدل صفحة معينة سريعا',
 'action-import' => 'استيراد هذه الصفحة من ويكي آخر',
 'action-importupload' => 'استيراد هذه الصفحة من ملف مرفوع',
-'action-patrol' => 'اÙ\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ù\83مراجعة',
+'action-patrol' => 'تعÙ\84Ù\8aÙ\85 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84آخرÙ\8aÙ\86 Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
 'action-autopatrol' => 'جعل تعديلك معلم عليه كمراجع',
 'action-unwatchedpages' => 'رؤية قائمة الصفحات غير المراقبة',
 'action-mergehistory' => 'دمج تاريخ هذه الصفحة',
@@ -2039,7 +2049,7 @@ $1',
 'backend-fail-internal' => 'وقع خطأ غير معروف في خلفية التخزين "$1".',
 'backend-fail-contenttype' => 'تعذر تحديد نوع محتوى الملف الذي تريد تخزينه في "$1".',
 'backend-fail-batchsize' => 'أعطت خلفية التخزين دفعة $1 ملف {{PLURAL:$1|عملية|عمليات}}; الحد الأقصى هو $2 {{PLURAL:$2|عملية|عمليات}}.',
-'backend-fail-usable' => 'تعذر Ù\83تابة Ø§Ù\84Ù\85Ù\84Ù\81 $1 لنقص في التراخيص أو فقدان الدلائل/الحاويات.',
+'backend-fail-usable' => 'تعذر Ù\82راءة Ø£Ù\88 Ù\83تابة Ø§Ù\84Ù\85Ù\84Ù\81 "$1" لنقص في التراخيص أو فقدان الدلائل/الحاويات.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'تعذر ربط الإتصال بقاعدة بيانات خلفية التخزين "$1".',
@@ -2315,6 +2325,7 @@ $1',
 'mostlinkedtemplates' => 'أكثر القوالب وصلا',
 'mostcategories' => 'أكثر الصفحات تصنيفا',
 'mostimages' => 'أكثر الملفات ارتباطا',
+'mostinterwikis' => 'الصفحات التي تحتوي على أغلب وصلات الإنترويكي',
 'mostrevisions' => 'أكثر الصفحات تعديلا',
 'prefixindex' => 'كل الصفحات بالبادئة',
 'prefixindex-namespace' => 'كل الصفحات مع بادئة ($1 مساحة الأسم)',
@@ -2462,6 +2473,8 @@ $1',
 'mailnologin' => 'لا يوجد عنوان للإرسال',
 'mailnologintext' => 'يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.',
 'emailuser' => 'إرسال رسالة لهذا المستخدم',
+'emailuser-title-target' => 'راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}',
+'emailuser-title-notarget' => 'مراسلة المستخدم',
 'emailpage' => 'إرسال رسالة للمستخدم',
 'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
 سيظهر عنوان البريد الإلكتروني الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.',
@@ -2636,8 +2649,8 @@ $UNWATCHURL
 'protect-title' => 'ضبط مستوى الحماية ل"$1"',
 'protect-title-notallowed' => 'عرض مستوى الحماية ل "$1"',
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
-'protect-badnamespace-title' => 'Ù\85ساحة Ø¥Ø³Ù\85 ØºÙ\8aر Ù\85Ø­Ù\85Ù\8aØ©',
-'protect-badnamespace-text' => 'لا يمكن حماية الصفحات الموجودة في مساحة الإسم',
+'protect-badnamespace-title' => 'Ù\86طاÙ\82 Ù\84ا Ù\8aØ­Ù\85Ù\89',
+'protect-badnamespace-text' => 'صفحات هذا النطاق لا يمكن حمايتها',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2838,7 +2851,7 @@ $1',
 'ipb-confirm' => 'أكّد المنع',
 'badipaddress' => 'عنوان أيبي غير صحيح',
 'blockipsuccesssub' => 'تم المنع بنجاح',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] تم منعها.<br />
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] تم {{GENDER:$1|منعه|منعها}}.<br />
 أنظر [[Special:BlockList|قائمة منع الآيبي]] لمراجعة حالات المنع.',
 'ipb-blockingself' => 'أنت على وشك منع نفسك! أمتأكد من رغبتك في القيام بذلك؟',
 'ipb-confirmhideuser' => 'أنت على وشك منع مستخدم مع تفعيل خيار "أخف المستخدم". سوف يخفي هذا الخيار اسم المستخدم من جميل القوائم ومدخلات السجلات. أمتأكد من رغبتك في القيام بذلك؟',
@@ -3146,7 +3159,7 @@ $1',
 'import-error-edit' => 'الصفحة "$1" لم يتم استيرادها لأنه لا يمكن لك تحريرها.',
 'import-error-create' => 'الصفحة "$1" لم يتم استيرادها لأنه لا يمكن لك استحداثها أصلا.',
 'import-error-interwiki' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها محجوز للربط الخارجي (interwiki).',
-'import-error-special' => 'تعذر Ø£Ø³ØªÙ\8aراد Ø§Ù\84صÙ\81حة "$1" Ù\84Ø£Ù\86Ù\87ا ØªÙ\86تÙ\85Ù\8a Ø¥Ù\84Ù\89 Ù\85ساحة Ø¥Ø³Ù\85 Ø®Ø§ØµØ© Øªمنع الصفحات.',
+'import-error-special' => 'صÙ\81حة "$1" Ù\84Ù\85 ØªØ³ØªÙ\88رد Ù\84Ø£Ù\86Ù\87ا ØªÙ\86تÙ\85Ù\8a Ø¥Ù\84Ù\89 Ù\86طاÙ\82 Ø®Ø§Øµ Ù\8aمنع الصفحات.',
 'import-error-invalid' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها غير صحيح.',
 'import-options-wrong' => 'خطأ {{PLURAL:$2|خيار|خيارات}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'إن عنوان الصفحة الجذر المعطاة هي ذات عنوان غير صالح.',
@@ -3162,7 +3175,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'اختبار جافاسكربت',
-'javascripttest-disabled' => 'هذه الخاصية معطلة.',
 'javascripttest-title' => 'تشغيل أختبارات $1',
 'javascripttest-pagetext-noframework' => 'هذه الصفحة محجوزة لإجراء أختبارات الجافا سكريبت.',
 'javascripttest-pagetext-unknownframework' => 'إطار اختبار غير معروف "$1".',
@@ -3304,11 +3316,33 @@ $1',
 
 # Info page
 'pageinfo-title' => 'المعلومات ل"$1"',
+'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-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)',
 
 # Skin names
 'skinname-standard' => 'كلاسيك',
@@ -3322,15 +3356,15 @@ $1',
 'skinname-vector' => 'فكتور',
 
 # Patrolling
-'markaspatrolleddiff' => 'علم كمراجعة',
-'markaspatrolledtext' => 'علم على هذه الصفحة كمراجعة',
-'markedaspatrolled' => 'تÙ\85 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ù\83مراجعة',
-'markedaspatrolledtext' => 'اÙ\84Ù\85راجعة Ø§Ù\84Ù\85ختارة Ù\85Ù\86 [[:$1]] ØªÙ\85 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\8aÙ\87ا Ù\83مراجعة.',
+'markaspatrolleddiff' => 'علم بعلامة المراجعة',
+'markaspatrolledtext' => 'علم هذه الصفحة بعلامة المراجعة',
+'markedaspatrolled' => 'عÙ\84Ù\85ت Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة',
+'markedaspatrolledtext' => 'اÙ\84Ù\85راجعة Ø§Ù\84Ù\85ختارة Ù\85Ù\86 [[:$1]] Ø¹Ù\84Ù\85ت Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة.',
 'rcpatroldisabled' => 'مراجعة أحدث التغييرات معطلة',
 'rcpatroldisabledtext' => 'خاصية مراجعة أحدث التغييرات معطلة حاليا',
 'markedaspatrollederror' => 'لا يمكن التعليم بالمراجعة',
 'markedaspatrollederrortext' => 'يجب عليك اختيار المراجعة التي تريد أن تشير أنها مراجعة',
-'markedaspatrollederror-noautopatrol' => 'Ù\85Ù\86 ØºÙ\8aر Ø§Ù\84Ù\85سÙ\85Ù\88Ø­ Ù\84Ù\83 Ø§Ù\84تعÙ\84Ù\8aÙ\85 Ø¹Ù\84Ù\89 ØªØºÙ\8aÙ\8aراتÙ\83 Ø§Ù\84شخصÙ\8aØ© Ù\83مراجعة.',
+'markedaspatrollederror-noautopatrol' => 'Ù\84ا Ù\8aجÙ\88ز Ù\84Ù\83 ØªØ¹Ù\84Ù\8aÙ\85 ØªØºÙ\8aÙ\8aراتÙ\83 Ø§Ù\84شخصÙ\8aØ© Ø¨Ø¹Ù\84اÙ\85Ø© Ø§Ù\84مراجعة.',
 
 # Patrol log
 'patrol-log-page' => 'سجل الخفر',
@@ -3362,6 +3396,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 بكسل, حجم الملف  : $3 ، نوع الملف : $4 ، $5 {{PLURAL:$5| صفحة | صفحات}}',
 'file-nohires' => 'لا توجد دقة أعلى متوفرة.',
 'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3',
+'svg-long-desc-animated' => 'ملف SVG متحرك، بمقاسات  $1  ×  $2  بكسل، حجم الملف: $3',
 'show-big-image' => 'دقة كاملة',
 'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
 'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
@@ -3371,6 +3406,8 @@ $1',
 'file-info-png-looped' => 'ملفوف',
 'file-info-png-repeat' => 'عرضت {{PLURAL:$1||مرة واحدة|مرتين|$1 مرات|$1 مرة}}',
 'file-info-png-frames' => '{{PLURAL:$1||إطار واحد|إطاران|$1 إطارات|$1 إطارًا|$1 إطار}}',
+'file-no-thumb-animation' => "'' 'ملاحظة: نظراً للقيود التقنية، فإن الصورة المصغرة لهذا الملف ستكون غير متحركة. '''",
+'file-no-thumb-animation-gif' => "'' 'ملاحظة: نظراً للقيود التقنية، فإن الصورة المصغرة لهذا الملف GIF عالي الدقة ستكون غير متحركة. '''",
 
 # Special:NewFiles
 'newimages' => 'معرض الملفات الجديدة',
@@ -4098,7 +4135,7 @@ $5
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|نقاش]])',
-'timezone-utc' => 'باÙ\84تÙ\88Ù\82Ù\8aت Ø§Ù\84عاÙ\84Ù\85Ù\8a',
+'timezone-utc' => 'ت Ø¹ Ù\85',
 
 # Core parser functions
 'unknown_extension_tag' => 'وسم امتداد غير معروف "$1"',
@@ -4289,6 +4326,10 @@ $5
 'feedback-bugcheck' => 'رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].',
 'feedback-bugnew' => 'لقد تحققت. بلّغ عن علة جديدة.',
 
+# Search suggestions
+'searchsuggest-search' => 'بحث',
+'searchsuggest-containing' => 'يحتوي...',
+
 # API errors
 'api-error-badaccess-groups' => 'لا يسمح لك بتحميل الملفات إلى هذه الويكي.',
 'api-error-badtoken' => 'خطأ داخلي: رمز مميز غير صحيح.',
index d020c8e..6314006 100644 (file)
@@ -78,30 +78,30 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ܨܘܝܒܐ', '#REDIRECT' ),
-       'numberofpages'           => array( '1', 'ܡܢܝܢܐ_ܕܦܐܬܬ̈ܐ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ܡܢܝܢܐ_ܕܡܠܘܐ̈ܐ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ܡܢܝܢܐ_ܕܠܦܦ̈ܐ', 'NUMBEROFFILES' ),
-       'pagename'                => array( '1', 'ܫܡܐ_ܕܦܐܬܐ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ܟܘܢܝܐ_ܕܦܐܬܐ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ܚܩܠܐ', 'NAMESPACE' ),
-       'msg'                     => array( '0', 'ܐܓܪܬܐ:', 'MSG:' ),
-       'img_thumbnail'           => array( '1', 'ܙܥܘܪܬܐ', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'ܙܥܘܪܬܐ=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ܝܡܝܢܐ', 'right' ),
-       'img_left'                => array( '1', 'ܣܡܠܐ', 'left' ),
-       'img_none'                => array( '1', 'ܠܐ_ܡܕܡ', 'none' ),
-       'img_center'              => array( '1', 'ܡܨܥܐ', 'center', 'centre' ),
-       'img_page'                => array( '1', 'ܦܐܬܐ=$1', 'ܦܐܬܐ $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'ܬܚܘܡܐ', 'border' ),
-       'img_baseline'            => array( '1', 'ܣܪܛܐ_ܫܪܫܝܐ', 'baseline' ),
-       'img_sub'                 => array( '1', 'ܦܪܥܝܐ', 'sub' ),
-       'grammar'                 => array( '0', 'ܬܘܪܨ_ܡܡܠܠܐ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ܓܢܣܐ:', 'GENDER:' ),
-       'language'                => array( '0', '#ܠܫܢܐ:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'ܕܝܠܢܝܐ', 'special' ),
-       'url_path'                => array( '0', 'ܫܒܝܠܐ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ܘܝܩܝ', 'WIKI' ),
+       'redirect'                  => array( '0', '#ܨܘܝܒܐ', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'ܡܢܝܢܐ_ܕܦܐܬܬ̈ܐ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ܡܢܝܢܐ_ܕܡܠܘܐ̈ܐ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ܡܢܝܢܐ_ܕܠܦܦ̈ܐ', 'NUMBEROFFILES' ),
+       'pagename'                  => array( '1', 'ܫܡܐ_ܕܦܐܬܐ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ܟܘܢܝܐ_ܕܦܐܬܐ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ܚܩܠܐ', 'NAMESPACE' ),
+       'msg'                       => array( '0', 'ܐܓܪܬܐ:', 'MSG:' ),
+       'img_thumbnail'             => array( '1', 'ܙܥܘܪܬܐ', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'ܙܥܘܪܬܐ=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ܝܡܝܢܐ', 'right' ),
+       'img_left'                  => array( '1', 'ܣܡܠܐ', 'left' ),
+       'img_none'                  => array( '1', 'ܠܐ_ܡܕܡ', 'none' ),
+       'img_center'                => array( '1', 'ܡܨܥܐ', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'ܦܐܬܐ=$1', 'ܦܐܬܐ $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'ܬܚܘܡܐ', 'border' ),
+       'img_baseline'              => array( '1', 'ܣܪܛܐ_ܫܪܫܝܐ', 'baseline' ),
+       'img_sub'                   => array( '1', 'ܦܪܥܝܐ', 'sub' ),
+       'grammar'                   => array( '0', 'ܬܘܪܨ_ܡܡܠܠܐ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ܓܢܣܐ:', 'GENDER:' ),
+       'language'                  => array( '0', '#ܠܫܢܐ:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'ܕܝܠܢܝܐ', 'special' ),
+       'url_path'                  => array( '0', 'ܫܒܝܠܐ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ܘܝܩܝ', 'WIKI' ),
 );
 
 $messages = array(
@@ -116,6 +116,7 @@ $messages = array(
 'tog-watchdefault' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܘܠܦܦ̈ܐ ܕܫܚܠܦ ܐܢܐ ܠܪ̈ܗܝܬܝ',
 'tog-watchmoves' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܘܠܦܦ̈ܐ ܕܫܢܐ ܐܢܐ ܠܪ̈ܗܝܬܝ',
 'tog-watchdeletion' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܘܠܦܦ̈ܐ ܕܫܐܦ ܐܢܐ ܠܪ̈ܗܝܬܝ',
+'tog-oldsig' => 'ܪܡܝ ܐܝܕܐ ܗܫܝܐ:',
 'tog-watchlisthideown' => 'ܛܫܝ ܫܘܚܠܦ̈ܝ ܡܢ ܪ̈ܗܝܬܐ',
 'tog-watchlisthidebots' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܕܒܘܬ ܡܢ ܪ̈ܗܝܬܐ',
 'tog-watchlisthideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܡܢ ܪ̈ܗܝܬܐ',
@@ -187,9 +188,12 @@ $messages = array(
 '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' => '{{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' => '(ܫܘܠܡܐ)',
 
 'about' => 'ܡܢܘ',
@@ -320,6 +324,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' => 'ܫܚܠܦ',
@@ -368,18 +376,19 @@ $1',
 'viewsource' => 'ܚܙܝ ܡܒܘܥܐ',
 'viewsource-title' => 'ܚܙܝ ܡܒܘܥܐ ܕ $1',
 'actionthrottled' => 'ܠܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗܝ ܠܡܥܒܕ ܝܬܝܪ ܡܢ ܗܢܐ ܥܒܕܐ',
-'viewsourcetext' => 'ܡܨܐ ܐܢܬ ܕܢܚܙܐ ܘܢܣܚܐ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:',
-'protectedinterface' => 'ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.',
+'viewsourcetext' => 'ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܘܬܢܣܚ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:',
+'protectedinterface' => 'ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ ܒܗܢܐ ܘܝܩܝ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.
+ܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [//translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.',
 'editinginterface' => "'''ܙܘܗܪܐ:''' ܐܢܬ ܫܚܠܦܬ ܦܐܬܐ ܕܡܬܦܠܚܬ ܒܚܙܝܐ ܟܬܝܒܝܐ ܕܬܚܪܙܬܐ.
-ܟܠ ܫܘܚܠܦܐ ܒܦܐܬܐ ܗܕܐ ܢܗܘܐ ܠܗ ܡܥܒܕܢܘܬܐ ܥܠ ܐܣܟܡܐ ܕܦܐܬܐ ܕܡܦܠܚܢܐ ܕܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ.
-ܠܬÜ\98ܪÌ\88Ü\93Ü¡Ü\90Ø\8c Ü\90ܦܠÜ\9a Ü¬ÜªÜ¡Ü\9dܬÜ\90 Ü\95ܬÜ\98ܪÜ\93Ü¡Ü\90 Ü\95Ü¡Ü\9dÜ\95Ü\9dÜ\90Ü\98Ü\9dÜ©Ü\9d [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+ܟܠ ܫܘܚܠܦܐ ܒܦܐܬܐ ܗܕܐ ܢܗܘܐ ܠܗ ܡܥܒܕܢܘܬܐ ܥܠ ܐܣܟܡܐ ܕܦܐܬܐ ܕܡܦܠܚܢܐ ܕܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ ܒܘܝܩܝ ܗܢܐ.
+Ü Ü¡Ü\98ܣܦ Ü\90Ü\98 Ü«Ü\98Ü\9aܠܦ Ü¬Ü\98ܪÌ\88Ü\93Ü¡Ü\90 Ü\95Ü\9fÜ Ü\97Ü\98Ü¢ Ü\98Ü\9dÜ©Ü\9dØ\8c Ü\90ܦܠÜ\9a [//translatewiki.net/ translatewiki.net]Ø\8c Ü¬ÜªÜ¡Ü\9dܬÜ\90 Ü\95ܬÜ\98ܪÜ\93Ü¡Ü\90 Ü\95Ü¡Ü\9dÜ\95Ü\9dÜ\90Ü\98Ü\9dÜ©Ü\9d.",
 'sqlhidden' => '(ܒܘܬܬܐ SQL ܛܫܝܐ)',
 'namespaceprotected' => "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
 
 # Login and logout pages
 'logouttext' => "'''ܗܫܐ ܦܠܛܠܟ ܡܢ ܚܘܫܒܢܟ.'''
 
-ܡܨܐ ܐܢܬ ܐܦܠܚܬ {{SITENAME}} ܐܝܟ ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ ܐܘ ܡܨܐ ܐܢܬ ܕ[[Special:UserLogin|ܬܥܘܠ]] ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
+ܡܨܐ ܐܢܬ ܐܦܠܚܬ {{SITENAME}} ܐܝܟ ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ ܐܘ ܡܨܐ ܐܢܬ ܕ<span class='plainlinks'>[$1 ܬܥܘܠ]</span> ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
 
 ܚܕ ܟܡܐ ܡܢ ܦܐܬܬ̈ܐ ܡܬܚܙܝܢ ܐܝܟ ܕܗܘ ܐܢܬ ܥܠܝܠܐ ܥܕܡܐ ܕܐܣܦܩܬ ܠܦܐܬܬ̈ܐ ܠܒܝܟܬ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ",
 'welcomecreation' => '== ܒܫܝܢܐ, $1! ==
@@ -418,7 +427,7 @@ $1',
 'passwordremindertitle' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܚܕܬܐ ܠ{{SITENAME}}',
 'noemail' => 'ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ "$1".',
 'mailerror' => 'ܦܘܕܐ ܒܫܘܕܪܐ ܕܒܝܠܕܪܐ: $1',
-'emailconfirmlink' => 'Ü\9aܬܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܕܝܠܟ',
+'emailconfirmlink' => 'ܫܪܪ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܕܝܠܟ',
 'accountcreated' => 'ܚܘܫܒܢܐ ܒܪܐ',
 'accountcreatedtext' => 'ܐܬܒܪܝ ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ ܠ $1.',
 'createaccount-title' => 'ܒܪܝܐ ܕܚܘܫܒܢܐ ܒ {{SITENAME}}',
@@ -517,12 +526,12 @@ $1',
 'currentrev-asof' => 'ܬܢܝܬܐ ܗܫܝܬܐ ܒܣܝܩܘܡ $1',
 'revisionasof' => 'ܬܢܝܬܐ ܒܣܝܩܘܡ $1',
 'revision-info' => 'ܬܢܝܬܐ ܒܣܝܩܘܡ $1 ܒܝܕ $2',
-'previousrevision' => 'â\86\90 Ü¬Ü¢Ü\9dܬÜ\90 Ü¥Ü¬Ü\9dܩܬÜ\90',
-'nextrevision' => 'ܬܢÜ\9dܬÜ\90 Ü\9aÜ\95ܬÜ\90 →',
+'previousrevision' => 'â\86\90 Ü¬Ü¢Ü\9dܬÜ\90 Ü\95Ü©Ü\95Ü¡',
+'nextrevision' => 'ܬܢÜ\9dܬÜ\90 Ü\95Ü\92ܬܪ →',
 'currentrevisionlink' => 'ܬܢܝܬܐ ܗܫܝܬܐ',
 'cur' => 'ܗܫܝܐ',
-'next' => 'ܒܬܪ',
-'last' => 'ܩܕܡ',
+'next' => 'Ü\95Ü\92ܬܪ',
+'last' => 'Ü\95Ü©Ü\95Ü¡',
 'page_first' => 'ܩܕܡܝܐ',
 'page_last' => 'ܐܚܪܝܐ',
 'histlegend' => "ܓܒܝܐ ܕܦܘܪܫܐ: ܓܒܝ ܣܢܕ̈ܘܩܐ ܕܬܢܝܬ̈ܐ ܠܦܘܚܡܐ ܘܕܘܫ '''Enter''' ܐܘ '''ܦܚܘܡ ܒܝܢܝ ܬܪܝܢ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ'''.<br />
@@ -600,10 +609,10 @@ $1',
 'notitlematches' => 'ܠܝܬ ܫܡܐ ܕܦܐܬܐ ܐܘܝܢܐ',
 'textmatches' => 'ܟܬܒܬܐ ܐܘܝܢܬܐ',
 'notextmatches' => 'ܠܝܬ ܟܬܒܬܐ ܐܘܝܢܬܐ',
-'prevn' => '{{PLURAL:$1|$1}} Ü©Ü\95Ü\9dÜ¡Ü\90',
-'nextn' => '{{PLURAL:$1|$1}} Ü\90Ü\9aܪܢÜ\90',
-'prevn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ ܩܕܝܡܐ|ܦܠܛ̈ܐ ܩܕ̈ܝܡܐ}}',
-'nextn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ ܐܚܪܢܐ|ܦܠܛ̈ܐ ܐܚܪ̈ܢܐ}}',
+'prevn' => '{{PLURAL:$1|$1}} Ü\95Ü©Ü\95Ü¡',
+'nextn' => '{{PLURAL:$1|$1}} Ü\95Ü\92ܬܪ',
+'prevn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܕܩܕܡ',
+'nextn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܕܒܬܪ',
 'shown-title' => 'ܚܘܝ $1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܠܟܠ ܦܐܬܐ',
 'viewprevnext' => 'ܚܘܝ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ܓܒܝܬ̈ܐ ܕܒܨܝܐ',
@@ -617,6 +626,7 @@ $1',
 'searchprofile-advanced' => 'ܡܬܩܕܡܢܐ',
 'searchprofile-articles-tooltip' => 'ܒܨܝ ܒ $1',
 'searchprofile-project-tooltip' => 'ܒܨܝ ܒ $1',
+'searchprofile-images-tooltip' => 'ܒܨܝ ܥܠ ܠܦܦ̈ܐ',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ܡܠܬܐ|$2 ܡܠ̈ܐ}})',
 'search-redirect' => '(ܨܝܒ $1)',
 'search-section' => '(ܡܢܬܐ $1)',
@@ -624,13 +634,12 @@ $1',
 'search-interwiki-caption' => 'ܬܪ̈ܡܝܬܐ ܐܚܘܬ̈ܐ',
 'search-interwiki-default' => 'ܦܠܛ̈ܐ ܕ $1:',
 'search-interwiki-more' => '(ܝܬܝܪ)',
-'search-mwsuggest-enabled' => 'ܥܡ ܡܚܫܚܬ̈ܐ',
-'search-mwsuggest-disabled' => 'ܠܐ ܡܚܫܚܬ̈ܐ',
 'search-relatedarticle' => 'ܐܚܝܢܝ̈ܐ',
 'searcheverything-enable' => 'ܒܨܝ ܒܟܠ ܚܩܠܬ̈ܐ',
 'searchrelated' => 'ܐܚܝܢܝ̈ܐ',
 'searchall' => 'ܟܠ',
 'showingresults' => "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$1|'''1''' ܦܠܛܐ|'''$1''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
+'showingresultsnum' => "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$3|'''ܚܕ ܦܠܛܐ'''|'''$3''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|ܦܠܛܐ '''$1''' ܡܢ '''$3'''|ܦܠܛ̈ܐ '''$1 - $2''' ܡܢ '''$3'''}} ܠ'''$4'''",
 'search-nonefound' => 'ܠܝܬ ܦܠܛ̈ܐ ܐܘܝܢ̈ܐ ܠܗܢܐ ܒܨܝܐ.',
 'powersearch' => 'ܒܨܝܐ ܡܬܩܕܡܢܐ',
@@ -663,6 +672,7 @@ $1',
 'prefs-watchlist-days-max' => 'ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}}',
 'prefs-misc' => 'ܦܪ̈ܝܫܬܐ',
 'prefs-resetpass' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
+'prefs-changeemail' => 'ܫܚܠܦ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'prefs-email' => 'ܓܒܝܬ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'prefs-rendering' => 'ܐܣܟܝܡܐ',
 'saveprefs' => 'ܠܒܘܟ',
@@ -686,11 +696,11 @@ $1',
 'timezoneregion-europe' => 'ܐܘܪܘܦܐ',
 'timezoneregion-indian' => 'ܐܘܩܝܢܘܣ ܗܢܕܘܝܐ',
 'timezoneregion-pacific' => 'ܐܘܩܝܢܘܣ ܫܩܛܝܐ',
-'prefs-searchoptions' => 'Ü\93Ü\92Ü\9dܬÌ\88Ü\90 Ü\95Ü\92ܨÜ\9dÜ\90',
+'prefs-searchoptions' => 'ܒܨܝܐ',
 'prefs-namespaces' => 'ܚܩܠܬ̈ܐ',
 'defaultns' => 'ܐܘ ܒܨܝ ܒܚܩܠܬ̈ܐ ܗܢܝܢ',
 'prefs-files' => 'ܠܦܦ̈ܐ',
-'prefs-emailconfirm-label' => 'Ü\9aÜ\98ܬܬܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
+'prefs-emailconfirm-label' => 'Ü«Ü\98ܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
 'youremail' => 'ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
 'username' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
 'uid' => 'ܗܝܝܘܬܐ ܕܡܦܠܚܢܐ:',
@@ -705,6 +715,8 @@ $1',
 'gender-unknown' => 'ܠܐ ܦܣܝܩܐ',
 'gender-male' => 'ܕܟܪܐ',
 'gender-female' => 'ܢܩܒܐ',
+'prefs-help-gender' => 'ܨܒܝܢܝܐ: ܐܬܦܠܚ ܠܡܬܡܠܠ ܒܓܢܣܐ ܬܪܝܨܐ ܒܝܕ ܬܚܪܙܬܐ.
+ܝܕܥܬܐ ܗܕܐ ܬܗܘܐ ܓܠܝܬܐ ܠܥܠܡܐ.',
 'email' => 'ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'prefs-info' => 'ܝܕ̈ܥܬܐ ܪ̈ܫܝܬܐ',
 'prefs-i18n' => 'ܬܘܪܓܡܐ',
@@ -733,6 +745,7 @@ $1',
 # Groups
 'group' => 'ܟܢܘܫܬܐ:',
 'group-user' => 'ܡܦܠܚܢ̈ܐ',
+'group-autoconfirmed' => 'ܡܦܠܚܢ̈ܐ ܡܫܪܪ̈ܐ ܝܬܐܝܬ',
 'group-bot' => 'ܒܘܬ̈ܐ',
 'group-sysop' => 'ܡܕܒܪ̈ܢܐ',
 'group-bureaucrat' => 'ܒܝܪܘܩܪ̈ܛܐ',
@@ -740,14 +753,14 @@ $1',
 'group-all' => '(ܟܠ)',
 
 'group-user-member' => '{{GENDER:$1|ܡܦܠܚܢܐ|ܡܦܠܚܢܬܐ}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|ܡܦܠÜ\9aÜ¢Ü\90 Ü\9aܬÜ\9dܬÜ\90 Ü\9dܬÜ\90Ü\9dܬ|ܡܦܠÜ\9aܢܬÜ\90 Ü\9aܬÜ\9dܬܐ ܝܬܐܝܬ}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|ܡܦܠÜ\9aÜ¢Ü\90 Ü¡Ü«ÜªÜªÜ\90 Ü\9dܬÜ\90Ü\9dܬ|ܡܦܠÜ\9aܢܬÜ\90 Ü¡Ü«ÜªÜªܬܐ ܝܬܐܝܬ}}',
 'group-bot-member' => '{{GENDER:$1|ܒܘܬ (Bot)}}',
 'group-sysop-member' => '{{GENDER:$1|ܡܕܒܪܢܐ|ܡܕܒܪܢܬܐ}}',
 'group-bureaucrat-member' => '{{GENDER:$1|ܒܝܪܘܩܪܛܐ}}',
 'group-suppress-member' => '{{GENDER:$1|ܚܝܘܪܐ|ܚܝܘܪܬܐ}}',
 
 'grouppage-user' => '{{ns:project}}:ܡܦܠܚܢ̈ܐ',
-'grouppage-autoconfirmed' => '{{ns:project}}:ܡܦܠÜ\9aÜ¢Ì\88Ü\90 Ü\9aܬÜ\9dܬ̈ܐ ܝܬܐܝܬ',
+'grouppage-autoconfirmed' => '{{ns:project}}:ܡܦܠÜ\9aÜ¢Ì\88Ü\90 Ü¡Ü«ÜªÜª̈ܐ ܝܬܐܝܬ',
 'grouppage-bot' => '{{ns:project}}:ܒܘܬ̈ܐ',
 'grouppage-sysop' => '{{ns:project}}:ܡܕܒܪ̈ܢܐ',
 'grouppage-bureaucrat' => '{{ns:project}}:ܒܝܪܘܩܪ̈ܛܐ',
@@ -825,6 +838,7 @@ $1',
 'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ',
 'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)',
 'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ',
+'rc-old-title' => 'ܐܬܒܪܝ ܫܪܫܐܝܬ ܐܝܟ "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'ܫܘܚܠܦ̈ܐ ܕ̈ܡܝܐ',
@@ -848,6 +862,7 @@ $1',
 'minlength1' => 'ܫܡܗ̈ܐ ܕܠܦܦܐ ܘܠܐ ܕܢܗܘܐ ܒܪܝܐ ܡܢ ܐܬܘܬܐ ܚܕܐ ܟܕ ܙܥܘܪ',
 'uploadwarning' => 'ܐܣܩ ܙܘܗܪܐ',
 'savefile' => 'ܠܒܘܟ ܠܦܦܐ',
+'uploadedimage' => '',
 'uploadvirus' => 'ܠܦܦܐ ܐܝܬ ܒܗ ܒܝܪܘܣ!
 ܐܪ̈ܝܟܬܐ: $1',
 'upload-source' => 'ܡܒܘܥܐ ܕܠܦܦܐ',
@@ -1023,7 +1038,7 @@ $1',
 'notargettitle' => 'ܠܐ ܢܘܦܐ',
 'nopagetitle' => 'ܠܝܬ ܗܟܘܬ ܦܐܬܐ ܕܢܘܦܐ',
 'pager-newer-n' => '{{PLURAL:$1|1 1 ܚܕܬܐ|$1 ܚܕ̈ܬܐ}}',
-'pager-older-n' => '{{PLURAL:$1|1 ܥܬܝܩ̈ܐ 1|$1 ܥܬܝܩ̈ܐ}}',
+'pager-older-n' => '{{PLURAL:$1|ܥܬܝܩܐ 1|ܥܬܝܩ̈ܐ $1}}',
 'suppress' => 'ܚܝܘܪܐ',
 
 # Book sources
@@ -1042,15 +1057,15 @@ $1',
 # Special:AllPages
 'allpages' => 'ܟܠ ܦܐܬܬ̈ܐ',
 'alphaindexline' => '$1 ܠ $2',
-'nextpage' => 'ܦÜ\90ܬÜ\90 Ü\90Ü\9aܪܬÜ\90 ($1)',
-'prevpage' => 'ܦÜ\90ܬÜ\90 Ü©Ü\95Ü\9dܡܬÜ\90 ($1)',
+'nextpage' => 'ܦÜ\90ܬÜ\90 Ü\95Ü\92ܬܪ ($1)',
+'prevpage' => 'ܦÜ\90ܬÜ\90 Ü\95Ü©Ü\95Ü¡ ($1)',
 'allpagesfrom' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܪܐ ܥܡ:',
 'allpagesto' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܠܡ ܥܡ:',
 'allarticles' => 'ܟܠ ܡܓܠ̈ܐ',
 'allinnamespace' => 'ܟܠ ܦܐܬܬ̈ܐ (ܚܩܠܐ ܕ $1)',
 'allnotinnamespace' => 'ܟܠ ܦܐܬܬ̈ܐ (ܠܐ ܒܚܩܠܐ ܕ $1)',
-'allpagesprev' => 'ܩܕܡ',
-'allpagesnext' => 'ܒܬܪ',
+'allpagesprev' => 'Ü\95Ü©Ü\95Ü¡',
+'allpagesnext' => 'Ü\95Ü\92ܬܪ',
 'allpagessubmit' => 'ܙܠ',
 'allpagesprefix' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܪܝܢ ܒ:',
 'allpages-bad-ns' => '{{SITENAME}} ܠܝܬ ܠܗ ܚܩܠܐ "$1".',
@@ -1135,6 +1150,7 @@ $1',
 'mywatchlist' => 'ܪ̈ܗܝܬܝ',
 'watchlistfor2' => 'ܕ $1 $2',
 'nowatchlist' => 'ܠܝܬ ܠܟ ܡܕܡ ܒܪ̈ܗܝܬܐ ܕܝܠܟ',
+'watchlistanontext' => '$1 ܠܚܙܝܐ ܐܘ ܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܪ̈ܗܝܬܟ.',
 'watchnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 'watchnologintext' => 'ܐܠܨܐ ܕܬܗܘܐ [[Special:UserLogin|ܥܠܝܠܐ]] ܠܫܚܠܦܬܐ ܕܪ̈ܗܝܬܟ.',
 'addwatch' => 'ܐܘܣܦ ܥܠ ܪ̈ܗܝܬܝ',
@@ -1168,7 +1184,7 @@ $1',
 
 # Delete
 'deletepage' => 'ܫܘܦ ܦܐܬܐ',
-'confirm' => 'Ü\9aܬܬ',
+'confirm' => 'ܫܪܪ',
 'excontent' => "ܚܒܝܫܬ̈ܐ ܗܘ̈ܝ: '$1'",
 'excontentauthor' => "ܚܒܝܫܬ̈ܐ ܗܘ̈ܝ: '$1' (ܘܫܘܬܦܢܐ ܝܚܝܕܝܐ ܗܘܐ '[[Special:Contributions/$2|$2]]')",
 'exblank' => 'ܦܐܬܐ ܣܦܝܩܬܐ ܗܘܐ',
@@ -1197,7 +1213,7 @@ $1',
 'unprotectedarticle' => 'ܫܩܘܠ ܢܛܝܪܘܬܐ ܡܢ "[[$1]]"',
 'movedarticleprotection' => 'ܫܢܐ ܛܘܝܒ̈ܐ ܕܢܛܪܐ ܡܢ "[[$2]]" ܠ "[[$1]]"',
 'prot_1movedto2' => '[[$1]] ܐܬܫܢܝܬ ܠ [[$2]]',
-'protect-legend' => 'Ü\9aܬܬ ܢܘܛܪܐ',
+'protect-legend' => 'ܫܪܪ ܢܘܛܪܐ',
 'protectcomment' => 'ܥܠܬܐ:',
 'protect-default' => 'ܦܣܣܐ ܠܟܠ ܡܦܠܚܢ̈ܐ',
 'protect-fallback' => 'ܒܥܝ "$1" ܦܣܣܐ',
@@ -1289,8 +1305,8 @@ $1',
 'isredirect' => 'ܦܐܬܐ ܕܨܘܝܒܐ',
 'istemplate' => 'ܚܒܝܫܬܐ',
 'isimage' => 'ܐܣܘܪܐ ܕܠܦܦܐ',
-'whatlinkshere-prev' => '{{PLURAL:$1|Ü©Ü\95Ü\9dÜ¡Ü\90|$1 Ü©Ü\95Ì\88Ü\9dÜ¡Ü\90}}',
-'whatlinkshere-next' => '{{PLURAL:$1|Ü\9aÜ\95ܬÜ\90|$1 Ü\9aÜ\95Ì\88ܬÜ\90}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|Ü\95Ü©Ü\95Ü¡|$1 Ü\95Ü©Ü\95Ü¡}}',
+'whatlinkshere-next' => '{{PLURAL:$1|Ü\95Ü\92ܬܪ|$1 Ü\95Ü\92ܬܪ}}',
 'whatlinkshere-links' => '← ܐܣܘܪ̈ܐ',
 'whatlinkshere-hideredirs' => '$1 ܨܘܝܒ̈ܐ',
 'whatlinkshere-hidetrans' => '$1 ܡܬܚܪ̈ܙܢܘܬܐ',
@@ -1413,6 +1429,7 @@ Do you want to change the settings?',
 'tooltip-pt-mytalk' => 'ܦܐܬܐ ܕܡܡܠܘܟ',
 'tooltip-pt-preferences' => 'Your preferences',
 'tooltip-pt-watchlist' => 'ܡܟܬܒܢܘܬܐ ܕܦܐܬܬ̈ܐ ܕܒܪܗܝܬ ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
+'tooltip-pt-mycontris' => 'ܡܟܬܒܢܘܬܐ ܕܫܘܬܦܘܝܬܘ̈ܟ',
 'tooltip-pt-login' => 'ܢܠܒܒ ܠܟ ܕܣܓܠ ܐܢܬ ܥܠܠܐ ܕܝܠܟ، ܐܠܐ ܗܢܐ ܠܐ ܐܝܬܝܗܝ ܐܠܨܝܐ',
 'tooltip-pt-logout' => 'ܦܠܛܐ',
 'tooltip-ca-talk' => 'ܡܡܠܠܐ ܥܠ ܚܒܝܫܬܐ ܕܦܐܬܐ',
@@ -1421,9 +1438,11 @@ Do you want to change the settings?',
 ܐܝܬ ܒܟ ܬܚܙܝ ܡܒܘܥܐ ܕܝܠܗ',
 'tooltip-ca-protect' => 'ܢܛܘܪ ܗܕܐ ܦܐܬܐ',
 'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
+'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
 'tooltip-search' => 'ܒܨܝ ܒܓܘ {{SITENAME}}',
 'tooltip-search-fulltext' => 'ܒܨܝ ܒܓܘ ܦܐܬܬ̈ܐ ܥܠ ܗܢܐ ܟܬܝܒܬܐ',
 'tooltip-p-logo' => 'ܦܐܬܐ ܪܝܫܝܬܐ',
+'tooltip-n-mainpage' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
 'tooltip-n-mainpage-description' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
 'tooltip-n-portal' => 'ܚܕܪ ܬܪܡܝܬܐ، ܡܢܐ ܡܫܟܚ ܐܢܬ ܠܥܒܕܐ، ܐܝܟܐ ܬܚܙܝ ܟܠ ܡܐ ܕܣܢܝܩ ܐܢܬ ܠܗ',
 'tooltip-n-recentchanges' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܒܓܘ ܘܝܩܝ.',
@@ -1437,7 +1456,9 @@ Do you want to change the settings?',
 'tooltip-ca-nstab-main' => 'ܚܘܝ ܦܐܬܬܐ ܕܚܒ̈ܝܫܬܐ',
 'tooltip-ca-nstab-user' => 'ܚܘܝ ܦܐܬܐ ܕܡܦܠܚܢܐ',
 'tooltip-ca-nstab-image' => 'ܚܘܝ ܦܐܬܐ ܕܠܦܦܐ',
+'tooltip-ca-nstab-category' => 'ܚܘܝ ܦܐܬܐ ܕܣܕܪ̈ܐ',
 'tooltip-save' => 'ܠܒܘܟ ܫܘܚܠܦܟ',
+'tooltip-watch' => 'ܐܘܣܦ ܗܢܐ ܦܐܬܐ ܠܡܟܬܒܢܘܬܐ ܕܪܗܝܬܘܟ',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ}} ܕ {{SITENAME}}',
@@ -1454,8 +1475,8 @@ Do you want to change the settings?',
 $1',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü¥Ü¬Ü\9dÜ©Ü\90',
-'nextdiff' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\9aÜ\95ܬÜ\90 →',
+'previousdiff' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü©Ü\95Ü¡',
+'nextdiff' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü\92ܬܪ →',
 
 # Media information
 'thumbsize' => 'ܥܓܪܐ ܕܨܘܪܬܐ ܙܥܘܪܬܐ:',
@@ -1544,10 +1565,10 @@ $1',
 'limitall' => 'ܟܠ',
 
 # E-mail address confirmation
-'confirmemail' => 'Ü\9aܬܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
-'confirmemail_subject' => 'Ü\9aÜ\98ܬܬܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܢ {{SITENAME}}',
-'confirmemail_invalidated' => 'Ü\9aÜ\98ܬܬÜ\90 Ü\95Ü\92Ü\9dÜ Ü\95ܪÜ\90 Ü\90Ü Ü©Ü\9bܪÜ\98Ü¢Ü\9dÜ\90 ܒܛܠ',
-'invalidateemail' => 'Ü\92Ü\9bÜ\98Ü  Ü\9aÜ\98ܬܬܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'confirmemail' => 'ܫܪܪ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'confirmemail_subject' => 'Ü«Ü\98ܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܢ {{SITENAME}}',
+'confirmemail_invalidated' => 'Ü«Ü\98ܪܪÜ\90 Ü\95Ü\92Ü\9dÜ Ü\95ܪÜ\90 Ü\90Ü Ü©Ü\9bܪÜ\98Ü¢Ü\9dÜ\90 Ü\90ܬܒܛܠ',
+'invalidateemail' => 'Ü\92Ü\9bÜ\98Ü  Ü«Ü\98ܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 
 # Delete conflict
 'recreate' => 'ܒܪܝ ܙܒܢܬܐ ܐܚܪܬܐ',
@@ -1556,16 +1577,16 @@ $1',
 'confirm_purge_button' => 'ܛܒ',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü©Ü\95Ü\9dÜ¡Ü\90',
-'imgmultipagenext' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\9aÜ\95ܬÜ\90',
+'imgmultipageprev' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü©Ü\95Ü¡',
+'imgmultipagenext' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü\92ܬܪ',
 'imgmultigo' => 'ܙܠ!',
 'imgmultigoto' => 'ܙܠ ܠܦܐܬܐ $1',
 
 # Table pager
 'ascending_abbrev' => 'ܡܣܩܐܝܬ',
 'descending_abbrev' => 'ܡܚܬܐܝܬ',
-'table_pager_next' => 'ܦÜ\90ܬÜ\90 Ü\90Ü\9aܪܬÜ\90',
-'table_pager_prev' => 'ܦÜ\90ܬÜ\90 Ü©Ü\95Ü\9dܡܬÜ\90',
+'table_pager_next' => 'ܦÜ\90ܬÜ\90 Ü\95Ü\92ܬܪ',
+'table_pager_prev' => 'ܦÜ\90ܬÜ\90 Ü\95Ü©Ü\95Ü¡',
 'table_pager_first' => 'ܦܐܬܐ ܩܕܡܝܬܐ',
 'table_pager_last' => 'ܦܐܬܐ ܐܚܪܝܬܐ',
 'table_pager_limit_label' => 'ܡܕ̈ܡܐ ܠܟܠ ܦܐܬܐ:',
@@ -1621,7 +1642,7 @@ $1',
 * <span class="mw-specialpagerestricted">ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܕܩܝܘܡ̈ܐ ܒܠܚܘܕ.</span>',
 'specialpages-group-maintenance' => 'ܬܫܪܪܐ ܕܚܕܬܘܬܐ',
 'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
-'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ',
+'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ ܚܘܫܒܢܐ',
 'specialpages-group-changes' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܘܣܓܠ̈ܐ',
 'specialpages-group-users' => 'ܡܦܠܚܢ̈ܐ ܘܙܕ̈ܩܐ',
 'specialpages-group-highuse' => 'ܦܐܬܬ̈ܐ ܕܡܬܚܫܚܢܘܬܐ ܥܠܝܬܐ',
@@ -1669,4 +1690,8 @@ $1',
 'feedback-message' => 'ܐܓܪܬܐ:',
 'feedback-cancel' => 'ܒܛܘܠ',
 
+# Search suggestions
+'searchsuggest-search' => 'ܒܨܝ',
+'searchsuggest-containing' => 'ܬܚܒܘܫ...',
+
 );
index dd00e1c..fe36fae 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Araucanian (mapudungun)
+/** Mapuche (mapudungun)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -107,7 +107,9 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => 'Kintupe',
+'qbbrowse' => 'Kintun',
 'qbedit' => 'Pepikape',
+'qbpageoptions' => 'Tüfachi wülngiñ',
 'qbpageinfo' => 'Trokiñdungu',
 'qbmyoptions' => 'tañi nütramkawe',
 'qbspecialpages' => 'Kangelu',
@@ -180,6 +182,7 @@ $messages = array(
 'jumpto' => 'Amulün:',
 'jumptonavigation' => 'miyawün',
 'jumptosearch' => 'kintun',
+'pool-errorunknown' => 'Kimnoelchi welulkan',
 
 # 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}} ñi dungu',
@@ -204,6 +207,7 @@ $messages = array(
 'youhavenewmessages' => 'Nieymi $1 ($2).',
 'newmessageslink' => 'weke werkün',
 'newmessagesdifflink' => 'we kalekünun',
+'newmessagesdifflinkplural' => 'we {{PLURAL:$1|kalekünuy|kalekünuy}}',
 'youhavenewmessagesmulti' => 'Nieymi we yefalzugu $1 mew.',
 'editsection' => 'Wirin',
 'editold' => 'kümeelün',
@@ -214,15 +218,22 @@ $messages = array(
 'toc' => 'Trokiñdungu',
 'showtoc' => 'pegelpe',
 'hidetoc' => 'ellkangepe',
+'thisisdeleted' => 'Pen kam kümeeltun $1?',
 'viewdeleted' => 'Küpaadkintuymi $1 am?',
 'restorelink' => '{{PLURAL:$1|kiñe wirin ñamümgün|$1 wirin ñamümün}}',
+'feedlinks' => 'Amuldungu:',
+'site-rss-feed' => '$1 RSS ñi amuldungu',
 'site-atom-feed' => '$1 ñi Atom ñi amuldungu',
+'page-rss-feed' => '«$1» RSS ñi amuldungu',
 'page-atom-feed' => '$1 ñi Atom ñi amuldungu',
 'red-link-title' => '$1 (ngelay tichi adtapül)',
+'sort-descending' => 'Kümeelngen minche püle',
+'sort-ascending' => 'Kümeelngen püra püle',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Wülngiñ',
 'nstab-user' => 'Kellufe',
+'nstab-media' => 'Ad ñi wülngiñ',
 'nstab-special' => 'Wichu wülngiñ',
 'nstab-project' => 'Deumandungu wülngiñ',
 'nstab-image' => 'Eltukawün',
@@ -231,6 +242,9 @@ $messages = array(
 'nstab-help' => 'Kelluwe',
 'nstab-category' => 'Trokiñ',
 
+# Main script and global functions
+'nosuchaction' => 'Mülelay feychi femün',
+
 # General errors
 'error' => 'Welulkan',
 'missing-article' => 'Feychi ngülümdunguwe kintulay feychi wülngiñ ñi wirin, welu nienuafulu. Ñi üy ta "$1" $2.
@@ -245,6 +259,7 @@ Femnuale, welulkafuy feychi küzauwe. Feypimi tüfachi dungu kiñe [[Special:Lis
 'badtitletext' => 'Tüfachi wülngiñ ñi üy kümelay, welliley kam niey weda lasun nülkükawlelu kake dungun kam kake wiki wülngiñ ñi üy.
 Nieafuy falinochi wirin püñamtuam wülngiñ ñi üy.',
 'viewsource' => 'Kimam chew küpan chi wirin',
+'exception-nologin' => 'Petu konlaymi',
 
 # Login and logout pages
 'yourname' => 'Tami üy',
index e5397fa..d10ed89 100644 (file)
@@ -418,7 +418,7 @@ ossabab lli ĝtah hwwa "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "''' nta daba kharj.'''
 
-ila bghiti tqdr tstamr tstaml {{SITENAME}}  kamjhol , olla ila bghiti [[Special:UserLogin|tdkhl aawtani]] bnafs smiya ola bsmiya khra.
+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! ==
@@ -957,8 +957,6 @@ $1",
 'search-interwiki-caption' => 'Maċariĝ ĥĥoṫ',
 'search-interwiki-default' => 'N-Naṫija dyal $1:',
 'search-interwiki-more' => '(z-zyada)',
-'search-mwsuggest-enabled' => 'be qṫiraḫaṫ',
-'search-mwsuggest-disabled' => 'bla qṫiraḫaṫ',
 'search-relatedarticle' => 'mortabita',
 'mwsuggest-disable' => 'attl liqtirahat dyal AJAX',
 'searcheverything-enable' => 'qlleb f-gaĝ n-nitaqaṫ',
index 8fe762b..b438695 100644 (file)
@@ -59,153 +59,153 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تحويل', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__لافهرس__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__لامعرض__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرس__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__لاعنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'شهر_حالى', 'شهر_حالي2', 'شهر_حالي', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'اسم_الشهر_الحالى', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'اسم_الشهر_الحالى_المولد', 'اسم_الشهر_الحالي_المولد', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'اختصار_الشهر_الحالى', 'اختصار_الشهر_الحالي', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'يوم_حالى', 'يوم_حالي', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'يوم_حالى2', 'يوم_حالي2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'اسم_اليوم_الحالى', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'عام_حالى', 'عام_حالي', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'وقت_حالى', 'وقت_حالي', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'شهر_محلى', 'شهر_محلي2', 'شهر_محلي', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'شهر_محلى1', 'شهر_محلي1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'اسم_الشهر_المحلى', 'اسم_شهر_محلى', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'اسم_الشهر_المحلى_المولد', 'اسم_شهر_محلى_مولد', 'اسم_الشهر_المحلي_المولد', 'اسم_شهر_محلي_مولد', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'اختصار_الشهر_المحلى', 'اختصار_شهر_محلى', 'اختصار_الشهر_المحلي', 'اختصار_شهر_محلي', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'يوم_محلى', 'يوم_محلي', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'يوم_محلى2', 'يوم_محلي2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'اسم_اليوم_المحلى', 'اسم_يوم_محلى', 'اسم_اليوم_المحلي', 'اسم_يوم_محلي', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'عام_محلى', 'عام_محلي', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'وقت_محلى', 'وقت_محلي', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ساعة_محلية', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'عدد_الصفحات', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'عدد_المقالات', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'عدد_الملفات', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نطاق', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'عنوان_الصفحة_الفرعى', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'اسم_الصفحة_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'عنوان_الصفحة_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'رسالة:', 'MSG:' ),
-       'subst'                   => array( '0', 'نسخ:', 'إحلال:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'مصدر:', 'مصدر_قالب:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'تصغير', 'مصغر', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'يمين', 'right' ),
-       'img_left'                => array( '1', 'يسار', 'left' ),
-       'img_none'                => array( '1', 'بدون', 'بلا', 'none' ),
-       'img_width'               => array( '1', '$1بك', '$1عن', '$1px' ),
-       'img_center'              => array( '1', 'مركز', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'لاإطار', 'frameless' ),
-       'img_page'                => array( '1', 'صفحة=$1', 'صفحة $1', 'صفحة_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'حد', 'حدود', 'border' ),
-       'img_baseline'            => array( '1', 'خط_أساسى', 'خط_أساسي', 'baseline' ),
-       'img_sub'                 => array( '1', 'فرعى', 'فرعي', 'sub' ),
-       'img_super'               => array( '1', 'سوبر', 'سب', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'أعلى', 'top' ),
-       'img_text_top'            => array( '1', 'نص_أعلى', 'text-top' ),
-       'img_middle'              => array( '1', 'وسط', 'middle' ),
-       'img_bottom'              => array( '1', 'أسفل', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'نص_أسفل', 'text-bottom' ),
-       'img_link'                => array( '1', 'وصلة=$1', 'رابط=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'بديل=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'محتوى:', 'INT:' ),
-       'sitename'                => array( '1', 'اسم_الموقع', 'اسم_موقع', 'SITENAME' ),
-       'ns'                      => array( '0', 'نط:', 'NS:' ),
-       'nse'                     => array( '0', 'نطم:', 'NSE:' ),
-       'localurl'                => array( '0', 'مسار_محلى:', 'مسار_محلي:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'عنوان_المسار_المحلى:', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'خادم', 'SERVER' ),
-       'servername'              => array( '0', 'اسم_الخادم', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'مسار_الهيئة', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'قواعد_اللغة:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'نوع:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__لاتحويل_عنوان__', '__لاتع__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__لاتحويل_محتوى__', '__لاتم__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'أسبوع_حالى', 'أسبوع_حالي', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'يوم_حالى_مأ', 'يوم_حالي_مأ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'أسبوع_محلى', 'أسبوع_محلي', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'يوم_محلى_مأ', 'يوم_محلي_مأ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'رقم_المراجعة', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'جمع:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'مسار_كامل:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'عنوان_كامل:', 'مسار_كامل:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'صغير:', 'LC:' ),
-       'uc'                      => array( '0', 'كبير:', 'UC:' ),
-       'raw'                     => array( '0', 'خام:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'أر', 'آر', 'R' ),
-       'newsectionlink'          => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__لا_وصلة_قسم_جديد__', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'كود_المسار:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'كود_الأنكور', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'طابع_الوقت_الحالي', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'طابع_الوقت_المحلى', 'طابع_الوقت_المحلي', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'علامة_الاتجاه', 'علامة_اتجاه', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#لغة:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'لغة_المحتوى', 'لغة_محتوى', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'صفحات_فى_نطاق:', 'صفحات_فى_نط:', 'صفحات_في_نطاق:', 'صفحات_في_نط:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'عدد_الإداريين', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'صيغة_رقم', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'باد_يسار', 'PADLEFT' ),
-       'padright'                => array( '0', 'باد_يمين', 'PADRIGHT' ),
-       'special'                 => array( '0', 'خاص', 'special' ),
-       'defaultsort'             => array( '1', 'ترتيب_قياسى:', 'ترتيب_افتراضى:', 'مفتاح_ترتيب_قياسى:', 'مفتاح_ترتيب_افتراضى:', 'ترتيب_تصنيف_قياسى:', 'ترتيب_تصنيف_افتراضى:', 'ترتيب_قياسي:', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_قياسي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_قياسي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'وسم', 'tag' ),
-       'hiddencat'               => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'حجم_الصفحة', 'PAGESIZE' ),
-       'index'                   => array( '1', '__فهرسة__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__لافهرسة__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'عدد_فى_المجموعة', 'عدد_فى_مجموعة', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'مسار', 'PATH' ),
-       'url_wiki'                => array( '0', 'ويكى', 'ويكي', 'WIKI' ),
-       'url_query'               => array( '0', 'استعلام', 'QUERY' ),
+       'redirect'                  => array( '0', '#تحويل', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__لافهرس__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__لامعرض__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'شهر_حالى', 'شهر_حالي2', 'شهر_حالي', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'اسم_الشهر_الحالى', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'اسم_الشهر_الحالى_المولد', 'اسم_الشهر_الحالي_المولد', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'اختصار_الشهر_الحالى', 'اختصار_الشهر_الحالي', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'يوم_حالى', 'يوم_حالي', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'يوم_حالى2', 'يوم_حالي2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'اسم_اليوم_الحالى', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'عام_حالى', 'عام_حالي', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'وقت_حالى', 'وقت_حالي', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'شهر_محلى', 'شهر_محلي2', 'شهر_محلي', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'شهر_محلى1', 'شهر_محلي1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'اسم_الشهر_المحلى', 'اسم_شهر_محلى', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'اسم_الشهر_المحلى_المولد', 'اسم_شهر_محلى_مولد', 'اسم_الشهر_المحلي_المولد', 'اسم_شهر_محلي_مولد', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'اختصار_الشهر_المحلى', 'اختصار_شهر_محلى', 'اختصار_الشهر_المحلي', 'اختصار_شهر_محلي', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'يوم_محلى', 'يوم_محلي', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'يوم_محلى2', 'يوم_محلي2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'اسم_اليوم_المحلى', 'اسم_يوم_محلى', 'اسم_اليوم_المحلي', 'اسم_يوم_محلي', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'عام_محلى', 'عام_محلي', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'وقت_محلى', 'وقت_محلي', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ساعة_محلية', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'عدد_الصفحات', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'عدد_المقالات', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'عدد_الملفات', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نطاق', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'عنوان_الصفحة_الفرعى', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'اسم_الصفحة_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'عنوان_الصفحة_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'رسالة:', 'MSG:' ),
+       'subst'                     => array( '0', 'نسخ:', 'إحلال:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'مصدر:', 'مصدر_قالب:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'تصغير', 'مصغر', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'يمين', 'right' ),
+       'img_left'                  => array( '1', 'يسار', 'left' ),
+       'img_none'                  => array( '1', 'بدون', 'بلا', 'none' ),
+       'img_width'                 => array( '1', '$1بك', '$1عن', '$1px' ),
+       'img_center'                => array( '1', 'مركز', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'لاإطار', 'frameless' ),
+       'img_page'                  => array( '1', 'صفحة=$1', 'صفحة $1', 'صفحة_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'حد', 'حدود', 'border' ),
+       'img_baseline'              => array( '1', 'خط_أساسى', 'خط_أساسي', 'baseline' ),
+       'img_sub'                   => array( '1', 'فرعى', 'فرعي', 'sub' ),
+       'img_super'                 => array( '1', 'سوبر', 'سب', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'أعلى', 'top' ),
+       'img_text_top'              => array( '1', 'نص_أعلى', 'text-top' ),
+       'img_middle'                => array( '1', 'وسط', 'middle' ),
+       'img_bottom'                => array( '1', 'أسفل', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'نص_أسفل', 'text-bottom' ),
+       'img_link'                  => array( '1', 'وصلة=$1', 'رابط=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'بديل=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'محتوى:', 'INT:' ),
+       'sitename'                  => array( '1', 'اسم_الموقع', 'اسم_موقع', 'SITENAME' ),
+       'ns'                        => array( '0', 'نط:', 'NS:' ),
+       'nse'                       => array( '0', 'نطم:', 'NSE:' ),
+       'localurl'                  => array( '0', 'مسار_محلى:', 'مسار_محلي:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'عنوان_المسار_المحلى:', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'خادم', 'SERVER' ),
+       'servername'                => array( '0', 'اسم_الخادم', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'مسار_الهيئة', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'قواعد_اللغة:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'نوع:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__لاتحويل_عنوان__', '__لاتع__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__لاتحويل_محتوى__', '__لاتم__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'أسبوع_حالى', 'أسبوع_حالي', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'يوم_حالى_مأ', 'يوم_حالي_مأ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'أسبوع_محلى', 'أسبوع_محلي', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'يوم_محلى_مأ', 'يوم_محلي_مأ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'رقم_المراجعة', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'مسار_كامل:', 'عنوان_كامل:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'عنوان_كامل:', 'مسار_كامل:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'صغير:', 'LC:' ),
+       'uc'                        => array( '0', 'كبير:', 'UC:' ),
+       'raw'                       => array( '0', 'خام:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'أر', 'آر', 'R' ),
+       'newsectionlink'            => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__لا_وصلة_قسم_جديد__', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'كود_المسار:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'كود_الأنكور', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'طابع_الوقت_الحالي', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'طابع_الوقت_المحلى', 'طابع_الوقت_المحلي', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'علامة_الاتجاه', 'علامة_اتجاه', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#لغة:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'لغة_المحتوى', 'لغة_محتوى', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'صفحات_فى_نطاق:', 'صفحات_فى_نط:', 'صفحات_في_نطاق:', 'صفحات_في_نط:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'عدد_الإداريين', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'صيغة_رقم', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'باد_يسار', 'PADLEFT' ),
+       'padright'                  => array( '0', 'باد_يمين', 'PADRIGHT' ),
+       'special'                   => array( '0', 'خاص', 'special' ),
+       'defaultsort'               => array( '1', 'ترتيب_قياسى:', 'ترتيب_افتراضى:', 'مفتاح_ترتيب_قياسى:', 'مفتاح_ترتيب_افتراضى:', 'ترتيب_تصنيف_قياسى:', 'ترتيب_تصنيف_افتراضى:', 'ترتيب_قياسي:', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_قياسي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_قياسي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'وسم', 'tag' ),
+       'hiddencat'                 => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'صفحات_في_التصنيف', 'صفحات_في_تصنيف', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'حجم_الصفحة', 'PAGESIZE' ),
+       'index'                     => array( '1', '__فهرسة__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__لافهرسة__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'عدد_فى_المجموعة', 'عدد_فى_مجموعة', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'مسار', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ويكى', 'ويكي', 'WIKI' ),
+       'url_query'                 => array( '0', 'استعلام', 'QUERY' ),
 );
 
 $specialPageAliases = array(
@@ -682,7 +682,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''أنت دلوقتى مش مسجل دخولك.'''
 
-تقدر تكمل استعمال {{SITENAME}} على انك مجهول، أو [[Special:UserLogin|الدخول مرة تانيه]] بنفس الاسم أو باسم تاني.
+تقدر تكمل استعمال {{SITENAME}} على انك مجهول، أو <span class='plainlinks'>[$1 الدخول مرة تانيه]</span> بنفس الاسم أو باسم تاني.
 ممكن تشوف بعض الصفحات  كأنك متسجل ، و دا علشان استعمال الصفحات المتخبية فى المتصفح بتاعك.",
 'welcomecreation' => '== اهلاً و سهلا يا $1! ==
 اتفتحلك حساب.
@@ -706,6 +706,7 @@ $2',
 'createaccount' => 'افتح حساب',
 'gotaccount' => "عندك حساب؟ '''$1'''.",
 'gotaccountlink' => 'دخول',
+'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
 'createaccountmail' => 'بـ الايميل',
 'createaccountreason' => 'السبب:',
 'badretype' => 'كلمتين السر اللى  كتبتهم مش  زى بعضهم',
@@ -886,9 +887,10 @@ $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}}}} تدور فى السجلات اللى ليها علاقه],
+او [{{fullurl:{{FULLPAGENAME}}|action=edit}} تعدل الصفحه دى]</span>.',
 'userpage-userdoesnotexist' => 'حساب اليوزر "<nowiki>$1</nowiki>" مش متسجل. لو سمحت تشوف لو عايز تبتدي/تعدل الصفحة دي.',
 'userpage-userdoesnotexist-view' => 'حساب اليوزر "$1" مش متسجل',
 'blocked-notice-logextract' => 'اليوزر ده معمول له بلوك دلوقتى.
@@ -903,8 +905,8 @@ $2',
 افتكر أن ملفات ال.css و ال.js بتستخدم حروف صغيرة فى العنوان ، مثلا {{ns:user}}:Foo/vector.css و مش {{ns:user}}:Foo/Vector.css.",
 'updated' => '(متحدثة)',
 'note' => "'''ملحوظه:'''",
-'previewnote' => "''' دى بروفه للصفحه بس،
-ولسه ما تسييفتش!'''",
+'previewnote' => "'''دى بروفه للصفحه بس.'''
+ولسه ما تسييفتش! ،",
 'previewconflict' => 'البروفة دى بتبينلك فوق إزاى ح يكون شكل النص لو انت دوست على حفظ',
 'session_fail_preview' => "'''ما قدرناش  نحفظ التعديلات اللى قمت بيها نتيجة لضياع بيانات  الجلسه.
 الرجاء المحاولة مرة تانيه.
@@ -1172,7 +1174,7 @@ $1",
 'mergelogpagetext' => 'فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.',
 
 # Diffs
-'history-title' => 'تاريخ تعديل "$1"',
+'history-title' => ' «$1»: تاريخ التعديل',
 'difference-multipage' => '(الفرق بين الصفحتين)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
@@ -1222,8 +1224,6 @@ $1",
 'search-interwiki-caption' => 'المشاريع الشقيقة',
 'search-interwiki-default' => '$1 نتيجة:',
 'search-interwiki-more' => '(اأكتر)',
-'search-mwsuggest-enabled' => 'مع اقتراحات',
-'search-mwsuggest-disabled' => 'مافيش اقتراحات',
 'search-relatedarticle' => 'مرتبطه',
 'mwsuggest-disable' => 'تعطيل اقتراحات أجاكس',
 'searcheverything-enable' => 'دور فى النطاقات كلها.',
@@ -1351,8 +1351,8 @@ $1",
 'email' => 'الإيميل',
 'prefs-help-realname' => 'الاسم الحقيقى اختيارى.
 لو إخترت تكتبه, حيستعمل بس علشان شغلك يتنسب لإسمك.',
-'prefs-help-email' => 'اÙ\84Ø¥Ù\8aÙ\85Ù\8aÙ\84 Ø§Ø®ØªÙ\8aارÙ\89, Ø¨Ø³ Ù\84ازÙ\85 Ø¹Ù\84شاÙ\86 Ù\84Ù\88 Ù\86سÙ\8aت Ø§Ù\84پاسÙ\88Ù\88رد.
-ممكن بردو تختار انك تخلّى اليوزرات تبعتلك إيميل من صفحة اليوزر او المناقشه بتاعتك من غير ما تبقى شخصيتك معروفه.',
+'prefs-help-email' => 'عÙ\86Ù\88اÙ\86 Ø§Ù\84Ù\84Ø¥Ù\8aÙ\85Ù\8aÙ\84 Ø§Ø®ØªÙ\8aارÙ\89 Ø\8c Ø¨Ø³ Ù\84ازÙ\85 Ø¹Ù\84شاÙ\86 Ù\84Ù\88 Ù\86سÙ\8aت Ø§Ù\84پاسÙ\88Ù\88رد..',
+'prefs-help-email-others' => 'ممكن بردو تختار انك تخلّى اليوزرات تبعتلك إيميل من صفحة اليوزر او المناقشه بتاعتك من غير ما تبقى شخصيتك معروفه.',
 'prefs-help-email-required' => 'عنوان الإيميل مطلوب.',
 'prefs-info' => 'معلومات اساسيه',
 'prefs-i18n' => 'التدويل',
@@ -2077,6 +2077,7 @@ PICT # misc.
 # Watchlist
 'watchlist' => 'لستة الصفحات اللى باراقبها',
 'mywatchlist' => 'لستة  الصفح اللى باراقبها',
+'watchlistfor2' => 'لليوزر $1 ($2)',
 'nowatchlist' => 'مافيش حاجة فى لستة مراقبتك.',
 'watchlistanontext' => 'لو سمحت $1 لعرض أو تعديل الصفحات فى لستة مراقبتك.',
 'watchnologin' => 'مش متسجل',
@@ -2338,6 +2339,7 @@ $1',
 'sp-contributions-newbies-title' => 'مساهمات  اليوزر للحسابات الجديدة',
 'sp-contributions-blocklog' => 'سجل المنع',
 'sp-contributions-deleted' => 'تعديلات اليوزر الممسوحه',
+'sp-contributions-uploads' => 'مرفوعات',
 'sp-contributions-logs' => 'السجلات',
 'sp-contributions-talk' => 'مناقشه',
 'sp-contributions-userrights' => 'ادارة حقوق اليوزر',
@@ -2345,6 +2347,7 @@ $1',
 آخر عمليه منع في السجل موجوده تحت كمرجع:',
 'sp-contributions-search' => 'دور على مساهمات',
 'sp-contributions-username' => 'عنوان أيبى أو اسم يوزر:',
+'sp-contributions-toponly' => 'اظهر اختير تعديل  بس',
 'sp-contributions-submit' => 'تدوير',
 
 # What links here
@@ -2738,6 +2741,7 @@ $1',
 'tooltip-upload' => 'ابتدى التحميل',
 'tooltip-rollback' => "\"'''ترجيع'''\" بيرجع بدوسه واحده التعديل (التعديلات) فى الصفحه دى لاخر واحد عدل الصفحه.",
 'tooltip-undo' => '"رجوع" بترجع  التعديل دا وبتفتح استمارة التعديل فى شكل البروفة. بتسمح بإضافة سبب فى الملخص.',
+'tooltip-summary' => 'اكتب ملخص قصير',
 
 # Stylesheets
 'common.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على كل الواجهات */',
@@ -2875,7 +2879,8 @@ $1',
 إذا كان الملف اتعدل عن حالته الأصلية، فبعض التفاصيل مش ها تعبر عن الملف المعدل.',
 'metadata-expand' => 'عرض التفاصيل الاضافيه',
 'metadata-collapse' => 'تخبية التفاصيل الاضافيه',
-'metadata-fields' => 'حقول معطيات الميتا EXIF الموجوده فى الرساله دى هاتتعرض فى صفحة الصوره لما يكون جدول معطيات الميتا مضغوط. الحقول التانيه هاتكون مخفيه افتراضيا.
+'metadata-fields' => 'معطيات الميتا الموجوده فى الرساله دى هاتتعرض فى صفحة الصوره لما يكون جدول معطيات الميتا مضغوط.
+المعطيات التانيه هاتكون مخفيه .
 * make
 * model
 * datetimeoriginal
@@ -3479,4 +3484,8 @@ $5
 'revdelete-unrestricted' => 'شيل الضوابط من على السيسوبات',
 'newuserlog-byemail' => 'الباسورد اتبعتت بالايميل',
 
+# Search suggestions
+'searchsuggest-search' => 'تدوير',
+'searchsuggest-containing' => 'جوّاه...',
+
 );
index fea431a..7245f38 100644 (file)
@@ -30,8 +30,8 @@ $namespaceNames = array(
        NS_PROJECT_TALK     => '$1_বাৰ্তা',
        NS_FILE             => 'চিত্ৰ',
        NS_FILE_TALK        => 'চিত্ৰ_বাৰ্তা',
-       NS_MEDIAWIKI        => 'মà§\87ডিয়াৱিকি',
-       NS_MEDIAWIKI_TALK   => 'মà§\87ডিয়াৱিà¦\95ি_বাৰà§\8dতা',
+       NS_MEDIAWIKI        => 'মিডিয়াৱিকি',
+       NS_MEDIAWIKI_TALK   => 'মিডিয়াৱিà¦\95ি_à¦\86লà§\8bà¦\9aনা',
        NS_TEMPLATE         => 'সাঁচ',
        NS_TEMPLATE_TALK    => 'সাঁচ_বাৰ্তা',
        NS_HELP             => 'সহায়',
@@ -53,6 +53,8 @@ $namespaceAliases = array(
        'चित्र_वार्ता' => NS_FILE_TALK,
        'চিত্র' => NS_FILE,
        'চিত্র বার্তা' => NS_FILE_TALK,
+       'মেডিয়াৱিকি' => NS_MEDIAWIKI,
+       'মেডিয়াৱিকি_বাৰ্তা' => NS_MEDIAWIKI_TALK,
        'MediaWiki বার্তা' => NS_MEDIAWIKI_TALK,
        'साँचा' => NS_TEMPLATE,
        'साँचा_वार्ता' => NS_TEMPLATE_TALK,
@@ -65,35 +67,104 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
+       'Activeusers'               => array( 'সক্ৰিয়_সদস্যসকল' ),
+       'Allmessages'               => array( 'সকলোবোৰ_বাৰ্তা' ),
        'Allpages'                  => array( 'সকলোবোৰ_পৃষ্ঠা' ),
-       'Contributions'             => array( 'অৱদানবোৰ' ),
+       'Ancientpages'              => array( 'পুৰণি_পৃষ্ঠা' ),
+       'Badtitle'                  => array( 'ভুল_শিৰোনাম' ),
+       'Blankpage'                 => array( 'উকা_পৃষ্ঠা' ),
+       'Block'                     => array( 'অৱৰোধ', 'আই_পি_অৱৰোধ', 'সদস্য_অৱৰোধ' ),
+       'Blockme'                   => array( 'মোক_অৱৰোধ_কৰক' ),
+       'Booksources'               => array( 'গ্ৰন্থৰ_উত্স' ),
+       'BrokenRedirects'           => array( 'ভঙা_পূণঃনিৰ্দেশনাসমূহ' ),
+       'Categories'                => array( 'শ্ৰেণীসমূহ' ),
+       'ChangeEmail'               => array( 'ইমেইল_সলনি_কৰক' ),
+       'ChangePassword'            => array( 'গুপ্তশব্দ_সলনি_কৰক', 'গুপ্তশব্দ_সলনি' ),
+       'ComparePages'              => array( 'তুলনা_কৰক' ),
+       'Confirmemail'              => array( 'ইমেইল_নিশ্চিত_কৰক' ),
+       'Contributions'             => array( 'বৰঙনিসমূহ', 'বৰঙনিদাতাসকল', 'বৰঙনি' ),
        'CreateAccount'             => array( 'সদস্যভুক্তি' ),
+       'DeletedContributions'      => array( 'বিলোপ_কৰা_বৰঙনিসমূহ' ),
+       'Disambiguations'           => array( 'দ্ব্যৰ্থতা_দূৰীকৰণসমূহ' ),
+       'DoubleRedirects'           => array( 'দ্বি_পুণঃনিৰ্দেশনাসমূহ' ),
+       'EditWatchlist'             => array( 'লক্ষ্যতালিকা_সম্পাদনা_কৰক' ),
+       'Emailuser'                 => array( 'সদস্যলৈ_ই-মেইল_পঠিয়াওক' ),
+       'Export'                    => array( 'ৰপ্তানি' ),
+       'Fewestrevisions'           => array( 'নূন্যতম_সংস্কৰণসমূহ' ),
+       'FileDuplicateSearch'       => array( 'প্ৰতিলিপি_সনিবিষ্ট_নথি_অনুসন্ধান' ),
+       'Filepath'                  => array( 'ফাইলৰ_পথ' ),
+       'Import'                    => array( 'আমদানি' ),
+       'Invalidateemail'           => array( 'অবৈধ_ই-মেইল' ),
+       'JavaScriptTest'            => array( 'জাভাস্ক্ৰীপ্ত_পৰীক্ষা' ),
+       'BlockList'                 => array( 'অৱৰোধৰ_তালিকা' ),
+       'LinkSearch'                => array( 'সংযোগ_সন্ধান' ),
+       'Listadmins'                => array( 'প্ৰশাসকৰ_তালিকা' ),
+       'Listbots'                  => array( 'বটৰ_তালিকা' ),
        'Listfiles'                 => array( 'চিত্ৰ-তালিকা' ),
        'Listgrouprights'           => array( 'গোটৰ_অধিকাৰসমূহ' ),
+       'Listredirects'             => array( 'পুণঃনিৰ্দেশনাসমূহৰ_তালিকা' ),
        'Listusers'                 => array( 'সদস্য-তালিকা' ),
+       'Lockdb'                    => array( 'তথ্যকোষ_বন্ধ_কৰক' ),
+       'Log'                       => array( 'অভিলেখ', 'অভিলেখসমূহ' ),
        'Lonelypages'               => array( 'অকলশৰীয়া_পৃষ্ঠা' ),
-       'Mycontributions'           => array( 'মোৰ_অৱদান' ),
+       'Longpages'                 => array( 'দীঘলীয়া_পৃষ্ঠাসমূহ' ),
+       'MergeHistory'              => array( 'একত্ৰীকৰণ_ইতিহাস' ),
+       'MIMEsearch'                => array( 'MIME_অনুসন্ধান' ),
+       'Movepage'                  => array( 'পৃষ্ঠা_স্থানান্তৰ' ),
+       'Mycontributions'           => array( 'মোৰ_বৰঙনি' ),
        'Mypage'                    => array( 'মোৰ_পৃষ্ঠা' ),
        'Mytalk'                    => array( 'মোৰ_কথোপকথন' ),
+       'Myuploads'                 => array( 'মোৰ_আপল’ডসমূহ' ),
        'Newimages'                 => array( 'নতুন_চিত্ৰ' ),
+       'Newpages'                  => array( 'পৰৱৰ্তী_পৃষ্ঠা' ),
+       'PasswordReset'             => array( 'গুপ্তশব্দ_ঘূৰাই_আনক' ),
+       'PermanentLink'             => array( 'স্থায়ী_সংযোগ' ),
        'Popularpages'              => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ),
        'Preferences'               => array( 'পচন্দ' ),
+       'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
+       'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
        'Randompage'                => array( 'আকস্মিক' ),
-       'Recentchanges'             => array( 'শেহতীয়া_কাম' ),
-       'Specialpages'              => array( 'বিশেষ_পৃষ্ঠাবোৰ' ),
+       'Randomredirect'            => array( 'আকস্মিক_পুণঃনিৰ্দেশনা' ),
+       'Recentchanges'             => array( 'শেহতীয়া_সালসলনি' ),
+       'Recentchangeslinked'       => array( 'সম্পৰ্কিত_সালসলনিসমূহ' ),
+       'Revisiondelete'            => array( 'সংস্কৰণ_বিলোপ' ),
+       'RevisionMove'              => array( 'সংস্কৰণ_স্থানান্তৰ' ),
+       'Search'                    => array( 'সন্ধান' ),
+       'Shortpages'                => array( 'চমু_পৃষ্ঠা' ),
+       'Specialpages'              => array( 'বিশেষ_পৃষ্ঠাসমূহ' ),
        'Statistics'                => array( 'পৰিসংখ্যা' ),
+       'Tags'                      => array( 'টেগসমূহ' ),
+       'Unblock'                   => array( 'অৱৰোধ_বাৰণ' ),
        'Uncategorizedcategories'   => array( 'অবিন্যস্ত_শ্ৰেণীসমূহ' ),
-       'Uncategorizedimages'       => array( 'à¦\85বিনà§\8dযসà§\8dত_à¦\9aিতà§\8dৰবà§\8bৰ' ),
+       'Uncategorizedimages'       => array( 'à¦\85বিনà§\8dযসà§\8dত_à¦\9aিতà§\8dৰসমà§\82হ' ),
        'Uncategorizedpages'        => array( 'অবিন্যস্ত_পৃষ্ঠাসমূহ' ),
-       'Uncategorizedtemplates'    => array( 'অবিন্যস্ত_সাঁচবোৰ' ),
+       'Uncategorizedtemplates'    => array( 'অবিন্যস্ত_সাঁচসমূহ' ),
+       'Undelete'                  => array( 'বিলোপ_ঘূৰাই_আনক' ),
+       'Unlockdb'                  => array( 'তথ্যকোষ_খোলক' ),
        'Unusedcategories'          => array( 'অব্যৱহৃত_শ্ৰেণীসমূহ' ),
-       'Unusedimages'              => array( 'অব্যৱহৃত_চিত্ৰবোৰ' ),
-       'Upload'                    => array( 'বোজাই' ),
-       'Userlogin'                 => array( 'সদস্যৰ_প্ৰবেশ' ),
+       'Unusedimages'              => array( 'অব্যৱহৃত_চিত্ৰসমূহ' ),
+       'Unusedtemplates'           => array( 'অব্যৱহৃত_সাঁচসমূহ' ),
+       'Unwatchedpages'            => array( 'লক্ষ্য_নৰখা_পৃষ্ঠাসমূহ' ),
+       'Upload'                    => array( 'আপল’ড', 'বোজাই' ),
+       'Userlogin'                 => array( 'সদস্যৰ_প্ৰৱেশ' ),
        'Userlogout'                => array( 'সদস্যৰ_প্ৰস্থান' ),
+       'Userrights'                => array( 'সদস্যৰ_অধিকাৰ', 'প্ৰশাসক_সৃষ্টি', 'বট_সৃষ্টি' ),
+       'Version'                   => array( 'সংস্কৰণ' ),
        'Wantedcategories'          => array( 'আকাংক্ষিত_শ্ৰেণীসমূহ' ),
-       'Wantedpages'               => array( 'আকাংক্ষিত_পৃষ্ঠাসমূহ' ),
+       'Wantedfiles'               => array( 'কাম্য_ফাইলসমূহ' ),
+       'Wantedpages'               => array( 'কাম্য_পৃষ্ঠাসমূহ', 'ভগা_সংযোগসমূহ' ),
+       'Wantedtemplates'           => array( 'কাম্য_সাঁচসমূহ' ),
        'Watchlist'                 => array( 'লক্ষ্যতালিকা' ),
+       'Whatlinkshere'             => array( 'পৃষ্ঠালৈ_থকা_সংযোগসমূহ' ),
+       'Withoutinterwiki'          => array( 'আন্তঃৱিকিবিহীন' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', 'পুণঃনিৰ্দেশ', '#REDIRECT' ),
+       'special'                   => array( '0', 'বিশেষ', 'special' ),
+       'hiddencat'                 => array( '1', '__গোপন_শ্ৰেণী__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'পৃষ্ঠাৰ_আকাৰ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__সূচী__', '__INDEX__' ),
 );
 
 $digitTransformTable = array(
@@ -375,6 +446,8 @@ $1',
 'youhavenewmessages' => 'আপোনাৰ কাৰণে $1 আছে। ($2)',
 'newmessageslink' => 'নতুন সংবাদ',
 'newmessagesdifflink' => 'শেহতীয়া সাল-সলনি',
+'newmessageslinkplural' => '{{PLURAL:$1|এটা নতুন বাৰ্তা|নতুন বাৰ্তা}}',
+'newmessagesdifflinkplural' => 'অন্তিম {{PLURAL:$1|সংশোধন}}',
 'youhavenewmessagesmulti' => '$1ত আপোনাৰ কাৰণে নতুন সংবাদ আছে',
 'editsection' => 'সম্পাদনা কৰক',
 'editold' => 'সম্পাদনা',
@@ -511,7 +584,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''আপুনি প্ৰস্থান কৰিলে ।'''
 
-আপুনি বেনামী ভাবেও {{SITENAME}} ব্যৱহাৰ কৰিব পাৰে, অথবা আকৌ সেই একে বা বেলেগ নামেৰে [[Special:UserLogin|প্ৰৱেশ]] কৰিব পাৰে।
+আপুনি বেনামী ভাবেও {{SITENAME}} ব্যৱহাৰ কৰিব পাৰে, অথবা আকৌ সেই একে বা বেলেগ নামেৰে <span class='plainlinks'>[$1 প্ৰৱেশ]</span> কৰিব পাৰে।
 মন কৰিব যে যেতিয়ালৈকে আপোনাৰ ব্ৰাউজাৰৰ অস্থায়ী-স্মৃতি (cache memory) খালী নকৰে, তেতিয়ালৈকে কিছুমান পৃষ্ঠাত আপুনি প্ৰৱেশ কৰা বুলি দেখুৱাই থাকিব পাৰে।",
 'welcomecreation' => '== আদৰিছোঁ, $1! ==
 আপোনাৰ সদস্যভুক্তি হৈ গ’ল ।
@@ -1132,8 +1205,6 @@ $1",
 'search-interwiki-caption' => 'সহপ্ৰকল্পসমূহ',
 'search-interwiki-default' => '$1 ফলাফলসমূহ:',
 'search-interwiki-more' => '(আৰু)',
-'search-mwsuggest-enabled' => 'উপদেশ সহ',
-'search-mwsuggest-disabled' => 'উপদেশ নাই',
 'search-relatedarticle' => 'সম্পৰ্কিত',
 'mwsuggest-disable' => 'AJAX পৰামৰ্শ নিষ্ক্ৰিয় কৰক',
 'searcheverything-enable' => 'সকলো নামস্থানত অনুসন্ধান কৰক',
@@ -1252,7 +1323,7 @@ $1",
 'yourlanguage' => 'ভাষা:',
 'yourvariant' => 'বিষয়-বস্তুৰ ভাষা বিকল্প',
 'prefs-help-variant' => 'এই ৱিকিৰ সমল পৃষ্ঠাসমূহ প্ৰদৰ্শন কৰিবলে আপোনাৰ পছন্দৰ অপৰ অথবা বৰ্ণবিন্যাস।',
-'yournick' => 'নতà§\81ন à¦¸à§\8dবাà¦\95à§\8dষà§\8dযৰ:',
+'yournick' => 'নতুন স্বাক্ষৰ:',
 'prefs-help-signature' => 'কথা-বতৰা পৃষ্ঠাত মন্তব্যসমূহৰ তলত "<nowiki>~~~~</nowiki>" লিখিলে ই স্বয়ংক্ৰিয়ভাৱে আপোনাৰ নাম আৰু সময় সংযুক্ত কৰিব ।',
 'badsig' => 'অনুপযোগী স্বাক্ষ্যৰ, HTML টেগ পৰীক্ষা কৰি লওক।',
 'badsiglength' => 'আপোনাৰ স্বাক্ষৰ অত্যাধিক দীঘলীয়া ।
@@ -1927,6 +1998,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'mostlinkedtemplates' => 'সৰ্বোচ্চ সংযোজিত সাঁচসমূহ',
 'mostcategories' => 'সৰ্বোচ্চ শ্ৰেণীসমৃদ্ধ প্ৰবন্ধসমূহ',
 'mostimages' => 'সৰ্বোচ্চ সংযোজিত ফাইলসমূহ',
+'mostinterwikis' => 'সৰ্বোচ্চ আন্তঃৱিকিসমৃদ্ধ পৃষ্ঠাসমূহ',
 'mostrevisions' => 'অধিকবাৰ সম্পাদনা কৰা পৃষ্ঠাসমূহ',
 'prefixindex' => 'উপসৰ্গসহ সকলো পৃষ্ঠা',
 'prefixindex-namespace' => 'উপসৰ্গ ($1 namespace) -ৰ সৈতে সকলো পৃষ্ঠা',
@@ -2072,6 +2144,8 @@ 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' => 'তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি আপুনি এই সদস্যজনলৈ ই-মেইল পঠাব পাৰে ।
 আপুনি [[Special:Preferences|আপোনাৰ সদস্য পছন্দসমূহ]]ত প্ৰৱেশ কৰা ই-মেইল ঠিকনাটো প্ৰেৰকৰ ঠিকনা হিছাপে দেখা যাব, যাতে মেইলৰ প্ৰাপকে আপোনাক উত্তৰ দিব পাৰে ।',
@@ -2218,6 +2292,7 @@ $UNWATCHURL
 'rollback' => 'সম্পাদনা পূৰ্ববৎ কৰক',
 'rollback_short' => 'পূৰ্ববৎ কৰক',
 'rollbacklink' => 'পূৰ্ববৎ কৰক',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাসমূহ}} পূৰ্বৱত কৰক',
 'rollbackfailed' => 'পূৰ্ববৎ ব্যৰ্থ',
 'cantrollback' => 'পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিব নোৱাৰি;
 শেষৰ সম্পাদকজন এই পৃষ্ঠাৰ একমাত্ৰ লেখক ।',
@@ -2771,7 +2846,6 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 
 # JavaScriptTest
 'javascripttest' => 'জাভাস্ক্ৰিপ্ট পৰীক্ষা।',
-'javascripttest-disabled' => 'এই ৱিকিত এই কাৰ্যটো সক্ৰিয় কৰা হোৱা নাই।',
 'javascripttest-title' => '$1 পৰীক্ষাসমূহ চলোৱা হৈছে',
 'javascripttest-pagetext-noframework' => 'এই পৃষ্ঠাখন জাভালিপি পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।',
 'javascripttest-pagetext-unknownframework' => 'অজ্ঞাত সম্পৰীক্ষা ফ্ৰেমৱৰ্ক "$1"।',
@@ -2809,9 +2883,9 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'tooltip-p-logo' => 'বেটুপাত খুলিবৰ কাৰণে',
 'tooltip-n-mainpage' => 'বেটুপাত খুলিবৰ কাৰণে',
 'tooltip-n-mainpage-description' => 'প্ৰথম পৃষ্ঠা পৰিদৰ্শন কৰক',
-'tooltip-n-portal' => 'ৱিà¦\95িপিডিয়া à¦¬à§\8dৰাà¦\93à¦\9c à¦\95ৰিবলà§\88',
+'tooltip-n-portal' => 'ৱিà¦\95িপিডিয়া à¦¸à¦\82à¦\95à§\8dৰানà§\8dতà§\80য় à¦\97à§\81ৰà§\81তà§\8dবপà§\82ৰà§\8dণ à¦\86লà§\8bà¦\9aনা à¦\95à¦\95à§\8dষ',
 'tooltip-n-currentevents' => 'সাম্প্ৰতিক ঘটনাৱলীৰ পটভূমি',
-'tooltip-n-recentchanges' => 'শà§\87হতà§\80য়া à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হৰ à¦¸à§\82à¦\9aà§\80',
+'tooltip-n-recentchanges' => 'à¦\85সমà§\80য়া à§±à¦¿à¦\95িপিডিয়াত à¦¹à§\8bৱা à¦¶à§\87হতà§\80য়া à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হ à¦\9aাà¦\93à¦\95',
 'tooltip-n-randompage' => 'অ-পূৰ্বনিৰ্ধাৰিতভাবে যিকোনো এটা পৃষ্ঠা দেখুৱাবৰ কাৰণে',
 'tooltip-n-help' => 'সহায়ৰ বাবে ইয়াত ক্লিক কৰক',
 'tooltip-t-whatlinkshere' => 'ইয়ালৈ সংযোজিত সকলো পৃষ্ঠাৰ সুচী',
@@ -3728,6 +3802,10 @@ $5
 'feedback-bugcheck' => 'অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।',
 'feedback-bugnew' => 'মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক',
 
+# Search suggestions
+'searchsuggest-search' => 'সন্ধান কৰক',
+'searchsuggest-containing' => 'যি আছে...',
+
 # API errors
 'api-error-badaccess-groups' => "এই ৱিকিত ফাইল আপল'ড কৰিবলৈ আপোনাৰ অনুমতি নাই।",
 'api-error-badtoken' => 'আভ্যন্তৰীণ ত্ৰুটি: ভুল টোকেন।',
index 20630b6..17b5379 100644 (file)
@@ -226,7 +226,7 @@ $messages = array(
 'namespaces' => 'Espacios de nome',
 'variants' => 'Variantes',
 
-'errorpagetitle' => 'Fallu',
+'errorpagetitle' => 'Error',
 'returnto' => 'Tornar a $1.',
 'tagline' => 'De {{SITENAME}}',
 'help' => 'Ayuda',
@@ -375,7 +375,7 @@ Tamién podría ser un bug nel software usáu por {{SITENAME}}.",
 Pues atopar una llista de les páxines especiales válides en [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Fallu',
+'error' => 'Error',
 'databaseerror' => 'Fallu na base de datos',
 'dberrortext' => "Hebo un fallu de sintaxis nuna consulta a la base de datos.
 Esti fallu pue ser por un problema del software.
@@ -468,7 +468,7 @@ L'alministrador que lu bloquió dio esti motivu: «$3».",
 # Login and logout pages
 'logouttext' => "'''Agora tas desconeutáu.'''
 
-Pues siguir usando {{SITENAME}} de forma anónima, o pues [[Special:UserLogin|volver entrar]] como'l mesmu o como otru usuariu.
+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.
@@ -1013,10 +1013,11 @@ Nun tienes accesu al mesmu.',
 'revdelete-concurrent-change' => "Error al camudar l'elementu con data $2, $1: paez que'l so estáu camudólu otra persona mientres tentabes camudalu tu.
 Comprueba los rexistros, por favor.",
 'revdelete-only-restricted' => "Fallu al anubrir l'elementu con data $1, $2: nun se puen quitar elementos de la vista de los alministradores ensin escoyer tamién una de les otres opciones de visibilidá.",
-'revdelete-reason-dropdown' => '*Razones comúnes de desaniciu 
+'revdelete-reason-dropdown' => "*Razones comúnes de desaniciu 
 ** Violación del Copyright
-** Información personal non apropiada
-** Información potencialmente bilordiosa',
+** Información personal o comentariu non apropiáu
+** Nome d'usuariu non apropiáu
+** Información potencialmente bilordiosa",
 'revdelete-otherreason' => 'Motivu distintu/adicional:',
 'revdelete-reasonotherlist' => 'Otru motivu',
 'revdelete-edit-reasonlist' => 'Editar motivos del desaniciu',
@@ -1113,8 +1114,6 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'search-interwiki-caption' => 'Proyeutos hermanos',
 'search-interwiki-default' => '$1 resultaos:',
 'search-interwiki-more' => '(más)',
-'search-mwsuggest-enabled' => 'con suxerencies',
-'search-mwsuggest-disabled' => 'ensin suxerencies',
 'search-relatedarticle' => 'Rellacionáu',
 'mwsuggest-disable' => 'Desactivar les suxerencies AJAX',
 'searcheverything-enable' => 'Buscar en tolos espacios de nome',
@@ -1778,6 +1777,7 @@ Seique quieras camudar la descripción de la so [páxina de descripción de fich
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'un repositoriu compartíu',
 'filepage.css' => "/* El CSS allugáu equí s'incluye na páxina de descripción del ficheru, que tamién s'incluye nes wikis clientes foriates */",
+'upload-disallowed-here' => 'Por desgracia nun pues sobrescribir esta imaxe.',
 
 # File reversion
 'filerevert' => 'Revertir $1',
@@ -2061,7 +2061,9 @@ Pue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] toca
 y tener una direición de corréu válida nes tos [[Special:Preferences|preferencies]]
 pa poder unviar correos a otros usuarios.',
 'emailuser' => 'Manda-y un corréu a esti usuariu',
-'emailpage' => "Corréu d'usuariu",
+'emailuser-title-target' => 'Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}',
+'emailuser-title-notarget' => 'Unviar un corréu electrónicu a un usuariu',
+'emailpage' => 'Envigar un corréu electrónicu a un usuariu',
 'emailpagetext' => "Pues usar el formulariu d'embaxo pa unviar un corréu electrónicu a esti usuariu.
 La direición de corréu electrónicu qu'especificasti nes [[Special:Preferences|tos preferencies d'usuariu]] va apaecer como la direición \"Dende\" del corréu, pa que'l que lo recibe seya quien a respondete direutamente a ti.",
 'usermailererror' => "L'operador de corréu devolvió un error:",
@@ -2749,7 +2751,6 @@ Guárdalu nel ordenador y xúbilu equí.",
 
 # JavaScriptTest
 'javascripttest' => 'Prueba de JavaScript',
-'javascripttest-disabled' => 'Esta función ta desactivada.',
 'javascripttest-title' => 'Executando pruebes de $1',
 'javascripttest-pagetext-noframework' => 'Esta páxina ta acutada pa executar pruebes de javascript.',
 'javascripttest-pagetext-unknownframework' => "L'entornu de pruebes «$1» ye desconocíu.",
@@ -2890,11 +2891,33 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 
 # Info page
 'pageinfo-title' => 'Información sobro "$1"',
-'pageinfo-header-edits' => 'Ediciones',
+'pageinfo-header-basic' => 'Información básica',
+'pageinfo-header-edits' => "Historial d'ediciones",
+'pageinfo-header-restrictions' => 'Proteición de páxina',
+'pageinfo-header-properties' => 'Propiedaes de la páxina',
+'pageinfo-display-title' => 'Amosar el títulu',
+'pageinfo-default-sort' => "Clave d'ordenación predeterminada",
+'pageinfo-length' => 'Llonxitú de la páxina (en bytes)',
+'pageinfo-article-id' => 'ID de la páxina',
+'pageinfo-robot-policy' => 'Estáu del motor de gueta',
+'pageinfo-robot-index' => 'Pue ser índiz',
+'pageinfo-robot-noindex' => 'Nun pue ser índiz',
 'pageinfo-views' => 'Númberu de visites',
-'pageinfo-watchers' => 'Númberu de vixilantes',
-'pageinfo-edits' => "Númberu d'ediciones",
-'pageinfo-authors' => "Númberu d'autores distintos",
+'pageinfo-watchers' => 'Númberu de vixilantes de la páxina',
+'pageinfo-redirects-name' => 'Redireiciones a esta páxina',
+'pageinfo-subpages-name' => "Subpáxines d'esta páxina",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redireición|redireiciones}}; $3 {{PLURAL:$3|non-redireición|non-redireiciones}})',
+'pageinfo-firstuser' => 'Creador de la páxina',
+'pageinfo-firsttime' => 'Data de creación de la páxina',
+'pageinfo-lastuser' => 'Caberu editor',
+'pageinfo-lasttime' => 'Data de la cabera edición',
+'pageinfo-edits' => "Númberu total d'ediciones",
+'pageinfo-authors' => "Númberu total d'autores distintos",
+'pageinfo-recent-edits' => "Númberu d'ediciones recientes (nos caberos $1)",
+'pageinfo-recent-authors' => "Númberu d'autores distintos recientes",
+'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)',
 
 # Skin names
 'skinname-standard' => 'Clásicu',
@@ -2945,6 +2968,7 @@ Al executalu pues comprometer el to sistema.",
 'file-info-size-pages' => '$1 × $2 pixels, tamañu del ficheru: $3, triba MIME: $4, $5 {{PLURAL:$5|páxina|páxines}}',
 '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',
 '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.',
@@ -2954,6 +2978,8 @@ Al executalu pues comprometer el to sistema.",
 'file-info-png-looped' => 'animáu',
 'file-info-png-repeat' => 'reproducíu $1 {{PLURAL:$1|vez|veces}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|cuadru|cuadros}}',
+'file-no-thumb-animation' => "'''Nota: pola mor de llímites téunicos, les miniatures d'esti ficheru nun tan animaes.'''",
+'file-no-thumb-animation-gif' => "'''Nota: pola mor de llímites téunicos, les miniatures d'imaxes GIF d'alta resolución como esta nun tan animaes.'''",
 
 # Special:NewFiles
 'newimages' => "Galería d'imáxenes nueves",
@@ -3750,6 +3776,10 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'feedback-bugcheck' => '¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].',
 'feedback-bugnew' => "Yá lo comprobé. Informar d'esti fallu nuevu",
 
+# Search suggestions
+'searchsuggest-search' => 'Guetar',
+'searchsuggest-containing' => 'que contién...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nun tienes permisu pa xubir ficheros a esta wiki.',
 'api-error-badtoken' => 'Fallu internu: token incorreutu.',
index 5aa62c2..a75a86f 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Avaric (Ð\90вар)
+/** Avaric (авар)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -18,35 +18,35 @@ $fallback = 'ru';
 
 $messages = array(
 # Dates
-'sunday'    => 'ГьатӀан',
-'monday'    => 'Итни',
-'tuesday'   => 'Талат',
+'sunday' => 'ГьатӀан',
+'monday' => 'Итни',
+'tuesday' => 'Талат',
 'wednesday' => 'АрбагӀ',
-'thursday'  => 'Хамиз',
-'friday'    => 'Рузман',
-'saturday'  => 'Шаммат',
+'thursday' => 'Хамиз',
+'friday' => 'Рузман',
+'saturday' => 'Шаммат',
 
 'mytalk' => 'Дур бахlс',
-'and'    => '&#32;ва',
+'and' => '&#32;ва',
 
-'errorpagetitle'   => 'Гъалатl',
-'help'             => 'Кумек',
-'history'          => 'Хиса-басазул тарих',
+'errorpagetitle' => 'Гъалатl',
+'help' => 'Кумек',
+'history' => 'Хиса-басазул тарих',
 'printableversion' => 'КутӀизе версия',
-'permalink'        => 'Кидаго букӀунеб рехсей',
-'edit'             => 'Хисизабе',
-'talkpage'         => 'Гьумералда тlасан бахlс',
-'talk'             => 'Бахlс',
-'toolbox'          => 'Алатал',
-'userpage'         => 'ГӀахьалчиясул гьумер',
-'otherlanguages'   => 'Цойги мацӀазда',
+'permalink' => 'Кидаго букӀунеб рехсей',
+'edit' => 'Хисизабе',
+'talkpage' => 'Гьумералда тlасан бахlс',
+'talk' => 'Бахlс',
+'toolbox' => 'Алатал',
+'userpage' => 'ГӀахьалчиясул гьумер',
+'otherlanguages' => 'Цойги мацӀазда',
 
 # 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).
-'currentevents'        => 'Жакъасел лъугьа-бахъинал',
-'mainpage'             => 'БетӀераб гьумер',
+'currentevents' => 'Жакъасел лъугьа-бахъинал',
+'mainpage' => 'БетӀераб гьумер',
 'mainpage-description' => 'БетӀераб гьумер',
-'portal'               => 'Майдан',
-'portal-url'           => 'Project:Майдан',
+'portal' => 'Майдан',
+'portal-url' => 'Project:Майдан',
 
 'editsection' => 'хисизабизе',
 
@@ -54,12 +54,12 @@ $messages = array(
 'nstab-help' => 'Кумек',
 
 # General errors
-'error'         => 'Гъалатl',
+'error' => 'Гъалатl',
 'internalerror' => 'Жанисеб гъалатl',
-'viewsource'    => 'Код бихьи',
+'viewsource' => 'Код бихьи',
 
 # Login and logout pages
-'userlogin'  => 'ЦIар бице',
+'userlogin' => 'ЦIар бице',
 'userlogout' => 'Къватlиве лъугьине',
 
 # Edit pages
@@ -67,27 +67,27 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'Рекъезаби',
-'localtime'   => 'Бакlалъул заман',
+'localtime' => 'Бакlалъул заман',
 
 # User rights
 'userrights-user-editname' => 'ГӀахьалчиясул цӀар хъвай:',
 
 # Recent changes
-'recentchanges'   => 'ЦӀиял хиса-басал',
+'recentchanges' => 'ЦӀиял хиса-басал',
 'rcshowhideminor' => '$1 гӀиси-микъинал хиса-басал',
-'rcshowhidebots'  => '$1 бот',
-'rcshowhideliu'   => '$1 цӀар рагьарал гӀахьалчагӀи',
+'rcshowhidebots' => '$1 бот',
+'rcshowhideliu' => '$1 цӀар рагьарал гӀахьалчагӀи',
 'rcshowhideanons' => '$1 цӀаргьечӀ',
-'rcshowhidemine'  => '$1 дир хиса-басал',
-'diff'            => 'батӀалъи',
-'hide'            => 'Бахчизе',
-'show'            => 'Бихьизабизе',
+'rcshowhidemine' => '$1 дир хиса-басал',
+'diff' => 'батӀалъи',
+'hide' => 'Бахчизе',
+'show' => 'Бихьизабизе',
 'minoreditletter' => 'гӀ.-м.',
-'newpageletter'   => 'ЦӀ',
+'newpageletter' => 'ЦӀ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Рухьарал хиса-басиял',
-'recentchangeslinked-feed'    => 'Рухьарал хиса-басиял',
+'recentchangeslinked' => 'Рухьарал хиса-басиял',
+'recentchangeslinked-feed' => 'Рухьарал хиса-басиял',
 'recentchangeslinked-toolbox' => 'Рухьарал хиса-басиял',
 
 # Upload
@@ -98,8 +98,8 @@ $messages = array(
 
 # Miscellaneous special pages
 'shortpages' => 'Къокъал макъалаби',
-'longpages'  => 'Кlудиял гьумерал',
-'listusers'  => 'Гlахьалчагlазул сияхl',
+'longpages' => 'Кlудиял гьумерал',
+'listusers' => 'Гlахьалчагlазул сияхl',
 
 # Special:Log
 'specialloguserlabel' => 'ГӀахьалчи:',
@@ -109,19 +109,19 @@ $messages = array(
 
 # Watchlist
 'watchlist' => 'Дур халгьабиялъул сияхl',
-'watch'     => 'хал гьабизе',
+'watch' => 'хал гьабизе',
 
 # Contributions
 'contributions' => 'ГӀахьалчиясул хӀалтӀи',
-'mycontris'     => 'Дур гlахьаллъи',
+'mycontris' => 'Дур гlахьаллъи',
 
 # What links here
 'whatlinkshere' => 'Рехсей гьанибе',
 
 # Move page
 'move-page-legend' => 'Гьумералъул цlар хисизе',
-'movearticle'      => 'Гьумералъул цӀар хисизе',
-'movepagebtn'      => 'Гьумералъул цlар хисизе',
+'movearticle' => 'Гьумералъул цӀар хисизе',
+'movepagebtn' => 'Гьумералъул цlар хисизе',
 
 # Special:SpecialPages
 'specialpages' => 'Хассал гьумерал',
index 15cdabe..6f57f60 100644 (file)
@@ -847,8 +847,6 @@ Ta ropasusu warzafu bu yo va [[Special:Search|aneyara ko wiki]] yawal.',
 'search-interwiki-caption' => 'Beraf abdumimakseem',
 'search-interwiki-default' => '$1 trasiks :',
 'search-interwiki-more' => '(loon)',
-'search-mwsuggest-enabled' => 'do tiavera',
-'search-mwsuggest-disabled' => 'meka tiavera',
 'search-relatedarticle' => 'Skedaf',
 'mwsuggest-disable' => 'Gritegirara va AJAX tiavera',
 'searcheverything-enable' => 'Aneyara ko koto yoltxo',
index a5c3679..119c65b 100644 (file)
@@ -17,216 +17,215 @@ $fallback = 'es';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Sipita siqiraña',
-'tog-justify'                 => "Tanta amuyanak purapt'ayaña",
-'tog-hideminor'               => 'Jichha jaqukipawina sullka askiptawix imantaña',
-'tog-hidepatrolled'           => "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
-'tog-newpageshidepatrolled'   => "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
-'tog-extendwatchlist'         => "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
-'tog-usenewrc'                => 'Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)',
-'tog-numberheadings'          => 'Titulun chinu achuraña',
-'tog-showtoolbar'             => 'Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)',
-'tog-editondblclick'          => 'Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)',
-'tog-editsection'             => '[Turkaña] sipitampi tuqitaki turkawi luräña',
+'tog-underline' => 'Sipita siqiraña',
+'tog-justify' => "Tanta amuyanak purapt'ayaña",
+'tog-hideminor' => 'Jichha jaqukipawina sullka askiptawix imantaña',
+'tog-hidepatrolled' => "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
+'tog-newpageshidepatrolled' => "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
+'tog-extendwatchlist' => "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
+'tog-usenewrc' => 'Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)',
+'tog-numberheadings' => 'Titulun chinu achuraña',
+'tog-showtoolbar' => 'Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)',
+'tog-editondblclick' => 'Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)',
+'tog-editsection' => '[Turkaña] sipitampi tuqitaki turkawi luräña',
 'tog-editsectiononrightclick' => '(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña',
-'tog-showtoc'                 => 'Waruchataw uñachayaña (kimsa tituljampi uñstawitaki)',
-'tog-rememberpassword'        => "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'tog-watchcreations'          => "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
-'tog-watchdefault'            => "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
-'tog-watchmoves'              => "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
-'tog-watchdeletion'           => "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
-'tog-minordefault'            => 'Sullka askiptawpacha chimpuriña',
-'tog-previewontop'            => 'Askiptawit llataxa nayraxa uñtawikar uñachayaña',
-'tog-previewonfirst'          => 'Mayïri askiptawina uñtawikar uñachayaña',
-'tog-nocache'                 => "Uñstawita kachiñar jark'aña",
-'tog-enotifwatchlistpages'    => "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
-'tog-enotifusertalkpages'     => 'Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna',
-'tog-enotifminoredits'        => 'Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki',
-'tog-enotifrevealaddr'        => 'Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña',
-'tog-shownumberswatching'     => "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
-'tog-fancysig'                => "Mayaxta rixt'a (sipitarachayatawisa)",
-'tog-externaleditor'          => "Anqa askiptiri mirq'iriña (yatxiritakiwa, jasanchirina ajalla jamuqawi wakiskiriwa)",
-'tog-externaldiff'            => "Anqa diff-iri mirq'iriña (yatxiritakiwa, jasanchirina ajalla jamuqawi wakiskiriwa)",
-'tog-showjumplinks'           => 'Usutataki sipitata "khänaru thuqtaña" uñachayaña',
-'tog-uselivepreview'          => "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
-'tog-forceeditsummary'        => "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
-'tog-watchlisthideown'        => "Unch'ukit waruchatana askiptawijax imantaña",
-'tog-watchlisthidebots'       => "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
-'tog-watchlisthideminor'      => "Unch'ukit waruchatana sullka askiptawix imantaña",
-'tog-watchlisthideliu'        => "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
-'tog-watchlisthideanons'      => "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
-'tog-watchlisthidepatrolled'  => "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
-'tog-nolangconversion'        => "Yaqha aruptaxa jark'aña",
-'tog-ccmeonemails'            => 'Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña',
-'tog-diffonly'                => 'Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña',
-'tog-showhiddencats'          => 'Imantata patawix uñachayaña',
+'tog-showtoc' => 'Waruchataw uñachayaña (kimsa tituljampi uñstawitaki)',
+'tog-rememberpassword' => "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'tog-watchcreations' => "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
+'tog-watchdefault' => "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
+'tog-watchmoves' => "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
+'tog-watchdeletion' => "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
+'tog-minordefault' => 'Sullka askiptawpacha chimpuriña',
+'tog-previewontop' => 'Askiptawit llataxa nayraxa uñtawikar uñachayaña',
+'tog-previewonfirst' => 'Mayïri askiptawina uñtawikar uñachayaña',
+'tog-nocache' => "Uñstawita kachiñar jark'aña",
+'tog-enotifwatchlistpages' => "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
+'tog-enotifusertalkpages' => 'Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna',
+'tog-enotifminoredits' => 'Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki',
+'tog-enotifrevealaddr' => 'Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña',
+'tog-shownumberswatching' => "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
+'tog-fancysig' => "Mayaxta rixt'a (sipitarachayatawisa)",
+'tog-externaleditor' => "Anqa askiptiri mirq'iriña (yatxiritakiwa, jasanchirina ajalla jamuqawi wakiskiriwa)",
+'tog-externaldiff' => "Anqa diff-iri mirq'iriña (yatxiritakiwa, jasanchirina ajalla jamuqawi wakiskiriwa)",
+'tog-showjumplinks' => 'Usutataki sipitata "khänaru thuqtaña" uñachayaña',
+'tog-uselivepreview' => "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
+'tog-forceeditsummary' => "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
+'tog-watchlisthideown' => "Unch'ukit waruchatana askiptawijax imantaña",
+'tog-watchlisthidebots' => "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
+'tog-watchlisthideminor' => "Unch'ukit waruchatana sullka askiptawix imantaña",
+'tog-watchlisthideliu' => "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
+'tog-watchlisthideanons' => "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
+'tog-watchlisthidepatrolled' => "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
+'tog-ccmeonemails' => 'Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña',
+'tog-diffonly' => 'Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña',
+'tog-showhiddencats' => 'Imantata patawix uñachayaña',
 
 'underline-always' => 'Wiñaya',
-'underline-never'  => 'Janipini',
+'underline-never' => 'Janipini',
 
 # Dates
-'sunday'        => 'tuminku',
-'monday'        => 'lunisa',
-'tuesday'       => 'martisa',
-'wednesday'     => 'mirkulisa',
-'thursday'      => 'juywisa',
-'friday'        => 'wirnisa',
-'saturday'      => 'sawaru',
-'sun'           => 'tum',
-'mon'           => 'lun',
-'tue'           => 'mar',
-'wed'           => 'mir',
-'thu'           => 'juy',
-'fri'           => 'wir',
-'sat'           => 'saw',
-'january'       => 'chichu phaxsi',
-'february'      => 'anata phaxsi',
-'march'         => 'achuqa phaxsi',
-'april'         => 'yapu apthapi phaxsi',
-'may_long'      => 'llamayu phaxsi',
-'june'          => 'juyphi phaxsi',
-'july'          => 'huillka kuti phaxsi',
-'august'        => 'thaya phaxsi',
-'september'     => "llamp'u phaxsi",
-'october'       => 'taypi sata phaxsi',
-'november'      => 'awti phaxsi',
-'december'      => 'jallu qallta phaxsi',
-'january-gen'   => 'chichu phaxsi',
-'february-gen'  => 'anata phaxsi',
-'march-gen'     => 'achuqa phaxsi',
-'april-gen'     => 'yapu apthapi phaxsi',
-'may-gen'       => 'llamayu phaxsi',
-'june-gen'      => 'juyphi phaxsi',
-'july-gen'      => 'huillka kuti phaxsi',
-'august-gen'    => 'thaya phaxsi',
+'sunday' => 'tuminku',
+'monday' => 'lunisa',
+'tuesday' => 'martisa',
+'wednesday' => 'mirkulisa',
+'thursday' => 'juywisa',
+'friday' => 'wirnisa',
+'saturday' => 'sawaru',
+'sun' => 'tum',
+'mon' => 'lun',
+'tue' => 'mar',
+'wed' => 'mir',
+'thu' => 'juy',
+'fri' => 'wir',
+'sat' => 'saw',
+'january' => 'chichu phaxsi',
+'february' => 'anata phaxsi',
+'march' => 'achuqa phaxsi',
+'april' => 'yapu apthapi phaxsi',
+'may_long' => 'llamayu phaxsi',
+'june' => 'juyphi phaxsi',
+'july' => 'huillka kuti phaxsi',
+'august' => 'thaya phaxsi',
+'september' => "llamp'u phaxsi",
+'october' => 'taypi sata phaxsi',
+'november' => 'awti phaxsi',
+'december' => 'jallu qallta phaxsi',
+'january-gen' => 'chichu phaxsi',
+'february-gen' => 'anata phaxsi',
+'march-gen' => 'achuqa phaxsi',
+'april-gen' => 'yapu apthapi phaxsi',
+'may-gen' => 'llamayu phaxsi',
+'june-gen' => 'juyphi phaxsi',
+'july-gen' => 'huillka kuti phaxsi',
+'august-gen' => 'thaya phaxsi',
 'september-gen' => "llamp'u phaxsi",
-'october-gen'   => 'taypi sata phaxsi',
-'november-gen'  => 'awti phaxsi',
-'december-gen'  => 'jallu qallta phaxsi',
-'jan'           => 'chi',
-'feb'           => 'ana',
-'mar'           => 'ach',
-'apr'           => 'yap',
-'may'           => 'llam',
-'jun'           => 'juy',
-'jul'           => 'hui',
-'aug'           => 'tha',
-'sep'           => 'llmp',
-'oct'           => 'tay',
-'nov'           => 'awt',
-'dec'           => 'jall',
-
-'article'       => 'Amtachinu',
-'cancel'        => 'Jan saña',
+'october-gen' => 'taypi sata phaxsi',
+'november-gen' => 'awti phaxsi',
+'december-gen' => 'jallu qallta phaxsi',
+'jan' => 'chi',
+'feb' => 'ana',
+'mar' => 'ach',
+'apr' => 'yap',
+'may' => 'llam',
+'jun' => 'juy',
+'jul' => 'hui',
+'aug' => 'tha',
+'sep' => 'llmp',
+'oct' => 'tay',
+'nov' => 'awt',
+'dec' => 'jall',
+
+'article' => 'Amtachinu',
+'cancel' => 'Jan saña',
 'moredotdotdot' => 'Yapa...',
-'mypage'        => 'Uñstawija',
-'navigation'    => 'Wampuña',
-'and'           => '&#32;-mpi',
+'mypage' => 'Uñstawija',
+'navigation' => 'Wampuña',
+'and' => '&#32;-mpi',
 
 # Cologne Blue skin
-'qbfind'        => 'Thaqaña',
-'qbbrowse'      => 'Wampuña',
-'qbedit'        => 'Turkaña',
+'qbfind' => 'Thaqaña',
+'qbbrowse' => 'Wampuña',
+'qbedit' => 'Turkaña',
 'qbpageoptions' => 'Uñstawitaki ajllita',
-'qbpageinfo'    => "Uñstawxat uñt'ayawi",
-'qbmyoptions'   => 'Ajllitanakaja',
-
-'errorpagetitle'    => 'Pantja',
-'help'              => 'Yanapaña',
-'search'            => 'Thaqaña',
-'searchbutton'      => 'Thaqaña',
-'go'                => 'Saraña',
-'searcharticle'     => 'Saraña',
-'history'           => 'Nayra qillqata',
-'history_short'     => 'Nayra qillqata',
-'edit'              => 'Turkaña',
-'create'            => 'Uñstayaña',
-'editthispage'      => 'Aka uñstawi turkaña',
-'create-this-page'  => 'Aka uñstawi uñstayaña',
-'delete'            => 'Pichaña',
-'deletethispage'    => 'Aka uñstawi phiskhuraña',
-'undelete_short'    => "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
-'protect'           => "Jark'aña",
-'protect_change'    => 'turkaña',
-'protectthispage'   => "Aka uñstawi jark'aña",
-'unprotect'         => "Jark'ch'ukiña",
+'qbpageinfo' => "Uñstawxat uñt'ayawi",
+'qbmyoptions' => 'Ajllitanakaja',
+
+'errorpagetitle' => 'Pantja',
+'help' => 'Yanapaña',
+'search' => 'Thaqaña',
+'searchbutton' => 'Thaqaña',
+'go' => 'Saraña',
+'searcharticle' => 'Saraña',
+'history' => 'Nayra qillqata',
+'history_short' => 'Nayra qillqata',
+'edit' => 'Turkaña',
+'create' => 'Uñstayaña',
+'editthispage' => 'Aka uñstawi turkaña',
+'create-this-page' => 'Aka uñstawi uñstayaña',
+'delete' => 'Pichaña',
+'deletethispage' => 'Aka uñstawi phiskhuraña',
+'undelete_short' => "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
+'protect' => "Jark'aña",
+'protect_change' => 'turkaña',
+'protectthispage' => "Aka uñstawi jark'aña",
+'unprotect' => "Jark'ch'ukiña",
 'unprotectthispage' => "Aka uñstawi jark'ch'ukiña",
-'newpage'           => 'Machaqa uñstawi',
-'talkpage'          => 'Aka uñstawxat tuqisiña',
-'talkpagelinktext'  => 'Kutkatasiña',
-'specialpage'       => 'Ajalla Uñstawi',
-'talk'              => 'Tuqisiwi',
-'otherlanguages'    => 'Yaqha arunaka',
-'protectedpage'     => "Uñstawi jark'ata",
-'jumptonavigation'  => 'wampuña',
-'jumptosearch'      => 'thaqaña',
+'newpage' => 'Machaqa uñstawi',
+'talkpage' => 'Aka uñstawxat tuqisiña',
+'talkpagelinktext' => 'Kutkatasiña',
+'specialpage' => 'Ajalla Uñstawi',
+'talk' => 'Tuqisiwi',
+'otherlanguages' => 'Yaqha arunaka',
+'protectedpage' => "Uñstawi jark'ata",
+'jumptonavigation' => 'wampuña',
+'jumptosearch' => 'thaqaña',
 
 # 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).
-'currentevents'        => 'Jichha pacha',
-'currentevents-url'    => 'Project:Jichha pacha',
-'mainpage'             => 'Nayriri Uñstawi',
+'currentevents' => 'Jichha pacha',
+'currentevents-url' => 'Project:Jichha pacha',
+'mainpage' => 'Nayriri Uñstawi',
 'mainpage-description' => 'Nayriri Uñstawi',
-'portal'               => 'Jayma punku',
-'portal-url'           => 'Project:Jayma punku',
-
-'editsection'    => 'turkaña',
-'editold'        => 'turkaña',
-'editlink'       => 'trukaña',
-'toc'            => 'Utjirinaka',
-'showtoc'        => 'uñachayaña',
-'site-rss-feed'  => '$1 RSS jalsuri',
+'portal' => 'Jayma punku',
+'portal-url' => 'Project:Jayma punku',
+
+'editsection' => 'turkaña',
+'editold' => 'turkaña',
+'editlink' => 'trukaña',
+'toc' => 'Utjirinaka',
+'showtoc' => 'uñachayaña',
+'site-rss-feed' => '$1 RSS jalsuri',
 'site-atom-feed' => '$1 Atom jalsuri',
-'page-rss-feed'  => '"$1" RSS jalsuri',
+'page-rss-feed' => '"$1" RSS jalsuri',
 'page-atom-feed' => '"$1" Atom jalsuri',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Amtachinu',
-'nstab-user'     => 'Apnaqiri',
-'nstab-image'    => "Q'ipi",
-'nstab-help'     => 'Yanapaña',
+'nstab-main' => 'Amtachinu',
+'nstab-user' => 'Apnaqiri',
+'nstab-image' => "Q'ipi",
+'nstab-help' => 'Yanapaña',
 'nstab-category' => 'Patawi',
 
 # General errors
 'error' => 'Pantja',
 
 # Login and logout pages
-'login'              => "Qillqt'ayasiña",
-'userlogin'          => "Qillqt'ayasiña",
-'logout'             => 'Mistuña',
-'userlogout'         => 'Mistuña',
+'login' => "Qillqt'ayasiña",
+'userlogin' => "Qillqt'ayasiña",
+'logout' => 'Mistuña',
+'userlogout' => 'Mistuña',
 'loginlanguagelabel' => 'Aru: $1',
 
 # Edit pages
-'summary'   => 'Juk’aptayäwi:',
-'subject'   => 'Yatsuwi/titulu:',
+'summary' => 'Juk’aptayäwi:',
+'subject' => 'Yatsuwi/titulu:',
 'minoredit' => 'Akax janiw taqpachäkiti',
-'yourdiff'  => 'Jalaqtatanaka',
+'yourdiff' => 'Jalaqtatanaka',
 
 # Preferences page
-'preferences'    => 'Amtajarjama',
-'prefs-rc'       => 'Jichha kutikiptatanaka',
+'preferences' => 'Amtajarjama',
+'prefs-rc' => 'Jichha kutikiptatanaka',
 'timezoneoffset' => 'Jalaqtata',
-'yourlanguage'   => 'Aru:',
-'email'          => 'Chaski jalayiri',
+'yourlanguage' => 'Aru:',
+'email' => 'Chaski jalayiri',
 
 # Recent changes
 'recentchanges' => 'Jichha kutikiptatanaka',
-'show'          => 'uñachayaña',
+'show' => 'uñachayaña',
 
 # Upload
 'fileuploadsummary' => 'Uñt’ayawi:',
 
-'license'        => 'Iyawsawi:',
+'license' => 'Iyawsawi:',
 'license-header' => 'Iyawsawi:',
 
 # Special:ListFiles
-'listfiles_date'        => 'Uru jakhu',
-'listfiles_user'        => 'Apnaqiri',
+'listfiles_date' => 'Uru jakhu',
+'listfiles_user' => 'Apnaqiri',
 'listfiles_description' => 'Uñt’ayawi',
 
 # File description page
 'file-anchor-link' => "Q'ipi",
-'filehist-user'    => 'Apnaqiri',
+'filehist-user' => 'Apnaqiri',
 
 # Miscellaneous special pages
 'move' => 'Qillqaraña',
@@ -235,7 +234,7 @@ $messages = array(
 'booksources-go' => 'Saraña',
 
 # Special:Log
-'specialloguserlabel'  => 'Apnaqiri:',
+'specialloguserlabel' => 'Apnaqiri:',
 'speciallogtitlelabel' => 'Titulu:',
 
 # Special:ListUsers
@@ -250,12 +249,12 @@ $messages = array(
 # Undelete
 'undelete-search-submit' => 'Thaqaña',
 
-'sp-contributions-talk'   => 'Kutkatasiña',
+'sp-contributions-talk' => 'Kutkatasiña',
 'sp-contributions-submit' => 'Thaqaña',
 
 # Block/unblock
 'ipblocklist-submit' => 'Thaqaña',
-'proxyblocksuccess'  => 'Kamachawi',
+'proxyblocksuccess' => 'Kamachawi',
 
 # Tooltip help for the actions
 'tooltip-p-logo' => 'Nayriri Uñstawi',
index 6ad1280..1e0c945 100644 (file)
@@ -10,6 +10,7 @@
  * @author Cekli829
  * @author Don Alessandro
  * @author Emperyan
+ * @author Erdemaslancan
  * @author Gulmammad
  * @author Kaganer
  * @author PPerviz
@@ -68,9 +69,9 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#İSTİQAMƏTLƏNDİRMƏ', '#İSTİQAMƏTLƏNDİR', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__MÜNDƏRİCATYOX__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__QALEREYAYOX__', '__NOGALLERY__' ),
+       'redirect'                  => array( '0', '#İSTİQAMƏTLƏNDİRMƏ', '#İSTİQAMƏTLƏNDİR', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__MÜNDƏRİCATYOX__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__QALEREYAYOX__', '__NOGALLERY__' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -473,7 +474,7 @@ Göstərilən səbəb: "\'\'$2\'\'".',
 # Login and logout pages
 '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ə [[Special:UserLogin|yenidən daxil ola]] 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.",
+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.',
@@ -730,6 +731,9 @@ Məlumat üçün aşağıda bu səhifənin tarixçəsindən müvafiq silmə qeyd
 'edit-already-exists' => 'Yeni səhifəni yaratmaq mümkün deyil.
 Belə ki, bu adda səhifə artıq mövcuddur.',
 
+# Content models
+'content-model-javascript' => 'JavaScript',
+
 # Parser/template warnings
 'expensive-parserfunction-category' => 'Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr',
 'post-expand-template-inclusion-warning' => "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.
@@ -923,8 +927,6 @@ $1",
 'search-interwiki-caption' => 'Qardaş layihələr',
 'search-interwiki-default' => '$1 nəticə:',
 'search-interwiki-more' => '(yenə)',
-'search-mwsuggest-enabled' => 'təkliflərlə',
-'search-mwsuggest-disabled' => 'təklif yoxdur',
 'search-relatedarticle' => 'əlaqədar',
 'mwsuggest-disable' => 'AJAX təkliflərini rədd et',
 'searcheverything-enable' => 'Ad aralığında axtar:',
@@ -2992,6 +2994,9 @@ Bu saytda texniki problemlər var.',
 'feedback-close' => 'Oldu',
 'feedback-bugnew' => 'Mən yoxladım. Yeni xəta barədə xəbər ver',
 
+# Search suggestions
+'searchsuggest-search' => 'Axtar',
+
 # API errors
 'api-error-filename-tooshort' => 'Fayl adı qısadır.',
 'api-error-filetype-banned' => 'Bu tip fayllar qadağandır.',
index 3ec45e1..043e6ed 100644 (file)
@@ -37,19 +37,20 @@ $namespaceNames = array(
        NS_TEMPLATE_TALK    => 'Ҡалып_буйынса_фекерләшеү',
        NS_HELP             => 'Белешмә',
        NS_HELP_TALK        => 'Белешмә_буйынса_фекерләшеү',
-       NS_CATEGORY         => 'ТөÑ\80көм',
-       NS_CATEGORY_TALK    => 'ТөÑ\80көм_буйынса_фекерләшеү',
+       NS_CATEGORY         => 'Ð\9aаÑ\82егоÑ\80иÑ\8f',
+       NS_CATEGORY_TALK    => 'Ð\9aаÑ\82егоÑ\80иÑ\8f_буйынса_фекерләшеү',
 );
 
 $namespaceAliases = array(
-       'Фекер_алышыу' => NS_TALK,
+       'Фекер_алышыу'                => NS_TALK,
        'Ҡатнашыусы_м-н_фекер_алышыу' => NS_USER_TALK,
-       '$1_б-са_фекер_алышыу' => NS_PROJECT_TALK,
-       'Рәсем_б-са_фекер_алышыу' => NS_FILE_TALK,
+       '$1_б-са_фекер_алышыу'        => NS_PROJECT_TALK,
+       'Рәсем_б-са_фекер_алышыу'     => NS_FILE_TALK,
        'MediaWiki_б-са_фекер_алышыу' => NS_MEDIAWIKI_TALK,
-       'Ҡалып_б-са_фекер_алышыу' => NS_TEMPLATE_TALK,
-       'Белешмә_б-са_фекер_алышыу' => NS_HELP_TALK,
-       'Категория' => NS_CATEGORY,
+       'Ҡалып_б-са_фекер_алышыу'     => NS_TEMPLATE_TALK,
+       'Белешмә_б-са_фекер_алышыу'   => NS_HELP_TALK,
+       'Төркөм'                      => NS_CATEGORY,
+       'Төркөм_буйынса_фекерләшеү'   => NS_CATEGORY_TALK,
        'Категория_б-са_фекер_алышыу' => NS_CATEGORY_TALK,
 );
 
@@ -260,7 +261,7 @@ $messages = array(
 'unprotectthispage' => 'Был биттең һаҡлауын үҙгәртергә',
 'newpage' => 'Яңы бит',
 'talkpage' => 'Фекер алышыу',
-'talkpagelinktext' => 'Фекер алышыу',
+'talkpagelinktext' => 'әңг.',
 'specialpage' => 'Ярҙамсы бит',
 'personaltools' => 'Шәхси ҡоралдар',
 'postcomment' => 'Яңы бүлек',
@@ -322,6 +323,7 @@ $1',
 'versionrequiredtext' => 'Был бит менән эшләү өсөн MediaWiki-ның $1 версияһы кәрәк. [[Special:Version|Ҡулланылған версия тураһында мәғлүмәт битен]] ҡара.',
 
 'ok' => 'Тамам',
+'pagetitle' => '{{SITENAME}} проектынан',
 'retrievedfrom' => 'Сығанағы — «$1»',
 'youhavenewmessages' => 'Яңы $1 бар ($2).',
 'newmessageslink' => 'яңы хәбәр',
@@ -471,7 +473,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Һеҙ иҫәп яҙыуығыҙҙан сыҡтығыҙ.'''
 
-Һеҙ {{SITENAME}} проектында аноним рәүештә дауам итә йәки [[Special:UserLogin|яңынан таныла]] алаһығыҙ (үҙ йәки башҡа исем менән).
+Һеҙ {{SITENAME}} проектында аноним рәүештә дауам итә йәки <span class='plainlinks'>[$1 яңынан таныла]</span> алаһығыҙ (үҙ йәки башҡа исем менән).
 Ҡайһы бер биттәр һеҙ системала танылған һымаҡ күренергә мөмкин, уны бөтөрөү өсөн браузер кэшын таҙартығыҙ.",
 'welcomecreation' => '== Рәхим итегеҙ, $1! ==
 Иҫәп яҙыуығыҙ яһалды.
@@ -1077,8 +1079,6 @@ $1",
 'search-interwiki-caption' => 'Туғандаш проекттар',
 'search-interwiki-default' => '$1 һөҙөмтә:',
 'search-interwiki-more' => '(тағы)',
-'search-mwsuggest-enabled' => 'кәңәштәр менән',
-'search-mwsuggest-disabled' => 'кәңәшһеҙ',
 'search-relatedarticle' => 'Ҡағылышлы',
 'mwsuggest-disable' => 'AJAX-тәҡдимдәрен ябырға',
 'searcheverything-enable' => 'Бар исем арауыҡтарында эҙләргә',
@@ -2156,7 +2156,7 @@ $UNWATCHURL
 # Rollback
 'rollback' => 'Үҙгәртеүҙәрҙе кире ҡайтарырға',
 'rollback_short' => 'Кире ҡайтарырға',
-'rollbacklink' => 'кире алырға',
+'rollbacklink' => 'кире',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|төҙәтеүҙе|төҙәтеүҙе}} кире алырға',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|төҙәтеүҙән|төҙәтеүҙән}} күберәк кире алырға',
 'rollbackfailed' => 'Кире ҡайтарырғанда барлыҡҡа килгән хата',
@@ -2429,10 +2429,10 @@ $1',
 'blocklist-nousertalk' => 'үҙенең фекер алышыу битен мөхәррирләй алмай',
 'ipblocklist-empty' => 'Бикләү исемлеге буш.',
 'ipblocklist-no-results' => 'Күрһәтелгән IP адрес йәки ҡатнашыусы исеме бикләнмәгән.',
-'blocklink' => 'ябып ҡуйырға',
+'blocklink' => 'яб.',
 'unblocklink' => 'Тыйыуҙы кире алырға',
 'change-blocklink' => 'блоклауҙы үҙгәртергә',
-'contribslink' => 'индергән өлөш',
+'contribslink' => 'өл.',
 'emaillink' => 'электрон хат ебәрергә',
 'autoblocker' => 'Һеҙҙең IP адресығыҙ [[User:$1|$1]] яңыраҡ ҡулланған адрес менән тап килеүе арҡаһында бикләнде.
 $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
@@ -2706,7 +2706,6 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 # JavaScriptTest
 'javascripttest' => '
 JavaScript тикшереү',
-'javascripttest-disabled' => 'Был мөмкинлек был Википроектта ғәмәлгә индерелмәгән.',
 'javascripttest-title' => '$1 тикшеренеү үткәрелә',
 'javascripttest-pagetext-noframework' => 'Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.',
 'javascripttest-pagetext-unknownframework' => 'Билдәһеҙ тикшеренеүҙәр мөхитнамәһе "$1".',
@@ -3667,6 +3666,10 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'feedback-bugcheck' => 'Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.',
 'feedback-bugnew' => 'Тикшерҙем. Яңы хата тураһында белдерергә',
 
+# Search suggestions
+'searchsuggest-search' => 'Эҙләү',
+'searchsuggest-containing' => 'эстәлегендә...',
+
 # API errors
 'api-error-badaccess-groups' => 'Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй',
 'api-error-badtoken' => 'Эске хата: дөрөҫ булмаған токен',
index c6f313c..7aff876 100644 (file)
@@ -268,8 +268,8 @@ $1",
 'mainpage' => 'Hauptseiten',
 'mainpage-description' => 'Hauptseiten',
 'policy-url' => 'Project:Richtlinien',
-'portal' => 'Gmoahschoftsportoi',
-'portal-url' => 'Project:Gmoahschoftsportoi',
+'portal' => 'Autornportal',
+'portal-url' => 'Project:Autornportal',
 'privacy' => 'Daatenschutz',
 'privacypage' => 'Project:Daatenschutz',
 
@@ -413,7 +413,7 @@ $2",
 # Login and logout pages
 'logouttext' => "'''Iatzerd bist obgmödt.'''
 
-Du kåst {{SITENAME}} iatzerd anónym weiderdoah, óder di danaid unterm söwing óder am åndern Benutzernåm [[Special:UserLogin|åmöden]].
+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! ==
 
@@ -652,7 +652,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'lineno' => 'Zeiln $1:',
 'compareselectedversions' => 'Gwöde Versionen vagleichen',
 'editundo' => 'ryckgängig',
-'diff-multi' => '({{PLURAL:$1|A dazwischenliegerte Versión|$1 dazwischenliegende Versiónen}} vohram {{PLURAL:$2|Benutzer|$2 Benutzern}} {{PLURAL:$1|werd|wern}} néd åzoagt)',
+'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)',
 
 # Search results
 'searchresults' => 'Suachergebniss',
@@ -688,8 +688,6 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'search-interwiki-caption' => 'Schwesterprojekte',
 'search-interwiki-default' => '$1 Eagebnisse:',
 'search-interwiki-more' => '(mea)',
-'search-mwsuggest-enabled' => 'mid Vurschleg',
-'search-mwsuggest-disabled' => 'koane Vurschleg',
 'searchrelated' => 'vawåndt',
 'searchall' => 'olle',
 'showingresultsheader' => "{{PLURAL:$5|Ergebnis '''$1''' voh '''$3'''|Ergebniss '''$1–$2''' voh '''$3'''}} fyr '''$4'''",
@@ -1722,4 +1720,8 @@ Bittscheh d' noraale Vurschau bnutzen.",
 'htmlform-reset' => 'Änderrungen ryckgängég mochen',
 'htmlform-selectorother-other' => 'Åndre',
 
+# Search suggestions
+'searchsuggest-search' => 'Suach',
+'searchsuggest-containing' => 'Voitextsuach noch ...',
+
 );
index 1fd41c0..081528b 100644 (file)
@@ -982,8 +982,6 @@ $1",
 'search-interwiki-caption' => 'پروژه آن گوهار',
 'search-interwiki-default' => '$1 نتایج:',
 'search-interwiki-more' => '(گیشتر)',
-'search-mwsuggest-enabled' => 'گون پیشنهاد',
-'search-mwsuggest-disabled' => 'هچ پیشنهاد',
 'search-relatedarticle' => 'مربوطین',
 'mwsuggest-disable' => 'پیشنهادات آژاکسیء غیر فعال کن',
 'searcheverything-enable' => 'گردگ ته کل فضانامان',
index 9a40ea3..22d7628 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Filipinayzd
  * @author Geopoet
+ * @author Hoo
  * @author Kaganer
  * @author Steven*fung
  * @author Urhixidur
@@ -34,59 +35,59 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'BULANNGONYAN', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NGARANBULANNGONYAN', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ALDAWNGONYAN', 'CURRENTDAY' ),
-       'currentyear'             => array( '1', 'TAONNGONYAN', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'PANAHONNGONYAN', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORASNGONYAN', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALBULAN', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NGARANLOKALBULAN', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'LOKALALDAW', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALALDAW2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NGARANLOKALALDAW', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTAON', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALPANAHON', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALORAS', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMEROKANPAHINA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMEROKANARTIKULO', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMEROKANDOKUMENTO', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMEROKANPARAGAMIT', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NUMEROKANLIGWAT', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NGARANKANPAHINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'KAGNGARANKANPAHINA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NGARANESPASYO', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'KAGNGARANESPASYO', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'OLAYESPASYO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'KAGOLAYESPASYO', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'TODONGNGARANKANPAHINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KAGNGARANKANTODONGNGARANKANPAHINA', 'FULLPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NGARANKANPAHINANINOLAY', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'KAGNGARANKANPAHINANINOLAY', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSH', 'MSG:' ),
-       'img_right'               => array( '1', 'too', 'right' ),
-       'img_left'                => array( '1', 'wala', 'left' ),
-       'img_none'                => array( '1', 'mayò', 'none' ),
-       'img_center'              => array( '1', 'sentro', 'tangâ', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'nakakawadro', 'kwadro', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'daing kwadro', 'frameless' ),
-       'img_page'                => array( '1', 'pahina=$1', 'pahina $1', 'page=$1', 'page $1' ),
-       'localurl'                => array( '0', 'LOKALURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE', 'LOCALURLE:' ),
-       'currentweek'             => array( '1', 'SEMANANGONYAN', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'LOKALSEMANA', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'DAKOL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TODONGURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TODONGURLE:', 'FULLURLE:' ),
-       'language'                => array( '0', '#TATARAMON', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'TATARAMONKANLAOG', 'TATARAMONLAOG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'NUMEROKANTAGAMATO', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PADWALA', 'PADLEFT' ),
-       'padright'                => array( '0', 'PADTOO', 'PADRIGHT' ),
-       'filepath'                => array( '0', 'FILEDALAN', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__NAKATAGONGKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAHINASAKATEGORYA', 'PAHINASAKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAHINASOKOL', 'PAGESIZE' ),
+       'currentmonth'              => array( '1', 'BULANNGONYAN', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NGARANBULANNGONYAN', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ALDAWNGONYAN', 'CURRENTDAY' ),
+       'currentyear'               => array( '1', 'TAONNGONYAN', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'PANAHONNGONYAN', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORASNGONYAN', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALBULAN', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'NGARANLOKALBULAN', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'LOKALALDAW', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALALDAW2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NGARANLOKALALDAW', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTAON', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALPANAHON', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALORAS', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMEROKANPAHINA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMEROKANARTIKULO', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMEROKANDOKUMENTO', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMEROKANPARAGAMIT', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NUMEROKANLIGWAT', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NGARANKANPAHINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'KAGNGARANKANPAHINA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NGARANESPASYO', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'KAGNGARANESPASYO', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'OLAYESPASYO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'KAGOLAYESPASYO', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'TODONGNGARANKANPAHINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KAGNGARANKANTODONGNGARANKANPAHINA', 'FULLPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NGARANKANPAHINANINOLAY', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'KAGNGARANKANPAHINANINOLAY', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSH', 'MSG:' ),
+       'img_right'                 => array( '1', 'too', 'right' ),
+       'img_left'                  => array( '1', 'wala', 'left' ),
+       'img_none'                  => array( '1', 'mayò', 'none' ),
+       'img_center'                => array( '1', 'sentro', 'tangâ', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'nakakawadro', 'kwadro', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'daing kwadro', 'frameless' ),
+       'img_page'                  => array( '1', 'pahina=$1', 'pahina $1', 'page=$1', 'page $1' ),
+       'localurl'                  => array( '0', 'LOKALURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE', 'LOCALURLE:' ),
+       'currentweek'               => array( '1', 'SEMANANGONYAN', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'LOKALSEMANA', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'DAKOL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TODONGURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TODONGURLE:', 'FULLURLE:' ),
+       'language'                  => array( '0', '#TATARAMON', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'TATARAMONKANLAOG', 'TATARAMONLAOG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'NUMEROKANTAGAMATO', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PADWALA', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PADTOO', 'PADRIGHT' ),
+       'filepath'                  => array( '0', 'FILEDALAN', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__NAKATAGONGKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAHINASAKATEGORYA', 'PAHINASAKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAHINASOKOL', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -110,22 +111,23 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Paganaha an paghihirá kan seksyon sa paagi kan patoong pagpindot sa mga titulo kan seksyon (minakaipo nin JavaScript)',
 'tog-showtoc' => 'Ihayag an taytayan nin mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)',
 'tog-rememberpassword' => 'Giromdoma an sakong paglaóg sa kilyaw (browser) na ini (para sa maximum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
-'tog-watchcreations' => 'Idagdag sa mga pahina na ako an nagmukna sa sakong bantay-listahan',
-'tog-watchdefault' => 'Idagdag an mga pahina na ako an nagliwat sa sakong bantay-listahan',
-'tog-watchmoves' => 'Idagdag an mga pahina na ako an nagbalyo sa sakong bantay-listahan',
-'tog-watchdeletion' => 'Idagdag an mga pahina na ako an nagpura sa sakong bantay-listahan',
+'tog-watchcreations' => 'Idagdag an mga pahina na ako an nagmukna asin an mga sagunson na ako an nagkarga sa sakong bantay-listahan',
+'tog-watchdefault' => 'Idagdag an mga pahina asin mga sagunson na ako an nagliwat sa sakong bantay-listahan',
+'tog-watchmoves' => 'Idagdag an mga pahina asin mga sagunson na ako an nagbalyo sa sakong bantay-listahan',
+'tog-watchdeletion' => 'Idagdag an mga pahina asin mga sagunson na ako an nagpura sa sakong bantay-listahan',
 'tog-minordefault' => 'Markahán gabos na saradit na pagliwat sa paaging panugmad',
 'tog-previewontop' => 'Ipahilíng an patànaw bàgo an kahon nin paghirá',
 'tog-previewonfirst' => 'Ipahilíng an patànaw sa enot na paghirá',
 'tog-nocache' => 'Pundoha an pagsaray nin mga pahina sa kilyaw (browser)',
-'tog-enotifwatchlistpages' => 'E-koreohan ako kunsoarin an sarong pahina sa sakong bantay-listahan (watchlist) pinagribayan',
+'tog-enotifwatchlistpages' => 'E-suratan mo ako kunsoarin an sarong pahina o sagunson na yaon sa sakong bantay-listahan pinagliwat',
 'tog-enotifusertalkpages' => 'E-koreohan ako pag pigribáyan an pahina kan sakóng olay',
-'tog-enotifminoredits' => 'E-koreohan man giraray ako para sa saradit na paghirá kan mga pahina',
+'tog-enotifminoredits' => 'E-suratan man ako para sa saraditon na mga pagliwat kan mga pahina asin mga sagunson',
 'tog-enotifrevealaddr' => 'Ibuyágyag an sakong e-koreong address sa pan-abisong mga e-koreo',
 'tog-shownumberswatching' => 'Ihayag an numero kan nagbabantay na mga parágamit',
 'tog-oldsig' => 'Tugmadong pirma',
 'tog-fancysig' => 'Trataron an pirma na wiki-teksto (mayo nin awtomatikong kilyaw)',
-'tog-externaleditor' => 'Gamíta nguna an panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.',
+'tog-externaleditor' => 'Gamiton an pirmihan na panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy sa saimong kompyuter.
+[//www.mediawiki.org/wiki/Manual:External_editors Mga dagdag na impormasyon.])',
 'tog-externaldiff' => 'Gamíta an panluwas na diff nguna (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.
 [//www.mediawiki.org/wiki/Manual:External_editors Kadagdagang impormasyon.])',
 'tog-showjumplinks' => 'Paganaha an "luksó sa" kilyaw nin kalangkayan',
@@ -359,6 +361,10 @@ $1',
 'youhavenewmessages' => 'Igwa ka nin $1 ($2).',
 'newmessageslink' => 'mga bàgong mensahe',
 'newmessagesdifflink' => 'huring pagbàgo',
+'youhavenewmessagesfromusers' => 'Ika igwa nin $1 gikan sa {{PLURAL:$3|ibang paragamit|$3 mga paragamit}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ika igwa nin $1 gikan sa kadakol na mga paragamit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|sarong bagong mensahe|bagong mga mensahe}}',
+'newmessagesdifflinkplural' => 'huring {{PLURAL:$1|kaliwatan|mga kaliwatan}}',
 'youhavenewmessagesmulti' => 'Igwa ka nin mga bàgong mensahe sa $1',
 'editsection' => 'liwatón',
 'editold' => 'Liwatón',
@@ -411,12 +417,12 @@ Pwede mong mahiling an lista nin mga marhay na pahina sa [[Special:SpecialPages|
 # General errors
 'error' => 'Salâ',
 'databaseerror' => 'Salâ sa base nin datos',
-'dberrortext' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
-Ini puwedeng minapanungod nin sarong kubol (bug) sa software.
+'dberrortext' => 'May kahaputan sa datos-sarayan sa napasalang sintaks an nangyari.
+Ini puwedeng minapanungod nin sarong kubol na yaon sa kasungatan .
 An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 <blockquote><tt>$1</tt></blockquote>
-hale sa laog kan punksyon na "<tt>$2</tt>".
-An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
+gikan sa laog kan punksyon na "<tt>$2</tt>".
+An pinagbalik na kasalaan sa datos-sarayan "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
 An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 "$1"
@@ -428,11 +434,11 @@ An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
 'readonlytext' => 'Sarado mùna an base nin datos sa mga bàgong entrada asin iba pang mga pagribay, pwede gayod sa rutinang pagmantenir kan base nin datos, despues, mabalik na ini sa normal.
 
 Ini an eksplikasyon kan tagamató na nagkandado kaini: $1',
-'missing-article' => 'An datos-sarayan dae nakanagbo kan teksto nin sarong pahina na dapat kuta nang managboan, pinagngaran na "$1" S2.
+'missing-article' => 'An datos-sarayan dae nakanagbo nin teksto kan sarong pahina na dapat kuta nang managboan, pinagngaran na "$1" $2.
 
-Ini pirmeng pinagkakausa sa paagi nin pagsusunod nin sarong lumang diff o historiyang kilyawan na yaon sa sarong pahinang pinagpura na.
+Ini pirmeng pinagkakausa sa paagi nin pagsusunod nin sarong lumaon na diff o historiyang kasugpunan na yaon sa sarong pahinang pinagpura na.
 
-Kun iyo ini an kaso, ika nakanagbo nin sarong kubol (bug) sa software.
+Kun bako ini an kaso, ika nakanagbo nin sarong kubol sa kasungatan.
 Pakireport tabi ini sa [[Special:ListUsers/sysop|administrador]], na naka-antabay sa kilyawan.',
 'missingarticle-rev' => '(pagbàgo#: $1)',
 'missingarticle-diff' => '(Kaibhán: $1, $2)',
@@ -500,7 +506,7 @@ An administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: "$
 # Login and logout pages
 'logouttext' => "'''Ika po sa ngunyan nakaluwas na.'''
 
-Ika makakadagos pa sa paggamit kan {{SITENAME}} na dai nagpapabisto, o ika [[Special:UserLogin|Maglaog giraray]] bilang pareho o bilang ibang paragamit.
+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.
@@ -511,6 +517,7 @@ Dae ka man tabi malingaw na ribayan an saimong [[Special:Preferences|{{SITENAME}
 'remembermypassword' => 'Giromdoma an sakong paglaog sa kilyaw (browser) na ini (para sa maksimum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
 'securelogin-stick-https' => 'Magpirmeng konektado sa HTTPS matapos kang maglaog',
 'yourdomainname' => 'An saimong kasakupan:',
+'password-change-forbidden' => 'Ika dae makapagliwat nin sekretong panlaog sa wiking ini.',
 'externaldberror' => 'Igwa gayod sala sa arinman kan patunay sa datos-sarayan o ika dae pinagtugutan na bâgohon an saimong panluwas na panindog.',
 'login' => 'Maglaog',
 'nav-login-createaccount' => 'Maglaog / magmukna nin panindog',
@@ -715,7 +722,7 @@ Ika dae makakagamit kan 'e-koreo kaining paragamit' na panuytuyan laen lang na m
 An saimong presenteng IP address iyo $3, asin an kubkob ID iyo #$5.
 Pakibale na lang tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.",
 'autoblockedtext' => 'An saimong IP address awtomatikong pinagkubkob nin huli ta ini pinaggamit kan ibang paragamit, na pinagkubkob ni $1.
-An rason na ipinagtao iyo:
+An rason na ipinagtao iyo na:
 
 :\'\'$2\'\'
 
@@ -723,12 +730,12 @@ An rason na ipinagtao iyo:
 * Pagpasó kan pagkubkob: $6
 * Katuyuhan kan parakubkob: $7
 
-Puwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador] tanganing pag-orolayan an kubkob.
+Puwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador]] tanganing pag-orolayan an kubkob.
 
 Patanid tabi dae mo puwedeng gamiton an "e-koreo kaining paragamit" estima laen lang kun ika igwa nin sarong balidong e-koreo address na rehistrado sa saimong [[Special:Preferences|paragamit na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.
 
 An saimong presenteng IP address iyo an $3, asin and Kubkob ID iyo an #$5.
-Pakibale tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.',
+Pakibale tabi an gabos na mga detalye sa itaas sa arinman na mga kahaputan na saimong himoon.',
 'blockednoreason' => 'mayong itinaong rason',
 'whitelistedittext' => 'Kaipuhan mong $1 tangarig makahirá nin mga páhina.',
 'confirmedittext' => "Kaipuhan mong kompirmaron an saimong ''e''-surat. Ipwesto tabî asin patunayan an saimong ''e''-surat sa [[Special:Preferences|mga kabôtan kan parágamit]].",
@@ -758,17 +765,20 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} liwaton ining pahina]</span>.',
 'noarticletext-nopermission' => 'Mayo tabi sa presente nin teksto sa pahinang ini.
 Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.',
+'missing-revision' => 'An rebisyon #$1 kan pahina pinagngaranan na "{{PAGENAME}}" bakong eksistido.
+
+Ini pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas na petsang historiya nin kasugpunan pasiring sa sarong pahinang pinagpura na.
+An mga detalye matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} pinagpura na talaan].',
 'userpage-userdoesnotexist' => 'Paragamit na panindog "$1" bako tabing rehistrado.
 Paki-tsek kun ika magustong magmukna/magliwat kaining pahina.',
 'userpage-userdoesnotexist-view' => 'Paragamit na panindog "$1" bako tabing rehistrado.',
 'blocked-notice-logextract' => 'Ining paragamit sa presente nakakubkob.
 An pinakahuring entrada kan pagkubkob nakahaya sa ibaba bilang reperensiya:',
-'clearyourcache' => "'''Note:''' Matapos maitagama, ika mapuwedeng makaluktos sa tagoan kan saimong kilyaw tanganing mahiling an mga naribayan.
-* '''Firefox / Safari:''' Pauntok na duon sa ''Shift'' habang pinipindot an ''Ikarga otro'', o pinduton as maski arin sa ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' para sa Mac)
+'clearyourcache' => "'''Antabay:''' Matapos maitagama, ika mapuwedeng magsalimbaw sa sarayan kan saimong kilyaw tanganing hilingon an mga naribayan.
+* '''Firefox / Safari:''' Pauntok na duon ''Shift'' habang pig-klik an ''Ikarga otro'', o pinduton an maski arin ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' para sa Mac)
 * '''Google Chrome:''' Pinduton ''Ctrl-Shift-R'' (''⌘-Shift-R'' para sa Mac)
-* '''Internet Explorer:''' Pauntok na duon sa ''Ctrl'' habang pinipindot an ''Ipresko otro'', o pinduton an ''Ctrl-F5''
-* '''Konqueror:''' Ipindot an ''Ikarga otro'' o pinduton an ''F5''
-* '''Opera:''' Linigan an tagoan sa ''Tools → Mga Kabotan''",
+* '''Internet Explorer:''' Pauntok na duon ''Ctrl'' habang pig-klik an ''Ipresko otro'', o pinduton ''Ctrl-F5''
+* '''Opera:''' Linigan an sarayan sa ''Mga Kagamitan → Mga Kabotan''",
 'usercssyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong CSS bago ipagtagama.",
 'userjsyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong JavaScript bago ipagtagama.",
 'usercsspreview' => "'''Giromdoma baya na ika nagtatanaw pa sana kan saimong paragamit sa CSS.'''
@@ -884,12 +894,13 @@ Ining mga argumento tabi pinagharali na.",
 'expansion-depth-exceeded-warning' => 'An pahina nagsobra sa panrarom na kalakbangan',
 'parser-unstrip-loop-warning' => 'Panul-ot na kaluktusan namansayan',
 'parser-unstrip-recursion-limit' => 'Panul-ot na rekusyong kasagkodan nagsobra ($1)',
+'converter-manual-rule-error' => 'Kasalaan detektado sa manwal na konbersyon kan pinapasunod sa lengguwahe',
 
 # "Undo" feature
 'undo-success' => 'Pwedeng bawion an paghirá. Sosogon tabì an pagkakaiba sa babâ tangarig maberipikár kun ini an boot mong gibohon, dangan itagama an mga pagbabàgo sa babâ tangarig tapuson an pagbawì sa paghirá.',
 'undo-failure' => 'Dai napogol an paghirá ta igwa pang ibang paghirá sa tahaw na nagkokomplikto.',
 'undo-norev' => 'An pagliwat dae tabi magigibo nin huli ta ini bakong eksistido o pinagpura na.',
-'undo-summary' => 'Ibalik tabi an pinagbabago $1 sa paagi [[Special:Contributions/$2|$2]] ([[Paragamit na Olay:$2|olay]])',
+'undo-summary' => 'Dae idagos an rebisyon $1 sa [[Special:Contributions/$2|$2]] ([[User talk:$2|olay]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Dai makagibo nin account',
@@ -934,7 +945,7 @@ Probaran tabì an [[Special:Search|pighahanap sa wiki]] para sa mga pahinang dap
 'rev-deleted-comment' => '(pagliwat na sumaryo pinaghale)',
 'rev-deleted-user' => '(hinalì an parágamit)',
 'rev-deleted-event' => '(talaan kan aksyon pinaghale)',
-'rev-deleted-user-contribs' => 'Paragamit na ngaran o IP address pinaghale - an pigliwat pinagtago gikan sa mga kontribusyon]',
+'rev-deleted-user-contribs' => '[Ngaran nin paragamit o IP address pinaghale - an pigliwat pinagtago gikan sa mga kontribusyon]',
 'rev-deleted-text-permission' => "An pinagbago tabi kaining pahina '''pinagpura'''.
 An mga detalye mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpura].",
 'rev-deleted-text-unhide' => "An pagbabago tabi kaining pahina '''pinagpura'''.
@@ -953,9 +964,9 @@ Mga detalye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULL
 'rev-deleted-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinagpura'''.
 Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].
 Ika mapuwede pa [$1 magtanaw kaining diff] kun ika nagmawot na magpadagos.",
-'rev-suppressed-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinaglubog'''.
-Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan pinaglubog].
-Ika mapuwede pa man na [$1 matanaw ining diff] kun ika mawot na magdagos.",
+'rev-suppressed-unhide-diff' => "Saro sa mga rebisyon kaining diff '''pinaglubog'''.
+Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} pinaglubog na talaan].
+Ika mapuwede man na [$1 tanawon ining diff] kun ika mawot na magpadagos.",
 'rev-deleted-diff-view' => "Saro sa mga pinagbago kaining diff '''pinagpura'''.
 Ika makakapagtanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].",
 'rev-suppressed-diff-view' => "Saro sa mga pinagbago kaining diff '''pinaglubog'''.
@@ -1039,9 +1050,9 @@ Himoon mong segurado na ining pagbabago makapagtala nin historikal na kapadagusa
 'mergehistory-from' => 'Gikanang pahina:',
 'mergehistory-into' => 'Destinasyong pahina:',
 'mergehistory-list' => 'Puwedeng maitiripon na historiya kan pagliwat',
-'mergehistory-merge' => 'An mga minasunod na mga pagbabago sa [[:$1]] mapuwedeng pagtiriponon na magin [[:$2]].
-Gamita an radyong pindutan sa kolum tanganing tiriponon sana an mga pagbabagong pinagmukna asin bago pa man an pinaghahayag na oras.
-Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining kolum.',
+'mergehistory-merge' => 'An mga minasunod na mga rebisyon kan [[:$1]] mapuwedeng pagkasararoon na magin [[:$2]].
+Gamita an radyong pindutan sa kolum tanganing sararoon sana an mga rebisyon na pinagmukna sa asin bago pa man an pinagsambit na oras.
+Tandaan na an paggagamit kan nabigasyong nin mga kasurugponan makakapagliwat kaining kolum.',
 'mergehistory-go' => 'Ipahayag an mapuwedeng matiripon na mga pagliwat',
 'mergehistory-submit' => 'Tiripona an mga pagbabago',
 'mergehistory-empty' => 'Mayong mga pagbabago na puwedeng mapagtiripon.',
@@ -1073,6 +1084,10 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'editundo' => 'isulít',
 'diff-multi' => '({{PLURAL:$1|Saro intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} by {{PLURAL:$2|sarong paragamit|$2 mga paragamit}} dae pinaghahayag)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Sarong intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} na sobra sa $2 {{PLURAL:$2|paragamit|mga paragamit}} dae pinaghahayag)',
+'difference-missing-revision' => '{{PLURAL:$2|sarong rebisyon|$2 mga rebisyon}} kaining diperensiya ($1) {{PLURAL:$2|na iyo an|kaidto na iyo an}} dae nanagboan.
+
+Ini pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas sa petsang diff na kasugponan pasiring sa sarong pahina na pinagpura na.
+An mga detalye mapuwedeng matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpuraan].',
 
 # Search results
 'searchresults' => 'Resulta kan paghánap',
@@ -1087,21 +1102,54 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'notextmatches' => 'Mayong ángay na teksto nin páhina',
 'prevn' => 'dating {{PLURAL:$1|$1}}',
 'nextn' => 'sunód na {{PLURAL:$1|$1}}',
+'prevn-title' => 'Dati $1 {{PLURAL:$1|resulta|mga resulta}}',
+'nextn-title' => 'Sunod $1  {{PLURAL:$1|resulta|mga resulta}}',
+'shown-title' => 'Ipahiling $1  {{PLURAL:$1|resulta|mga resulta}} sa kada pahina',
 'viewprevnext' => 'Hilingón ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'Opsyon sa paghahanap',
+'searchmenu-exists' => "'''Igwa nin sarong pahina na pinagngaranan na \"[[:\$1]]\" sa wiking ini.'''",
+'searchmenu-new' => "'''Muknaon an pahina \"[[:\$1]]\" sa wiking ini!'''",
 'searchhelp-url' => 'Help:Mga laog',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Kilyawon an mga pahina sa paagi kainin enotang panigmit]]',
+'searchprofile-articles' => 'Mga pahina nin laog',
+'searchprofile-project' => 'Mga pahina nin Tabang asin Proyekto',
+'searchprofile-images' => 'Multimidya',
 'searchprofile-everything' => 'Gabós',
+'searchprofile-advanced' => 'Adbansiyado',
 'searchprofile-articles-tooltip' => 'Hanapon sa $1',
+'searchprofile-project-tooltip' => 'Maghanap sa $1',
+'searchprofile-images-tooltip' => 'Maghanap nin mga sagunson',
+'searchprofile-everything-tooltip' => 'Maghanap nin gabos na laog (kabali an mga pahina nin olay)',
+'searchprofile-advanced-tooltip' => 'Maghanap nin pankustombreng espasyong-ngaran',
 'search-result-size' => '$1 ({{PLURAL:$2|1 tatarámon|$2 mga tatarámon}})',
+'search-result-category-size' => '{{PLURAL:$1|1 miyembro|$1 mga miyembro}} ({{PLURAL:$2|1 subkategorya|$2 mga subkategorya}}, {{PLURAL:$3|1 sagunson|$3 mga sagunson}})',
+'search-result-score' => 'Relebansiya: $1%',
+'search-redirect' => '(Panukdong otro $1)',
+'search-section' => '(Seksyon $1)',
 'search-suggest' => 'Boót mo iyó: $1',
+'search-interwiki-caption' => 'Tugang na mga proyekto',
+'search-interwiki-default' => '$1 na mga resulta:',
 'search-interwiki-more' => '(dakol pa)',
-'search-mwsuggest-enabled' => 'igwang mga suhestyon',
-'search-mwsuggest-disabled' => 'mayong suhestyon',
+'search-relatedarticle' => 'Kauyon',
+'mwsuggest-disable' => 'Pundohon an AJAX na mga suhestiyon',
+'searcheverything-enable' => 'Maghanap sa gabos na mga espasyong-ngaran',
+'searchrelated' => 'kauyon',
 'searchall' => 'gabós',
 'showingresults' => "Pigpapahiling sa babâ sagkod sa {{PLURAL:$1|'''1''' resulta|'''$1''' mga resulta}} poon sa #'''$2'''.",
 'showingresultsnum' => "Pigpapahiling sa babâ {{PLURAL:$3|'''1''' resulta|'''$3''' mga resulta}} poon sa #'''$2'''.",
-'nonefound' => "'''Pagiromdom''': An mga prakasong paghanap pirmeng kawsa kan paghanap kan mga tataramon na komún arog kan \"may\" asin \"sa\", huli ta an mga ini dai nakaíndise, o sa pagpili kan sobra sa sarong tataramon (an mga páhina sana na igwá kan gabos na pighahanap na tataramon an maipapahiling sa resulta).",
-'powersearch' => 'Pinaoróg na paghánap',
+'showingresultsheader' => "{{PLURAL:$5|Resulta '''$1''' kan '''$3'''|Mga Resulta '''$1 - $2''' kan '''$3'''}} para sa '''$4'''",
+'nonefound' => "'''Notang Antabay''': An ibang espasyong-ngaran sana an pirmihang pinaghahanap.
+Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos na laog (kabali an mga pahina nin olay, mga templato, etc), o gamiton an pinagmawot na espasyong ngaran bilang enotang panigmit.",
+'search-nonefound' => 'Mayo nin mga resulta na panampok sa kahaputan.',
+'powersearch' => 'Adbansiyadong paghahanap',
+'powersearch-legend' => 'Adbansiyadong paghahanap',
+'powersearch-ns' => 'Maghanap sa mga espasyong-ngaran:',
+'powersearch-redir' => 'Listahan kan mga panukdong otro',
 'powersearch-field' => 'Hanápon an',
+'powersearch-togglelabel' => 'Pamili:',
+'powersearch-toggleall' => 'Gabos',
+'powersearch-togglenone' => 'Wara',
+'search-external' => 'Panluwas na paghahanap',
 'searchdisabled' => 'Pigpopogolan mûna an paghanap sa {{SITENAME}}. Mientras tanto, pwede ka man maghanap sa Google. Giromdomon tabî na an mga indise kan laog ninda sa {{SITENAME}} pwede ser na lumâ na.',
 
 # Quickbar
@@ -1111,37 +1159,57 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'qbsettings-fixedright' => 'Nakatakód sa tûo',
 'qbsettings-floatingleft' => 'Naglálatáw sa walá',
 'qbsettings-floatingright' => 'Naglálatáw sa tûo',
+'qbsettings-directionality' => 'Nakadukot, minadepende sa skrip panukdoan kan saimong lengguwahe',
 
 # Preferences page
 'preferences' => 'Mga kabòtan',
 'mypreferences' => 'Mga kabòtan ko',
 'prefs-edits' => 'Bilang kan mga hirá:',
 'prefsnologin' => 'Dai nakalaog',
-'prefsnologintext' => 'Ika dapat si [[Special:UserLogin|nakalaog]] para makapwesto nin mga kabôtan nin parágamit.',
+'prefsnologintext' => 'Ika dapat na magin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakalaog na]</span> tanganing tuytuyon an mga kabotan nin paragamit.',
 'changepassword' => 'Ribayan an sekretong panlaog',
 'prefs-skin' => "''Skin''",
 'skin-preview' => 'Tânawon',
 'datedefault' => 'Mayong kabôtan',
+'prefs-beta' => 'Mga posturang yaon sa beta',
 'prefs-datetime' => 'Petsa asin oras',
+'prefs-labs' => 'Mga posturang yaon sa Labs',
+'prefs-user-pages' => 'Paragamit na mga pahina',
 'prefs-personal' => 'Pambisto nin parágamit',
 'prefs-rc' => 'Mga kaaagi pa sanang pagribay',
 'prefs-watchlist' => 'Pigbabantayan',
-'prefs-watchlist-days' => 'Máximong número nin mga aldaw na ipapahiling sa lista nin mga pigbabantayan:',
+'prefs-watchlist-days' => 'Mga aldaw na ipahiling sa batay-listahan:',
+'prefs-watchlist-days-max' => 'Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}',
 'prefs-watchlist-edits' => 'Máximong número nin pagbabâgo na ipapahiling sa pinadakulang lista nin pigbabantayan:',
+'prefs-watchlist-edits-max' => 'Maksimum na numero: 1000',
+'prefs-watchlist-token' => 'Token sa Bantay-listahan:',
 'prefs-misc' => 'Lain',
+'prefs-resetpass' => 'Liwaton an sekretong panlaog',
+'prefs-changeemail' => 'Liwaton an e-surat na adres',
+'prefs-setemail' => 'Tuytuyon an e-surat na adres',
+'prefs-email' => 'E-surat na mga pagpipilian',
+'prefs-rendering' => 'Hitsurahon',
 'saveprefs' => 'Itagama',
-'resetprefs' => 'Ipwesto giraray',
+'resetprefs' => 'Linigan an dae naitagamang mga kaliwatan',
+'restoreprefs' => 'Ibalik an gabos na pirmihang mga panuytoy',
 'prefs-editing' => 'Pighihira',
+'prefs-edit-boxsize' => 'Sukol kan bintana sa pagliwat.',
 'rows' => 'Mga hilera:',
 'columns' => 'Mga taytay:',
 'searchresultshead' => 'Hanápon',
 'resultsperpage' => 'Mga tamà kada pahina:',
 'stub-threshold' => 'Kasagkoran kan <a href="#" class="stub">takod kan tambô</a> pigpopormato:',
+'stub-threshold-disabled' => 'Pinagpundo',
 'recentchangesdays' => 'Mga aldáw na ipapahilíng sa mga nakakaági pa sanáng pagbabàgó:',
-'recentchangescount' => 'Bilang nin mga paghirá na ipapahilíng sa mga nakakaági pa sanáng pagbabàgó:',
+'recentchangesdays-max' => 'Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}',
+'recentchangescount' => 'Numero kan mga pagliliwat na ipapahiling na pirmihan:',
+'prefs-help-recentchangescount' => 'Kabali kaini an dae pa nahaloy na mga kaliwatan, mga historiyang pahina, asin mga talaan.',
+'prefs-help-watchlist-token' => 'An pagpapano sa parteng ini nin sarong sekretong susi magbubuswang nin RSS feed para sa saimong bantay-listahan.
+Siisay man na nakakaaram kan suri sa parteng ini makakabasa kan saimong bantay-listahan, kaya magpili nin sarong seguradong halaga.
+Uya an halaga sa random na pagbuswang na puwede mong magamit: $1',
 'savedprefs' => 'Itinagama na an mga kabôtan mo.',
-'timezonelegend' => 'Zona nin oras',
-'localtime' => 'Lokal na oras',
+'timezonelegend' => 'Pan-oras na sona:',
+'localtime' => 'Panlokal na oras:',
 'timezoneuseserverdefault' => 'Gamita an panugmad sa wiki ($1)',
 'timezoneuseoffset' => 'Iba pa (ihayag an pambawi)',
 'timezoneoffset' => 'Bawia¹:',
@@ -1169,22 +1237,38 @@ Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining
 'prefs-reset-intro' => 'Ika makakagamit kaining pahina tanganing ilapat giraray an saimong mga kabotan sa panugmad kan sayt.
 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}}:',
+'prefs-registration' => 'Rehistrasyong oras:',
 'yourrealname' => 'Totoong pangaran:',
 'yourlanguage' => 'Tataramon:',
-'yourvariant' => 'Bariante:',
-'yournick' => 'Gahâ:',
+'yourvariant' => 'Panlaog na lengguwaheng kairibanhan:',
+'prefs-help-variant' => 'Saimong pinagpiling kairibanhan o ortograpiya tanganing ipahiling an laog kaining mga pahina sa wiking ini.',
+'yournick' => 'Panibagong pirma:',
+'prefs-help-signature' => 'Mga komentaryo sa mga pahina nin olay dapat pirmado nin "<nowiki>~~~~</nowiki>" na pagriribayon na magin saimong pirma asin sarong panimbreng oras.',
 'badsig' => 'Dai pwede an bâgong pirmang ini; isúsog an mga HTML na takód.',
-'badsiglength' => 'Halabâon an gahâ; kaipuhan dai mababà sa $1 na mga karakter.',
+'badsiglength' => 'An saimong pirma grabe kahalabaon.
+Ini dapat dae magsobra sa $1 {{PLURAL:$1|karakter|mga karakter}} an laba.',
+'yourgender' => 'Pagkatawo:',
+'gender-unknown' => 'Dae nakasambit',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babai',
+'prefs-help-gender' => 'Opsyonal: Ginagamit para sa pagkatawong pag-apod sa paagi nin kasungatan.
+Ining impormasyon magigin pampubliko.',
 'email' => 'E-koreo',
 'prefs-help-realname' => 'Opsyonal an totoong pangaran asin kun itatao mo ini, gagamiton ini yangarig an mga sinurat mo maatribuir saimo.',
-'prefs-help-email' => 'Opsyonal an e-koreo, alagad pwede ka na masosog kan iba sa paagi kan saimong pahina o pahina nin olay na dai kinakaipuhan na ipabisto an identidad mo.',
+'prefs-help-email' => 'An e-surat na adres sarong opsyonal, alagad ini kinakaipohan para sa pagtuytoy otro kan sekretong panlaog, kun ika malingaw kan saimong sekretong panlaog.',
+'prefs-help-email-others' => 'Ika kan man pumili na magtugot sa iba na makontak ka sa e-surat sa paagi nin sarong kasugponan na yaon sa saimong pahina nin paragamit o olay.
+An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit makontak saimo.',
 'prefs-help-email-required' => 'Kaipuhan an e-koreo.',
+'prefs-info' => 'Panuntong na impormasyon',
+'prefs-i18n' => 'Internasyonalisasyon',
+'prefs-signature' => 'Pirma',
+'prefs-dateformat' => 'Pampetsang pormat',
+'prefs-timeoffset' => 'Pan-oras na tapal',
 'prefs-advancedrc' => 'Pangenot na mga pagpipilian',
 'prefs-advancedrendering' => 'Abantidong mga pagpipilian',
 'prefs-advancedsearchoptions' => 'Abantidong mga pagpipilian',
@@ -2529,7 +2613,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 '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 "$!" 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 ngaran kaini reserbado para sa panluwas na kasugponan (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-options-wrong' => 'Salang {{PLURAL:$2|pagpipilian|mga pagpipilian}}: <nowiki>$1</nowiki>',
@@ -2546,7 +2630,6 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 
 # JavaScriptTest
 'javascripttest' => 'Testing sa JavaScript',
-'javascripttest-disabled' => 'Ining punksyon dae pinagpagana sa wiki na ini.',
 'javascripttest-title' => 'Pinapadalagan na $1 na mga pagtesting',
 'javascripttest-pagetext-noframework' => 'An pahinang ini reserbado para sa pagpapadalagan kan mga pagtesting sa JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Bakong bistadong modelo para sa pagtesting kan "$1".',
@@ -2659,7 +2742,10 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 
 # Info page
 'pageinfo-title' => 'Impormasyon para sa "$1"',
-'pageinfo-header-edits' => 'Mga pagliliwat',
+'pageinfo-header-basic' => 'Panuntungang impormasyon',
+'pageinfo-header-edits' => 'Pagliwat na historiya',
+'pageinfo-header-restrictions' => 'Pampahinang proteksyon',
+'pageinfo-header-properties' => 'Pampahinang propriyedades',
 'pageinfo-views' => 'Numero kan mga patanaw',
 'pageinfo-watchers' => 'Numero kan mga parabantay',
 'pageinfo-edits' => 'Numero kan mga pagliliwat',
@@ -2807,94 +2893,402 @@ An mga iba pagtatagoon sa paagi nin pirmehan.
 'exif-contrast' => 'Kontraste',
 'exif-imageuniqueid' => 'Unikong ID kan ladawan',
 'exif-gpstrack' => 'Direksyon kan paghirô',
+'exif-gpsimgdirectionref' => 'Reperensiya para sa direksyon kan imahe',
 'exif-gpsimgdirection' => 'Direksyon kan ladáwan',
+'exif-gpsmapdatum' => 'Heodetikong surbey an datos na pinaggamit',
+'exif-gpsdestlatituderef' => 'Reperensiya para sa panlatitud na destinasyon',
+'exif-gpsdestlatitude' => 'Panlatitud na destinasyon',
+'exif-gpsdestlongituderef' => 'Reperensiya para sa panlongitud na destination',
+'exif-gpsdestlongitude' => 'Panlongitud na destinasyon',
+'exif-gpsdestbearingref' => 'Reperensiya para sa pandireksyon na destinasyon',
+'exif-gpsdestbearing' => 'Pandireksyon na destinasyon',
+'exif-gpsdestdistanceref' => 'Reperensiya para sa pandistansiya na destinasyon',
 'exif-gpsdestdistance' => 'Distansya sa destinasyon',
+'exif-gpsprocessingmethod' => 'Ngaran kan GPS na pamprosesong kapaagihan',
+'exif-gpsareainformation' => 'Ngaran nin lugar kan GPS',
+'exif-gpsdatestamp' => 'Petsa kan GPS',
+'exif-gpsdifferential' => 'Diperensiyal na koreksyon kan GPS',
+'exif-jpegfilecomment' => 'Komentaryo sa JPEG na sagunson',
+'exif-keywords' => 'Mga Susing taramon',
+'exif-worldregioncreated' => 'Rehiyon kan kinaban na pinagkuanan kan litrato',
+'exif-countrycreated' => 'Nasyon na pinagkuanan kan litrato',
+'exif-countrycodecreated' => 'Koda para sa nasyon na pinagkuanan kan litrato',
+'exif-provinceorstatecreated' => 'Probinsiya o estado na pinagkuanan kan litratro',
+'exif-citycreated' => 'Siyudad na pinagkuanan kan litrato',
+'exif-sublocationcreated' => 'Sublokasyon kan siyudad na pinagkuanan kan litrato',
+'exif-worldregiondest' => 'Rehiyon kan kinaban pinapahiling',
+'exif-countrydest' => 'Nasyon ipinapahiling',
+'exif-countrycodedest' => 'Koda para sa nasyon na ipinahiling',
+'exif-provinceorstatedest' => 'Probinsiya o estadong ipinapahiling',
+'exif-citydest' => 'Siyudad ipinahiling',
+'exif-sublocationdest' => '
+Sublokas kan siyudad na ipinahiling',
+'exif-objectname' => 'Halipot na titulo',
+'exif-specialinstructions' => 'Espesyal na mga instruksyon',
+'exif-headline' => 'Pamayuhang-linya',
+'exif-credit' => 'Pautang/Tagapagtao',
+'exif-source' => 'Pinaggikanan',
+'exif-editstatus' => 'Editoryal na kamugtakan kan imahe',
+'exif-urgency' => 'Kahidalian',
+'exif-fixtureidentifier' => 'Ngaran kan agwerto',
+'exif-locationdest' => 'Lokasyon pinagbiklad',
+'exif-locationdestcode' => 'Koda kan lokasyon pinagbiklad',
+'exif-objectcycle' => 'Oras kan aldaw na an midya pinagtuyuhan',
+'exif-contact' => 'Impormasyon kan kontak',
+'exif-writer' => 'Parasurat',
+'exif-languagecode' => 'Lengguwahe',
+'exif-iimversion' => 'IIM bersyon',
+'exif-iimcategory' => 'Kategoriya',
+'exif-iimsupplementalcategory' => 'Pansuplementong mga kategoriya',
+'exif-datetimeexpires' => 'Dae gamiton pagkatapos',
+'exif-datetimereleased' => 'Pinaluwas kan',
+'exif-originaltransmissionref' => 'Orihinal na transmisyon sa koda nin lokasyon',
+'exif-identifier' => 'Tagapagpamidbid',
+'exif-lens' => 'Lenteng pinaggamit',
+'exif-serialnumber' => 'Seryal na numero kan kamera',
+'exif-cameraownername' => 'Kagsadire kan kamera',
+'exif-label' => 'Tatak',
+'exif-datetimemetadata' => 'Petsa kan metadata na huring pinagbago',
+'exif-nickname' => 'Impormal na ngaran kan imahe',
+'exif-rating' => 'Kamarkahan (luwas sa lima)',
+'exif-rightscertificate' => 'Sertipiko kan manihamento nin mga karapatan',
+'exif-copyrighted' => 'Estado sa karapatan nin panurat',
+'exif-copyrightowner' => 'Kagsadire sa karapatan nin panurat',
+'exif-usageterms' => 'Mga Terminong Ginagamit',
+'exif-webstatement' => 'Online na testamento sa karapatan nin panurat',
+'exif-originaldocumentid' => 'Unikong ID kan orihinal na dokumento',
+'exif-licenseurl' => 'Kilyawan para sa lisensiya nin karapatan sa panurat',
+'exif-morepermissionsurl' => 'Alternatibong impormasyon sa paglilisensiya',
+'exif-attributionurl' => 'Kunsoarin gagamiton otro ining gibo, pakisugpon sa',
+'exif-preferredattributionname' => 'Kunsoarin gagamiton otro ining gibo, sabihon tabi an kredito',
+'exif-pngfilecomment' => 'Komentaryo sa PNG na sagunson',
+'exif-disclaimer' => 'Pagpapasimuya',
+'exif-contentwarning' => 'Patanid kan laog',
+'exif-giffilecomment' => 'Komentary sa GIF na sagunson',
+'exif-intellectualgenre' => 'Tipo kan Aytem',
+'exif-subjectnewscode' => 'Koda kan subheto',
+'exif-scenecode' => 'IPTC pan-eksenang koda',
+'exif-event' => 'Panyayaring pinagbiklad',
+'exif-organisationinimage' => 'Organisasyon pinagbiklad',
+'exif-personinimage' => 'Persona pinagbiklad',
+'exif-originalimageheight' => 'Langkaw kan imahe bago ini pinagkrap',
+'exif-originalimagewidth' => 'Lakbang kan imahe bago ini pinagkrap',
+
+# EXIF attributes
+'exif-compression-1' => 'Pinaghalugaan',
+'exif-compression-2' => 'CCITT Grupong 3 1-Dimensyonal na pagbabago ni Huffman nagdadalagan nin halawig na pag-enkod',
+'exif-compression-3' => 'CCITT Grupong 3 pinag-enkod sa fax',
+'exif-compression-4' => 'CCITT Grupong 3 pinag-enkod sa fax',
+
+'exif-copyrighted-true' => 'Nakatagamang karapatan sa panurat',
+'exif-copyrighted-false' => 'Pampublikong Kinasakupan',
 
 'exif-unknowndate' => 'Daí aram an petsa',
 
+'exif-orientation-1' => 'Normalon',
+'exif-orientation-2' => 'Pahigdang pinagbuklat',
+'exif-orientation-3' => 'Pinag-ikot nin 180 grado',
+'exif-orientation-4' => 'Patindog na pinagbuklot',
+'exif-orientation-5' => 'Pinag-ikot nin 90 grade asin patindog na pinagbuklat',
+'exif-orientation-6' => 'Pinag-ikot nin 90 grado sa CCW',
+'exif-orientation-7' => 'Pinag-ikot nin 90 grade CW asin patindog na pinagbuklat',
+'exif-orientation-8' => 'Pinag-ikot nin 90 grado sa CW',
+
+'exif-planarconfiguration-1' => 'Patingi na pormat',
+'exif-planarconfiguration-2' => 'Planar na pormat',
+
+'exif-colorspace-65535' => 'Bakong kalibrado',
+
 'exif-componentsconfiguration-0' => 'mayô man ini',
 
+'exif-exposureprogram-0' => 'Mayong pinagkahulugan',
+'exif-exposureprogram-1' => 'Manwal',
+'exif-exposureprogram-2' => 'Normal na programa',
+'exif-exposureprogram-3' => 'Apertoryong Prayoridad',
+'exif-exposureprogram-4' => 'Panseradong Prayoridad',
+'exif-exposureprogram-5' => 'Pangmuknaon na programa (minapabor sa hararomon na kinasakupan)',
+'exif-exposureprogram-6' => 'Pamprogramang Aksyon (minauyon sa mabilison pampundong buklos)',
+'exif-exposureprogram-7' => 'Modong patindog (para haranihang mga litrato na igwang kalikudan na luwas sa pokus)',
+'exif-exposureprogram-8' => 'Modong pahigda ( para sa pahigdang mga litrato na igwang kalikudan na nakapokus)',
+
 'exif-subjectdistance-value' => '$1 metros',
 
 'exif-meteringmode-0' => 'Dai aram',
+'exif-meteringmode-1' => 'Kagtahawan',
+'exif-meteringmode-2' => 'Sentrong pinaggabatan na kagtahawan',
+'exif-meteringmode-3' => 'Kaghilngan',
+'exif-meteringmode-4' => 'Pandakol na kaghilngan',
+'exif-meteringmode-5' => 'Pangarugan',
+'exif-meteringmode-6' => 'Parsyal',
 'exif-meteringmode-255' => 'Iba pa',
 
+'exif-lightsource-0' => 'Bakong bistado',
+'exif-lightsource-1' => 'Maliwanagong aldaw',
+'exif-lightsource-2' => 'Kalaadan',
+'exif-lightsource-3' => 'Tungsten (mainitong liwanag)',
 'exif-lightsource-4' => 'Kitkilát',
 'exif-lightsource-9' => 'Magayón na panahón',
+'exif-lightsource-10' => 'Mapanginurong panahon',
+'exif-lightsource-11' => 'Lindong',
+'exif-lightsource-12' => 'Pan-agang kalaadan (D 5700 - 7100K)',
+'exif-lightsource-13' => 'Pan-agang mapution na kalaadan (N 4600 - 5400K)',
+'exif-lightsource-14' => 'Malipotong mapution na kalaadan (W 3900 - 4500K)',
+'exif-lightsource-15' => 'Maputiong kalaadan (WW 3200 - 3700K)',
+'exif-lightsource-17' => 'Estandarteng Laad A',
+'exif-lightsource-18' => 'Estandarteng Laad B',
+'exif-lightsource-19' => 'Estandarteng Laad C',
+'exif-lightsource-24' => 'ISO estudyong tungsten',
 'exif-lightsource-255' => 'Mga ibang ginikanan nin ilaw',
 
+# Flash modes
+'exif-flash-fired-0' => 'An flash dae nagsindi',
+'exif-flash-fired-1' => 'An flash nagsindi',
+'exif-flash-return-0' => 'mayong estrobo sa pambalik na punksyon sa deteksyon',
+'exif-flash-return-2' => 'estrobong pambalik liwanag bakong detektado',
+'exif-flash-return-3' => 'estrobong pambalik na liwanag detektado',
+'exif-flash-mode-1' => 'kompulsaryong flash nagsindi',
+'exif-flash-mode-2' => 'kompulsaryong flash pinupugulan',
+'exif-flash-mode-3' => 'automatikong modo',
+'exif-flash-function-1' => 'Mayong naggaganang flash',
+'exif-flash-redeye-1' => 'mapulang-mata modong pambawas',
+
 'exif-focalplaneresolutionunit-2' => 'pulgada',
 
+'exif-sensingmethod-1' => 'Mayong pakahulugan',
+'exif-sensingmethod-2' => 'Tagahimate kan solong pinyero nin pankolor sa erya',
+'exif-sensingmethod-3' => 'Tagahimate kan panduwahang pinyero nin pankolor sa erya',
+'exif-sensingmethod-4' => 'Tagahimate kan pantolohang pinyero nin pankolor sa erya',
+'exif-sensingmethod-5' => 'Tagahimate kan pasurunod na pankolor sa erya',
+'exif-sensingmethod-7' => 'Pantolohang linya na tagahimate',
+'exif-sensingmethod-8' => 'Pankolor na pasurunod kan panlinyang tagahimate',
+
+'exif-filesource-3' => 'Nakauntok na kamerang digital',
+
 'exif-scenetype-1' => 'Direktong naretratong ladawan',
 
+'exif-customrendered-0' => 'Normal na proseso',
+'exif-customrendered-1' => 'Pambagong proseso',
+
+'exif-exposuremode-0' => 'Awto na pamburiyas',
+'exif-exposuremode-1' => 'Manwal na pamburiyas',
+'exif-exposuremode-2' => 'Awto na pankorda',
+
+'exif-whitebalance-0' => 'Awto pambalanse kan puti',
+'exif-whitebalance-1' => 'Manwal na pambalanse kan puti',
+
+'exif-scenecapturetype-0' => 'Estandarte',
+'exif-scenecapturetype-1' => 'Pahigda',
 'exif-scenecapturetype-2' => 'Retrato',
 'exif-scenecapturetype-3' => 'Eksenang banggi',
 
+'exif-gaincontrol-0' => 'Mayo',
+'exif-gaincontrol-1' => 'Hababaong pampalangkaw',
+'exif-gaincontrol-2' => 'Paitaas na pampalangkaw',
+'exif-gaincontrol-3' => 'Hababaong pampababa',
+'exif-gaincontrol-4' => 'Paitaas na pampababa',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Malumoy',
+'exif-contrast-2' => 'Matagas',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Hababaon na satyurasyon',
+'exif-saturation-2' => 'Halangkawon na satyurasyon',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Malumoy',
+'exif-sharpness-2' => 'Matagas',
+
+'exif-subjectdistancerange-0' => 'Bakong bisto',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Haranihon pagtanaw',
+'exif-subjectdistancerange-3' => 'Harayoong pagtanaw',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Norteng kasalungaan',
+'exif-gpslatitude-s' => 'Sur na kasalungaan',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Esteng kahalungaan',
+'exif-gpslongitude-w' => 'Westeng kahalungaan',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|metro|metros}} ibabaw sa kaabtangan nin dagat',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|metro|metros}} ibaba sa kaabtangan nin dagat',
+
+'exif-gpsstatus-a' => 'Kasukolan yaon sa progreso',
+'exif-gpsstatus-v' => 'Kasukolan yaon sa panlaog na operabilidad',
+
+'exif-gpsmeasuremode-2' => 'Duwahang dimensyon na kasukolan',
+'exif-gpsmeasuremode-3' => 'Pantolohang dimensyon na kasukolan',
+
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Kilometros kada oras',
 'exif-gpsspeed-m' => 'Milya kada oras',
+'exif-gpsspeed-n' => 'kanukso',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'kilometros',
+'exif-gpsdestdistance-m' => 'Milyas',
+'exif-gpsdestdistance-n' => 'Milya nautikal',
+
+'exif-gpsdop-excellent' => 'Ekselente ($1)',
+'exif-gpsdop-good' => 'Marahayon ($1)',
+'exif-gpsdop-moderate' => 'Moderato ($1)',
+'exif-gpsdop-fair' => 'Marahay-rahay ($1)',
+'exif-gpsdop-poor' => 'Maluyahon ($1)',
+
+'exif-objectcycle-a' => 'Pan-aga sana',
+'exif-objectcycle-p' => 'Panbanggi sana',
+'exif-objectcycle-b' => 'Pareho sa pagka-aga asin pagkabanggi',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Tunay na direksyon',
 'exif-gpsdirection-m' => 'Direksyón nin batobalani',
 
+'exif-ycbcrpositioning-1' => 'Pinagpatahaw',
+'exif-ycbcrpositioning-2' => 'Katampad-sityo',
+
+'exif-dc-contributor' => 'Mga Tagapag-ambag',
+'exif-dc-coverage' => 'Espasyal o temporal tungkos kan midya',
+'exif-dc-date' => 'Petsa (s)',
+'exif-dc-publisher' => 'Publikador',
+'exif-dc-relation' => 'Kaampad na midya',
+'exif-dc-rights' => 'Mga karapatan',
+'exif-dc-source' => 'Ginikanang midya',
+'exif-dc-type' => 'Tipo kan midya',
+
+'exif-rating-rejected' => 'Dinihado',
+
+'exif-isospeedratings-overflow' => 'Halangkawon kesa 65535',
+
+'exif-iimcategory-ace' => 'Mga arte, kultura asin kasalingayan',
+'exif-iimcategory-clj' => 'Krimen asin ley',
+'exif-iimcategory-dis' => 'Mga destroso asin aksidente',
+'exif-iimcategory-fin' => 'Ekonomiya asin negosyo',
+'exif-iimcategory-edu' => 'Edukasyon',
+'exif-iimcategory-evn' => 'Kapalibutan',
+'exif-iimcategory-hth' => 'Salud',
+'exif-iimcategory-hum' => 'Pantawong interes',
+'exif-iimcategory-lab' => 'Trabaho',
+'exif-iimcategory-pol' => 'Mga Pulitika',
+'exif-iimcategory-rel' => 'Relihiyon asin paniniwala',
+'exif-iimcategory-sci' => 'Siyensiya asin teknolohiya',
+'exif-iimcategory-soi' => 'Mga pansosyal na mga isyu',
+'exif-iimcategory-spo' => 'Mga Pakawat',
+'exif-iimcategory-war' => 'Giyera, iriwal asin daeng-kahingaloan',
+'exif-iimcategory-wea' => 'Panahon',
+
+'exif-urgency-normal' => 'Normalon ($1)',
+'exif-urgency-low' => 'Hababaon ($1)',
+'exif-urgency-high' => 'Halangkawon ($1)',
+'exif-urgency-other' => 'Prayoridad na pakahulugan nin paragamit ($1)',
+
 # External editor support
 'edit-externally' => 'Hirahón an file gamit an panluwas na aplikasyon',
-'edit-externally-help' => 'Hilingón an  [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa iba pang mga impormasyon.',
+'edit-externally-help' => '(Hilngon an [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'gabos',
 'namespacesall' => 'gabós',
 'monthsall' => 'gabos',
+'limitall' => 'gabos',
 
 # E-mail address confirmation
 'confirmemail' => "Kompirmaron an ''e''-surat",
 'confirmemail_noemail' => "Mayô kang pigkaag na marhay na ''e''-surat sa saimong [[Special:Preferences|mga kabôtan nin parágamit]].",
-'confirmemail_text' => "Kaipuhan an pag-''validate'' kan saimong e-koreo bago ka makagamit nin ''features'' na e-koreo. Pindoton an butones sa babâ tangarig magpadara nin kompirmasyon sa saimong e-koreo. An surat igwang takod na may koda; ikarga an takod sa browser para makompirmar na valido an saimong e-koreo.",
+'confirmemail_text' => '{{SITENAME}} minakaipo na balidaron an saimong e-surat na adres bago mo gagamiton an mga estima kan e-surat.
+Aktibaron an tipahan sa ibaba tanganing ipadara an pankumpirmang surat sa saimong adres.
+An surat igwa nin sarong kasugpunan na kinaagan nin sarong koda;
+ikarga an kasugpunan sa saimong kilyaw tanganing makumpirma na an saimong e-surat na adres balido.',
 'confirmemail_pending' => "May pigpadara nang kompirmasyon sa ''e''-surat mo; kun kagigibo mo pa sana kan saimong ''account'', maghalat ka nin mga dikit na minutos bago ka maghagad giraray nin bâgong ''code''.",
 'confirmemail_send' => 'Magpadará nin kompirmasyon',
 'confirmemail_sent' => "Napadará na an kompirmasyon sa ''e''-surat.",
 'confirmemail_oncreate' => "May pigpadara nang kompirmasyon sa saimong ''e''-surat.
 Dai man kaipuhan ini para makalaog, pero kaipuhan mong itao ini bago
 ka makagamit nin ''features'' na basado sa ''e''-surat sa wiki.",
-'confirmemail_sendfailed' => "Dai napadará an kompirmasyon kan ''e''-surat. Seguradohon tabî kun igwang sala.
+'confirmemail_sendfailed' => '{{SITENAME}} dae nakapadara kan saimong pankumpirmang surat.
+Pakihiling tabi sa saimong e-surat na adress para sa imbalidong mga karakter.
 
-Pigbalik: $1",
+Paradarang surat pinagbalik: $1',
 'confirmemail_invalid' => 'Salâ an kódigo nin konpirmasyon. Puede ser napasó na an kódigo.',
 'confirmemail_needlogin' => "Kaipuhan tabi $1 ikompirmar an saimong ''e''-surat.",
-'confirmemail_success' => "Nakompirmar na an saimong ''e''-surat. Pwede ka nang maglaog asin mag-ogma sa wiki.",
+'confirmemail_success' => 'An saimong e-surat na adres kumpirmado na.
+Puwede ka na ngunyan [[Special:UserLogin|maglaog]] asin maogmang maggamit kan wiki.',
 'confirmemail_loggedin' => "Nakompirmar na an saimong ''e''-surat.",
 'confirmemail_error' => 'May nasalâ sa pagtagama kan saimong kompirmasyon.',
 'confirmemail_subject' => "kompirmasyón {{SITENAME}} kan direksyón nin ''e''-surat",
-'confirmemail_body' => 'May paragamit, pwedeng ika, halì sa IP na $1, na nagrehistro nin account na
-"$2" na igwang e-koreo sa {{SITENAME}}.
+'confirmemail_body' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
+
+$3
+
+Kun ika *dae* nagrehistro kan panindog, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
 
-Tangarig makompirmar na talagang saimo ining account asin makagamit nin e-koreo sa {{SITENAME}}, bukasán ining takod sa saimong browser:
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_body_changed' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
 
 $3
 
-Kun *bakô* ka ini, dai sunodón an takod. Mapaso sa $4 inning koda nin kompirmasyon.',
+Kun an panindog *bakong* saimo, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
+
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_body_set' => 'Sarong tawo, mapuwedeng ika, gikan sa IP adres na $1,
+nagrehistro nin sarong panindog "$2" na igwa kaining e-surat na adres sa {{SITENAME}}.
+
+Tanganing kumpirmaron na ining panindog talagang pagsadire mo asin re-aktibaron an e-surat na mga estima sa {{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:
+
+$3
+
+Kun an panindog *bakong* saimo, sunuda ining sugpon
+tanganing kanselaron an e-surat na adres na pankumpirma:
+
+$5
+
+Ining pankumpirmang koda mapalso sa $4.',
+'confirmemail_invalidated' => 'An e-surat na adres na pankumpirma kanselado na',
+'invalidateemail' => 'Kanselaron an e-surat na pankumpirmasyon',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Pigpopogolan an transcluding na Interwiki]',
-'scarytranscludefailed' => '[Nabigô an pagkua kan templato para sa $1; despensa]',
-'scarytranscludetoolong' => '[halabaon an URL; despensa]',
+'scarytranscludefailed' => '[Templatong panakdo nagpalya para sa $1]',
+'scarytranscludetoolong' => '[An kilyawan grabe kahalaba]',
 
 # Delete conflict
-'deletedwhileediting' => 'Patanid: Pigparâ na an pahinang ini antes na nagpoon kan maghirá!',
+'deletedwhileediting' => "'''Patanid tabi''': Ining pahina pinagpura matapos na ika nagpoon na magliliwat!",
 'confirmrecreate' => "Si [[User:$1|$1]] ([[User talk:$1|olay]]) pigparâ ining páhina pagkatapos mong magpoon kan paghira ta:
 : ''$2''
 Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
+'confirmrecreate-noreason' => 'Paragamit [[User:$1|$1]] ([[User talk:$1|Olay]]) an nagpura kaining pahina matapos na ika nagpoon na magliliwat. Pakikumpirma tabi na ika boot na muknaon otro ining pahina.',
 'recreate' => 'Gibohón giraray',
 
 # action=purge
 'confirm_purge_button' => 'Sige',
 'confirm-purge-top' => 'Halîon an an aliho kaining páhina?',
+'confirm-purge-bottom' => 'Pagpupurga nin sarong pahina minalinig kan sarayan asin minapuwersa sa pinakahuring rebisyon na magtunga.',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'OK tabi',
+'confirm-watch-top' => 'Idadagdag ining pahina sa saimong bantay-listahan?',
+'confirm-unwatch-button' => 'OK tabi',
+'confirm-unwatch-top' => 'Haleon ining pahina gikan sa saimong bantay-listahan?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← nakaaging pahina',
 'imgmultipagenext' => 'sunod na pahina →',
 'imgmultigo' => 'Dumanán!',
+'imgmultigoto' => 'Magpasiring sa pahina $1',
 
 # Table pager
 'ascending_abbrev' => 'skt',
@@ -2904,14 +3298,15 @@ Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
 'table_pager_first' => 'Enot na páhina',
 'table_pager_last' => 'Huring páhina',
 'table_pager_limit' => 'Ipahiling an $1 na aytem kada páhina',
+'table_pager_limit_label' => 'Mga aytem kada pahina:',
 'table_pager_limit_submit' => 'Dumanán',
 'table_pager_empty' => 'Mayong resulta',
 
 # Auto-summaries
-'autosumm-blank' => 'Pighahalî an gabos na laog sa páhina',
+'autosumm-blank' => 'Pinagblangko an pahina',
 'autosumm-replace' => "Pigriribayan an páhina nin '$1'",
 'autoredircomment' => 'Piglilikay sa [[$1]]',
-'autosumm-new' => 'Bâgong páhina: $1',
+'autosumm-new' => 'Pinagmukna an pahina kaining "$1"',
 
 # Live preview
 'livepreview-loading' => 'Pigkakarga…',
@@ -2920,16 +3315,17 @@ Ikonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
 'livepreview-error' => 'Dai nakakabit: $1 "$2". Hilingón tabî an normal na patânaw.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'An mga pagbalyó na mas bâgo sa $1 na segundo pwedeng dai pa mahiling sa listang ini.',
-'lag-warn-high' => "Nin huli sa ''high database server lag'', an mga pagbabâgo na mas bâgo sa $1 na segundo pwedeng dai pa ipahiling sa listang ini.",
+'lag-warn-normal' => 'Mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.',
+'lag-warn-high' => 'Nin huli sa halangkawon na kaabalahan sa serbidor kan datos-sarayan, mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'An saimong pigbabantayan igwang {{PLURAL:$1|1 titulo|$1 mga titulo}}, apwera kan mga páhina kan olay.',
 'watchlistedit-noitems' => 'Mayong mga titulo an pigbabantayan mo.',
 'watchlistedit-normal-title' => 'Hirahón an pigbabantayan',
 'watchlistedit-normal-legend' => 'Halion an mga titulo sa pigbabantayan',
-'watchlistedit-normal-explain' => 'Mahihiling sa babâ an mga titulo na nasa pigbabantayan mo.
-Tangarig maghalì nin titulo, markahan an kahon sa gilid kaini, dangan pindotón an Tangkasón an mga Titulo. Pwede mo man na [[Special:EditWatchlist/raw|hirahón an bàgong lista]].',
+'watchlistedit-normal-explain' => 'Mga sa saimong bantay-listahan ipinapahiling sa ibaba.
+Sa paghali nin sarong titutlo, -tsek an kahon kasunod kaini, asin i-klik an "{{int:Watchlistedit-normal-submit}}".
+Puwede ka man na [[Special:EditWatchlist/raw|magliwat kan temporaryong listahan]].',
 'watchlistedit-normal-submit' => 'Tangkasón an mga Titulo',
 'watchlistedit-normal-done' => 'Pigtangkas an {{PLURAL:$1|1 an titulo|$1 mga titulo}} sa saimong pigbabantayan:',
 'watchlistedit-raw-title' => 'Hirahón an bàgong pigbabantayan',
@@ -2949,20 +3345,139 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'watchlisttools-edit' => 'Hilingón asin ligwatón an pigbabantayan',
 'watchlisttools-raw' => 'Hirahón an bàgong pigbabantayan',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])',
+
+# Core parser functions
+'unknown_extension_tag' => 'Bakong bistadong ekstensyon nin pagmarka "$1"',
+'duplicate-defaultsort' => '\'\'\'Patanid tabi:\'\'\' An susing panugmad kan salansan na "$2" minasalimbaw sa dating susing panugmad kan salansan na "$1".',
+
 # Special:Version
 'version' => 'Bersyon',
+'version-extensions' => 'Instaladong mga ekstensyon',
+'version-specialpages' => 'Espesyal na mga pahina',
+'version-parserhooks' => 'Mga pangawil kan parser',
+'version-variables' => 'Mga kabalanggayahan',
+'version-antispam' => 'Pan-spam na pangataman',
+'version-skins' => 'Mga kublit',
+'version-other' => 'An iba pa',
+'version-mediahandlers' => 'Mga Midyang Tagakapot',
+'version-hooks' => 'Mga pangawil',
+'version-extension-functions' => 'Mga punksyon kan ekstensyon',
+'version-parser-extensiontags' => 'Mga ekstensyong panmarka kan Parser',
+'version-parser-function-hooks' => 'Mga panpunksyong pangawil kan Parser',
+'version-hook-name' => 'Ngaran kan pangawil',
+'version-hook-subscribedby' => 'Pinaghaguhot ni',
+'version-version' => '(Bersyon na $1)',
+'version-license' => 'Lisensiya',
+'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-others' => 'mga iba pa',
+'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.
+
+Ika dapat na nakapagresibe na kan [{{SERVER}}{{SCRIPTPATH}}/COPYING sarong kopya nin HNU Heneral na Pampublikong Lisensiya] na kaiba kaining programa; kun dae, surati an Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o baya [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online ining basahon].',
+'version-software' => 'Instalyadong kasungatan',
+'version-software-product' => 'Produkto',
+'version-software-version' => 'Bersyon',
+'version-entrypoints' => 'Puntong pan-entrada sa mga kilyawan',
+'version-entrypoints-header-entrypoint' => 'Puntong pan-entrada',
+'version-entrypoints-header-url' => 'Kilyawan',
+
+# Special:FilePath
+'filepath' => 'Pansagunsong agihan',
+'filepath-page' => 'Sagunson:',
+'filepath-submit' => 'Magduman',
+'filepath-summary' => 'Ining espesyal na pahina minapabalik kan kumpletong agihan para sa sarong sagunson.
+Mga imahe ipinapahiling sa bilog na resolusyon, an iba pang tipo nin mga sagunson pinagpapoon nin direkta kan saindang asosyadong programa.',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Maghanap kan duplikadong mga sagunson',
+'fileduplicatesearch-summary' => 'Maghanap kan duplikadong mga sagunson na pinagbasihan an mga kahalagahan nin hash.',
+'fileduplicatesearch-legend' => 'Maghanap kan sarong duplikado',
+'fileduplicatesearch-filename' => 'Ngaran nin sagunson:',
+'fileduplicatesearch-submit' => 'Maghanap',
+'fileduplicatesearch-info' => '$1 × $2 piksel<br />Sukol nin sagunson: $3<br />MIME tipo: $4',
+'fileduplicatesearch-result-1' => 'An sagunson "$1" mayo nin kaparehong duplikasyon.',
+'fileduplicatesearch-result-n' => 'An sagunson "$1" igwa nin {{PLURAL:$2|1 kaparehong duplikasyon|$2 mga kaparehong duplikasyon}}.',
+'fileduplicatesearch-noresults' => 'Mayong sagunson na pinagngaranan na "$1" an nanagboan.',
 
 # Special:SpecialPages
 'specialpages' => 'Mga espesyal na pahina',
+'specialpages-note' => '----
+* Normal espesyal na mga pahina.
+* <span class="mw-specialpagerestricted">Restriktadong espesyal na mga pahina.</span>',
+'specialpages-group-maintenance' => 'Mga talaan nin pagpangataman',
 'specialpages-group-other' => 'Iba pang mga espesyal na pahina',
-'specialpages-group-login' => 'Maglaóg/ maggíbo',
+'specialpages-group-login' => 'Maglaog / magmukna nin panindog',
 'specialpages-group-changes' => 'Nakakaági pa sanáng mga pagbàgo asín laóg',
+'specialpages-group-media' => 'Mga talaan sa midya asin mga ikinarga',
+'specialpages-group-users' => 'Mga paragamit asin mga karapatan',
+'specialpages-group-highuse' => 'Halangkawong gamit na mga pahina',
+'specialpages-group-pages' => 'Mga listahan kan mga pahina',
+'specialpages-group-pagetools' => 'Mga kagamitan sa pahina',
+'specialpages-group-wiki' => 'Wiking datos asin mga kagamitan',
+'specialpages-group-redirects' => 'Panukdo sa espesyal na mga pahina',
+'specialpages-group-spam' => 'Pan-spam na mga kagamitan',
 
 # Special:BlankPage
 'blankpage' => 'Blangkong pahina',
 'intentionallyblankpage' => 'Pigtuyong blangko an pahinang ini',
 
+# External image whitelist
+'external_image_whitelist' => '#Bayai ining linya eksaktong siring man sana kaini<pre>
+#Magkaag nin regular na mga panambitong parasa (idto sanang parte na minauyon sa tahaw kan //) na yaon sa ibaba
+#An mga ini paglalangkapon kaiba an mga kilyawan kan panluwas (hotlinked) na mga imahe
+#Idtong nagkaralangkap ipagpapahiling bilang mga imahe, o baya an sarong sugpon sana pasiring sa imahe an ipagpapahiling
+#Mga linya na nagpopoon sa # pagtatrataron bilang mga komento
+#Ini baya bakong sensitibo sa tipahan
+
+#Ikaag an gabos na parasang regex sa ibabaw kaining linya. Bayai ining linya eksaktong siring man sana kaini.</pre>',
+
 # Special:Tags
+'tags' => 'Balidong mga marka nin kaliwatan',
+'tag-filter' => '[[Special:Tags|Tag]] saraon:',
+'tag-filter-submit' => 'Saraan',
+'tags-title' => 'Mga marka',
+'tags-intro' => 'Ining pahina minalista kan mga marka na an kasungatan mapuwedeng maimarka an pagliwat kaini, asin an saindang mga kahulugan.',
+'tags-tag' => 'Ngarang panmarka',
+'tags-display-header' => 'Kinaluwasan sa listahan nin kaliwatan',
+'tags-description-header' => 'Bilog na deskripsyon nin kahulugan',
+'tags-hitcount-header' => 'Pinagmarkahan na mga kaliwatan',
 'tags-edit' => 'liwatón',
+'tags-hitcount' => '$1 {{PLURAL:$1|kaliwatan|mga kaliwatan}}',
+
+# Special:ComparePages
+'comparepages' => 'Ikumpara an mga pahina',
+'compare-selector' => 'Ikumpara an mga rebisyon nin pahina',
+'compare-page1' => 'Pahina 1',
+'compare-page2' => 'Pahina 2',
+'compare-rev1' => 'Rebisyon 1',
+'compare-rev2' => 'Rebisyon 2',
+'compare-submit' => 'Ikumpara',
+'compare-invalid-title' => 'An titulo na saimong pinagsambit sarong imbalido.',
+'compare-title-not-exists' => 'An titulo na saimong pinagsambit bakong eksistido.',
+'compare-revision-not-exists' => 'An rebisyon na saimong pinagsambit bakong eksistido.',
+
+# Database error messages
+'dberr-header' => 'Ining wiki igwa nin sarong problema',
+'dberr-problems' => 'Sori!
+Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
+'dberr-again' => 'Prubaring maghalat tabi nin nagkapirang minutos asin otrohon ikarga.',
+'dberr-info' => '(Dae makakontak sa serbidor kan datos-sarayan: $1)',
+'dberr-usegoogle' => 'Ika puwedeng magprubar na maghanap sa Google nguna.',
+'dberr-outofdate' => 'Pasinon mo tabi na an saindang mga indekso kan satuyang laog puwedeng luwas na sa petsa.',
+'dberr-cachederror' => 'Ini sarong nakasaray na kopya kan pinaghahagad na pahina, asin puwedeng bakong angat sa petsa.',
+
+# HTML forms
+'htmlform-invalid-input' => 'Igwa nin mga problema an iba sa saimong pinaglaog',
+'htmlform-select-badoption' => 'An halaga na saimong pinagsambit bakong saro sa balidong pagpipilian.',
+'htmlform-int-invalid' => 'An halaga na saimong pinagsambit bako na sarong integer.',
+'htmlform-float-invalid' => 'An halaga na saimong pinagsamit bako na sarong numero.',
+'htmlform-int-toolow' => 'An halaga na saimong pinagsambit hababaon sa minimum na $1',
+'htmlform-int-toohigh' => 'An halaga na saimong pinagsambit halangkawon sa maksimum na $1',
+'htmlform-required' => 'Ining halaga pinaghahagad',
+'htmlform-submit' => 'Sumitiron',
+'htmlform-reset' => 'Dae idagos an mga kaliwatan',
 
 );
index 9064910..6e6e678 100644 (file)
@@ -68,14 +68,14 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'img_thumbnail'           => array( '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'міні=$1', 'мініяцюра=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'справа', 'right' ),
-       'img_left'                => array( '1', 'злева', 'left' ),
-       'img_none'                => array( '1', 'няма', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'цэнтр', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'безрамкі', 'framed', 'enframed', 'frame' ),
+       'img_thumbnail'             => array( '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'міні=$1', 'мініяцюра=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'злева', 'left' ),
+       'img_none'                  => array( '1', 'няма', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'цэнтр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'безрамкі', 'framed', 'enframed', 'frame' ),
 );
 
 # Per discussion on http://translatewiki.net/wiki/Thread:Support/Customization_of number format
@@ -481,7 +481,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Вы выйшлі з сістэмы.'''
 
-Можна працягваць працу на {{SITENAME}} ананімна, або можна [[Special:UserLogin|ўвайсці ў сістэму ізноў]], пад тым самым або пад іншым удзельніцкім імем. Заўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
+Можна працягваць працу на {{SITENAME}} ананімна, або можна <span class='plainlinks'>[$1 ўвайсці ў сістэму ізноў]</span>, пад тым самым або пад іншым удзельніцкім імем. Заўважце, што некаторыя старонкі могуць паказвацца так, быццам вы яшчэ не выйшлі; у такім разе трэба ачысціць кэш вашага браўзера.",
 'welcomecreation' => '== Вітаем, $1! == Ваш  рахунак быў створаны. Не забудзьцеся дапасаваць свае [[Special:Preferences|{{SITENAME}} настáўленні]].',
 'yourname' => 'Імя ўдзельніка',
 'yourpassword' => 'Пароль',
@@ -1052,8 +1052,6 @@ $1",
 'search-interwiki-caption' => 'Сумежныя праекты',
 'search-interwiki-default' => 'вынікі з $1:',
 'search-interwiki-more' => '(яшчэ)',
-'search-mwsuggest-enabled' => 'з прапановамі',
-'search-mwsuggest-disabled' => 'без прапановаў',
 'search-relatedarticle' => 'Дачыняюцца*',
 'mwsuggest-disable' => 'Не паказваць прапановаў AJAX',
 'searcheverything-enable' => 'Пошук ва ўсіх прасторах назваў',
@@ -2605,7 +2603,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-тэсты',
-'javascripttest-disabled' => 'Гэта функцыя выключаная.',
 'javascripttest-title' => 'Праводзіцца тэставанне $1',
 'javascripttest-pagetext-noframework' => 'Гэта старонка зарэзервавана для запуску тэстаў JavaScript',
 'javascripttest-pagetext-unknownframework' => 'Невядомая бібліятэка тэставання «$1».',
@@ -3551,6 +3548,10 @@ MediaWiki распаўсюджваецца, спадзеючыся на прыд
 'feedback-bugcheck' => 'Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.',
 'feedback-bugnew' => 'Я праверыў. Паведаміць пра новую памылку',
 
+# Search suggestions
+'searchsuggest-search' => 'Знайсці',
+'searchsuggest-containing' => 'змяшчае...',
+
 # API errors
 'api-error-badaccess-groups' => 'У Вас няма дазволу загружаць файлы ў гэтую вікі.',
 'api-error-badtoken' => 'Унутраная памылка: няслушны ключ.',
index 35efe99..51dd768 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Belarusian (Taraškievica orthography) (‪беларуская (тарашкевіца)‬)
+/** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -39,121 +39,121 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#перанакіраваньне', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЯЗЬ_ЗЬМЕСТУ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЭІ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ЗЬМЕСТ_ПРЫМУСАМ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЗЬМЕСТ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЭДАГАВАНЬНЯ_СЭКЦЫІ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'БЯГУЧЫ_МЕСЯЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА_Ў_РОДНЫМ_СКЛОНЕ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'СКАРОЧАНАЯ_НАЗВА_БЯГУЧАГА_МЕСЯЦА', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'БЯГУЧЫ_ДЗЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'БЯГУЧЫ_ДЗЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'НАЗВА_БЯГУЧАГА_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'БЯГУЧЫ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'БЯГУЧЫ_ЧАС', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'БЯГУЧАЯ_ГАДЗІНА', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ЛЯКАЛЬНЫ_МЕСЯЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА_Ў_РОДНЫМ_СКЛОНЕ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'СКАРОЧАНАЯ_НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_ДНЯ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ЛЯКАЛЬНЫ_ГОД', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ЛЯКАЛЬНЫ_ЧАС', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ЛЯКАЛЬНАЯ_ГАДЗІНА', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'КОЛЬКАСЬЦЬ_АРТЫКУЛАЎ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'КОЛЬКАСЬЦЬ_ФАЙЛАЎ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'КОЛЬКАСЬЦЬ_АКТЫЎНЫХ_УДЗЕЛЬНІКАЎ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'КОЛЬКАСЬЦЬ_РЭДАГАВАНЬНЯЎ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'КОЛЬКАСЬЦЬ_ПРАГЛЯДАЎ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'НАЗВА_СТАРОНКІ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВА_СТАРОНКІ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРАСТОРА_НАЗВАЎ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ_2', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВА_ПАДСТАРОНКІ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВА_ПАДСТАРОНКІ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ_2', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ПАВЕДАМЛЕНЬНЕ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ПАДСТАНОЎКА:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'ПАВЕДАМЛЕНЬНЕ_БЯЗЬ_ВІКІ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'значак', 'міні', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'значак=$1', 'міні=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'справа', 'right' ),
-       'img_left'                => array( '1', 'зьлева', 'left' ),
-       'img_none'                => array( '1', 'няма', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'цэнтар', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'рамка', 'framed', 'enframed', 'frame' ),
-       'img_page'                => array( '1', 'старонка=$1', 'старонка $1', 'page=$1', 'page $1' ),
-       'img_top'                 => array( '1', 'зьверху', 'top' ),
-       'img_middle'              => array( '1', 'пасярэдзіне', 'middle' ),
-       'img_bottom'              => array( '1', 'зьнізу', 'bottom' ),
-       'img_link'                => array( '1', 'спасылка=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'НАЗВА_САЙТУ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ПН:', 'NS:' ),
-       'localurl'                => array( '0', 'ЛЯКАЛЬНЫ_АДРАС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛЯКАЛЬНЫ_АДРАС_2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЭРВЭР', 'SERVER' ),
-       'servername'              => array( '0', 'НАЗВА_СЭРВЭРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ШЛЯХ_ДА_СКРЫПТА', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТЫКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__НЕ_КАНВЭРТАВАЦЬ_НАЗВУ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__НЕ_КАНВЭРТАВАЦЬ_ТЭКСТ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'БЯГУЧЫ_ТЫДЗЕНЬ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'БЯГУЧЫ_ДЗЕНЬ_ТЫДНЯ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ЛЯКАЛЬНЫ_ТЫДЗЕНЬ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ_ТЫДНЯ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ID_ВЭРСІІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЗЕНЬ_ВЭРСІІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЗЕНЬ_ВЭРСІІ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЯЦ_ВЭРСІІ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ГОД_ВЭРСІІ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'МОМАНТ_ЧАСУ_ВЭРСІІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'МНОЖНЫ_ЛІК:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПОЎНЫ_АДРАС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПОЎНЫ_АДРАС_2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ПЕРШАЯ_ЛІТАРА_МАЛАЯ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ПЕРШАЯ_ЛІТАРА_ВЯЛІКАЯ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'МАЛЫМІ_ЛІТАРАМІ:', 'LC:' ),
-       'uc'                      => array( '0', 'ВЯЛІКІМІ_ЛІТАРАМІ:', 'UC:' ),
-       'raw'                     => array( '0', 'НЕАПРАЦАВАНЫ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПАКАЗВАЦЬ_НАЗВУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Н', 'R' ),
-       'newsectionlink'          => array( '1', '__СПАСЫЛКА_НА_НОВУЮ_СЭКЦЫЮ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'БЯГУЧАЯ_ВЭРСІЯ', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'МОМАНТ_ЧАСУ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ЛЯКАЛЬНЫ_МОМАНТ_ЧАСУ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'СЫМБАЛЬ_НАПРАМКУ_ПІСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#МОВА:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'МОВА_ЗЬМЕСТУ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК_У_ПРАСТОРЫ_НАЗВАЎ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'КОЛЬКАСЬЦЬ_АДМІНІСТРАТАРАЎ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ФАРМАТАВАЦЬ_ЛІК', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'САРТЫРОЎКА_ПА_ЗМОЎЧВАНЬНІ:', 'КЛЮЧ_САРТЫРОЎКІ_ПА_ЗМОЎЧВАНЬНІ:', 'САРТЫРОЎКА_Ў_КАТЭГОРЫІ_ПА_ЗМОЎЧВАНЬНІ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ШЛЯХ_ДА_ФАЙЛА:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'тэг', 'tag' ),
-       'hiddencat'               => array( '1', '__СХАВАЦЬ_КАТЭГОРЫЮ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК_У_КАТЭГОРЫІ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ПАМЕР_СТАРОНКІ', 'PAGESIZE' ),
-       'staticredirect'          => array( '1', '__СТАТЫЧНАЕ_ПЕРАНАКІРАВАНЬНЕ__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#перанакіраваньне', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЯЗЬ_ЗЬМЕСТУ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЭІ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ЗЬМЕСТ_ПРЫМУСАМ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЗЬМЕСТ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЭДАГАВАНЬНЯ_СЭКЦЫІ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'БЯГУЧЫ_МЕСЯЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА_Ў_РОДНЫМ_СКЛОНЕ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'СКАРОЧАНАЯ_НАЗВА_БЯГУЧАГА_МЕСЯЦА', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'БЯГУЧЫ_ДЗЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'БЯГУЧЫ_ДЗЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'НАЗВА_БЯГУЧАГА_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'БЯГУЧЫ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'БЯГУЧЫ_ЧАС', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'БЯГУЧАЯ_ГАДЗІНА', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ЛЯКАЛЬНЫ_МЕСЯЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА_Ў_РОДНЫМ_СКЛОНЕ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'СКАРОЧАНАЯ_НАЗВА_ЛЯКАЛЬНАГА_МЕСЯЦА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'НАЗВА_ЛЯКАЛЬНАГА_ДНЯ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ЛЯКАЛЬНЫ_ГОД', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ЛЯКАЛЬНЫ_ЧАС', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ЛЯКАЛЬНАЯ_ГАДЗІНА', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'КОЛЬКАСЬЦЬ_АРТЫКУЛАЎ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'КОЛЬКАСЬЦЬ_ФАЙЛАЎ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'КОЛЬКАСЬЦЬ_АКТЫЎНЫХ_УДЗЕЛЬНІКАЎ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'КОЛЬКАСЬЦЬ_РЭДАГАВАНЬНЯЎ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'КОЛЬКАСЬЦЬ_ПРАГЛЯДАЎ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'НАЗВА_СТАРОНКІ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВА_СТАРОНКІ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРАСТОРА_НАЗВАЎ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРАСТОРА_НАЗВАЎ_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ_2', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВА_ПАДСТАРОНКІ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВА_ПАДСТАРОНКІ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ_2', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ПАВЕДАМЛЕНЬНЕ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ПАДСТАНОЎКА:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'ПАВЕДАМЛЕНЬНЕ_БЯЗЬ_ВІКІ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'значак', 'міні', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'значак=$1', 'міні=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'зьлева', 'left' ),
+       'img_none'                  => array( '1', 'няма', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'цэнтар', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'рамка', 'framed', 'enframed', 'frame' ),
+       'img_page'                  => array( '1', 'старонка=$1', 'старонка $1', 'page=$1', 'page $1' ),
+       'img_top'                   => array( '1', 'зьверху', 'top' ),
+       'img_middle'                => array( '1', 'пасярэдзіне', 'middle' ),
+       'img_bottom'                => array( '1', 'зьнізу', 'bottom' ),
+       'img_link'                  => array( '1', 'спасылка=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'НАЗВА_САЙТУ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ПН:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЛЯКАЛЬНЫ_АДРАС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛЯКАЛЬНЫ_АДРАС_2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЭРВЭР', 'SERVER' ),
+       'servername'                => array( '0', 'НАЗВА_СЭРВЭРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ШЛЯХ_ДА_СКРЫПТА', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТЫКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__НЕ_КАНВЭРТАВАЦЬ_НАЗВУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__НЕ_КАНВЭРТАВАЦЬ_ТЭКСТ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'БЯГУЧЫ_ТЫДЗЕНЬ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'БЯГУЧЫ_ДЗЕНЬ_ТЫДНЯ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ЛЯКАЛЬНЫ_ТЫДЗЕНЬ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ЛЯКАЛЬНЫ_ДЗЕНЬ_ТЫДНЯ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ID_ВЭРСІІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЗЕНЬ_ВЭРСІІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЗЕНЬ_ВЭРСІІ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЯЦ_ВЭРСІІ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ГОД_ВЭРСІІ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'МОМАНТ_ЧАСУ_ВЭРСІІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'МНОЖНЫ_ЛІК:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПОЎНЫ_АДРАС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОЎНЫ_АДРАС_2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ПЕРШАЯ_ЛІТАРА_МАЛАЯ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ПЕРШАЯ_ЛІТАРА_ВЯЛІКАЯ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'МАЛЫМІ_ЛІТАРАМІ:', 'LC:' ),
+       'uc'                        => array( '0', 'ВЯЛІКІМІ_ЛІТАРАМІ:', 'UC:' ),
+       'raw'                       => array( '0', 'НЕАПРАЦАВАНЫ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПАКАЗВАЦЬ_НАЗВУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Н', 'R' ),
+       'newsectionlink'            => array( '1', '__СПАСЫЛКА_НА_НОВУЮ_СЭКЦЫЮ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'БЯГУЧАЯ_ВЭРСІЯ', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'МОМАНТ_ЧАСУ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ЛЯКАЛЬНЫ_МОМАНТ_ЧАСУ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'СЫМБАЛЬ_НАПРАМКУ_ПІСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#МОВА:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'МОВА_ЗЬМЕСТУ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК_У_ПРАСТОРЫ_НАЗВАЎ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'КОЛЬКАСЬЦЬ_АДМІНІСТРАТАРАЎ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ФАРМАТАВАЦЬ_ЛІК', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'САРТЫРОЎКА_ПА_ЗМОЎЧВАНЬНІ:', 'КЛЮЧ_САРТЫРОЎКІ_ПА_ЗМОЎЧВАНЬНІ:', 'САРТЫРОЎКА_Ў_КАТЭГОРЫІ_ПА_ЗМОЎЧВАНЬНІ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ШЛЯХ_ДА_ФАЙЛА:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'тэг', 'tag' ),
+       'hiddencat'                 => array( '1', '__СХАВАЦЬ_КАТЭГОРЫЮ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'КОЛЬКАСЬЦЬ_СТАРОНАК_У_КАТЭГОРЫІ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ПАМЕР_СТАРОНКІ', 'PAGESIZE' ),
+       'staticredirect'            => array( '1', '__СТАТЫЧНАЕ_ПЕРАНАКІРАВАНЬНЕ__', '__STATICREDIRECT__' ),
 );
 
 $namespaceNames = array(
@@ -259,7 +259,7 @@ $messages = array(
 'tog-justify' => 'Выраўноўваць тэкст па шырыні старонкі',
 'tog-hideminor' => 'Хаваць дробныя зьмены ў сьпісе апошніх зьменаў',
 'tog-hidepatrolled' => 'Хаваць патруляваныя зьмены ў сьпісе апошніх зьменаў',
-'tog-newpageshidepatrolled' => 'Хаваць правераныя старонкі ў сьпісе новых старонак',
+'tog-newpageshidepatrolled' => 'Хаваць патруляваныя старонкі ў сьпісе новых старонак',
 'tog-extendwatchlist' => 'Пашырыць сьпіс назіраньня, каб ён паказваў усе зьмены, а ня толькі апошнія',
 'tog-usenewrc' => 'Групаваць зьмены старонкі ў сьпісах апошніх зьменаў і назіраньняў (патрабуе JavaScript)',
 'tog-numberheadings' => 'Аўтаматычная нумарацыя загалоўкаў',
@@ -267,11 +267,11 @@ $messages = array(
 'tog-editondblclick' => 'Рэдагаваць старонкі па падвойным пстрыку (JavaScript)',
 'tog-editsection' => 'Дазволіць рэдагаваньне асобных сэкцыяў па спасылках [рэдагаваць]',
 'tog-editsectiononrightclick' => 'Рэдагаваць сэкцыі па правым пстрыку на загалоўку (патрабуе JavaScript)',
-'tog-showtoc' => 'Ð\9fаказваÑ\86Ñ\8c Ð·Ñ\8cмеÑ\81Ñ\82 (длÑ\8f Ñ\81Ñ\82аÑ\80онак Ð· ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\8cÑ\86Ñ\8e Ñ\81Ñ\8dкÑ\86Ñ\8bй Ð±Ð¾Ð»ÐµÐ¹ Ð·Ð° 3)',
+'tog-showtoc' => 'Ð\9fаказваÑ\86Ñ\8c Ð·Ñ\8cмеÑ\81Ñ\82 (длÑ\8f Ñ\81Ñ\82аÑ\80онак Ð· Ð±Ð¾Ð»Ñ\8cÑ\88 Ñ\8fк 3 Ñ\80азÑ\8cдзеламÑ\96)',
 'tog-rememberpassword' => 'Запомніць мяне ў гэтым браўзэры (ня больш за $1 {{PLURAL:$1|дзень|дні|дзён}})',
-'tog-watchcreations' => 'Дадаваць у мой сьпіс назіраньня створаныя мной старонкі і загружаныя мной файлы',
-'tog-watchdefault' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы якія я рэдагаваў',
-'tog-watchmoves' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы якія я пераносіў',
+'tog-watchcreations' => 'Дадаваць у мой сьпіс назіраньня створаныя мной старонкі і загружаныя файлы',
+'tog-watchdefault' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я рэдагаваў',
+'tog-watchmoves' => 'Дадаваць у мой сьпіс назіраньня перанесеныя мною старонкі і файлы',
 'tog-watchdeletion' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я выдаляю',
 'tog-minordefault' => 'Па змоўчаньні пазначаць усе зьмены дробнымі',
 'tog-previewontop' => 'Паказваць папярэдні прагляд старонкі над полем рэдагаваньня',
@@ -284,18 +284,18 @@ $messages = array(
 '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-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' => 'ХаваÑ\86Ñ\8c Ð¿Ñ\80аÑ\9eкÑ\96 Ð·Ð°Ñ\80Ñ\8dгÑ\96Ñ\81Ñ\82Ñ\80аванÑ\8bÑ\85 Ñ\83дзелÑ\8cнÑ\96каÑ\9e Ñ\96 Ñ\9eдзелÑ\8cнÑ\96Ñ\86 Ñ\83 Ñ\81Ñ\8cпÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f',
+'tog-watchlisthideliu' => 'Хаваць праўкі зарэгістраваных удзельнікаў у сьпісе назіраньня',
 'tog-watchlisthideanons' => 'Хаваць праўкі ананімаў у сьпісе назіраньня',
 'tog-watchlisthidepatrolled' => 'Хаваць патруляваныя праўкі ў сьпісе назіраньня',
-'tog-ccmeonemails' => 'Дасылаць мне копіі лістоў, якія я дасылаю іншым удзельнікам і ўдзельніцам',
+'tog-ccmeonemails' => 'Дасылаць мне копіі лістоў, якія я дасылаю іншым удзельнікам',
 'tog-diffonly' => 'Не паказваць зьмест старонкі пад параўнаньнем зьменаў',
 'tog-showhiddencats' => 'Паказваць схаваныя катэгорыі',
 'tog-noconvertlink' => 'Забараніць канвэртацыю назваў спасылак',
@@ -303,12 +303,12 @@ $messages = array(
 
 'underline-always' => 'Заўсёды',
 'underline-never' => 'Ніколі',
-'underline-default' => 'Як Ñ\83 Ð±Ñ\80аÑ\9eзÑ\8dÑ\80Ñ\8b',
+'underline-default' => 'Ð\9fаводле Ð±Ñ\80аÑ\9eзÑ\8dÑ\80а',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Стыль шрыфту ў полі рэдагаваньня:',
-'editfont-default' => 'ШÑ\80Ñ\8bÑ\84Ñ\82 Ð±Ñ\80аÑ\9eзÑ\8dÑ\80а Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87ванÑ\8cнÑ\96',
-'editfont-monospace' => 'ШÑ\80Ñ\8bÑ\84Ñ\82 Ð· Ð°Ð´Ð½Ð¾Ð»Ñ\8cкавай Ñ\88Ñ\8bÑ\80Ñ\8bнÑ\91й Ñ\81Ñ\8bмбалÑ\8fÑ\9e',
+'editfont-default' => 'Ð\9fаводле Ð±Ñ\80аÑ\9eзÑ\8dÑ\80а',
+'editfont-monospace' => 'РоÑ\9eнаÑ\88Ñ\8bÑ\80окÑ\96 Ñ\88Ñ\80Ñ\8bÑ\84Ñ\82',
 'editfont-sansserif' => 'Шрыфт без засечак',
 'editfont-serif' => 'Шрыфт з засечкамі',
 
@@ -351,18 +351,18 @@ $messages = array(
 'october-gen' => 'кастрычніка',
 'november-gen' => 'лістапада',
 'december-gen' => 'сьнежня',
-'jan' => '01',
-'feb' => '02',
-'mar' => '03',
-'apr' => '04',
-'may' => '05',
-'jun' => '06',
-'jul' => '07',
-'aug' => '08',
-'sep' => '09',
-'oct' => '10',
-'nov' => '11',
-'dec' => '12',
+'jan' => 'сту',
+'feb' => 'лют',
+'mar' => 'сак',
+'apr' => 'кра',
+'may' => 'тра',
+'jun' => 'чэр',
+'jul' => 'ліп',
+'aug' => 'жні',
+'sep' => 'вер',
+'oct' => 'кас',
+'nov' => 'ліс',
+'dec' => 'сьн',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Катэгорыя|Катэгорыі|Катэгорыі}}',
@@ -412,7 +412,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' => 'Паказаць гісторыю',
@@ -423,7 +423,7 @@ $messages = array(
 'variants' => 'Варыянты',
 
 'errorpagetitle' => 'Памылка',
-'returnto' => 'Вярнуцца да старонкі $1.',
+'returnto' => 'Вярнуцца да старонкі «$1».',
 'tagline' => 'Зьвесткі з {{GRAMMAR:родны|{{SITENAME}}}}',
 'help' => 'Дапамога',
 'search' => 'Пошук',
@@ -511,7 +511,8 @@ $1',
 'badaccess-groups' => 'Запытанае Вамі дзеяньне дазволенае толькі ўдзельнікам {{PLURAL:$2|з групы|адной з групаў:}} $1.',
 
 'versionrequired' => 'Патрабуецца MediaWiki вэрсіі $1',
-'versionrequiredtext' => 'Для карыстаньня гэтай старонкай патрабуецца MediaWiki вэрсіі $1. Глядзіце [[Special:Version|інфармацыю пра вэрсію]].',
+'versionrequiredtext' => 'Для карыстаньня гэтай старонкай патрабуецца MediaWiki вэрсіі $1.
+Глядзіце [[Special:Version|інфармацыю пра вэрсію]].',
 
 'ok' => 'Добра',
 'pagetitle' => '$1 — {{SITENAME}}',
@@ -632,10 +633,10 @@ $1',
 'protectedpagetext' => 'Рэдагаваньне гэтай старонкі забароненае.',
 'viewsourcetext' => 'Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:',
 'viewyourtext' => "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
-'protectedinterface' => 'Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена.',
+'protectedinterface' => 'Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.',
 'editinginterface' => "'''Увага:''' Вы рэдагуеце старонку, якая ўтрымлівае сыстэмнае паведамленьне MediaWiki.
-Яе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў.
\9aалÑ\96 Ð»Ð°Ñ\81ка, Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eвайÑ\86е [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
+Яе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.
\9aаб Ð´Ð°Ð´Ð°Ñ\86Ñ\8c Ñ\86Ñ\96 Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð¿ÐµÑ\80аклад Ð²Ð° Ñ\9eÑ\81Ñ\96Ñ\85 Ð¿Ñ\80аекÑ\82аÑ\85, Ð·Ñ\8cвÑ\8fÑ\80нÑ\96Ñ\86еÑ\81Ñ\8f Ð½Ð° [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
 'sqlhidden' => '(SQL-запыт схаваны)',
 'cascadeprotected' => 'Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:
 $2',
@@ -661,7 +662,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Вы выйшлі з сыстэмы.'''
 
-Вы можаце працягваць працу ў {{GRAMMAR:месны|{{SITENAME}}}} ананімна, альбо можаце [[Special:UserLogin|ўвайсьці ў сыстэму]] як той жа альбо іншы ўдзельнік.
+Вы можаце працягваць працу ў {{GRAMMAR:месны|{{SITENAME}}}} ананімна, альбо можаце <span class='plainlinks'>[$1 ўвайсьці ў сыстэму]</span> як той жа альбо іншы ўдзельнік.
 Некаторыя старонкі могуць паказвацца, быццам Вы ўсё яшчэ ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
 'welcomecreation' => '== Вітаем, $1! ==
 Ваш рахунак быў створаны.
@@ -913,7 +914,7 @@ $2
 Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэтую назву]] ў іншых старонках, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць у адпаведных журналах падзеяў]
 альбо [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|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}}» не існуе.
 
 Звычайна гэта здараецца з-за перахода па састарэлай спасылцы на старонку, якая была выдаленая.
@@ -1177,7 +1178,9 @@ $1",
 'revdelete-only-restricted' => 'Памылка хаваньня запісаў элемэнтаў $2, $1: Вы ня можаце схаваць запісы ад прагляду адміністратарамі бяз выбару адной зь іншых наладаў хаваньня.',
 'revdelete-reason-dropdown' => '* Агульныя прычыны выдаленьня
 ** Парушэньне аўтарскіх правоў
-** Інфармацыя, якая парушае прыватнасьць',
+** Інфармацыя, якая парушае прыватнасьць
+** Недапушчальнае імя ўдзельніка
+** Патэнцыйна паклёпніцкія зьвесткі',
 'revdelete-otherreason' => 'Іншая/дадатковая прычына:',
 'revdelete-reasonotherlist' => 'Іншая прычына',
 'revdelete-edit-reasonlist' => 'Рэдагаваць прычыны выдаленьня',
@@ -1214,7 +1217,7 @@ $1",
 'mergehistory-reason' => 'Прычына:',
 
 # Merge log
-'mergelog' => "Журнал аб'яднаньняў",
+'mergelog' => 'Журнал аб’яднаньняў',
 'pagemerge-logentry' => 'аб’яднаная [[$1]] ў [[$2]] (гісторыя рэдагаваньняў да $3)',
 'revertmerge' => 'Разьяднаць',
 'mergelogpagetext' => "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
@@ -1276,8 +1279,6 @@ $1",
 'search-interwiki-caption' => 'Сумежныя праекты',
 'search-interwiki-default' => 'вынікі з $1:',
 'search-interwiki-more' => '(яшчэ)',
-'search-mwsuggest-enabled' => 'з парадамі',
-'search-mwsuggest-disabled' => 'без парад',
 'search-relatedarticle' => 'Зьвязаны',
 'mwsuggest-disable' => 'Адключыць AJAX-падказкі',
 'searcheverything-enable' => 'Шукаць ва ўсіх прасторах назваў',
@@ -1374,7 +1375,7 @@ $1",
 'timezoneregion-indian' => 'Індыйскі акіян',
 'timezoneregion-pacific' => 'Ціхі акіян',
 'allowemail' => 'Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц',
-'prefs-searchoptions' => 'Ð\9cагÑ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\96 Ð¿Ð¾Ñ\88Ñ\83кÑ\83',
+'prefs-searchoptions' => 'Ð\9fоÑ\88Ñ\83к',
 'prefs-namespaces' => 'Прасторы назваў',
 'defaultns' => 'Інакш шукаць у наступных прасторах назваў:',
 'default' => 'па змоўчваньні',
@@ -1788,7 +1789,7 @@ $1',
 'backend-fail-internal' => 'Узьнікла невядомая памылка на сэрвэры сховішча «$1».',
 'backend-fail-contenttype' => 'Немагчыма вызначыць тып зьместу файла, які мусіць быць захаваны ў «$1».',
 'backend-fail-batchsize' => 'Cховішча атрымала блёк з $1 {{PLURAL:$1|файлавай апэрацыі|файлавых апэрацыяў|файлавых апэрацыяў}}; абмежаваньне складае $2 {{PLURAL:$2|апэрацыю|апэрацыі|апэрацыяў}}.',
-'backend-fail-usable' => 'Ð\9dе Ð°Ñ\82Ñ\80Ñ\8bмалаÑ\81Ñ\8f Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\84айл $1 з-за недастачы правоў ці адсутнасьці дырэкторыяў або кантэйнэраў.',
+'backend-fail-usable' => 'Ð\9dе Ð°Ñ\82Ñ\80Ñ\8bмалаÑ\81Ñ\8f Ð¿Ñ\80аÑ\87Ñ\8bÑ\82аÑ\86Ñ\8c Ñ\86Ñ\96 Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\84айл Â«$1» з-за недастачы правоў ці адсутнасьці дырэкторыяў або кантэйнэраў.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не атрымалася злучыцца з базай зьвестак журнала для сховішча «$1».',
@@ -2902,7 +2903,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Тэставаньне JavaScript',
-'javascripttest-disabled' => 'Гэтая функцыя не была ўключаная ў гэтай вікі.',
 'javascripttest-title' => 'Праводзіцца тэставаньне $1',
 'javascripttest-pagetext-noframework' => 'Гэтая старонка трымаецца для правядзеньня тэстаў JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Невядомая бібліятэка тэставаньня «$1».',
@@ -3012,10 +3012,31 @@ $1',
 '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-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' => 'Зьвесткі пра старонку',
 
 # Skin names
 'skinname-standard' => 'Клясычнае',
@@ -3068,7 +3089,8 @@ $1',
 'file-info-size' => '$1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3, тып MIME: $4',
 'file-info-size-pages' => '$1 × $2 піксэлаў, памер файла: $3, MIME-тып: $4, $5 {{PLURAL:$5|старонка|старонкі|старонак}}',
 'file-nohires' => 'Няма вэрсіі зь лепшым разрозьненьнем.',
-'svg-long-desc' => 'SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэль|піксэлі|піксэляў}}, памер файла: $3.',
+'svg-long-desc' => 'SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэл|піксэлы|піксэлаў}}, памер файла: $3.',
+'svg-long-desc-animated' => 'Анімаваны SVG-файл, намінальна $1 × $2 {{PLURAL:$2|піксэл|піксэлы|піксэлаў}}, памер файла: $3',
 'show-big-image' => 'Найлепшае разрозьненьне',
 'show-big-image-preview' => 'Памер прагляду: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Іншае разрозьненьне|Іншыя разрозьненьні}}: $1.',
@@ -3078,6 +3100,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' => 'Галерэя новых файлаў',
@@ -3589,6 +3613,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Улучэньне інтэрвікі было адключанае]',
 'scarytranscludefailed' => '[Памылка атрыманьня шаблёну $1]',
+'scarytranscludefailed-httpstatus' => '[Памылка атрыманьня шаблёну $1: HTTP $2]',
 'scarytranscludetoolong' => '[Занадта даўгі URL-адрас]',
 
 # Delete conflict
@@ -3641,6 +3666,11 @@ $5
 'size-kilobytes' => '$1 кб',
 'size-megabytes' => '$1 Мб',
 'size-gigabytes' => '$1 Гб',
+'size-terabytes' => '$1 ТБ',
+'size-petabytes' => '$1 ПБ',
+'size-exabytes' => '$1 ЭБ',
+'size-zetabytes' => '$1 ЗБ',
+'size-yottabytes' => '$1 ЁБ',
 
 # Live preview
 'livepreview-loading' => 'Загрузка…',
@@ -3872,6 +3902,10 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'feedback-bugcheck' => 'Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].',
 'feedback-bugnew' => 'Я праверыў. Гэта новая памылка',
 
+# Search suggestions
+'searchsuggest-search' => 'Пошук',
+'searchsuggest-containing' => 'утрымлівае...',
+
 # API errors
 'api-error-badaccess-groups' => 'У Вас няма дазволу загружаць файлы ў гэтую вікі.',
 'api-error-badtoken' => 'Унутраная памылка: няслушны ключ.',
index 123ba4c..a61b28c 100644 (file)
@@ -58,86 +58,86 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'ТЕКУЩМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ТЕКУЩМЕСЕЦ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ТЕКУЩМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ТЕКУЩМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ТЕКУЩМЕСЕЦСЪКР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ТЕКУЩДЕН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ТЕКУЩДЕН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ТЕКУЩДЕНИМЕ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ТЕКУЩАГОДИНА', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ТЕКУЩОВРЕМЕ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ТЕКУЩЧАС', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'БРОЙСТРАНИЦИ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'БРОЙСТАТИИ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'БРОЙФАЙЛОВЕ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'БРОЙПОТРЕБИТЕЛИ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'БРОЙАКТИВНИПОТРЕБИТЕЛИ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'БРОЙРЕДАКЦИИ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'БРОЙПРЕГЛЕДИ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
-       'fullpagename'            => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'СЪОБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'мини', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'вдясно', 'дясно', 'д', 'right' ),
-       'img_left'                => array( '1', 'вляво', 'ляво', 'л', 'left' ),
-       'img_none'                => array( '1', 'н', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1п', '$1px' ),
-       'img_center'              => array( '1', 'център', 'центр', 'ц', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'рамка', 'врамка', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'безрамка', 'frameless' ),
-       'img_border'              => array( '1', 'ръб', 'контур', 'border' ),
-       'int'                     => array( '0', 'ВЪТР:', 'INT:' ),
-       'sitename'                => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ИП:', 'NS:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЪРВЪР', 'SERVER' ),
-       'servername'              => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
-       'revisionid'              => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПЪЛЕН_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПЪЛЕН_АДРЕСИ:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'МБПЪРВА:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ГБПЪРВА:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'МБ:', 'LC:' ),
-       'uc'                      => array( '0', 'ГБ:', 'UC:' ),
-       'raw'                     => array( '0', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПОКАЗВ_ЗАГЛАВИЕ', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'language'                => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'index'                   => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
+       'redirect'                  => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ТЕКУЩМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ТЕКУЩМЕСЕЦ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ТЕКУЩМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ТЕКУЩМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ТЕКУЩМЕСЕЦСЪКР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ТЕКУЩДЕН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ТЕКУЩДЕН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ТЕКУЩДЕНИМЕ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТЕКУЩАГОДИНА', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТЕКУЩОВРЕМЕ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКУЩЧАС', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'БРОЙСТРАНИЦИ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'БРОЙСТАТИИ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'БРОЙФАЙЛОВЕ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'БРОЙПОТРЕБИТЕЛИ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'БРОЙАКТИВНИПОТРЕБИТЕЛИ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'БРОЙРЕДАКЦИИ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'БРОЙПРЕГЛЕДИ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'СЪОБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'мини', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'вдясно', 'дясно', 'д', 'right' ),
+       'img_left'                  => array( '1', 'вляво', 'ляво', 'л', 'left' ),
+       'img_none'                  => array( '1', 'н', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1п', '$1px' ),
+       'img_center'                => array( '1', 'център', 'центр', 'ц', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'рамка', 'врамка', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безрамка', 'frameless' ),
+       'img_border'                => array( '1', 'ръб', 'контур', 'border' ),
+       'int'                       => array( '0', 'ВЪТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ИП:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЪРВЪР', 'SERVER' ),
+       'servername'                => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
+       'revisionid'                => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПЪЛЕН_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПЪЛЕН_АДРЕСИ:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'МБПЪРВА:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ГБПЪРВА:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'МБ:', 'LC:' ),
+       'uc'                        => array( '0', 'ГБ:', 'UC:' ),
+       'raw'                       => array( '0', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПОКАЗВ_ЗАГЛАВИЕ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'index'                     => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
 );
 
 $specialPageAliases = array(
@@ -558,9 +558,9 @@ $1',
 'dberrortext' => 'Възникна синтактична грешка при заявка към базата данни.
 Това може да означава грешка в софтуера.
 Последната заявка към базата данни беше:
-<blockquote><tt>$1</tt></blockquote>
-при функцията „<tt>$2</tt>“.
-MySQL върна грешка „<tt>$3: $4</tt>“.',
+<blockquote><code>$1</code></blockquote>
+при функцията „<code>$2</code>“.
+Базата от данни върна грешка „<samp>$3: $4</samp>“.',
 'dberrortextcl' => 'Възникна синтактична грешка при заявка към базата данни.
 Последната заявка към базата данни беше:
 „$1“
@@ -635,7 +635,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Излязохте от системата.'''
 
-Можете да продължите да използвате {{SITENAME}} анонимно или да [[Special:UserLogin|влезете отново]] като друг потребител.
+Можете да продължите да използвате {{SITENAME}} анонимно или да <span class='plainlinks'>[$1 влезете отново]</span> като друг потребител.
 Обърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеш-паметта на браузъра.",
 'welcomecreation' => '== Добре дошли, $1! ==
 
@@ -1054,7 +1054,7 @@ $2
 'rev-deleted-text-permission' => "Тази версия на страницата е била '''изтрита'''.
 Допълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].",
 'rev-deleted-text-unhide' => "Тази версия на страницата е била '''изтрита'''.
-Допълнителна информация може се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].
+Допълнителна информация може се съдържа в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].
 Като администратор на сайта вие можете да [$1 прегледате тази редакция], ако желаете да продължите.",
 'rev-suppressed-text-unhide' => "Тази версия на страницата е била '''прикрита'''.
 Допълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на прикриванията].
@@ -1076,7 +1076,7 @@ $2
 ато администратор на сайта, вие можете да [$1 прегледате тази разликова препратка], ако желаете да продължите.",
 'rev-deleted-diff-view' => "Една от версиите на тази разлика е била '''изтрита'''.
 Можете да видите тази разлика; възможно е да има повече информация в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
-'rev-suppressed-diff-view' => "Ð\95дна Ð¾Ñ\82 Ñ\80едакÑ\86ииÑ\82е Ð¾Ñ\82 Ñ\82ази Ñ\80азлика Ð¼ÐµÐ¶Ð´Ñ\83 Ð²ÐµÑ\80Ñ\81ииÑ\82е Ð±ÐµÑ\88е '''прикрита'''.
+'rev-suppressed-diff-view' => "Ð\95дна Ð¾Ñ\82 Ñ\80едакÑ\86ииÑ\82е Ð¾Ñ\82 Ñ\82ази Ñ\80азлика Ð¼ÐµÐ¶Ð´Ñ\83 Ð²ÐµÑ\80Ñ\81ииÑ\82е Ðµ Ð±Ð¸Ð»Ð° '''прикрита'''.
 Като администратор, можете да видите тази разлика; повече подробности има в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневника за прикриванията].",
 'rev-delundel' => 'показване/скриване',
 'rev-showdeleted' => 'показване',
@@ -1146,7 +1146,7 @@ $1",
 # Suppression log
 'suppressionlog' => 'Дневник на прикриванията',
 'suppressionlogtext' => 'По-долу е посочен списък на изтривания и блокирания, свързан със съдържание, скрито от администраторите.
\97а Ñ\82екÑ\83Ñ\89иÑ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8f Ð¸ Ð·Ð°Ð±Ñ\80ани, Ð²Ð¸Ð¶Ñ\82е [[Special:BlockList|Ñ\81пиÑ\81Ñ\8aка Ñ\81 Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\82е IP Ð°Ð´Ñ\80еÑ\81и]].',
\97а Ñ\82екÑ\83Ñ\89иÑ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8f Ð¸ Ð·Ð°Ð±Ñ\80ани, Ð²Ð¸Ð¶Ñ\82е [[Special:BlockList|Ñ\81пиÑ\81Ñ\8aка Ñ\81 Ð±Ð»Ð¾ÐºÐ¸Ñ\80аниÑ\8fÑ\82а]].',
 
 # History merging
 'mergehistory' => 'Сливане на редакционни истории',
@@ -1229,8 +1229,6 @@ $1",
 'search-interwiki-caption' => 'Сродни проекти',
 'search-interwiki-default' => '$1 резултата:',
 'search-interwiki-more' => '(още)',
-'search-mwsuggest-enabled' => 'с предположения',
-'search-mwsuggest-disabled' => 'без предположения',
 'search-relatedarticle' => 'Свързани',
 'mwsuggest-disable' => 'Изключване на AJAX предположенията',
 'searcheverything-enable' => 'Търсене във всички именни пространства',
@@ -1947,6 +1945,7 @@ $1',
 'wantedpages' => 'Желани страници',
 'wantedpages-badtitle' => 'Невалидно заглавие в резултатното множество: $1',
 'wantedfiles' => 'Желани файлове',
+'wantedfiletext-nocat' => 'Следните файлове се използват, но не съществуват. Възможно е да са включени файлове от външни хранилища, въпреки че съществуват. Всички такива случаи на възможна фалшива тревога ще бъдат показвани <del>зачеркнати</del>.',
 'wantedtemplates' => 'Желани шаблони',
 'mostlinked' => 'Най-препращани страници',
 'mostlinkedcategories' => 'Най-препращани категории',
@@ -2749,7 +2748,6 @@ $1',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени',
 
 # JavaScriptTest
-'javascripttest-disabled' => 'Тази функционалност не е активирана в това уики.',
 'javascripttest-pagetext-noframework' => 'Тази страница е запазена за изпълнение на Джаваскрипт тестове.',
 'javascripttest-qunit-intro' => 'Вижте [$1 тестовата документация] на mediawiki.org.',
 
@@ -2852,19 +2850,22 @@ $1',
 'spambot_username' => 'Спамочистач',
 'spam_reverting' => 'Връщане на последната версия, несъдържаща препратки към $1',
 'spam_blanking' => 'Всички версии, съдържащи препратки към $1, изчистване',
+'spam_deleting' => 'Всички версии съдържат препратки към $1, изтриване',
 
 # Info page
 'pageinfo-title' => 'Информация за "$1"',
 'pageinfo-header-basic' => 'Основна информация',
 'pageinfo-header-edits' => 'Редакции',
+'pageinfo-article-id' => 'Номер на страницата',
 'pageinfo-views' => 'Брой прегледи',
-'pageinfo-watchers' => 'Брой наблюдабащи',
+'pageinfo-watchers' => 'Брой наблюдаващи страницата',
+'pageinfo-redirects-name' => 'Пренасочвания към тази страница',
 'pageinfo-subpages-name' => 'Подстраници на тази страница',
 'pageinfo-lastuser' => 'Последeн редактор',
 'pageinfo-lasttime' => 'Дата на последнoто редактиране',
 'pageinfo-edits' => 'Общ брой редакции',
-'pageinfo-authors' => 'Ð\91Ñ\80ой Ð½Ð° Ð¾Ñ\82делни автори',
-'pageinfo-magic-words' => 'Вълшебни думички ($1)',
+'pageinfo-authors' => 'Ð\9eбÑ\89 Ð±Ñ\80ой Ð½Ð° Ð¾Ñ\82делниÑ\82е автори',
+'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Класика',
@@ -3500,6 +3501,8 @@ MediaWiki се разпространява с надеждата, че ще б
 'version-software' => 'Инсталиран софтуер',
 'version-software-product' => 'Продукт',
 'version-software-version' => 'Версия',
+'version-entrypoints' => 'Адреси на входни точки',
+'version-entrypoints-header-entrypoint' => 'Входна точка',
 'version-entrypoints-header-url' => 'Адрес',
 
 # Special:FilePath
@@ -3637,6 +3640,9 @@ MediaWiki се разпространява с надеждата, че ще б
 'feedback-thanks' => 'Благодарности! Вашата обратна информация е публикувана на страницата „[$2  $1]“.',
 'feedback-close' => 'Готово',
 
+# Search suggestions
+'searchsuggest-search' => 'Търсене',
+
 # API errors
 'api-error-badaccess-groups' => 'Нямате необходимите права, за да качвате файлове в това уики.',
 'api-error-badtoken' => 'Вътрешна грешка: неправилен маркер.',
index 577d2e2..4720033 100644 (file)
@@ -422,8 +422,6 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'search-interwiki-caption' => 'बहिन परियोजना',
 'search-interwiki-default' => '$1 के परिणाम:',
 'search-interwiki-more' => '(अउर)',
-'search-mwsuggest-enabled' => 'सुझाव के साथ',
-'search-mwsuggest-disabled' => 'कौनो सुझाव ना',
 'search-relatedarticle' => 'संबंधित',
 'mwsuggest-disable' => 'AJAX सुझाव असक्षम',
 'searcheverything-enable' => 'सभन सन्दर्भ में खोजीं',
index 1e02306..094e2ac 100644 (file)
@@ -459,8 +459,6 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'search-interwiki-caption' => 'बहिन परियोजना',
 'search-interwiki-default' => '$1 के परिणाम:',
 'search-interwiki-more' => '(अउर)',
-'search-mwsuggest-enabled' => 'सुझाव के साथ',
-'search-mwsuggest-disabled' => 'कौनो सुझाव ना',
 'search-relatedarticle' => 'संबंधित',
 'mwsuggest-disable' => 'AJAX सुझाव असक्षम',
 'searcheverything-enable' => 'सभन सन्दर्भ में खोजीं',
index a254380..4b28f49 100644 (file)
 
 $messages = array(
 'underline-always' => 'Oltaem',
-'underline-never'  => 'Neva',
+'underline-never' => 'Neva',
 
 # Dates
-'sunday'        => 'Sande',
-'monday'        => 'Mande',
-'tuesday'       => 'Tusde',
-'wednesday'     => 'Wenesde',
-'thursday'      => 'Tosde',
-'friday'        => 'Fraede',
-'saturday'      => 'Sarede',
-'sun'           => 'San',
-'mon'           => 'Man',
-'tue'           => 'Tu',
-'wed'           => 'Wen',
-'thu'           => 'To',
-'fri'           => 'Frae',
-'sat'           => 'Sar',
-'january'       => 'Januware',
-'february'      => 'Februari',
-'march'         => 'Maj',
-'april'         => 'Epril',
-'may_long'      => 'Mei',
-'june'          => 'Jun',
-'july'          => 'Julae',
-'august'        => 'Ogis',
-'september'     => 'Septemba',
-'october'       => 'Oktoba',
-'november'      => 'Novemba',
-'december'      => 'Desemba',
-'january-gen'   => 'Januware',
-'february-gen'  => 'Februari',
-'march-gen'     => 'Maj',
-'april-gen'     => 'Epril',
-'may-gen'       => 'Mei',
-'june-gen'      => 'Jun',
-'july-gen'      => 'Julae',
-'august-gen'    => 'Ogis',
+'sunday' => 'Sande',
+'monday' => 'Mande',
+'tuesday' => 'Tusde',
+'wednesday' => 'Wenesde',
+'thursday' => 'Tosde',
+'friday' => 'Fraede',
+'saturday' => 'Sarede',
+'sun' => 'San',
+'mon' => 'Man',
+'tue' => 'Tu',
+'wed' => 'Wen',
+'thu' => 'To',
+'fri' => 'Frae',
+'sat' => 'Sar',
+'january' => 'Januware',
+'february' => 'Februari',
+'march' => 'Maj',
+'april' => 'Epril',
+'may_long' => 'Mei',
+'june' => 'Jun',
+'july' => 'Julae',
+'august' => 'Ogis',
+'september' => 'Septemba',
+'october' => 'Oktoba',
+'november' => 'Novemba',
+'december' => 'Desemba',
+'january-gen' => 'Januware',
+'february-gen' => 'Februari',
+'march-gen' => 'Maj',
+'april-gen' => 'Epril',
+'may-gen' => 'Mei',
+'june-gen' => 'Jun',
+'july-gen' => 'Julae',
+'august-gen' => 'Ogis',
 'september-gen' => 'Septemba',
-'october-gen'   => 'Oktoba',
-'november-gen'  => 'Novemba',
-'december-gen'  => 'Desemba',
-'mar'           => 'Maj',
-'apr'           => 'Epr',
-'may'           => 'Mei',
-'aug'           => 'Ogis',
-'oct'           => 'Okt',
-'dec'           => 'Des',
+'october-gen' => 'Oktoba',
+'november-gen' => 'Novemba',
+'december-gen' => 'Desemba',
+'mar' => 'Maj',
+'apr' => 'Epr',
+'may' => 'Mei',
+'aug' => 'Ogis',
+'oct' => 'Okt',
+'dec' => 'Des',
 
 'mypage' => 'Pej blong mi',
 'mytalk' => 'Tingting blong mi',
-'and'    => '&#32;mo',
+'and' => '&#32;mo',
 
 # Cologne Blue skin
-'qbedit'         => 'Jenisim hem',
-'qbpageoptions'  => 'Pej ia',
-'qbmyoptions'    => 'Ol pej blong mi',
+'qbedit' => 'Jenisim hem',
+'qbpageoptions' => 'Pej ia',
+'qbmyoptions' => 'Ol pej blong mi',
 'qbspecialpages' => 'Ol spesel pej',
 
-'edit'             => 'Jenisim hem',
-'newpage'          => 'Mekem niu pej',
+'edit' => 'Jenisim hem',
+'newpage' => 'Mekem niu pej',
 'talkpagelinktext' => 'Toktok',
-'specialpage'      => 'Spesel Pej',
-'talk'             => 'Tingting',
+'specialpage' => 'Spesel Pej',
+'talk' => 'Tingting',
 
 # 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).
-'mainpage'             => 'Nambawan Pej',
+'mainpage' => 'Nambawan Pej',
 'mainpage-description' => 'Nambawan Pej',
 
 'retrievedfrom' => 'Kam long "$1"',
-'editsection'   => 'jenisim hem',
-'editold'       => 'jenisim hem',
+'editsection' => 'jenisim hem',
+'editold' => 'jenisim hem',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'    => 'Atikel',
+'nstab-main' => 'Atikel',
 'nstab-special' => 'Spesel',
 
 # Edit pages
@@ -100,15 +100,15 @@ $messages = array(
 
 # Miscellaneous special pages
 'shortpages' => 'Ol smol pej',
-'longpages'  => 'Ol big pej',
-'newpages'   => 'Ol niu pej',
+'longpages' => 'Ol big pej',
+'newpages' => 'Ol niu pej',
 
 # Special:AllPages
 'allarticles' => 'Olgeta atikel',
 
 # E-mail user
 'emailfrom' => 'Kam long',
-'emailto'   => 'Go long:',
+'emailto' => 'Go long:',
 
 # Contributions
 'year' => 'Yia:',
@@ -120,28 +120,28 @@ $messages = array(
 
 # Move page
 'move-page-legend' => 'Muvum pej',
-'movearticle'      => 'Muvum pej:',
+'movearticle' => 'Muvum pej:',
 
 # Namespace 8 related
 'allmessagesname' => 'Nem',
 
 # Tooltip help for the actions
-'tooltip-pt-mytalk'  => 'Pej blong tingting blong mi',
-'tooltip-p-logo'     => 'Nambawan Pej',
+'tooltip-pt-mytalk' => 'Pej blong tingting blong mi',
+'tooltip-p-logo' => 'Nambawan Pej',
 'tooltip-n-mainpage' => 'Go long Nambawan Pej',
-'tooltip-minoredit'  => 'Em i stap wan smol jenis',
+'tooltip-minoredit' => 'Em i stap wan smol jenis',
 
 # Special:NewFiles
 'showhidebots' => '($1 bot)',
 
 # EXIF tags
-'exif-imagedescription'    => 'Nem blong pikta',
+'exif-imagedescription' => 'Nem blong pikta',
 'exif-exposuretime-format' => '$1 sek. ($2)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'olgeta',
 'namespacesall' => 'olgeta',
-'monthsall'     => 'olgeta',
+'monthsall' => 'olgeta',
 
 # Table pager
 'table_pager_first' => 'Nambawan pej',
index ef3492e..6c1a2bc 100644 (file)
@@ -540,7 +540,7 @@ Administrator nang takunci nintu manawarakan panjalasan: "$3".',
 # Login and logout pages
 'logouttext' => "'''Pian parhatan ni sudah kaluar log.'''
 
-Pian kawa manyambung hagan mangguna'akan {{SITENAME}} kada bangaran, atawa Pian kawa [[Special:UserLogin|babuat log pulang]] sawagai pamakai nang sama atawa sawagai pamakai balain.
+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.
@@ -1148,8 +1148,6 @@ Catatan bahwasa mamuruk tautan napigasi akan mambulikakan setelan kolum ngini.',
 'search-interwiki-caption' => 'Dingsanak rangka gawian',
 'search-interwiki-default' => 'Kulihan $1',
 'search-interwiki-more' => '(lagi)',
-'search-mwsuggest-enabled' => 'awan saran',
-'search-mwsuggest-disabled' => 'kadada saran',
 'search-relatedarticle' => 'Bakulaan',
 'mwsuggest-disable' => "Kada kawa'akan sasaran AJAX",
 'searcheverything-enable' => 'Panggagaian pada samunyaan ngaran kakamar',
@@ -3690,6 +3688,10 @@ Salain ngitu, Pian kawa mamuruk prmulir nyaman di bawah ngini. Kumintar Pian aka
 'feedback-bugcheck' => 'Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].',
 'feedback-bugnew' => 'Ulun mamariksa. Malapurakan sabuah bug hanyar',
 
+# Search suggestions
+'searchsuggest-search' => 'Gagai',
+'searchsuggest-containing' => 'isian ...',
+
 # API errors
 'api-error-missingresult' => 'Kasalahan intarnal: kada kawa manantuakan napakah panyalinan tuntung.',
 'api-error-mustbeloggedin' => 'Pian harus babuat ka log gasan maunggah barakas.',
index 58fe47f..95a0246 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Bambara (Bamanankan)
+/** Bambara (bamanankan)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -18,70 +18,70 @@ $messages = array(
 'tog-hideminor' => 'Yɛlɛmaliw kura fitini dogo',
 
 # Dates
-'sunday'    => 'karidon',
-'monday'    => 'ntɛnɛdon',
-'tuesday'   => 'taratadon',
+'sunday' => 'karidon',
+'monday' => 'ntɛnɛdon',
+'tuesday' => 'taratadon',
 'wednesday' => 'arabadon',
-'thursday'  => 'alamisadon',
-'friday'    => 'jumadon',
-'saturday'  => 'sibiridon',
-'august'    => 'uti',
-'aug'       => 'uti',
+'thursday' => 'alamisadon',
+'friday' => 'jumadon',
+'saturday' => 'sibiridon',
+'august' => 'uti',
+'aug' => 'uti',
 
 # Categories related messages
 'category_header' => 'Nyɛw cogoya kɔnɔ: "$1"',
 
 'article' => 'Nyɛ',
-'mypage'  => "N'ka nyɛ",
-'mytalk'  => "N'ka baronyɛ",
-'and'     => '&#32;ani',
+'mypage' => "N'ka nyɛ",
+'mytalk' => "N'ka baronyɛ",
+'and' => '&#32;ani',
 
 # Cologne Blue skin
-'qbfind'         => 'Nyini',
-'qbedit'         => 'Yɛlɛma',
+'qbfind' => 'Nyini',
+'qbedit' => 'Yɛlɛma',
 'qbspecialpages' => 'Nyɛw kɛrɛnkɛrɛnnen',
 
-'help'           => 'Dɛmɛ',
-'search'         => 'Nyini',
-'searchbutton'   => 'Nyini',
-'go'             => 'Taa',
-'searcharticle'  => 'Taa',
-'history'        => 'Nyɛka tariku',
-'history_short'  => 'Tariku',
-'edit'           => 'yɛlɛma',
-'editthispage'   => 'Nyɛ nin yɛlɛma',
-'newpage'        => 'Nyɛ kura',
-'specialpage'    => 'Nyɛ kɛrɛnkɛrɛnnen',
-'talk'           => 'Sɔsɔli',
-'toolbox'        => 'Minanw',
-'userpage'       => 'Utilisateur ka nyɛ',
-'imagepage'      => 'Janin ka nyɛ',
+'help' => 'Dɛmɛ',
+'search' => 'Nyini',
+'searchbutton' => 'Nyini',
+'go' => 'Taa',
+'searcharticle' => 'Taa',
+'history' => 'Nyɛka tariku',
+'history_short' => 'Tariku',
+'edit' => 'yɛlɛma',
+'editthispage' => 'Nyɛ nin yɛlɛma',
+'newpage' => 'Nyɛ kura',
+'specialpage' => 'Nyɛ kɛrɛnkɛrɛnnen',
+'talk' => 'Sɔsɔli',
+'toolbox' => 'Minanw',
+'userpage' => 'Utilisateur ka nyɛ',
+'imagepage' => 'Janin ka nyɛ',
 'otherlanguages' => 'Kanw wɛrɛ',
-'jumptosearch'   => 'Nyini',
+'jumptosearch' => 'Nyini',
 
 # 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).
-'currentevents'        => 'Kunnafoni',
-'currentevents-url'    => 'Project:Kunnafoni',
-'disclaimers'          => 'Kangari',
-'edithelp'             => 'Dɛmɛ',
-'mainpage'             => 'Nyɛ fɔlɔ',
+'currentevents' => 'Kunnafoni',
+'currentevents-url' => 'Project:Kunnafoni',
+'disclaimers' => 'Kangari',
+'edithelp' => 'Dɛmɛ',
+'mainpage' => 'Nyɛ fɔlɔ',
 'mainpage-description' => 'Nyɛ fɔlɔ',
-'portal'               => 'Jamaje',
+'portal' => 'Jamaje',
 
 'editsection' => 'yɛlɛma',
-'hidetoc'     => 'dogo',
+'hidetoc' => 'dogo',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Nyɛ',
-'nstab-image'    => 'Janin',
-'nstab-help'     => 'Dɛmɛ',
+'nstab-main' => 'Nyɛ',
+'nstab-image' => 'Janin',
+'nstab-help' => 'Dɛmɛ',
 'nstab-category' => 'Cogoya',
 
 # Edit pages
-'minoredit'      => 'Yɛlɛma fitini.',
-'watchthis'      => 'Nyɛ tulomajɔ',
-'newarticle'     => '(Kura)',
-'editing'        => '$1 ka yɛlɛmali',
+'minoredit' => 'Yɛlɛma fitini.',
+'watchthis' => 'Nyɛ tulomajɔ',
+'newarticle' => '(Kura)',
+'editing' => '$1 ka yɛlɛmali',
 'editingsection' => '$1 ka yɛlɛmali (section)',
 'editingcomment' => '$1 ka yɛlɛmali (baro)',
 
@@ -90,7 +90,7 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'Fisayali',
-'prefs-skin'  => 'Apparence',
+'prefs-skin' => 'Apparence',
 
 # Recent changes
 'hide' => 'dogo',
@@ -103,9 +103,9 @@ $messages = array(
 
 # Miscellaneous special pages
 'popularpages' => 'Nyɛw les plus consultées',
-'newpages'     => 'Nyɛw kura',
+'newpages' => 'Nyɛw kura',
 'ancientpages' => 'Nyɛw les plus anciens',
-'move'         => 'telun',
+'move' => 'telun',
 'movethispage' => 'Nyɛ telun',
 
 # Special:AllPages
@@ -118,7 +118,7 @@ $messages = array(
 'linksearch-ok' => 'Nyini',
 
 # Watchlist
-'watch'         => 'Tulomajɔ',
+'watch' => 'Tulomajɔ',
 'watchthispage' => 'Nyɛ tulomajɔ',
 
 # Contributions
@@ -129,8 +129,8 @@ $messages = array(
 
 # Move page
 'move-page-legend' => 'Nyɛ telun',
-'movearticle'      => 'Nyɛ telun',
-'movepagebtn'      => 'Nyɛ telun',
+'movearticle' => 'Nyɛ telun',
+'movepagebtn' => 'Nyɛ telun',
 
 # Attribution
 'others' => 'wɛrɛ',
index fd22a46..c44c9ea 100644 (file)
@@ -75,7 +75,7 @@ $messages = array(
 'tog-hidepatrolled' => 'পরীক্ষিত সম্পাদনা গুলো সাম্প্রতিক পরিবর্তনসমূহে আড়াল করো',
 'tog-newpageshidepatrolled' => 'পরীক্ষিত পাতা গুলো নতুন পাতার তালিকায় আড়াল করো',
 'tog-extendwatchlist' => 'শুধু সাম্প্রতিক পরিবর্তনই নয়, সকল পরিবর্তন দেখতে নজর তালিকা সম্প্রসারণ করুন।',
-'tog-usenewrc' => 'à¦\89নà§\8dনততর à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ à¦¬à§\8dযবহার à¦\95রà§\81ন (জাভাস্ক্রিপ্ট প্রয়োজন)',
+'tog-usenewrc' => 'সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ à¦\8fবà¦\82 à¦¨à¦\9cরতালিà¦\95া à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦\8fà¦\95তà§\8dরà§\87 à¦ªà§\8dরদরà§\8dশন (জাভাস্ক্রিপ্ট প্রয়োজন)',
 'tog-numberheadings' => 'শিরোনামগুলোকে স্বয়ংক্রিয়ভাবে ক্রমাঙ্কিত করা হোক',
 'tog-showtoolbar' => 'সম্পাদনা টুলবার দেখানো হোক (জাভাস্ক্রিপ্ট)',
 'tog-editondblclick' => 'দুইবার ক্লিক করে পাতা সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)',
@@ -83,17 +83,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে <br />পরিচ্ছেদ সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)',
 'tog-showtoc' => 'সূচিপত্র দেখানো হোক (৩টির বেশি পরিচ্ছেদের শিরোনামবিশিষ্ট পাতার জন্য)',
 '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' => 'আমার নজর তালিকায় আছে এমন পাতাে পরিবর্তন হলে তা জানিয়ে আমাকে ই-মেইল করো',
+'tog-enotifwatchlistpages' => 'আমার নজর তালিকায় আছে এমন পাতা অথবা ফাইলে পরিবর্তন হলে তা জানিয়ে আমাকে ই-মেইল করো',
 'tog-enotifusertalkpages' => 'আমার ব্যবহারকারী আলোচনা পাতার পরিবর্তন হলে আমাকে ই-মেইল করা হোক',
-'tog-enotifminoredits' => 'পাতাগুলির অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক',
+'tog-enotifminoredits' => 'পাতা এবং ফাইলগুলোতে অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক',
 'tog-enotifrevealaddr' => 'বিজ্ঞপ্তি মেইলে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক',
 'tog-shownumberswatching' => 'নজরদারী করছে, এমন ব্যবহারকারীর সংখ্যা দেখানো হোক',
 'tog-oldsig' => 'বর্তমান স্বাক্ষর:',
@@ -391,8 +391,8 @@ $1',
 সফটওয়্যারে কোন বাগের কারণে এমন হতে পারে।
 সর্বশেষ ডাটাবেজ কোয়েরিটি ছিল এরকম:
 <blockquote><tt>$1</tt></blockquote>
-"<tt>$2</tt>" ফাংশনের ভিতর থেকে।
-ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "<tt>$3: $4</tt>"।',
+"<code>$2</code>" ফাংশনের ভিতর থেকে।
+ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "<samp>$3: $4</samp>"।',
 'dberrortextcl' => 'ডাটাবেজ কোয়েরি সিনট্যাক্স ত্রুটি ঘটেছে।
 সর্বশেষ ডাটাবেজ কোয়েরিটি ছিল:
 "$1"
@@ -446,8 +446,11 @@ $1',
 'protectedpagetext' => 'সম্পাদনা এড়াতে এ পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে।',
 'viewsourcetext' => 'এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:',
 'viewyourtext' => "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
-'protectedinterface' => 'এই পাতার বিষয়বস্তু উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।',
-'editinginterface' => "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে। এই পাতাতে সংঘটিত পরিবর্তন ব্যবহারকারী ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন। অনুবাদের জন্য অনুগ্রহ করে [//translatewiki.net/wiki/Main_Page?setlang=bn translatewiki.net] ব্যবহার করার ব্যাপারটি বিবেচনা করুন। এটি মিডিয়াউইকি স্থানীয়করণ প্রকল্প।",
+'protectedinterface' => 'এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।
+সকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।',
+'editinginterface' => "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।
+এই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।
+সকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
 'sqlhidden' => '(এস কিউ এল কোয়েরি লুকানো আছে)',
 'cascadeprotected' => 'এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) "প্রপাতাকার" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:
 $2',
@@ -472,7 +475,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''আপনি এইমাত্র আপনার একাউন্ট থেকে প্রস্থান করেছেন।'''
 
-এ পরিস্থিতিতে আপনি বেনামে {{SITENAME}} ব্যবহার করতে পারেন, কিংবা একই বা পৃথক নামে [[Special:UserLogin|আবার প্রবেশ করতে]] পারেন।
+এ পরিস্থিতিতে আপনি বেনামে {{SITENAME}} ব্যবহার করতে পারেন, কিংবা একই বা পৃথক নামে <span class='plainlinks'>[$1 আবার প্রবেশ করতে]</span> পারেন।
 লক্ষ্য করুন যে, এর কোন কোন পাতা এখনও এমনভাবে দেখাতে পারে যাতে মনে হবে আপনি আগের অবস্থাতেই আছেন। এক্ষেত্রে আপনাকে আপনার ব্রাওজারের ক্যাশ পরিষ্কার (clear browser cache) করে নিতে হবে।",
 'welcomecreation' => '== স্বাগতম $1! ==
 আপনার অ্যাকাউন্ট তৈরী হয়েছে।
@@ -721,8 +724,11 @@ $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>।',
+আপনি চাইলে অন্য পাতায় [[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' => 'এই ব্যবহারকারী বর্তমানে ব্লক রয়েছে।
@@ -731,7 +737,6 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 * '''ফায়ারফক্স / সাফারি:''' ''শিফট'' কি ধরে রাখা অবস্থায় ''রিলোড''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' বা ''Ctrl-R'' (ম্যাক-এ ''⌘-R'') চাপুন
 * '''গুগল ক্রোম:''' ''Ctrl-Shift-R'' (ম্যাক-এ ''⌘-Shift-R'') চাপুন
 * '''ইন্টারনেট এক্সপ্লোরার:''' ''Ctrl'' কি ধরে রাখা অবস্থায় ''রিফ্রেশ''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' চাপুন
-* '''কনকুয়েরার:''' ''রিলোড''-এ ক্লিক করুন বা ''F5'' চাপুন
 * '''অপেরা:''' ''টুলস → প্রিফারেন্স''-এ গিয়ে ক্যাশে পরিস্কার করে নিন",
 'usercssyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন CSS পরীক্ষা করুন।",
 'userjsyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন JavaScript পরীক্ষা করুন।",
@@ -836,6 +841,13 @@ $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' => 'পাতাটি এক্সেপশন সীমানা অতিক্রম করেছে',
+'parser-unstrip-loop-warning' => 'ত্রুটিপূর্ণ লুপ খুঁজে পাওয়া গিয়েছে',
+'parser-unstrip-recursion-limit' => 'লুপ রিকারশন সীমানা অতিক্রম করেছে ($1)',
+'converter-manual-rule-error' => 'ভাষা পরিবর্তন রুলে ত্রুটি পাওয়া গিয়েছে',
 
 # "Undo" feature
 'undo-success' => 'সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।',
@@ -919,13 +931,20 @@ $3-এর দেয়া কারণ হল ''$2''",
 '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' => 'ফাইলের বিষয়বস্তু আড়াল করো',
@@ -941,6 +960,8 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-log' => 'কারণ:',
 'revdelete-submit' => 'নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো',
 'revdelete-success' => "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
+'revdelete-failure' => "'''রিভিশন ভিজিবিলিটি আপডেট সম্ভব নয়:'''
+$1",
 'logdelete-success' => "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
 'logdelete-failure' => "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''
 $1",
@@ -949,9 +970,21 @@ $1",
 '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' => 'অন্য কারণ',
@@ -960,6 +993,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'দমন লগ',
+'suppressionlogtext' => 'নিচের তালিকায় প্রশাসকদের থেকে লুকানো রয়েছে এমন তথ্যসহ অন্যন্য অপসারণ এবং বাধাদানের লগ রয়েছে।
+অনুগ্রহ করে অস্থায়ী ব্যান এবং বাধাদানের লগ সম্পর্কে বিস্তারিত জানতে [[Special:BlockList|বাধাদানের লগ দেখুন]]।',
 
 # History merging
 'mergehistory' => 'পাতার ইতিহাসগুলি একত্র করা হোক',
@@ -1000,6 +1035,11 @@ $1",
 'showhideselectedversions' => 'নির্বাচিত সংশোধনগুলো দেখাও/লুকাও',
 'editundo' => 'বাতিল',
 'diff-multi' => '({{PLURAL:$2|একজন ব্যবহারকারী |$2 জন ব্যবহারকারী}} সম্পাদিত {{PLURAL:$1|একটি অন্তর্বর্তীকালীন সংশোধন|$1টি অন্তর্বর্তীকালীন সংশোধন}} দেখানো হয়নি।)',
+'diff-multi-manyusers' => '($2 জন {{PLURAL:$2|ব্যবহারাকারীর}} সম্পাদিত {{PLURAL:$1|একটি সাম্প্রতিক সংস্করণ|$1 টি সাম্প্রতিক সংস্করণ}} প্রদর্শিত হচ্ছে না)',
+'difference-missing-revision' => '$1 পার্থক্যের {{PLURAL:$2|একটি সংস্করণ|$2টি সংস্করণসমূহ}} খুজে পাওয়া যাচ্ছে না।
+
+সাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। 
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।',
 
 # Search results
 'searchresults' => 'অনুসন্ধানের ফলাফল',
@@ -1022,6 +1062,7 @@ $1",
 'searchmenu-exists' => "'''এই উইকিতে \"[[:\$1]]\" নামে একটি পাতা রয়েছে'''",
 'searchmenu-new' => "'''\"[[:\$1]]\" পাতাটি এই উইকিতে তৈরি করুন!'''",
 'searchhelp-url' => 'Help:সহায়িকা',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|এই প্রিফিক্স রয়েছে এমন পাতা দেখুন]]',
 'searchprofile-articles' => 'বিষয়বস্তুর পাতা',
 'searchprofile-project' => 'সহায়িকা এবং প্রকল্প পাতা',
 'searchprofile-images' => 'মাল্টিমিডিয়া',
@@ -1041,8 +1082,6 @@ $1",
 'search-interwiki-caption' => 'সহপ্রকল্পসমূহ',
 'search-interwiki-default' => '$1 ফলাফলসমূহ:',
 'search-interwiki-more' => '(আরও)',
-'search-mwsuggest-enabled' => 'পরামর্শসহ',
-'search-mwsuggest-disabled' => 'পরামর্শ নেই',
 'search-relatedarticle' => 'সম্পর্কিত',
 'mwsuggest-disable' => 'AJAX পরামর্শ নিষ্ক্রিয় করা হোক',
 'searcheverything-enable' => 'সকল নামস্থানে অনুসন্ধান করো',
@@ -1072,6 +1111,7 @@ $1",
 'qbsettings-fixedright' => 'স্থায়ী ডান',
 'qbsettings-floatingleft' => 'ভাসমান বাম',
 'qbsettings-floatingright' => 'ভাসমান ডান',
+'qbsettings-directionality' => 'ফিক্সড, আপনার ভাষার লেখা শুরুর দিকের উপর ভিত্তি করে',
 
 # Preferences page
 'preferences' => 'আমার পছন্দ',
@@ -1136,7 +1176,7 @@ $1",
 'timezoneregion-indian' => 'ভারত মহাসাগর',
 'timezoneregion-pacific' => 'প্রশান্ত মহাসাগর',
 'allowemail' => 'অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।',
-'prefs-searchoptions' => 'অনুসন্ধানের পছন্দসমূহ',
+'prefs-searchoptions' => 'অনুসন্ধান',
 'prefs-namespaces' => 'নামস্থানসমূহ',
 'defaultns' => 'নতুবা এই নামস্থানগুলিতে অনুসন্ধান করো:',
 'default' => 'আদি অবস্থা',
@@ -1165,6 +1205,8 @@ $1",
 'gender-unknown' => 'অনুল্লেখিত',
 'gender-male' => 'পুরুষ',
 'gender-female' => 'মহিলা',
+'prefs-help-gender' => 'ঐচ্ছিক: সফটওয়্যারে মাধ্যমে লিঙ্গ অনুযায়ী সম্বধনের ক্ষেত্রে ব্যবহৃত হয়।
+এই তথ্য সকলের জন্য উন্মুক্ত থাকেবে।',
 'email' => 'ই-মেইল',
 'prefs-help-realname' => 'আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।',
 'prefs-help-email' => 'ই-মেইল ঠিকানা ঐচ্ছিক, তবে শব্দচাবি ভুলে গেলে নতুন করে শব্দচাবি নিতে এটির প্রয়োজন হবে।',
@@ -1246,22 +1288,33 @@ $1",
 'right-move-subpages' => 'পাতাগুলোকে তার উপপাতাসহ সরিয়ে নিন',
 'right-move-rootuserpages' => 'root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন',
 'right-movefile' => 'ফাইল স্থানান্তর',
+'right-suppressredirect' => 'পাতা স্থানান্তরের সময় মূল পাতায় রিডাইরেক্ট তৈরী করছে না',
 'right-upload' => 'ফাইল আপলোড করুন',
 'right-reupload' => 'বিদ্যমান ফাইল প্রতিস্থাপন করো',
+'right-reupload-own' => 'কারও আপলোডকৃত ফাইল ওভাররাইট করুন',
+'right-reupload-shared' => 'স্থানীয়ভাবে শেয়ার্ড মিডিয়া রিপোজিটরীর ফাইল ওভাররাইড',
 'right-upload_by_url' => 'URL থেকে ফাইল আপলোড',
+'right-purge' => 'নিশ্চিতকরণ ছাড়াই সাইটের ক্যাশ পার্জ করুন',
 'right-autoconfirmed' => 'অর্ধ-সুরক্ষিত পাতা সম্পাদনা',
+'right-bot' => 'সয়ংক্রিয় পদ্ধতি হিসাবে চিহ্নিত করণ',
+'right-apihighlimits' => 'API কোয়েরি হিসাবে আরও উচ্চ লিমিট ব্যবহার করুন',
 'right-writeapi' => 'write 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' => 'ব্যবহারকারী ইন্টারফেস সম্পাদনা',
@@ -1270,9 +1323,11 @@ $1",
 'right-edituserjs' => 'অন্য ব্যবহারকারীগণের JS ফাইল সম্পাদনা',
 'right-rollback' => 'একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন',
 'right-markbotedits' => 'রোলড-ব্যাক সম্পাদনাসমূহকে বট সম্পাদনা হিসেবে চিহ্নিত করো',
+'right-noratelimit' => 'রেট লিমিটের ভিত্তিতে পরিবর্তন হবে না',
 'right-import' => 'অন্য উইকি থেকে পাতা আমদানী করো',
 'right-importupload' => 'ফাইল আপলোড থেকে এই পাতাগুলো আমদানী করো',
 'right-patrol' => 'অন্যের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো',
+'right-autopatrol' => 'কারও নিজের সম্পাদনা সয়ংক্রিয়ভাবে পরীক্ষাণ হিসাবে চিহ্নিত',
 'right-patrolmarks' => 'সাম্প্রতিক পরিবর্তনের পরীক্ষিত চিহ্ন দেখাও',
 'right-unwatchedpages' => 'নজরতালিকা বহির্ভূত পাতাগুলির তালিকা দেখাও',
 'right-mergehistory' => 'পাতার ইতিহাস একীকরণ করুন।',
@@ -1281,11 +1336,13 @@ $1",
 'right-siteadmin' => 'ডাটাবেজ বন্ধ এবং খুলুন',
 'right-override-export-depth' => '৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন',
 'right-sendemail' => 'অন্য ব্যবহারকারীকে ইমেইল পাঠান',
+'right-passwordreset' => 'পাসওয়ার্ড রিসেট ইমেইল দেখুন',
 
 # 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"
@@ -1301,6 +1358,7 @@ $1",
 'action-movefile' => 'এই ফাইলটি সরিয়ে ফেলুন',
 'action-upload' => 'এই ফাইল আপলোড করো',
 'action-reupload' => 'বিদ্যমান ফাইল প্রতিস্থাপন করো',
+'action-reupload-shared' => 'শেয়ার্ড রিপোজিটরীতে এই ফাইলটি আপডেট করুন',
 'action-upload_by_url' => 'কোন ইউআরএল থেকে ফাইলটি আপলোড করো',
 'action-writeapi' => 'রাইট এপিআই ব্যবহার করুন',
 'action-delete' => 'পাতাটি মুছে ফেলো',
@@ -1308,9 +1366,11 @@ $1",
 'action-deletedhistory' => 'পাতার মুছে ফেলা ইতিহাস দেখাও',
 'action-browsearchive' => 'অপসারিত পাতায় অনুসন্ধান করুন',
 'action-undelete' => 'পাতাটি পুনরুদ্ধার করো',
+'action-suppressrevision' => 'লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন',
 'action-suppressionlog' => 'এই ব্যক্তিগত লগ দেখাও',
 'action-block' => 'এই ব্যবহারকারীকে সম্পাদনা করতে বাঁধা দাও',
 'action-protect' => 'এই পাতার সুরক্ষার মাত্রা পরিবর্তন করো',
+'action-rollback' => 'একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন',
 'action-import' => 'অন্য উইকি থেকে এই পাতাটি আমদানী করো',
 'action-importupload' => 'ফাইল আপলোড থেকে এই পাতাটি আমদানী করো',
 'action-patrol' => 'অন্যদের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো',
@@ -1319,6 +1379,7 @@ $1",
 'action-mergehistory' => 'এই পাতার ইতিহাস একত্রিত করুন',
 'action-userrights' => 'সকল ব্যবহারকারীর অধিকার সম্পাদনা করুন',
 'action-userrights-interwiki' => 'অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন',
+'action-siteadmin' => 'ডাটাবেজ বন্ধ অথবা খুলুন',
 'action-sendemail' => 'ই-মেইল পাঠাও',
 
 # Recent changes
@@ -1353,9 +1414,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' => 'সম্পর্কিত পরিবর্তন',
@@ -1377,6 +1440,9 @@ $1",
 'upload_directory_missing' => 'আপলোড ডাইরেক্টরি ($1) পাওয়া যাচ্ছে না এবং ওয়েব সার্ভার কর্তৃক তৈরি করা যাচ্ছে না।',
 'upload_directory_read_only' => 'আপলোড ডিরেক্টরিটি ($1) ওয়েবসার্ভার কর্তৃক লিখনযোগ্য নয়।',
 'uploaderror' => 'আপলোড এ সমস্যা হয়েছে',
+'upload-recreate-warning' => "'''সতর্কতা: এই নামের ফাইলটি অপসারণ অথবা স্থানান্তর করা হয়েছে।'''
+
+কাজের সুবিধার জন্য অপসারণ এবং স্থানান্তর লগ এখানে দেখানো হল:",
 'uploadtext' => "ফাইল আপলোড করতে নিচের ফরমটি ব্যবহার করুন।</br>
 পূর্বে আপলোড করা ফাইল দেখতে বা অনুসন্ধানে [[Special:FileList|পূর্বে আপলোড করা ফাইলের তালিকা]] দেখুন। (পুনঃ)আপলোড করা ফাইল এর নাম  [[Special:Log/upload|আপলোড লগে]] যোগ হয়, অপসারিত ফাইলের নাম [[Special:Log/delete|অপসারণ লগে]] রয়েছে।
 
@@ -1402,7 +1468,9 @@ $1",
 'ignorewarnings' => 'সমস্ত সতর্কীকরণ উপেক্ষা করা হোক',
 'minlength1' => 'ফাইলের নাম কমপক্ষে এক বর্ণের হতে হবে।',
 'illegalfilename' => '"$1" ফাইলনামটিতে এমন কিছু ক্যারেক্টার আছে যেগুলি পাতার শিরোনামে ব্যবহার করা অবৈধ। অনুগ্রহ করে ফাইলটি নতুন করে নামকরণ করুন এবং তারপর আপলোড করার চেষ্টা করুন।',
+'filename-toolong' => 'ফাইলের নাম ২৪০ বাইটের বড় হওয়া যাবে না।',
 'badfilename' => 'ফাইলের নামটি পরিবর্তন করে $1" করা হয়েছে।',
+'filetype-mime-mismatch' => '".$1" ফাইল এক্সটেনশনটি MIME থেকে চিহ্নিত ফাইলের ধরনের সাথে মিলছে না ($2)।',
 'filetype-badmime' => '"$1" MIME ধরনের ফাইল আপলোড করা যাবে না।',
 'filetype-bad-ie-mime' => 'এই ফাইলটি আপলোড করা সম্ভব নয় কারণ ইন্টারনেট এক্সপ্লোরার একে "$1" হিসেবে সনাক্ত করতে পারে, যা অননুমোদিত এবং সম্ভাব্য ক্ষতিকারক ফাইল টাইপ।',
 'filetype-unwanted-type' => "'''\".\$1\"''' ফাইল ধরনটি অগ্রহণযোগ্য।
@@ -1413,6 +1481,8 @@ $1",
 'file-too-large' => 'আপনার জমাকৃত ফাইলটি অনেক বড়।',
 'filename-tooshort' => 'ফাইল নামটি খুব ছোট।',
 'filetype-banned' => 'এই ধরনের ফাইল নিষিদ্ধ।',
+'verification-error' => 'এই ফাইলের ফাইল ভ্যালিডেশন উত্তীর্ণ হয়নি।',
+'hookaborted' => 'যে পরিবর্তনটি আপনি করার চেষ্টা করেছিলেন তা এক্সটেনশন দ্বারা বাতিল করা হয়েছে।',
 'illegal-filename' => 'ফাইলের এই নামটি গ্রহণযোগ্য নয়।',
 'overwrite' => 'বিদ্যমান কোনো ফাইল প্রতিস্থাপন গ্রহণযোগ্য নয়।',
 'unknown-error' => 'একটি অজানা ত্রুটি দেখা দিয়েছে।',
@@ -1423,6 +1493,10 @@ $1",
 'emptyfile' => 'আপনি যে ফাইলটি আপলোড করেছেন, তা খালি মনে হচ্ছে। ফাইলের নামে টাইপিং ত্রুটির কারণে এরকম হতে পারে। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি আসলেই এই ফাইলটি আপলোড করতে চান কি না।',
 '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>
@@ -1439,6 +1513,8 @@ $1",
 'fileexists-shared-forbidden' => 'অংশীদারী ফাইল ভাণ্ডারে এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান।
 আপনি যদি এখনো ফাইলটি আপলোড করতে চান, তবে অনুগ্রহপূর্বক পেছনে গিয়ে একটি নতুন নামে ফাইলটি আপলোড করুন।[[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'এই ফাইলটি নিচের {{PLURAL:$1|ফাইল|ফাইলগুলির}} অনুলিপি:',
+'file-deleted-duplicate' => 'এই ফাইলটির মত একটি ফাইল ([[:$1]]) পূর্বে অপসারণ করা হয়েছে।
+পুনরায় আপলোড করার পূর্বে আপনার উচিত আগের ফাইলটির অপসারণের কারণ জানা।',
 'uploadwarning' => 'আপলোড সতর্কবাণী',
 'uploadwarning-text' => 'অনুগ্রহ করে নিচে ফাইলের বর্ণনা পরিবর্তন করে আবার চেষ্টা করুন।',
 'savefile' => 'সংরক্ষণ',
@@ -1452,6 +1528,8 @@ $1",
 অনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।',
 'uploadscripted' => 'এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।',
 'uploadvirus' => 'এই ফাইলটিতে ভাইরাস আছে! ব্যাখ্যা: $1',
+'uploadjava' => 'এটি একটি ZIP ফরম্যাটের ফাইল, যেখানে একটি জাভা .class ফরম্যাটের ফাইল রয়েছে।
+জাভা ফাইল আপলোডের কোনো অনুমতি নেই, কারণ এই ধরনের ফাইল সিস্টেমে নিরাপত্তা ত্রুটি তৈরী করতে পারে।',
 'upload-source' => 'উৎস ফাইল',
 'sourcefilename' => 'উৎস ফাইলের নাম:',
 'sourceurl' => 'উৎস ইউআরএল:',
@@ -1465,6 +1543,9 @@ $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|আপলোড ফর্ম]]-এ ফিরে যেতে হবে।',
 
@@ -1480,11 +1561,49 @@ $1",
 '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-alreadyexists' => '"$1" নামের একটি ফাইল আগে থেকেই রয়েছে।',
+'backend-fail-store' => '"$2"-এ "$1" ফাইলটি সংরক্ষন করা সম্ভব নয়।',
+'backend-fail-copy' => '"$1" ফাইলটি "$2"-তে কপি করা সম্ভব নয়।',
+'backend-fail-move' => '"$2"-এ "$1" ফাইলটি স্থানান্তর করা সম্ভব নয়।',
+'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:$1|অপারেশ}}।',
+'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' => 'ফাইলটির জিপ পরীক্ষা করার সময় একটি ত্রুটি দেখা দিয়েছে।',
@@ -1496,18 +1615,38 @@ $1",
 
 # 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 পাওয়া যাচ্ছে না।
+আপনার সার্ভার থেকে এই তথ্য পাঠানোর জন্য কনফিগার করা হয়নি।
+এটি হয়তো 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-streaming' => 'স্ট্রিমিং "$1"।',
+'img-auth-public' => 'ব্যাক্তিগত উইকি থেকে ফাইল আউটপুটের জন্য img_auth.php এর ফাংশনগুলো ব্যবহার করা হয়।
+এই উইকিটি পাবলিক উইকি হিসাবে কনফিগার করা রয়েছে।
+নিরাপত্তার কারণে, 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 রিকোয়েস্টটি ব্যার্থ হয়েছে।',
 'http-read-error' => 'HTTP পঠন ত্রুটি।',
 'http-timed-out' => 'HTTP অনুরোধের সময় পার হয়েছে।',
 'http-curl-error' => 'ইউআরএল নিয়ে আসার ক্ষেত্রে ত্রুটি: $1',
@@ -1528,6 +1667,8 @@ $1",
 'upload_source_file' => ' (আপনার কম্পিউটারের একটি ফাইল)',
 
 # Special:ListFiles
+'listfiles-summary' => 'এই বিশেষ পাতাটি আপলোড করা সকল ফাইল প্রদর্শন করে।
+ব্যবহারকারীর মাধ্যমে ফিল্টার করা হলে, ঐ নির্দিষ্ট ব্যবহারকারীর আপলোডকৃত ফাইলগুলোর সাম্প্রতিকতম সংস্করণগুলো দেখা যাবে।',
 'listfiles_search_for' => 'ছবির নাম অনুসন্ধান:',
 'imgfile' => 'ফাইল',
 'listfiles' => 'ছবির তালিকা',
@@ -1558,15 +1699,28 @@ $1",
 'filehist-missing' => 'ফাইল পাওয়া যায়নি',
 'imagelinks' => 'ফাইলের ব্যবহার',
 'linkstoimage' => 'নিচের {{PLURAL:$1|টি পাতা|$1টি পাতা}} থেকে এই ফাইলে সংযোগ আছে:',
+'linkstoimage-more' => 'এই ফাইলের সাথে $1টির বেশি {{PLURAL:$1|পাতার লিংক}} রয়েছে।
+নিচের তালিকায় ফাইলের সাথে যুক্ত {{PLURAL:$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' => 'This file is from $1 and may be used by other projects.
+Maybe you want to edit the description on its [$2 file description page] there.',
 'filepage-nofile' => 'এই নামের কোন ফাইল নেই।',
+'filepage-nofile-link' => 'এই নামে কোনো ফাইল নেই, কিন্তু আপনি এটি [$1 আপলোড করতে পারেন]।',
 'uploadnewversion-linktext' => 'এই ফাইলটির একটি নতুন সংস্করণ আপলোড করুন',
 'shared-repo-from' => '$1 থেকে',
+'shared-repo' => 'শেয়ার্ড রিপোজিটরী',
+'upload-disallowed-here' => 'দুঃখিত আপনি এই ছবিটি প্রতিস্থাপন করতে পারবেন না।',
 
 # File reversion
 'filerevert' => '$1 পূর্বাবস্থায় ফেরত নিন',
@@ -1637,6 +1791,7 @@ $1",
 'statistics-edits' => '{{SITENAME}} চালু করার পর থেকে পাতার সম্পাদনাসমূহ',
 'statistics-edits-average' => 'প্রতি পাতার গড় সম্পাদনা',
 'statistics-views-total' => 'সর্বোমোট প্রদর্শন',
+'statistics-views-total-desc' => 'অপসারিত হয়েছে এবং বিশেষ পাতার প্রদর্শন এখানে যোগ করা হয়নি',
 'statistics-views-peredit' => 'প্রতি সম্পাদনায় পরিদর্শন',
 'statistics-users' => 'নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]',
 'statistics-users-active' => 'সক্রিয় ব্যবহারকারী',
@@ -1645,13 +1800,16 @@ $1",
 
 'disambiguations' => 'দ্ব্যর্থতা-দূরীকরণ পাতাসমূহে সংযোগকৃত পাতাসমূহ',
 'disambiguationspage' => 'Template:দ্ব্যর্থতা_নিরসন',
-'disambiguations-text' => "নিচের পাতাগুলি থেকে একটি '''দ্ব্যর্থতা নিরসন পাতা'''-তে সংযোগ আছে। এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
+'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' => 'অকার্যকর পুনর্নির্দেশনাসমূহ',
@@ -1669,6 +1827,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|সংশোধন|সংশোধনসমূহ}}',
@@ -1687,15 +1846,20 @@ $1",
 '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' => 'যেসব পাতা থেকে কোনো সংযোগ নেই',
@@ -1728,12 +1892,14 @@ $1",
 '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' => 'সম্পাদক:',
@@ -1744,6 +1910,7 @@ $1",
 আপনি লগের ধরন, ব্যবহারকারীর নাম, বা পাতার নাম নির্বাচন করে প্রদর্শনটির আকার কমিয়ে আনতে পারেন।',
 'logempty' => 'মিলে যায় এমন কিছু লগে পাওয়া যায়নি।',
 'log-title-wildcard' => 'এই টেক্সট দিয়ে শুরু হওয়া শিরোনামগুলি অনুসন্ধান করা হোক',
+'showhideselectedlogentries' => 'নির্বাচিত লগগুলো দেখাও/লুকাও',
 
 # Special:AllPages
 'allpages' => 'সব পাতা',
@@ -1764,6 +1931,8 @@ $1",
 'allpages-hide-redirects' => 'পুনর্নির্দেশনাগুলো লুকাও',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'আপনার ওপেন করা পাতাটি ক্যাশ থেকে প্রদর্শিত হচ্ছে, এটি $1 দিনের পুরানো হতে পারে।',
+'cachedspecial-viewing-cached-ts' => 'আপনার ওপেন করা পাতাটি ক্যাশ থেকে প্রদর্শিত হচ্ছে, এটি সম্পূর্ণ নতুন হতে পারে।',
 'cachedspecial-refresh-now' => 'সাম্প্রতিকগুলো প্রদর্শন করো।',
 
 # Special:Categories
@@ -1785,7 +1954,11 @@ $1",
 'linksearch-pat' => 'অনুসন্ধান প্যাটার্ন:',
 'linksearch-ns' => 'নামস্থান:',
 'linksearch-ok' => 'অনুসন্ধান',
+'linksearch-text' => '"*.wikipedia.org" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।
+নূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন "*.org".<br />
+যে সকল প্রোটোকল সমর্থন করে: <code>$1</code> (অনুসন্ধান বক্সে এগুলো ব্যবহার করবেন না)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
+'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
 # Special:ListUsers
 'listusersfrom' => 'সেই সব ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:',
@@ -1808,6 +1981,10 @@ $1",
 
 # Special:ListGroupRights
 'listgrouprights' => 'দলগত ব্যবহারকারী অধিকার',
+'listgrouprights-summary' => 'এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।
+নির্দিষ্ট গ্রুপের কার্যপরিধি সম্পর্কে জানতে দেখুন [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]।',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">অনুমোদিত অধিকার</span>
+* <span class="listgrouprights-revoked">বাধাপ্রাপ্ত অধিকার</span>',
 'listgrouprights-group' => 'দল',
 'listgrouprights-rights' => 'অধিকারসমূহ',
 'listgrouprights-helppage' => 'Help:দলের অধিকার',
@@ -1816,20 +1993,29 @@ $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' => 'আপনি নিচের ফর্মটি ব্যবহার করে এই ব্যবহারকারীকে একটি ই-মেইল পাঠাতে পারেন।
 আপনি [[Special:Preferences|আপনার ব্যবহারকারী পছন্দে]] যে ই-মেইল ঠিকানাটি প্রবেশ করিয়েছেন সেটিকে ই-মেইলের প্রেরক হিসেবে দেখানো হবে, যেনো মেইলের প্রাপক আপনাকে উত্তর দিতে পারেন।',
 'usermailererror' => 'মেইল অবজেক্ট ত্রুটি পাঠিয়েছে:',
 'defemailsubject' => '{{SITENAME}} ব্যবহারকারী "$1" প্রেরিত ইমেইল',
 'usermaildisabled' => 'ব্যবহারকারী ই-মেইল নিস্ক্রিয়',
+'usermaildisabledtext' => 'আপনি এই উইকির অন্যান্য ব্যবহারকারীকে ইমেইল পাঠাতে পারবেন না',
 'noemailtitle' => 'ই-মেইল ঠিকানা নেই',
 'noemailtext' => 'এই ব্যবহারকারী কোন বৈধ ই-মেইল ঠিকানা জানাননি।',
 'nowikiemailtitle' => 'কোন ইমেইল অনুমোদিত নয়',
+'nowikiemailtext' => 'এই ব্যবহারকারীকে ইমেইল পাঠানোর অপশন বন্ধ রয়েছে।',
+'emailnotarget' => 'প্রাপকের ব্যবহারকারী নাম সঠিক নয় অথবা এই নামের ব্যবহারকারী নেই।',
 'emailtarget' => 'ব্যবহারকারী নাম অথবা প্রাপকের নাম প্রবেশ করান',
 'emailusername' => 'ব্যবহারকারী নাম:',
 'emailusernamesubmit' => 'জমা দাও',
@@ -1887,6 +2073,7 @@ $1",
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'নজর রাখা হচ্ছে...',
 'unwatching' => 'নজর তুলে নেওয়া হচ্ছে...',
+'watcherrortext' => '"$1" এর নজরতালিকা পরিবর্তনের সময় একটি ত্রুটি হয়েছে।',
 
 'enotif_mailer' => '{{SITENAME}} বিজ্ঞপ্তি ই-মেইল প্রেরক',
 'enotif_reset' => 'সমস্ত পাতা দেখা হয়েছে হিসেবে চিহ্নিত করুন',
@@ -1967,6 +2154,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]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) দ্বারা সম্পাদিত সর্বশেষ [[:$1]] সম্পাদনাটি পুনর্বহাল করা যাচ্ছে না;
@@ -1993,12 +2182,16 @@ $UNWATCHURL
 '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' => 'মেয়াদোত্তীর্ণ হবে:',
 'protect_expiry_invalid' => 'মেয়াদোত্তীর্ণ সময় অবৈধ।',
 'protect_expiry_old' => 'মেয়াদোত্তীর্ণ সময় অতীতে অবস্থিত।',
+'protect-unchain-permissions' => 'সুরক্ষিত করার অন্যন্য অপশনগুলো আনলক করুন',
 'protect-text' => "'''$1''' পাতাটির জন্য সুরক্ষার স্তর আপনি এখানে দেখতে ও পরিবর্তন করতে পারেন।",
 'protect-locked-blocked' => "বাধাপ্রাপ্ত অবস্থায় আপনি পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারবেন না। এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
 'protect-locked-dblock' => "ডাটাবেজ বন্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।
@@ -2048,14 +2241,17 @@ $UNWATCHURL
 # Undelete
 'undelete' => 'মুছে ফেলা পাতাগুলি দেখুন',
 'undeletepage' => 'মুছে ফেলা পাতাগুলি দেখুন ও ফিরিয়ে আনুন',
+'undeletepagetitle' => "'''[[:$1|$1]] এর অপসারিত সংস্করণগুলোর সমন্বয়ে দেখানো হচ্ছে'''।",
 'viewdeletedpage' => 'মুছে ফেলা হয়েছে, এমন পাতাগুলো দেখুন',
 'undeletepagetext' => 'নিচের {{PLURAL:$1|পাতা মুছে ফেলা হয়েছে কিন্তু|$1 পাতাগুলি মুছে ফেলা হয়েছে কিন্তু}} এগুলি এখনও আর্কাইভে আছে ও পুনরুদ্ধার করা সম্ভব। আর্কাইভ পর্যায়ক্রমিকভাবে পরিস্কার করা হতে পারে।',
 'undelete-fieldset-title' => 'সংশোধন পুনরুদ্ধার',
-'undeleteextrahelp' => "সম্পূর্ণ পাতাটি পুনরুদ্ধার করার জন্য সবগুলি টিকবাক্স অনির্বাচিত করুন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন। নির্বাচিত পুনরুদ্ধারের জন্য যেসব সংশোধন পুনরুদ্ধার করতে চান, তার পাশের বাক্সে টিক দিন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন। '''''{{int:undeletereset}}''''' বোতামে ক্লিক করলে মন্তব্য রাখার এলাকা ও সবগুলি টিকবাক্স খালি করে দেওয়া হবে।",
+'undeleteextrahelp' => "সম্পূর্ণ পাতাটি পুনরুদ্ধার করার জন্য সবগুলি টিকবাক্স অনির্বাচিত করুন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।
+নির্বাচিত পুনরুদ্ধারের জন্য যেসব সংশোধন পুনরুদ্ধার করতে চান, তার পাশের বাক্সে টিক দিন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।",
 'undeleterevisions' => '$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}} আর্কাইভে আছে',
 'undeletehistory' => 'আপনি যদি পাতাটি পুনরুদ্ধার করেন, তবে সবগুলি সংশোধন ইতিহাসে ফিরিয়ে আনা হবে।
-যদি মুছে ফেলার পর একই নামে আরেকটি পাতা সৃষ্টি করা হয়ে থাকে, তবে পুনরুদ্ধারকৃত সংশোধনগুলি পূর্বের ইতিহাসে স্থান পাবে। আরও লক্ষ্য করুন যে ফাইল সংশোধনের উপর সীমাবদ্ধতা পুনরুদ্ধারের পর বাতিল হয়ে যায়।',
-'undeleterevdel' => 'শীর্ষে অবস্থিত সংশোধনটি যদি আংশিক মুছে যায়, তবে মুছে ফেলা বাতিল করা হবে না। এ ধরনের ক্ষেত্রে আপনাকে অবশ্যই নতুনতম মুছে ফেলা সংশোধনগুলি অনির্বাচিত করতে হবে। আপনার যেসব ফাইলের সংশোধন দেখার অনুমতি নেই, সেগুলি পুনরুদ্ধার করা হবে না।',
+যদি মুছে ফেলার পর একই নামে আরেকটি পাতা সৃষ্টি করা হয়ে থাকে, তবে পুনরুদ্ধারকৃত সংশোধনগুলি পূর্বের ইতিহাসে স্থান পাবে।',
+'undeleterevdel' => 'শীর্ষে অবস্থিত সংশোধনটি যদি আংশিক মুছে যায়, তবে মুছে ফেলা বাতিল করা যাবে না।
+এ ধরনের ক্ষেত্রে আপনাকে অবশ্যই নতুনতম মুছে ফেলা সংশোধনগুলি অনির্বাচিত করতে হবে।',
 'undeletehistorynoadmin' => 'এই পাতাটি মুছে ফেলা হয়েছে। মুছে ফেলার কারণ নিচের সারাংশে দেখানো হল। সেই সাথে মুছে ফেলার আগে যেসমস্ত ব্যবহারকারী পাতাটি সম্পাদনা করেছেন, তাদের সম্পর্কেও বিস্তারিত দেখানো হল। এই মুছে ফেলা সংশোধনগুলির বিষয়বস্তু  কেবল প্রশাসকদের কাছে লভ্য।',
 'undelete-revision' => '$3-এর করা $1 সংশোধন ($4 তারিখে, $5 সময়ের) মুছে ফেলা হয়েছে:',
 'undeleterevision-missing' => 'সংশোধনটি অবৈধ কিংবা হারানো গেছে। আপনি হয়ত অচল সংযোগে ক্লিক করেছেন, কিংবা সংশোধনটি হয়ত বাতিল করে পাতাটি পূর্বাবস্থায় নেওয়া হয়েছে, অথবা সংশোধনটি আর্কাইভ থেকে মুছে ফেলা হয়েছে।',
@@ -2083,16 +2279,20 @@ $UNWATCHURL
 '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
@@ -2180,8 +2380,8 @@ $1',
 'ipb-confirm' => 'বাধা নিশ্চিতকরণ',
 'badipaddress' => 'আইপি (IP) ঠিকানাটি অগ্রহনযোগ্য',
 'blockipsuccesssub' => 'বাধা সফল',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে
-<br />বাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া আইপি ঠিকানার তালিকা]] দেখুন।',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে।<br />
+বাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া তালিকা]] দেখুন।',
 'ipb-blockingself' => 'আপনি নিজেকেই বাধাপ্রদান করতে যাচ্ছেন! আপনি কী নিশ্চিত যে আপনি এটি-ই করতে চান?',
 'ipb-edit-dropdown' => 'বাধাদানের কারণ সম্পাদনা করুন',
 'ipb-unblock-addr' => '$1-এর উপর থেকে বাধা তুলে নেওয়া হোক',
@@ -2200,6 +2400,7 @@ $1',
 'blocklist-userblocks' => 'অ্যাকাউন্ট বাধা লুকাও',
 'blocklist-tempblocks' => 'অস্থায়ী বাধা লুকাও',
 'blocklist-addressblocks' => 'একক আইপি বাধা লুকাও',
+'blocklist-rangeblocks' => 'রেঞ্জ ব্লকসমূহ লুকান',
 'blocklist-timestamp' => 'সময়বার্তা',
 'blocklist-target' => 'লক্ষ্য',
 'blocklist-expiry' => 'মেয়াদোত্তীর্ণ হবে',
@@ -2230,20 +2431,28 @@ $1',
 'blocklog-showsuppresslog' => 'এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান ও লুকানো হয়েছিলো।
 তথ্যসূত্র হিসেবে তাই পূর্বের অপসারণ লগটি নিচে প্রদর্শন করা হচ্ছে:',
 'blocklogentry' => '[[$1]]এর উপর $2 $3 মেয়াদের জন্য নিষেধাজ্ঞা আরোপিত হয়েছে।',
-'blocklogtext' => 'এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ। স্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি। বর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList|আইপি বাধাদান তালিকা]] দেখুন।',
+'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_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' => 'এই ফাংশনটি নিষ্ক্রিয়।',
@@ -2251,6 +2460,9 @@ $1',
 'proxyblocksuccess' => 'নিষ্পন্ন হয়েছে।',
 'sorbsreason' => 'আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে।',
 'sorbs_create_account_reason' => 'আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে। আপনি কোন অ্যাকাউন্ট সৃষ্টি করতে পারবেন না।',
+'cant-block-while-blocked' => 'আপনি নিজে ব্লক থাকা অবস্থায় অন্যন্য ব্যবহারকারীকে ব্লক করতে পারবেন না।',
+'ipbblocked' => 'আপনি অন্য কোন ব্যবহারকরীকে ব্লক বা আনব্লক করতে পারবেন না, কারণ আপনি নিজেই ব্লক রয়েছেন',
+'ipbnounblockself' => 'আপনি নিজেকে আনব্লক করতে পারবেন না',
 
 # Developer tools
 'lockdb' => 'ডাটাবেজ বন্ধ করে দেওয়া হোক',
@@ -2271,6 +2483,7 @@ $1',
 'unlockdbsuccesstext' => 'ডাটাবেজ খুলে দেওয়া হয়েছে।',
 'lockfilenotwritable' => 'ডাটাবেজ বন্ধ করার ফাইলটি লিখনযোগ্য নয়। ডাটাবেজ বন্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।',
 'databasenotlocked' => 'ডাটাবেজ বন্ধ নয়।',
+'lockedbyandtime' => '({{GENDER:$1|$1}} $2 এর $3 সময়ে)',
 
 # Move page
 'move-page' => '$1 স্থানান্তর',
@@ -2292,11 +2505,13 @@ $1',
 
 এসব ক্ষেত্রে আপনি চাইলে নিজের হাতে পাতাটিকে সরাতে বা একত্রীকরণ করতে পারেন।",
 'movearticle' => 'যে পাতা সরিয়ে ফেলা হবে',
+'moveuserpage-warning' => "'''সতর্কতা:''' আপনি একটি ব্যবহারকারী পাতা স্থানান্তর করছেন। অনুগ্রহ করে লক্ষ্য করুন যে এর মাধ্যমে কেবলমাত্র পাতাটি স্থানান্তর হবে, কিন্তু পাতার নাম পরিবর্তন হবে ''না''।",
 'movenologin' => 'অ্যাকাউন্টে প্রবেশ করা হয়নি',
 'movenologintext' => 'কোন পাতা সরিয়ে ফেলতে চাইলে আপনাকে অবশ্যই একজন নিবন্ধিত ব্যবহারকারী হতে হবে ও অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ]] করতে হবে।',
 'movenotallowed' => 'আপনার {{SITENAME}}-তে পাতা স্থানান্তরের অনুমতি নেই।',
 'movenotallowedfile' => 'আপনার এই ফাইলটি স্থানান্তরের অনুমতি নেই।',
 'cant-move-user-page' => 'ব্যবহারকারী পাতা (উপপাতা থেকে পৃথক) স্থানান্তরের আপনার অনুমতি নেই।',
+'cant-move-to-user-page' => 'আপনার কোনো পাতা ব্যবহারকারী পাতার স্থানান্তরের অনুমতি নেই (ব্যবহারকারী উপপাতা ব্যতিত)।',
 'newtitle' => 'এই নতুন শিরোনামে',
 'move-watch' => 'এই পাতাটি নজরে রাখুন',
 'movepagebtn' => 'পাতা সরান',
@@ -2313,8 +2528,11 @@ $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' => 'পূর্বাবস্থায় ফেরত নেওয়া হোক',
@@ -2325,8 +2543,21 @@ $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' => 'গন্তব্য শিরোনামে স্থানান্তর করা যাবে না।',
+'imagenocrossnamespace' => 'কোনো ফাইল ফাইলনয় এমন নামস্থানে স্থানান্তর সম্ভব নয়',
+'nonfile-cannot-move-to-file' => 'কোনো ফাইলনয় এমন কোনো পাতা ফাইল নামস্থানে স্থানান্তর সম্ভব নয়',
+'imagetypemismatch' => 'নতুন ফাইল এক্সটেনশনটি ফাইলের ধরনের সাথে মিলছে না',
+'imageinvalidfilename' => 'ফাইল নামটি সঠিক নয়',
+'fix-double-redirects' => 'মূল শিরনামকে নির্দেশ করে এমন সকল রিডাইরেক্ট আপডেট করুন',
+'move-leave-redirect' => 'রিডাইরেক্ট উপেক্ষা করুন',
+'protectedpagemovewarning' => "'''সতর্কীকরণ:''' এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি স্থানান্তর করতে পারবেন।
+আপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
+'semiprotectedpagemovewarning' => "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি স্থানান্তর করতে পারবেন।
+আপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো:",
 
 # Export
 'export' => 'পাতা রপ্তানি',
@@ -2339,12 +2570,14 @@ $1',
 'exportcuronly' => 'সম্পূর্ণ ইতিহাস নয়, কেবল বর্তমান সংশোধনটি অন্তর্ভুক্ত করা হোক',
 'exportnohistory' => "----
 '''লক্ষ্য করুন:''' কর্মদক্ষতা-সম্পর্কিত কারণের জন্য এই ফর্মের মাধ্যমে কোন পাতার সমগ্র ইতিহাস রপ্তানি করা নিষ্ক্রিয় করা হয়েছে।",
+'exportlistauthors' => 'প্রতি পাতার অবদানকারীর একটি পূর্ণাঙ্গ তালিকা যুক্ত হবে',
 'export-submit' => 'রপ্তানি করা হোক',
 'export-addcattext' => 'এই বিষয়শ্রেণী থেকে পাতা যোগ করা হোক:',
 'export-addcat' => 'যোগ',
 'export-addnstext' => 'নামস্থান থেকে পাতা যুক্ত করুন:',
 'export-addns' => 'যোগ',
 'export-download' => 'ফাইল হিসেবে সংরক্ষণ করা হোক',
+'export-templates' => 'টেম্পলেট অন্তর্ভুক্তি',
 
 # Namespace 8 related
 'allmessages' => 'সিস্টেম বার্তাসমূহ',
@@ -2358,6 +2591,7 @@ $1',
 'allmessages-filter-unmodified' => 'অপরিবর্তিত',
 'allmessages-filter-all' => 'সমস্ত',
 'allmessages-filter-modified' => 'পরিবর্তিত',
+'allmessages-prefix' => 'প্রিফিক্স অনুযায়ী ফিল্টার:',
 'allmessages-language' => 'ভাষা:',
 'allmessages-filter-submit' => 'চলো',
 
@@ -2367,9 +2601,12 @@ $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' => 'গন্তব্য ডিরেক্টরি তৈরি করা যায়নি',
 'thumbnail_image-type' => 'চিত্রের ধরন সমর্থন করে না',
+'thumbnail_image-missing' => 'ফাইলটি খুজে পাওয়া যাচ্ছে না: $1',
 
 # Special:Import
 'import' => 'পাতা আমদানি',
@@ -2389,6 +2626,7 @@ $1',
 'importstart' => 'পাতা আমদানি করা হচ্ছে...',
 'import-revision-count' => '$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}}',
 'importnopages' => 'আমদানি করার মত কোন পাতা নেই।',
+'imported-log-entries' => '$1টি {{PLURAL:$1|লগ এন্ট্রি|লগ এন্ট্রিসমূহ}} আমদানি করা হয়েছে।',
 'importfailed' => 'আমদানি ব্যর্থ: $1',
 'importunknownsource' => 'আমদানি উৎসের ধরন অজানা',
 'importcantopen' => 'আমদানি ফাইল খোলা যায়নি',
@@ -2401,10 +2639,22 @@ $1',
 'importuploaderrorsize' => 'আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটির আকার অনুমোদিত আপলোডের আকারের চেয়ে বড়।',
 'importuploaderrorpartial' => 'আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটি কেবল আংশিকভাবে আপলোড করা হয়েছে।',
 'importuploaderrortemp' => 'আমদানি ফাইলের আপলোড ব্যর্থ। একটি সাময়িক ফোল্ডার হারানো গেছে।',
+'import-parse-failure' => 'XML পার্স করা যায়নি',
 '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" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।',
+'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' => 'আমদানি লগ',
@@ -2416,6 +2666,13 @@ $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' => 'মিডিয়াউইকি জাভাস্ক্রিপ্ট কিউইউনিট টেস্ট স্যুট',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'আপনার ব্যবহারকারী পাতা',
@@ -2478,6 +2735,7 @@ $1',
 'tooltip-compareselectedversions' => 'এই পাতার দুইটি নির্বাচিত সংস্করণের মধ্যে তুলনা দেখুন।',
 'tooltip-watch' => 'এই পাতাটি আমার নজরতালিকায় যোগ করো',
 'tooltip-watchlistedit-normal-submit' => 'শিরোনাম অপসারণ',
+'tooltip-watchlistedit-raw-submit' => 'নজরতালিকা হালনাগাদ',
 'tooltip-recreate' => 'মুছে ফেলা সত্ত্বেও পাতাটি পুনরায় সৃষ্টি করুন',
 'tooltip-upload' => 'আপলোড শুরু করো',
 'tooltip-rollback' => '"পুনর্বহাল" এই পাতায় সর্বশেষ অবদানকারীর সম্পাদনাসমূহ বাতিল করে পাতাটিকে পূর্বাবস্থায় ফিরিয়ে দেয়',
@@ -2507,18 +2765,43 @@ $1',
 'spambot_username' => 'মিডিয়াউইকি স্প্যাম পরিস্কার',
 'spam_reverting' => '$1-এর প্রতি কোন সংযোগ নেই, এমন সর্বশেষ সংস্করণে ফেরত নেওয়া হচ্ছে।',
 'spam_blanking' => '$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন খালি করা হচ্ছে',
+'spam_deleting' => '$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন অপসারণ করা হচ্ছে',
 
 # Info page
-'pageinfo-header-edits' => 'সম্পাদনা',
+'pageinfo-title' => '"$1" এর তথ্য',
+'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-edits' => 'সম্পাদনা সংখ্যা',
-'pageinfo-authors' => 'সতন্ত্র সম্পাদকের সংখ্যা',
+'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)',
 
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
 'markaspatrolledtext' => 'এই নিবন্ধটিকে পরীক্ষিত বলে চিহ্নিত করুন',
 'markedaspatrolled' => 'পরীক্ষিত বলে চিহ্নিত করুন',
-'markedaspatrolledtext' => 'আপনার নির্বাচিত সংস্করণ পরীক্ষিত বলে চিহ্নিত করা হয়েছে।',
+'markedaspatrolledtext' => 'আপনার নির্বাচিত সংস্করণ [[:$1]] পরীক্ষিত বলে চিহ্নিত করা হয়েছে।',
 'rcpatroldisabled' => 'সাম্প্রতিক পরিবর্তন প্যাট্রোল নিষ্ক্রিয়',
 'rcpatroldisabledtext' => 'সাম্প্রতিক পরিবর্তন প্যাট্রোল ফিচারটি বর্তমানে নিষ্ক্রিয় আছে।',
 'markedaspatrollederror' => 'পরীক্ষিত বলে চিহ্নিত করা যাবে না',
@@ -2527,6 +2810,7 @@ $1',
 
 # Patrol log
 'patrol-log-page' => 'পরীক্ষণ লগ',
+'patrol-log-header' => 'এটি যাচাইকৃত রিভিশনের তালিকা।',
 'log-show-hide-patrol' => '$1 পরীক্ষণ লগ',
 
 # Image deletion
@@ -2546,19 +2830,26 @@ $1',
 
 # Media information
 'mediawarning' => "'''সতর্কীকরণ''': এই ফাইলের ধরনে ক্ষতিকর কোড থাকতে পারে। এটি চালালে আপনার সিস্টেমে ক্ষতি হতে পারে।",
-'imagemaxsize' => 'ছবির বিবরণ পাতায় প্রদর্শিত ছবির আকারের সর্বোচ্চ সীমা:',
+'imagemaxsize' => "ছবির আকারের সর্বোচ্চ সীমা:<br />''(ছবির বিবরণ পাতার জন্য)''",
 'thumbsize' => 'থাম্বনেইল আকার:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$1|পাতাট|পাতাগুলো}}',
 'file-info' => 'ফাইলের আকার: $1, MIME ধরণ: $2',
 'file-info-size' => '$1 × $2 pixel, ফাইলের আকার: $3, MIME ধরণ: $4',
+'file-info-size-pages' => '$1 × $2 পিক্সেল, fফাইলের আকার: $3, MIME ধরন: $4, $5 {{PLURAL:$5|পাতা|পাতাসমূহ}}',
 'file-nohires' => 'এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।',
 'svg-long-desc' => 'SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
+'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
 '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' => 'নতুন ফাইলের গ্যালারি',
@@ -2803,6 +3094,8 @@ $1',
 'exif-planarconfiguration-1' => 'খণ্ড ফরম্যাট',
 'exif-planarconfiguration-2' => 'সমতলীয় ফরম্যাট',
 
+'exif-colorspace-65535' => 'সমন্বয় সম্ভব নয়',
+
 'exif-componentsconfiguration-0' => 'বিদ্যমান নয়',
 
 'exif-exposureprogram-0' => 'অসংজ্ঞায়িত',
@@ -2846,7 +3139,13 @@ $1',
 
 # 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-3' => 'স্বয়ংক্রিয় মোড',
+'exif-flash-function-1' => 'ফ্ল্যাশ ব্যবহৃত হয়নি',
 'exif-flash-redeye-1' => 'রেড-আই হ্রাস মোড',
 
 'exif-focalplaneresolutionunit-2' => 'ইঞ্চি',
@@ -2944,6 +3243,7 @@ $1',
 'exif-gpsdirection-m' => 'চৌম্বক দিক',
 
 'exif-ycbcrpositioning-1' => 'কেন্দ্রীভূত',
+'exif-ycbcrpositioning-2' => 'কো-সাইটেড',
 
 'exif-dc-contributor' => 'অবদানকারী',
 'exif-dc-date' => 'তারিখ',
@@ -2955,6 +3255,8 @@ $1',
 
 'exif-rating-rejected' => 'প্রত্যাখাত',
 
+'exif-isospeedratings-overflow' => '৬৫৫৩৫ থেকে বড়',
+
 'exif-iimcategory-ace' => 'শিল্প, সংস্কৃতি এবং বিনোদন',
 'exif-iimcategory-clj' => 'অপরাধ ও আইন',
 'exif-iimcategory-dis' => 'দুর্যোগ ও দুর্ঘটনা',
@@ -2964,6 +3266,7 @@ $1',
 'exif-iimcategory-hth' => 'স্বাস্থ্য',
 'exif-iimcategory-hum' => 'মানব আগ্রহ',
 'exif-iimcategory-lab' => 'শ্রম',
+'exif-iimcategory-lif' => 'লাইফস্টাইল এবং অবসর',
 'exif-iimcategory-pol' => 'রাজনীতি',
 'exif-iimcategory-rel' => 'ধর্ম এবং বিশ্বাস',
 'exif-iimcategory-sci' => 'বিজ্ঞান ও প্রযুক্তি',
@@ -2975,6 +3278,7 @@ $1',
 'exif-urgency-normal' => 'সাধারণ ($1)',
 'exif-urgency-low' => 'নিম্ন ($1)',
 'exif-urgency-high' => 'উচ্চ ($1)',
+'exif-urgency-other' => 'ব্যবহারকারী নির্ধারিত অগ্রাধিকার ক্রম ($1)',
 
 # External editor support
 'edit-externally' => 'ফাইলটি অন্য কোন সফটওয়্যার দিয়ে সম্পাদনা করুন',
@@ -3029,6 +3333,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'confirmrecreate' => "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন, নিচের কারণ দেখিয়ে:
 : ''$2''
 আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
+'confirmrecreate-noreason' => 'আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন। আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।',
 'recreate' => 'পুনরায় তৈরি করো',
 
 # action=purge
@@ -3056,6 +3361,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'table_pager_first' => 'প্রথম পাতা',
 'table_pager_last' => 'শেষ পাতা',
 'table_pager_limit' => 'প্রতি পাতায় $1 গুলো বিষয়বস্তু দেখাও',
+'table_pager_limit_label' => 'প্রতি পাতায় আইটেম সংখ্যা:',
 'table_pager_limit_submit' => 'চলো',
 'table_pager_empty' => 'ফলাফল শূন্য',
 
@@ -3086,12 +3392,17 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'watchlistedit-noitems' => 'আপনার নজর তালিকায় কোন পাতার শিরোনাম নেই।',
 'watchlistedit-normal-title' => 'নজরতালিকা সম্পাদনা করো',
 'watchlistedit-normal-legend' => 'নজর তালিকা থেকে শিরোনামসমূহ মুছে ফেলো',
-'watchlistedit-normal-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে। কোন শিরোনাম সরিয়ে নিতে চাইলে পাশের বাক্সে টিক দিন এবং "শিরোনামগুলি সরিয়ে ফেলা হোক"-এ ক্লিক করুন। আপনি [[Special:EditWatchlist/raw|মূল তালিকাটিও]] সম্পাদনা করতে পারেন।',
+'watchlistedit-normal-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে।
+কোন শিরোনাম সরিয়ে নিতে চাইলে পাশের বাক্সে টিক দিন এবং "{{int:Watchlistedit-normal-submit}}"-এ ক্লিক করুন।
+আপনি [[Special:EditWatchlist/raw|মূল তালিকাটিও]] সম্পাদনা করতে পারেন।',
 'watchlistedit-normal-submit' => 'শিরোনামগুলি সরিয়ে ফেলা হোক',
 'watchlistedit-normal-done' => '{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} আপনার নজর তালিকা থেকে মুছে ফেলা হয়েছে:',
 'watchlistedit-raw-title' => 'অশোধিত নজর তালিকা সম্পাদনা করুন',
 'watchlistedit-raw-legend' => 'অশোধিত নজরতালিকা সম্পাদনা করুন',
-'watchlistedit-raw-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে। এই তালিকাতে নতুন শিরোনাম যোগ করা যাবে বা শিরোনাম সরিয়ে নেওয়া যাবে। একটি শিরোনামের জন্য একটি লাইন বরাদ্দ। শেষ হলে "নজরতালিকা হালনাগাদ করা হোক"-এ ক্লিক করুন। আপনি [[Special:EditWatchlist|আদর্শ সম্পাদনা সরঞ্জাম]]-ও ব্যবহার করতে পারেন।',
+'watchlistedit-raw-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে, এই তালিকাতে নতুন শিরোনাম যোগ করা যাবে বা শিরোনাম সরিয়ে নেওয়া যাবে;
+প্রতিটি লাইনে একটি করে শিরনাম দেখানো হচ্ছে।
+শেষ হলে "{{int:Watchlistedit-raw-submit}}"-এ ক্লিক করুন।
+আপনি [[Special:EditWatchlist|আদর্শ সম্পাদনা সরঞ্জাম]]-ও ব্যবহার করতে পারেন।',
 'watchlistedit-raw-titles' => 'শিরোনাম:',
 'watchlistedit-raw-submit' => 'নজরতালিকা হালনাগাদ করা হোক',
 'watchlistedit-raw-done' => 'আপনার নজর তালিকা হালনাগাদ করা হয়েছে।',
@@ -3103,6 +3414,9 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 '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" কে অগ্রাহ্য করে।',
@@ -3116,6 +3430,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'version-antispam' => 'স্প্যাম প্রতিরোধ',
 'version-skins' => 'আবরণসমূহ (Skin)',
 'version-other' => 'অন্য',
+'version-mediahandlers' => 'মিডিয়া ব্যবস্থাপক',
 'version-hooks' => 'হুক',
 'version-extension-functions' => 'এক্সটেনশনের কাজ',
 'version-parser-extensiontags' => 'পার্সার এক্সটেনশন ট্যাগ',
@@ -3129,15 +3444,20 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 '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' => 'অনুলিপির জন্য অনুসন্ধান',
 'fileduplicatesearch-filename' => 'ফাইলনাম:',
 'fileduplicatesearch-submit' => 'অনুসন্ধান',
@@ -3150,11 +3470,10 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'specialpages' => 'বিশেষ পাতাসমূহ',
 'specialpages-note' => '----
 * সাধারণ বিশেষ পাতাসমূহ।
-* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>
-* <span class="mw-specialpagecached">কেবল ক্যাশকৃত বিশেষ পাতা।</span>',
+* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>',
 'specialpages-group-maintenance' => 'রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ',
 'specialpages-group-other' => 'অন্যান্য বিশেষ পাতাসমূহ',
-'specialpages-group-login' => 'à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ',
+'specialpages-group-login' => 'পà§\8dরবà§\87শ/নতà§\81ন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f',
 'specialpages-group-changes' => 'সাম্প্রতিক পরিবর্তন ও লগসমূহ',
 'specialpages-group-media' => 'মিডিয়া বিবরণী ও আপলোডসমূহ',
 'specialpages-group-users' => 'ব্যবহারকারীবৃন্দ ও অধিকারসমূহ',
@@ -3180,11 +3499,13 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 #এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>',
 
 # Special:Tags
+'tags' => 'সঠিক চেঞ্জ ট্যাগ',
 'tag-filter' => '[[Special:Tags|ট্যাগ]] ছাকনী:',
 'tag-filter-submit' => 'ছাকনী',
 'tags-title' => 'ট্যাগসমূহ',
 'tags-tag' => 'ট্যাগ নাম',
 'tags-description-header' => 'অর্থের পূর্ণ বণনা',
+'tags-hitcount-header' => 'ট্যাগকৃত পরিবর্সতনমূহ',
 'tags-edit' => 'সম্পাদনা',
 'tags-hitcount' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
 
@@ -3213,14 +3534,30 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 # 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 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-delete-revision' => '$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-delete-event-legacy' => '$1 $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-delete-revision-legacy' => '$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টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-suppress-revision-legacy' => '$1 গোপনে $3টায় সংস্করণসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
 'revdelete-content-hid' => 'বিষয়বস্তু লুকায়িত',
 'revdelete-summary-hid' => 'সম্পাদনা সারাংশ লুকায়িত',
 'revdelete-uname-hid' => 'ব্যবহারকারী নাম লুকায়িত',
@@ -3246,27 +3583,33 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'feedback-message' => 'বার্তা:',
 'feedback-cancel' => 'বাতিল',
 'feedback-submit' => 'প্রতিক্রিয়া জমা',
-'feedback-adding' => 'পাতায় à¦ªà§\8dরতিà¦\95à§\8dরিয়া à¦¯à§\8bà¦\97 à¦\95রা à¦¹à¦\9aà§\8dà¦\9bà§\87...',
-'feedback-error1' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¥à§\87à¦\95ে অজানা ফলাফল এসেছে',
+'feedback-adding' => 'পাতায় প্রতিক্রিয়া যোগ হচ্ছে...',
+'feedback-error1' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¹à¦¤ে অজানা ফলাফল এসেছে',
 'feedback-error2' => 'ত্রুটি: সম্পাদনা ব্যর্থ',
-'feedback-error3' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¥à§\87à¦\95ে কোন সাড়া নেই',
-'feedback-thanks' => 'ধনà§\8dযবাদ! à¦\86পনার à¦®à¦¤à¦¾à¦®à¦¤ "[$2 $1]" à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ করা হয়েছে।',
+'feedback-error3' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¹à¦¤ে কোন সাড়া নেই',
+'feedback-thanks' => 'ধনà§\8dযবাদ! à¦\86পনার à¦ªà§\8dরতিà¦\95à§\8dরিয়া "[$2 $1]" à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà§\8bসà§\8dà¦\9f করা হয়েছে।',
 'feedback-close' => 'সম্পন্ন',
-'feedback-bugcheck' => 'উত্তম! পরিক্ষা করে দেখুন অবিলম্বে  [$1  জানা বাগ] কিনা।',
-'feedback-bugnew' => 'আমি পরীক্ষা করেছি। নতুন একটি বাগ রিপোর্ট করুন।',
+'feedback-bugcheck' => 'উত্তম! যাচাই করুন যে এই [$1  জানা বাগের] কোন একটি কিনা।',
+'feedback-bugnew' => 'আমি যাচাই করেছি। নতুন বাগ নিবন্ধন করুন।',
+
+# Search suggestions
+'searchsuggest-search' => 'অনুসন্ধান',
+'searchsuggest-containing' => 'যা আছে...',
 
 # API errors
 'api-error-badaccess-groups' => 'আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।',
-'api-error-badtoken' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ণ à¦¤à§\8dরà§\81à¦\9fি: à¦\85পà§\8dরযà§\8bà¦\9cà§\8dয টোকেন।',
+'api-error-badtoken' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ণ à¦¤à§\8dরà§\81à¦\9fি: à¦\96ারাপ টোকেন।',
 '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|ফাইল|ফাইল}} যা ইতমধ্যে অপসারণ করা হয়েছে',
 'api-error-duplicate-popup-title' => 'অনুলিপি {{PLURAL:$1|ফাইল|ফাইল}}',
-'api-error-empty-file' => 'à¦\86পনার à¦\9cমাদানà¦\95à§\83ত à¦«à¦¾à¦\87লà¦\9fি à¦\96ালি।',
-'api-error-emptypage' => 'নতà§\81ন à¦\93 à¦\96ালি à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি গ্রহণযোগ্য নয়।',
+'api-error-empty-file' => 'আপনার জমাকৃত ফাইলটি খালি।',
+'api-error-emptypage' => 'নতà§\81ন à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦¹à¦\9aà§\8dà¦\9bà§\87, à¦\96ালি à¦ªà¦¾à¦¤à¦¾ গ্রহণযোগ্য নয়।',
 'api-error-fetchfileerror' => 'অভ্যন্তরীণ ত্রুটি: ফাইল নিয়ে আসার সময় কোনো সমস্যা হয়েছিলো।',
-'api-error-file-too-large' => 'আপনার জমাদানকৃত ফাইলটি অনেক বড়।',
+'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।',
@@ -3290,7 +3633,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'api-error-unknown-code' => 'অজানা ত্রুটি: "$1"',
 'api-error-unknown-error' => 'অভ্যন্তরীণ ত্রুটি: আপনার ফাইলটি আপলোড করার সময় কিছু সমস্যা হয়েছে।',
 'api-error-unknown-warning' => 'অজানা সতর্কীকরণ: $1',
-'api-error-unknownerror' => 'অজানা ত্রুটি: "$1"',
+'api-error-unknownerror' => 'অজানা ত্রুটি: "$1"',
 'api-error-uploaddisabled' => 'এই উইকির জন্য আপলোড সুবিধা নিস্ক্রিয় রয়েছে।',
 'api-error-verification-error' => 'সম্ভবত এই ফাইলটি ত্রুটিপূর্ণ অথবা এর এক্সটেনশনটি ভুল।',
 
index 281dbdd..af935e9 100644 (file)
@@ -456,8 +456,6 @@ $messages = array(
 'search-interwiki-caption' => 'སྲིང་མོའི་ལས་འཆར།',
 'search-interwiki-default' => '$1ལས་རྙེད་པ།',
 'search-interwiki-more' => '(དེ་ལས་མང་བ།)',
-'search-mwsuggest-enabled' => 'གྲོས་འཆར་དང་བཅས།',
-'search-mwsuggest-disabled' => 'གྲོས་འཆར་མི་དགོས།',
 'search-relatedarticle' => 'འབྲེལ་ཡོད།',
 'searchall' => 'ཚང་མ།',
 'powersearch' => 'ཞིབ་ཏུ་འཚོལ་བ།',
index 65e0217..1cfff22 100644 (file)
@@ -434,7 +434,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''তি খানি আগে তর একাউন্টহাত্ত নিকুরিসত।'''
 
-এ পরিস্থিতিত তি বেনাঙল {{SITENAME}} ব্যবহার করানি পারর, নাইলে আরাক নাঙল [[Special:UserLogin|বারো হমানি]] পারর।
+এ পরিস্থিতিত তি বেনাঙল {{SITENAME}} ব্যবহার করানি পারর, নাইলে আরাক নাঙল <span class='plainlinks'>[$1 বারো হমানি]</span> পারর।
 খিয়াল থ, কোন কোন পাতা তি আগর অংতাত আসত বুলিয়া দেখা দিতে পারে। অসারে ইলে তি ব্রাওজারর ক্যাশ সেঙকরে বেলা (clear browser cache)।",
 'welcomecreation' => '==সম্ভাষা, $1! ==
 তর একাউন্টহান হঙিল। তর [[Special:Preferences|{{SITENAME}} পছনহান]] সিলানি না পাহুরিস।',
@@ -865,8 +865,6 @@ $2',
 'search-interwiki-caption' => 'বনক প্রকল্পহানি',
 'search-interwiki-default' => '$1 ফলাফলহানি:',
 'search-interwiki-more' => '(আরাকউ)',
-'search-mwsuggest-enabled' => 'পরামর্শল',
-'search-mwsuggest-disabled' => 'পরামর্শ নেই',
 'search-relatedarticle' => 'সাকেই আসে',
 'mwsuggest-disable' => 'AJAXরে থা নাদি',
 'searcheverything-enable' => 'হাব্বি নাঙথাকে বিসারা',
@@ -1737,4 +1735,8 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'revdelete-unrestricted' => 'ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর',
 'newuserlog-byemail' => 'ই-মেইলর মা পেঠাদিয়াসি পাসৱার্ডগ',
 
+# Search suggestions
+'searchsuggest-search' => 'বিসারা',
+'searchsuggest-containing' => 'আসেতা...',
+
 );
index 04fcaed..bffea87 100644 (file)
@@ -120,43 +120,43 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ADKAS', '#REDIRECT' ),
-       'numberofpages'           => array( '1', 'NIVERABAJENNOU', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NIVERABENNADOU', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NIVERARESTROU', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NIVERAIMPLIJERIEN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NIVERAIMPLIJERIENOBERIANT', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NIVERAZEGASEDENNOU', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NIVERALENNADENNOU', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ANVPAJENN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ANVPAJENNSK', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESAOUENNANV', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESAOUENNANVSK', 'NAMESPACEE' ),
-       'fullpagename'            => array( '1', 'ANVPAJENNKLOK', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ANVPAJENNKLOKSK', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ANVISPAJENN', 'SUBPAGENAME' ),
-       'img_right'               => array( '1', 'dehou', 'right' ),
-       'img_left'                => array( '1', 'kleiz', 'left' ),
-       'img_none'                => array( '1', 'netra', 'none' ),
-       'img_center'              => array( '1', 'kreizenn', 'center', 'centre' ),
-       'img_page'                => array( '1', 'pajenn=$1', 'pajenn $1', 'page=$1', 'page $1' ),
-       'img_sub'                 => array( '1', 'is', 'sub' ),
-       'img_top'                 => array( '1', 'krec\'h', 'top' ),
-       'img_middle'              => array( '1', 'kreiz', 'middle' ),
-       'img_bottom'              => array( '1', 'traoñ', 'bottom' ),
-       'img_link'                => array( '1', 'liamm=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'ANVLEC\'HIENN', 'SITENAME' ),
-       'server'                  => array( '0', 'SERVIJER', 'SERVER' ),
-       'servername'              => array( '0', 'ANVSERVIJER', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'YEZHADUR:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'JENER:', 'GENDER:' ),
-       'plural'                  => array( '0', 'LIESTER:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLKLOK:', 'FULLURL:' ),
-       'currentversion'          => array( '1', 'STUMMRED', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#YEZH:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'dibar', 'special' ),
-       'pagesize'                => array( '1', 'MENTPAJENN', 'PAGESIZE' ),
-       'url_path'                => array( '0', 'HENT', 'PATH' ),
+       'redirect'                  => array( '0', '#ADKAS', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'NIVERABAJENNOU', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NIVERABENNADOU', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NIVERARESTROU', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NIVERAIMPLIJERIEN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NIVERAIMPLIJERIENOBERIANT', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NIVERAZEGASEDENNOU', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NIVERALENNADENNOU', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ANVPAJENN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ANVPAJENNSK', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESAOUENNANV', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESAOUENNANVSK', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ANVPAJENNKLOK', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ANVPAJENNKLOKSK', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ANVISPAJENN', 'SUBPAGENAME' ),
+       'img_right'                 => array( '1', 'dehou', 'right' ),
+       'img_left'                  => array( '1', 'kleiz', 'left' ),
+       'img_none'                  => array( '1', 'netra', 'none' ),
+       'img_center'                => array( '1', 'kreizenn', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'pajenn=$1', 'pajenn $1', 'page=$1', 'page $1' ),
+       'img_sub'                   => array( '1', 'is', 'sub' ),
+       'img_top'                   => array( '1', 'krec\'h', 'top' ),
+       'img_middle'                => array( '1', 'kreiz', 'middle' ),
+       'img_bottom'                => array( '1', 'traoñ', 'bottom' ),
+       'img_link'                  => array( '1', 'liamm=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'ANVLEC\'HIENN', 'SITENAME' ),
+       'server'                    => array( '0', 'SERVIJER', 'SERVER' ),
+       'servername'                => array( '0', 'ANVSERVIJER', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'YEZHADUR:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'JENER:', 'GENDER:' ),
+       'plural'                    => array( '0', 'LIESTER:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLKLOK:', 'FULLURL:' ),
+       'currentversion'            => array( '1', 'STUMMRED', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#YEZH:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'dibar', 'special' ),
+       'pagesize'                  => array( '1', 'MENTPAJENN', 'PAGESIZE' ),
+       'url_path'                  => array( '0', 'HENT', 'PATH' ),
 );
 
 $bookstoreList = array(
@@ -442,6 +442,10 @@ $1',
 'youhavenewmessages' => "$1 zo ganeoc'h ($2).",
 'newmessageslink' => 'Kemennoù nevez',
 'newmessagesdifflink' => "Diforc'hioù e-keñver ar stumm kent",
+'youhavenewmessagesfromusers' => '$1 ho peus eus {{PLURAL:$3|un implijer all|$3 implijer}} ($2).',
+'youhavenewmessagesmanyusers' => ' $1 ho peus implijerien a-leizh  ($2).',
+'newmessageslinkplural' => "{{PLURAL:$1ur c'hemennad nevez|kemennadoù nevez}}",
+'newmessagesdifflinkplural' => '{{PLURAL:$1|kemennad diwezhañ|kemennadoù diwezhañ}}',
 'youhavenewmessagesmulti' => "Kemennoù nevez zo ganeoc'h war $1",
 'editsection' => 'kemmañ',
 'editold' => 'kemmañ',
@@ -495,9 +499,9 @@ Ur roll eus ar pajennoù dibar reizh a c'hallit kavour war [[Special:SpecialPage
 'databaseerror' => 'Fazi bank roadennoù',
 'dberrortext' => 'C\'hoarvezet ez eus ur fazi ereadur eus ar reked er bank roadennoù, ar pezh a c\'hall talvezout ez eus un draen er meziant.
 Setu ar goulenn bet pledet gantañ da ziwezhañ :
-<blockquote><tt>$1</tt></blockquote>
-adal an arc\'hwel "<tt>$2</tt>".
-Adkaset eo bet ar fazi "<tt>$3: $4</tt>" gant ar bank roadennoù.',
+<blockquote><code>$1</code></blockquote>
+adal an arc\'hwel "<code>$2</code>".
+Adkaset eo bet ar fazi "<samp>$3: $4</samp>" gant ar bank roadennoù.',
 'dberrortextcl' => 'Ur fazi ereadur zo en ur reked savet ouzh ar bank roadennoù.
 Setu ar goulenn bet pledet gantañ da ziwezhañ :
 "$1"
@@ -552,7 +556,7 @@ Goulenn : $2",
 'protectedpagetext' => "Prennet eo bet ar bajenn-mañ. N'haller ket kemmañ anezhi ken.",
 'viewsourcetext' => 'Gallout a rit gwelet hag eilañ danvez ar bajenn-mañ',
 'viewyourtext' => "Gallout a rit gwelet hag eilañ mammenn ho '''kemmoù''' d'ar bajenn-mañ :",
-'protectedinterface' => 'Testenn ar bajenn-mañ a dalvez evit etrefas ar meziant. Setu perak eo bet gwarezet ar bajenn.',
+'protectedinterface' => 'Testenn ar bajenn-mañ a dalvez evit etrefas ar meziant er wiki-mañ. Setu perak eo bet gwarezet ar bajenn.',
 'editinginterface' => "'''Diwallit :''' Emaoc'h o kempenn ur bajenn a dalvez da sevel skridoù evit etrefas ar meziant. Ar c'hemmoù graet d'ar bajenn-mañ a cheñcho etrefas an holl implijerien. Mar fell deoc'h skoazellañ evit treiñ traoù, soñjit kentoc'h implijout [//translatewiki.net/wiki/Main_Page?setlang=br translatewiki.net], ar raktres evit lec'helaat MediaWiki.",
 'sqlhidden' => '(Reked SQL kuzhet)',
 'cascadeprotected' => 'Gwarezet eo ar bajenn-mañ; n\'haller ket kemmañ anezhi ken p\'he c\'haver {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh "skalierad" :
@@ -579,7 +583,7 @@ Setu amañ perak ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Digevreet oc'h bremañ.'''
 
-Gallout a rit kenderc'hel da implijout {{SITENAME}} en un doare dizanv, pe [[Special:UserLogin|kevreañ en-dro]] gant an hevelep anv pe un anv all mar fell deoc'h.
+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! ==
 
@@ -591,6 +595,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'remembermypassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)",
 'securelogin-stick-https' => 'Chom kevreet da HTTPS goude bezañ bet kevreet',
 'yourdomainname' => 'Ho tomani',
+'password-change-forbidden' => "Ne c'hallit ket kemmañ ar gerioù-tremen er wiki-mañ.",
 'externaldberror' => "Pe ez eus bet ur fazi gwiriekaat diavaez er bank titouroù pe n'oc'h ket aotreet da nevesaat ho kont diavaez.",
 'login' => 'Kevreañ',
 'nav-login-createaccount' => 'Krouiñ ur gont pe kevreañ',
@@ -829,18 +834,22 @@ Ma'z oc'h un implijer(ez) dizanv ha ma stadit ez eus bet kaset deoc'h kemennaden
 'noarticletext' => 'N\'eus tamm skrid ebet war ar bajenn-mañ evit poent.
 Gallout a rit [[Special:Search/{{PAGENAME}}|klask an titl anezhi]] e pajennoù all,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask en oberiadennoù liammet], pe [{{fullurl:{{FULLPAGENAME}}|action=edit}} krouiñ ar bajenn]</span>.',
-'noarticletext-nopermission' => 'N\'eus, evit ar mare, tamm testenn ebet war ar bajenn-mañ.
+'noarticletext-nopermission' => "N'eus, evit ar mare, tamm testenn ebet war ar bajenn-mañ.
 Gallout a rit [[Special:Search/{{PAGENAME}}|klask titl ar bajenn-mañ]] war pajennoù all,
-pe <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask er marilhoù kar]</span>.',
+pe <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask er marilhoù kar]</span>, met n'oc'h ket aotreet da grouiñ ar bajenn-mañ.",
+'missing-revision' => "N'eus ket eus adwel niv. $1 eus ar bajenn anvet « {{PAGENAME}} ».
+
+C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm istorel dispredet war-zu ur bajenn zo bet dilamet.
+Gallout a reot kavout muioc'h a vunudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 'userpage-userdoesnotexist' => 'N\'eo ket enrollet ar gont "<nowiki>$1</nowiki>". Merkit ma fell deoc\'h krouiñ/kemmañ ar bajenn-mañ.',
 'userpage-userdoesnotexist-view' => 'N\'eo ket enrollet ar gont implijer "$1".',
 'blocked-notice-logextract' => "Stanket eo an implijer-mañ evit poent.
 Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'clearyourcache' => "Notenn :''' Goude bezañ enrollet ho pajenn e rankot freskaat krubuilh ho merdeer a-benn gwelet ar c'hemmoù.
-* '''Firefox / Safari: ''' Derc'hel da bouezañ war ''Pennlizherenn'' en ur glikañ war ''Adkargañ'', pe pouezañ war ''Ctrl-F5'' pe ''Ctrl-R'' (''⌘-R'' war ur Mac); 
-* '''Google Chrome:''' Pouezañ war ''Ctrl-Pennlizh-R'' (''⌘-Shift-R'' war ur Mac)
+* '''Firefox / Safari:''' Derc'hel da bouezañ war ''Pennlizherenn'' en ur glikañ war ''Adkargañ'', pe pouezañ war ''Ctrl-F5'' pe ''Ctrl-R'' (''⌘-R'' war ur Mac); 
+* ''''Google Chrome:''' Pouezañ war ''Ctrl-Pennlizh-R'' (''⌘-Shift-R'' war ur Mac)
 * '''Internet Explorer:''' Derc'hel da bouezañ war ''Ctrl'' en ur glikañ war ''Freskaat,'' pe pouezañ war ''Ctrl-F5''
-* '''Konqueror: '''Klikañ war ''Adkargañ'' pe pouezañ war ''F5;'' 
+* ''''Konqueror: '''Klikañ war ''Adkargañ'' pe pouezañ war ''F5;'' 
 * '''Opera:''' Riñsañ ar grubuilh e ''Ostilhoù → Penndibaboù''",
 'usercssyoucanpreview' => "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn CSS nevez a-raok enrollañ anezhi.",
 'userjsyoucanpreview' => "'''Tun :''' Grit gant ar bouton \"{{int:showpreview}}\" evit testiñ ho follenn JS nevez a-raok enrollañ anezhi.",
@@ -952,6 +961,7 @@ A-gostez eo bet lezet an arventenn-se.',
 'expansion-depth-exceeded-warning' => "Pajenn a ya dreist d'an donder astenn",
 'parser-unstrip-loop-warning' => "Detektet ez eus bet ul lagadenn n'haller ket divontañ",
 'parser-unstrip-recursion-limit' => "Aet dreist d'ar vevenn rekurziñ n'haller ket divontañ : $1",
+'converter-manual-rule-error' => 'Fazi dinodet  er reolenn cheñch yezh dre zorn',
 
 # "Undo" feature
 'undo-success' => "Gallout a reer disteurel ar c'hemmoù-mañ. Gwiriit, mar plij, gant ar geñveriadenn a-is evit bezañ sur eo an dra-se a fell deoc'h ober; goude-se enrollit ar c'hemmoù a-is a-benn echuiñ disteurel ar c'hemmoù.",
@@ -1083,9 +1093,10 @@ N\'oc\'h ket aotreet da vont outi.',
 'revdelete-no-change' => "'''Evezh :''' emañ an arventennoù gweluster goulennet gant an elfenn deiziataet eus an $1 da $2 dija",
 'revdelete-concurrent-change' => "Fazi p'eo bet kemmet an elfenn deiziataet eus an $1 da $2 : cheñchet eo bet e statud gant unan bennak all dres pa oac'h-chwi o kemmañ anezhi. Gwiriit ar marilhoù.",
 'revdelete-only-restricted' => "Ur fazi zo bet en ur guzhat an elfenn deiziadet eus an $1 da $2 : n'hallit ket kuzhat an elfennoù-mañ ouzh ar verourien hep dibab ivez unan eus an dibarzhioù gweluster all.",
-'revdelete-reason-dropdown' => '*Abegoù diverkañ boutin
+'revdelete-reason-dropdown' => "*Abegoù diverkañ boutin
 **Gaou ouzh ar gwirioù implijout
-** Titouroù personel dizereat',
+**Titouroù personel dizereat
+** Titouroù a c'hall bezañ gwallvrudus",
 'revdelete-otherreason' => 'Abeg all/ouzhpenn :',
 'revdelete-reasonotherlist' => 'Abeg all',
 'revdelete-edit-reasonlist' => 'Kemmañ abegoù an diverkañ',
@@ -1136,6 +1147,10 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'editundo' => 'dizober',
 'diff-multi' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer|$2 implijer}} kuzhet.)",
 'diff-multi-manyusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)",
+'difference-missing-revision' => "!!{{PLURAL:$2|Un adweladur|$2 adweladurioù}} eus an disheñvelder ($1) {{PLURAL:$2|n'eo ket bet kavet|n'int ket bet adkavet}}.
+
+C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.
+Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 
 # Search results
 'searchresults' => "Disoc'hoù enklask",
@@ -1178,8 +1193,6 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'search-interwiki-caption' => 'Raktresoù kar',
 'search-interwiki-default' => "$1 disoc'h :",
 'search-interwiki-more' => "(muioc'h)",
-'search-mwsuggest-enabled' => 'gant kinnigoù',
-'search-mwsuggest-disabled' => 'hep kinnigoù',
 'search-relatedarticle' => "Disoc'hoù kar",
 'mwsuggest-disable' => 'Diweredekaat kinnigoù AJAX',
 'searcheverything-enable' => 'Klask en holl esaouennoù anv',
@@ -1275,7 +1288,7 @@ Setu aze un dalvoudenn ganet dre zegouezh hag a c'hallfec'h implijout : $1",
 'timezoneregion-indian' => 'Meurvor Indez',
 'timezoneregion-pacific' => 'Meurvor Habask',
 'allowemail' => 'Aotren ar posteloù a-berzh implijerien all',
-'prefs-searchoptions' => 'Dibarzhioù klask',
+'prefs-searchoptions' => '!Dibarzhioù klask',
 'prefs-namespaces' => 'Esaouennoù',
 'defaultns' => 'Klask en esaouennoù-anv a-hend-all :',
 'default' => 'dre ziouer',
@@ -1402,6 +1415,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'right-writeapi' => 'Ober gant an API evit kemmañ ar wiki',
 'right-delete' => 'Diverkañ pajennoù',
 'right-bigdelete' => 'Diverkañ pajennoù dezho un hir a istor',
+'right-deletelogentry' => 'Dilemel hag assevel monedoù dibar eus ar renabl',
 'right-deleterevision' => 'Diverkañ ha diziverkañ stummoù zo eus ur pajenn',
 'right-deletedhistory' => 'Gwelet anvioù an istorioù diverket hep diskouez an destenn stag outo',
 'right-deletedtext' => "Gwelet ar skrid diverket hag an diforc'hioù etre ar stummoù diverket",
@@ -1699,7 +1713,7 @@ Ma talc'h ar gudenn, kit e darempred gant [[Special:ListUsers/sysop|merourien ar
 'backend-fail-internal' => 'C\'hoarvezet ez eus ur fazi dianav e termenell stokañ ar restr "$1".',
 'backend-fail-contenttype' => 'Dibosupl termeniñ ar seurt danvez da enrollañ e "$1".',
 'backend-fail-batchsize' => 'Pourvezet he deus an dermenell stokañ ur pakad a $1 {{PLURAL:$1|oberiadenn|oberiadenn}}; sevel a ra ar vevenn da $2 {{PLURAL:$2|oberiadenn|oberiadenn}}.',
-'backend-fail-usable' => "Dibosupl skrivañ ar restr $1 rak re skort eo an aotreoù pe mankout a ra kavlec'hioù/endalc'herioù.",
+'backend-fail-usable' => 'Dibosupl skrivañ ar restr "$1" rak re skort eo an aotreoù pe mankout a ra kavlec\'hioù/endalc\'herioù.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'N\'eus ket bet gallet kevreañ ouzh diaz roadennoù ar marilh evit an dermenell stokañ "$1".',
@@ -1831,6 +1845,7 @@ Marteze a-walc'h e fell deoc'h kemmañ an deskrivadur anezhi war ar [$2 bajenn d
 'uploadnewversion-linktext' => 'Kargañ ur stumm nevez eus ar restr-mañ',
 'shared-repo-from' => 'eus $1',
 'shared-repo' => 'ur sanailh rannet',
+'upload-disallowed-here' => "Siwazh, ne c'hallit ket erlec'hiañ ar skeudenn-mañ",
 
 # File reversion
 'filerevert' => 'Disteuler $1',
@@ -1938,6 +1953,7 @@ Diskoulmet eo bet an enmontoù <del>barrennet</del>.',
 'nbytes' => '$1 {{PLURAL:$1|eizhbit|eizhbit}}',
 'ncategories' => '
 $1 {{PLURAL:$1|rummad|rummad}}',
+'ninterwikis' => ' {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|liamm|liamm}}',
 'nmembers' => '$1 {{PLURAL:$1|elfenn|elfenn}}',
 'nrevisions' => '$1 {{PLURAL:$1|stumm|stumm}}',
@@ -1966,6 +1982,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'mostlinkedtemplates' => 'Patromoù implijet ar muiañ',
 'mostcategories' => 'Pennadoù rummatet ar muiañ',
 'mostimages' => 'Skeudennoù implijet ar muiañ',
+'mostinterwikis' => 'Pajennoù gant an niver brasañ a etrewikioù',
 'mostrevisions' => 'Pennadoù bet kemmet ar muiañ',
 'prefixindex' => 'An holl bajennoù a grog gant...',
 'prefixindex-namespace' => 'An holl bajennoù enno ur rakger (esaouenn anv $1)',
@@ -2114,6 +2131,8 @@ Gallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn]
 ha bezañ merket ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù]]
 evit gallout kas ur postel d'un implijer all.",
 'emailuser' => "Kas ur postel d'an implijer-mañ",
+'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ñ.
 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.",
@@ -2158,7 +2177,7 @@ a-benn gellout kemmañ ho roll evezhiañ.",
 'addedwatchtext' => 'Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn "[[:$1]]".
 Kemmoù da zont ar bajenn-mañ ha re ar bajenn gaozeal stag outi a vo rollet amañ hag e teuio ar bajenn <b>e tev</b> er [[Special:RecentChanges|roll kemmoù diwezhañ]] evit bezañ gwelet aesoc\'h ganeoc\'h.
 
-Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ. klikit war "Paouez da evezhiañ" er framm merdeiñ.',
+Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ, klikit war "Paouez da evezhiañ" er framm merdeiñ.',
 'removewatch' => 'Lemel a-ziwar ar roll evezhiañ',
 'removedwatchtext' => 'Lamet eo bet ar bajenn "[[:$1]]" a-ziwar ho [[Special:Watchlist|roll evezhiañ]].',
 'watch' => 'Evezhiañ',
@@ -2261,6 +2280,8 @@ taolit evezh bras.",
 'rollback' => "disteuler ar c'hemmoù",
 'rollback_short' => 'Disteuler',
 'rollbacklink' => 'disteuler',
+'rollbacklinkcount' => 'terriñ $1 {{PLURAL:$1|kemm|kemmañ}}',
+'rollbacklinkcount-morethan' => 'terriñ ouzhpenn $1 {{PLURAL:$1|kemm|kemmoù}}',
 'rollbackfailed' => "C'hwitet eo bet an distaoladenn",
 'cantrollback' => 'Dibosupl da zisteuler: an aozer diwezhañ eo an hini nemetañ da vezañ kemmet ar pennad-mañ',
 'alreadyrolled' => "Dibosupl eo disteuler ar c'hemm diwezhañ graet d'ar bajenn [[:$1]] gant [[User:$2|$2]] ([[User talk:$2|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2741,6 +2762,7 @@ Miret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an e
 'import-interwiki-templates' => 'Lakaat e-barzh an holl batromoù',
 'import-interwiki-submit' => 'Enporzhiañ',
 'import-interwiki-namespace' => 'Esaouenn anv ar pal :',
+'import-interwiki-rootpage' => 'Pennpajenn kas (war zibab)',
 'import-upload-filename' => 'Anv ar restr :',
 'import-comment' => 'Notenn :',
 'importtext' => "Ezporzhiit ar restr adal ar wiki orin en ur ober gant an arc'hwel [[Special:Export|ezporzhiañ]].
@@ -2773,6 +2795,9 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 'import-error-interwiki' => 'Ne vez ket enporzhiet ar bajenn "$1" rak miret eo an anv evit liammoù diavaez (etrewiki).',
 'import-error-special' => 'Ne vez ket enporzhiet ar bajenn "$1" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.',
 'import-error-invalid' => 'Ne vez ket enporzhiet ar bajenn "$1" rak direizh eo hec\'h anv.',
+'import-options-wrong' => '{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "Pourchas a ra ar bennbajenn un titl n'eo ket reizh.",
+'import-rootpage-nosubpage' => 'Esaouenn anvioù "$1" eus ar bennpajenn ne aotre ket an ispajennoù.',
 
 # Import log
 'importlogpage' => 'Log an enporzhiadennoù',
@@ -2784,7 +2809,6 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 
 # JavaScriptTest
 'javascripttest' => 'Amprouadenn JavaScript',
-'javascripttest-disabled' => "N'eo ket bet gweredekaet an arc'hwel-mañ war ar wiki.",
 'javascripttest-title' => 'Emeur o seveniñ $1 amprouadenn',
 'javascripttest-pagetext-noframework' => 'Miret eo ar bajenn-mañ evit amprouiñ JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Framm amprouiñ "$1" dianav.',
@@ -2921,11 +2945,33 @@ 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-header-basic' => 'Titouroù diazez',
 'pageinfo-header-edits' => 'Kemmoù',
+'pageinfo-header-restrictions' => 'Gwarez ar bajenn',
+'pageinfo-header-properties' => 'Perzhioù ar bajenn',
+'pageinfo-display-title' => 'Titl diskwelet',
+'pageinfo-default-sort' => "Alc'hwez rummañ dre ziouer",
+'pageinfo-length' => 'Ment ar bajenn (en oktedoù)',
+'pageinfo-article-id' => 'Niverenn ar bajenn',
+'pageinfo-robot-policy' => 'Statud al lusker klask',
+'pageinfo-robot-index' => "A c'haller menegeriñ",
+'pageinfo-robot-noindex' => "Ne c'haller ket menegeriñ",
 'pageinfo-views' => 'Niver a weladennoù',
 'pageinfo-watchers' => 'Niver a dud o heuliañ',
+'pageinfo-redirects-name' => 'Adkas war-zu ar bajenn-mañ',
+'pageinfo-subpages-name' => 'Ispajennoù eus ar bajenn-mañ',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|kasadur|kasadurioù}}; $3 {{PLURAL:$3|nann kasaduri|nann kasadurioù}})',
+'pageinfo-firstuser' => 'Krouer ar bajenn',
+'pageinfo-firsttime' => 'Deiziad krouiñ ar bajenn',
+'pageinfo-lastuser' => 'Kontroller diwezhañ',
+'pageinfo-lasttime' => "Deiziad ar c'hemm diwezhañ",
 'pageinfo-edits' => 'Niver a gemmoù',
 'pageinfo-authors' => 'Niver a aozerien disheñvel',
+'pageinfo-recent-edits' => 'Niver a gemmoù nevez (er $1 diwezhañ)',
+'pageinfo-recent-authors' => "Niver a aozerien nevez a-ziforc'h",
+'pageinfo-magic-words' => '{{PLURAL:$1|Ger hud |Gerioù hud}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Rumm kuzh|Rummoù kuzh}} ($1)',
+'pageinfo-templates' => "{{PLURAL:$1|Patrom endalc'het|Patromoù endalc'het}} ($1)",
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -2980,6 +3026,7 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 'file-info-size-pages' => '$1 × $2 piksel, ment ar restr : $3, seurt MIME : $4, $5 {{PLURAL:$5|pajenn|pajenn}}',
 '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',
 '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.',
@@ -2989,6 +3036,8 @@ Ma vez erounezet ganeoc'h e c'hallje tagañ ho reizhiad.",
 'file-info-png-looped' => "e kelc'h",
 'file-info-png-repeat' => 'lennet $1 {{PLURAL:$1|wezh|gwezh}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|skeudenn|skeudenn}}',
+'file-no-thumb-animation' => 'Evezhiadenn: En abeg  da vevennoù teknikel ne vo ket bevaet skeudennoùigoù ar restr-mañ',
+'file-no-thumb-animation-gif' => 'Evezhiadenn: En abeg  da vevennoù teknikel ne vo ket bevaet ar skeudennoù GIF uhel o diarunusted evel homañ.',
 
 # Special:NewFiles
 'newimages' => 'Roll ar restroù nevez',
@@ -3793,6 +3842,10 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'feedback-bugcheck' => "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
 'feedback-bugnew' => 'Gwiriet em eus. Kemenn un draen nevez',
 
+# Search suggestions
+'searchsuggest-search' => 'Klask',
+'searchsuggest-containing' => 'ennañ...',
+
 # API errors
 'api-error-badaccess-groups' => "N'oc'h ket aotreet da enporzhiañ restroù war ar wiki-mañ.",
 'api-error-badtoken' => 'Fazi diabarzh : "jedouer" fall.',
@@ -3809,7 +3862,7 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'api-error-file-too-large' => "Ar restr hoc'h eus roet a oa re vras.",
 'api-error-filename-tooshort' => 'Re verr eo anv ar restr.',
 'api-error-filetype-banned' => 'Difennet eo ar seurt restroù',
-'api-error-filetype-banned-type' => "'''N'eo ket $1 {{PLURAL:$4|ur seurt restr aotreet|seurtoù restroù aotreet}}. $2 eo {{PLURAL:$3|ar seurt restroù|ar seurtoù restroù}} degemeret.",
+'api-error-filetype-banned-type' => "N'eo ket $1{{PLURAL:$4|ur seurt restr aotreet | seurtoù restroù aotreet}}. $2 zo {{PLURAL:$3|ar seurt restroù|ar seurtoù restroù}} degemeret.?",
 'api-error-filetype-missing' => "Un astenn a vank d'ar restr.",
 'api-error-hookaborted' => "Ar c'hemm hoc'h eus klasket degas zo bet harzet gant ur c'hrog astenn.",
 'api-error-http' => "Fazi diabarzh : dibosupl kevreañ d'ar servijer.",
index 0caaa7f..d3a942e 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Yakşambe',
-'monday'        => 'Duşambe',
-'tuesday'       => 'Sişambe',
-'wednesday'     => 'Cárşambe',
-'thursday'      => 'Pancşambe',
-'friday'        => 'Jummá',
-'saturday'      => 'Afta',
-'sun'           => 'Yakşambe',
-'mon'           => 'Duşambe',
-'tue'           => 'Sişambe',
-'wed'           => 'Cárşambe',
-'thu'           => 'Pancşambe',
-'fri'           => 'Jummá',
-'sat'           => 'Afta',
-'january'       => 'Janvarí',
-'february'      => 'Farvarí',
-'march'         => 'Márc',
-'april'         => 'Aprel',
-'may_long'      => 'Maí',
-'june'          => 'Jún',
-'july'          => 'Jaoláí',
-'august'        => 'Agast',
-'september'     => 'Satumbar',
-'october'       => 'Aktúbar',
-'november'      => 'Naombar',
-'december'      => 'Dasumbar',
-'january-gen'   => 'Janvarí',
-'february-gen'  => 'Farvarí',
-'march-gen'     => 'Márc',
-'april-gen'     => 'Aprel',
-'may-gen'       => 'Maí',
-'june-gen'      => 'Jún',
-'july-gen'      => 'Jaoláí',
-'august-gen'    => 'Agast',
+'sunday' => 'Yakşambe',
+'monday' => 'Duşambe',
+'tuesday' => 'Sişambe',
+'wednesday' => 'Cárşambe',
+'thursday' => 'Pancşambe',
+'friday' => 'Jummá',
+'saturday' => 'Afta',
+'sun' => 'Yakşambe',
+'mon' => 'Duşambe',
+'tue' => 'Sişambe',
+'wed' => 'Cárşambe',
+'thu' => 'Pancşambe',
+'fri' => 'Jummá',
+'sat' => 'Afta',
+'january' => 'Janvarí',
+'february' => 'Farvarí',
+'march' => 'Márc',
+'april' => 'Aprel',
+'may_long' => 'Maí',
+'june' => 'Jún',
+'july' => 'Jaoláí',
+'august' => 'Agast',
+'september' => 'Satumbar',
+'october' => 'Aktúbar',
+'november' => 'Naombar',
+'december' => 'Dasumbar',
+'january-gen' => 'Janvarí',
+'february-gen' => 'Farvarí',
+'march-gen' => 'Márc',
+'april-gen' => 'Aprel',
+'may-gen' => 'Maí',
+'june-gen' => 'Jún',
+'july-gen' => 'Jaoláí',
+'august-gen' => 'Agast',
 'september-gen' => 'Satumbar',
-'october-gen'   => 'Aktúbar',
-'november-gen'  => 'Naombar',
-'december-gen'  => 'Dasumbar',
-'jan'           => 'Janvarí',
-'feb'           => 'Farvarí',
-'mar'           => 'Márc',
-'apr'           => 'Aprel',
-'may'           => 'Maí',
-'jun'           => 'Jún',
-'jul'           => 'Jaoláí',
-'aug'           => 'Agast',
-'sep'           => 'Satumbar',
-'oct'           => 'Aktúbar',
-'nov'           => 'Naombar',
-'dec'           => 'Dasumbar',
+'october-gen' => 'Aktúbar',
+'november-gen' => 'Naombar',
+'december-gen' => 'Dasumbar',
+'jan' => 'Janvarí',
+'feb' => 'Farvarí',
+'mar' => 'Márc',
+'apr' => 'Aprel',
+'may' => 'Maí',
+'jun' => 'Jún',
+'jul' => 'Jaoláí',
+'aug' => 'Agast',
+'sep' => 'Satumbar',
+'oct' => 'Aktúbar',
+'nov' => 'Naombar',
+'dec' => 'Dasumbar',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Xáot|Xáot ák}}',
-'category_header'        => 'Xáot "$1" ŧí panna ģák',
-'subcategories'          => 'Şefko Xáot ák',
-'hidden-categories'      => '{{PLURAL:$1|Aodem á xáot|Aodem á xáot ák}}',
-'category-subcat-count'  => '{{PLURAL:$2|Dá xáot aŧí bíra dá şefko-xáot e.|Dá xáot aŧí, kulloí $2 án, đá {{PLURAL:$1|şefko-xáot e|$1 şefko-xáot arer}}.}}',
+'pagecategories' => '{{PLURAL:$1|Xáot|Xáot ák}}',
+'category_header' => 'Xáot "$1" ŧí panna ģák',
+'subcategories' => 'Şefko Xáot ák',
+'hidden-categories' => '{{PLURAL:$1|Aodem á xáot|Aodem á xáot ák}}',
+'category-subcat-count' => '{{PLURAL:$2|Dá xáot aŧí bíra dá şefko-xáot e.|Dá xáot aŧí, kulloí $2 án, đá {{PLURAL:$1|şefko-xáot e|$1 şefko-xáot arer}}.}}',
 'category-article-count' => '{{PLURAL:$2|Dá xáot aŧí bíra şefko panna ģák o.|Dá xáot aŧí şefko {{PLURAL:$1|panna|$1 panna}}, kulloí $2 án.}}',
 'listingcontinuesabbrev' => 'barjá.',
 
-'about'      => 'Bárav aŧ',
-'newwindow'  => '(púskuno darí seŧí malingik)',
-'cancel'     => 'Paşomán',
-'mytalk'     => 'Kaná ítgap',
+'about' => 'Bárav aŧ',
+'newwindow' => '(púskuno darí seŧí malingik)',
+'cancel' => 'Paşomán',
+'mytalk' => 'Kaná ítgap',
 'navigation' => 'Kasarşoní',
 
 # Cologne Blue skin
@@ -83,102 +83,102 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Púskun sarhál',
-'vector-action-delete'     => 'Mesa',
-'vector-action-move'       => 'Surif',
-'vector-action-protect'    => 'Rakk',
-'vector-view-create'       => 'Biná',
-'vector-view-edit'         => 'Radbadal',
-'vector-view-history'      => 'Lekav e ur',
-'vector-view-view'         => 'Xuán',
-'vector-view-viewsource'   => 'Bumpad e ur',
-'actions'                  => 'Amal ák',
-'namespaces'               => 'Pin-jága ģák',
-'variants'                 => 'Badaldroşumk',
-
-'errorpagetitle'   => 'Radí',
-'returnto'         => '$1 á aŕseng.',
-'tagline'          => '{{SITENAME}} án',
-'help'             => 'Ráhşon',
-'search'           => 'Paŧŧopol',
-'searchbutton'     => 'Paŧŧopol',
-'searcharticle'    => 'Ráím',
-'history'          => 'Panna ná lekav',
-'history_short'    => 'Lekav',
+'vector-action-delete' => 'Mesa',
+'vector-action-move' => 'Surif',
+'vector-action-protect' => 'Rakk',
+'vector-view-create' => 'Biná',
+'vector-view-edit' => 'Radbadal',
+'vector-view-history' => 'Lekav e ur',
+'vector-view-view' => 'Xuán',
+'vector-view-viewsource' => 'Bumpad e ur',
+'actions' => 'Amal ák',
+'namespaces' => 'Pin-jága ģák',
+'variants' => 'Badaldroşumk',
+
+'errorpagetitle' => 'Radí',
+'returnto' => '$1 á aŕseng.',
+'tagline' => '{{SITENAME}} án',
+'help' => 'Ráhşon',
+'search' => 'Paŧŧopol',
+'searchbutton' => 'Paŧŧopol',
+'searcharticle' => 'Ráím',
+'history' => 'Panna ná lekav',
+'history_short' => 'Lekav',
 'printableversion' => 'Chapáí droşum',
-'permalink'        => 'Pakká gańđ',
-'edit'             => 'Radbadal',
-'create'           => 'Biná',
-'editthispage'     => 'Dá panna ŧí radbadal kar',
+'permalink' => 'Pakká gańđ',
+'edit' => 'Radbadal',
+'create' => 'Biná',
+'editthispage' => 'Dá panna ŧí radbadal kar',
 'create-this-page' => 'Dá panna e ađđ et',
-'delete'           => 'Mesa',
-'protect'          => 'Rakk',
-'protect_change'   => 'badal kar',
-'newpage'          => 'Púskuno panna',
-'talkpage'         => 'Dá panna ná bárav aŧ ítgap kabo',
+'delete' => 'Mesa',
+'protect' => 'Rakk',
+'protect_change' => 'badal kar',
+'newpage' => 'Púskuno panna',
+'talkpage' => 'Dá panna ná bárav aŧ ítgap kabo',
 'talkpagelinktext' => 'Ítgap',
-'personaltools'    => 'Tená aozár ák',
-'talk'             => 'Ítgap',
-'views'            => 'Nadára',
-'toolbox'          => 'Aozárxána',
-'otherlanguages'   => 'Elo bolí teŧí',
-'redirectedfrom'   => '($1 án aŕsok)',
-'redirectpagesub'  => 'Aŕsengoká panna',
-'lastmodifiedat'   => 'Dá panna ŧí guđđíko radbadal $1 ($2) á massus us.',
-'jumpto'           => 'Dáng drikka:',
+'personaltools' => 'Tená aozár ák',
+'talk' => 'Ítgap',
+'views' => 'Nadára',
+'toolbox' => 'Aozárxána',
+'otherlanguages' => 'Elo bolí teŧí',
+'redirectedfrom' => '($1 án aŕsok)',
+'redirectpagesub' => 'Aŕsengoká panna',
+'lastmodifiedat' => 'Dá panna ŧí guđđíko radbadal $1 ($2) á massus us.',
+'jumpto' => 'Dáng drikka:',
 'jumptonavigation' => 'kasarşoní',
-'jumptosearch'     => 'paŧŧopol',
+'jumptosearch' => 'paŧŧopol',
 
 # 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}} ná bárav aŧ',
-'aboutpage'            => 'Project:Bárav',
-'copyright'            => 'Mađđí $1 aná rid aŧ rasenging e.',
-'copyrightpage'        => '{{ns:project}}:Hakkxuájaí',
-'currentevents'        => 'Sáŕí hál',
-'currentevents-url'    => 'Project:Sáŕí hál',
-'disclaimers'          => 'Dazkaşşík',
-'disclaimerpage'       => 'Project:Las dazkaşşí',
-'edithelp'             => 'Radbadal ráhşoní',
-'edithelppage'         => 'Help:Radbadal',
-'helppage'             => 'Help:Ridoband',
-'mainpage'             => 'Monpanna',
+'aboutsite' => '{{SITENAME}} ná bárav aŧ',
+'aboutpage' => 'Project:Bárav',
+'copyright' => 'Mađđí $1 aná rid aŧ rasenging e.',
+'copyrightpage' => '{{ns:project}}:Hakkxuájaí',
+'currentevents' => 'Sáŕí hál',
+'currentevents-url' => 'Project:Sáŕí hál',
+'disclaimers' => 'Dazkaşşík',
+'disclaimerpage' => 'Project:Las dazkaşşí',
+'edithelp' => 'Radbadal ráhşoní',
+'edithelppage' => 'Help:Radbadal',
+'helppage' => 'Help:Ridoband',
+'mainpage' => 'Monpanna',
 'mainpage-description' => 'Monpanna',
-'portal'               => 'Cágiŕd bundar',
-'portal-url'           => 'Project: Cágiŕd bundar',
-'privacy'              => 'Rázdárí ráhband',
-'privacypage'          => 'Project:Rázdárí ráhband',
+'portal' => 'Cágiŕd bundar',
+'portal-url' => 'Project: Cágiŕd bundar',
+'privacy' => 'Rázdárí ráhband',
+'privacypage' => 'Project:Rázdárí ráhband',
 
 'badaccess' => 'Mokal radí',
 
-'retrievedfrom'       => '"$1" án alok',
-'youhavenewmessages'  => 'Nekin $1 ($2) are.',
-'newmessageslink'     => 'púskuno kulav',
+'retrievedfrom' => '"$1" án alok',
+'youhavenewmessages' => 'Nekin $1 ($2) are.',
+'newmessageslink' => 'púskuno kulav',
 'newmessagesdifflink' => 'guđđíko radbadal',
-'editsection'         => 'radbadal',
-'editold'             => 'radbadal',
-'viewsourceold'       => 'bumpad e ur',
-'editlink'            => 'radbadal',
-'viewsourcelink'      => 'bumpad e ur',
-'editsectionhint'     => 'Vanđ aŧí radbadal: $1',
-'toc'                 => 'Ridoband',
-'showtoc'             => 'páş',
-'hidetoc'             => 'aodem',
-'site-rss-feed'       => '$1 RSS serí',
-'site-atom-feed'      => '$1 Atom serí',
-'page-rss-feed'       => '"$1" RSS serí',
-'page-atom-feed'      => '"$1" Atom serí',
-'red-link-title'      => '$1 (panna káŧum án aff)',
+'editsection' => 'radbadal',
+'editold' => 'radbadal',
+'viewsourceold' => 'bumpad e ur',
+'editlink' => 'radbadal',
+'viewsourcelink' => 'bumpad e ur',
+'editsectionhint' => 'Vanđ aŧí radbadal: $1',
+'toc' => 'Ridoband',
+'showtoc' => 'páş',
+'hidetoc' => 'aodem',
+'site-rss-feed' => '$1 RSS serí',
+'site-atom-feed' => '$1 Atom serí',
+'page-rss-feed' => '"$1" RSS serí',
+'page-atom-feed' => '"$1" Atom serí',
+'red-link-title' => '$1 (panna káŧum án aff)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Panna',
-'nstab-user'     => 'Kárband ná panna',
-'nstab-special'  => 'Xás á panna',
-'nstab-project'  => 'Bunkárem panna',
-'nstab-image'    => 'Fáil',
+'nstab-main' => 'Panna',
+'nstab-user' => 'Kárband ná panna',
+'nstab-special' => 'Xás á panna',
+'nstab-project' => 'Bunkárem panna',
+'nstab-image' => 'Fáil',
 'nstab-template' => 'Kálib',
 'nstab-category' => 'Xáot',
 
 # General errors
-'missing-article'    => 'Cáindárí ambár aŧí panna sená nivişt xanningtav arásiŧ ki xaningosus, "$1" $2 piní á.
+'missing-article' => 'Cáindárí ambár aŧí panna sená nivişt xanningtav arásiŧ ki xaningosus, "$1" $2 piní á.
 
 Dá geştirí mesingoko panna sená nákára o fark yá lekav ná gańđ aseá ining án marek.
 
@@ -186,89 +186,89 @@ Aga dun aff, to ní software aŧí aeb as xanánus.
 
 Ná minnatvár maron ki dáná itlá e [[Special:ListUsers/sysop|amaldár]] as e kes, o URL e nişán kes.',
 'missingarticle-rev' => '(radbadal droşum#: $1)',
-'viewsource'         => 'Bumpad e ur',
+'viewsource' => 'Bumpad e ur',
 
 # Login and logout pages
-'yourname'                => 'Kárband pin:',
-'yourpassword'            => 'Kilítlaoz:',
-'remembermypassword'      => 'Dá darí ŧí kaná pinváxubí e ust á ates (ziát án ziát $1 {{PLURAL:$1|de|de}} akin)',
-'login'                   => 'Drustírástí',
+'yourname' => 'Kárband pin:',
+'yourpassword' => 'Kilítlaoz:',
+'remembermypassword' => 'Dá darí ŧí kaná pinváxubí e ust á ates (ziát án ziát $1 {{PLURAL:$1|de|de}} akin)',
+'login' => 'Drustírástí',
 'nav-login-createaccount' => 'Drustírástí / pinváxubí',
-'userlogin'               => 'Drustírástí / pinváxubí',
-'logout'                  => 'Bidar mar',
-'userlogout'              => 'Bidar mar',
-'nologinlink'             => 'Púskun pinváxubí kar',
-'mailmypassword'          => 'Púskuná kilítlaoz e girok ŧapál aŧ mon et',
-'loginlanguagelabel'      => 'Bolí: $1',
+'userlogin' => 'Drustírástí / pinváxubí',
+'logout' => 'Bidar mar',
+'userlogout' => 'Bidar mar',
+'nologinlink' => 'Púskun pinváxubí kar',
+'mailmypassword' => 'Púskuná kilítlaoz e girok ŧapál aŧ mon et',
+'loginlanguagelabel' => 'Bolí: $1',
 
 # Edit page toolbar
-'bold_sample'     => 'Zanđ nivişt',
-'bold_tip'        => 'Zanđ nivişt',
-'italic_sample'   => 'Coŧ nivişt',
-'italic_tip'      => 'Coŧ nivişt',
-'link_sample'     => 'Gańđ aná sarhál',
-'link_tip'        => 'Handí gańđ',
-'extlink_sample'  => 'http://www.example.com gańđ aná sarhál',
-'extlink_tip'     => 'Darí gańđ (sarlaoz http:// e ust á ates)',
+'bold_sample' => 'Zanđ nivişt',
+'bold_tip' => 'Zanđ nivişt',
+'italic_sample' => 'Coŧ nivişt',
+'italic_tip' => 'Coŧ nivişt',
+'link_sample' => 'Gańđ aná sarhál',
+'link_tip' => 'Handí gańđ',
+'extlink_sample' => 'http://www.example.com gańđ aná sarhál',
+'extlink_tip' => 'Darí gańđ (sarlaoz http:// e ust á ates)',
 'headline_sample' => 'Sarhál',
-'headline_tip'    => 'Şefko sarhál',
-'nowiki_sample'   => 'Be-berifok á nivişt áte dáŕe şá',
-'nowiki_tip'      => 'Vikí berifing e gírám kar',
-'image_tip'       => 'Liccok fáil',
-'media_tip'       => 'Fáil ná gańđ',
-'sig_tip'         => 'Ná dazrand vaxtŧappo ton avár',
-'hr_tip'          => 'Pánádí lík (kazání aŧ kárem aļ)',
+'headline_tip' => 'Şefko sarhál',
+'nowiki_sample' => 'Be-berifok á nivişt áte dáŕe şá',
+'nowiki_tip' => 'Vikí berifing e gírám kar',
+'image_tip' => 'Liccok fáil',
+'media_tip' => 'Fáil ná gańđ',
+'sig_tip' => 'Ná dazrand vaxtŧappo ton avár',
+'hr_tip' => 'Pánádí lík (kazání aŧ kárem aļ)',
 
 # Edit pages
-'summary'                          => 'Bungapp:',
-'subject'                          => 'Sarhál:',
-'minoredit'                        => 'Dá cunko radbadal as e',
-'watchthis'                        => 'Dá panna ná xiálí mar',
-'savearticle'                      => 'Panna e atíko kar',
-'preview'                          => 'Sarí Jác',
-'showpreview'                      => 'Sarí jác nişán et',
-'showdiff'                         => 'Fark nişán et',
-'anoneditwarning'                  => "'''Xiál kes:''' Ní pinváxubí kattanus.
+'summary' => 'Bungapp:',
+'subject' => 'Sarhál:',
+'minoredit' => 'Dá cunko radbadal as e',
+'watchthis' => 'Dá panna ná xiálí mar',
+'savearticle' => 'Panna e atíko kar',
+'preview' => 'Sarí Jác',
+'showpreview' => 'Sarí jác nişán et',
+'showdiff' => 'Fark nişán et',
+'anoneditwarning' => "'''Xiál kes:''' Ní pinváxubí kattanus.
 Panna ná radbadal lekav aŧí ná IP pajjár atíko kanningik.",
-'summary-preview'                  => 'Bungapp ná sarí jác:',
-'newarticle'                       => '(Púskun)',
-'newarticletext'                   => "Ní anduno panna sená rand e alkunus ki káŧum án joŕ aff.
+'summary-preview' => 'Bungapp ná sarí jác:',
+'newarticle' => '(Púskun)',
+'newarticletext' => "Ní anduno panna sená rand e alkunus ki káŧum án joŕ aff.
 Panna ná biná e kanning kin şefko đabbá ŧí likking şurú kar (Pen cáindárí kin [[{{MediaWiki:Helppage}}|ráhşoní panna]] e ur).
 Aga dáŕe radínk aŧ bassunus, to ''browser'' ná '''padí''' baŧŧańŕ e xaļ.",
-'noarticletext'                    => "Dáiskán dá panna ŧí icc nivişta aff.
+'noarticletext' => "Dáiskán dá panna ŧí icc nivişta aff.
 Elo panna ģáteŧí [[Special:Search/{{PAGENAME}}|dá sarhál e paŧŧa]],
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} đek kunoká ''log'' áte paŧŧa],
 yá [{{fullurl:{{FULLPAGENAME}}|action=edit}} dá panna ŧí radbadal kar]</span>.",
-'noarticletext-nopermission'       => "Dáiskán dá panna ŧí icc nivişta aff.
+'noarticletext-nopermission' => "Dáiskán dá panna ŧí icc nivişta aff.
 Elo panna ģáteŧí [[Special:Search/{{PAGENAME}}|dá sarhál e paŧŧa]],
 yá <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} đek kunoká ''log'' áte paŧŧa].",
-'previewnote'                      => "'''Yát kes ki dá bíra sarí jác ase.'''
+'previewnote' => "'''Yát kes ki dá bíra sarí jác ase.'''
 Ná radbadal ák deskáne atíko matano.",
-'editing'                          => '$1 aŧí radbadal kanning us',
-'editingsection'                   => '$1 (vanđ) aŧí radbadal',
-'templatesused'                    => 'Dá panna ŧí aloká {{PLURAL:$1|Kálib|Kálib ák}}:',
-'templatesusedpreview'             => 'Dá sarí jác aŧí aloká {{PLURAL:$1|Kálib|Kálib ák}}:',
-'template-protected'               => '(rakk karok)',
-'template-semiprotected'           => '(nem-rakk)',
-'hiddencategories'                 => 'Dá panna {{PLURAL:$1|1 aodemo xáot|$1 aodemo xáot}} ná básk ase:',
+'editing' => '$1 aŧí radbadal kanning us',
+'editingsection' => '$1 (vanđ) aŧí radbadal',
+'templatesused' => 'Dá panna ŧí aloká {{PLURAL:$1|Kálib|Kálib ák}}:',
+'templatesusedpreview' => 'Dá sarí jác aŧí aloká {{PLURAL:$1|Kálib|Kálib ák}}:',
+'template-protected' => '(rakk karok)',
+'template-semiprotected' => '(nem-rakk)',
+'hiddencategories' => 'Dá panna {{PLURAL:$1|1 aodemo xáot|$1 aodemo xáot}} ná básk ase:',
 'permissionserrorstext-withaction' => 'Ne $2 ná mokal aff, oná {{PLURAL:$1|dalíl dáde|dalíl ák dádo}}:',
 
 # History pages
-'viewpagelogs'         => 'Dá panna ná hisáb áte ur',
-'currentrev-asof'      => '$1 iskán caŧŧ púskuná radbadal droşum',
-'revisionasof'         => '$1 á sáŕí badaldroşum',
-'previousrevision'     => '← Mutkuná badaldroşum',
-'nextrevision'         => 'Púskuná badal droşum →',
-'currentrevisionlink'  => 'Caŧŧ púskuná badal droşum',
-'cur'                  => 'sáŕí',
-'last'                 => 'must',
+'viewpagelogs' => 'Dá panna ná hisáb áte ur',
+'currentrev-asof' => '$1 iskán caŧŧ púskuná radbadal droşum',
+'revisionasof' => '$1 á sáŕí badaldroşum',
+'previousrevision' => '← Mutkuná badaldroşum',
+'nextrevision' => 'Púskuná badal droşum →',
+'currentrevisionlink' => 'Caŧŧ púskuná badal droşum',
+'cur' => 'sáŕí',
+'last' => 'must',
 'history-show-deleted' => 'Bíra mesok',
-'histfirst'            => 'Vaxtí á',
-'histlast'             => 'Caŧŧ púskuná',
+'histfirst' => 'Vaxtí á',
+'histlast' => 'Caŧŧ púskuná',
 
 # Revision deletion
-'rev-delundel'           => 'páş/aodem',
-'revdel-restore'         => 'páşí e badal kar',
+'rev-delundel' => 'páş/aodem',
+'revdel-restore' => 'páşí e badal kar',
 'revdel-restore-deleted' => 'mesok badaldroşumk',
 'revdel-restore-visible' => 'páş badaldroşumk',
 
@@ -277,57 +277,54 @@ Ná radbadal ák deskáne atíko matano.",
 
 # Diffs
 'history-title' => '$1 aŧí radbadal ná lekav',
-'difference'    => '(Badal droşum teŧí fark)',
-'lineno'        => 'Lík $1:',
-'editundo'      => 'ságí',
+'lineno' => 'Lík $1:',
+'editundo' => 'ságí',
 
 # Search results
-'searchresults'                    => 'Paŧŧopol ná kaŧŧiá',
-'searchresults-title'              => '$1 kin paŧŧopol ná kaŧŧiá',
-'searchresulttext'                 => '{{SITENAME}} ŧí paŧŧopol ná bábat cáindárí kin [[{{MediaWiki:Helppage}}|{{int:help}}]] e ur.',
-'searchsubtitle'                   => 'Ní \'\'\'[[:$1]]\'\'\' kin paŧpol kares ([[Special:Prefixindex/$1|"$1" án biná maroká ģuŧ panna ģák]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" ton gańđok ģuŧ panna ģák]])',
-'searchsubtitleinvalid'            => "Ní '''$1''' akin paŧŧopol kares",
-'notitlematches'                   => 'Dá pin aná icco panna ná sarhál allav',
-'notextmatches'                    => 'Icco panna nivişt dá vaŕ aná allav',
-'prevn'                            => 'gidrengoká {{PLURAL:$1|$1}}',
-'nextn'                            => 'mon aná {{PLURAL:$1|$1}}',
-'shown-title'                      => 'Ar panna ģá $1 {{PLURAL:$1|kaŧŧiá|kaŧŧiá}} nişán et',
-'viewprevnext'                     => '($1 {{int:pipe-separator}} $2) ($3) e ur',
-'searchmenu-new'                   => "'''Dá Vikí ŧí \"[[:\$1]]\" panna ná biná kar!'''",
-'searchprofile-articles'           => 'Nivişt panna ģák',
-'searchprofile-project'            => 'Ráhşon o bunkárem panna ģák',
-'searchprofile-images'             => 'Multimedia',
-'searchprofile-everything'         => 'Ar giŕá',
-'searchprofile-advanced'           => 'Xúŕt',
-'searchprofile-articles-tooltip'   => '$1 ŧí paŧŧa',
-'searchprofile-project-tooltip'    => '$1 ŧí paŧŧa',
-'searchprofile-images-tooltip'     => 'Fáil átekin paŧŧpol',
+'searchresults' => 'Paŧŧopol ná kaŧŧiá',
+'searchresults-title' => '$1 kin paŧŧopol ná kaŧŧiá',
+'searchresulttext' => '{{SITENAME}} ŧí paŧŧopol ná bábat cáindárí kin [[{{MediaWiki:Helppage}}|{{int:help}}]] e ur.',
+'searchsubtitle' => 'Ní \'\'\'[[:$1]]\'\'\' kin paŧpol kares ([[Special:Prefixindex/$1|"$1" án biná maroká ģuŧ panna ģák]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" ton gańđok ģuŧ panna ģák]])',
+'searchsubtitleinvalid' => "Ní '''$1''' akin paŧŧopol kares",
+'notitlematches' => 'Dá pin aná icco panna ná sarhál allav',
+'notextmatches' => 'Icco panna nivişt dá vaŕ aná allav',
+'prevn' => 'gidrengoká {{PLURAL:$1|$1}}',
+'nextn' => 'mon aná {{PLURAL:$1|$1}}',
+'shown-title' => 'Ar panna ģá $1 {{PLURAL:$1|kaŧŧiá|kaŧŧiá}} nişán et',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) e ur',
+'searchmenu-new' => "'''Dá Vikí ŧí \"[[:\$1]]\" panna ná biná kar!'''",
+'searchprofile-articles' => 'Nivişt panna ģák',
+'searchprofile-project' => 'Ráhşon o bunkárem panna ģák',
+'searchprofile-images' => 'Multimedia',
+'searchprofile-everything' => 'Ar giŕá',
+'searchprofile-advanced' => 'Xúŕt',
+'searchprofile-articles-tooltip' => '$1 ŧí paŧŧa',
+'searchprofile-project-tooltip' => '$1 ŧí paŧŧa',
+'searchprofile-images-tooltip' => 'Fáil átekin paŧŧpol',
 'searchprofile-everything-tooltip' => 'Ģuŧŧ nivişt áteŧí paŧŧpol (ítgap ná panna ģáteton avár)',
-'search-result-size'               => '$1 ({{PLURAL:$2|1 laoz|$2 laoz}})',
-'search-redirect'                  => '(aŕsa $1)',
-'search-section'                   => '($1 vanđ)',
-'search-suggest'                   => 'Maga dád xuáhása: $1',
-'search-interwiki-caption'         => 'Amkár bunkáremk',
-'search-interwiki-default'         => '$1 kaŧŧiá:',
-'search-interwiki-more'            => '(pen)',
-'search-mwsuggest-enabled'         => 'saláh ton',
-'search-mwsuggest-disabled'        => 'be saláh',
-'searchrelated'                    => 'amrang',
-'searchall'                        => 'ģuŧŧ',
-'nonefound'                        => "'''Xiáldárí''': Bunyádí vaŕ aŧ bíra giŕás pinjága áteŧí paŧpol marek.
+'search-result-size' => '$1 ({{PLURAL:$2|1 laoz|$2 laoz}})',
+'search-redirect' => '(aŕsa $1)',
+'search-section' => '($1 vanđ)',
+'search-suggest' => 'Maga dád xuáhása: $1',
+'search-interwiki-caption' => 'Amkár bunkáremk',
+'search-interwiki-default' => '$1 kaŧŧiá:',
+'search-interwiki-more' => '(pen)',
+'searchrelated' => 'amrang',
+'searchall' => 'ģuŧŧ',
+'nonefound' => "'''Xiáldárí''': Bunyádí vaŕ aŧ bíra giŕás pinjága áteŧí paŧpol marek.
 
 Ģuŧŧ mađđí ŧí paŧpol kin (ítgap panna, kálib, dá-e teton aviŕda) tená just átá avalsar aŧí sarlaoz ''all:'' xaļ, yá bakár pinjága e sarlaoz ná jága ģá xaļ.",
-'search-nonefound'                 => 'Just aná icc kaŧŧiá allav',
-'powersearch'                      => 'Xúŕt paŧŧopol',
-'powersearch-legend'               => 'Xúŕt paŧŧopol',
-'powersearch-ns'                   => 'Pin-jága ģáteŧí paŧŧopol:',
-'powersearch-redir'                => 'Aŕsoká panna ģátá cirr e nişán et',
-'powersearch-field'                => 'Dáŕkin paŧŧopol',
+'search-nonefound' => 'Just aná icc kaŧŧiá allav',
+'powersearch' => 'Xúŕt paŧŧopol',
+'powersearch-legend' => 'Xúŕt paŧŧopol',
+'powersearch-ns' => 'Pin-jága ģáteŧí paŧŧopol:',
+'powersearch-redir' => 'Aŕsoká panna ģátá cirr e nişán et',
+'powersearch-field' => 'Dáŕkin paŧŧopol',
 
 # Preferences page
-'preferences'   => 'Gicenk',
+'preferences' => 'Gicenk',
 'mypreferences' => 'Kaná gicenk',
-'yourrealname'  => 'Aslí pin',
+'yourrealname' => 'Aslí pin',
 
 # Groups
 'group-sysop' => 'Amaldár ák',
@@ -341,61 +338,61 @@ Ná radbadal ák deskáne atíko matano.",
 'action-edit' => 'dá panna ŧí radbadal kar',
 
 # Recent changes
-'nchanges'                    => '$1 {{PLURAL:$1|radbadal|radbadal}}',
-'recentchanges'               => 'Zút áteaŧ maroká radbadal ák',
-'recentchanges-legend'        => 'Zút áteaŧ marok radbadal tekin gicenk',
+'nchanges' => '$1 {{PLURAL:$1|radbadal|radbadal}}',
+'recentchanges' => 'Zút áteaŧ maroká radbadal ák',
+'recentchanges-legend' => 'Zút áteaŧ marok radbadal tekin gicenk',
 'recentchanges-label-newpage' => 'Dá radbadal aŧ panna sená biná mass',
-'recentchanges-label-minor'   => 'Dá cunko radbadal as e',
-'recentchanges-label-bot'     => 'Dá xudkár asená dú án maroko radbadal as e',
-'rcnote'                      => "Şefko {{PLURAL:$1|'''1''' radbadal e|guđđíko '''$1''' radbadal áko}}, gidrengoká {{PLURAL:$2|de aŧí|'''$2''' de teŧí}}, $5, $4 ná hisáb aŧ.",
-'rcnotefrom'                  => "Şefko raddobadal ák '''$2''' án maroko ('''$1''' iskán páş o)",
-'rclistfrom'                  => '$1 án púskuná radbadal áke nişán et',
-'rcshowhideminor'             => 'Cunká radbadal áte $1',
-'rcshowhidebots'              => 'Boŧ áte $1',
-'rcshowhideliu'               => 'Drustírástí kárband áte $1',
-'rcshowhideanons'             => 'Bidar kárband áte $1',
-'rcshowhidemine'              => 'Kaná radbadal áte $1',
-'rclinks'                     => 'Guđđíko $2 de teŧí maroká guđđíko $1 radbadal e nişán et<br />$3',
-'diff'                        => 'fark',
-'hist'                        => 'lekav',
-'hide'                        => 'aodem kar',
-'show'                        => 'níşán et',
-'minoreditletter'             => 'C',
-'newpageletter'               => 'P',
-'boteditletter'               => 'x',
-'rc-enhanced-expand'          => 'Vaddíko hál e nişán et (JavaScript xuáik)',
-'rc-enhanced-hide'            => 'Vaddíko hál e đakka',
+'recentchanges-label-minor' => 'Dá cunko radbadal as e',
+'recentchanges-label-bot' => 'Dá xudkár asená dú án maroko radbadal as e',
+'rcnote' => "Şefko {{PLURAL:$1|'''1''' radbadal e|guđđíko '''$1''' radbadal áko}}, gidrengoká {{PLURAL:$2|de aŧí|'''$2''' de teŧí}}, $5, $4 ná hisáb aŧ.",
+'rcnotefrom' => "Şefko raddobadal ák '''$2''' án maroko ('''$1''' iskán páş o)",
+'rclistfrom' => '$1 án púskuná radbadal áke nişán et',
+'rcshowhideminor' => 'Cunká radbadal áte $1',
+'rcshowhidebots' => 'Boŧ áte $1',
+'rcshowhideliu' => 'Drustírástí kárband áte $1',
+'rcshowhideanons' => 'Bidar kárband áte $1',
+'rcshowhidemine' => 'Kaná radbadal áte $1',
+'rclinks' => 'Guđđíko $2 de teŧí maroká guđđíko $1 radbadal e nişán et<br />$3',
+'diff' => 'fark',
+'hist' => 'lekav',
+'hide' => 'aodem kar',
+'show' => 'níşán et',
+'minoreditletter' => 'C',
+'newpageletter' => 'P',
+'boteditletter' => 'x',
+'rc-enhanced-expand' => 'Vaddíko hál e nişán et (JavaScript xuáik)',
+'rc-enhanced-hide' => 'Vaddíko hál e đakka',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Amrang á radbadal ák',
+'recentchangeslinked' => 'Amrang á radbadal ák',
 'recentchangeslinked-toolbox' => 'Amrang á radbadal ák',
-'recentchangeslinked-title'   => '"$1" ná bábat radbadal ák',
+'recentchangeslinked-title' => '"$1" ná bábat radbadal ák',
 'recentchangeslinked-summary' => "Dá amo radbadal átá rid e aráfk ki zút áteaŧ amo panna ģáteŧí massuno aráfk ki xáso panna se án gańđok o (yá xáso xáot asená básk áteton). [[Special:Watchlist|Ná xiálí rid]] aŧí sáŕí panna ģáte '''zanđ nivişt''' aŧ nişán kanningáne.",
-'recentchangeslinked-page'    => 'Panna ná pin:',
+'recentchangeslinked-page' => 'Panna ná pin:',
 
 # Upload
-'upload'        => 'Fáil laggif',
+'upload' => 'Fáil laggif',
 'uploadlogpage' => 'Laggifing ná hisáb',
-'filedesc'      => 'Bungapp',
+'filedesc' => 'Bungapp',
 'uploadedimage' => '"[[$1]]" laggifingá',
 
-'license'        => 'Muxtárnáma',
+'license' => 'Muxtárnáma',
 'license-header' => 'Muxtárnáma',
 
 # File description page
-'file-anchor-link'          => 'Fáil',
-'filehist'                  => 'Fáil ná lekav',
-'filehist-help'             => 'Táríx/vaxt e xaļ o fáil e amo droşum aŧí ur ki amo vaxt á ass.',
-'filehist-revert'           => 'ságí',
-'filehist-current'          => 'sáŕí',
-'filehist-datetime'         => 'De/Vaxt',
-'filehist-thumb'            => 'Cunikfoŧú',
-'filehist-thumbtext'        => '$1 íá badal droşum kin cunikfoŧú',
-'filehist-user'             => 'Kárband',
-'filehist-dimensions'       => 'Bálád',
-'filehist-comment'          => 'Darşánxiál',
-'imagelinks'                => 'Fáil ná gańđ ák',
-'linkstoimage'              => 'Şefko {{PLURAL:$1|panna fáil ton gańđok e|$1 panna ģák fáil ton gańđok o}}:',
+'file-anchor-link' => 'Fáil',
+'filehist' => 'Fáil ná lekav',
+'filehist-help' => 'Táríx/vaxt e xaļ o fáil e amo droşum aŧí ur ki amo vaxt á ass.',
+'filehist-revert' => 'ságí',
+'filehist-current' => 'sáŕí',
+'filehist-datetime' => 'De/Vaxt',
+'filehist-thumb' => 'Cunikfoŧú',
+'filehist-thumbtext' => '$1 íá badal droşum kin cunikfoŧú',
+'filehist-user' => 'Kárband',
+'filehist-dimensions' => 'Bálád',
+'filehist-comment' => 'Darşánxiál',
+'imagelinks' => 'Fáil ná gańđ ák',
+'linkstoimage' => 'Şefko {{PLURAL:$1|panna fáil ton gańđok e|$1 panna ģák fáil ton gańđok o}}:',
 'uploadnewversion-linktext' => 'Dá fáil ná púskuno badal droşum as laggif',
 
 # Random page
@@ -405,30 +402,30 @@ Ná radbadal ák deskáne atíko matano.",
 'statistics' => 'Hisábkitáb',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|báiŧ|báiŧ}}',
-'nmembers'      => '$1 {{PLURAL:$1|básk|básk}}',
-'prefixindex'   => 'Ģuŧŧ panna ģák sarloaz ton',
-'newpages'      => 'Púskuná panna ģák',
-'move'          => 'Surif',
-'movethispage'  => 'Dá panna e surif',
+'nbytes' => '$1 {{PLURAL:$1|báiŧ|báiŧ}}',
+'nmembers' => '$1 {{PLURAL:$1|básk|básk}}',
+'prefixindex' => 'Ģuŧŧ panna ģák sarloaz ton',
+'newpages' => 'Púskuná panna ģák',
+'move' => 'Surif',
+'movethispage' => 'Dá panna e surif',
 'pager-newer-n' => '{{PLURAL:$1|púskuná 1|púskuná $1}}',
 'pager-older-n' => '{{PLURAL:$1|mutkuná 1|mutkuná $1}}',
 
 # Book sources
-'booksources'               => 'Kitábí bumpad',
+'booksources' => 'Kitábí bumpad',
 'booksources-search-legend' => 'Kitábí bumpad átekin paŧŧpol',
-'booksources-go'            => 'Ráím',
+'booksources-go' => 'Ráím',
 
 # Special:Log
 'log' => 'Lekav',
 
 # Special:AllPages
-'allpages'       => 'Ģuŧŧ panna ģák',
+'allpages' => 'Ģuŧŧ panna ģák',
 'alphaindexline' => '$1 án $2 iskán',
-'prevpage'       => 'Mustko panna ($1)',
-'allpagesfrom'   => 'Dáŕaŧ biná maroká panna ģáte nişán et:',
-'allpagesto'     => 'Dáŕaŧ esar maroká panna ģáte nişán et:',
-'allarticles'    => 'Ģuŧŧ panna ģák',
+'prevpage' => 'Mustko panna ($1)',
+'allpagesfrom' => 'Dáŕaŧ biná maroká panna ģáte nişán et:',
+'allpagesto' => 'Dáŕaŧ esar maroká panna ģáte nişán et:',
+'allarticles' => 'Ģuŧŧ panna ģák',
 'allpagessubmit' => 'Ráím',
 
 # Special:Categories
@@ -447,112 +444,112 @@ Ná radbadal ák deskáne atíko matano.",
 'emailuser' => 'Dá kárband e girokŧapál as mon et',
 
 # Watchlist
-'watchlist'         => 'Kaná xiálí rid',
-'mywatchlist'       => 'Kaná xiálí rid',
-'removedwatchtext'  => 'Panna "[[:$1]]" e [[Special:Watchlist|ná xiálírid]] án kaşşingáne.',
-'watch'             => 'Xiálí mar',
-'watchthispage'     => 'Dá panna ná xiálí mar',
-'unwatch'           => 'Bexiál mar',
+'watchlist' => 'Kaná xiálí rid',
+'mywatchlist' => 'Kaná xiálí rid',
+'removedwatchtext' => 'Panna "[[:$1]]" e [[Special:Watchlist|ná xiálírid]] án kaşşingáne.',
+'watch' => 'Xiálí mar',
+'watchthispage' => 'Dá panna ná xiálí mar',
+'unwatch' => 'Bexiál mar',
 'watchlist-details' => 'Ná xiálí rid aŧí {{PLURAL:$1|$1 panna se|$1 panna o}}, ítgap panna ģák hisáb aŧí affas.',
-'wlshowlast'        => 'Guđđíko $1 ganŧa $2 de $3 e nişán et',
+'wlshowlast' => 'Guđđíko $1 ganŧa $2 de $3 e nişán et',
 'watchlist-options' => 'Xiálírid gicenk',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Xiálí manning...',
+'watching' => 'Xiálí manning...',
 'unwatching' => 'Bexiál manning...',
 
 # Delete
-'deletepage'            => 'Panna e mesa',
-'confirmdeletetext'     => 'Ní panna as e oná lekav ton avár mesing aŧí us.
+'deletepage' => 'Panna e mesa',
+'confirmdeletetext' => 'Ní panna as e oná lekav ton avár mesing aŧí us.
 Dá pakk kar ki ní dun kanning xuáisa, dáná pad án poh us, o ní dád [[{{MediaWiki:Policy-url}}|ráhband]] ná vaŕ aŧ kanning us.',
-'actioncomplete'        => 'Amal sarjam',
-'actionfailed'          => 'Amal besob mass',
-'deletedtext'           => '"$1" mesingáne.
+'actioncomplete' => 'Amal sarjam',
+'actionfailed' => 'Amal besob mass',
+'deletedtext' => '"$1" mesingáne.
 Zút áteaŧ mesing átá lekav kin $2 e ur.',
-'dellogpage'            => 'Mesing ná hisáb',
-'deletecomment'         => 'Dalíl:',
-'deleteotherreason'     => 'Elo/pen dalíl:',
+'dellogpage' => 'Mesing ná hisáb',
+'deletecomment' => 'Dalíl:',
+'deleteotherreason' => 'Elo/pen dalíl:',
 'deletereasonotherlist' => 'Elo dalíl',
 
 # Rollback
 'rollbacklink' => 'ģuŧŧ e aŕsa',
 
 # Protect
-'protectlogpage'              => 'Rakk hisáb',
-'protectedarticle'            => '"[[$1]]" rakk mass',
-'protectcomment'              => 'Dalíl',
-'protect-default'             => 'Ģuŧŧ kárband áte mokal et',
-'protect-fallback'            => '"$1" mokal xuáik',
+'protectlogpage' => 'Rakk hisáb',
+'protectedarticle' => '"[[$1]]" rakk mass',
+'protectcomment' => 'Dalíl',
+'protect-default' => 'Ģuŧŧ kárband áte mokal et',
+'protect-fallback' => '"$1" mokal xuáik',
 'protect-level-autoconfirmed' => 'Púskuná o bepin á kárband átiá rok xaļ',
-'protect-level-sysop'         => 'Bíra Amaldár ák',
-'restriction-type'            => 'Mokal:',
+'protect-level-sysop' => 'Bíra Amaldár ák',
+'restriction-type' => 'Mokal:',
 
 # Undelete
-'undeletelink'     => 'ur/aŕsa',
+'undeletelink' => 'ur/aŕsa',
 'undeleteviewlink' => 'ur',
 
 # Namespace form on various pages
-'namespace'      => 'Pin-jága:',
-'invert'         => 'Gicen e elo mon kar',
+'namespace' => 'Pin-jága:',
+'invert' => 'Gicen e elo mon kar',
 'blanknamespace' => '(Bundar)',
 
 # Contributions
-'contributions'       => 'Kárband ná baŕáhík',
+'contributions' => 'Kárband ná baŕáhík',
 'contributions-title' => '$1 kin kárband ná baŕáhík',
-'mycontris'           => 'Kaná baŕáhík',
-'contribsub2'         => '$1 ($2) kin',
-'uctop'               => '(buŕz buŕzko)',
-'month'               => 'Dá tú (o must) án:',
-'year'                => 'Dá sál (o must) án:',
+'mycontris' => 'Kaná baŕáhík',
+'contribsub2' => '$1 ($2) kin',
+'uctop' => '(buŕz buŕzko)',
+'month' => 'Dá tú (o must) án:',
+'year' => 'Dá sál (o must) án:',
 
-'sp-contributions-newbies'  => 'Bíra púskuná pinváxub átá baŕáhí te nişán et',
+'sp-contributions-newbies' => 'Bíra púskuná pinváxub átá baŕáhí te nişán et',
 'sp-contributions-blocklog' => 'rok aná hisáb',
-'sp-contributions-talk'     => 'ítgap',
-'sp-contributions-search'   => 'Baŕáhí kin paŧŧopol',
+'sp-contributions-talk' => 'ítgap',
+'sp-contributions-search' => 'Baŕáhí kin paŧŧopol',
 'sp-contributions-username' => 'IP pajjár yá kárband pin:',
-'sp-contributions-submit'   => 'Paŧŧopol',
+'sp-contributions-submit' => 'Paŧŧopol',
 
 # What links here
-'whatlinkshere'            => 'Dáŕe ant gańđoke',
-'whatlinkshere-title'      => '$1 aton gańđok á panna ģák',
-'whatlinkshere-page'       => 'Panna:',
-'linkshere'                => "Şefko panna ģák '''[[:$1]]''' ton gańđok o:",
-'isredirect'               => 'aŕsengoká panna',
-'istemplate'               => 'aviŕdaí',
-'isimage'                  => 'fáil gańđ',
-'whatlinkshere-prev'       => '{{PLURAL:$1|mustko|mustko $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|randíko|randíko $1}}',
-'whatlinkshere-links'      => '← gańđ ák',
+'whatlinkshere' => 'Dáŕe ant gańđoke',
+'whatlinkshere-title' => '$1 aton gańđok á panna ģák',
+'whatlinkshere-page' => 'Panna:',
+'linkshere' => "Şefko panna ģák '''[[:$1]]''' ton gańđok o:",
+'isredirect' => 'aŕsengoká panna',
+'istemplate' => 'aviŕdaí',
+'isimage' => 'fáil gańđ',
+'whatlinkshere-prev' => '{{PLURAL:$1|mustko|mustko $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|randíko|randíko $1}}',
+'whatlinkshere-links' => '← gańđ ák',
 'whatlinkshere-hideredirs' => '$1 aŕsik',
-'whatlinkshere-hidetrans'  => 'aviŕdaí te $1',
-'whatlinkshere-hidelinks'  => 'gańđ áte $1',
-'whatlinkshere-filters'    => 'Birvek',
+'whatlinkshere-hidetrans' => 'aviŕdaí te $1',
+'whatlinkshere-hidelinks' => 'gańđ áte $1',
+'whatlinkshere-filters' => 'Birvek',
 
 # Block/unblock
-'blockip'                  => 'Kárband á rok xaļ',
-'ipboptions'               => '2 ganŧa:2 hours,1 de:1 day,3 de:3 days,1 afta:1 week,2 afta:2 weeks,1 tú:1 month,3 tú:3 months,6 tú:6 months,1 sál:1 year,be kacc:infinite',
-'ipblocklist'              => 'IP pajjár o kárbandpin ák ki rok laggok e iyá tá',
-'blocklink'                => 'rok xaļ',
-'unblocklink'              => 'rok xalás',
-'change-blocklink'         => 'rok aŧí radbadal',
-'contribslink'             => 'baŕáhík',
-'blocklogpage'             => 'Rok hisáb',
-'unblocklogentry'          => '$1 án rok mur kanningá',
+'blockip' => 'Kárband á rok xaļ',
+'ipboptions' => '2 ganŧa:2 hours,1 de:1 day,3 de:3 days,1 afta:1 week,2 afta:2 weeks,1 tú:1 month,3 tú:3 months,6 tú:6 months,1 sál:1 year,be kacc:infinite',
+'ipblocklist' => 'IP pajjár o kárbandpin ák ki rok laggok e iyá tá',
+'blocklink' => 'rok xaļ',
+'unblocklink' => 'rok xalás',
+'change-blocklink' => 'rok aŧí radbadal',
+'contribslink' => 'baŕáhík',
+'blocklogpage' => 'Rok hisáb',
+'unblocklogentry' => '$1 án rok mur kanningá',
 'block-log-flags-nocreate' => 'pinváxubí á rok xallingá',
 
 # Move page
-'movearticle'    => 'Panna e surif:',
-'newtitle'       => 'Púskuná sarhál á:',
-'movepagebtn'    => 'Panna e surif',
-'pagemovedsub'   => 'Surifing sarsob mass',
+'movearticle' => 'Panna e surif:',
+'newtitle' => 'Púskuná sarhál á:',
+'movepagebtn' => 'Panna e surif',
+'pagemovedsub' => 'Surifing sarsob mass',
 'movepage-moved' => '\'\'\'"$1" e "$2"\'\'\' á surifingáne',
-'articleexists'  => 'Anná pin aná panna málav án sáŕí e, yá ná tiroká pin ravá aff.
+'articleexists' => 'Anná pin aná panna málav án sáŕí e, yá ná tiroká pin ravá aff.
 Pen pin as gicen kar.',
-'movedto'        => 'dáng surifingá',
-'movetalk'       => 'Aviŕda ģá ítgap panna e surif',
-'movelogpage'    => 'Surifing ná hisáb',
-'movereason'     => 'Dalíl:',
-'revertmove'     => 'málav ná',
+'movedto' => 'dáng surifingá',
+'movetalk' => 'Aviŕda ģá ítgap panna e surif',
+'movelogpage' => 'Surifing ná hisáb',
+'movereason' => 'Dalíl:',
+'revertmove' => 'málav ná',
 
 # Namespace 8 related
 'allmessagesname' => 'Pin',
@@ -561,68 +558,68 @@ Pen pin as gicen kar.',
 'thumbnail-more' => 'Bhallun kar',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Ná kárbandí panna',
-'tooltip-pt-mytalk'               => 'Ná ítgap panna',
-'tooltip-pt-preferences'          => 'Ná gicenk',
-'tooltip-pt-watchlist'            => 'Amo panna ģátá rid aráfteŧí radbadal ná xiálí us',
-'tooltip-pt-mycontris'            => 'Ná baŕáhí tá rid',
-'tooltip-pt-login'                => 'Drustírástí kes to bház juán e, vale, lázum aff',
-'tooltip-pt-logout'               => 'Bidar mar',
-'tooltip-ca-talk'                 => 'Niviştánk ná bárav aŧ ítgap',
-'tooltip-ca-edit'                 => 'Num dá panna ŧí radbadal kanning kere. Radbadal áte aŧíko kanning án must sarí jác e ta zarúr albo.',
-'tooltip-ca-addsection'           => 'Púskuno vanđ asená biná kar',
-'tooltip-ca-viewsource'           => 'Dá panna rakk karok e.
+'tooltip-pt-userpage' => 'Ná kárbandí panna',
+'tooltip-pt-mytalk' => 'Ná ítgap panna',
+'tooltip-pt-preferences' => 'Ná gicenk',
+'tooltip-pt-watchlist' => 'Amo panna ģátá rid aráfteŧí radbadal ná xiálí us',
+'tooltip-pt-mycontris' => 'Ná baŕáhí tá rid',
+'tooltip-pt-login' => 'Drustírástí kes to bház juán e, vale, lázum aff',
+'tooltip-pt-logout' => 'Bidar mar',
+'tooltip-ca-talk' => 'Niviştánk ná bárav aŧ ítgap',
+'tooltip-ca-edit' => 'Num dá panna ŧí radbadal kanning kere. Radbadal áte aŧíko kanning án must sarí jác e ta zarúr albo.',
+'tooltip-ca-addsection' => 'Púskuno vanđ asená biná kar',
+'tooltip-ca-viewsource' => 'Dá panna rakk karok e.
 Dáná bumpad e unning kesa',
-'tooltip-ca-history'              => 'Dá panna ná málav ná şefbuŕz ák',
-'tooltip-ca-protect'              => 'Dá panna e rakk kar',
-'tooltip-ca-delete'               => 'Dá panna e mesa',
-'tooltip-ca-move'                 => 'Dá panna e surif',
-'tooltip-ca-watch'                => 'Dá panna e tená xiálí rid aŧí avár kar',
-'tooltip-ca-unwatch'              => 'Dá panna e tená xiálí rid án kaşşa',
-'tooltip-search'                  => '{{SITENAME}} aŧí paŧŧa',
-'tooltip-search-go'               => 'Aga caŧŧ andá pin aná panna are to in iyá ta',
-'tooltip-search-fulltext'         => 'Panna ģáteŧí dá laoz áte paŧŧa',
-'tooltip-p-logo'                  => 'Monpanna ģá in',
-'tooltip-n-mainpage'              => 'Monpanna ģá in',
-'tooltip-n-mainpage-description'  => 'Monpanna ģá in',
-'tooltip-n-portal'                => 'Kárem ná bábat, ní ant kanning kesa, giŕá te aráŕe paŧŧoí e',
-'tooltip-n-currentevents'         => 'Sáŕí sefbuŕz átá bumpadí cáindárí',
-'tooltip-n-recentchanges'         => 'Vikí ŧí zút áteaŧ maroká radbadal ák',
-'tooltip-n-randompage'            => 'Saŧŧí panna as mal',
-'tooltip-n-help'                  => 'Paŧŧing xaning ná jága',
-'tooltip-t-whatlinkshere'         => 'Ģuŧ amo vikí panna ģátá rid arfák dáŕe gańđoko',
-'tooltip-t-recentchangeslinked'   => 'Dá panna ton gańđoká panna ģáteŧí zút áteaŧ maroká radbadal ák',
-'tooltip-feed-rss'                => 'Dá panna kin RSS serí',
-'tooltip-feed-atom'               => 'Dá panna kin Atom serí',
-'tooltip-t-contributions'         => 'Dá kárband ná baŕáhí tá rid e ur',
-'tooltip-t-emailuser'             => 'Dá kárband e girokŧapál as mon et',
-'tooltip-t-upload'                => 'Fáil laggif',
-'tooltip-t-specialpages'          => 'Ģuŧŧ xás á panna ģátá ridband',
-'tooltip-t-print'                 => 'Dá panna ná chapáí droşum',
-'tooltip-t-permalink'             => 'Panna ná dá badaldroşum ná pakká gańđ',
-'tooltip-ca-nstab-main'           => 'Niviştánk ná panna e ur',
-'tooltip-ca-nstab-user'           => 'Kárband ná panna e ur',
-'tooltip-ca-nstab-special'        => 'Dá xáso panna as e. Ní dáŧí radbadal kanning kappesa.',
-'tooltip-ca-nstab-project'        => 'Bunkárem ná panna e ur',
-'tooltip-ca-nstab-image'          => 'Fáil ná panna e ur',
-'tooltip-ca-nstab-template'       => 'Kálib e ur',
-'tooltip-ca-nstab-category'       => 'Xáot panna e ur',
-'tooltip-minoredit'               => 'Dád cunko radbadal as leka',
-'tooltip-save'                    => 'Tená radbadal áte atíko kar',
-'tooltip-preview'                 => 'Tená radbadal átá sarí jác e aļ. Minnatvár!',
-'tooltip-diff'                    => 'Nivişt aŧí tená radbadal áte nişán et',
+'tooltip-ca-history' => 'Dá panna ná málav ná şefbuŕz ák',
+'tooltip-ca-protect' => 'Dá panna e rakk kar',
+'tooltip-ca-delete' => 'Dá panna e mesa',
+'tooltip-ca-move' => 'Dá panna e surif',
+'tooltip-ca-watch' => 'Dá panna e tená xiálí rid aŧí avár kar',
+'tooltip-ca-unwatch' => 'Dá panna e tená xiálí rid án kaşşa',
+'tooltip-search' => '{{SITENAME}} aŧí paŧŧa',
+'tooltip-search-go' => 'Aga caŧŧ andá pin aná panna are to in iyá ta',
+'tooltip-search-fulltext' => 'Panna ģáteŧí dá laoz áte paŧŧa',
+'tooltip-p-logo' => 'Monpanna ģá in',
+'tooltip-n-mainpage' => 'Monpanna ģá in',
+'tooltip-n-mainpage-description' => 'Monpanna ģá in',
+'tooltip-n-portal' => 'Kárem ná bábat, ní ant kanning kesa, giŕá te aráŕe paŧŧoí e',
+'tooltip-n-currentevents' => 'Sáŕí sefbuŕz átá bumpadí cáindárí',
+'tooltip-n-recentchanges' => 'Vikí ŧí zút áteaŧ maroká radbadal ák',
+'tooltip-n-randompage' => 'Saŧŧí panna as mal',
+'tooltip-n-help' => 'Paŧŧing xaning ná jága',
+'tooltip-t-whatlinkshere' => 'Ģuŧ amo vikí panna ģátá rid arfák dáŕe gańđoko',
+'tooltip-t-recentchangeslinked' => 'Dá panna ton gańđoká panna ģáteŧí zút áteaŧ maroká radbadal ák',
+'tooltip-feed-rss' => 'Dá panna kin RSS serí',
+'tooltip-feed-atom' => 'Dá panna kin Atom serí',
+'tooltip-t-contributions' => 'Dá kárband ná baŕáhí tá rid e ur',
+'tooltip-t-emailuser' => 'Dá kárband e girokŧapál as mon et',
+'tooltip-t-upload' => 'Fáil laggif',
+'tooltip-t-specialpages' => 'Ģuŧŧ xás á panna ģátá ridband',
+'tooltip-t-print' => 'Dá panna ná chapáí droşum',
+'tooltip-t-permalink' => 'Panna ná dá badaldroşum ná pakká gańđ',
+'tooltip-ca-nstab-main' => 'Niviştánk ná panna e ur',
+'tooltip-ca-nstab-user' => 'Kárband ná panna e ur',
+'tooltip-ca-nstab-special' => 'Dá xáso panna as e. Ní dáŧí radbadal kanning kappesa.',
+'tooltip-ca-nstab-project' => 'Bunkárem ná panna e ur',
+'tooltip-ca-nstab-image' => 'Fáil ná panna e ur',
+'tooltip-ca-nstab-template' => 'Kálib e ur',
+'tooltip-ca-nstab-category' => 'Xáot panna e ur',
+'tooltip-minoredit' => 'Dád cunko radbadal as leka',
+'tooltip-save' => 'Tená radbadal áte atíko kar',
+'tooltip-preview' => 'Tená radbadal átá sarí jác e aļ. Minnatvár!',
+'tooltip-diff' => 'Nivişt aŧí tená radbadal áte nişán et',
 'tooltip-compareselectedversions' => 'Dá panna ná irá gicen karok radbadal droşum tá niám aŧí fark e ur',
-'tooltip-watch'                   => 'Dá panna e tená xiálí rid aŧí avár kar',
-'tooltip-rollback'                => '"Ģuŧŧ e aŕsa" án dá panna ŧí guđđíko baŕáhí tirok ná ģuŧŧ radbadal ák asi dakk aŧí aŕsengira.',
-'tooltip-undo'                    => '"Aŕsa" e xalling án dá radbadal aŕsengik o sarí jác droşum aŧí radbadal ná darí malingik. Dáŕán bungap aŧí dalíl likking ná vár rasengik.',
-'tooltip-summary'                 => 'Guańđo bungapp as aviŕda kar',
+'tooltip-watch' => 'Dá panna e tená xiálí rid aŧí avár kar',
+'tooltip-rollback' => '"Ģuŧŧ e aŕsa" án dá panna ŧí guđđíko baŕáhí tirok ná ģuŧŧ radbadal ák asi dakk aŧí aŕsengira.',
+'tooltip-undo' => '"Aŕsa" e xalling án dá radbadal aŕsengik o sarí jác droşum aŧí radbadal ná darí malingik. Dáŕán bungap aŧí dalíl likking ná vár rasengik.',
+'tooltip-summary' => 'Guańđo bungapp as aviŕda kar',
 
 # Browsing diffs
 'previousdiff' => '← Mutkuná radbadal',
-'nextdiff'     => 'Púskuná radbadal',
+'nextdiff' => 'Púskuná radbadal',
 
 # Metadata
-'metadata-expand'   => 'Vaddíko hál e nişán et',
+'metadata-expand' => 'Vaddíko hál e nişán et',
 'metadata-collapse' => 'Vaddíko hál e đakka',
 
 # External editor support
@@ -631,12 +628,12 @@ Dáná bumpad e unning kesa',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ģuŧŧ',
 'namespacesall' => 'ģuŧŧ',
-'monthsall'     => 'ģuŧŧ',
+'monthsall' => 'ģuŧŧ',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Đek kunoká radbadal áke ur',
 'watchlisttools-edit' => 'Xiálí rid e ur o badal kar',
-'watchlisttools-raw'  => 'Bekacc á xiálírid aŧí radbadal kar',
+'watchlisttools-raw' => 'Bekacc á xiálírid aŧí radbadal kar',
 
 # Special:SpecialPages
 'specialpages' => 'Xás á panna ģák',
index cc8bc90..3db6342 100644 (file)
@@ -147,132 +147,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMJESECSKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMJESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALNIMJESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMJESECIMEROD', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMJESECSKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVRIJEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJPROMJENA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'STRANICA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'STRANICE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PROSTORSUBJEKTA', 'PROSTORCLANAKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PROSTORISUBJEKTA', 'PROSTORICLANKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMENAPODSTRANICE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEBAZNESTRANICE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMENABAZNESTRANICE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMESTRANICERAZGOVORA', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMENASTRANICERAZGOVORA', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMESTRANICESUBKJEKTA', 'IMESTRANICECLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMENASTRANICESUBJEKTA', 'IMENASTRANICECLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMJENI:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'd', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'l', 'left' ),
-       'img_none'                => array( '1', 'n', 'bez', 'none' ),
-       'img_width'               => array( '1', '$1piksel', '$1p', '$1px' ),
-       'img_center'              => array( '1', 'centar', 'c', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bez_okvira', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'granica', 'border' ),
-       'img_baseline'            => array( '1', 'pocetna_linija', 'baseline' ),
-       'img_sub'                 => array( '1', 'odjeljak', 'sub' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrh_teksta', 'text-top' ),
-       'img_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dugme', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dugme', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMESAJTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IP:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALNAADRESA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNEADRESE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'IMESERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTA', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'POL:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__BEZTC__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNASEDMICA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDOV', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNASEDMICA', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'IDREVIZIJE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVIZIJEDANA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVIZIJEDANA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVIZIJAMJESECA', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVIZIJAGODINE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVIZIJAVREMENSKOGPECATA', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LCPRVI:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCPRVI:', 'UCFIRST:' ),
-       'displaytitle'            => array( '1', 'POKAZINASLOV', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKNOVESEKCIJE__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'SADASNJAVERZIJA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'DEKODIRAJADRESU', 'URLENCODE:' ),
-       'currenttimestamp'        => array( '1', 'SADASNJIVREMENSKIPECAT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALNIVREMENSKIPECAT', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'pagesinnamespace'        => array( '1', 'STRANICEUIMENSKOMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINISTRATORA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'NUMERICKIFORMAT', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'JASTUKLIJEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'JASTUKDESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'specijalno', 'special' ),
-       'filepath'                => array( '0', 'STAZADATOTEKE:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKATEGORIJA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICEUKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELICINASTRANICE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__SADRZAJ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZSADRZAJA__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BROJUGRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISTICNOPREUSMJERENJE__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVOZASTITE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PUTANJA', 'PATH' ),
-       'url_query'               => array( '0', 'UPIT', 'QUERY' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMJESECSKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMJESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALNIMJESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMJESECIMEROD', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMJESECSKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVRIJEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJPROMJENA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'STRANICA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'STRANICE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PROSTORSUBJEKTA', 'PROSTORCLANAKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PROSTORISUBJEKTA', 'PROSTORICLANKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMENAPODSTRANICE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEBAZNESTRANICE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMENABAZNESTRANICE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMESTRANICERAZGOVORA', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMENASTRANICERAZGOVORA', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMESTRANICESUBKJEKTA', 'IMESTRANICECLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMENASTRANICESUBJEKTA', 'IMENASTRANICECLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMJENI:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'd', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'l', 'left' ),
+       'img_none'                  => array( '1', 'n', 'bez', 'none' ),
+       'img_width'                 => array( '1', '$1piksel', '$1p', '$1px' ),
+       'img_center'                => array( '1', 'centar', 'c', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bez_okvira', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'granica', 'border' ),
+       'img_baseline'              => array( '1', 'pocetna_linija', 'baseline' ),
+       'img_sub'                   => array( '1', 'odjeljak', 'sub' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrh_teksta', 'text-top' ),
+       'img_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dugme', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dugme', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMESAJTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IP:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALNAADRESA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNEADRESE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'IMESERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTA', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'POL:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__BEZTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNASEDMICA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDOV', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNASEDMICA', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'IDREVIZIJE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVIZIJEDANA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVIZIJEDANA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVIZIJAMJESECA', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVIZIJAGODINE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVIZIJAVREMENSKOGPECATA', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LCPRVI:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCPRVI:', 'UCFIRST:' ),
+       'displaytitle'              => array( '1', 'POKAZINASLOV', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKNOVESEKCIJE__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'SADASNJAVERZIJA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'DEKODIRAJADRESU', 'URLENCODE:' ),
+       'currenttimestamp'          => array( '1', 'SADASNJIVREMENSKIPECAT', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALNIVREMENSKIPECAT', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'pagesinnamespace'          => array( '1', 'STRANICEUIMENSKOMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINISTRATORA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'NUMERICKIFORMAT', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'JASTUKLIJEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'JASTUKDESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'specijalno', 'special' ),
+       'filepath'                  => array( '0', 'STAZADATOTEKE:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKATEGORIJA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICEUKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELICINASTRANICE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__SADRZAJ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZSADRZAJA__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BROJUGRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISTICNOPREUSMJERENJE__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVOZASTITE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PUTANJA', 'PATH' ),
+       'url_query'                 => array( '0', 'UPIT', 'QUERY' ),
 );
 
 $fallback8bitEncoding = "iso-8859-2";
@@ -523,7 +523,7 @@ $1',
 'disclaimerpage' => 'Project:Uslovi korištenja, pravne napomene i odricanje odgovornosti',
 'edithelp' => 'Pomoć pri uređivanju stranice',
 'edithelppage' => 'Help:Uređivanje',
-'helppage' => 'Pomoć:Sadržaj',
+'helppage' => 'Help:Sadržaj',
 'mainpage' => 'Početna strana',
 'mainpage-description' => 'Početna strana',
 'policy-url' => 'Project:Pravila',
@@ -666,6 +666,7 @@ $2',
 'ns-specialprotected' => 'Specijalne stranice se ne mogu uređivati.',
 'titleprotected' => 'Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].
 Iz razloga "\'\'$2\'\'".',
+'exception-nologin' => 'Niste prijavljeni',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -675,7 +676,7 @@ Iz razloga "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Sad ste odjavljeni.'''
 
-Možete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo [[Special:UserLogin|prijaviti]] kao isti ili kao drugi korisnik.
+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.
@@ -1299,8 +1300,6 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 'search-interwiki-caption' => 'Srodni projekti',
 'search-interwiki-default' => '$1 rezultati:',
 'search-interwiki-more' => '(više)',
-'search-mwsuggest-enabled' => 'sa sugestijama',
-'search-mwsuggest-disabled' => 'bez sugestija',
 'search-relatedarticle' => 'Povezano',
 'mwsuggest-disable' => 'Onemogući AJAX prijedloge',
 'searcheverything-enable' => 'Traži u svim imenskim prostorima',
@@ -2894,7 +2893,6 @@ Nedostaje privremeni folder.',
 
 # JavaScriptTest
 'javascripttest' => 'Testiranje JavaScript-e',
-'javascripttest-disabled' => 'Ova funkcija je onemogućena na ovom wikiju.',
 '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".',
@@ -3022,6 +3020,8 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
 'pageinfo-header-edits' => 'Izmjene',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-article-id' => 'ID stranice',
 'pageinfo-views' => 'Broj pogleda',
 'pageinfo-watchers' => 'Broj onih koji pregledaju',
 'pageinfo-edits' => 'Broj izmjena',
@@ -3922,6 +3922,10 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 'feedback-bugcheck' => 'Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom "bugu"].',
 'feedback-bugnew' => 'Provjereno. 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 662d45e..c4003b0 100644 (file)
@@ -16,263 +16,263 @@ $fallback = "id";
 
 $messages = array(
 # Dates
-'sunday'        => "Āha'",
-'monday'        => 'Asenéŋ',
-'tuesday'       => 'Salasa',
-'wednesday'     => 'Araba',
-'thursday'      => "Kamisi'",
-'friday'        => 'Jumā',
-'saturday'      => 'Sattu',
-'sun'           => 'Āha',
-'mon'           => 'Ase',
-'tue'           => 'Sal',
-'wed'           => 'Ara',
-'thu'           => 'Kam',
-'fri'           => 'Jum',
-'sat'           => 'Sat',
-'january'       => 'Januari',
-'february'      => 'Fébruari',
-'march'         => "Maré'",
-'april'         => 'April',
-'may_long'      => 'Méi',
-'june'          => 'Juni',
-'july'          => 'Juli',
-'august'        => "Ogoso'",
-'september'     => 'September',
-'october'       => 'Oktober',
-'november'      => 'November',
-'december'      => 'Désémber',
-'january-gen'   => 'Januari',
-'february-gen'  => 'Fébruari',
-'march-gen'     => "Maré'",
-'april-gen'     => 'April',
-'may-gen'       => 'Méi',
-'june-gen'      => 'Juni',
-'july-gen'      => 'Juli',
-'august-gen'    => "Ogoso'",
+'sunday' => "Āha'",
+'monday' => 'Asenéŋ',
+'tuesday' => 'Salasa',
+'wednesday' => 'Araba',
+'thursday' => "Kamisi'",
+'friday' => 'Jumā',
+'saturday' => 'Sattu',
+'sun' => 'Āha',
+'mon' => 'Ase',
+'tue' => 'Sal',
+'wed' => 'Ara',
+'thu' => 'Kam',
+'fri' => 'Jum',
+'sat' => 'Sat',
+'january' => 'Januari',
+'february' => 'Fébruari',
+'march' => "Maré'",
+'april' => 'April',
+'may_long' => 'Méi',
+'june' => 'Juni',
+'july' => 'Juli',
+'august' => "Ogoso'",
+'september' => 'September',
+'october' => 'Oktober',
+'november' => 'November',
+'december' => 'Désémber',
+'january-gen' => 'Januari',
+'february-gen' => 'Fébruari',
+'march-gen' => "Maré'",
+'april-gen' => 'April',
+'may-gen' => 'Méi',
+'june-gen' => 'Juni',
+'july-gen' => 'Juli',
+'august-gen' => "Ogoso'",
 'september-gen' => 'September',
-'october-gen'   => 'Oktober',
-'november-gen'  => 'November',
-'december-gen'  => 'Désémber',
+'october-gen' => 'Oktober',
+'november-gen' => 'November',
+'december-gen' => 'Désémber',
 
 # Categories related messages
 'category_header' => 'Leppa rilaleŋ kategori "$1"',
-'subcategories'   => 'Subkategori',
-
-'about'      => 'Atajangeng',
-'article'    => 'Lontara',
-'cancel'     => 'Rusa',
-'mypage'     => "Leppana iya'",
-'mytalk'     => 'Bicarana iyya',
-'anontalk'   => 'Bicarana IP édé',
+'subcategories' => 'Subkategori',
+
+'about' => 'Atajangeng',
+'article' => 'Lontara',
+'cancel' => 'Rusa',
+'mypage' => "Leppana iya'",
+'mytalk' => 'Bicarana iyya',
+'anontalk' => 'Bicarana IP édé',
 'navigation' => 'Navigasi',
-'and'        => '&#32;na',
+'and' => '&#32;na',
 
 # Cologne Blue skin
-'qbfind'         => 'Assapparang',
-'qbbrowse'       => 'Berowoso',
-'qbedit'         => 'Padécéŋ',
-'qbpageoptions'  => 'Édé leppa',
-'qbpageinfo'     => 'Konteks',
-'qbmyoptions'    => "Leppana iya'",
+'qbfind' => 'Assapparang',
+'qbbrowse' => 'Berowoso',
+'qbedit' => 'Padécéŋ',
+'qbpageoptions' => 'Édé leppa',
+'qbpageinfo' => 'Konteks',
+'qbmyoptions' => "Leppana iya'",
 'qbspecialpages' => 'Leppa spésiala',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-move'     => "Paléccé'",
-'vector-view-create'     => 'Ebbu',
-'vector-view-edit'       => 'Padéccéng',
-'vector-view-view'       => 'Baca',
+'vector-action-move' => "Paléccé'",
+'vector-view-create' => 'Ebbu',
+'vector-view-edit' => 'Padéccéng',
+'vector-view-view' => 'Baca',
 'vector-view-viewsource' => 'Ita sumber',
 
-'errorpagetitle'   => 'Asalaŋ',
-'returnto'         => 'Lisu ri $1.',
-'tagline'          => 'Polé {{SITENAME}}',
-'help'             => 'Paŋinriŋ',
-'search'           => 'Assapparaŋ',
-'searchbutton'     => 'Sappa',
-'go'               => 'Lao',
-'searcharticle'    => 'Lao',
-'history'          => 'Versi riolo leppaë',
-'history_short'    => 'versi riolo',
-'permalink'        => 'Pranala permanen',
-'edit'             => 'Padécéŋ',
-'create'           => 'Ebbu',
-'editthispage'     => 'Padécéŋiki iyé leppa',
+'errorpagetitle' => 'Asalaŋ',
+'returnto' => 'Lisu ri $1.',
+'tagline' => 'Polé {{SITENAME}}',
+'help' => 'Paŋinriŋ',
+'search' => 'Assapparaŋ',
+'searchbutton' => 'Sappa',
+'go' => 'Lao',
+'searcharticle' => 'Lao',
+'history' => 'Versi riolo leppaë',
+'history_short' => 'versi riolo',
+'permalink' => 'Pranala permanen',
+'edit' => 'Padécéŋ',
+'create' => 'Ebbu',
+'editthispage' => 'Padécéŋiki iyé leppa',
 'create-this-page' => 'Ebbuiki leppa iyé',
-'delete'           => 'Peddé',
-'deletethispage'   => 'Peddé iyé leppa',
-'protect'          => 'Accalinruŋi',
-'protect_change'   => 'pinra',
-'protectthispage'  => 'Accalinruŋi leppa iyyé',
-'unprotect'        => 'Téccalinruŋi',
-'newpage'          => 'Leppa baru',
-'talkpage'         => 'Bicara iyé leppa',
+'delete' => 'Peddé',
+'deletethispage' => 'Peddé iyé leppa',
+'protect' => 'Accalinruŋi',
+'protect_change' => 'pinra',
+'protectthispage' => 'Accalinruŋi leppa iyyé',
+'unprotect' => 'Téccalinruŋi',
+'newpage' => 'Leppa baru',
+'talkpage' => 'Bicara iyé leppa',
 'talkpagelinktext' => 'Bicara',
-'specialpage'      => 'Leppa spésiala',
-'personaltools'    => 'Tool sialé-alé',
-'articlepage'      => 'Ita lontara',
-'talk'             => 'Bicara',
-'toolbox'          => 'Toolbox',
-'userpage'         => 'Ita leppa papaké',
-'projectpage'      => 'Ita leppa proyék',
-'imagepage'        => 'Ita leppa rapaŋ',
-'mediawikipage'    => 'Ita leppa méséje',
-'templatepage'     => 'Ita leppa templata',
-'viewhelppage'     => 'Ita leppa panginriŋ',
-'categorypage'     => 'Ita leppa kategori',
-'viewtalkpage'     => 'Ita leppa bicara',
-'redirectedfrom'   => '(Riredirect polé $1)',
-'redirectpagesub'  => 'Leppa redirect',
-'jumpto'           => 'Luppe lao:',
-'jumptosearch'     => 'sappa',
+'specialpage' => 'Leppa spésiala',
+'personaltools' => 'Tool sialé-alé',
+'articlepage' => 'Ita lontara',
+'talk' => 'Bicara',
+'toolbox' => 'Toolbox',
+'userpage' => 'Ita leppa papaké',
+'projectpage' => 'Ita leppa proyék',
+'imagepage' => 'Ita leppa rapaŋ',
+'mediawikipage' => 'Ita leppa méséje',
+'templatepage' => 'Ita leppa templata',
+'viewhelppage' => 'Ita leppa panginriŋ',
+'categorypage' => 'Ita leppa kategori',
+'viewtalkpage' => 'Ita leppa bicara',
+'redirectedfrom' => '(Riredirect polé $1)',
+'redirectpagesub' => 'Leppa redirect',
+'jumpto' => 'Luppe lao:',
+'jumptosearch' => 'sappa',
 
 # 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}}',
-'currentevents'        => 'Accanjingeŋ kokkoro',
-'currentevents-url'    => 'Project:Accanjingeŋ kokkoro',
-'disclaimers'          => 'Diseklaima',
-'edithelp'             => 'Paŋinriŋ mapadécéŋ',
-'edithelppage'         => 'Help:Mapadécéŋ',
-'helppage'             => 'Help:Lise',
-'mainpage'             => 'Leppa Indoë',
+'aboutsite' => 'Tentang {{SITENAME}}',
+'currentevents' => 'Accanjingeŋ kokkoro',
+'currentevents-url' => 'Project:Accanjingeŋ kokkoro',
+'disclaimers' => 'Diseklaima',
+'edithelp' => 'Paŋinriŋ mapadécéŋ',
+'edithelppage' => 'Help:Mapadécéŋ',
+'helppage' => 'Help:Lise',
+'mainpage' => 'Leppa Indoë',
 'mainpage-description' => 'Leppa Indoë',
-'portal'               => 'Portal komunitas',
+'portal' => 'Portal komunitas',
 
 'newmessageslink' => 'pappaseŋ baru',
-'editsection'     => 'padécéŋ',
-'editold'         => 'padécéŋ',
-'viewsourceold'   => 'ita sumber',
-'editlink'        => 'padécéŋ',
-'viewsourcelink'  => 'ita sumber',
+'editsection' => 'padécéŋ',
+'editold' => 'padécéŋ',
+'viewsourceold' => 'ita sumber',
+'editlink' => 'padécéŋ',
+'viewsourcelink' => 'ita sumber',
 'editsectionhint' => 'Padécéŋ kajuru: $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Leppa',
-'nstab-user'      => 'Leppa papaké',
-'nstab-media'     => 'Leppa média',
-'nstab-special'   => 'Leppa spésiala',
-'nstab-project'   => 'Proyek',
-'nstab-image'     => 'Rapang',
+'nstab-main' => 'Leppa',
+'nstab-user' => 'Leppa papaké',
+'nstab-media' => 'Leppa média',
+'nstab-special' => 'Leppa spésiala',
+'nstab-project' => 'Proyek',
+'nstab-image' => 'Rapang',
 'nstab-mediawiki' => 'Pappaseŋ',
-'nstab-template'  => 'Templata',
-'nstab-help'      => 'Paŋinriŋ',
-'nstab-category'  => 'Kategori',
+'nstab-template' => 'Templata',
+'nstab-help' => 'Paŋinriŋ',
+'nstab-category' => 'Kategori',
 
 # Main script and global functions
 'nosuchspecialpage' => "Iyaro leppa spésiala dé'na eŋka",
 
 # General errors
-'error'               => 'Éro',
-'databaseerror'       => 'Éro databése',
-'readonly'            => 'Databése rikonci',
+'error' => 'Éro',
+'databaseerror' => 'Éro databése',
+'readonly' => 'Databése rikonci',
 'missingarticle-diff' => '(Beda: $1, $2)',
-'internalerror'       => 'Éro internal',
-'internalerror_info'  => 'Éro internal: $1',
-'badtitle'            => 'Judul dek essa',
-'viewsource'          => 'Ita sumber',
+'internalerror' => 'Éro internal',
+'internalerror_info' => 'Éro internal: $1',
+'badtitle' => 'Judul dek essa',
+'viewsource' => 'Ita sumber',
 
 # Virus scanner
 'virus-unknownscanner' => "Antivirus dé' riisseŋ:",
 
 # Login and logout pages
-'yourname'                => 'Aseŋ papaké:',
-'yourpassword'            => 'Adacili:',
-'login'                   => 'log attama',
+'yourname' => 'Aseŋ papaké:',
+'yourpassword' => 'Adacili:',
+'login' => 'log attama',
 'nav-login-createaccount' => 'Log attama / ebbu akun',
-'userlogin'               => 'Log attama / ebbu akun',
-'logout'                  => 'Log essu',
-'userlogout'              => 'Log essu',
-'notloggedin'             => 'Déppa log attama',
-'nologin'                 => "Dé' gaga akaun? '''$1'''.",
-'nologinlink'             => 'Ebbu akun',
-'createaccount'           => 'Ebbu akun',
-'gotaccount'              => "Purani eŋka akun? '''$1'''.",
-'gotaccountlink'          => 'Log attama',
-'loginerror'              => 'Éro log attama',
-'mailmypassword'          => 'E-mail adacili baru',
+'userlogin' => 'Log attama / ebbu akun',
+'logout' => 'Log essu',
+'userlogout' => 'Log essu',
+'notloggedin' => 'Déppa log attama',
+'nologin' => "Dé' gaga akaun? '''$1'''.",
+'nologinlink' => 'Ebbu akun',
+'createaccount' => 'Ebbu akun',
+'gotaccount' => "Purani eŋka akun? '''$1'''.",
+'gotaccountlink' => 'Log attama',
+'loginerror' => 'Éro log attama',
+'mailmypassword' => 'E-mail adacili baru',
 
 # Change password dialog
 'oldpassword' => 'Pasewodo matoa:',
 
 # Edit page toolbar
-'bold_tip'    => 'Teks maumpek',
-'italic_tip'  => 'Teks Italik',
+'bold_tip' => 'Teks maumpek',
+'italic_tip' => 'Teks Italik',
 'extlink_tip' => 'Link risaliweŋ (jangan lupa awalan http:// )',
 
 # Edit pages
-'savearticle'      => 'Taro leppa',
-'preview'          => 'Pribiu',
-'showpreview'      => 'Ita pribiu',
-'showlivepreview'  => 'Pribiu live',
-'showdiff'         => 'Mita perubahan',
-'summary-preview'  => 'Pribiu summary:',
-'blockedtitle'     => 'Papaké riblok',
-'accmailtitle'     => 'Ada sandi ni riantarak.',
-'accmailtext'      => 'Ada sandi "$1" riantarak ri $2.',
+'savearticle' => 'Taro leppa',
+'preview' => 'Pribiu',
+'showpreview' => 'Ita pribiu',
+'showlivepreview' => 'Pribiu live',
+'showdiff' => 'Mita perubahan',
+'summary-preview' => 'Pribiu summary:',
+'blockedtitle' => 'Papaké riblok',
+'accmailtitle' => 'Ada sandi ni riantarak.',
+'accmailtext' => 'Ada sandi "$1" riantarak ri $2.',
 'anontalkpagetext' => "----''Ini adalah halaman diskusi untuk pengguna anonim yang belum membuat rekening atau tidak menggunakannya. Karena tidak membuat rekening, kami terpaksa memakai alamat IP untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak berkaitan dengan anda, kami anjurkan untuk [[Special:UserLogin|membuat rekening atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain.''",
-'editing'          => 'Mapadécéŋ $1',
+'editing' => 'Mapadécéŋ $1',
 
 # History pages
-'previousrevision'    => '←Revisi riolo',
+'previousrevision' => '←Revisi riolo',
 'currentrevisionlink' => 'Revisi tannapa',
-'page_first'          => 'séuwani',
-'histfirst'           => 'Poŋ loa',
-'histlast'            => 'Poŋ nappa',
-'historysize'         => '($1 {{PLURAL:$1|bita|bita}})',
-'historyempty'        => '(kapa)',
+'page_first' => 'séuwani',
+'histfirst' => 'Poŋ loa',
+'histlast' => 'Poŋ nappa',
+'historysize' => '($1 {{PLURAL:$1|bita|bita}})',
+'historyempty' => '(kapa)',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 ri $2',
 
 # Revision deletion
-'rev-deleted-comment'    => '(komentar ripeddé)',
-'rev-deleted-user'       => '(ripeddéni aseŋna papakeë)',
-'rev-deleted-event'      => '(log gau ripeddéni)',
-'rev-delundel'           => "pakitaï/tapo'",
-'revdelete-selected'     => "'''{{PLURAL:$2|Revisi|Revisi-revisi}} ripiléna [[$1]]ë:'''",
-'logdelete-selected'     => "'''{{PLURAL:$1|Log|Log-log}} ripilé:'''",
-'revdelete-hide-text'    => 'Tapoïki text revisië',
+'rev-deleted-comment' => '(komentar ripeddé)',
+'rev-deleted-user' => '(ripeddéni aseŋna papakeë)',
+'rev-deleted-event' => '(log gau ripeddéni)',
+'rev-delundel' => "pakitaï/tapo'",
+'revdelete-selected' => "'''{{PLURAL:$2|Revisi|Revisi-revisi}} ripiléna [[$1]]ë:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Log|Log-log}} ripilé:'''",
+'revdelete-hide-text' => 'Tapoïki text revisië',
 'revdelete-hide-comment' => 'Tapo komentar mapadecéŋ',
-'revdelete-hide-user'    => 'Tapo aseŋ papakéna/IPna papadéceŋë',
-'revdelete-log'          => 'Saba:',
+'revdelete-hide-user' => 'Tapo aseŋ papakéna/IPna papadéceŋë',
+'revdelete-log' => 'Saba:',
 
 # Diffs
 'editundo' => 'undo',
 
 # Search results
-'searchsubtitle'        => "Masappa iko '''[[:$1]]'''",
+'searchsubtitle' => "Masappa iko '''[[:$1]]'''",
 'searchsubtitleinvalid' => "Massappa iko '''$1'''",
-'viewprevnext'          => 'Ita ($1 {{int:pipe-separator}} $2) ($3)',
-'searchhelp-url'        => 'Help:Lise',
-'search-result-size'    => '$1 ({{PLURAL:$2|1 ada|$2 ada}})',
-'search-redirect'       => '(redirect $1)',
+'viewprevnext' => 'Ita ($1 {{int:pipe-separator}} $2) ($3)',
+'searchhelp-url' => 'Help:Lise',
+'search-result-size' => '$1 ({{PLURAL:$2|1 ada|$2 ada}})',
+'search-redirect' => '(redirect $1)',
 
 # Quickbar
 'qbsettings-none' => 'Dégaga',
 
 # Preferences page
-'mypreferences'     => 'Bérékkeŋeŋna iyya',
-'prefsnologin'      => "Déppa ma'log attama'",
-'prefs-watchlist'   => 'Watchlist',
-'prefs-misc'        => 'Misc',
-'saveprefs'         => 'Taro',
-'prefs-editing'     => 'Mapadécéŋ',
+'mypreferences' => 'Bérékkeŋeŋna iyya',
+'prefsnologin' => "Déppa ma'log attama'",
+'prefs-watchlist' => 'Watchlist',
+'prefs-misc' => 'Misc',
+'saveprefs' => 'Taro',
+'prefs-editing' => 'Mapadécéŋ',
 'searchresultshead' => 'Masappa',
-'youremail'         => 'E-mail:',
-'username'          => 'Aseŋ papaké:',
-'uid'               => 'ID papaké:',
-'email'             => 'E-mail',
+'youremail' => 'E-mail:',
+'username' => 'Aseŋ papaké:',
+'uid' => 'ID papaké:',
+'email' => 'E-mail',
 
 # Groups
 'group-sysop' => 'Puŋgawa',
-'group-all'   => '(sininna)',
+'group-all' => '(sininna)',
 
-'group-user-member'  => '{{GENDER:$1|Pappaké}}',
+'group-user-member' => '{{GENDER:$1|Pappaké}}',
 'group-sysop-member' => 'Puŋgawa',
 
-'grouppage-user'  => '{{ns:project}}:Pappaké',
+'grouppage-user' => '{{ns:project}}:Pappaké',
 'grouppage-sysop' => '{{ns:project}}:Puŋgawa',
 
 # Rights
@@ -280,77 +280,77 @@ $messages = array(
 'right-edit' => 'Mappadécéŋi leppa',
 
 # Recent changes
-'recentchanges'   => 'Pappakinra tanappa',
-'rcshowhidebots'  => '$1 bot',
-'rcshowhideliu'   => "$1 papaké mattama' log",
+'recentchanges' => 'Pappakinra tanappa',
+'rcshowhidebots' => '$1 bot',
+'rcshowhideliu' => "$1 papaké mattama' log",
 'rcshowhideanons' => '$1 papaké anon',
-'diff'            => 'beda',
-'hide'            => 'Tapok',
+'diff' => 'beda',
+'hide' => 'Tapok',
 'minoreditletter' => 'k',
-'newpageletter'   => 'B',
-'boteditletter'   => 'b',
+'newpageletter' => 'B',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Pappakapinra terkait',
-'recentchangeslinked-feed'    => 'Pappakapinra terkait',
+'recentchangeslinked' => 'Pappakapinra terkait',
+'recentchangeslinked-feed' => 'Pappakapinra terkait',
 'recentchangeslinked-toolbox' => 'Pappakapinra terkait',
 
 # Upload
-'upload'    => 'Lureng berkas',
+'upload' => 'Lureng berkas',
 'uploadbtn' => 'Lureng berkas',
 
 # Special:ListFiles
 'listfiles_name' => 'Aseŋ',
 
 # File description page
-'file-anchor-link'    => 'Rapang',
-'filehist-user'       => 'Papaké',
+'file-anchor-link' => 'Rapang',
+'filehist-user' => 'Papaké',
 'filehist-dimensions' => 'Dimensi',
-'imagelinks'          => 'Liŋke',
+'imagelinks' => 'Liŋke',
 
 # File deletion
-'filedelete'             => 'Mapeddé $1',
-'filedelete-legend'      => 'Mapeddé berkas',
-'filedelete-intro'       => "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
-'filedelete-submit'      => 'Peddé',
-'filedelete-success'     => "'''$1''' purani ripeddé.",
+'filedelete' => 'Mapeddé $1',
+'filedelete-legend' => 'Mapeddé berkas',
+'filedelete-intro' => "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
+'filedelete-submit' => 'Peddé',
+'filedelete-success' => "'''$1''' purani ripeddé.",
 'filedelete-success-old' => "Berkas '''[[Media:$1|$1]]''' versi $3, $2 purani ripeddé.",
-'filedelete-nofile'      => "'''$1''' dé'na eŋka.",
+'filedelete-nofile' => "'''$1''' dé'na eŋka.",
 
 # MIME search
 'mimesearch' => 'Assapparaŋ MIME',
-'mimetype'   => 'Tipe MIME:',
-'download'   => 'unduh',
+'mimetype' => 'Tipe MIME:',
+'download' => 'unduh',
 
 # Random page
-'randompage'         => 'Leppa random',
+'randompage' => 'Leppa random',
 'randompage-nopages' => 'Degaga leppa rilaleŋ iyyé namespaceë.',
 
 # Statistics
 'statistics-articles' => 'Leppa liseë',
-'statistics-pages'    => 'Leppaë',
-'statistics-files'    => 'File-file nalise menré',
+'statistics-pages' => 'Leppaë',
+'statistics-files' => 'File-file nalise menré',
 
 # Miscellaneous special pages
 'ancientpages' => 'Leppa talloa',
-'move'         => 'Paleccé',
+'move' => 'Paleccé',
 'movethispage' => 'Paleccé leppa iyyé',
 
 # Special:Log
 'specialloguserlabel' => 'Papaké:',
-'log'                 => 'Log',
-'all-logs-page'       => 'Maneŋ log',
+'log' => 'Log',
+'all-logs-page' => 'Maneŋ log',
 
 # Special:AllPages
-'allpages'          => 'Maneng halamang',
-'alphaindexline'    => '$1 ri $2',
-'allpagesfrom'      => 'Mappaitang halamang-halamang rimulai:',
-'allarticles'       => 'Sininna leppa',
-'allinnamespace'    => 'Maneŋ leppa (namespace $1)',
+'allpages' => 'Maneng halamang',
+'alphaindexline' => '$1 ri $2',
+'allpagesfrom' => 'Mappaitang halamang-halamang rimulai:',
+'allarticles' => 'Sininna leppa',
+'allinnamespace' => 'Maneŋ leppa (namespace $1)',
 'allnotinnamespace' => 'Maneŋ leppa (tania rilaleŋ namespace $1)',
-'allpagesnext'      => 'Selanjutnya',
-'allpagessubmit'    => 'Lanre',
-'allpagesprefix'    => 'Mappaitang halamang-halamang éngkalinga awang:',
+'allpagesnext' => 'Selanjutnya',
+'allpagessubmit' => 'Lanre',
+'allpagesprefix' => 'Mappaitang halamang-halamang éngkalinga awang:',
 
 # Special:Categories
 'categories' => 'Maneŋ kategori',
@@ -361,12 +361,12 @@ Halamang bicara éréngé gabungan halamang bicara pada wettu depan didaftarkan
 éréngé halamang akan wessi '''umpek''' ri [[Special:RecentChanges|daftar pinra tanappa]] barak lebih lemmak ita.
 
 Apak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\" pada kolom ri sedde.",
-'watch'          => 'Ampi',
-'unwatch'        => 'Tenriampi',
+'watch' => 'Ampi',
+'unwatch' => 'Tenriampi',
 
 # Delete
 'actioncomplete' => 'Proses makkapo',
-'dellogpage'     => 'Log peddé-peddé',
+'dellogpage' => 'Log peddé-peddé',
 
 # Protect
 'prot_1movedto2' => '[[$1]] ésuk ri [[$2]]',
@@ -377,45 +377,45 @@ Apak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\"
 'sp-contributions-talk' => 'Bicara',
 
 # What links here
-'whatlinkshere'       => 'Pranala ri leppa iyéwé',
-'whatlinkshere-page'  => 'Leppa:',
+'whatlinkshere' => 'Pranala ri leppa iyéwé',
+'whatlinkshere-page' => 'Leppa:',
 'whatlinkshere-links' => '← liŋke',
 
 # Block/unblock
 'ipblocklist-submit' => 'Sappa',
-'blocklink'          => 'blok',
-'contribslink'       => 'kontrib',
+'blocklink' => 'blok',
+'contribslink' => 'kontrib',
 
 # Move page
-'articleexists'             => 'Leppa béla ida pile ni ujuk, a dek essa.
+'articleexists' => 'Leppa béla ida pile ni ujuk, a dek essa.
 Silakan pile aseng laing.',
-'movelogpage'               => 'Log leccé',
-'movereason'                => 'Saba:',
-'delete_and_move'           => 'Peddé nappa paleccé',
-'delete_and_move_text'      => '==Mapeddé riperelu==
+'movelogpage' => 'Log leccé',
+'movereason' => 'Saba:',
+'delete_and_move' => 'Peddé nappa paleccé',
+'delete_and_move_text' => '==Mapeddé riperelu==
 Leppa destinasi "[[:$1]]" purani eŋka.
 Eloko peddéï supaya weddiŋi mapalecé?',
-'delete_and_move_confirm'   => "Iyé', peddé iyaro leppa",
-'delete_and_move_reason'    => 'Ripeddé supaya weddiŋi mapalecé',
+'delete_and_move_confirm' => "Iyé', peddé iyaro leppa",
+'delete_and_move_reason' => 'Ripeddé supaya weddiŋi mapalecé',
 'immobile-source-namespace' => 'Leppa-leppa rilaleŋna namespace "$1"ë de\'na ullé ripaleccé',
-'immobile-source-page'      => "Iyyedé leppaë de'na ullé ripaleccé.",
+'immobile-source-page' => "Iyyedé leppaë de'na ullé ripaleccé.",
 
 # Namespace 8 related
-'allmessages'        => 'Maneng pappaseng',
-'allmessagesname'    => 'Aseng',
+'allmessages' => 'Maneng pappaseng',
+'allmessagesname' => 'Aseng',
 'allmessagesdefault' => 'Teks totok',
 'allmessagescurrent' => 'Teks kokkoro',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'      => "Leppa papaké iya'",
-'tooltip-pt-mytalk'        => "Leppa bicara iya'",
-'tooltip-pt-preferences'   => "Preferencena iya'",
-'tooltip-pt-logout'        => 'Log maessu',
-'tooltip-ca-talk'          => 'Pabicarana iyé leppa',
-'tooltip-ca-move'          => 'Paléccé leppa édé',
-'tooltip-search'           => 'Sappa ri {{SITENAME}}',
-'tooltip-search-go'        => 'Lao ri leppa aseŋna pappada iyyé rekko eŋkaï',
-'tooltip-n-mainpage'       => 'Lao ri Leppa Indoë',
+'tooltip-pt-userpage' => "Leppa papaké iya'",
+'tooltip-pt-mytalk' => "Leppa bicara iya'",
+'tooltip-pt-preferences' => "Preferencena iya'",
+'tooltip-pt-logout' => 'Log maessu',
+'tooltip-ca-talk' => 'Pabicarana iyé leppa',
+'tooltip-ca-move' => 'Paléccé leppa édé',
+'tooltip-search' => 'Sappa ri {{SITENAME}}',
+'tooltip-search-go' => 'Lao ri leppa aseŋna pappada iyyé rekko eŋkaï',
+'tooltip-n-mainpage' => 'Lao ri Leppa Indoë',
 'tooltip-ca-nstab-special' => "Iyanaéwé séuwa leppa spésiala', dé'na idi' ullé padécéŋiki",
 
 # Attribution
@@ -430,48 +430,48 @@ Eloko peddéï supaya weddiŋi mapalecé?',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'maneŋ',
 'namespacesall' => 'maneŋ',
-'monthsall'     => 'maneŋ',
+'monthsall' => 'maneŋ',
 
 # Multipage image navigation
-'imgmultigo'   => 'Lao!',
+'imgmultigo' => 'Lao!',
 'imgmultigoto' => 'Lao ri leppa $1',
 
 # Table pager
-'ascending_abbrev'         => 'énré',
-'descending_abbrev'        => 'no',
-'table_pager_first'        => 'Leppa séuwani',
+'ascending_abbrev' => 'énré',
+'descending_abbrev' => 'no',
+'table_pager_first' => 'Leppa séuwani',
 'table_pager_limit_submit' => 'Lao',
 
 # Auto-summaries
 'autosumm-replace' => "Masullé leppaë lao '$1'",
-'autosumm-new'     => "Leppa baru: '$1'",
+'autosumm-new' => "Leppa baru: '$1'",
 
 # Size units
-'size-bytes'     => '$1 B',
+'size-bytes' => '$1 B',
 'size-kilobytes' => '$1 KB',
 'size-megabytes' => '$1 MB',
 'size-gigabytes' => '$1 GB',
 
 # Live preview
 'livepreview-loading' => 'Mallise…',
-'livepreview-ready'   => 'Mallise… Sokkuni!',
+'livepreview-ready' => 'Mallise… Sokkuni!',
 
 # Special:Version
 'version-specialpages' => 'Leppa spésiala',
 
 # Special:SpecialPages
-'specialpages'                 => 'Leppa spésiala',
-'specialpages-note'            => '----
+'specialpages' => 'Leppa spésiala',
+'specialpages-note' => '----
 * Leppa spésiala normal
 * <strong class="mw-specialpagerestricted">Leppa spésiala terbatas</strong>',
-'specialpages-group-other'     => 'Leppa spésiala laiŋë',
-'specialpages-group-login'     => 'Log attama / mendaftar',
-'specialpages-group-changes'   => 'Pinrana tanappaë sibawa logeë',
-'specialpages-group-users'     => 'Papaké sibawa hak-hak',
-'specialpages-group-pages'     => 'Sininna leppaë',
+'specialpages-group-other' => 'Leppa spésiala laiŋë',
+'specialpages-group-login' => 'Log attama / mendaftar',
+'specialpages-group-changes' => 'Pinrana tanappaë sibawa logeë',
+'specialpages-group-users' => 'Papaké sibawa hak-hak',
+'specialpages-group-pages' => 'Sininna leppaë',
 'specialpages-group-pagetools' => 'Tool leppaë',
-'specialpages-group-wiki'      => 'Data sibawa tool wiki',
-'specialpages-group-spam'      => 'Tool spam',
+'specialpages-group-wiki' => 'Data sibawa tool wiki',
+'specialpages-group-spam' => 'Tool spam',
 
 # Special:BlankPage
 'blankpage' => 'Leppa kosoŋë',
index f9eba2d..931a0b4 100644 (file)
@@ -84,20 +84,20 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'numberofarticles'        => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
-       'img_right'               => array( '1', 'dreta', 'right' ),
-       'img_left'                => array( '1', 'esquerra', 'left' ),
-       'img_border'              => array( '1', 'vora', 'border' ),
-       'img_link'                => array( '1', 'enllaç=$1', 'link=$1' ),
-       'displaytitle'            => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'pagesize'                => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
+       'numberofarticles'          => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'dreta', 'right' ),
+       'img_left'                  => array( '1', 'esquerra', 'left' ),
+       'img_border'                => array( '1', 'vora', 'border' ),
+       'img_link'                  => array( '1', 'enllaç=$1', 'link=$1' ),
+       'displaytitle'              => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'pagesize'                  => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -430,7 +430,7 @@ $1",
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Quant al projecte {{SITENAME}}',
 'aboutpage' => 'Project:Quant a',
-'copyright' => "El contingut és disponible sota els termes d'una llicència $1",
+'copyright' => 'El contingut està disponible sota els termes de la $1.',
 'copyrightpage' => "{{ns:project}}:Drets d'autor",
 'currentevents' => 'Actualitat',
 'currentevents-url' => 'Project:Actualitat',
@@ -599,7 +599,7 @@ L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 # Login and logout pages
 'logouttext' => "'''Heu finalitzat la vostra sessió.'''
 
-Podeu continuar utilitzant {{SITENAME}} de forma anònima, o podeu [[Special:UserLogin|iniciar una sessió una altra vegada]] amb el mateix o un altre usuari.
+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! ==
 
@@ -844,7 +844,7 @@ Podeu [[Special:Search/{{PAGENAME}}|cercar aquest títol]] en altres pàgines,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar en els registres]
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear-la ara]</span>.',
 'noarticletext-nopermission' => 'Actualment no hi ha text en aquesta pàgina.
-Podeu [[Special:Search/{{PAGENAME}}|cercar aquest títol]] en altres pàgines o bé <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar en els registres relacionats]</span>.',
+Podeu [[Special:Search/{{PAGENAME}}|cercar aquest títol]] en altres pàgines o bé <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar en els registres relacionats]</span>, però no teniu permisos per crear la pàgina.',
 'missing-revision' => 'La revisió # $1  de la pàgina anomenada "{{PAGENAME}}" no existeix.
 
 Això és normalment provocat per després d\'un enllaç d\'història antiquat a una pàgina que s\'ha suprimit.
@@ -1208,8 +1208,6 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-interwiki-caption' => 'Projectes germans',
 'search-interwiki-default' => '$1 resultats:',
 'search-interwiki-more' => '(més)',
-'search-mwsuggest-enabled' => 'amb suggeriments',
-'search-mwsuggest-disabled' => 'cap suggeriment',
 'search-relatedarticle' => 'Relacionat',
 'mwsuggest-disable' => 'Inhabilita els suggeriments en AJAX',
 'searcheverything-enable' => 'Cerca a tots els espais de noms',
@@ -1994,7 +1992,7 @@ Les entrades <del>ratllades</del> s\'han resolt.',
 'listusers-editsonly' => 'Mostra només usuaris amb edicions',
 'listusers-creationsort' => 'Ordena per data de creació',
 'usereditcount' => '$1 {{PLURAL:$1|modificació|modificacions}}',
-'usercreated' => '{{GENDER:$3|Creat}} en  $1  a les$2',
+'usercreated' => '{{GENDER:$3|Creat}}: $1 a les $2',
 'newpages' => 'Pàgines noves',
 'newpages-username' => "Nom d'usuari:",
 'ancientpages' => 'Pàgines més antigues',
@@ -2384,7 +2382,7 @@ al resum a continuació, juntament amb detalls dels usuaris que l'havien editat
 
 Consulteu el [[Special:Log/delete|registre d'esborraments]] per a veure els esborraments i els restauraments més recents.",
 'undelete-header' => "Vegeu [[Special:Log/delete|el registre d'eliminació]] per a veure les pàgines eliminades recentment.",
-'undelete-search-title' => 'Pàgines de cerca suprimit',
+'undelete-search-title' => 'Cerca de pàgines esborrades',
 'undelete-search-box' => 'Cerca pàgines esborrades',
 'undelete-search-prefix' => 'Mostra pàgines que comencin:',
 'undelete-search-submit' => 'Cerca',
@@ -2680,7 +2678,7 @@ Incorporeu-les manualment, si us plau.",
 
 La pàgina de destinació, «[[:$1]]», ja existeix. Voleu eliminar-la per a fer lloc al trasllat?",
 'delete_and_move_confirm' => 'Sí, esborra la pàgina',
-'delete_and_move_reason' => 'Suprimit per donar pas a pas de " [[$1]] "',
+'delete_and_move_reason' => 'S\'ha eliminat per a permetre el reanomenament de " [[$1]] "',
 'selfmove' => "Els títols d'origen i de destinació coincideixen: no és possible de reanomenar una pàgina a si mateixa.",
 'immobile-source-namespace' => 'No es poden moure pàgines de l\'espai de noms "$1"',
 'immobile-target-namespace' => 'No es poden moure pàgines cap a l\'espai de noms "$1"',
@@ -2810,7 +2808,6 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 
 # JavaScriptTest
 'javascripttest' => 'Proves de JavaScript',
-'javascripttest-disabled' => "No s'ha inhabilitat la funció en el wiki.",
 'javascripttest-title' => "S'estan executant $1 proves",
 'javascripttest-pagetext-noframework' => "Es reserva la pàgina per a l'execució de tests amb JavaScript.",
 'javascripttest-pagetext-unknownframework' => "L'entorn de proves «$1» és desconegut.",
@@ -2842,7 +2839,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 'tooltip-ca-move' => 'Reanomena aquesta pàgina',
 'tooltip-ca-watch' => 'Afegiu aquesta pàgina a la vostra llista de seguiment.',
 'tooltip-ca-unwatch' => 'Suprimiu aquesta pàgina de la vostra llista de seguiment',
-'tooltip-search' => 'Cerca en el projecte {{SITENAME}}',
+'tooltip-search' => 'Cerca a {{SITENAME}}',
 'tooltip-search-go' => 'Vés a una pàgina amb aquest nom exacte si existeix',
 'tooltip-search-fulltext' => 'Cerca a les pàgines aquest text',
 'tooltip-p-logo' => 'Pàgina principal',
@@ -2883,7 +2880,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 'tooltip-watchlistedit-raw-submit' => 'Actualitza la llista de seguiment',
 'tooltip-recreate' => 'Recrea la pàgina malgrat hagi estat suprimida',
 'tooltip-upload' => 'Inicia la càrrega',
-'tooltip-rollback' => "«Rollback» reverteix les edicions del darrer contribuïdor d'aquesta pàgina en un clic.",
+'tooltip-rollback' => "«Revertir» reverteix totes les edicions de l'últim usuari en un clic.",
 'tooltip-undo' => '«Desfés» reverteix aquesta modificació i obre un formulari de previsualització.
 Permet afegir un motiu al resum.',
 'tooltip-preferences-save' => 'Desa preferències',
@@ -3777,6 +3774,10 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'feedback-bugcheck' => 'Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].',
 'feedback-bugnew' => "Ja ho he comprovat. Informeu d'un nou problema",
 
+# Search suggestions
+'searchsuggest-search' => 'Cerca',
+'searchsuggest-containing' => 'que conté ...',
+
 # API errors
 'api-error-badaccess-groups' => 'No teniu permís per a carregar fitxers en aquest wiki.',
 'api-error-badtoken' => 'Error intern: argument incorrecte.',
index 5e6e2f9..b58427e 100644 (file)
@@ -14,85 +14,83 @@ $fallback = "es";
 
 $messages = array(
 # Dates
-'january'      => 'Enero',
-'february'     => 'Febrero',
-'march'        => 'Marzo',
-'april'        => 'Abril',
-'may_long'     => 'Mayo',
-'june'         => 'Junio',
-'july'         => 'Julio',
-'august'       => 'Agosto',
-'september'    => 'Septiembre',
-'october'      => 'Octubre',
-'november'     => 'Noviembre',
-'december'     => 'Diciembre',
-'april-gen'    => 'Abril',
-'august-gen'   => 'Agosto',
+'january' => 'Enero',
+'february' => 'Febrero',
+'march' => 'Marzo',
+'april' => 'Abril',
+'may_long' => 'Mayo',
+'june' => 'Junio',
+'july' => 'Julio',
+'august' => 'Agosto',
+'september' => 'Septiembre',
+'october' => 'Octubre',
+'november' => 'Noviembre',
+'december' => 'Diciembre',
+'april-gen' => 'Abril',
+'august-gen' => 'Agosto',
 'december-gen' => 'Diciembre',
-'apr'          => 'Abr',
-'aug'          => 'Ago',
-'dec'          => 'Dic',
+'apr' => 'Abr',
+'aug' => 'Ago',
+'dec' => 'Dic',
 
 # Categories related messages
 'category_header' => 'Maga articulo na categoria "$1"',
 
-'about'   => 'Acerca de',
+'about' => 'Acerca de',
 'article' => 'El laman del pagina',
 
-'tagline'          => 'Estava na {{SITENAME}}',
-'help'             => 'Ayuda',
-'search'           => 'Busqueda',
-'searchbutton'     => 'Busca',
-'searcharticle'    => 'Anda',
-'history_short'    => 'Historia',
+'tagline' => 'Estava na {{SITENAME}}',
+'help' => 'Ayuda',
+'search' => 'Busqueda',
+'searchbutton' => 'Busca',
+'searcharticle' => 'Anda',
+'history_short' => 'Historia',
 'printableversion' => 'El version que puede imprenta',
-'edit'             => 'Revisa',
-'delete'           => 'Bora',
+'edit' => 'Revisa',
+'delete' => 'Bora',
 'talkpagelinktext' => 'Cuento',
-'personaltools'    => 'Maga herramientas personal',
-'articlepage'      => 'Mira con el laman del pagina',
-'views'            => 'Maga vista',
-'categorypage'     => 'Mira con el pagina de categoria',
-'otherlanguages'   => 'na otro maga lenguaje',
-'lastmodifiedat'   => 'Ya modifica con este pagina por ultimo vez en hora $2 del $1.',
+'personaltools' => 'Maga herramientas personal',
+'articlepage' => 'Mira con el laman del pagina',
+'views' => 'Maga vista',
+'categorypage' => 'Mira con el pagina de categoria',
+'otherlanguages' => 'na otro maga lenguaje',
+'lastmodifiedat' => 'Ya modifica con este pagina por ultimo vez en hora $2 del $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'            => 'Acerca de {{SITENAME}}',
-'aboutpage'            => 'Project:Acerca de',
-'copyright'            => 'Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.',
-'copyrightpage'        => '{{ns:project}}:Maga derecho del autor',
-'currentevents'        => 'Maga sucesos actual',
-'currentevents-url'    => 'Project:Maga sucesos actual',
-'disclaimers'          => 'Maga aviso legal',
-'disclaimerpage'       => 'Project:El maga limitacion general de maga responsabilidad',
-'mainpage'             => 'El Primero Pagina',
+'aboutsite' => 'Acerca de {{SITENAME}}',
+'aboutpage' => 'Project:Acerca de',
+'copyright' => 'Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.',
+'copyrightpage' => '{{ns:project}}:Maga derecho del autor',
+'currentevents' => 'Maga sucesos actual',
+'currentevents-url' => 'Project:Maga sucesos actual',
+'disclaimers' => 'Maga aviso legal',
+'disclaimerpage' => 'Project:El maga limitacion general de maga responsabilidad',
+'mainpage' => 'El Primero Pagina',
 'mainpage-description' => 'El Primero Pagina',
-'portal'               => 'Portal del Comunidad',
-'privacy'              => 'Policia na proteccion del maga informacion',
-'privacypage'          => 'Project:Policia na proteccion del maga informacion',
+'portal' => 'Portal del Comunidad',
+'privacy' => 'Policia na proteccion del maga informacion',
+'privacypage' => 'Project:Policia na proteccion del maga informacion',
 
-'retrievedfrom'   => 'Obtenido de "$1"',
+'retrievedfrom' => 'Obtenido de "$1"',
 'editsectionhint' => 'Revisa el seccion: $1',
-'site-rss-feed'   => '$1 Informacion de RSS',
-'site-atom-feed'  => '$1 Informacion de Atom',
-'red-link-title'  => '$1 (jendeh ta existi el pagina)',
+'site-rss-feed' => '$1 Informacion de RSS',
+'site-atom-feed' => '$1 Informacion de Atom',
+'red-link-title' => '$1 (jendeh ta existi el pagina)',
 
 # Login and logout pages
 'acct_creation_throttle_hit' => 'Ya crea ya {{PLURAL:$1|un cuenta registro|$1 maga cuenta registro}} el maga visita de este wiki usando el de uste direccion de IP  en el ultimo dia. Entonces, ya sobra ya na maximo numero que ta puede permiti el sistema para crea cuenta. Por causa de este razon, no puede mas crea nuevo cuenta usando el de uste direccion de IP este maga tiempo.',
-'accountcreated'             => 'El cuenta registro del usuario es creando',
-'accountcreatedtext'         => 'Creao ya el cuenta registro por usuario $1.',
+'accountcreated' => 'El cuenta registro del usuario es creando',
+'accountcreatedtext' => 'Creao ya el cuenta registro por usuario $1.',
 
 # Edit pages
 'blockedtitle' => 'El usuario es prohibido o bloqueado',
 'accmailtitle' => 'Enviao ya el contraseña.',
-'accmailtext'  => "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.
+'accmailtext' => "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.
 
 El contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePassword|cambia el contraseña]]'' despues el autenticacion.",
 
 # Search results
-'search-result-size'        => '$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})',
-'search-mwsuggest-enabled'  => 'con sugestiones',
-'search-mwsuggest-disabled' => 'sin sugestion',
+'search-result-size' => '$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})',
 
 # Preferences page
 'changepassword' => 'Cambia con el contraseña',
@@ -107,7 +105,7 @@ El contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePas
 'allarticles' => 'Todo maga articulo',
 
 # Special:Categories
-'categories'         => 'Maga categoria',
+'categories' => 'Maga categoria',
 'categoriespagetext' => 'El maga siguiente {{PLURAL:$1|categoria tiene|categoria tiene}} maga pagina o medio de comunicacion.
 
 El maga [[Special:UnusedCategories|categoria sin usando]] jendeh ta abuya aqui.
@@ -127,12 +125,12 @@ Por favor mira tambien el maga [[Special:WantedCategories|categoria requeridas]]
 'contributions' => 'Maga contribuciones del usuario',
 
 # Block/unblock
-'blockip'           => 'Usuario prohibido',
+'blockip' => 'Usuario prohibido',
 'blockipsuccesssub' => 'El prohibicion es confirmado con exito',
-'contribslink'      => 'Maga contribuciones',
+'contribslink' => 'Maga contribuciones',
 
 # Tooltip help for the actions
-'tooltip-search'     => 'Busca na {{SITENAME}}',
+'tooltip-search' => 'Busca na {{SITENAME}}',
 'tooltip-n-mainpage' => 'Visita na Primero Pagina',
 
 );
index 37e16bf..94a9203 100644 (file)
@@ -62,150 +62,150 @@ $namespaceAliases = array(
 $namespaceGenderAliases = array();
 
 $magicWords = array(
-       'redirect'                => array( '0', '#дlасахьажайар\'', '\'#хьажайо\'', '\'#REDIRECT', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БАЦ_ЧУЛАЦАМ__', '__БАЦ_ЧУЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ЙАЦ_УЧЕ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ТlЕДУЬЛЛУ_ЧУЛАЦАМБАР__', '__ТlЕДУЬЛ_ЧУЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЧУЛАЦАМ__', '__ЧУЛ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ЦАМЕГ_РЕДАККХА_АГlОН__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__КОЬРТА_ЙОЦАШ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'КАРАРА_БУТТ', 'КАРАРА_БУТТ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'КАРАРА_БУТТ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'КАРАРА_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'КАРАРА_ДЕ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'КАРАРАЧУ_ДЕ_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'КАРАРА_ШО', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'КАРАРА_ХАН', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'КАРАРА_САХЬТ', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'МЕТТИГАН_БУТТ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'МЕТТИГАН_БУТТ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'МЕТТИГАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'МЕТТИГАН_ДЕ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'МЕТТИГАН_ДЕ_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'МЕТТИГАН_ШО', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'МЕТТИГАН_ХАН', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'МЕТТИГАН_САХЬТ', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'АГlОНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ЯЗЗАМАШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ХlУМНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ДЕКЪАШХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ДУКХАЛЛА_ЖИГАРА_ДЕКЪАШХОЙ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'НИСДАРШИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ХЬАЖАРИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ЦlЕРИ_АНА', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ЦlЕРИ_АНА_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ДИЙЦАРШИ_АНА', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ДИЙЦАРШИ_АНА_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ЯЗЗАМАШИ_АНА', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ЯЗЗАМАШИ_АНА_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'АГlОН_ЦlЕРА_БУХ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'АГlОН_ЦlЕРА_БУХ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ХААМ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ХlОТТОР:', 'ХlОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'ВИКИ_ХААМ_БОЦАШ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'жима', 'жимо', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'жима=$1', 'жимо=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'бакъхьа', 'справа', 'right' ),
-       'img_left'                => array( '1', 'харцхьа', 'слева', 'left' ),
-       'img_none'                => array( '1', 'йоцуш', 'без', 'none' ),
-       'img_width'               => array( '1', '$1цинт', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'юккъ', 'центр', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'гурабе', 'обрамить', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'гурабоцаш', 'безрамки', 'frameless' ),
-       'img_page'                => array( '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'доза', 'граница', 'border' ),
-       'img_baseline'            => array( '1', 'бух', 'основание', 'baseline' ),
-       'img_sub'                 => array( '1', 'буха', 'под', 'sub' ),
-       'img_super'               => array( '1', 'тlе', 'над', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'лакхахь', 'сверху', 'top' ),
-       'img_text_top'            => array( '1', 'лакххьара-йоза', 'текст-сверху', 'text-top' ),
-       'img_middle'              => array( '1', 'юккъе', 'посередине', 'middle' ),
-       'img_bottom'              => array( '1', 'бухар', 'снизу', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'бухара-йоза', 'текст-снизу', 'text-bottom' ),
-       'img_link'                => array( '1', 'хьажориг=$1', 'ссылка=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'альт=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ЧУЬРА:', 'ВНУТР:', 'INT:' ),
-       'sitename'                => array( '1', 'МЕТТИГ_ЦlЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'БО:', 'ПИ:', 'NS:' ),
-       'nse'                     => array( '0', 'БОХЬ:', 'ПИК:', 'NSE:' ),
-       'localurl'                => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ГlУЛКХДИРИГ', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'ГlУЛКХДЕЧУЬНА_ЦlЕ', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'НЕКЪ_ОЦ_МЕТТАКЕПА', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'ЙОМАНХАТl', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'ДОЖАР:', 'ПАДЕЖ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ВУ_ЙУ:', 'GENDER', 'ПОЛ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__ХИЙЦАР_ДОЦУШ_КОЬРТЕ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ЙОЗА_ХИЙЦАР_ДОЦУШ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'КАРАРА_КlИР', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'КАРАРА_КlИРАН_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'МЕТТИГЕРА_КlИРА', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'МЕТТИГАН_КlИРАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ЦУЬНА_БАШХО', 'ИД_ВЕРСИИ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕ_БАШХО', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕ_БАШХО_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'БЕТТА_БАШХО', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ШО_БАШХО', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'КЪАСТАМ_ХЕНА_БАШХО', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'ДЕКЪАШХОН_БАШХО', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ДУКХАЛЛИН_ТЕРАХЬ:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'МАЙАРРА_МЕТТИГ:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'МАЙАРРА_МЕТТИГ_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ХЬАЛХАР_ЭЛП_ЖИМА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ХЬАЛХАР_ЭЛП_ДОККХА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'КЕГИЙЧУ_ЭЛПАШЦА:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
-       'uc'                      => array( '0', 'ДАККХИЙЧУ_ЭЛПАШЦА:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
-       'raw'                     => array( '0', 'ТАЙАНЗА:', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ГАЙТА_КОЬРТАМОГl', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Т', 'Н', 'R' ),
-       'newsectionlink'          => array( '1', '__ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__ЙОЦАШ_ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ЙОЛШЙОЛУ_БАШХО', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ИШАРЙИНА_МЕТТИГ:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ИШАРЙАР_МЕТТИГАН', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'КЪАСТАМ_ЙОЛУЧУ_ХАННА', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'КЪАСТАМ_МЕТТИГА_ХАННА', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'ХЬАЖОЧЕ_ХААМ', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#МОТТ', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'МОТТ_ЧУЛАЦАМ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'АГlОНАШ_ОЦ_ЦlЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'АДМАНКУЬГАЛХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ТЕРАХЬАН_БАРАМХlОТТОР', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ЙУЗА_ХАРЦЕ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
-       'padright'                => array( '0', 'ЙУЗА_БАКЪЕ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
-       'special'                 => array( '0', 'белхан', 'гlуллакхан', 'служебная', 'special' ),
-       'defaultsort'             => array( '1', 'ЛИСТАР_ЦАХЬЕХОР', 'ДОГlА_ЛИСТАРАН', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ОЦ_ХlУМАНТlЕ_НЕКЪ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'къастам', 'къасто', 'къаст', 'метка', 'тег', 'тэг', 'tag' ),
-       'hiddencat'               => array( '1', '__КЪАЙЛАХЙОЛУ_КАДЕГАР__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'АГlОНАШ_ОЦУ_КАДЕГАРШЧОХЬ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'АГlОН_БАРАМ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__МЕТТИГТЕРАХЬ__', '__ИНДЕКС__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__МЕТТИГТЕРАХЬ_ЙОЦАШ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ТЕРАХЬ_ОЦ_ТОБАНЦА', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__БУХЕХЬДЕРГ_ДlАСХЬАЖАЙАР__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'ГlАРОЛЛИ_БАРАМ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'терахьибарам', 'форматдаты', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ЙОМА', 'ПУТЬ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ),
+       'redirect'                  => array( '0', '#дlасахьажайар\'', '\'#хьажайо\'', '\'#REDIRECT', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БАЦ_ЧУЛАЦАМ__', '__БАЦ_ЧУЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ЙАЦ_УЧЕ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ТlЕДУЬЛЛУ_ЧУЛАЦАМБАР__', '__ТlЕДУЬЛ_ЧУЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЧУЛАЦАМ__', '__ЧУЛ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ЦАМЕГ_РЕДАККХА_АГlОН__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__КОЬРТА_ЙОЦАШ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'КАРАРА_БУТТ', 'КАРАРА_БУТТ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'КАРАРА_БУТТ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'КАРАРА_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'КАРАРА_ДЕ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'КАРАРАЧУ_ДЕ_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'КАРАРА_ШО', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'КАРАРА_ХАН', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'КАРАРА_САХЬТ', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'МЕТТИГАН_БУТТ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'МЕТТИГАН_БУТТ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'МЕТТИГАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'МЕТТИГАН_ДЕ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'МЕТТИГАН_ДЕ_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'МЕТТИГАН_ШО', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'МЕТТИГАН_ХАН', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'МЕТТИГАН_САХЬТ', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'АГlОНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ЯЗЗАМАШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ХlУМНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ДЕКЪАШХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ДУКХАЛЛА_ЖИГАРА_ДЕКЪАШХОЙ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'НИСДАРШИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ХЬАЖАРИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ЦlЕРИ_АНА', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ЦlЕРИ_АНА_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ДИЙЦАРШИ_АНА', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ДИЙЦАРШИ_АНА_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ЯЗЗАМАШИ_АНА', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ЯЗЗАМАШИ_АНА_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'АГlОН_ЦlЕРА_БУХ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'АГlОН_ЦlЕРА_БУХ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ХААМ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ХlОТТОР:', 'ХlОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'ВИКИ_ХААМ_БОЦАШ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'жима', 'жимо', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'жима=$1', 'жимо=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'бакъхьа', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'харцхьа', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'йоцуш', 'без', 'none' ),
+       'img_width'                 => array( '1', '$1цинт', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'юккъ', 'центр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'гурабе', 'обрамить', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'гурабоцаш', 'безрамки', 'frameless' ),
+       'img_page'                  => array( '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'доза', 'граница', 'border' ),
+       'img_baseline'              => array( '1', 'бух', 'основание', 'baseline' ),
+       'img_sub'                   => array( '1', 'буха', 'под', 'sub' ),
+       'img_super'                 => array( '1', 'тlе', 'над', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'лакхахь', 'сверху', 'top' ),
+       'img_text_top'              => array( '1', 'лакххьара-йоза', 'текст-сверху', 'text-top' ),
+       'img_middle'                => array( '1', 'юккъе', 'посередине', 'middle' ),
+       'img_bottom'                => array( '1', 'бухар', 'снизу', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'бухара-йоза', 'текст-снизу', 'text-bottom' ),
+       'img_link'                  => array( '1', 'хьажориг=$1', 'ссылка=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'альт=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ЧУЬРА:', 'ВНУТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'МЕТТИГ_ЦlЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'БО:', 'ПИ:', 'NS:' ),
+       'nse'                       => array( '0', 'БОХЬ:', 'ПИК:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'ГlУЛКХДИРИГ', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'ГlУЛКХДЕЧУЬНА_ЦlЕ', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'НЕКЪ_ОЦ_МЕТТАКЕПА', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ЙОМАНХАТl', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'ДОЖАР:', 'ПАДЕЖ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ВУ_ЙУ:', 'GENDER', 'ПОЛ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__ХИЙЦАР_ДОЦУШ_КОЬРТЕ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ЙОЗА_ХИЙЦАР_ДОЦУШ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'КАРАРА_КlИР', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'КАРАРА_КlИРАН_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'МЕТТИГЕРА_КlИРА', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'МЕТТИГАН_КlИРАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ЦУЬНА_БАШХО', 'ИД_ВЕРСИИ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕ_БАШХО', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕ_БАШХО_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'БЕТТА_БАШХО', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ШО_БАШХО', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'КЪАСТАМ_ХЕНА_БАШХО', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ДЕКЪАШХОН_БАШХО', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ДУКХАЛЛИН_ТЕРАХЬ:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'МАЙАРРА_МЕТТИГ:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'МАЙАРРА_МЕТТИГ_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ХЬАЛХАР_ЭЛП_ЖИМА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ХЬАЛХАР_ЭЛП_ДОККХА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'КЕГИЙЧУ_ЭЛПАШЦА:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
+       'uc'                        => array( '0', 'ДАККХИЙЧУ_ЭЛПАШЦА:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
+       'raw'                       => array( '0', 'ТАЙАНЗА:', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ГАЙТА_КОЬРТАМОГl', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Т', 'Н', 'R' ),
+       'newsectionlink'            => array( '1', '__ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__ЙОЦАШ_ХЬАЖОРИГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ЙОЛШЙОЛУ_БАШХО', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ИШАРЙИНА_МЕТТИГ:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ИШАРЙАР_МЕТТИГАН', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'КЪАСТАМ_ЙОЛУЧУ_ХАННА', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'КЪАСТАМ_МЕТТИГА_ХАННА', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'ХЬАЖОЧЕ_ХААМ', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#МОТТ', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'МОТТ_ЧУЛАЦАМ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'АГlОНАШ_ОЦ_ЦlЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'АДМАНКУЬГАЛХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ТЕРАХЬАН_БАРАМХlОТТОР', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ЙУЗА_ХАРЦЕ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ЙУЗА_БАКЪЕ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
+       'special'                   => array( '0', 'белхан', 'гlуллакхан', 'служебная', 'special' ),
+       'defaultsort'               => array( '1', 'ЛИСТАР_ЦАХЬЕХОР', 'ДОГlА_ЛИСТАРАН', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ОЦ_ХlУМАНТlЕ_НЕКЪ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'къастам', 'къасто', 'къаст', 'метка', 'тег', 'тэг', 'tag' ),
+       'hiddencat'                 => array( '1', '__КЪАЙЛАХЙОЛУ_КАДЕГАР__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'АГlОНАШ_ОЦУ_КАДЕГАРШЧОХЬ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'АГlОН_БАРАМ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__МЕТТИГТЕРАХЬ__', '__ИНДЕКС__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__МЕТТИГТЕРАХЬ_ЙОЦАШ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ТЕРАХЬ_ОЦ_ТОБАНЦА', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__БУХЕХЬДЕРГ_ДlАСХЬАЖАЙАР__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'ГlАРОЛЛИ_БАРАМ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'терахьибарам', 'форматдаты', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ЙОМА', 'ПУТЬ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ),
 );
 
 $messages = array(
@@ -756,8 +756,6 @@ $1',
 'search-interwiki-caption' => 'Гергара кхолламаш',
 'search-interwiki-default' => '$1 хилам.:',
 'search-interwiki-more' => '(кхин)',
-'search-mwsuggest-enabled' => 'хьехаршца',
-'search-mwsuggest-disabled' => 'хьехар доцуш',
 'searcheverything-enable' => 'Массо цIера анахь лахар',
 'searchrelated' => 'хlоттаделларг',
 'searchall' => 'массо',
index aef2dc4..62aaf29 100644 (file)
@@ -9,7 +9,9 @@
  *
  * @author Abastillas
  * @author Dosmiin Barsbold
+ * @author Harvzsf
  * @author Jordz
+ * @author Mirzali
  * @author Palang hernan
  * @author Reedy
  * @author לערי ריינהארט
@@ -441,7 +443,7 @@ Ang rason nga gihatag mao ang "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Nakabiya ka na.'''
 
-Mahimo kang magpadayon sa paggamit sa {{SITENAME}} bisan wala ka magpaila o puyde usab nga [[Special:UserLogin|mag-log in ka'g usab]] 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.",
+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]].',
@@ -456,7 +458,7 @@ Ayaw kalimot sa pag-usab sa imong [[Special:Preferences|{{SITENAME}} mga prepere
 'loginprompt' => 'Kinahanglang naka-enable ang mga koki aron ikaw maka-log-in sa {{SITENAME}}.',
 'userlogin' => 'Rehistro / Dayon',
 'logout' => 'Biya',
-'userlogout' => 'Biya',
+'userlogout' => 'Bıveciye',
 'notloggedin' => 'Wala ka pa masulod',
 'nologin' => "Wala pay akawnt? '''$1'''.",
 'nologinlink' => 'Paghimo og akawnt',
@@ -722,8 +724,6 @@ Hinumdomi nga ang paggamit sa mga sumpay sa nabigasyon mo-reset sa column.',
 'search-interwiki-caption' => 'Mga kaubang proyekto',
 'search-interwiki-default' => '$1 ka mga resulta:',
 'search-interwiki-more' => '(dugang pa)',
-'search-mwsuggest-enabled' => 'may mga sugyot',
-'search-mwsuggest-disabled' => 'walay mga sugyot',
 'showingresultsheader' => "{{PLURAL:$5|Resulta '''$1''' sa '''$3'''|Mga resulta '''$1 - $2''' of '''$3'''}} sa '''$4'''",
 'nonefound' => "'''Bantayi''': Dili tanang ngalang espasyo (namespaces) ang gipangita by default.
 Sulayi'g prefix ang imong gipangita gamit ang ''all:'' alang mangita sa tanang sulod (apil ang mga panid sa hisgot, plantilya, ubp), o gamita ang gikinahanglang ngalang espasyo isip prefix.",
@@ -1075,7 +1075,7 @@ Puyde nimo usbon ang level sa proteksyon ning panid, pero dili kini makaapekto s
 'linkshere' => "Ang mosunod nga mga panid misumpay sa '''[[:$1]]''':",
 'isredirect' => 'panid sa redirekta',
 'istemplate' => 'transklusyon',
-'isimage' => 'sumpay nga imahen',
+'isimage' => 'sumpay sa payl',
 'whatlinkshere-prev' => '{{PLURAL:$1|miaging|miaging $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|sunod|sunod $1}}',
 'whatlinkshere-links' => '← mga sumpay',
index 99d4116..f05a9e0 100644 (file)
@@ -644,8 +644,6 @@ Fanapunta na para u na'nuebu i kolumna anggen un usa i inachetton nabegasion.",
 'search-interwiki-caption' => 'Proyektu siha ni mamarehu',
 'search-interwiki-default' => 'Humuyongña gi $1:',
 'search-interwiki-more' => '(mas)',
-'search-mwsuggest-enabled' => 'yan abisa',
-'search-mwsuggest-disabled' => "tåya' abisa",
 'search-relatedarticle' => 'Umachetton',
 'mwsuggest-disable' => "Na'påra i abisan AJAX",
 'searchrelated' => 'umachetton',
index 7d6c525..9867ae2 100644 (file)
@@ -9,53 +9,77 @@
  *
  * @author Etse (on chr.wikipedia.org)
  * @author Gmaxwell (on chr.wikipedia.org)
+ * @author Malafaya
  * @author Maximillion Pegasus
  * @author Srtxg (on chr.wikipedia.org)
  */
 
 $messages = array(
 # Dates
-'january'  => 'UᏃᎸᏔᏂ',
-'february' => 'KᎠᎦᎵ',
-'march'    => 'ᎠᏄᏱ',
-'april'    => 'ᏥᎶᏂ',
-'june'     => 'DᎡᎭᎷᏱ',
-
-'about'      => 'ᎬᏩᏚᏫᏛ',
-'article'    => 'ᎤᏓᏡᎬ',
+'january' => 'ᏚᏃᎸᏔᏂ',
+'february' => 'ᎧᎦᎵ',
+'march' => 'ᎠᏄᏱ',
+'april' => 'ᎧᏩᏂ',
+'may_long' => 'ᎠᎾᎠᎬᏘ',
+'june' => 'ᏕᎭᎷᏱ',
+'july' => 'ᎫᏰᏉᏂ',
+'august' => 'ᎦᎶᏂᎢ',
+'september' => 'ᏚᎵᎢᏍᏗ',
+'october' => 'ᏚᏂᏅᏗ',
+'november' => 'ᏄᏓᏕᏆ',
+'december' => 'ᎥᏍᎩᎦ',
+'jan' => 'ᏚᏃᎸ',
+'feb' => 'ᎧᎦᎵ',
+'mar' => 'ᎠᏄᏱ',
+'apr' => 'ᎧᏩᏂ',
+'may' => 'ᎠᎾᎠ',
+'jun' => 'ᏕᎭᎷ',
+'jul' => 'ᎫᏰᏉ',
+'aug' => 'ᎦᎶᏂ',
+'sep' => 'ᏚᎵᎢ',
+'oct' => 'ᏚᏂᏅ',
+'nov' => 'ᏄᏓᏕ',
+'dec' => 'ᎥᏍᎩ',
+
+'about' => 'ᎬᏩᏚᏫᏛ',
+'article' => 'ᎤᏓᏡᎬ',
 'navigation' => 'ᎠᏂᎩᏍᏗ ᏥᏳ',
 
 # Cologne Blue skin
-'qbpageinfo'     => 'ᎦᎷᎯᏍᏗ',
+'qbpageinfo' => 'ᎦᎷᎯᏍᏗ',
 'qbspecialpages' => 'ᎤᏤᎵᏛ',
 
-'help'             => 'ᎠᎵᏍᏕᎸᏗ',
-'search'           => 'ᎠᏯᏍᏗ',
-'go'               => 'ᎮᎦ',
-'history'          => 'ᏆᏥ ᎧᏃᎮᏍᎩ',
-'history_short'    => 'ᎧᏃᎮᏍᎩ',
+'help' => 'ᎠᎵᏍᏕᎸᏗ',
+'search' => 'ᎠᏯᏍᏗ',
+'searchbutton' => 'ᎠᏯᏍᏗ',
+'go' => 'ᎮᎦ',
+'history' => 'ᏆᏥ ᎧᏃᎮᏍᎩ',
+'history_short' => 'ᎧᏃᎮᏍᎩ',
 'printableversion' => 'ᎦᎴᏯᏛ ᏅᎬᎪᏔᏅᎯ',
-'permalink'        => 'ᏂᎪᎯᎸ ᏕᎬᏔᏛ',
+'permalink' => 'ᏂᎪᎯᎸ ᏕᎬᏔᏛ',
 'talkpagelinktext' => 'ᎧᏃᎮᎸᏗ',
-'talk'             => 'ᎧᏃᎮᎸᏗ',
-'toolbox'          => 'ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ',
-'otherlanguages'   => 'ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ',
-'jumptosearch'     => 'ᎡᏗt',
+'talk' => 'ᎧᏃᎮᎸᏗ',
+'toolbox' => 'ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ',
+'otherlanguages' => 'ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ',
+'jumptosearch' => 'ᎡᏗt',
 
 # 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).
-'aboutpage'            => 'Project:ᎬᏩᏚᏫᏛ',
-'currentevents'        => 'ᏗᏤᎢ',
-'mainpage'             => 'ᎤᎵᎮᎵᏍᏗ',
+'aboutpage' => 'Project:ᎬᏩᏚᏫᏛ',
+'currentevents' => 'ᏗᏤᎢ',
+'mainpage' => 'ᎤᎵᎮᎵᏍᏗ',
 'mainpage-description' => 'ᎤᎵᎮᎵᏍᏗ',
-'portal'               => 'ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ',
+'portal' => 'ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'ᎤᏓᏡᎬ',
+'nstab-main' => 'ᎤᏓᏡᎬ',
 'nstab-category' => 'ᏗᎦᎪᏗ',
 
 # General errors
 'viewsource' => 'DᎢᎧᏃᏗᎢ DᎢᏓᎴᎲᏍᎬ',
 
+# Revision deletion
+'revdelete-radio-set' => 'ᎥᎥ',
+
 # Diffs
 'editundo' => 'IᎬᎾᏕᏍᏗ',
 
@@ -69,8 +93,8 @@ $messages = array(
 'recentchanges' => 'ᎾᏞᎬ ᏗᎦᏁᏟᏴᏍᏗ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ',
-'recentchangeslinked-feed'    => 'ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ',
+'recentchangeslinked' => 'ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ',
+'recentchangeslinked-feed' => 'ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ',
 'recentchangeslinked-toolbox' => 'ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ',
 
 # Upload
index c921623..ee80d56 100644 (file)
@@ -135,14 +135,14 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_thumbnail'           => array( '1', 'وێنۆک', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'ڕاست', 'right' ),
-       'img_left'                => array( '1', 'چەپ', 'left' ),
-       'img_width'               => array( '1', '$1پیکسڵ', '$1px' ),
-       'img_center'              => array( '1', 'ناوەڕاست', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'چوارچێوە', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'بێچوارچێوە', 'frameless' ),
-       'img_border'              => array( '1', 'سنوور', 'border' ),
+       'img_thumbnail'             => array( '1', 'وێنۆک', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'ڕاست', 'right' ),
+       'img_left'                  => array( '1', 'چەپ', 'left' ),
+       'img_width'                 => array( '1', '$1پیکسڵ', '$1px' ),
+       'img_center'                => array( '1', 'ناوەڕاست', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'چوارچێوە', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'بێچوارچێوە', 'frameless' ),
+       'img_border'                => array( '1', 'سنوور', 'border' ),
 );
 
 $messages = array(
@@ -174,8 +174,8 @@ $messages = array(
 'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکان و پەڕگەکانیش ئیمەیلم بۆ بنێرە',
 'tog-enotifrevealaddr' => 'ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە',
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
-'tog-oldsig' => 'واژۆی ئێستا:',
-'tog-fancysig' => 'وەک ویکی‌دەق لەگەڵ واژۆ مامەڵەبکە (بێ بەستەرێکی خۆکار)',
+'tog-oldsig' => 'واژووی ئێستا:',
+'tog-fancysig' => 'وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)',
 'tog-externaleditor' => 'دەستکاریکەری دەرەکی بەکاربێنە لە حاڵەتی دیفاڵتدا (تەنھا بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-externaldiff' => 'لە پرۆگرامێکی دەرەکی بۆ بینینی جیاوازیەکان کەڵک وەرگرە لە دیفاڵتدا (تەنها بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت. [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»',
@@ -273,6 +273,8 @@ $messages = array(
 'listingcontinuesabbrev' => '(درێژە)',
 'index-category' => 'پەڕە پێرستەکراوەکان',
 'noindex-category' => 'پەڕە پێرستنەکراوەکان',
+'broken-file-category' => 'ئەو پەڕانەی بەستەری پەڕگەکانیان شکاوە',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'about' => 'سەبارەت',
 'article' => 'بابەت',
@@ -404,11 +406,17 @@ $1',
 تەماشای [[Special:Version|پەڕەی وەشان]] بکە.',
 
 'ok' => 'باشه‌',
+'pagetitle' => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
 'backlinksubtitle' => '→ $1',
 'retrievedfrom' => 'وەرگیراو لە «$1»',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
 'newmessageslink' => 'پەیامی نوێ',
-'newmessagesdifflink' => 'دوا گۆڕانکارییەکان',
+'newmessagesdifflink' => 'دوایین گۆڕانکاری',
+'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ( $2 ).',
+'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
+'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
+'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
 'youhavenewmessagesmulti' => 'لە $1 دا پەیامی نوێت ھەیە',
 'editsection' => 'دەستکاری',
 'editold' => 'دەستکاری',
@@ -431,6 +439,7 @@ $1',
 'site-atom-feed' => 'فیدی Atom بۆ $1',
 'page-rss-feed' => 'فیدی RSS بۆ «$1»',
 'page-atom-feed' => 'فیدی Atom بۆ «$1»',
+'feed-atom' => 'ئەتۆم',
 'red-link-title' => '$1 (پەڕە بوونی نییە)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
@@ -537,7 +546,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ئێستا تۆ لە ھەژمارەکەت ھاتوویتە دەرەوە.'''
 
-دەتوانی بە شێوەی بێناو درێژە بدەی بە بەرکارھێنانی {{SITENAME}}، یان دەتوانی [[Special:UserLogin|دیسانەوە بچیتەوە ژوورەوە]] ھەر بەو ناوە یان بە ناوی بەکارھێنەرییەکی جیاوازەوە.
+دەتوانی بە شێوەی بێناو درێژە بدەی بە بەرکارھێنانی {{SITENAME}}، یان دەتوانی <span class='plainlinks'>[$1 دیسانەوە بچیتەوە ژوورەوە]</span> ھەر بەو ناوە یان بە ناوی بەکارھێنەرییەکی جیاوازەوە.
 ئاگادار بە کە ھەتا کاتێک کە کەشی وێبگەڕەکەت دەسڕیتەوە، سەرەڕای چوونەدەرەوەی تۆ ھەندێک لە پەڕەکان ھەر بە شێوەیەک نیشان دەدرێن کە گوایە تۆ ھێشتا لە ژوورەوەیت.",
 'welcomecreation' => '== بەخێربێی، $1! ==
 ھەژمارەکەت دروست کرا.
@@ -547,10 +556,11 @@ $2',
 'yourpasswordagain' => 'دیسان تێپەڕوشەکە بنووسەوە:',
 'remembermypassword' => 'چوونە ژوورەوەم لەسەر ئەم کۆمپیوتەرە پاشەکەوت بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ە)',
 'yourdomainname' => 'ناوی دۆمه‌ینی خۆت',
+'password-change-forbidden' => 'ناتوانیت تێپەڕوشەکانت لەم ویکییەدا بگۆڕیت.',
 'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.',
 'login' => 'بچۆ ژوورەوە',
 'nav-login-createaccount' => 'بچۆ ژوورەوە / ھەژمار دروست بکە',
-'loginprompt' => 'بۆ چوونەژوورەوە لە {{SITENAME}} دەبێ ڕێگەت دابێت بە کووکییەکان (cookies enabled).',
+'loginprompt' => 'بۆ چوونەژوورەوە بۆ {{SITENAME}} دەبێ کوکییەکان چالاک بکەیت.',
 'userlogin' => 'بچۆ ژوورەوە / ھەژمار دروست بکە',
 'userloginnocreate' => 'بچۆ ژوورەوە',
 'logout' => 'بچۆ دەرەوە',
@@ -568,6 +578,7 @@ $2',
 'userexists' => 'ئەو ناوەی تۆ داوتە پێشتر بەکارھێنراوە.
 ناوێکی دیکە ھەڵبژێرە.',
 'loginerror' => 'ھەڵەی چوونەژوورەوە',
+'createaccounterror' => 'ناتوانیت هەژماری بەکارهێنەر دروست بکەیت: $1',
 'nocookiesnew' => 'ھەژماری بەکارھێنەر دروست‌کرا، بەڵام بە سەرکەوتوویی نەچوویتەوە ژوورەوە.
 {{SITENAME}} بۆ چوونەوە ژوورەوەی بەکارھێنەر لە شەکرۆکە کەڵک وەردەگرێت.
 تۆ شەکرۆکەکەت لەکارخستووە.
@@ -706,17 +717,17 @@ $2
 'hr_tip' => 'هێڵی ئاسۆیی (دەگمەن بەکاری بێنە)',
 
 # Edit pages
-'summary' => 'پوختە:',
+'summary' => 'کورتەی دەستکاری:',
 'subject' => 'بابەت/سەردێڕ:',
 'minoredit' => 'ئەمە دەستکارییەکی بچووکە',
-'watchthis' => 'چاودێریی ئەم پەڕە بکە',
+'watchthis' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'savearticle' => 'پەڕەکە پاشەکەوت بکە',
 'preview' => 'پێشبینین',
 'showpreview' => 'پێشبینین نیشانبدە',
 'showlivepreview' => 'پێشبینینی ڕاسته‌وخۆ',
 'showdiff' => 'گۆڕانکارییەکان نیشان بدە',
-'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتەتە ژوورەوە.
-ئەدرەسی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەدا تۆماردەکرێت.",
+'anoneditwarning' => "'''ھۆشیار بە:''' نەچوویتە ژوورەوە.
+ناونیشانی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەیەدا تۆماردەکرێت.",
 'anonpreviewwarning' => '«نەڕۆشتوویتە ژوورەوە. پاشەکەوتکردن، ئەدرەسی IPەکەت لە مێژووی دەستکاریی ئەم پەڕە تۆمار دەکات.»',
 'missingsummary' => "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت.
 ئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.",
@@ -783,12 +794,11 @@ $2
 'userpage-userdoesnotexist' => 'هەژماری بەکارهێنەری "<nowiki>$1</nowiki>" تۆمار نەکراوە.<br />
 گەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .',
 'userpage-userdoesnotexist-view' => 'ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.',
-'clearyourcache' => "'''ئاگاداری:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ کاشی وێبگەڕەکەت پاکبکەیتەوە.
+'clearyourcache' => "تێبینی:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ cacheی وێبگەڕەکەت پاکبکەیتەوە.
 * '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''⌘-R'' لەسەر Mac دا)
 * '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''⌘-Shift-R'' لەسەر Mac دا)
 * '''Internet Explorer:''' دوگمەی ''Ctrl'' بگرە کاتێک لەسەر  ''Refresh''دا کرتە دەکەی، یان ''Ctrl-F5'' لێبدە
-* '''Konqueror:''' کرتە بکە لەسەر ''Reload'' یان دوگمەی ''F5'' لێبدە
-* '''Opera:''' کاشەکە لە ڕێگەی ''Tools → Preferences'' بسڕەوە.",
+* '''Opera:''' لە ڕێگەی ''Tools → Preferences'' ەوە cacheەکە بسڕەوە.",
 'usercssyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی CSS نوێ‌کەت، پێش پاشەکەوت‌کردن.",
 'userjsyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی جاڤاسکریپتە نوێ‌کەت، پێش پاشەکەوت‌کردن.",
 'usercsspreview' => "'''له‌یادت بێ که‌ ئێسته‌ ته‌نها پێشبینینی CSS به‌کارهێنه‌ریه‌که‌ت ده‌که‌ی.'''
@@ -805,6 +815,7 @@ $2
 'note' => "'''تێبینی:'''",
 'previewnote' => "'''لە بیرت نەچێت ئەمە تەنیا پێشبینینە.'''
 گۆڕانکارییەکانت ھێشتا پاشەکەوت نەکراون!",
+'continue-editing' => 'بەردەوام بە لەدەستکاریکردن',
 'previewconflict' => 'ئەم پێشبینینە بە تۆ نیشان ئەدات ئەو دەقەی لە شوێنی دەستکاری سەرەوە داتناوە چۆن بەرچاو ئەکەوێت ئەگەر پاشەکەوتی بکەیت.',
 'session_fail_preview' => "'''ببوورە! ناتوانین دەستکارییەکەت پێواژۆ بکەین بە ھۆی لەدەستدانی session data.'''
 تکایە دیسان ھەوڵبدەوە.
@@ -886,6 +897,7 @@ $2
 'edit-no-change' => 'دەستکاریەکەت بەرچاو نەخرا، لەبەر ئەوەی هیچ گۆڕانکارییەکت لەسەر دەقەکە نەکردووە.',
 'edit-already-exists' => 'توانای درووست‌کردنی لاپەڕەی نوێ نیە.<br />
 ئەوە لەپێش‌دا هەبوو.',
+'defaultmessagetext' => 'دەقی پەیامی هەمیشەیی',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ئاگاداری:''' ئەم لاپەڕە ژمارەیەکی زۆر بانگ‌کەری فەنکشێنی لێک‌کەرەوەی لەخۆ گرتوو.<br /><br />
@@ -950,9 +962,9 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'rev-deleted-event' => '(لۆگی کردەوە سڕایەوە)',
 'rev-deleted-text-permission' => "ئەم پیاچوونەوەی پەڕەیە '''سڕاوەتەوە'''.
 وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
-'rev-deleted-text-unhide' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.<br />
\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]<br />
-وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
+'rev-deleted-text-unhide' => "ئەم پیاچوونەوەی پەڕەیە '''سڕراوەتەوە'''.
\88ردÛ\95کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù\84Û\95 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95]دا Ø¯Û\95دÛ\86زرÛ\8eتÛ\95Ù\88Û\95.
+ھێشتا دەتوانی [$1 ئەم پیاچوونەوەیە ببینی] ئەگەر دەتەوێ پێشتر بڕۆی.",
 'rev-suppressed-text-unhide' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە.
 لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].
 وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
@@ -1024,8 +1036,9 @@ $1",
 'revdelete-only-restricted' => 'ھەڵە لە شاردنەوەی بابەتی ڕێکەوتی $2ی $1: ناتوانی لە بینینی بابەتەکان لە لایەن بەڕێوبەرانەوە بەرگری بکەیت، مەگەر یەکێکی تر لە ھەڵبژاردەکانی بەرچاوکەوتن ھەڵبژێریت.',
 'revdelete-reason-dropdown' => '*ھۆکارە باوەکانی سڕینەوە
 ** لادان لە مافی لەبەرگرتنەوە
-** زانیارە تاکەکەسییە نابەجێیەکان
-** Potentially libelous information',
+** بۆچوون یان زانیاریی تاکەکەسیی نەشیاو
+** ناوی بەکارھێنەریی نەشیاو
+** زانیارییەک کە دەتوانێ بوختاناوی بێت',
 'revdelete-otherreason' => 'ھۆکاری تر/زیاتر:',
 'revdelete-reasonotherlist' => 'هۆکاری دیکە',
 'revdelete-edit-reasonlist' => 'دەستکاریی ھۆکارەکانی سڕینەوە',
@@ -1033,8 +1046,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'لۆگی بەرگری‌کردن',
-'suppressionlogtext' => 'لە خوارەوە لیستێک لە سڕاوە و بەرگری‌کراوانەی وا ناوەڕۆکیان لە چاو بەڕێوبەران داشاردراوە دەبینیت.
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8cاÙ\86Û\95Û\8c Ø¦Û\8eستا Ù\84Û\95 Ú©Ø§Ø±Ø¯Ø§Û\8cÛ\95 Ú\86اÙ\88 Ù\84Û\95 [[Special:IPBlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95رگرÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'suppressionlogtext' => 'خوارەوە لیستێکی سڕینەوەکان و بەربەستنەکانە کە ناوەرۆکێکی شاراوە لە بەڕێوبەرانیان ھەیە.
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ù\84Û\8cستÛ\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8c Ù\88 Ø¨Û\95ربÛ\95ستÙ\86اÙ\86Û\95 Ø¦Û\8eستا Ù\84Û\95کارداÙ\86.',
 
 # History merging
 'mergehistory' => 'یەک‌خستنی مێژووەکانی لاپەڕە',
@@ -1069,13 +1082,13 @@ $1",
 
 # Diffs
 'history-title' => 'مێژووی پیاچوونەوەکانی «$1»',
-'difference-title' => 'جیاوازی نێوان پیاچوونەوەکانی «$1»',
+'difference-title' => 'جیاوازیی نێوان پێداچوونەوەکانی «$1»',
 'difference-title-multipage' => 'جیاوازیی نێوان پەڕەی «$1» و «$2»',
 'difference-multipage' => '(جیاوازی نێوان پەڕەکان)',
 'lineno' => 'ھێڵی  $1:',
 'compareselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە',
 'showhideselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان نیشانبدە/بشارەوە',
-'editundo' => 'گەڕاندنەوە',
+'editundo' => 'پووچەڵکردنەوە',
 'diff-multi' => '({{PLURAL:$1|پیاچوونەوەیەکی نێوانی|$1 پیاچوونەوەی نێوانی}}ی {{PLURAL:$2|بەکارھێنەرێک|$2 بەکارھێنەر}} نیشان نەدراوە)',
 
 # Search results
@@ -1119,8 +1132,6 @@ $1",
 'search-interwiki-caption' => 'پرۆژە خوشکەکان',
 'search-interwiki-default' => '$1 ئەنجام:',
 'search-interwiki-more' => '(زیاتر)',
-'search-mwsuggest-enabled' => 'بە پێشنیارەکانەوە',
-'search-mwsuggest-disabled' => 'بێ پێشنیار',
 'search-relatedarticle' => 'پەیوەست',
 'mwsuggest-disable' => 'پێشنیارەکانی AJAX نیشان مەدە',
 'searcheverything-enable' => 'لە ھەموو بۆشایی‌‌ناوەکان دا بگەڕێ',
@@ -1178,7 +1189,7 @@ $1",
 'prefs-misc' => 'جۆراوجۆر',
 'prefs-resetpass' => 'تێپەڕوشە بگۆڕە',
 'prefs-changeemail' => 'ئەدرەسی ئیمەیل بگۆڕە',
-'prefs-setemail' => 'ئەدرەسێکی ئیمەیل رێکبخە',
+'prefs-setemail' => 'ناونیشانێکی ئیمەیل دیاری بکە',
 'prefs-email' => 'ھەڵبژاردەکانی ئیمەیل',
 'prefs-rendering' => 'ڕواڵەت',
 'saveprefs' => 'پاشەکەوت',
@@ -1231,19 +1242,19 @@ $1",
 'prefs-emailconfirm-label' => 'پشتڕاست کردنەوەی ئیمەیل:',
 'prefs-textboxsize' => 'قەبارەی پەنجەرەی دەستکاریکردن',
 'youremail' => 'ئیمەیل:',
-'username' => 'ناوی به‌كارهێنه‌ر:',
+'username' => 'ناوی به‌کارھێنەر:',
 'uid' => 'ژمارەی بەکارھێنەر:',
 'prefs-memberingroups' => 'ئەندامی {{PLURAL:$1|گرووپی|گرووپەکانی}}:',
 'prefs-registration' => 'کاتی خۆتۆمارکردن:',
 'yourrealname' => 'ناوی ڕاستی:',
 'yourlanguage' => 'زمان',
 'yourvariant' => 'شێوەزاری زمانی ناوەرۆک:',
-'yournick' => 'Ù\86ازÙ\86اÙ\88',
+'yournick' => 'Ù\88اÚ\98Ù\88Ù\88Û\8c Ù\86Ù\88Û\8e:',
 'prefs-help-signature' => 'بۆچوونەکان لە لاپەڕەکانی وتووێژدا دەبێ بە "<nowiki>~~~~</nowiki>" دیاری بکرێن، کە دواتر خۆکار دەگۆڕێ بە واژۆکەت و مۆری کاتی.',
 'badsig' => 'ئیمزاكه‌ هه‌ڵه‌یه‌، ته‌ماشای كۆدی HTML بكه‌‌',
 'badsiglength' => 'واژۆکەت زۆر درێژە.
 واژۆ نابێ لە $1 {{PLURAL:$1|نووسە|نووسە}} درێژتر بێت.',
-'yourgender' => 'ڕەگەز:',
+'yourgender' => 'زایەند:',
 'gender-unknown' => 'ئاشکرا نەکراو',
 'gender-male' => 'پیاو',
 'gender-female' => 'ژن',
@@ -1271,13 +1282,13 @@ $1",
 'prefs-diffs' => 'جیاوازییەکان',
 
 # User rights
-'userrights' => 'بەڕێوەبردنی مافەکانی بەکارهێنەران',
-'userrights-lookup-user' => 'بەڕێوەبردنی گرووپەکانی بەکارهێنەران',
+'userrights' => 'بەڕێوەبردنی مافەکانی بەکارھێنەر',
+'userrights-lookup-user' => 'بەڕێوەبردنی گرووپەکانی بەکارھێنەر',
 'userrights-user-editname' => 'ناوی بەکارهێنەرێک بنووسە:',
-'editusergroup' => 'گرووپەکانی بەکارهێنەر بگۆڕە',
+'editusergroup' => 'گرووپەکانی بەکارھێنەر دەستکاری بکە',
 'editinguser' => "گۆڕینی مافەکانی بەکارهێنەر '''[[User:$1|$1]]''' $2",
-'userrights-editusergroup' => 'دەستکاری کردنی گرووپەکانی بەکارهێنەران',
-'saveusergroups' => 'گرÙ\88Ù\88Ù¾Û\8c Ø¨Û\95کارÙ\87Û\8eÙ\86Û\95راÙ\86 پاشەکەوت بکە',
+'userrights-editusergroup' => 'دەستکاریی گرووپەکانی بەکارهێنەر',
+'saveusergroups' => 'گرÙ\88Ù\88Ù¾Û\95کاÙ\86Û\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95ر پاشەکەوت بکە',
 'userrights-groupsmember' => 'ئەندامە لە:',
 'userrights-groups-help' => 'دەتوانی ئەو گرووپانەی ئەم بەکار‌هێنەرە تێیدایە بگۆڕیت:
 * چوارچێوەی نیشان‌کراو مانای ئەوەیە لەو گرووپەدا هەیە.
@@ -1294,25 +1305,25 @@ $1",
 # Groups
 'group' => 'گرووپ:',
 'group-user' => 'بەکارهێنەران',
-'group-autoconfirmed' => 'بەکارھێنەرە خۆکار پەسندکراوەکان',
+'group-autoconfirmed' => 'بەکارھێنەرانی پەسندکراوی خۆگەڕ',
 'group-bot' => 'بۆتەکان',
 'group-sysop' => 'بەڕێوبەران',
-'group-bureaucrat' => 'بورووکراتەکان',
+'group-bureaucrat' => 'بیوروکراتەکان',
 'group-suppress' => 'چاودێرەکان',
 'group-all' => '(هەموو)',
 
 'group-user-member' => '{{GENDER:$1|بەکارھێنەر}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەری خۆکار پەسەندکراو}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەرانی پەسندکراوی خۆگەڕ}}',
 'group-bot-member' => 'بۆت',
 'group-sysop-member' => '{{GENDER:$1|بەڕێوبەر}}',
-'group-bureaucrat-member' => '{{GENDER:$1|بورووکرات}}',
+'group-bureaucrat-member' => '{{GENDER:$1|بیوروکرات}}',
 'group-suppress-member' => '{{GENDER:$1|چاودێر}}',
 
 'grouppage-user' => '{{ns:project}}:بەکارھێنەران',
-'grouppage-autoconfirmed' => '{{ns:project}}:بەکارهێنەرانی خۆکار-بڕواکراو',
+'grouppage-autoconfirmed' => '{{ns:project}}:بەکارھێنەرانی پەسندکراوی خۆگەڕ',
 'grouppage-bot' => '{{ns:project}}:بۆتەکان',
 'grouppage-sysop' => '{{ns:project}}:بەڕێوبەران',
-'grouppage-bureaucrat' => '{{ns:project}}:بورووکراتەکان',
+'grouppage-bureaucrat' => '{{ns:project}}:بیوروکراتەکان',
 'grouppage-suppress' => '{{ns:project}}:چاودێر',
 
 # Rights
@@ -1381,7 +1392,7 @@ $1",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'خوێندنەوەی ئەم پەڕە',
-'action-edit' => 'دەستکاریی ئەم پەڕە',
+'action-edit' => 'دەستکاریی ئەم پەڕەیە',
 'action-createpage' => 'درووست‌کردنی لاپەڕە',
 'action-createtalk' => 'درووست‌کردنی لەپەڕەکانی وتووێژ',
 'action-createaccount' => 'درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە',
@@ -1419,7 +1430,7 @@ $1",
 'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}',
 'recentchanges' => 'دوایین گۆڕانکارییەکان',
 'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان',
-'recentchanges-summary' => 'لەم پەڕەدا بە دوای دوایین گۆڕانکارییەکان لەم ویکیەدا بکەوە.',
+'recentchanges-summary' => 'دوایین گۆڕانکارییەکانیی ویکی لەم پەڕەیەدا ببینە.',
 'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.',
 'recentchanges-label-newpage' => 'ئەم دەستکارییە لاپەڕەیەکی نوێی دروستکرد',
 'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە',
@@ -1434,7 +1445,7 @@ $1",
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
 'rcshowhidepatr' => 'گۆرانکارییە کۆنترۆڵکراوەکان $1',
 'rcshowhidemine' => 'دەستکارییەکانی من $1',
-'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشانبدە<br />$3',
+'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
 'hist' => 'مێژوو',
 'hide' => 'بشارەوە',
@@ -1560,7 +1571,7 @@ $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەی
 'upload-maxfilesize' => 'ئەوپەڕی قەبارەی پەڕگە: $1',
 'upload-description' => 'پێناسەی پەڕگە',
 'upload-options' => 'ھەڵبژاردەکانی  بارکردن',
-'watchthisupload' => 'چاودێریی ئەم پەڕگەیە بکە',
+'watchthisupload' => 'ئەم پەڕگەیە بخە ژێر چاودێری',
 'filewasdeleted' => 'پەڕگەیەک بەم ناوە لەم دواییانەدا بارکرا و بە خێرایی سڕایەوە.
 باشتر وایە پێش هەوڵی دووبارە بۆ بارکردن سەرنجی $1 بدەی.',
 'filename-bad-prefix' => "دەستپێکی ناوی ئەو پەڕگەی باری دەکەی '''\"\$1\"'''، کە ناوێکی ناسێنەر نیە؛ ئەو جۆرە ناوە زۆربەی کات کامێرا دیجیتاڵەکان خۆکار بەکاری‌دەبەن.
@@ -1693,6 +1704,7 @@ $1',
 **لادان لە مافەکانی بڵاوکردنەوە
 ***پەڕگەی دووبارەکراوە',
 'filedelete-edit-reasonlist' => 'دەستکاری هۆکارەکانی سڕینەوە',
+'filedelete-maintenance-title' => 'ناتوانیت پەڕگە بسڕیتەوە',
 
 # MIME search
 'mimesearch' => 'گەڕانی MIME',
@@ -1755,7 +1767,7 @@ $1',
 ئێستا ڕەوانکەرە بۆ [[$2]].',
 'double-redirect-fixer' => 'چارەسەرکەری ڕەوانکەر',
 
-'brokenredirects' => 'ڕەوانەکراوە شکاوەکان',
+'brokenredirects' => 'ڕەوانەکەرە شکاوەکان',
 'brokenredirectstext' => 'ئەم ڕەوانەکراوانە بەستەرن بۆ ئەو پەڕانە کە بوونیان نییە:',
 'brokenredirects-edit' => 'دەستکاری',
 'brokenredirects-delete' => 'سڕینەوە',
@@ -1798,8 +1810,9 @@ $1',
 'mostimages' => 'ئەو پەڕگانە زۆرترین بەستەریان پێدراوە',
 'mostrevisions' => 'ئەو پەڕانە زۆرترین پیاچوونەوەیان ھەیە',
 'prefixindex' => 'گشت پەڕەکان بە پێشگرەوە',
+'prefixindex-namespace' => 'هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)',
 'shortpages' => 'پەڕە کورتەکان',
-'longpages' => 'پەڕە دڕێژەکان',
+'longpages' => 'پەڕە درێژەکان',
 'deadendpages' => 'پەڕە بنبەستەکان',
 'deadendpagestext' => 'ئەم پەڕانەی خوارەوە پەیوەندییان لەگەڵ پەڕەکانی تری {{SITENAME}} نییە.',
 'protectedpages' => 'پەڕە پارێزراوەکان',
@@ -1868,6 +1881,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} ناوبۆشایی نیە "$1".',
 'allpages-hide-redirects' => 'ڕەوانەکراوەکان بشارەوە',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'دواترین پیشانبدە',
+
 # Special:Categories
 'categories' => 'پۆلەكان',
 'categoriespagetext' => 'ئەم {{PLURAL:$1|پۆلە پەڕە یان پەڕگەی|پۆلانە پەڕە یان پەڕگەیان}} لەخۆگرتە.
@@ -1912,7 +1928,7 @@ $1',
 'newuserlogpagetext' => 'ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.',
 
 # Special:ListGroupRights
-'listgrouprights' => 'Ù\85اÙ\81Û\95کاÙ\86Û\8c Ú¯Ø±Ù\88Ù\88Ù¾Û\95 Ø¨Û\95کارھÛ\8eÙ\86Û\95رÛ\8cÛ\8cÛ\95کاÙ\86',
+'listgrouprights' => 'Ù\85اÙ\81Û\95کاÙ\86Û\8c Ú¯Ø±Ù\88Ù\88Ù¾Û\8c Ø¨Û\95کارھÛ\8eÙ\86Û\95ر',
 'listgrouprights-summary' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.
 لێرەدا لەوانەیە [[{{MediaWiki:Listgrouprights-helppage}}|زانیاری زیاترت]] دەست‌کەوێت سەبارەت بە مافە تاکەکەسیەکان.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">مافی دراوە</span>
@@ -1939,6 +1955,7 @@ $1',
 'emailpagetext' => 'دەتوانی لەم فۆرمەی خوارەوە کەڵک وەربگریت بۆ ناردنی پەیامێکی ئیمەیل بۆ ئەم بەکارھێنەرە.
 ئەو ئەدرەسی ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، بۆ ئەدرەسی «لەلایەن» (From) لە ئیمەیلدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.',
 'defemailsubject' => 'ئیمەیڵی {{SITENAME}} لە بەکارھێنەر «$1»ەوە',
+'usermaildisabled' => 'ئیمەیڵی بەکارهێنەر لەکاردانیە',
 'noemailtitle' => 'هیچ ناونیشانێکی ئی‌مەیل نییە',
 'noemailtext' => 'ئەم بەکارهێنەرە ناونێشانێکی بڕوا پێکراوی ئی‌مەیلی دانەناوە.',
 'nowikiemailtitle' => 'ڕێگە بۆ ئی‌مەیل نەدراوە',
@@ -1963,8 +1980,8 @@ $1',
 'usermessage-editor' => 'پەیامنێری سیستەم',
 
 # Watchlist
-'watchlist' => 'Ù\84Û\8cستی چاودێرییەکانم',
-'mywatchlist' => 'پێرستی چاودێرییەکانم',
+'watchlist' => 'Ù¾Û\8eرستی چاودێرییەکانم',
+'mywatchlist' => 'پێرستی چاودێرییەکەم',
 'watchlistfor2' => 'بۆ $1 $2',
 'nowatchlist' => 'لە لیستی چاودێڕییەکانتدا ھیچ نیە.',
 'watchlistanontext' => 'تکایە بۆ دیتن و دەستکاری بابەتەکانی لە ناو لیستی چاودێریەکەت‌دا $1.',
@@ -1973,9 +1990,10 @@ $1',
 'addwatch' => 'بیخە سەر لیستی چاودێری',
 'addedwatchtext' => 'پەڕەی «[[:$1]]» خرایە سەر [[Special:Watchlist|لیستی چاودێرییەکەت]].
 گۆڕانکارییەکانی داھاتووی ئەم پەڕە و پەڕەی وتووێژەکەی، لەوێدا ڕیزدەکرێ و پەڕەکە لە [[Special:RecentChanges|لیستی دوایین گۆڕانکارییەکاندا]] ئەستوورکراو دەردەکەوێت بۆ ئەوەی ئاسانتر دەستکەوێت.',
+'removewatch' => 'لەلیستی چاودێری لایبە',
 'removedwatchtext' => 'پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.',
 'watch' => 'چاودێری بکە',
-'watchthispage' => 'چاودێریی ئەم پەڕە بکە',
+'watchthispage' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'unwatch' => 'لابردنی چاودێری',
 'unwatchthispage' => 'ئیتر چاودێری مەکە',
 'notanarticle' => 'پەڕەی بێ ناوەڕۆک',
@@ -2039,7 +2057,7 @@ $UNWATCHURL
 'deletepage' => 'پەڕە بسڕەوە',
 'confirm' => 'پشتدار بکەرەوە',
 'excontent' => 'ناوەرۆک ئەمە بوو: «$1»',
-'excontentauthor' => 'ناوەرۆک ئەمە بوو: «$1» (و تەنھا بەشداربوو  «[[Special:Contributions/$2|$2]]» بوو)',
+'excontentauthor' => 'ناوەرۆک ئەمە بوو: «$1» (و تەنیا بەشداربوو «[[Special:Contributions/$2|$2]]» بوو)',
 'exbeforeblank' => 'ناوەرۆک بەر لە بەتاڵ کردنەوە ئەمە بوو: «$1»',
 'exblank' => 'پەڕە خاڵی بوو',
 'delete-confirm' => 'سڕینەوەی «$1»',
@@ -2073,6 +2091,7 @@ $UNWATCHURL
 'rollback' => 'گەڕاندنەوەی دەستکارییەکان',
 'rollback_short' => 'گەڕاندنەوە',
 'rollbacklink' => 'گەڕاندنەوە',
+'rollbacklinkcount' => 'گەڕاندنەوەی $1 دەستکاری',
 'rollbackfailed' => 'گەڕاندنەوە سەرکەوتوو نەبوو',
 'cantrollback' => 'دەستکاریەکان ناگەڕێندرێتەوە؛
 دوایین هاوبەش تەنها ڕێکخەری ئەم لاپەڕەیە.',
@@ -2080,7 +2099,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' => 'گەڕاندنەوەی دەستکارییەکانی [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]',
 'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛<br />
 گۆڕدرا بۆ دوایین دەستکاریی $2.',
 
@@ -2096,9 +2115,9 @@ $UNWATCHURL
 'protectedarticle' => '«[[$1]]»ی پاراست',
 'modifiedarticleprotection' => 'ئاستی پاراستنی «[[$1]]»ی گۆڕا',
 'unprotectedarticle' => 'پاراستنی لەسەر «[[$1]]» لابرد',
-'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  "[[$2]]" گوازرایەوە بۆ "[[$1]]"',
+'movedarticleprotection' => 'ڕێککارییەکانی پاراستن لە  «[[$2]]» گوازرایەوە بۆ «[[$1]]»',
 'protect-title' => 'گۆڕینی ئاستی پاراستنی "$1"',
-'prot_1movedto2' => '[[$1]] گوازراوەتەوە بۆ [[$2]]',
+'prot_1movedto2' => '[[$1]] گوازرایەوە بۆ [[$2]]',
 'protect-legend' => 'پاراستن تەیید بکە',
 'protectcomment' => 'ھۆکار:',
 'protectexpiry' => 'ھەتا:',
@@ -2159,9 +2178,8 @@ $UNWATCHURL
 'undeletepagetext' => 'ئەم {{PLURAL:$1|سڕاوەتەوە|$1 لاپەڕە سڕاونەتەوە}} بەڵام لەبەر ئەوەی لە ئەرشیڤ‌دا هەن هێشتا دەتوانی بیانهێنیتەوە.
 ئەرشیڤ چەن‌وەخت جارێ لە کاتی دیاری‌کراودا خاوێن‌دەکرێتەوە.',
 'undelete-fieldset-title' => 'هێنانەوەی پێداچوونەوەکان',
-'undeleteextrahelp' => "بۆ هێنانەوەی هەموو مێژووی لاپەڕەیەک، تەواوی چوارچێوەکانی نیشان‌کردن بەتاڵ بهێڵەوە و کرتە بکە سەر '''''هێنانەوە'''''.
-بۆ ئەنجامی گەڕانەوەیەکی هەڵبژاردوو، چوارچێوەی بەرامبەر ئەو پێداچوونەوی دەتەوێ بیهێنیتەوە، نیشان‌بکە و  کرتە بکە سەر '''''هێنانەوە'''''.
-کرتەکردن سەر '''''بردنەوە نووک''''' ئەبێتە هۆی سڕینەوەی شوێنی بۆچوونەکان و بەتاڵ بوونەوەی چوارچێوەکان.",
+'undeleteextrahelp' => "بۆ هێنانەوەی سەرانسەری مێژووی پەڕەیەک، گشت بۆکسەکان ھەڵنەبژێردراو بھێڵەوە و کلیک بکە لەسەر '''''{{int:undeletebtn}}'''''.
+بۆ ئەنجامدانی ھێنانەوەیەکی بژاردەیی، بۆکسەکانی پەیوەندیدار بەو پیاچوونەوانە دەبێ بھێنرێنەوە ھەڵبژێرە و کلیک بکە لەسەر  '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} ئەرشیڤ‌کرا',
 'undeletehistory' => 'ئەگەر لاپەڕەیەک بهێنیتەوە، هەموو پێداچوونەوەکانی دەگەڕێنەوە بۆ لاپەڕەی مێژوو.
 ئەگەر لە کاتی سڕاوەبوون، لاپەڕەیەک هەر بەو ناوە درووست‌کرابێت، پێداچوونەوە هێنراوەکان لە لاپەڕەی مێژووی کۆن‌دا نیشان ئەدرێت.',
@@ -2285,8 +2303,8 @@ $1',
 'ipb-change-block' => 'دیسان بەربەست‌کردنەوەی ئەم بەکارهێنەرە بەم هەڵبژاردانە',
 'badipaddress' => 'ناونیشانی ئای‌پی نەگونجاو',
 'blockipsuccesssub' => 'بەربەست کردن سەرکەوتوو بوو',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بەربەستکراوە.<br />
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¨Û\95ربÛ\95ستâ\80\8cکراÙ\88Û\95کاÙ\86Ø\8c Ú\86اÙ\88 Ù\84Û\95 [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بەربەستکراوە.<br />
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ø¨Û\8cÙ\86Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ø¨Û\95ربÛ\95ستÙ\86Û\95کاÙ\86.',
 'ipb-edit-dropdown' => 'دەستکاری هۆکارەکانی بەربەست',
 'ipb-unblock-addr' => 'لە بەربەست‌دەرهێنانی $1',
 'ipb-unblock' => 'لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی',
@@ -2323,9 +2341,9 @@ $1',
 'blocklogpage' => 'لۆگی بەربەستن',
 'blocklogentry' => '[[$1]] ئاستەنگ کرا بۆ ماوەی $2 $3',
 'reblock-logentry' => 'دۆخی ئاستەنگ کردنی [[$1]]  بۆ گۆڕدرا بۆ ماوەی $2 $3',
-'blocklogtext' => 'ئÛ\95Ù\85Û\95 Ù\84Û\86Ú¯Û\8c Ú©Ø±Ø¯Û\95Ù\88Û\95کاÙ\86Û\8c Ø¨Û\95ربÛ\95ستâ\80\8cکراÙ\86 Û\8cا Ù\84ابردÙ\86Û\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¨Û\95کارÙ\87ێنەرە.
¨Û\95ربÛ\95ستâ\80\8cکراÙ\86Û\8c Ø®Û\86کارÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c Ù\84Û\95Ù\85 Ù\84Û\8cستÛ\95دا Ù\86Û\95Ù\87اتÙ\88ون.
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95ربÛ\95ستاÙ\86Û\95 Ø¦Û\8eستÛ\95 Ù\84Û\95 Ø¦Ø§Ø±Ø§Ø¯Ø§Ù\86 Ú\86اÙ\88 Ù\84Û\95 [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'blocklogtext' => 'ئÛ\95Ù\85Û\95 Ù\84Û\86Ú¯Û\8eÚ©Û\8c Ú©Ø±Ø¯Û\95Ù\88Û\95کاÙ\86Û\8c Ø¨Û\95ربÛ\95ستÙ\86 Û\8cاÙ\86 Ù\84ابردÙ\86Û\8c Ø¨Û\95ربÛ\95ستÙ\86Û\8c Ø¨Û\95کارھێنەرە.
¦Û\95Ù\88 Ø¦Ø§Û\8cÙ¾Û\8c Ø¦Û\95درÛ\95ساÙ\86Û\95 Ø®Û\86کاراÙ\86Û\95 Ø¨Û\95ربستکراÙ\88Ù\86 Ø¨Û\95 Ú\95Û\8cز Ù\86Û\95کراون.
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ø¨Û\8cÙ\86Û\8cÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8c Ù\88 Ø¨Û\95ربÛ\95ستÙ\86اÙ\86Û\95 Ø¦Û\8eستا Ù\84Û\95 Ø¨Û\95رکارداÙ\86.',
 'unblocklogentry' => 'بەربەستنی "$1" بەتاڵ کرا',
 'block-log-flags-anononly' => 'تەنها بەکارهێنەرە نەناسراوەکان',
 'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاککراوە',
@@ -2409,7 +2427,7 @@ $1',
 * ئەو چوارچێوەی خوارەوە لێنەدراو بکەی.
 
 لەو حاڵەتەدا، ئەگەر بتەوێت بیگوازیتەوە ناچار دەبیت بە شێوەی دەستی بیگوازیتەوە یان تێکەڵیان بکەی.",
-'movearticle' => 'ئەم پەڕە بگوازەوە:',
+'movearticle' => 'ئەم پەڕەیە بگوازەوە:',
 'movenologin' => 'نەچوویتەتە ژوورەوە',
 'movenologintext' => 'بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.',
 'movenotallowed' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.',
@@ -2417,11 +2435,11 @@ $1',
 'cant-move-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).',
 'cant-move-to-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).',
 'newtitle' => 'بۆ ناوی نوێی:',
-'move-watch' => 'ئەم پەڕە چاودێری بکە',
-'movepagebtn' => 'ئەم پەڕە بگوازەوە',
+'move-watch' => 'ئەم پەڕەیە بخە ژێر چاودێری',
+'movepagebtn' => 'ئەم پەڕەیە بگوازەوە',
 'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا',
 'movepage-moved' => "'''«$1» گوازرایەوە بۆ «$2»'''",
-'movepage-moved-redirect' => 'ڕەوانکەرێک درووست‌کرا.',
+'movepage-moved-redirect' => 'ڕەوانەکەرێک دروست کرا.',
 'movepage-moved-noredirect' => 'لە دانانی ڕەوانەکەر بەرگری کرا.',
 'articleexists' => 'پەڕەیەک بەم ناوە ھەیە یان ئەو ناوەی تۆ ھەڵتبژاردووە ڕێگەی پێنەدراوە.
 تکایە ناوێکی دیکە ھەڵبژێرە.',
@@ -2431,7 +2449,7 @@ $1',
 'movedto' => 'گواسترایەوە بۆ',
 'movetalk' => 'پەڕەی وتووێژی پەیوەندیدار بگوازەوە',
 'move-subpages' => 'ژێرپەڕەکانی بگوازەوە (ھەتا $1 پەڕە)',
-'move-talk-subpages' => 'ژێرپەڕەکانی پەڕەی وتووێژی بگۆزەرەوە (ھەتاکوو $1)',
+'move-talk-subpages' => 'ژێرپەڕەکانی پەڕەی وتووێژ بگوازەوە (ھەتا $1 پەڕە)',
 'movepage-page-exists' => 'پەڕەی $1 هەیە و ناتوانرێت خۆکار بخرێتە جێی.',
 'movepage-page-moved' => 'پەڕەی $1 گۆزرایەوە بۆ $2.',
 'movepage-page-unmoved' => 'ناکرێ پەڕەی $1 بگوێزرێتەوە بۆ $2.',
@@ -2440,14 +2458,14 @@ $1',
 'movelogpagetext' => 'لە خوارەوەدا لیستی ھەموو پەڕە گواستنەوەکان دەبینن.',
 'movesubpage' => '{{PLURAL:$1|ژێرپەڕە|ژێرپەڕە}}',
 'movesubpagetext' => 'ئەم لاپەڕە $1 {{PLURAL:$1|ژێرلاپەڕەی‌|ژێرلاپەڕەی}} هەیە کە لەخوارە نیشان دراوە.',
-'movenosubpage' => 'ئەم پەڕە ھیچ ژێرپەڕەیەکی نییە.',
+'movenosubpage' => 'ئەم پەڕەیە ھیچ ژێرپەڕەیەکی نییە.',
 'movereason' => 'ھۆکار:',
 'revertmove' => 'پێچەوانەکردنەوە',
 'delete_and_move' => 'بیسڕەوە و بیگوازەوە',
 'delete_and_move_text' => '== پێویستییەکانی سڕینەوە ==
 لاپەڕەی مەبەست "[[:$1]]" لە پێش‌دا هەیە.
 ئایا دەتەوێ ئەوە بسڕیتەوە تا ڕێگە بۆ گواستنەوەی بکەیتەوە؟',
-'delete_and_move_confirm' => 'بÛ\95ÚµÛ\8eØ\8c Ù\84اپÛ\95Ú\95Û\95Ú©Û\95 Ø¨Ø³Ú\95Û\95Ù\88Ù\87',
+'delete_and_move_confirm' => 'بەڵێ، پەڕەکە بسڕەوه',
 'delete_and_move_reason' => 'سڕایەوە بۆ کردنەوەی ڕیگە بۆ گواستنەوە لە «[[$1]]»ەوە',
 'selfmove' => 'سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛
 ناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.',
@@ -2461,7 +2479,7 @@ $1',
 'imagetypemismatch' => 'پاشگری ئەو پەڕگە نوێیە هاوتای جۆری پەڕگەکە نیە.',
 'imageinvalidfilename' => 'ناوی پەڕگەی ئامانج گونجاو نیە',
 'fix-double-redirects' => 'نوێ‌کەردنەوەی هەموو ڕەوانکەرەکان وا ئاماژە بە سەردێڕە سەرەکیەکە دەکەن',
-'move-leave-redirect' => 'لە پاشەوە ڕەوانکەرێک دابنە',
+'move-leave-redirect' => 'لە پاشەوە ڕەوانەکەرێک بھێڵەوە',
 'protectedpagemovewarning' => "'''ھۆشیار بە: ئەم پەڕە پارێزراوە بۆ ئەوی تەنیا ئەو بەکارھێنەرانە کە مافەکانی بەڕێوەبەرایەتییان ھەیە بتوانن بیگوازنەوە.'''
 دوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
 'semiprotectedpagemovewarning' => "'''ئاگاداری:''' ئەم پەڕە پارێزراوە بۆ ئەوی تەنھا بەکارھێنەرە تۆمارکراوەکان بتوانن بیگوازنەوە.
@@ -2630,8 +2648,9 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'نوێکردنەوەی لیستی چاودێری',
 'tooltip-recreate' => 'درووست‌کردنەوەی لاپەڕە ئەگەرچی سڕاوەتەوە',
 'tooltip-upload' => 'دەستپێکردنی بارکردن',
-'tooltip-rollback' => "''گەڕاندنەوە'' بە یەک کلیک گۆڕانکاری (گۆڕانکارییەکانی) ئەم پەڕە ئەباتەوە بۆ ھی دواین بەشدار",
-'tooltip-undo' => '«پووچکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردنەکە لە حاڵەتی پێشبینیندا دەکاتەوە. بەم شێوە دەکرێ ھۆکارێک لە پوختەدا بنووسرێت.',
+'tooltip-rollback' => '«گەڕاندنەوە» بە یەک کرتە گۆڕانکاریی/گۆڕانکارییەکانی ئەم پەڕەیە دەگەڕێنێتەوە بۆ دواین بەشداربوو',
+'tooltip-undo' => '«پووچەڵکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردن لە شێوەی پێشبینیندا دەکاتەوە. بەم جۆرە دەکرێ ھۆکارێک لە کورتەی دەستکاریدا بنووسرێ.',
+'tooltip-preferences-save' => 'هەڵبژاردنەکانت بپارێزە',
 'tooltip-summary' => 'پوختەیەکی کورتی تێبخە',
 
 # Metadata
@@ -2659,10 +2678,21 @@ $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-article-id' => 'زنجیرەی پەڕە',
 'pageinfo-views' => 'ژمارەی بینینەکان',
-'pageinfo-watchers' => 'ژمارەی چاودێران',
-'pageinfo-edits' => 'ژمارەی دەستکارییەکان',
+'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
+'pageinfo-redirects-name' => 'ڕەوانەکردنەکان بۆ ئەم پەڕەیە',
+'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
+'pageinfo-firstuser' => 'دروستکەری پەڕە',
+'pageinfo-firsttime' => 'ڕێکەوتی دروستکردنی پەڕە',
+'pageinfo-lastuser' => 'دوایین دەستکاریکەر',
+'pageinfo-lasttime' => 'ڕێکەوتی دوایین دەستکاری',
+'pageinfo-edits' => 'ژمارەی سەرجەمی دەستکارییەکان',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -2711,7 +2741,7 @@ $1',
 'file-info-size' => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4',
 'file-nohires' => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
 'svg-long-desc' => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
-'show-big-image' => 'گەورە کردنەوە',
+'show-big-image' => 'گەورەکردنەوە',
 'show-big-image-preview' => 'قەبارەی ئەم پێشبینینە: $1.',
 'show-big-image-other' => '{{PLURAL:$2|ڕەزەلووشنی|ڕەزەلووشنەکانی}} تر: $1.',
 'show-big-image-size' => '$1 لە $2 پیکسەڵ',
@@ -2730,6 +2760,10 @@ $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1، $2 لە $3',
+'seconds-abbrev' => '$1چ',
+'minutes-abbrev' => '$1خ',
+'hours-abbrev' => '$1ک',
+'days-abbrev' => '$1ڕ',
 'seconds' => '{{PLURAL:$1|$1 چرکە|$1 چرکە}}',
 'minutes' => '{{PLURAL:$1|$1 خولەک|$1 خولەک}}',
 'hours' => '{{PLURAL:$1|$1 کاتژمێر|$1 کاتژمێر}}',
@@ -2773,23 +2807,41 @@ $1',
 'exif-imagelength' => 'بەرزی',
 'exif-imagedescription' => 'ناونیشانی وێنە',
 'exif-model' => 'جۆری کامێرا',
+'exif-software' => 'نەرمەواڵەی بەکارهاتوو',
 'exif-artist' => 'نووسەر',
 'exif-colorspace' => 'بۆشایی ره‌نگ',
+'exif-pixelydimension' => 'پانی وێنە',
+'exif-pixelxdimension' => 'بەرزی وێنە',
 'exif-usercomment' => 'بۆچوونەکانی بەکارهێنەر',
 'exif-relatedsoundfile' => 'فایلی ده‌نگی لێکچوو',
+'exif-exposuretime-format' => '$1 چرکە ($2)',
 'exif-lightsource' => 'سەرچاوەی ڕووناکی',
 'exif-flash' => 'فلاش',
 'exif-filesource' => 'سەرچاوەی پەڕگە',
 'exif-saturation' => 'تێربوون',
 'exif-gpslatitude' => 'پانی',
 'exif-gpslongitude' => 'درێژی',
+'exif-gpstimestamp' => 'کاتی GPS (سەعاتی ئەتۆمی)',
 'exif-gpsmeasuremode' => 'جۆری پێوان',
 'exif-gpsdop' => 'وردی پێوان',
 'exif-gpsspeedref' => 'یەکەی خێرایی',
 'exif-gpsspeed' => 'خێرایی وەرگری GPS',
 'exif-gpstrack' => 'ئاڕاستەی جوڵان',
 'exif-gpsimgdirection' => 'ئاڕاستەی وێنە',
+'exif-gpsareainformation' => 'ناوی ناوچەی GPS',
 'exif-gpsdatestamp' => 'ڕێکەوتی GPS',
+'exif-objectname' => 'سەردێری کورت',
+'exif-headline' => 'سەردێر',
+'exif-source' => 'سەرچاوە',
+'exif-contact' => 'زانیاری پەیوەندیکردن',
+'exif-writer' => 'نووسەر',
+'exif-languagecode' => 'زمان',
+'exif-iimversion' => 'وەشانی IIM',
+'exif-iimcategory' => 'پۆل',
+'exif-copyrighted' => 'ڕەوشی مافی لەبەرگرتنەوە',
+
+# Make & model, can be wikified in order to link to the camera and model name
+'exif-subjectnewscode-value' => '$2 ($1)',
 
 # EXIF attributes
 'exif-compression-1' => 'نەپەستێنراو',
@@ -2805,6 +2857,8 @@ $1',
 
 'exif-exposureprogram-1' => 'دەستکار',
 
+'exif-subjectdistance-value' => '$1 مەتر',
+
 'exif-meteringmode-0' => 'نەزانراو',
 'exif-meteringmode-1' => 'تێکڕا',
 'exif-meteringmode-5' => 'شێوە',
@@ -2899,12 +2953,30 @@ $1',
 'exif-gpsspeed-k' => 'کیلۆمەتر هەر کاتژمێر',
 'exif-gpsspeed-m' => 'مایل هەر کاتژمێر',
 
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'کیلۆمەتر',
+'exif-gpsdestdistance-m' => 'میل',
+'exif-gpsdestdistance-n' => 'میکی دەریایی',
+
+'exif-gpsdop-good' => 'چاک ($1)',
+
+'exif-dc-date' => 'ڕۆژ(ەکان)',
+'exif-dc-publisher' => 'بڵاوکار',
+'exif-dc-relation' => 'میدیای پەیوەندیدار',
+'exif-dc-rights' => 'مافەکان',
+'exif-dc-source' => 'سەرچاوەی میدیا',
+'exif-dc-type' => 'جۆری میدیا',
+
 'exif-iimcategory-hth' => 'تەندروستی',
+'exif-iimcategory-pol' => 'سیاسەت',
 'exif-iimcategory-sci' => 'زانست و تەکنۆلۆژیا',
 'exif-iimcategory-soi' => 'بابەتە کۆمەڵایەتییەکان',
 'exif-iimcategory-spo' => 'وەرزشەکان',
+'exif-iimcategory-wea' => 'کەش و ھەوا',
 
 'exif-urgency-normal' => 'ئاسایی ($1)',
+'exif-urgency-low' => 'کەم ($1)',
+'exif-urgency-high' => 'زۆر ($1)',
 
 # External editor support
 'edit-externally' => 'دەستکاریی ئەم پەڕەیە بکە بە بەکارھێنانی پڕۆگرامێکی دەرەکی',
@@ -3028,6 +3100,7 @@ $5
 'size-megabytes' => '$1 مێگابایت',
 'size-gigabytes' => '$1 گیگابایت',
 'size-terabytes' => '$1 تێرابایت',
+'size-petabytes' => '$1 پێبی‌بایت',
 
 # Live preview
 'livepreview-loading' => 'باركردن‌...',
@@ -3093,7 +3166,8 @@ $5
 'hijri-calendar-m12' => 'زولحەججە',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|وتووێژ]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|لێدوان]])',
+'timezone-utc' => 'UTC',
 
 # Core parser functions
 'unknown_extension_tag' => 'تاگی درێژکراوەی نەناسراو "$1"',
@@ -3144,7 +3218,7 @@ $5
 * <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' => 'بەکارھێنەران و مافەکان',
@@ -3214,14 +3288,15 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
 'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
-'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3 گۆڕیی: $4',
 'revdelete-content-hid' => 'شاردنەوەی ناوەرۆک',
+'revdelete-uname-hid' => 'ناوی بەکارهێنەری شاراوە',
 '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_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',
@@ -3232,12 +3307,17 @@ $5
 'feedback-subject' => 'بابەت:',
 'feedback-message' => 'پەیام:',
 'feedback-cancel' => 'ھەڵیوەشێنەوە',
+'feedback-submit' => 'تێبینییەکان بنێرە',
 'feedback-close' => 'ئەنجام درا',
 
+# Search suggestions
+'searchsuggest-search' => 'گەڕان',
+'searchsuggest-containing' => 'بە لەبەرگرتنەوەی ...',
+
 # API errors
 'api-error-filename-tooshort' => 'ناوی پەڕگەکە زۆر کورتە.',
 'api-error-filetype-banned' => 'ئەم جۆرە پەڕگەیە قەدەغەیە.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|جۆرە پەڕگەی ڕێگە پێ‌نەدراوە‌|جۆرە پەڕگە ڕێگە پێ‌نەدراوە‌کانن}}. $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەیە کە ڕێگەیان}} پێ‌دراوە.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|جۆرە پەڕگەیەکی ڕێگەپێدراو نییە|جۆرە پەڕگە ڕێگەپێدراوەکان نین}}. {{PLURAL:$3|جۆرە پەڕگەی ڕێگەپێدراو ئەمەیە|جۆرە پەڕگەکانی ڕێگەپێدراو ئەمانەن}}:  $2.',
 'api-error-unclassified' => 'ھەڵەیەکی نەزانراو ڕوویداوە.',
 'api-error-unknown-code' => 'ھەڵەی نەزانراو: «$1».',
 'api-error-unknownerror' => 'ھەڵەی نەزانراو: «$1».',
index 91b6cc4..c4cad31 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Corsican (Corsu)
+/** Corsican (corsu)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
 
 $messages = array(
 'underline-always' => 'Sempre',
-'underline-never'  => 'Mai',
+'underline-never' => 'Mai',
 
 # Dates
-'sunday'        => 'dumenica',
-'monday'        => 'luni',
-'tuesday'       => 'marti',
-'wednesday'     => 'mercuri',
-'thursday'      => 'ghjovi',
-'friday'        => 'venneri',
-'saturday'      => 'sabbatu',
-'sun'           => 'dum',
-'mon'           => 'lun',
-'tue'           => 'mar',
-'wed'           => 'mer',
-'thu'           => 'ghj',
-'fri'           => 'ven',
-'sat'           => 'sab',
-'january'       => 'ghjennaghju',
-'february'      => 'ferraghju',
-'march'         => 'marzu',
-'april'         => 'aprile',
-'may_long'      => 'maghju',
-'june'          => 'ghjugnu',
-'july'          => 'lugliu',
-'august'        => 'aostu',
-'september'     => 'settembre',
-'october'       => 'ottobre',
-'november'      => 'nuvembre',
-'december'      => 'dicembre',
-'january-gen'   => 'ghjennaghju',
-'february-gen'  => 'ferraghju',
-'march-gen'     => 'marzu',
-'april-gen'     => 'aprile',
-'may-gen'       => 'maghju',
-'june-gen'      => 'ghjugnu',
-'july-gen'      => 'lugliu',
-'august-gen'    => 'aostu',
+'sunday' => 'dumenica',
+'monday' => 'luni',
+'tuesday' => 'marti',
+'wednesday' => 'mercuri',
+'thursday' => 'ghjovi',
+'friday' => 'venneri',
+'saturday' => 'sabbatu',
+'sun' => 'dum',
+'mon' => 'lun',
+'tue' => 'mar',
+'wed' => 'mer',
+'thu' => 'ghj',
+'fri' => 'ven',
+'sat' => 'sab',
+'january' => 'ghjennaghju',
+'february' => 'ferraghju',
+'march' => 'marzu',
+'april' => 'aprile',
+'may_long' => 'maghju',
+'june' => 'ghjugnu',
+'july' => 'lugliu',
+'august' => 'aostu',
+'september' => 'settembre',
+'october' => 'ottobre',
+'november' => 'nuvembre',
+'december' => 'dicembre',
+'january-gen' => 'ghjennaghju',
+'february-gen' => 'ferraghju',
+'march-gen' => 'marzu',
+'april-gen' => 'aprile',
+'may-gen' => 'maghju',
+'june-gen' => 'ghjugnu',
+'july-gen' => 'lugliu',
+'august-gen' => 'aostu',
 'september-gen' => 'settembre',
-'october-gen'   => 'ottobre',
-'november-gen'  => 'nuvembre',
-'december-gen'  => 'dicembre',
-'jan'           => 'ghje',
-'feb'           => 'fer',
-'mar'           => 'mar',
-'apr'           => 'apr',
-'may'           => 'mag',
-'jun'           => 'ghju',
-'jul'           => 'lug',
-'aug'           => 'aos',
-'sep'           => 'set',
-'oct'           => 'ott',
-'nov'           => 'nuv',
-'dec'           => 'dic',
+'october-gen' => 'ottobre',
+'november-gen' => 'nuvembre',
+'december-gen' => 'dicembre',
+'jan' => 'ghje',
+'feb' => 'fer',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mag',
+'jun' => 'ghju',
+'jul' => 'lug',
+'aug' => 'aos',
+'sep' => 'set',
+'oct' => 'ott',
+'nov' => 'nuv',
+'dec' => 'dic',
 
 # Categories related messages
-'pagecategories'  => '{{PLURAL:$1|Categuria|Categurie}}',
+'pagecategories' => '{{PLURAL:$1|Categuria|Categurie}}',
 'category_header' => 'Articuli in a categuria "$1"',
-'subcategories'   => 'Sottucategurie',
-
-'about'      => 'À prupositu',
-'article'    => 'Articulu',
-'cancel'     => 'Annullà',
-'mypage'     => 'A mo pagina',
-'mytalk'     => 'E mo discussioni',
-'anontalk'   => 'Discussione per istu indirizzu IP',
+'subcategories' => 'Sottucategurie',
+
+'about' => 'À prupositu',
+'article' => 'Articulu',
+'cancel' => 'Annullà',
+'mypage' => 'A mo pagina',
+'mytalk' => 'E mo discussioni',
+'anontalk' => 'Discussione per istu indirizzu IP',
 'navigation' => 'Navigazione',
-'and'        => '&#32;è',
+'and' => '&#32;è',
 
 # Cologne Blue skin
-'qbpageoptions'  => 'Issa pagina',
-'qbpageinfo'     => 'Cuntestu',
-'qbmyoptions'    => 'E mo pagine',
+'qbpageoptions' => 'Issa pagina',
+'qbpageinfo' => 'Cuntestu',
+'qbmyoptions' => 'E mo pagine',
 'qbspecialpages' => 'Pagine spiciale',
 
 # Vector skin
-'vector-action-delete'  => 'Supprimà',
+'vector-action-delete' => 'Supprimà',
 'vector-action-protect' => 'Pruteghje',
-'vector-view-edit'      => 'Mudificà',
-
-'errorpagetitle'   => 'Errore',
-'returnto'         => 'Vultà à $1.',
-'help'             => 'Aiutu',
-'search'           => 'Ricerca',
-'searchbutton'     => 'Ricerca',
-'searcharticle'    => 'Và',
-'history'          => 'Cronolugia',
-'history_short'    => 'Cronolugia',
-'permalink'        => 'Ligame permanente',
-'print'            => 'Stampà',
-'edit'             => 'Mudificà',
-'create'           => 'Creà',
-'delete'           => 'Supprimà',
-'deletethispage'   => 'Cancellà issa pagina',
-'protect'          => 'Pruteghje',
-'protectthispage'  => 'Pruteghje issa pagina',
-'newpage'          => 'Pagina nova',
+'vector-view-edit' => 'Mudificà',
+
+'errorpagetitle' => 'Errore',
+'returnto' => 'Vultà à $1.',
+'help' => 'Aiutu',
+'search' => 'Ricerca',
+'searchbutton' => 'Ricerca',
+'searcharticle' => 'Và',
+'history' => 'Cronolugia',
+'history_short' => 'Cronolugia',
+'permalink' => 'Ligame permanente',
+'print' => 'Stampà',
+'edit' => 'Mudificà',
+'create' => 'Creà',
+'delete' => 'Supprimà',
+'deletethispage' => 'Cancellà issa pagina',
+'protect' => 'Pruteghje',
+'protectthispage' => 'Pruteghje issa pagina',
+'newpage' => 'Pagina nova',
 'talkpagelinktext' => 'discussione',
-'specialpage'      => 'Pagina speciale',
-'articlepage'      => "Vede l'articulu",
-'talk'             => 'Discussione',
-'toolbox'          => 'Stuvigli',
-'userpage'         => 'Vede a pagina di utilizatore',
-'otherlanguages'   => 'In altri lingui',
-'lastmodifiedat'   => 'Ultima mudifica di ista pagina u $1 à e $2.',
-'protectedpage'    => 'Pagina prutetta',
+'specialpage' => 'Pagina speciale',
+'articlepage' => "Vede l'articulu",
+'talk' => 'Discussione',
+'toolbox' => 'Stuvigli',
+'userpage' => 'Vede a pagina di utilizatore',
+'otherlanguages' => 'In altri lingui',
+'lastmodifiedat' => 'Ultima mudifica di ista pagina u $1 à e $2.',
+'protectedpage' => 'Pagina prutetta',
 'jumptonavigation' => 'navigazione',
-'jumptosearch'     => 'ricerca',
+'jumptosearch' => 'ricerca',
 
 # 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'            => 'À prupositu di {{SITENAME}}',
-'aboutpage'            => 'Project:À prupositu',
-'currentevents'        => 'Ultimi evenimenti',
-'currentevents-url'    => 'Project:Ultimi evenimenti',
-'disclaimers'          => 'Avertimenti',
-'disclaimerpage'       => 'Project:Avertimenti generali',
-'mainpage'             => 'Pagina maestra',
+'aboutsite' => 'À prupositu di {{SITENAME}}',
+'aboutpage' => 'Project:À prupositu',
+'currentevents' => 'Ultimi evenimenti',
+'currentevents-url' => 'Project:Ultimi evenimenti',
+'disclaimers' => 'Avertimenti',
+'disclaimerpage' => 'Project:Avertimenti generali',
+'mainpage' => 'Pagina maestra',
 'mainpage-description' => 'Pagina maestra',
-'portal'               => 'Purtone di a cumunità',
-'portal-url'           => 'Project:Purtone di a cumunità',
-'privacy'              => 'Pulitica pè a riservatezza',
-'privacypage'          => 'Project:Pulitica pè a riservatezza',
+'portal' => 'Purtone di a cumunità',
+'portal-url' => 'Project:Purtone di a cumunità',
+'privacy' => 'Pulitica pè a riservatezza',
+'privacypage' => 'Project:Pulitica pè a riservatezza',
 
 'versionrequired' => 'A version $1 di MediaWiki hè necessaria',
 
 'newmessagesdifflink' => 'ultima mudifica',
-'editsection'         => 'mudificà',
-'editold'             => 'mudificà',
-'editlink'            => 'mudificà',
-'toc'                 => 'Cuntenutu',
-'showtoc'             => 'mustrà',
-'hidetoc'             => 'piattà',
-'feed-atom'           => 'Atomu',
+'editsection' => 'mudificà',
+'editold' => 'mudificà',
+'editlink' => 'mudificà',
+'toc' => 'Cuntenutu',
+'showtoc' => 'mustrà',
+'hidetoc' => 'piattà',
+'feed-atom' => 'Atomu',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Articulu',
-'nstab-user'      => 'Utilizatore',
-'nstab-image'     => 'Schedariu',
+'nstab-main' => 'Articulu',
+'nstab-user' => 'Utilizatore',
+'nstab-image' => 'Schedariu',
 'nstab-mediawiki' => 'Messaghju',
-'nstab-template'  => 'Mudellu',
-'nstab-help'      => "Pagina d'aiutu",
-'nstab-category'  => 'Categuria',
+'nstab-template' => 'Mudellu',
+'nstab-help' => "Pagina d'aiutu",
+'nstab-category' => 'Categuria',
 
 # General errors
-'error'         => 'Errore',
+'error' => 'Errore',
 'internalerror' => 'Errore internu',
 
 # Login and logout pages
-'yourname'                   => 'Nome di utilizatore:',
-'yourpassword'               => 'Parulla secreta:',
-'yourpasswordagain'          => 'Scrive torna a parulla secreta:',
-'yourdomainname'             => 'U to duminiu:',
-'login'                      => 'Cunnessione',
-'userlogin'                  => 'Cunnessione / Registramentu',
-'logout'                     => 'Scunnessione',
-'userlogout'                 => 'Scunnessione',
-'nologinlink'                => 'Registramentu',
-'createaccount'              => 'Registramentu',
-'gotaccountlink'             => 'Cunnessione',
-'createaccountreason'        => 'Mutivu:',
-'loginsuccesstitle'          => 'Cunnessione fatta',
+'yourname' => 'Nome di utilizatore:',
+'yourpassword' => 'Parulla secreta:',
+'yourpasswordagain' => 'Scrive torna a parulla secreta:',
+'yourdomainname' => 'U to duminiu:',
+'login' => 'Cunnessione',
+'userlogin' => 'Cunnessione / Registramentu',
+'logout' => 'Scunnessione',
+'userlogout' => 'Scunnessione',
+'nologinlink' => 'Registramentu',
+'createaccount' => 'Registramentu',
+'gotaccountlink' => 'Cunnessione',
+'createaccountreason' => 'Mutivu:',
+'loginsuccesstitle' => 'Cunnessione fatta',
 'acct_creation_throttle_hit' => "Desulatu, ai digià fattu $1 registramenti. Ùn ne poi micca fà d'altri.",
-'accountcreated'             => 'Registramentu fattu',
-'accountcreatedtext'         => "U registramentu di l'utilizatore $1 hè statu fattu.",
-'loginlanguagelabel'         => 'Lingua: $1',
+'accountcreated' => 'Registramentu fattu',
+'accountcreatedtext' => "U registramentu di l'utilizatore $1 hè statu fattu.",
+'loginlanguagelabel' => 'Lingua: $1',
 
 # Change password dialog
 'retypenew' => 'Scrive torna a nova parulla secreta:',
@@ -185,39 +185,39 @@ $messages = array(
 'image_sample' => 'Esempiu.jpg',
 
 # Edit pages
-'minoredit'              => 'Mudifica minore',
-'savearticle'            => 'Arrighjistrà a pagina',
-'showdiff'               => 'Mustrà i cambiamenti',
-'anoneditwarning'        => "'''Attenzione''': ùn sè micca un utilizatore registratu, oppuru ùn ai fattu a cunnessione.
+'minoredit' => 'Mudifica minore',
+'savearticle' => 'Arrighjistrà a pagina',
+'showdiff' => 'Mustrà i cambiamenti',
+'anoneditwarning' => "'''Attenzione''': ùn sè micca un utilizatore registratu, oppuru ùn ai fattu a cunnessione.
 U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
-'loginreqlink'           => 'cunnessione',
-'accmailtitle'           => 'Parulla secreta inviata.',
-'accmailtext'            => 'A parulla secreta per "$1" hè stata inviata à l\'indirizzu $2.',
-'editing'                => 'Mudifica di $1',
-'editingsection'         => 'Mudifica di $1 (sezzione)',
-'editingcomment'         => 'Mudifica di $1 (cummentu)',
-'editconflict'           => 'Cunflittu di mudificazione: $1',
-'yourtext'               => 'U to testu',
-'yourdiff'               => 'Differenze',
-'template-protected'     => '(prutettu)',
+'loginreqlink' => 'cunnessione',
+'accmailtitle' => 'Parulla secreta inviata.',
+'accmailtext' => 'A parulla secreta per "$1" hè stata inviata à l\'indirizzu $2.',
+'editing' => 'Mudifica di $1',
+'editingsection' => 'Mudifica di $1 (sezzione)',
+'editingcomment' => 'Mudifica di $1 (cummentu)',
+'editconflict' => 'Cunflittu di mudificazione: $1',
+'yourtext' => 'U to testu',
+'yourdiff' => 'Differenze',
+'template-protected' => '(prutettu)',
 'template-semiprotected' => '(mezu prutettu)',
-'nocreatetitle'          => 'Creazione di pagina limitata',
+'nocreatetitle' => 'Creazione di pagina limitata',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Registramentu micca pussibile',
 
 # History pages
-'currentrev'  => 'Ultima revisione',
-'page_first'  => 'prima',
-'histfirst'   => 'Prima',
-'histlast'    => 'Ultima',
+'currentrev' => 'Ultima revisione',
+'page_first' => 'prima',
+'histfirst' => 'Prima',
+'histlast' => 'Ultima',
 'historysize' => '({{PLURAL:$1|1 ottettu|$1 ottetti}})',
 
 # Revision feed
 'history-feed-title' => 'Cronolugia di e revisione',
 
 # Revision deletion
-'rev-delundel'  => 'mustrà/piattà',
+'rev-delundel' => 'mustrà/piattà',
 'revdelete-log' => 'Mutivu:',
 
 # History merging
@@ -225,90 +225,90 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
 
 # Search results
 'searchresults' => 'Risultati di a ricerca',
-'powersearch'   => 'Ricerca',
+'powersearch' => 'Ricerca',
 
 # Preferences page
-'preferences'       => 'Preferenze',
-'mypreferences'     => 'Preferenze',
-'prefs-rc'          => 'Ultimi cambiamenti',
-'prefs-watchlist'   => 'Articuli seguitati',
-'columns'           => 'Culonne:',
+'preferences' => 'Preferenze',
+'mypreferences' => 'Preferenze',
+'prefs-rc' => 'Ultimi cambiamenti',
+'prefs-watchlist' => 'Articuli seguitati',
+'columns' => 'Culonne:',
 'searchresultshead' => 'Ricerca',
-'localtime'         => 'Ora lucale',
-'allowemail'        => 'Abilità a ricezzione di e-mail da altri utilizatori',
-'prefs-files'       => 'Schedarii',
-'youremail'         => 'Indirizzu e-mail:',
-'yourrealname'      => 'U to veru nome:',
-'yourlanguage'      => "Lingua di l'interfaccia:",
-'yourvariant'       => 'Variante',
-'yournick'          => 'Signatura pè e discussioni:',
+'localtime' => 'Ora lucale',
+'allowemail' => 'Abilità a ricezzione di e-mail da altri utilizatori',
+'prefs-files' => 'Schedarii',
+'youremail' => 'Indirizzu e-mail:',
+'yourrealname' => 'U to veru nome:',
+'yourlanguage' => "Lingua di l'interfaccia:",
+'yourvariant' => 'Variante',
+'yournick' => 'Signatura pè e discussioni:',
 
 # User rights
-'editinguser'             => "Mudifica di '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "Mudifica di '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
 'userrights-groupsmember' => 'Membru di:',
-'userrights-reason'       => 'Mutivu:',
+'userrights-reason' => 'Mutivu:',
 
 # Groups
-'group'            => 'Gruppu:',
-'group-bot'        => 'Boti',
-'group-sysop'      => 'Amministratori',
+'group' => 'Gruppu:',
+'group-bot' => 'Boti',
+'group-sysop' => 'Amministratori',
 'group-bureaucrat' => 'Burocrati',
-'group-all'        => '(tutti)',
+'group-all' => '(tutti)',
 
-'group-bot-member'        => 'Botu',
-'group-sysop-member'      => 'Amministratore',
+'group-bot-member' => 'Botu',
+'group-sysop-member' => 'Amministratore',
 'group-bureaucrat-member' => 'Burocratu',
 
-'grouppage-bot'        => '{{ns:project}}:Boti',
-'grouppage-sysop'      => '{{ns:project}}:Amministratori',
+'grouppage-bot' => '{{ns:project}}:Boti',
+'grouppage-sysop' => '{{ns:project}}:Amministratori',
 'grouppage-bureaucrat' => '{{ns:project}}:Burocrati',
 
 # Recent changes
-'recentchanges'   => 'Ultimi cambiamenti',
-'rcnotefrom'      => "Quì sò discritti i cambiamenti dipoi <b>$2</b> (sin'à <b>$1</b>).",
-'rclistfrom'      => 'Mustrà i cambiamenti dipoi $1',
+'recentchanges' => 'Ultimi cambiamenti',
+'rcnotefrom' => "Quì sò discritti i cambiamenti dipoi <b>$2</b> (sin'à <b>$1</b>).",
+'rclistfrom' => 'Mustrà i cambiamenti dipoi $1',
 'rcshowhideminor' => '$1 i cambiamenti minori',
-'rcshowhidebots'  => '$1 i boti',
-'rcshowhideliu'   => "$1 l'utilizatori registrati",
+'rcshowhidebots' => '$1 i boti',
+'rcshowhideliu' => "$1 l'utilizatori registrati",
 'rcshowhideanons' => '$1 i cuntributori anonimi',
-'rcshowhidemine'  => '$1 e mo cuntribuzioni',
-'rclinks'         => 'Mustrà ultimi $1 cambiamenti in i $2 ghjorni scorsi<br />$3',
-'hist'            => 'cron',
-'hide'            => 'piattà',
-'show'            => 'mustrà',
+'rcshowhidemine' => '$1 e mo cuntribuzioni',
+'rclinks' => 'Mustrà ultimi $1 cambiamenti in i $2 ghjorni scorsi<br />$3',
+'hist' => 'cron',
+'hide' => 'piattà',
+'show' => 'mustrà',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Cambiamenti assuciati',
-'recentchangeslinked-feed'    => 'Cambiamenti assuciati',
+'recentchangeslinked' => 'Cambiamenti assuciati',
+'recentchangeslinked-feed' => 'Cambiamenti assuciati',
 'recentchangeslinked-toolbox' => 'Cambiamenti assuciati',
 
 # Upload
-'upload'     => 'Incaricà un schedariu',
-'uploadbtn'  => 'Incaricà un schedariu',
-'filename'   => 'Nome di u schedariu',
+'upload' => 'Incaricà un schedariu',
+'uploadbtn' => 'Incaricà un schedariu',
+'filename' => 'Nome di u schedariu',
 'filestatus' => "Statu di u dirittu d'autore:",
 
 'upload-file-error' => 'Errore internu',
 
 # Special:ListFiles
-'imgfile'        => 'schedariu',
+'imgfile' => 'schedariu',
 'listfiles_date' => 'Data',
 'listfiles_name' => 'Nome',
 'listfiles_user' => 'Utilizatore',
 
 # File description page
-'file-anchor-link'   => 'Schedariu',
-'filehist'           => "Cronolugia di l'imagine",
+'file-anchor-link' => 'Schedariu',
+'filehist' => "Cronolugia di l'imagine",
 'filehist-deleteone' => 'supprimà',
-'filehist-user'      => 'Utilizatore',
-'imagelinks'         => 'Ligami',
+'filehist-user' => 'Utilizatore',
+'imagelinks' => 'Ligami',
 
 # File reversion
 'filerevert-comment' => 'Mutivu:',
 
 # File deletion
 'filedelete-comment' => 'Mutivu:',
-'filedelete-submit'  => 'Supprimà',
+'filedelete-submit' => 'Supprimà',
 
 # Unused templates
 'unusedtemplateswlh' => 'altri ligami',
@@ -317,39 +317,39 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
 'randompage' => 'Pagina à casu',
 
 # Statistics
-'statistics'              => 'Statistiche',
+'statistics' => 'Statistiche',
 'statistics-header-users' => "Statistiche nant'à l'utilizatori",
 
 'brokenredirects-edit' => 'mudificà',
 
 # Miscellaneous special pages
-'ncategories'       => '$1 {{PLURAL:$1|categuria|categurie}}',
+'ncategories' => '$1 {{PLURAL:$1|categuria|categurie}}',
 'specialpage-empty' => 'Issa pagina hè biota.',
-'popularpages'      => 'Pagine populare',
-'shortpages'        => 'Pagine corte',
-'longpages'         => 'Pagine longhe',
-'protectedpages'    => 'Pagine prutette',
-'listusers'         => 'Listinu di i cuntributori',
-'newpages'          => 'Pagine nove',
-'ancientpages'      => 'Pagine vechje',
+'popularpages' => 'Pagine populare',
+'shortpages' => 'Pagine corte',
+'longpages' => 'Pagine longhe',
+'protectedpages' => 'Pagine prutette',
+'listusers' => 'Listinu di i cuntributori',
+'newpages' => 'Pagine nove',
+'ancientpages' => 'Pagine vechje',
 
 # Special:Log
-'specialloguserlabel'  => 'Utilizatore:',
+'specialloguserlabel' => 'Utilizatore:',
 'speciallogtitlelabel' => 'Titulu:',
-'all-logs-page'        => "Tutte l'azzioni",
+'all-logs-page' => "Tutte l'azzioni",
 
 # Special:AllPages
-'allpages'          => 'Tutte e pagine',
-'alphaindexline'    => 'da $1 à $2',
-'allpagesfrom'      => 'Mustrà e pagine à parte da:',
-'allarticles'       => "Tutti l'articuli",
-'allinnamespace'    => 'Tutte e pagine di u spaziu $1',
+'allpages' => 'Tutte e pagine',
+'alphaindexline' => 'da $1 à $2',
+'allpagesfrom' => 'Mustrà e pagine à parte da:',
+'allarticles' => "Tutti l'articuli",
+'allinnamespace' => 'Tutte e pagine di u spaziu $1',
 'allnotinnamespace' => 'Tutte e pagine micca di u spaziu $1',
-'allpagesprev'      => 'Precedenti',
-'allpagesnext'      => 'Seguenti',
-'allpagessubmit'    => 'Và',
-'allpagesprefix'    => 'Mustrà e pagine chì cumincianu cù:',
-'allpages-bad-ns'   => 'U spaziu "$1" ùn esiste micca nant\'à {{SITENAME}}',
+'allpagesprev' => 'Precedenti',
+'allpagesnext' => 'Seguenti',
+'allpagessubmit' => 'Và',
+'allpagesprefix' => 'Mustrà e pagine chì cumincianu cù:',
+'allpages-bad-ns' => 'U spaziu "$1" ùn esiste micca nant\'à {{SITENAME}}',
 
 # Special:Categories
 'categories' => 'Categurie',
@@ -362,59 +362,59 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
 'listusers-submit' => 'Mustrà',
 
 # E-mail user
-'emailto'      => 'À:',
+'emailto' => 'À:',
 'emailsubject' => 'Sughjettu:',
 'emailmessage' => 'Messaghju:',
-'emailsend'    => 'Invià',
+'emailsend' => 'Invià',
 
 # Watchlist
-'watchlist'   => 'Articuli seguitati',
+'watchlist' => 'Articuli seguitati',
 'mywatchlist' => 'Articuli seguitati',
-'watch'       => 'Seguità',
+'watch' => 'Seguità',
 
-'enotif_reset'       => 'Marcà tutte e pagine visitate',
+'enotif_reset' => 'Marcà tutte e pagine visitate',
 'enotif_newpagetext' => 'Ista hè una pagina nova.',
-'changed'            => 'cambiatu',
-'created'            => 'creatu',
+'changed' => 'cambiatu',
+'created' => 'creatu',
 
 # Delete
-'deletepage'      => 'Supprimà a pagina',
-'excontent'       => "u cuntenutu era: '$1'",
+'deletepage' => 'Supprimà a pagina',
+'excontent' => "u cuntenutu era: '$1'",
 'excontentauthor' => "u cuntenutu era: '$1' (è u solu cuntributore era '[[Special:Contributions/$2|$2]]')",
-'exblank'         => 'a pagina era biota',
-'delete-legend'   => 'Supprimà',
-'actioncomplete'  => 'Azzione compia',
-'deletecomment'   => 'Mutivu:',
+'exblank' => 'a pagina era biota',
+'delete-legend' => 'Supprimà',
+'actioncomplete' => 'Azzione compia',
+'deletecomment' => 'Mutivu:',
 
 # Protect
-'protectedarticle'            => 'prutettu "[[$1]]"',
-'prot_1movedto2'              => 'hà mossu [[$1]] à [[$2]]',
-'protect-legend'              => 'Cunfirmà a prutezzione',
-'protectcomment'              => 'Mutivu:',
+'protectedarticle' => 'prutettu "[[$1]]"',
+'prot_1movedto2' => 'hà mossu [[$1]] à [[$2]]',
+'protect-legend' => 'Cunfirmà a prutezzione',
+'protectcomment' => 'Mutivu:',
 'protect-level-autoconfirmed' => 'Bluccà i cuntributori micca arrighjistrati',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Mudificà',
+'restriction-edit' => 'Mudificà',
 'restriction-create' => 'Creà',
 
 # Restriction levels
 'restriction-level-autoconfirmed' => 'mezu prutettu',
 
 # Undelete
-'viewdeletedpage'        => 'Fighjulà e p agine supprimate',
-'undeletecomment'        => 'Mutivu:',
-'undelete-search-box'    => 'Circà e pagine supprimate',
+'viewdeletedpage' => 'Fighjulà e p agine supprimate',
+'undeletecomment' => 'Mutivu:',
+'undelete-search-box' => 'Circà e pagine supprimate',
 'undelete-search-submit' => 'Ricerca',
 
 # Namespace form on various pages
-'namespace'      => 'Spaziu:',
+'namespace' => 'Spaziu:',
 'blanknamespace' => '(Principale)',
 
 # Contributions
 'contributions' => "Cuntribuzioni di l'utilizatore",
-'mycontris'     => 'E mo cuntribuzioni',
-'contribsub2'   => 'Per $1 ($2)',
-'month'         => 'Da u mese (è nanzu):',
+'mycontris' => 'E mo cuntribuzioni',
+'contribsub2' => 'Per $1 ($2)',
+'month' => 'Da u mese (è nanzu):',
 
 'sp-contributions-talk' => 'discussione',
 
@@ -422,83 +422,83 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
 'istemplate' => 'inclusione',
 
 # Block/unblock
-'ipadressorusername'       => 'Adrizzu IP o nome di cuntributore',
-'ipbreason'                => 'Mutivu:',
-'blocklist-reason'         => 'Mutivu',
-'ipblocklist-submit'       => 'Ricerca',
-'anononlyblock'            => 'solu i cuntributori anonimi',
-'blocklink'                => 'bluccà',
-'unblocklink'              => 'sbluccà',
-'contribslink'             => 'cuntribuzioni',
+'ipadressorusername' => 'Adrizzu IP o nome di cuntributore',
+'ipbreason' => 'Mutivu:',
+'blocklist-reason' => 'Mutivu',
+'ipblocklist-submit' => 'Ricerca',
+'anononlyblock' => 'solu i cuntributori anonimi',
+'blocklink' => 'bluccà',
+'unblocklink' => 'sbluccà',
+'contribslink' => 'cuntribuzioni',
 'block-log-flags-anononly' => 'solu cuntributori anonimi',
 'block-log-flags-nocreate' => 'registramentu pruibitu',
-'proxyblocksuccess'        => 'Hè fattu.',
+'proxyblocksuccess' => 'Hè fattu.',
 
 # Move page
-'move-page-legend'        => 'Move a pagina',
-'movearticle'             => 'Move a pagina',
-'move-watch'              => 'Fighjulà issa pagina',
-'movepagebtn'             => 'Move a pagina',
-'movedto'                 => 'mossu à',
-'movelogpagetext'         => 'Elencu di e pagine mosse.',
-'movereason'              => 'Mutivu:',
+'move-page-legend' => 'Move a pagina',
+'movearticle' => 'Move a pagina',
+'move-watch' => 'Fighjulà issa pagina',
+'movepagebtn' => 'Move a pagina',
+'movedto' => 'mossu à',
+'movelogpagetext' => 'Elencu di e pagine mosse.',
+'movereason' => 'Mutivu:',
 'delete_and_move_confirm' => 'Iè, supprimà issa pagina',
 
 # Export
-'export'        => 'Espurtà pagine',
+'export' => 'Espurtà pagine',
 'export-submit' => 'Espurtà',
 'export-addcat' => 'Aghjunghje',
 
 # Namespace 8 related
-'allmessages'               => 'Messaghji di sistemu',
-'allmessagesname'           => 'Nome',
-'allmessagesdefault'        => 'Testu prestabilitu',
-'allmessagescurrent'        => 'Testu attuale',
-'allmessagestext'           => 'Istu hè u listinu di tutti i messaghji dispunibili in u spaziu MediaWiki.',
+'allmessages' => 'Messaghji di sistemu',
+'allmessagesname' => 'Nome',
+'allmessagesdefault' => 'Testu prestabilitu',
+'allmessagescurrent' => 'Testu attuale',
+'allmessagestext' => 'Istu hè u listinu di tutti i messaghji dispunibili in u spaziu MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ùn hè dispunibile perchè '''\$wgUseDatabaseMessages''' ùn hè micca attivu.",
 
 # Special:Import
 'import-interwiki-submit' => 'Impurtà',
-'importnopages'           => 'Micca pagine da impurtà.',
-'importfailed'            => 'Importu fiascatu: $1',
+'importnopages' => 'Micca pagine da impurtà.',
+'importfailed' => 'Importu fiascatu: $1',
 
 # Import log
-'importlogpage'                 => 'Importu log',
+'importlogpage' => 'Importu log',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|revisione|revisione}}',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'    => 'A to pagina di utilizatore',
-'tooltip-pt-mytalk'      => 'A to pagina di discussione',
+'tooltip-pt-userpage' => 'A to pagina di utilizatore',
+'tooltip-pt-mytalk' => 'A to pagina di discussione',
 'tooltip-pt-preferences' => 'E to preferenze',
-'tooltip-pt-watchlist'   => 'U listinu di e pagine chì seguiti',
-'tooltip-pt-mycontris'   => 'U listinu di e to cuntribuzioni',
-'tooltip-pt-login'       => 'U registramentu hè suggeritu, micca ubligatoriu',
-'tooltip-pt-logout'      => 'Scunnessione',
-'tooltip-ca-protect'     => 'Pruteghje issa pagina',
-'tooltip-ca-delete'      => 'Supprimà issa pagina',
-'tooltip-p-logo'         => 'Pagina maestra',
-'tooltip-n-mainpage'     => 'Andà à a Pagina maestra',
+'tooltip-pt-watchlist' => 'U listinu di e pagine chì seguiti',
+'tooltip-pt-mycontris' => 'U listinu di e to cuntribuzioni',
+'tooltip-pt-login' => 'U registramentu hè suggeritu, micca ubligatoriu',
+'tooltip-pt-logout' => 'Scunnessione',
+'tooltip-ca-protect' => 'Pruteghje issa pagina',
+'tooltip-ca-delete' => 'Supprimà issa pagina',
+'tooltip-p-logo' => 'Pagina maestra',
+'tooltip-n-mainpage' => 'Andà à a Pagina maestra',
 'tooltip-t-specialpages' => 'Listinu di tutte e pagine spiciale',
-'tooltip-ca-nstab-user'  => 'Vede a pagina di utilizatore',
+'tooltip-ca-nstab-user' => 'Vede a pagina di utilizatore',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|Utilizatore anonimu|Utilizatori anonimi}} di {{SITENAME}}',
-'others'    => 'altri',
+'others' => 'altri',
 
 # Media information
 'show-big-image' => 'Imagine in alta resoluzione',
 
 # Special:NewFiles
 'showhidebots' => '($1 boti)',
-'noimages'     => 'Nulla da vede.',
-'ilsubmit'     => 'Ricerca',
-'bydate'       => 'per data',
+'noimages' => 'Nulla da vede.',
+'ilsubmit' => 'Ricerca',
+'bydate' => 'per data',
 
 # EXIF tags
-'exif-orientation'      => 'Orientazione',
+'exif-orientation' => 'Orientazione',
 'exif-imagedescription' => "Titulu di l'imagine",
-'exif-artist'           => 'Autore',
-'exif-usercomment'      => "Cummenti di l'utilizatore",
+'exif-artist' => 'Autore',
+'exif-usercomment' => "Cummenti di l'utilizatore",
 
 'exif-orientation-1' => 'Nurmale',
 
@@ -514,20 +514,20 @@ U to indirizzu IP serà registratu indu a cronolugia di ista pagina.",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tutti',
-'monthsall'     => 'tutti',
+'monthsall' => 'tutti',
 
 # action=purge
 'confirm_purge_button' => "D'accordu",
 
 # Table pager
-'table_pager_next'  => 'Prossima pagina',
+'table_pager_next' => 'Prossima pagina',
 'table_pager_first' => 'Prima pagina',
-'table_pager_last'  => 'Ultima pagina',
+'table_pager_last' => 'Ultima pagina',
 'table_pager_empty' => 'Micca risultati',
 
 # Auto-summaries
 'autoredircomment' => 'Reindirizzamentu à [[$1]]',
-'autosumm-new'     => 'Pagina nova: $1',
+'autosumm-new' => 'Pagina nova: $1',
 
 # Watchlist editor
 'watchlistedit-raw-titles' => 'Pagine:',
index b63fe8d..8f063a5 100644 (file)
@@ -408,7 +408,7 @@ Mini ang ginhatag nga kabangdanan "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Nakagwa ka na.'''
 
-Pwede mo mapadayon usar ang {{SITENAME}}, ukon pwede ka [[Special:UserLogin|lmagsulod liwat]] bilang pareho ukon la-in nga manug-usar.
+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.
@@ -591,8 +591,6 @@ Indi pag-ilakip ang pila ka mga suleras.',
 'search-interwiki-caption' => 'Mga utod nga proyekto',
 'search-interwiki-default' => '$1 mga resulta:',
 'search-interwiki-more' => '(mas damu pa)',
-'search-mwsuggest-enabled' => 'may mga suhestiyon',
-'search-mwsuggest-disabled' => 'wala suhestiyon',
 'searchall' => 'tanan',
 'showingresultsheader' => "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
 'nonefound' => "'''Tandaan''': Ang iban lang nga mga ngalan-espasyo ang ginapangita depende sa gintakda.
index 92cc193..0c3f017 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Cyrillic script) (‪къырымтатарджа (Кирилл)‬)
+/** Crimean Turkish (Cyrillic script) (къырымтатарджа (Кирилл)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -491,7 +491,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Отурымны къапаттынъыз.'''
 
-Шимди {{SITENAME}} сайтыны аноним оларакъ къулланып оласынъыз, я да янъыдан [[Special:UserLogin|отурым ачып]] оласынъыз (истер айны къулланыджы адынен, истер башкъа бир къулланыджы адынен). Web браузеринъиз кэшини темизлегендже базы саифелер санки аля даа отурымынъыз ачыкъ экен киби корюнип олур.",
+Шимди {{SITENAME}} сайтыны аноним оларакъ къулланып оласынъыз, я да янъыдан <span class='plainlinks'>[$1 отурым ачып]</span> оласынъыз (истер айны къулланыджы адынен, истер башкъа бир къулланыджы адынен). Web браузеринъиз кэшини темизлегендже базы саифелер санки аля даа отурымынъыз ачыкъ экен киби корюнип олур.",
 'welcomecreation' => '== Хош кельдинъиз, $1! ==
 Эсабынъыз ачылды.
 Бу сайтнынъ [[Special:Preferences|сазламаларыны]] шахсынъызгъа коре денъиштирмеге унутманъыз.',
@@ -871,8 +871,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'search-interwiki-caption' => 'Къардаш лейхалар',
 'search-interwiki-default' => '$1 нетидже:',
 'search-interwiki-more' => '(даа чокъ)',
-'search-mwsuggest-enabled' => 'тевсиелернен',
-'search-mwsuggest-disabled' => 'тевсие ёкъ',
 'search-relatedarticle' => 'Багълы',
 'mwsuggest-disable' => 'AJAX тевсиелерини ишлетме',
 'searcheverything-enable' => 'Бутюн исим фезаларында къыдыр',
@@ -2112,4 +2110,7 @@ $5
 # New logging system
 'newuserlog-byemail' => 'пароль e-mail вастасынен йиберильген',
 
+# Search suggestions
+'searchsuggest-containing' => 'ичинде бу олгъан...',
+
 );
index 02d032d..95bf434 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Latin script) (‪qırımtatarca (Latin)‬)
+/** Crimean Turkish (Latin script) (qırımtatarca (Latin)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -487,7 +487,7 @@ Sebep: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Oturımnı qapattıñız.'''
 
-Şimdi {{SITENAME}} saytını anonim olaraq qullanıp olasıñız, ya da yañıdan [[Special:UserLogin|oturım açıp]] 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.",
+Ş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.',
@@ -868,8 +868,6 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'search-interwiki-caption' => 'Qardaş leyhalar',
 'search-interwiki-default' => '$1 netice:',
 'search-interwiki-more' => '(daa çоq)',
-'search-mwsuggest-enabled' => 'tevsiyelernen',
-'search-mwsuggest-disabled' => 'tevsiye yoq',
 'search-relatedarticle' => 'Bağlı',
 'mwsuggest-disable' => 'AJAX tevsiyelerini işletme',
 'searcheverything-enable' => 'Bütün isim fezalarında qıdır',
@@ -2107,4 +2105,7 @@ Bitirgen soñ "{{int:Watchlistedit-raw-submit}}" yazısına basıñız.
 # New logging system
 'newuserlog-byemail' => 'parol e-mail vastasınen yiberilgen',
 
+# Search suggestions
+'searchsuggest-containing' => 'içinde bu olğan...',
+
 );
index de54e88..ce8cf6e 100644 (file)
@@ -139,121 +139,121 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PŘESMĚRUJ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__VŽDYOBSAH__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__OBSAH__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZEDITOVATČÁST__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTUÁLNÍMĚSÍC', 'AKTUÁLNÍMĚSÍC2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'AKTUÁLNÍMĚSÍC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'AKTUÁLNÍMĚSÍCJMÉNO', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AKTUÁLNÍMĚSÍCGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'AKTUÁLNÍMĚSÍCZKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AKTUÁLNÍDEN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AKTUÁLNÍDEN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'AKTUÁLNÍDENJMÉNO', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUÁLNÍROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUÁLNÍČAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUÁLNÍHODINA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MÍSTNÍMĚSÍC', 'MÍSTNÍMĚSÍC2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MÍSTNÍMĚSÍC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MÍSTNÍMĚSÍCJMÉNO', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MÍSTNÍMĚSÍCGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MÍSTNÍMĚSÍCZKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'MÍSTNÍDEN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'MÍSTNÍDEN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'MÍSTNÍDENJMÉNO', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'MÍSTNÍROK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'MÍSTNÍČAS', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'MÍSTNÍHODINA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'POČETSTRAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'POČETČLÁNKŮ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'POČETSOUBORŮ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'POČETUŽIVATELŮ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'POČETAKTIVNÍCHUŽIVATELŮ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'POČETEDITACÍ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NÁZEVSTRANY', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NÁZEVSTRANYE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'JMENNÝPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'JMENNÝPROSTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSNÍPROSTOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSNÍPROSTORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ČLÁNEKPROSTOR', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ČLÁNEKPROSTORE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PLNÝNÁZEVSTRANY', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PLNÝNÁZEVSTRANYE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NÁZEVPODSTRANY', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NÁZEVPODSTRANYE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NÁZEVNADSTRANY', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NÁZEVNADSTRANYE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NÁZEVDISKUSE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NÁZEVDISKUSEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NÁZEVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NÁZEVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'VLOŽIT:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'VLOŽITNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'náhled', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'náhled=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'vpravo', 'right' ),
-       'img_left'                => array( '1', 'vlevo', 'left' ),
-       'img_none'                => array( '1', 'žádné', 'none' ),
-       'img_width'               => array( '1', '$1pixelů', '$1px' ),
-       'img_center'              => array( '1', 'střed', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezrámu', 'frameless' ),
-       'img_page'                => array( '1', 'strana=$1', 'strana $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'okraj', 'border' ),
-       'sitename'                => array( '1', 'NÁZEVWEBU', 'SITENAME' ),
-       'ns'                      => array( '0', 'JMENNÝPROSTOR:', 'NS:' ),
-       'localurl'                => array( '0', 'MÍSTNÍURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'MÍSTNÍURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'NÁZEVSERVERU', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'SKLOŇUJ:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__BEZKONVERZENADPISU__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZKONVERZEOBSAHU__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'AKTUÁLNÍTÝDEN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'AKTUÁLNÍDENTÝDNE', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MÍSTNÍTÝDEN', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'MÍSTNÍDENTÝDNE', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVIZE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DENREVIZE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DENREVIZE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MĚSÍCREVIZE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ROKREVIZE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'KÓDČASUREVIZE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'PLURÁL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PLNÉURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PLNÉURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRVNÍMALÉ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRVNÍVELKÉ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MALÁ:', 'LC:' ),
-       'uc'                      => array( '0', 'VELKÁ:', 'UC:' ),
-       'displaytitle'            => array( '1', 'ZOBRAZOVANÝNADPIS', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKPŘIDATKOMENTÁŘ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERZESOFTWARE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENKÓDOVATURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENKÓDOVATNADPIS', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'AKTUÁLNÍKÓDČASU', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MÍSTNÍKÓDČASU', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JAZYK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRÁNEKVEJMENNÉMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'POČETSPRÁVCŮ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMÁTUJČÍSLO', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ZAROVNATVLEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'ZAROVNATVPRAVO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speciální', 'special' ),
-       'defaultsort'             => array( '1', 'KLÍČŘAZENÍ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CESTAKSOUBORU', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'značka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRÝTKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRÁNEKVKATEGORII', 'STRÁNEKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIKOSTSTRÁNKY', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXOVAT__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NEINDEXOVAT__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__STATICKÉPŘESMĚROVÁNÍ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#PŘESMĚRUJ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__VŽDYOBSAH__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__OBSAH__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZEDITOVATČÁST__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTUÁLNÍMĚSÍC', 'AKTUÁLNÍMĚSÍC2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'AKTUÁLNÍMĚSÍC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'AKTUÁLNÍMĚSÍCJMÉNO', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AKTUÁLNÍMĚSÍCGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AKTUÁLNÍMĚSÍCZKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AKTUÁLNÍDEN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AKTUÁLNÍDEN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'AKTUÁLNÍDENJMÉNO', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUÁLNÍROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUÁLNÍČAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUÁLNÍHODINA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MÍSTNÍMĚSÍC', 'MÍSTNÍMĚSÍC2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MÍSTNÍMĚSÍC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MÍSTNÍMĚSÍCJMÉNO', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MÍSTNÍMĚSÍCGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MÍSTNÍMĚSÍCZKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'MÍSTNÍDEN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'MÍSTNÍDEN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'MÍSTNÍDENJMÉNO', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'MÍSTNÍROK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'MÍSTNÍČAS', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'MÍSTNÍHODINA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'POČETSTRAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'POČETČLÁNKŮ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'POČETSOUBORŮ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'POČETUŽIVATELŮ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'POČETAKTIVNÍCHUŽIVATELŮ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'POČETEDITACÍ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NÁZEVSTRANY', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NÁZEVSTRANYE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'JMENNÝPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'JMENNÝPROSTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSNÍPROSTOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSNÍPROSTORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ČLÁNEKPROSTOR', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ČLÁNEKPROSTORE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PLNÝNÁZEVSTRANY', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PLNÝNÁZEVSTRANYE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NÁZEVPODSTRANY', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NÁZEVPODSTRANYE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NÁZEVNADSTRANY', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NÁZEVNADSTRANYE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NÁZEVDISKUSE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NÁZEVDISKUSEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NÁZEVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NÁZEVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'VLOŽIT:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'VLOŽITNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'náhled', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'náhled=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'vpravo', 'right' ),
+       'img_left'                  => array( '1', 'vlevo', 'left' ),
+       'img_none'                  => array( '1', 'žádné', 'none' ),
+       'img_width'                 => array( '1', '$1pixelů', '$1px' ),
+       'img_center'                => array( '1', 'střed', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezrámu', 'frameless' ),
+       'img_page'                  => array( '1', 'strana=$1', 'strana $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'okraj', 'border' ),
+       'sitename'                  => array( '1', 'NÁZEVWEBU', 'SITENAME' ),
+       'ns'                        => array( '0', 'JMENNÝPROSTOR:', 'NS:' ),
+       'localurl'                  => array( '0', 'MÍSTNÍURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'MÍSTNÍURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'NÁZEVSERVERU', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'SKLOŇUJ:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__BEZKONVERZENADPISU__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZKONVERZEOBSAHU__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'AKTUÁLNÍTÝDEN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'AKTUÁLNÍDENTÝDNE', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MÍSTNÍTÝDEN', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'MÍSTNÍDENTÝDNE', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVIZE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DENREVIZE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DENREVIZE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MĚSÍCREVIZE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ROKREVIZE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'KÓDČASUREVIZE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'PLURÁL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PLNÉURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PLNÉURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRVNÍMALÉ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRVNÍVELKÉ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MALÁ:', 'LC:' ),
+       'uc'                        => array( '0', 'VELKÁ:', 'UC:' ),
+       'displaytitle'              => array( '1', 'ZOBRAZOVANÝNADPIS', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKPŘIDATKOMENTÁŘ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERZESOFTWARE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENKÓDOVATURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENKÓDOVATNADPIS', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'AKTUÁLNÍKÓDČASU', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MÍSTNÍKÓDČASU', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JAZYK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRÁNEKVEJMENNÉMPROSTORU:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'POČETSPRÁVCŮ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMÁTUJČÍSLO', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ZAROVNATVLEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ZAROVNATVPRAVO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speciální', 'special' ),
+       'defaultsort'               => array( '1', 'KLÍČŘAZENÍ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CESTAKSOUBORU', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'značka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRÝTKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRÁNEKVKATEGORII', 'STRÁNEKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIKOSTSTRÁNKY', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXOVAT__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NEINDEXOVAT__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__STATICKÉPŘESMĚROVÁNÍ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
 );
 
 /**
@@ -267,15 +267,16 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktivní_uživatelé', 'Aktivni_uzivatele' ),
-       'Allmessages'               => array( 'Všechny_zprávy' ),
+       'Allmessages'               => array( 'Všechna_hlášení', 'Všechny_zprávy', 'Vsechna_hlaseni', 'Vsechny_zpravy' ),
        'Allpages'                  => array( 'Všechny_stránky', 'Vsechny_stranky' ),
        'Ancientpages'              => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ),
        'Blankpage'                 => array( 'Prázdná_stránka' ),
-       'Block'                     => array( 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
+       'Block'                     => array( 'Blokování', 'Blokovani', 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
        'Blockme'                   => array( 'Zablokuj_mě', 'Zablokuj_me' ),
        'Booksources'               => array( 'Zdroje_knih' ),
        'BrokenRedirects'           => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ),
        'Categories'                => array( 'Kategorie' ),
+       'ChangeEmail'               => array( 'Změna_emailu', 'Zmena_emailu' ),
        'ChangePassword'            => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ),
        'Confirmemail'              => array( 'Potvrdit_e-mail' ),
        'Contributions'             => array( 'Příspěvky', 'Prispevky' ),
@@ -314,7 +315,7 @@ $specialPageAliases = array(
        'Movepage'                  => array( 'Přesunout_stránku' ),
        'Mycontributions'           => array( 'Mé_příspěvky', 'Me_prispevky' ),
        'Mypage'                    => array( 'Moje_stránka', 'Moje_stranka' ),
-       'Mytalk'                    => array( 'Moje_diskuse', 'Moje_diskuze' ),
+       'Mytalk'                    => array( 'Moje_diskuse' ),
        'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
        'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
        'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
@@ -331,6 +332,7 @@ $specialPageAliases = array(
        'Specialpages'              => array( 'Speciální_stránky', 'Specialni_stranky' ),
        'Statistics'                => array( 'Statistika', 'Statistiky' ),
        'Tags'                      => array( 'Značky', 'Znacky' ),
+       'Unblock'                   => array( 'Odblokování', 'Odblokovani' ),
        'Uncategorizedcategories'   => array( 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ),
        'Uncategorizedimages'       => array( 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ),
        'Uncategorizedpages'        => array( 'Nekategorizované_stránky', 'Nekategorizovane_stranky' ),
@@ -514,7 +516,7 @@ $messages = array(
 'vector-action-protect' => 'Zamknout',
 'vector-action-undelete' => 'Obnovit',
 'vector-action-unprotect' => 'Změnit zámek',
-'vector-simplesearch-preference' => 'Zapnout rozšířené návrhy hledání (pouze vzhled Vektor)',
+'vector-simplesearch-preference' => 'Zapnout zjednodušené vyhledávání (pouze vzhled Vektor)',
 'vector-view-create' => 'Založit',
 'vector-view-edit' => 'Editovat',
 'vector-view-history' => 'Zobrazit historii',
@@ -733,8 +735,11 @@ Dotaz: $2',
 'protectedpagetext' => 'Tato stránka byla zamčena, takže ji nelze editovat.',
 '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 smějí ji editovat jen správci.',
-'editinginterface' => "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní. Změny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům. Při úpravách českého překladu zvažte použití [//translatewiki.net/wiki/Main_Page?setlang=cs translatewiki.net], projektu pro lokalizaci MediaWiki.",
+'protectedinterface' => 'Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.
+Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.',
+'editinginterface' => "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní.
+Změny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.
+Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
 'sqlhidden' => '(SQL dotaz skryt)',
 'cascadeprotected' => 'Tato stránka je zamčena, neboť 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:
 $2',
@@ -759,7 +764,7 @@ Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3
 # Login and logout pages
 'logouttext' => "'''Nyní jste odhlášeni.'''
 
-Můžete pokračovat v anonymním prohlížení a editaci {{grammar:2sg|{{SITENAME}}}}, nebo se můžete [[Special:UserLogin|znovu přihlásit]] jako stejný či jiný uživatel.
+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.
@@ -1009,7 +1014,7 @@ Pokud jste zde omylem, stiskněte ve svém prohlížeči tlačítko ''Zpět''.",
 'noarticletext' => 'Tato stránka zatím neobsahuje žádný text.
 Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} prohlédnout si příslušné protokolovací záznamy] nebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tuto stránku založit]</span>.',
 'noarticletext-nopermission' => 'Tato stránka zatím neobsahuje žádný text.
-Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>.',
+Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>, ale na založení této stránky nemáte oprávnění.',
 'missing-revision' => 'Revize #$1 stránky s názvem „{{PAGENAME}}“ neexistuje.
 
 Toto je obvykle způsobeno tím, že jste následovali zastaralý odkaz historickou verzi stránky, jež byla smazána.
@@ -1270,7 +1275,8 @@ Prohlédněte si protokolovací záznamy.',
 'revdelete-only-restricted' => 'Chyba skrývání položky z $2 $1: Nemůžete položky pouze skrýt před správci, aniž byste současně vybrali i některou z dalších možností utajení.',
 'revdelete-reason-dropdown' => '*Obvyklé důvody smazání
 ** Porušení autorských práv
-** Nevhodné osobní údaje
+** Nevhodné komentáře nebo osobní údaje
+** Nevhodné uživatelské jméno
 ** Potenciálně pomlouvačné údaje',
 'revdelete-otherreason' => 'Jiný/další důvod:',
 'revdelete-reasonotherlist' => 'Jiný důvod',
@@ -1368,8 +1374,6 @@ Podrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'search-interwiki-caption' => 'Sesterské projekty',
 'search-interwiki-default' => 'Výsledky z $1:',
 'search-interwiki-more' => '(více)',
-'search-mwsuggest-enabled' => 's návrhy',
-'search-mwsuggest-disabled' => 'bez návrhů',
 'search-relatedarticle' => 'Související',
 'mwsuggest-disable' => 'Vypnout ajaxové napovídání',
 'searcheverything-enable' => 'Hledat ve všech jmenných prostorech',
@@ -1441,7 +1445,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'stub-threshold' => 'Limit pro formátování odkazu jako <a href="#" class="stub">pahýl</a> (v bajtech):',
 'stub-threshold-disabled' => 'Vypnuto',
 'recentchangesdays' => 'Počet dní zobrazených v posledních změnách:',
-'recentchangesdays-max' => '(maximálně $1 {{PLURAL:$1|den|dny|dní}})',
+'recentchangesdays-max' => 'Maximálně $1 {{PLURAL:$1|den|dny|dní}}',
 'recentchangescount' => 'Počet implicitně zobrazovaných záznamů:',
 'prefs-help-recentchangescount' => 'Týká se posledních změn, historie stránek a protokolovacích záznamů.',
 'prefs-help-watchlist-token' => 'Pokud do tohoto pole vyplníte tajný klíč, bude vytvořen RSS kanál vašich sledovaných stránek.
@@ -1466,7 +1470,7 @@ Můžete použít tuto náhodně vygenerovanou hodnotu: $1',
 'timezoneregion-indian' => 'Indický oceán',
 'timezoneregion-pacific' => 'Tichý oceán',
 'allowemail' => 'Povolit e-mail od ostatních uživatelů',
-'prefs-searchoptions' => 'Možnosti vyhledávání',
+'prefs-searchoptions' => 'Vyhledávání',
 'prefs-namespaces' => 'Jmenné prostory',
 'defaultns' => 'Nebo hledat v těchto jmenných prostorech:',
 'default' => 'implicitní',
@@ -1883,7 +1887,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-internal' => 'V koncovém úložném systému „$1“ došlo k neznámé chybě.',
 'backend-fail-contenttype' => 'Nelze určit typ obsahu souboru k uložení do „$1“.',
 'backend-fail-batchsize' => 'Koncový úložný systém přijal dávku s $1 {{PLURAL:souborovou operací|souborovými operacemi}}; maximum je {{PLURAL:$2|$2}}.',
-'backend-fail-usable' => 'Nepodařilo se zapsat do souboru $1 kvůli nedostatečným oprávněním nebo chybějícím adresářům/kontejnerům.',
+'backend-fail-usable' => 'Nepodařilo se zapsat do souboru „$1“ kvůli nedostatečným oprávněním nebo chybějícím adresářům/kontejnerům.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nelze se připojit k žurnálové databázi pro koncový úložný systém „$1“.',
@@ -2920,6 +2924,7 @@ Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [//www
 'import-interwiki-templates' => 'Zahrnout všechny šablony',
 'import-interwiki-submit' => 'Importovat',
 'import-interwiki-namespace' => 'Cílový jmenný prostor:',
+'import-interwiki-rootpage' => 'Cílová kořenová stránka (nepovinné):',
 'import-upload-filename' => 'Jméno souboru:',
 'import-comment' => 'Zdůvodnění:',
 'importtext' => 'Prosím exportujte soubor ze zdrojové wiki pomocí [[Special:Export|exportního nástroje]].
@@ -2952,6 +2957,9 @@ 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-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.',
 
 # Import log
 'importlogpage' => 'Kniha importů',
@@ -2963,7 +2971,6 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 
 # JavaScriptTest
 'javascripttest' => 'Testování JavaScriptu',
-'javascripttest-disabled' => 'Tato funkce nebyla na této wiki povolena.',
 'javascripttest-title' => 'Spouštějí se testy v $1',
 'javascripttest-pagetext-noframework' => 'Tato stránka je vyhrazena pro spouštění testů JavaScriptu.',
 'javascripttest-pagetext-unknownframework' => 'Neznámá testovací knihovna „$1“.',
@@ -3126,10 +3133,10 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-authors' => 'Celkový počet různých autorů',
 'pageinfo-recent-edits' => 'Počet nedávných ($1) editací',
 'pageinfo-recent-authors' => 'Nedávný počet různých autorů',
-'pageinfo-restriction' => 'Zámek stránky (<code>$1</code>)',
 '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-toolboxlink' => 'Informace o stránce',
 
 # Skin names
 'skinname-standard' => 'Klasický',
@@ -3183,7 +3190,7 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'file-info-size' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4',
 'file-info-size-pages' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4, $5 {{PLURAL:$5|stránka|stránky|stránek}}',
 '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' => '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',
 'show-big-image' => 'Obrázek ve vyšším rozlišení',
 'show-big-image-preview' => 'Velikost tohoto náhledu: $1.',
@@ -3707,6 +3714,7 @@ Platnost tohoto potvrzovacího kódu vyprší $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Vkládání šablon mezi wiki je vypnuto]',
 'scarytranscludefailed' => '[Nepodařilo se načíst šablonu pro $1]',
+'scarytranscludefailed-httpstatus' => '[Nepodařilo se načíst šablonu pro $1: HTTP $2]',
 'scarytranscludetoolong' => '[Příliš dlouhé URL]',
 
 # Delete conflict
@@ -4039,12 +4047,16 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'feedback-bugcheck' => 'Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].',
 'feedback-bugnew' => 'Zkontroloval(a) jsem to. Chci ohlásit novou chybu.',
 
+# Search suggestions
+'searchsuggest-search' => 'Hledat',
+'searchsuggest-containing' => 'obsahující…',
+
 # API errors
 'api-error-badaccess-groups' => 'Nemáte povoleno nahrávat soubory na tuto wiki.',
 'api-error-badtoken' => 'Vnitřní chyba: špatný token.',
 'api-error-copyuploaddisabled' => 'Načítání z URL je na tomto severu zakázáno.',
 'api-error-duplicate' => 'Na této wiki již {{PLURAL:$1|existuje [$2 jiný soubor]|existují [$2 jiné soubory]}} se shodným obsahem',
-'api-error-duplicate-archive' => '{{PLURAL:$1|Soubor|Soubory}} se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.',
+'api-error-duplicate-archive' => '[$2 {{PLURAL:$1|Soubor|Soubory}}] se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.',
 'api-error-duplicate-archive-popup-title' => 'Duplicitní {{PLURAL:$1|soubor, který byl|soubory, které byly}} smazány',
 'api-error-duplicate-popup-title' => 'Duplicitní {{PLURAL:$1|soubor|soubory}}',
 'api-error-empty-file' => 'Načtený soubor je prázdný.',
index d6b834d..fc7eb7e 100644 (file)
@@ -354,7 +354,7 @@ Przemëszlë dolmaczënié na [//translatewiki.net/wiki/Main_Page?setlang=csb tr
 
 # Login and logout pages
 'logouttext' => "'''Jes wëlogòwóny.'''
-Mòżesz robic dali na {{SITENAME}} jakno anonimòwi brëkòwnik abò sã [[Special:UserLogin|wlogòwac]] znowa jakno równy, a bò jinszi brëkòwnik.
+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é.
@@ -578,8 +578,6 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1",
 'search-interwiki-caption' => 'Sosterné ùdbë',
 'search-interwiki-default' => 'Skùtczi dlô $1:',
 'search-interwiki-more' => '(wicy)',
-'search-mwsuggest-enabled' => 'z sugestëjama',
-'search-mwsuggest-disabled' => 'bez sugestëjów',
 'searchall' => 'wszëtczé',
 'nonefound' => "'''Bôczënk''':Dlô szëkbë są domëslno przistãpné blós niejedné rumë mionów.
 Spróbùjë szëkbë z przëdôwkã ''all:'' dlô całowny zamkłoscë starnów (zamëkający w se starnë diskùsëji, szablónë, ëtp), abò ùżëje przëdôwka wëbrónegò ruma mionów.",
index c750c19..abecafc 100644 (file)
@@ -61,8 +61,8 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ПРѢНАПРАВЛЄНИѤ', '#REDIRECT' ),
-       'language'                => array( '0', '#ѨꙀꙐКЪ:', '#LANGUAGE:' ),
+       'redirect'                  => array( '0', '#ПРѢНАПРАВЛЄНИѤ', '#REDIRECT' ),
+       'language'                  => array( '0', '#ѨꙀꙐКЪ:', '#LANGUAGE:' ),
 );
 
 $defaultDateFormat = 'mdy';
@@ -795,6 +795,9 @@ $messages = array(
 'logentry-move-move-noredirect' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ',
 'logentry-newusers-create' => '$1 сътворихъ польꙃєватєльско мѣсто',
 
+# Search suggestions
+'searchsuggest-containing' => 'сѥ дрьжащи···',
+
 # API errors
 'api-error-unknownerror' => 'нєвѣдома блаꙁна : ⁖ $1 ⁖',
 
index e45ad2b..21b5c61 100644 (file)
@@ -49,69 +49,69 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ail-cyfeirio', '#ailgyfeirio', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__DIMTAFLENCYNNWYS__', '__DIMRHESTRGYNNWYS__', '__DIMRHG__', '__NOTOC__' ),
-       'noeditsection'           => array( '0', '__DIMADRANGOLYGU__', '__DIMGOLYGUADRAN__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MISCYFOES', 'MISCYFREDOL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ENWMISCYFOES', 'ENWMISCYFREDOL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GENENWMISCYFOES', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'DYDDIADCYFOES', 'DYDDCYFREDOL', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'ENWDYDDCYFOES', 'ENWDYDDCYFREDOL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'FLWYDDYNCYFOES', 'BLWYDDYNGYFREDOL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AMSERCYFOES', 'AMSERCYFREDOL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AWRGYFREDOL', 'CURRENTHOUR' ),
-       'numberofarticles'        => array( '1', 'NIFEROERTHYGLAU', 'NIFERYRERTHYGLAU', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NIFERYFFEILIAU', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NIFERYDEFNYDDWYR', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NIFERYGOLYGIADAU', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ENWTUDALEN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ENWTUDALENE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'PARTH', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMESPACE', 'PARTHE', 'NAMESPACEE' ),
-       'fullpagename'            => array( '1', 'ENWLLAWNTUDALEN', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ENWLLAWNTUDALENE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ENWISDUDALEN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'ewin bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'de', 'right' ),
-       'img_left'                => array( '1', 'chwith', 'left' ),
-       'img_none'                => array( '1', 'dim', 'none' ),
-       'img_center'              => array( '1', 'canol', 'center', 'centre' ),
-       'img_page'                => array( '1', 'tudalen=$1', 'tudalen $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_sub'                 => array( '1', 'is', 'sub' ),
-       'img_super'               => array( '1', 'uwch', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'brig', 'top' ),
-       'img_bottom'              => array( '1', 'gwaelod', 'godre', 'bottom' ),
-       'server'                  => array( '0', 'GWEINYDD', 'SERVER' ),
-       'servername'              => array( '0', 'ENW\'RGWEINYDD', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'GRAMMAR', 'GRAMADEG', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'WYTHNOSGYFREDOL', 'CURRENTWEEK' ),
-       'revisionid'              => array( '1', 'IDYGOLYGIAD', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIWRNODYGOLYGIAD', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIWRNODYGOLYGIAD2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MISYGOLYGIAD', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'BLWYDDYNYGOLYGIAD', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STAMPAMSERYGOLYGIAD', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'LLUOSOG:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLLLAWN:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLLLAWNE:', 'FULLURLE:' ),
-       'newsectionlink'          => array( '1', '_NEWSECTIONLINK_', '_CYSWLLTADRANNEWYDD_', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'GOLYGIADCYFREDOL', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'STAMPAMSERCYFREDOL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STAMPAMSERLLEOL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#IAITH:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IAITHYCYNNWYS', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'TUDALENNAUYNYPARTH:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NIFERYGWEINYDDWYR', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FFORMATIORHIF', 'FORMATNUM' ),
-       'special'                 => array( '0', 'arbennig', 'special' ),
-       'hiddencat'               => array( '1', '_HIDDENCAT_', '_CATCUDD_', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'TUDALENNAUYNYCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'MAINTTUD', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#ail-cyfeirio', '#ailgyfeirio', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__DIMTAFLENCYNNWYS__', '__DIMRHESTRGYNNWYS__', '__DIMRHG__', '__NOTOC__' ),
+       'noeditsection'             => array( '0', '__DIMADRANGOLYGU__', '__DIMGOLYGUADRAN__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MISCYFOES', 'MISCYFREDOL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ENWMISCYFOES', 'ENWMISCYFREDOL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GENENWMISCYFOES', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'DYDDIADCYFOES', 'DYDDCYFREDOL', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'ENWDYDDCYFOES', 'ENWDYDDCYFREDOL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'FLWYDDYNCYFOES', 'BLWYDDYNGYFREDOL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AMSERCYFOES', 'AMSERCYFREDOL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AWRGYFREDOL', 'CURRENTHOUR' ),
+       'numberofarticles'          => array( '1', 'NIFEROERTHYGLAU', 'NIFERYRERTHYGLAU', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NIFERYFFEILIAU', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NIFERYDEFNYDDWYR', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NIFERYGOLYGIADAU', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ENWTUDALEN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ENWTUDALENE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'PARTH', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMESPACE', 'PARTHE', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ENWLLAWNTUDALEN', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ENWLLAWNTUDALENE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ENWISDUDALEN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'ewin bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'de', 'right' ),
+       'img_left'                  => array( '1', 'chwith', 'left' ),
+       'img_none'                  => array( '1', 'dim', 'none' ),
+       'img_center'                => array( '1', 'canol', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'tudalen=$1', 'tudalen $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_sub'                   => array( '1', 'is', 'sub' ),
+       'img_super'                 => array( '1', 'uwch', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'brig', 'top' ),
+       'img_bottom'                => array( '1', 'gwaelod', 'godre', 'bottom' ),
+       'server'                    => array( '0', 'GWEINYDD', 'SERVER' ),
+       'servername'                => array( '0', 'ENW\'RGWEINYDD', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'GRAMMAR', 'GRAMADEG', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'WYTHNOSGYFREDOL', 'CURRENTWEEK' ),
+       'revisionid'                => array( '1', 'IDYGOLYGIAD', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIWRNODYGOLYGIAD', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIWRNODYGOLYGIAD2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MISYGOLYGIAD', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'BLWYDDYNYGOLYGIAD', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STAMPAMSERYGOLYGIAD', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'LLUOSOG:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLLLAWN:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLLLAWNE:', 'FULLURLE:' ),
+       'newsectionlink'            => array( '1', '_NEWSECTIONLINK_', '_CYSWLLTADRANNEWYDD_', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'GOLYGIADCYFREDOL', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'STAMPAMSERCYFREDOL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STAMPAMSERLLEOL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#IAITH:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IAITHYCYNNWYS', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'TUDALENNAUYNYPARTH:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NIFERYGWEINYDDWYR', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FFORMATIORHIF', 'FORMATNUM' ),
+       'special'                   => array( '0', 'arbennig', 'special' ),
+       'hiddencat'                 => array( '1', '_HIDDENCAT_', '_CATCUDD_', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'TUDALENNAUYNYCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MAINTTUD', 'PAGESIZE' ),
 );
 
 $linkTrail = "/^([àáâèéêìíîïòóôûŵŷa-z]+)(.*)$/sDu";
@@ -522,7 +522,7 @@ Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''Rydych wedi allgofnodi.'''
 
-Gallwch ddefnyddio {{SITENAME}} yn anhysbys, neu fe allwch [[Special:UserLogin|fewngofnodi eto]] wrth yr un un enw neu wrth enw arall.
+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.
@@ -775,7 +775,6 @@ Dyma'r cofnod lòg diweddaraf, er gwybodaeth:",
 *'''Firefox / Safari:''' Pwyswch ar ''Shift'' tra'n clicio ''Ail-lwytho/Reload'', neu gwasgwch ''Ctrl-F5'' neu ''Ctrl-R'' (''⌘-R'' ar Mac);
 *'''Google Chrome:'''Pwyswch ar Ctrl-Shift-R'' (''⌘-Shift-R'' ar Mac)
 *'''Internet Explorer:''' Pwyswch ar ''Ctrl'' tra'n clicio ''Adnewyddu/Refresh'', neu gwasgwch ''Ctrl-F5''. 
-*'''Konqueror:''' Cliciwch y botwm ''Ail-lwytho/Reload'', neu gwasgwch ''F5''; 
 *'''Opera:''' gwacewch y celc yn llwyr trwy ''Offer → Dewisiadau / Tools→Preferences'';",
 'usercssyoucanpreview' => "'''Tip:''' Defnyddiwch y botwm \"{{int:showpreview}}\" er mwyn profi eich CSS newydd cyn ei gadw.",
 'userjsyoucanpreview' => "'''Tip:''' Defnyddiwch y botwm \"{{int:showpreview}}\" er mwyn profi eich JS newydd cyn ei gadw.",
@@ -1026,7 +1025,9 @@ Edrychwch ar y logiau er mwyn cael rhagor o wybodaeth.",
 'revdelete-only-restricted' => "Cafwyd gwall wrth guddio'r eitem dyddiedig $2, $1: ni allwch guddio eitemau o olwg gweinyddwyr heb ar yr un pryd ddewis un o'r opsiynau eraill i gyfyngu ar y gallu i weld.",
 'revdelete-reason-dropdown' => '*Rhesymau cyffredin dros ddileu
 ** Torri hawlfraint
-** Gwybodaeth bersonol anaddas',
+** Gwybodaeth bersonol anaddas neu sylw anaddas
+** Enw defnydiwr anaddas
+** Gwybodaeth a allai fod yn enllibus',
 'revdelete-otherreason' => 'Rheswm arall:',
 'revdelete-reasonotherlist' => 'Rheswm arall',
 'revdelete-edit-reasonlist' => 'Golygu rhestr y rhesymau dros ddileu',
@@ -1119,8 +1120,6 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi
 'search-interwiki-caption' => 'Chwaer-brosiectau',
 'search-interwiki-default' => 'Y canlyniadau o $1:',
 'search-interwiki-more' => '(rhagor)',
-'search-mwsuggest-enabled' => 'gydag awgrymiadau',
-'search-mwsuggest-disabled' => 'dim awgrymiadau',
 'search-relatedarticle' => 'Erthyglau eraill tebyg',
 'mwsuggest-disable' => 'Analluogi awgrymiadau AJAX',
 'searcheverything-enable' => 'Chwilio pob parth',
@@ -1679,7 +1678,7 @@ Gweler https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
 'img-auth-nofile' => 'Nid oes ffeil a\'r enw "$1" ar gael.',
 'img-auth-isdir' => 'Rydych yn ceisio cyrchu cyfeiriadur o\'r enw "$1".
 Dim ond ffeiliau y cewch eu cyrchu.',
-'img-auth-streaming' => 'Wrthi\'n llifo "$1".',
+'img-auth-streaming' => 'Wrthi\'n ffrydio "$1".',
 'img-auth-public' => "Gwaith img_auth.php yw allbynnu ffeiliau o wici preifat.
 Mae'r wici hwn wedi ei osod yn wici gyhoeddus.
 Er mwyn sicrhau'r diogelwch gorau posib, analluogwyd img_auth.php.",
@@ -1766,6 +1765,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.",
 
 # File reversion
 'filerevert' => 'Gwrthdroi $1',
@@ -1872,6 +1872,7 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|beit|beit|feit|beit|beit|beit}}',
 'ncategories' => '$1 {{PLURAL:$1|categori|categori|gategori|chategori|chategori|categori}}',
+'ninterwikis' => '$1 {{PLURAL:$1|cyswllt|cyswllt|gyswllt|chyswllt|chyswllt|cyswllt}}',
 'nlinks' => '$1 {{PLURAL:$1|cyswllt|cyswllt|gyswllt|chyswllt|chyswllt|cyswllt}}',
 'nmembers' => '$1 {{PLURAL:$1|aelod|aelod|aelod|aelod|aelod|aelod}}',
 'nrevisions' => '$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}',
@@ -1900,6 +1901,7 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 'mostlinkedtemplates' => 'Nodiadau yn nhrefn nifer y cysylltiadau iddynt',
 'mostcategories' => 'Erthyglau yn nhrefn nifer eu categorïau',
 'mostimages' => 'Ffeiliau yn nhrefn nifer y cysylltiadau iddynt',
+'mostinterwikis' => "Tudalennau a'r nifer mwyaf o gysylltau rhyngwici",
 'mostrevisions' => 'Tudalennau yn nhrefn nifer y newidiadau iddynt',
 'prefixindex' => 'Pob tudalen yn ôl parth',
 'prefixindex-namespace' => 'Pob tudalen â rhagddodiad penodol (y parth $1)',
@@ -2047,6 +2049,8 @@ Protocoliau sy\'n cael eu cynnal: <code>$1</code> (peidiwch ag ychwanegu\'r rhai
 a bod cyfeiriad e-bost dilys yn eich [[Special:Preferences|dewisiadau]]
 er mwyn medru anfon e-bost at ddefnyddwyr eraill.',
 'emailuser' => 'Anfon e-bost at y defnyddiwr hwn',
+'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.",
@@ -2191,7 +2195,7 @@ Gallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weit
 # Rollback
 'rollback' => 'Gwrthdroi golygiadau',
 'rollback_short' => 'Gwrthdroi',
-'rollbacklink' => '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}}',
 'rollbackfailed' => 'Methodd y gwrthdroi',
@@ -2724,7 +2728,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-nosubpage' => 'Nid yw\'r parth "$1", sef parth y wraidd-dudalen, yn caniatau is-dudalennau.',
+'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.',
 
 # Import log
 'importlogpage' => 'Lòg mewnforio',
@@ -2736,7 +2740,6 @@ Mae ffolder dros dro yn eisiau.',
 
 # JavaScriptTest
 'javascripttest' => 'Profi JavaScript',
-'javascripttest-disabled' => 'Ni alluogwyd y swyddogaeth hon ar y wici hwn.',
 'javascripttest-title' => 'Yn cynnal profion $1',
 'javascripttest-pagetext-noframework' => 'Neilltuwyd y dudalen hon at gynnal profion JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Ni nabyddwyd y fframwaith profi "$1".',
@@ -2842,11 +2845,27 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 
 # Info page
 'pageinfo-title' => 'Manylion "$1"',
-'pageinfo-header-edits' => 'Golygiadau',
+'pageinfo-header-basic' => 'Gwybodaeth sylfaenol',
+'pageinfo-header-edits' => 'Hanes golygu',
+'pageinfo-header-restrictions' => 'Diogelwch y dudalen',
+'pageinfo-header-properties' => "Priodweddau'r dudalen",
+'pageinfo-display-title' => 'Teitl y dudalen',
+'pageinfo-default-sort' => 'Allwedd trefnu diofyn',
+'pageinfo-length' => 'Hyd y dudalen (beitiau)',
+'pageinfo-article-id' => 'ID y dudalen',
+'pageinfo-robot-policy' => 'Statws i beiriannau chwilio',
 'pageinfo-views' => 'Nifer yr ymweliadau',
-'pageinfo-watchers' => 'Nifer y gwylwyr',
-'pageinfo-edits' => 'Nifer y golygiadau',
-'pageinfo-authors' => 'Nifer yr awduron gwahanol',
+'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-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-magic-words' => '{{PLURAL:$1|Gair|Gair|Geiriau}} hud ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categori|Categori|Categorïau}} cudd ($1)',
 
 # Skin names
 'skinname-standard' => 'Safonol',
@@ -3680,6 +3699,9 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'feedback-bugcheck' => "Iawn! Gwnewch yn siwr yn gyntaf nag ydy hwn yn un o'r [$1 bygiau hysbys].",
 'feedback-bugnew' => "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
 
+# Search suggestions
+'searchsuggest-containing' => 'yn cynnwys...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nid oes caniatad gennych i uwchlwytho ffeiliau ar y wici hwn.',
 'api-error-badtoken' => 'Gwall mewnol: tocyn gwael.',
index e039978..0022d3b 100644 (file)
@@ -42,6 +42,7 @@
  * @author Slomox
  * @author Svip
  * @author Søren Løvborg
+ * @author Tjernobyl
  * @author Urhixidur
  */
 
@@ -344,7 +345,7 @@ $messages = array(
 'vector-action-protect' => 'Beskyt',
 'vector-action-undelete' => 'Gendan',
 'vector-action-unprotect' => 'Ændr beskyttelse',
-'vector-simplesearch-preference' => 'Aktivér forbedrede søgeforslag (kun Vector-udseendet)',
+'vector-simplesearch-preference' => 'Aktivér forenklet søgefelt (kun Vector-udseendet)',
 'vector-view-create' => 'Opret',
 'vector-view-edit' => 'Redigér',
 'vector-view-history' => 'Se historik',
@@ -404,7 +405,7 @@ $messages = array(
 'redirectedfrom' => '(Omdirigeret fra $1)',
 'redirectpagesub' => 'Omdirigering',
 'lastmodifiedat' => 'Denne side blev senest ændret $1 kl. $2.',
-'viewcount' => 'Siden er vist {{PLURAL:$1|en gang|$1 gange}}.',
+'viewcount' => 'Siden er vist {{PLURAL:$1|en gang|$1 gange}}.',
 'protectedpage' => 'Beskyttet side',
 'jumpto' => 'Skift til:',
 'jumptonavigation' => 'Navigation',
@@ -436,7 +437,7 @@ $1',
 'portal' => 'Forside for skribenter',
 'portal-url' => 'Project:Forside',
 'privacy' => 'Behandling af personlige oplysninger',
-'privacypage' => 'Project:Behandling_af_personlige_oplysninger',
+'privacypage' => 'Project:Behandling af personlige oplysninger',
 
 'badaccess' => 'Manglende rettigheder',
 'badaccess-group0' => 'Du har ikke de nødvendige rettigheder til denne handling.',
@@ -531,15 +532,15 @@ Gør venligst en [[Special:ListUsers/sysop|administrator]] opmærksom på det, o
 'missingarticle-diff' => '(Forskel: $1, $2)',
 'readonly_lag' => 'Databasen er automatisk blevet låst mens slave database serverne synkronisere med master databasen',
 'internalerror' => 'Intern fejl',
-'internalerror_info' => 'Internal fejl: $1',
-'fileappenderrorread' => 'Kunne ikke læse "$1" under tilføjelsen.',
+'internalerror_info' => 'Intern fejl: $1',
+'fileappenderrorread' => 'Kunne ikke læse "$1" mens der blev tilføjet data.',
 'fileappenderror' => 'Kunne ikke tilføje "$1" til "$2".',
 'filecopyerror' => 'Kunne ikke kopiere filen "$1" til "$2".',
 'filerenameerror' => 'Kunne ikke omdøbe filen "$1" til "$2".',
 'filedeleteerror' => 'Kunne ikke slette filen "$1".',
-'directorycreateerror' => 'Kunne ikke oprette kataloget "$1".',
+'directorycreateerror' => 'Kunne ikke oprette mappen "$1".',
 'filenotfound' => 'Kunne ikke finde filen "$1".',
-'fileexistserror' => 'Kunne ikke oprette "$1": filen findes allerede',
+'fileexistserror' => 'Kunne ikke oprette "$1": filen findes allerede.',
 'unexpected' => 'Uventet værdi: "$1"="$2".',
 'formerror' => 'Fejl: Kunne ikke afsende formular',
 'badarticleerror' => 'Denne funktion kan ikke udføres på denne side.',
@@ -564,9 +565,10 @@ Forespørgsel: $2',
 'protectedpagetext' => 'Denne side er skrivebeskyttet.',
 '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 tekst til softwarens sprog-interface og er skrivebeskyttet for at forhindre misbrug.',
-'editinginterface' => "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere.
-For oversættelser bedes du venligst overveje at bruge [//translatewiki.net/wiki/Main_Page?setlang=da translatewiki.net], projektet for oversættelse af MediaWiki.",
+'protectedinterface' => 'Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.
+Hvis du vil tilføje eller ændre oversættelser til alle wiki-websteder, brug venligst [//translatewiki.net/ translatewiki.net], MediaWiki lokalisering projektet.',
+'editinginterface' => "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere af denne wiki.
+For at tilføje eller ændre oversættelser på alle wikier bedes du benytte [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
 'sqlhidden' => '(SQL forespørgsel skjult)',
 'cascadeprotected' => 'Denne side er skrivebeskyttet, da den er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse":
 $2',
@@ -591,7 +593,7 @@ Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
 # Login and logout pages
 'logouttext' => "'''Du er nu logget af.'''
 
-Du kan fortsætte med at bruge {{SITENAME}} anonymt, eller du kan [[Special:UserLogin|logge på igen]] som den samme eller en anden bruger.
+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! ==
 
@@ -599,9 +601,9 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'yourname' => 'Dit brugernavn:',
 'yourpassword' => 'Din adgangskode:',
 'yourpasswordagain' => 'Gentag adgangskode',
-'remembermypassword' => 'Husk mit brugernavn på denne computer (højst $1 {{PLURAL:$1|dag|dage}})',
+'remembermypassword' => 'Husk mit brugernavn i denne browser (højst $1 {{PLURAL:$1|dag|dage}})',
 'securelogin-stick-https' => 'Behold forbindelsen til HTTPS efter login',
-'yourdomainname' => 'Dit domænenavn',
+'yourdomainname' => 'Dit domænenavn:',
 'password-change-forbidden' => 'Du kan ikke ændre adgangskoder på denne wiki.',
 'externaldberror' => 'Der er opstået en fejl i en ekstern adgangsdatabase, eller du har ikke rettigheder til at opdatere denne.',
 'login' => 'Log på',
@@ -612,10 +614,10 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'logout' => 'Log af',
 'userlogout' => 'Log af',
 'notloggedin' => 'Ikke logget på',
-'nologin' => "Du har ingen brugerkonto? '''$1'''.",
-'nologinlink' => 'Opret ny brugerkonto',
-'createaccount' => 'Opret en ny konto',
-'gotaccount' => "Du har allerede en brugerkonto? '''$1'''.",
+'nologin' => 'Har du ingen konto? $1.',
+'nologinlink' => 'Opret en ny brugerkonto',
+'createaccount' => 'Opret en ny brugerkonto',
+'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
 'createaccountmail' => 'via e-mail',
@@ -624,14 +626,14 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'userexists' => 'Det brugernavn, du har valgt, er allerede i brug.
 Vælg venligst et andet brugernavn.',
 'loginerror' => 'Logon mislykket',
-'createaccounterror' => 'Kunne ikke oprette konto: $1',
+'createaccounterror' => 'Kunne ikke oprette brugerkonto: $1',
 'nocookiesnew' => 'Din brugerkonto er nu oprettet, men du er ikke logget på. {{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Vær venlig at slå cookies til, og derefter kan du logge på med dit nye brugernavn og kodeord.',
 'nocookieslogin' => '{{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Slå dem venligst til og prøv igen.',
 'nocookiesfornew' => 'Denne brugerkonto er ikke oprettet, da vi ikke kunne bekræfte dens kilde.
 Sørg for, at du har aktivereret cookies, genindlæs siden og prøv igen.',
 'noname' => 'Du har ikke angivet et gyldigt brugernavn.',
 'loginsuccesstitle' => 'Du er nu logget på',
-'loginsuccess' => 'Du er nu logget på {{SITENAME}} som "$1".',
+'loginsuccess' => "'''Du er nu logget på {{SITENAME}} som \"\$1\".'''",
 'nosuchuser' => 'Der er ingen bruger med navnet "$1".
 Der skelnes mellem store og bogstaver i brugernavne.
 Kontrollér stavemåden, eller [[Special:UserLogin/signup|opret en ny konto]].',
@@ -843,9 +845,10 @@ Hvis du er en anonym bruger og synes, at du har fået irrelevante kommentarer p
 Du kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede logger]
 eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} oprette siden]</span>.',
-'noarticletext-nopermission' => 'Der er i øjeblikket ikke noget tekst på denne side.
-Du kan [[Special:Search/{{PAGENAME}}|søge efter denne sides titel]] på andre sider,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} se de relaterede loglister]</span>.',
+'noarticletext-nopermission' => 'Der er i øjeblikket ikke nogen tekst på denne side.
+Du kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede loglister]</span>,
+men du har ikke tilladelse til at oprette denne side.',
 'missing-revision' => 'Revision #$1 af siden med navnet "{{PAGENAME}}" eksisterer ikke.
 
 Dette skyldes normalt at et forældet historik-link er fulgt til en side der er slettet.
@@ -855,10 +858,9 @@ Detaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'blocked-notice-logextract' => 'Denne bruger er i øjeblikket blokeret.
 Loggen over den seneste blokering ses nedenfor:',
 'clearyourcache' => "'''Bemærk:''' Efter at have gemt er du måske nødt til at tømme din browsers cache for at kunne se ændringerne.
-* '''Firefox / Safari:''' Hold ''shifttasten'' nede og klik på ''reload'', eller tryk enten ''Ctrl-F5'' eller ''Ctrl-Shift-r'' (''⌘-R'' på en Mac).
+* '''Firefox / Safari:''' Hold ''Shift'' nede og klik på ''Reload'', eller tryk enten ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på en Mac).
 * '''Google Chrome:''' Tryk ''Ctrl-Shift-R'' (''⌘-Shift-R'' på en Mac).
-* '''Internet Explorer:''' Hold ''controltasten'' nede og klik på ''refresh'' eller tryk på ''Ctrl-F5''.
-* '''Konqueror:''' Klik på ''reload'' eller tryk på ''F5''.
+* '''Internet Explorer:''' Hold ''Ctrl'' nede og klik på ''Refresh'' eller tryk på ''Ctrl-F5''.
 * '''Opera:''' Tøm cachen i ''Tools → Preferences''.",
 'usercssyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye CSS inden du gemmer.",
 'userjsyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye JavaScript inden du gemmer.",
@@ -1098,9 +1100,11 @@ Du har ikke adgang til det.',
 'revdelete-concurrent-change' => 'Fejl under modificering af objekt dateret $1 klokken $2: Dens status ser ud til at være blevet ændret af en, imens du prøvede at modificere den.
 Se venligst loglisterne.',
 'revdelete-only-restricted' => 'Fejl under skjulning af objekt dateret $2, $1: Du kan ikke skjule objekter for administratorerne uden at vælge en alternativ indstilling.',
-'revdelete-reason-dropdown' => '* Almindelige sletningsårsager
-** Overtrædelse af ophavsret
-** Upassende personlige oplysninger',
+'revdelete-reason-dropdown' => '* Almindelige begrundelser for sletning
+** Overtrædelse af ophavsretten
+** Upassende kommentar eller personlige oplysninger
+** Upassende brugernavn
+** Oplysninger, der muligvis er injuriende',
 'revdelete-otherreason' => 'Anden/yderligere årsag:',
 'revdelete-reasonotherlist' => 'Anden årsag',
 'revdelete-edit-reasonlist' => 'Rediger sletningsårsager',
@@ -1199,8 +1203,6 @@ Detaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-interwiki-caption' => 'Søsterprojekter',
 'search-interwiki-default' => '{{PLURAL:$1|et resultat|$1 resultater}}:',
 'search-interwiki-more' => '(mere)',
-'search-mwsuggest-enabled' => 'med forslag',
-'search-mwsuggest-disabled' => 'ingen forslag',
 'search-relatedarticle' => 'Relateret',
 'mwsuggest-disable' => 'Slå AJAX-forslag fra',
 'searcheverything-enable' => 'Søg i alle navnerum',
@@ -1297,7 +1299,7 @@ Her er en tilfældig genereret værdi som du kan bruge: $1',
 'timezoneregion-indian' => 'Indiske Ocean',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillad e-mails fra andre brugere',
-'prefs-searchoptions' => 'Søgeindstillinger',
+'prefs-searchoptions' => 'Søg',
 'prefs-namespaces' => 'Navnerum',
 'defaultns' => 'Ellers søg i disse navnerum:',
 'default' => 'standard',
@@ -1704,7 +1706,7 @@ Informer venligst en [[Special:ListUsers/sysop|systemadministrator]].',
 'backend-fail-internal' => 'En ukendt fejl opstod i filbackend "$1".',
 'backend-fail-contenttype' => 'Kunne ikke bestemme typen af indhold i filen, der skal gemmes på "$1".',
 'backend-fail-batchsize' => 'Lagringsbackend gav en batch på $1 fil{{PLURAL:$1|operation|operationer}}; grænsen er $2 {{PLURAL:$2|operation|operationer}}.',
-'backend-fail-usable' => 'Kunne ikke skrive til filen "$1" på grund af manglende rettigheder eller manglende mapper/containere.',
+'backend-fail-usable' => 'Kunne ikke læse eller skrive til filen "$1" på grund af manglende rettigheder eller manglende mapper/containere.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikke tilslutte til journal databasen for lager backenden "$1".',
@@ -1836,6 +1838,7 @@ Måske vil du redigere beskrivelsen på dens [$2 filbeskrivelsesside] der.',
 'uploadnewversion-linktext' => 'Læg en ny version af denne fil op',
 'shared-repo-from' => 'fra $1',
 'shared-repo' => 'et delt filarkiv',
+'upload-disallowed-here' => 'Desværre kan du ikke overskrive dette billede.',
 
 # File reversion
 'filerevert' => 'Gendan $1',
@@ -1944,6 +1947,7 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikilink|interwikilinks}}',
 'nlinks' => '{{PLURAL:$1|1 henvisning|$1 henvisninger}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
 'nrevisions' => '{{PLURAL:$1|1 ændring|$1 ændringer}}',
@@ -1972,6 +1976,7 @@ Hver linje indeholder henvisninger til den første og den anden omdirigering, s
 'mostlinkedtemplates' => 'Hyppigst brugte skabeloner',
 'mostcategories' => 'Mest brugte sider',
 'mostimages' => 'Mest brugte filer',
+'mostinterwikis' => 'Sider med flest interwikilinks',
 'mostrevisions' => 'Sider med de fleste ændringer',
 'prefixindex' => 'Alle sider med præfiks',
 'prefixindex-namespace' => 'Alle sider med præfiks (navnerummet $1)',
@@ -2118,6 +2123,8 @@ Der findes muligvis [[{{MediaWiki:Listgrouprights-helppage}}|yderligere informat
 'mailnologin' => 'Du er ikke logget på',
 'mailnologintext' => 'Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.',
 'emailuser' => 'E-mail til denne bruger',
+'emailuser-title-target' => 'Send email til denne {{GENDER:$1|bruger}}',
+'emailuser-title-notarget' => 'Send email til en bruger',
 'emailpage' => 'E-mail bruger',
 'emailpagetext' => 'Du kan bruge formularen nedenfor til at sende en e-mail til denne bruger.
 Den e-mail-adresse du har angivet i [[Special:Preferences|dine indstillinger]] vil dukke op i "fra"-feltet på e-mailen, så modtageren kan svare dig.',
@@ -2736,6 +2743,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'import-interwiki-templates' => 'Inkluder alle skabeloner',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Importer til navnerum:',
+'import-interwiki-rootpage' => 'Destinationens stamside (valgfri):',
 'import-upload-filename' => 'Filnavn:',
 'import-comment' => 'Kommentar:',
 'importtext' => "Eksportér filen fra kilde-wiki'en ved hjælp af [[Special:Export|eksporterings værktøjet]], gem den på din harddisk og upload den her.",
@@ -2767,6 +2775,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-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.',
 
@@ -2780,7 +2789,6 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 
 # JavaScriptTest
 'javascripttest' => 'Test af JavaScript',
-'javascripttest-disabled' => 'Denne funktion er ikke aktiveret på denne wiki.',
 'javascripttest-title' => 'Kører $1 test',
 'javascripttest-pagetext-noframework' => 'Denne side er reserveret til at teste JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Ukendt testmiljø "$1".',
@@ -2895,11 +2903,34 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-header-edits' => 'Redigeringer',
+'pageinfo-header-basic' => 'Grundlæggende oplysninger',
+'pageinfo-header-edits' => 'Redigeringshistorik',
+'pageinfo-header-restrictions' => 'Sidebeskyttelse',
+'pageinfo-header-properties' => 'Sideegenskaber',
+'pageinfo-display-title' => 'Vist sidetitel',
+'pageinfo-default-sort' => 'Standardsorteringsnøgle',
+'pageinfo-length' => 'Sidelængde (i bytes)',
+'pageinfo-article-id' => 'Side-ID',
+'pageinfo-robot-policy' => 'Søgemaskinestatus',
+'pageinfo-robot-index' => 'Indekserbar',
+'pageinfo-robot-noindex' => 'Ikke indekserbar',
 'pageinfo-views' => 'Antal visninger',
 'pageinfo-watchers' => 'Antal brugere, der overvåger siden',
-'pageinfo-edits' => 'Antal redigeringer',
-'pageinfo-authors' => 'Antal forskellige forfattere',
+'pageinfo-redirects-name' => 'Omdirigeringer til denne side',
+'pageinfo-subpages-name' => 'Undersider til denne side',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringer}}; $3 {{PLURAL:$3|der ikke er en omdirigering|der ikke er omdirigeringer}})',
+'pageinfo-firstuser' => 'Brugeren, der oprettede siden',
+'pageinfo-firsttime' => 'Dato for oprettelsen af siden',
+'pageinfo-lastuser' => 'Brugeren, der senest har redigeret siden',
+'pageinfo-lasttime' => 'Dato for seneste redigering',
+'pageinfo-edits' => 'Samlet antal redigeringer',
+'pageinfo-authors' => 'Det samlede antal forskellige forfattere',
+'pageinfo-recent-edits' => 'Antallet af nylige redigeringer (i løbet af de seneste $1)',
+'pageinfo-recent-authors' => 'Antallet af bidragydere, der har redigeret siden for nyligt',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Transkluderet skabelon|Transkluderede skabeloner}} ($1)',
+'pageinfo-toolboxlink' => 'Oplysninger om siden',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -2953,6 +2984,7 @@ Du kan beskadige dit system hvis du udfører den.",
 'file-info-size-pages' => '$1 × $2 punkter, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}',
 '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',
 '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.',
@@ -2962,6 +2994,8 @@ Du kan beskadige dit system hvis du udfører den.",
 'file-info-png-looped' => 'gentaget',
 'file-info-png-repeat' => 'afspillede $1 {{PLURAL:$1|gang|gange}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|billede|billeder}}',
+'file-no-thumb-animation' => "'''Bemærk: På grund af tekniske begrænsninger vil miniaturebilleder af denne fil ikke blive animeret.'''",
+'file-no-thumb-animation-gif' => "'''Bemærk: På grund af tekniske begrænsninger vil miniaturebilleder af GIF-filer, der som denne er i høj opløsning, ikke blive animeret.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri med de nyeste billeder',
@@ -3469,6 +3503,7 @@ Denne bekræftelseskode vil udløbe den $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-tilkobling er deaktiveret]',
 'scarytranscludefailed' => '[Hentning af skabelon for $1 mislykkedes]',
+'scarytranscludefailed-httpstatus' => '[Hentning af skabelon for $1 mislykkedes: HTTP $2]',
 'scarytranscludetoolong' => "[URL'en er for lang]",
 
 # Delete conflict
@@ -3740,6 +3775,10 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'feedback-bugcheck' => 'Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].',
 'feedback-bugnew' => 'Jeg har kontrolleret. Rapporter en ny fejl.',
 
+# Search suggestions
+'searchsuggest-search' => 'Søg',
+'searchsuggest-containing' => 'indeholder...',
+
 # API errors
 'api-error-badaccess-groups' => 'Du har ikke tilladelse til at overføre filer til denne wiki.',
 'api-error-badtoken' => 'Intern fejl: ugyldigt mærke.',
index 87a94c5..74ce9f5 100644 (file)
  * @author ChrisiPK
  * @author Church of emacs
  * @author DaSch
+ * @author Das Schäfchen
  * @author Duesentrieb
  * @author Filzstift
  * @author Geitost
  * @author Giftpflanze
+ * @author Hoo
  * @author Imre
  * @author Inkowik
  * @author Jan Luca
@@ -157,6 +159,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME-Typ-Suche' ),
        'Mostcategories'            => array( 'Meistkategorisierte_Seiten' ),
        'Mostimages'                => array( 'Meistbenutzte_Dateien' ),
+       'Mostinterwikis'            => array( 'Meiste_Interwikilinks' ),
        'Mostlinked'                => array( 'Meistverlinkte_Seiten' ),
        'Mostlinkedcategories'      => array( 'Meistbenutzte_Kategorien' ),
        'Mostlinkedtemplates'       => array( 'Meistbenutzte_Vorlagen' ),
@@ -245,150 +248,153 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'JETZIGER_MONATSNAME_KURZ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JETZIGER_KALENDERTAG_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JETZIGE_STUNDE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALER_MONAT', 'LOKALER_MONAT_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALER_MONAT_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALER_MONATSNAME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALER_MONATSNAME_KURZ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALER_KALENDERTAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALER_KALENDERTAG_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALER_WOCHENTAG', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALES_JAHR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALE_UHRZEIT', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALE_STUNDE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'DATEIANZAHL', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BEARBEITUNGSANZAHL', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BETRACHTUNGEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SEITENNAME', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SEITENNAME_URL', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAMENSRAUM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMENSRAUM_URL', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSSIONSNAMENSRAUM', 'DISK_NR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSSIONSNAMENSRAUM_URL', 'DISK_NR_URL', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'HAUPTNAMENSRAUM_URL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'VOLLER_SEITENNAME', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'VOLLER_SEITENNAME_URL', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNTERSEITE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNTERSEITE_URL', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'OBERSEITE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'OBERSEITE_URL', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSSIONSSEITE', 'DISK', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSSIONSSEITE_URL', 'DISK_URL', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'ERS:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
-       'img_thumbnail'           => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'ohne', 'none' ),
-       'img_center'              => array( '1', 'zentriert', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'rahmenlos', 'frameless' ),
-       'img_page'                => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grundlinie', 'baseline' ),
-       'img_sub'                 => array( '1', 'tiefgestellt', 'tief', 'sub' ),
-       'img_super'               => array( '1', 'hochgestellt', 'hoch', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'oben', 'top' ),
-       'img_text_top'            => array( '1', 'text-oben', 'text-top' ),
-       'img_middle'              => array( '1', 'mitte', 'middle' ),
-       'img_bottom'              => array( '1', 'unten', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-unten', 'text-bottom' ),
-       'img_link'                => array( '1', 'verweis=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'alternativtext=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'NACHRICHT:', 'INT:' ),
-       'sitename'                => array( '1', 'PROJEKTNAME', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'nse'                     => array( '0', 'NR_URL:', 'NSE:' ),
-       'localurl'                => array( '0', 'LOKALE_URL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALE_URL_C:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKELPFAD', 'ARTICLEPATH' ),
-       'scriptpath'              => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STILPFAD', 'STYLEPFAD', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESCHLECHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALER_WOCHENTAG_ZAHL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIONSTAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIONSTAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIONSMONAT', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'REVISIONSMONAT1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'REVISIONSJAHR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'KANONISCHE_URL_C:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'INITIAL_KLEIN:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITIAL_GROSS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KLEIN:', 'LC:' ),
-       'uc'                      => array( '0', 'GROSS:', 'UC:' ),
-       'raw'                     => array( '0', 'ROH:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SEITENTITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NEUER_ABSCHNITTSLINK__', '__PLUS_LINK__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__KEIN_NEUER_ABSCHNITTSLINK__', '__KEIN_PLUS_LINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLENKODIERT:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERENKODIERT:', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'JETZIGER_ZEITSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALER_ZEITSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'TEXTAUSRICHTUNG', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#SPRACHE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHALTSSPRACHE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_IN_NR:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ADMINANZAHL', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ZAHLENFORMAT', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'FÜLLENLINKS', 'PADLEFT' ),
-       'padright'                => array( '0', 'FÜLLENRECHTS', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spezial', 'special' ),
-       'defaultsort'             => array( '1', 'SORTIERUNG:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'markierung', 'tag' ),
-       'hiddencat'               => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDIZIEREN__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PFAD', 'PATH' ),
-       'url_query'               => array( '0', 'ABFRAGE', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'keinfehler', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'keineersetzung', 'noreplace' ),
+       'redirect'                  => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'JETZIGER_MONATSNAME_KURZ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JETZIGER_KALENDERTAG_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JETZIGE_STUNDE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALER_MONAT', 'LOKALER_MONAT_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALER_MONAT_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALER_MONATSNAME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALER_MONATSNAME_KURZ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALER_KALENDERTAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALER_KALENDERTAG_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALER_WOCHENTAG', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALES_JAHR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALE_UHRZEIT', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALE_STUNDE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'DATEIANZAHL', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BEARBEITUNGSANZAHL', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BETRACHTUNGEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SEITENNAME', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SEITENNAME_URL', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAMENSRAUM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMENSRAUM_URL', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NAMENSRAUMNUMMER', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'DISKUSSIONSNAMENSRAUM', 'DISK_NR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSSIONSNAMENSRAUM_URL', 'DISK_NR_URL', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'HAUPTNAMENSRAUM_URL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'VOLLER_SEITENNAME', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'VOLLER_SEITENNAME_URL', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNTERSEITE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNTERSEITE_URL', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'OBERSEITE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'OBERSEITE_URL', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSSIONSSEITE', 'DISK', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSSIONSSEITE_URL', 'DISK_URL', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'ERS:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
+       'img_thumbnail'             => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'ohne', 'none' ),
+       'img_center'                => array( '1', 'zentriert', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rahmenlos', 'frameless' ),
+       'img_page'                  => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grundlinie', 'baseline' ),
+       'img_sub'                   => array( '1', 'tiefgestellt', 'tief', 'sub' ),
+       'img_super'                 => array( '1', 'hochgestellt', 'hoch', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'oben', 'top' ),
+       'img_text_top'              => array( '1', 'text-oben', 'text-top' ),
+       'img_middle'                => array( '1', 'mitte', 'middle' ),
+       'img_bottom'                => array( '1', 'unten', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-unten', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verweis=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'alternativtext=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'NACHRICHT:', 'INT:' ),
+       'sitename'                  => array( '1', 'PROJEKTNAME', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'nse'                       => array( '0', 'NR_URL:', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKALE_URL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALE_URL_C:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKELPFAD', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'SEITENID', 'SEITENKENNUNG', 'PAGEID' ),
+       'scriptpath'                => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STILPFAD', 'STYLEPFAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESCHLECHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALER_WOCHENTAG_ZAHL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIONSTAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIONSTAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIONSMONAT', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'REVISIONSMONAT1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'REVISIONSJAHR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'KANONISCHE_URL_C:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'INITIAL_KLEIN:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITIAL_GROSS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KLEIN:', 'LC:' ),
+       'uc'                        => array( '0', 'GROSS:', 'UC:' ),
+       'raw'                       => array( '0', 'ROH:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SEITENTITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NEUER_ABSCHNITTSLINK__', '__PLUS_LINK__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__KEIN_NEUER_ABSCHNITTSLINK__', '__KEIN_PLUS_LINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLENKODIERT:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERENKODIERT:', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'JETZIGER_ZEITSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALER_ZEITSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'TEXTAUSRICHTUNG', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#SPRACHE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHALTSSPRACHE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_IN_NR:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ADMINANZAHL', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ZAHLENFORMAT', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'FÜLLENLINKS', 'PADLEFT' ),
+       'padright'                  => array( '0', 'FÜLLENRECHTS', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spezial', 'special' ),
+       'speciale'                  => array( '0', 'speziale', 'speciale' ),
+       'defaultsort'               => array( '1', 'SORTIERUNG:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'erweiterung', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDIZIEREN__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PFAD', 'PATH' ),
+       'url_query'                 => array( '0', 'ABFRAGE', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'keinfehler', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'keineersetzung', 'noreplace' ),
 );
 
 $imageFiles = array(
@@ -446,7 +452,7 @@ $messages = array(
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
-'underline-default' => 'abhängig von Browsereinstellung',
+'underline-default' => 'abhängig von der Browsereinstellung',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Schriftart für den Text im Bearbeitungsfenster:',
@@ -542,10 +548,10 @@ $messages = array(
 'qbbrowse' => 'Durchsuchen',
 'qbedit' => 'Bearbeiten',
 'qbpageoptions' => 'Seitenoptionen',
-'qbpageinfo' => 'Seitendaten',
+'qbpageinfo' => 'Kontext',
 'qbmyoptions' => 'Meine Seiten',
 'qbspecialpages' => 'Spezialseiten',
-'faq' => 'Häufige Fragen',
+'faq' => 'Häufig gestellte Fragen',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
@@ -555,7 +561,7 @@ $messages = array(
 'vector-action-protect' => 'Schützen',
 'vector-action-undelete' => 'Wiederherstellen',
 'vector-action-unprotect' => 'Seitenschutz ändern',
-'vector-simplesearch-preference' => 'Erweiterte Suchvorschläge aktivieren (nur Vector)',
+'vector-simplesearch-preference' => 'Vereinfachte Suchleiste aktivieren (nur Vector)',
 'vector-view-create' => 'Erstellen',
 'vector-view-edit' => 'Bearbeiten',
 'vector-view-history' => 'Versionsgeschichte',
@@ -644,13 +650,13 @@ $1',
 'mainpage' => 'Hauptseite',
 'mainpage-description' => 'Hauptseite',
 'policy-url' => 'Project:Richtlinien',
-'portal' => 'Gemeinschafts-Portal',
-'portal-url' => 'Project:Gemeinschafts-Portal',
+'portal' => 'Gemeinschaftsportal',
+'portal-url' => 'Project:Gemeinschaftsportal',
 'privacy' => 'Datenschutz',
 'privacypage' => 'Project:Datenschutz',
 
-'badaccess' => 'Keine ausreichenden Rechte',
-'badaccess-group0' => 'Du hast nicht die erforderliche Berechtigung für diese Aktion.',
+'badaccess' => 'Keine ausreichenden Benutzerrechte',
+'badaccess-group0' => 'Du hast nicht die erforderlichen Benutzerrechte für diese Aktion.',
 'badaccess-groups' => 'Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} „$1“ angehören.',
 
 'versionrequired' => 'Version $1 von MediaWiki ist erforderlich.',
@@ -776,16 +782,17 @@ Bitte versuche es in ein paar Minuten erneut.',
 'protectedpagetext' => 'Diese Seite wurde geschützt, um Bearbeitungen 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 und ist geschützt, um Missbrauch vorzubeugen.',
+'protectedinterface' => 'Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.
+Nutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.',
 'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
-Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche aus.
-Ziehe bitte im Fall von Übersetzungen in Betracht, diese bei [//translatewiki.net/wiki/Main_Page?setlang=de translatewiki.net], der Lokalisierungsplattform für MediaWiki, durchzuführen.",
+Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.
+Nutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
 'sqlhidden' => "''Die SQL-Datenbankabfrage ist verborgen.''",
 'cascadeprotected' => 'Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:
 $2',
 'namespaceprotected' => "Du hast nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
 'customcssprotected' => 'Du hast nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.',
-'customjsprotected' => 'Du hast nicht die Berechtigung diese JavaScript enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.',
+'customjsprotected' => 'Du hast nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.',
 'ns-specialprotected' => 'Spezialseiten können nicht bearbeitet werden.',
 'titleprotected' => "Eine Seite mit diesem Namen kann nicht angelegt werden.
 Die Sperre wurde durch [[User:$1|$1]] mit der Begründung ''„$2“'' eingerichtet.",
@@ -805,12 +812,12 @@ Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3
 # Login and logout pages
 'logouttext' => "'''Du bist nun abgemeldet.'''
 
-Du kannst {{SITENAME}} jetzt anonym weiternutzen, oder dich erneut unter demselben oder einem anderen Benutzernamen [[Special:UserLogin|anmelden]].
+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 eingerichtet.
-Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupassen.',
+Dein Benutzerkonto wurde soeben eingerichtet.
+Vergiss nicht, deine [[Special:Preferences|Einstellungen]] für dieses Wiki anzupassen.',
 'yourname' => 'Benutzername:',
 'yourpassword' => 'Passwort:',
 'yourpasswordagain' => 'Passwort wiederholen:',
@@ -822,7 +829,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupass
 'login' => 'Anmelden',
 'nav-login-createaccount' => 'Anmelden / Benutzerkonto erstellen',
 'loginprompt' => 'Zur Anmeldung müssen Cookies aktiviert sein.',
-'userlogin' => 'Anmelden / Erstellen',
+'userlogin' => 'Anmelden / Benutzerkonto anlegen',
 'userloginnocreate' => 'Anmelden',
 'logout' => 'Abmelden',
 'userlogout' => 'Abmelden',
@@ -902,7 +909,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-addy' => 'Versuchte, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.',
 
 # Change password dialog
 'resetpass' => 'Passwort ändern',
@@ -927,7 +934,7 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu
 'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen deines Benutzerkontos zu erhalten.',
 'passwordreset-legend' => 'Passwort zurücksetzen',
 'passwordreset-disabled' => 'Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.',
-'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein}}',
+'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein.}}',
 'passwordreset-username' => 'Benutzername:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Die E-Mail-Nachricht ansehen?',
@@ -992,7 +999,7 @@ Temporäres Passwort: $2',
 'showpreview' => 'Vorschau zeigen',
 'showlivepreview' => 'Sofortige Vorschau',
 'showdiff' => 'Änderungen zeigen',
-'anoneditwarning' => "Du bearbeitest diese Seite unangemeldet. Wenn du speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+'anoneditwarning' => "Du bearbeitest diese Seite unangemeldet. Wenn du sie speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
 'anonpreviewwarning' => "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
 'missingsummary' => "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
 'missingcommenttext' => 'Dein Abschnitt enthält keinen Text.',
@@ -1002,7 +1009,7 @@ Temporäres Passwort: $2',
 'blockedtitle' => 'Benutzer ist gesperrt',
 'blockedtext' => "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''
 
-Die Sperrung wurde von $1 durchgeführt.
+Die Sperrung wurde vom Administrator $1 durchgeführt.
 Als Grund wurde ''$2'' angegeben.
 
 * Beginn der Sperre: $8
@@ -1011,7 +1018,7 @@ Als Grund wurde ''$2'' angegeben.
 
 Du kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
 Du kannst die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.
-Deine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.
+Deine aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.
 Bitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
 'autoblockedtext' => "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.
 Als Grund wurde angegeben:
@@ -1051,8 +1058,7 @@ Du kannst sie <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}}
 ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]
 oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.',
 'noarticletext-nopermission' => 'Diese Seite enthält momentan noch keinen Text.
-Du kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]
-oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>',
+Du kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span> Du bist allerdings nicht berechtigt diese Seite zu erstellen.',
 'missing-revision' => 'Die Version $1 der Seite namens „{{PAGENAME}}“ ist nicht vorhanden.
 
 Dieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.
@@ -1100,7 +1106,7 @@ Eine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durc
 'editingsection' => 'Bearbeiten von „$1“ (Abschnitt)',
 'editingcomment' => 'Bearbeiten von „$1“ (Neuer Abschnitt)',
 'editconflict' => 'Bearbeitungskonflikt: $1',
-'explainconflict' => "Jemand anders hat diese Seite geändert, nachdem du angefangen hast sie zu bearbeiten.
+'explainconflict' => "Jemand anders hat diese Seite geändert, nachdem du angefangen hast, sie zu bearbeiten.
 Das obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.
 Das untere Textfeld enthält deine Änderungen.
 Bitte füge deine Änderungen in das obere Textfeld ein.
@@ -1112,12 +1118,12 @@ Bitte füge deine Änderungen in das obere Textfeld ein.
 'yourdiff' => 'Unterschiede',
 'copyrightwarning' => "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />
 Du gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.
-<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Details). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf „Seite speichern“.</i>",
+<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.</i>",
 'copyrightwarning2' => "Bitte beachte, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.
 Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.
 
 Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast
-(siehe $1 für weitere Details). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+(siehe $1 für weitere Einzelheiten). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
 'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''
 Er kann nicht gespeichert werden.",
 'readonlywarning' => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass deine Änderungen derzeit nicht gespeichert werden können.
@@ -1160,6 +1166,15 @@ Sie wurde anscheinend gelöscht.',
 'edit-no-change' => 'Deine Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenommen wurde.',
 'edit-already-exists' => 'Die neue Seite konnte nicht erstellt werden, da sie bereits vorhanden ist.',
 'defaultmessagetext' => 'Standardtext',
+'content-failed-to-parse' => 'Parsen des Inhalts $2 für Modell $1 fehlgeschlagen: $3',
+'invalid-content-data' => 'Ungültige Inhaltsdaten',
+'content-not-allowed-here' => 'Der Inhalt „$1“ ist auf der Seite [[$2]] nicht erlaubt',
+
+# Content models
+'content-model-wikitext' => 'Wikitext',
+'content-model-text' => 'Klartext',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Achtung''': Diese Seite enthält zu viele Aufrufe aufwändiger Parserfunktionen.
@@ -1183,7 +1198,7 @@ Sie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|is
 
 # "Undo" feature
 'undo-success' => 'Die Bearbeitung kann rückgängig gemacht werden.
-Bitte prüfe den Vergleich unten um sicherzustellen, dass du dies tun möchtest, und speichere dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.',
+Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und speichere dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.',
 'undo-failure' => 'Die Änderung konnte nicht rückgängig gemacht werden, da der betroffene Abschnitt zwischenzeitlich verändert wurde.',
 'undo-norev' => 'Die Bearbeitung konnte nicht rückgängig gemacht werden, da sie nicht vorhanden ist oder gelöscht wurde.',
 'undo-summary' => 'Änderung $1 von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) rückgängig gemacht.',
@@ -1313,7 +1328,9 @@ Bitte prüfe die Logbücher.',
 'revdelete-only-restricted' => 'Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Du kannst keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.',
 'revdelete-reason-dropdown' => '*Allgemeine Löschgründe
 ** Urheberrechtsverletzung
-** Unangebrachte persönliche Informationen',
+** Unangebrachte Kommentare oder persönliche Informationen
+** Unangebrachter Benutzername
+** Potentiell beleidigende Informationen',
 'revdelete-otherreason' => 'Anderer/ergänzender Grund:',
 'revdelete-reasonotherlist' => 'Anderer Grund',
 'revdelete-edit-reasonlist' => 'Löschgründe bearbeiten',
@@ -1392,7 +1409,7 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'searchhelp-url' => 'Help:Hilfe',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Zeige alle Seiten, die mit dem Suchbegriff anfangen]]',
 'searchprofile-articles' => 'Inhaltsseiten',
-'searchprofile-project' => 'Hilfe und Projektseiten',
+'searchprofile-project' => 'Hilfe- und Projektseiten',
 'searchprofile-images' => 'Multimedia',
 'searchprofile-everything' => 'Alles',
 'searchprofile-advanced' => 'Erweitert',
@@ -1410,8 +1427,6 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'search-interwiki-caption' => 'Schwesterprojekte',
 'search-interwiki-default' => '$1 Ergebnisse:',
 'search-interwiki-more' => '(weitere)',
-'search-mwsuggest-enabled' => 'mit Vorschlägen',
-'search-mwsuggest-disabled' => 'keine Vorschläge',
 'search-relatedarticle' => 'Verwandte',
 'mwsuggest-disable' => 'Vorschläge per Ajax deaktivieren',
 'searcheverything-enable' => 'In allen Namensräumen suchen',
@@ -1491,7 +1506,7 @@ Hier ein zufällig generierter Wert, den du verwenden kannst: $1',
 'savedprefs' => 'Deine Einstellungen wurden gespeichert.',
 'timezonelegend' => 'Zeitzone:',
 'localtime' => 'Ortszeit:',
-'timezoneuseserverdefault' => 'Standardzeit des Wikis nutzen ($1)',
+'timezoneuseserverdefault' => 'Standardzeit dieses Wikis nutzen ($1)',
 'timezoneuseoffset' => 'Andere (Unterschied angeben)',
 'timezoneoffset' => 'Unterschied¹:',
 'servertime' => 'Aktuelle Zeit auf dem Server:',
@@ -1507,7 +1522,7 @@ Hier ein zufällig generierter Wert, den du verwenden kannst: $1',
 'timezoneregion-indian' => 'Indischer Ozean',
 'timezoneregion-pacific' => 'Pazifischer Ozean',
 'allowemail' => 'E-Mail-Empfang von anderen Benutzern ermöglichen',
-'prefs-searchoptions' => 'Suchoptionen',
+'prefs-searchoptions' => 'Suche',
 'prefs-namespaces' => 'Namensräume',
 'defaultns' => 'Anderenfalls in diesen Namensräumen suchen:',
 'default' => 'Voreinstellung',
@@ -1674,8 +1689,8 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 # User rights log
 'rightslog' => 'Rechte-Logbuch',
 'rightslogtext' => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
-'rightslogentry' => 'änderte die Benutzerrechte für „$1“ von „$2“ auf „$3“',
-'rightslogentry-autopromote' => 'wurde automatisch von „$2“ nach „$3“ zugeordnet',
+'rightslogentry' => 'änderte die Benutzerrechte für „$1“ von „$2“ zu „$3“',
+'rightslogentry-autopromote' => 'wurde automatisch von „$2“ zu „$3“ zugeordnet',
 'rightsnone' => '(–)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1796,11 +1811,11 @@ Um ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden
 'filereuploadsummary' => 'Dateiänderungen:',
 'filestatus' => 'Copyright-Status:',
 'filesource' => 'Quelle:',
-'uploadedfiles' => 'Hochgeladene Dateien',
+'uploadedfiles' => 'Hochladen',
 'ignorewarning' => 'Warnung ignorieren und Datei speichern',
 'ignorewarnings' => 'Warnungen ignorieren',
 'minlength1' => 'Dateinamen müssen mindestens einen Buchstaben lang sein.',
-'illegalfilename' => 'Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche sie erneut hochzuladen.',
+'illegalfilename' => 'Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.',
 'filename-toolong' => 'Dateinamen dürfen nicht größer als 240 Byte sein.',
 'badfilename' => 'Der Dateiname wurde in „$1“ geändert.',
 'filetype-mime-mismatch' => 'Dateierweiterung „.$1“ stimmt nicht mit dem MIME-Typ ($2) überein.',
@@ -1810,14 +1825,14 @@ Um ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden
 'filetype-banned-type' => "'''„.$1“''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.
 {{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
 'filetype-missing' => 'Die hochzuladende Datei hat keine Erweiterung (z. B. „.jpg“).',
-'empty-file' => 'Die übertragene Datei ist leer',
-'file-too-large' => 'Die übertragene Datei ist zu groß',
-'filename-tooshort' => 'Der Dateiname ist zu kurz',
+'empty-file' => 'Die von dir übertragene Datei hat keinen Inhalt.',
+'file-too-large' => 'Die hochgeladene Datei war zu groß.',
+'filename-tooshort' => 'Der Dateiname ist zu kurz.',
 'filetype-banned' => 'Diese Dateiendung ist gesperrt.',
 'verification-error' => 'Diese Datei hat die Dateiprüfung nicht bestanden.',
-'hookaborted' => 'Der Versuch, die Änderung durchzuführen, ist aufgrund eines Extension-Hooks fehlgeschlagen',
-'illegal-filename' => 'Der Dateiname ist nicht erlaubt',
-'overwrite' => 'Das Überschreiben einer existierenden Datei ist nicht erlaubt',
+'hookaborted' => 'Der Versuch, die Änderung durchzuführen, wurde von einer Parsererweiterung abgebrochen.',
+'illegal-filename' => 'Der Dateiname ist nicht zulässig.',
+'overwrite' => 'Das Überschreiben einer bereits vorhandenen Datei ist nicht erlaubt.',
 'unknown-error' => 'Ein unbekannter Fehler ist aufgetreten.',
 'tmp-create-error' => 'Temporäre Datei konnte nicht erstellt werden',
 'tmp-write-error' => 'Fehler beim Schreiben der temporären Datei',
@@ -1833,7 +1848,7 @@ Die Beschreibungsseite musst du nach dem Hochladen der Datei noch manuell bearbe
 [[$1|thumb]]',
 'fileexists-extension' => 'Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]
 * Name der hochzuladenden Datei: <strong>[[:$1]]</strong>
-* Name der vorhandenen Datei: <strong>[[:$2]]</strong>
+* Name der bereits vorhandenen Datei: <strong>[[:$2]]</strong>
 Bitte wähle einen anderen Namen.',
 'fileexists-thumbnail-yes' => "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Miniatur)'' zu handeln. [[$1|thumb]]
 Bitte prüfe die Datei <strong>[[:$1]]</strong>.
@@ -1933,7 +1948,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-internal' => 'Im Speicher-Backend „$1“ ist ein unbekannter Fehler aufgetreten.',
 'backend-fail-contenttype' => 'Der Inhaltstyp, der im Pfad „$1“ zu speichernden Datei, konnte nicht bestimmt werden.',
 'backend-fail-batchsize' => 'Eine Stapelverarbeitungsdatei, die {{PLURAL:$1|eine Operation|$1 Operationen}} enthält, wurde an das Speicher-Backend gesandt. Die Begrenzung liegt allerdings bei {{PLURAL:$2|einer Operation|$2 Operationen}}.',
-'backend-fail-usable' => 'Die Datei $1 konnte, entweder aufgrund eines nicht vorhandenen Verzeichnisses oder aufgrund unzureichender Berechtigungen, nicht gespeichert werden.',
+'backend-fail-usable' => 'Die Datei „$1“ konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends „$1“ hergestellt werden.',
@@ -1964,17 +1979,17 @@ Sie kann daher keiner ordnungsgemäßen Sicherheitsüberprüfung unterzogen werd
 '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-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 die Sitzungsdaten abgelaufen sind. Bitte erneut versuchen.',
+'uploadstash-badtoken' => 'Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.',
 'uploadstash-errclear' => 'Das Entfernen der vorab gespeicherten Dateien war erfolglos.',
 'uploadstash-refresh' => 'Liste der Dateien aktualisieren',
 'invalid-chunk-offset' => 'Ungültiger Startpunkt',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Zugriff verweigert',
-'img-auth-nopathinfo' => 'PATH_INFO fehlt.
+'img-auth-nopathinfo' => 'Die Angabe PATH_INFO fehlt.
 Der Server ist nicht dafür eingerichtet, diese Information weiterzugeben.
-Sie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.
-Siehe hierzu die Seite https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
+Sie könnte CGI-gestützt sein und kann daher „img_auth“ (Authentifizierung des Dateiaufrufs) nicht unterstützen.
+Siehe hierzu die Seite https://www.mediawiki.org/wiki/Manual:Image_Authorization (englisch) für weitere Informationen.',
 'img-auth-notindir' => 'Der gewünschte Pfad ist nicht im konfigurierten Uploadverzeichnis.',
 'img-auth-badtitle' => 'Aus „$1“ kann kein gültiger Titel erstellt werden.',
 'img-auth-nologinnWL' => 'Du bist nicht angemeldet und „$1“ ist nicht in der weißen Liste.',
@@ -2002,11 +2017,11 @@ Aus Sicherheitsgründen ist img_auth.php deaktiviert.',
 'upload-curl-error6' => 'URL ist nicht erreichbar',
 'upload-curl-error6-text' => 'Die angegebene URL ist nicht erreichbar. Prüfe sowohl die URL auf Fehler als auch den Online-Status der Seite.',
 'upload-curl-error28' => 'Zeitüberschreitung beim Hochladen',
-'upload-curl-error28-text' => 'Die Seite braucht zu lange für eine Antwort. Prüfe, ob die Seite online ist, warte einen kurzen Moment und versuche es dann erneut. Es kann sinnvoll sein, einen erneuten Versuch zu einem anderen Zeitpunkt zu probieren.',
+'upload-curl-error28-text' => 'Die Seite braucht zu lange, um zu antworten. Prüfe, ob die Seite online ist, warte einen kurzen Moment und versuche es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.',
 
 'license' => 'Lizenz:',
 'license-header' => 'Lizenz',
-'nolicense' => 'keine Vorauswahl',
+'nolicense' => 'Keine Vorauswahl',
 'license-nopreview' => '(es ist keine Vorschau verfügbar)',
 'upload_source_url' => ' (gültige, öffentlich zugängliche URL)',
 'upload_source_file' => ' (eine Datei auf deinem Computer)',
@@ -2058,8 +2073,8 @@ Eine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.',
 Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
 'sharedupload-desc-create' => 'Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.
 Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
-'filepage-nofile' => 'Es ist keine Datei dieses namens vorhanden.',
-'filepage-nofile-link' => 'Es ist keine Datei dieses namens vorhanden. Du kannst jedoch [$1 diese Datei hochladen].',
+'filepage-nofile' => 'Es ist keine Datei dieses Namens vorhanden.',
+'filepage-nofile-link' => 'Es ist keine Datei dieses Namens vorhanden. Du kannst jedoch [$1 diese Datei hochladen].',
 'uploadnewversion-linktext' => 'Eine neue Version dieser Datei hochladen',
 'shared-repo-from' => 'aus $1',
 'shared-repo' => 'einem gemeinsam genutzten Medienarchiv',
@@ -2136,7 +2151,7 @@ Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungs
 'statistics-edits' => 'Seitenbearbeitungen',
 'statistics-edits-average' => 'Bearbeitungen pro Seite im Durchschnitt',
 'statistics-views-total' => 'Seitenaufrufe gesamt',
-'statistics-views-total-desc' => 'Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt',
+'statistics-views-total-desc' => 'Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt.',
 'statistics-views-peredit' => 'Seitenaufrufe pro Bearbeitung',
 'statistics-users' => 'Registrierte [[Special:ListUsers|Benutzer]]',
 'statistics-users-active' => 'Aktive Benutzer',
@@ -2499,9 +2514,9 @@ Die letzte Änderung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int
 
 # Edit tokens
 'sessionfailure-title' => 'Sitzungsfehler',
-'sessionfailure' => 'Es gab ein Problem mit der Übertragung deiner Benutzerdaten.
+'sessionfailure' => 'Es gab ein Problem bei der Übertragung deiner Benutzerdaten.
 Diese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern.
-Bitte gehe zurück und versuche den Vorgang erneut auszuführen.',
+Bitte gehe zurück zur vorherigen Seite, lade sie erneut und versuche, den Vorgang erneut auszuführen.',
 
 # Protect
 'protectlogpage' => 'Seitenschutz-Logbuch',
@@ -2564,7 +2579,7 @@ Siehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle akt
 
 # Restriction levels
 'restriction-level-sysop' => 'geschützt (nur Administratoren)',
-'restriction-level-autoconfirmed' => 'geschützt (nur angemeldete, nicht-neue Benutzer)',
+'restriction-level-autoconfirmed' => 'geschützt (nur angemeldete, nicht neue Benutzer)',
 'restriction-level-all' => 'alle',
 
 # Undelete
@@ -2596,7 +2611,8 @@ Der aktuelle Text der gelöschten Seite ist nur Administratoren zugänglich.',
 'undeletedrevisions' => '{{PLURAL:$1|1 Version wurde|$1 Versionen wurden}} wiederhergestellt',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 Version|$1 Versionen}} und {{PLURAL:$2|1 Datei|$2 Dateien}} wurden wiederhergestellt',
 'undeletedfiles' => '{{PLURAL:$1|1 Datei wurde|$1 Dateien wurden}} wiederhergestellt',
-'cannotundelete' => 'Wiederherstellung fehlgeschlagen; jemand anderes hat die Seite bereits wiederhergestellt.',
+'cannotundelete' => 'Wiederherstellung fehlgeschlagen:
+$1',
 'undeletedpage' => "'''„$1“''' wurde wiederhergestellt.
 
 Im [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
@@ -2709,11 +2725,11 @@ Bitte gib den Grund für die Sperre an.',
 'ipb-change-block' => 'Sperre mit diesen Sperrparametern erneuern',
 'ipb-confirm' => 'Sperrung bestätigen',
 'badipaddress' => 'Die IP-Adresse hat ein falsches Format.',
-'blockipsuccesssub' => 'Sperre erfolgreich',
+'blockipsuccesssub' => 'Die Sperrung war erfolgreich.',
 'blockipsuccesstext' => 'Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />
 Zur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].',
 'ipb-blockingself' => 'Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?',
-'ipb-confirmhideuser' => 'Du bist gerade dabei einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?',
+'ipb-confirmhideuser' => 'Du bist gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?',
 'ipb-edit-dropdown' => 'Sperrgründe bearbeiten',
 'ipb-unblock-addr' => '„$1“ freigeben',
 'ipb-unblock' => 'IP-Adresse/Benutzer freigeben',
@@ -2777,7 +2793,7 @@ Siehe die [[Special:BlockList|Liste der gesperrten IP-Adressen und Benutzernamen
 'ipb_expiry_invalid' => 'Die eingegebene Dauer ist ungültig.',
 'ipb_expiry_temp' => 'Benutzernamens-Sperren mit der Verstecken-Option müssen permanent sein.',
 'ipb_hide_invalid' => 'Dieses Konto kann nicht unterdrückt werden, da es zu viele Bearbeitungen aufweist.',
-'ipb_already_blocked' => '„$1“ wurde bereits gesperrt.',
+'ipb_already_blocked' => '„$1“ ist bereits gesperrt',
 'ipb-needreblock' => '„$1“ ist bereits gesperrt. Möchtest du die Sperrparameter ändern?',
 'ipb-otherblocks-header' => 'Andere {{PLURAL:$1|Sperre|Sperren}}',
 'unblock-hideuser' => 'Dieser Benutzer kann nicht entsperrt werden, da dessen Benutzername versteckt wurde.',
@@ -2881,7 +2897,7 @@ Bitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung
 'movenosubpage' => 'Diese Seite hat keine Unterseiten.',
 'movereason' => 'Grund:',
 'revertmove' => 'zurück verschieben',
-'delete_and_move' => 'Löschen und Verschieben',
+'delete_and_move' => 'Löschen und verschieben',
 'delete_and_move_text' => '== Löschung erforderlich ==
 
 Die Seite „[[:$1]]“ existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?',
@@ -2971,7 +2987,7 @@ Alle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] p
 'import-interwiki-source' => 'Quell-Wiki/-Seite:',
 'import-interwiki-history' => 'Alle Versionen dieser Seite importieren',
 'import-interwiki-templates' => 'Alle Vorlagen einschließen',
-'import-interwiki-submit' => 'Import',
+'import-interwiki-submit' => 'Importieren',
 'import-interwiki-namespace' => 'Zielnamensraum:',
 'import-interwiki-rootpage' => 'Zielstammseite (optional):',
 'import-upload-filename' => 'Dateiname:',
@@ -3020,7 +3036,6 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-Test',
-'javascripttest-disabled' => 'Diese Funktion wurde in diesem Wiki nicht aktiviert.',
 'javascripttest-title' => '$1-Tests werden durchgeführt',
 'javascripttest-pagetext-noframework' => 'Diese Seite ist JavaSkript-Tests vorbehalten.',
 'javascripttest-pagetext-unknownframework' => 'Unbekanntes Framework „$1“.',
@@ -3036,14 +3051,14 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'tooltip-pt-anontalk' => 'Diskussion über Änderungen von dieser IP-Adresse',
 'tooltip-pt-preferences' => 'Eigene Einstellungen',
 'tooltip-pt-watchlist' => 'Liste der beobachteten Seiten',
-'tooltip-pt-mycontris' => 'Liste deiner Beiträge',
+'tooltip-pt-mycontris' => 'Liste eigener Beiträge',
 'tooltip-pt-login' => 'Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.',
 'tooltip-pt-anonlogin' => 'Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.',
 'tooltip-pt-logout' => 'Abmelden',
 'tooltip-ca-talk' => 'Diskussion zum Seiteninhalt',
 'tooltip-ca-edit' => 'Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.',
 'tooltip-ca-addsection' => 'Neuen Abschnitt beginnen',
-'tooltip-ca-viewsource' => 'Diese Seite ist geschützt. Der Quelltext kann angesehen werden.',
+'tooltip-ca-viewsource' => 'Diese Seite ist geschützt. Ihr Quelltext kann dennoch angesehen und kopiert werden.',
 'tooltip-ca-history' => 'Frühere Versionen dieser Seite',
 'tooltip-ca-protect' => 'Diese Seite schützen',
 'tooltip-ca-unprotect' => 'Seitenschutz ändern',
@@ -3061,7 +3076,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'tooltip-n-portal' => 'Über das Projekt, was du tun kannst, wo was zu finden ist',
 'tooltip-n-currentevents' => 'Hintergrundinformationen zu aktuellen Ereignissen',
 'tooltip-n-recentchanges' => 'Liste der letzten Änderungen in {{SITENAME}}',
-'tooltip-n-randompage' => 'Zufällige Seite',
+'tooltip-n-randompage' => 'Zufällige Seite aufrufen',
 'tooltip-n-help' => 'Hilfeseite anzeigen',
 'tooltip-t-whatlinkshere' => 'Liste aller Seiten, die hierher verlinken',
 'tooltip-t-recentchangeslinked' => 'Letzte Änderungen an Seiten, die von hier verlinkt sind',
@@ -3185,10 +3200,10 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 '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-restriction' => 'Seitenschutz (<code>{{lcfirst:$1}}</code>)',
 '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-toolboxlink' => 'Informationen zur Seite',
 
 # Skin names
 'skinname-standard' => 'Klassik',
@@ -3770,6 +3785,7 @@ Dieser Bestätigungscode ist gültig bis $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-Einbindung ist deaktiviert]',
 'scarytranscludefailed' => '[Vorlageneinbindung für $1 ist gescheitert]',
+'scarytranscludefailed-httpstatus' => '[Vorlagenabruf fehlgeschlagen für $1: HTTP  $2]',
 'scarytranscludetoolong' => '[URL ist zu lang]',
 
 # Delete conflict
@@ -4034,7 +4050,7 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'revdelete-restricted' => 'Einschränkungen gelten auch für Administratoren',
 'revdelete-unrestricted' => 'Einschränkungen für Administratoren aufgehoben',
 'logentry-move-move' => '$1 verschob Seite $3 nach $4',
-'logentry-move-move-noredirect' => '$1 verschob Seite $3 nach $4 ohne dabei eine Weiterleitung anzulegen',
+'logentry-move-move-noredirect' => '$1 verschob Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen',
 'logentry-move-move_redir' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung',
 'logentry-move-move_redir-noredirect' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
 'logentry-patrol-patrol' => '$1 markierte Version $4 von Seite $3 als kontrolliert',
@@ -4046,8 +4062,8 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'newuserlog-byemail' => 'das Passwort wurde per E-Mail versandt',
 
 # Feedback
-'feedback-bugornote' => 'Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].
-Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.',
+'feedback-bugornote' => 'Sofern du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].
+Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.',
 'feedback-subject' => 'Betreff:',
 'feedback-message' => 'Nachricht:',
 'feedback-cancel' => 'Abbrechen',
@@ -4061,6 +4077,10 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'feedback-bugcheck' => 'Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.',
 'feedback-bugnew' => 'Ich habe es überprüft. Den neuen Fehler melden.',
 
+# Search suggestions
+'searchsuggest-search' => 'Suchen',
+'searchsuggest-containing' => 'enthält …',
+
 # API errors
 'api-error-badaccess-groups' => 'Du hast nicht die Berechtigung Dateien in dieses Wiki hochzuladen.',
 'api-error-badtoken' => 'Interner Fehler: Der Token ist fehlerhaft.',
@@ -4079,7 +4099,7 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'api-error-filetype-banned' => 'Diese Dateiendung ist gesperrt.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ist ein nicht zulässiger Dateityp|sind nicht zulässige Dateitypen}}. {{PLURAL:$3|Ein zulässiger Dateityp ist|Zulässige Dateitypen sind}} $2.',
 'api-error-filetype-missing' => 'Die hochzuladende Datei hat keine Dateiendung.',
-'api-error-hookaborted' => 'Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).',
+'api-error-hookaborted' => 'Der Versuch, die Änderung durchzuführen, wurde von einer Parsererweiterung (API) abgebrochen.',
 'api-error-http' => 'Interner Fehler: Es konnte keine Verbindung zum Server hergestellt werden.',
 'api-error-illegal-filename' => 'Der Dateiname ist nicht erlaubt.',
 'api-error-internal-error' => 'Interner Fehler: Ein unbekannter Fehler ist beim Hochladen der Datei ins Wiki aufgetreten.',
@@ -4113,4 +4133,6 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
 
+# Unknown messages
+'bad-target-model' => 'Die gewünschte Zielseite verwendet ein abweichendes Inhaltsmodell. Das Inhaltsmodell $1 kann nicht in das Inhaltsmodell $2 umgewandelt werden.',
 );
index 685dde6..a4fabf9 100644 (file)
@@ -7,6 +7,8 @@
  * @ingroup Language
  * @file
  *
+ * @author Filzstift
+ * @author Geitost
  * @author Ianusius
  * @author Kghbln
  * @author MichaelFrey
@@ -18,101 +20,467 @@ $fallback = 'de';
 $separatorTransformTable = array( ',' => "'", '.' => ',' );
 
 $messages = array(
+# User preference toggles
+'tog-hideminor' => 'Kleine Änderungen in den «Letzten Änderungen» ausblenden',
+'tog-hidepatrolled' => 'Kontrollierte Änderungen in den «Letzten Änderungen» ausblenden',
+'tog-newpageshidepatrolled' => 'Kontrollierte Seiten bei den «Neuen Seiten» ausblenden',
+'tog-usenewrc' => 'Erweiterte Darstellung der «Letzten Änderungen» (benötigt JavaScript)',
+'tog-minordefault' => 'Eigene Änderungen standardmässig als minim markieren',
+'tog-externaleditor' => 'Externen Editor standardmässig nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
+'tog-externaldiff' => 'Externes Programm standardmässig für Versionsunterschiede nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
+'tog-showjumplinks' => '«Wechseln zu»-Links aktivieren',
+
+# Categories related messages
+'category_header' => 'Seiten in der Kategorie «$1»',
+'category-media-header' => 'Medien in der Kategorie «$1»',
+
+'badaccess-groups' => 'Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.',
+
+'retrievedfrom' => 'Von «$1»',
+'site-atom-feed' => 'Atom-Feed für «$1»',
+'page-rss-feed' => 'RSS-Feed für «$1»',
+'page-atom-feed' => 'Atom-Feed für «$1»',
+
 # General errors
+'dberrortext' => 'Es ist ein Datenbankfehler aufgetreten.
+Der Grund kann ein Programmierfehler sein.
+Die letzte Datenbankabfrage lautete:
+<blockquote><tt>$1</tt></blockquote>
+aus der Funktion «<tt>$2</tt>».
+Die Datenbank meldete den Fehler «<tt>$3: $4</tt>».',
+'dberrortextcl' => 'Es gab einen Syntaxfehler in der Datenbankabfrage.
+Die letzte Datenbankabfrage lautete: «$1» aus der Funktion «<tt>$2</tt>».
+Die Datenbank meldete den Fehler: «<tt>$3: $4</tt>».',
+'missing-article' => 'Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.
+
+Die Seite ist möglicherweise gelöscht oder verschoben worden.
+
+Falls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.',
+'fileappenderrorread' => '«$1» konnte während des Hinzufügens nicht gelesen werden.',
+'fileappenderror' => 'Konnte «$1» nicht an «$2» anhängen.',
+'filecopyerror' => 'Die Datei «$1» konnte nicht nach «$2» kopiert werden.',
+'filerenameerror' => 'Die Datei «$1» konnte nicht nach «$2» umbenannt werden.',
+'filedeleteerror' => 'Die Datei «$1» konnte nicht gelöscht werden.',
+'directorycreateerror' => 'Das Verzeichnis «$1» konnte nicht angelegt werden.',
+'filenotfound' => 'Die Datei «$1» wurde nicht gefunden.',
+'fileexistserror' => 'In die Datei «$1» konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.',
+'unexpected' => 'Unerwarteter Wert: «$1» = «$2»',
+'cannotdelete' => 'Die Seite oder Datei «$1» kann nicht gelöscht werden.
+Möglicherweise wurde sie bereits von jemand anderem gelöscht.',
+'cannotdelete-title' => 'Seite «$1» kann nicht gelöscht werden',
 'actionthrottledtext' => 'Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters 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.',
+'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
+Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche aus.
+Ziehe bitte im Fall von Übersetzungen in Betracht, diese bei [//translatewiki.net/wiki/Main_Page?setlang=de-ch translatewiki.net], der Lokalisierungsplattform für MediaWiki, durchzuführen.",
+'titleprotected' => "Eine Seite mit diesem Namen kann nicht angelegt werden.
+Die Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
+'filereadonlyerror' => 'Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.
+
+Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».',
 
 # Login and logout pages
-'nosuchuser' => 'Der Benutzername „$1“ existiert nicht.
+'loginsuccess' => 'Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.',
+'nosuchuser' => 'Der Benutzername «$1» existiert nicht.
 Überprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].',
+'nosuchusershort' => 'Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.',
+'passwordremindertext' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.
+
+Das automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3
+
+Falls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.
+Das neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.
+
+Bitte ignoriere dieses E-Mail, falls du sie nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.',
+'noemail' => '{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.',
+'passwordsent' => 'Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer «$1» gesandt.
+Bitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.',
+'eauthentsent' => 'Ein Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.
+
+Bevor ein E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise im Bestätigungs-E-Mail.',
+'mailerror' => 'Fehler beim Senden des E-Mails: $1',
+'createaccount-text' => 'Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.
+
+Falls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.',
+
+# E-mail sending
+'user-mail-no-addy' => 'Versuchte ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden',
 
 # Change password dialog
 'resetpass_announce' => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschliessen, musst du jetzt ein neues Passwort wählen.',
 
 # Edit pages
-'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist $1 KB gross. Dies ist grösser als das erlaubte Maximum von $2 KB.'''
+'missingsummary' => "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
+'missingcommentheader' => "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
+'blockedtext' => "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''
+
+Die Sperrung wurde von $1 durchgeführt.
+Als Grund wurde ''$2'' angegeben.
+
+* Beginn der Sperre: $8
+* Ende der Sperre: $6
+* Sperre betrifft: $7
+
+Du kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
+Du kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.
+Deine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.
+Bitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
+'autoblockedtext' => "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.
+Als Grund wurde angegeben:
+
+:''$2''
+
+* Beginn der Sperre: $8
+* Ende der Sperre: $6
+* Sperre betrifft: $7
+
+Du kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
+
+Du kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.
+
+Deine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.
+Bitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
+'confirmedittext' => 'Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].',
+'accmailtext' => 'Ein zufällig generiertes Passwort für [[User talk:$1|$1]] wurde an $2 versandt.
+
+Das Passwort für dieses neue Benutzerkonto kann auf der Spezialseite «[[Special:ChangePassword|Passwort ändern]]» geändert werden.',
+'userpage-userdoesnotexist' => 'Das Benutzerkonto «<nowiki>$1</nowiki>» ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.',
+'userpage-userdoesnotexist-view' => 'Das Benutzerkonto «$1» ist nicht vorhanden.',
+'clearyourcache' => "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.
+* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Ctrl+F5'' oder ''Ctrl+R'' (''⌘+R'' auf dem Mac) drücken
+* '''Google Chrome:''' ''Umschalttaste+Ctrl+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken
+* '''Internet Explorer:''' ''Ctrl+F5'' drücken oder ''Ctrl'' drücken und gleichzeitig ''Aktualisieren'' anklicken
+* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+'usercssyoucanpreview' => "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues CSS vor dem Speichern zu testen.",
+'userjsyoucanpreview' => "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues JavaScript vor dem Speichern zu testen.",
+'userinvalidcssjstitle' => "'''Achtung:''' Die Benutzeroberfläche «$1» existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+'editing' => 'Bearbeiten von «$1»',
+'editingsection' => 'Bearbeiten von «$1» (Abschnitt)',
+'editingcomment' => 'Bearbeiten von «$1» (Neuer Abschnitt)',
+'explainconflict' => "Jemand anders hat diese Seite geändert, nachdem du angefangen hast sie zu bearbeiten.
+Das obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.
+Das untere Textfeld enthält deine Änderungen.
+Bitte füge deine Änderungen in das obere Textfeld ein.
+'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
+'copyrightwarning' => "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />
+Du gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.
+<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
+'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''
 Er kann nicht gespeichert werden.",
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning'  => 'Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.',
+'post-expand-template-inclusion-warning' => 'Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.',
 'post-expand-template-inclusion-category' => 'Seiten, in denen die maximale Grösse eingebundener Vorlagen überschritten ist',
-'post-expand-template-argument-warning'   => "'''Warnung:''' Diese Seite enthält mindestens ein Argument in einer Vorlage, das expandiert zu gross ist. Diese Argumente werden ignoriert.",
+'post-expand-template-argument-warning' => "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu gross ist. Diese Parameter werden ignoriert.",
+
+# History pages
+'histlegend' => 'Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche «{{int:compareselectedversions}}» klicken.<br />
+* ({{int:cur}}) = Unterschied zur aktuellen Version, ({{int:last}}) = Unterschied zur vorherigen Version
+* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, {{int:minoreditletter}} = Kleine Änderung',
+
+# Revision deletion
+'revdelete-show-file-confirm' => 'Bist du sicher, dass du die gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2 um $3 Uhr ansehen willst?',
+'revdelete-show-no-access' => 'Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.
+Du hast darauf keinen Zugriff.',
+'revdelete-modify-no-access' => 'Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.
+Du hast darauf keinen Zugriff.',
 
 # History merging
-'mergehistory-merge' => 'Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.',
+'mergehistory-merge' => 'Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.',
+'mergehistory-success' => '{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.',
+'mergehistory-no-source' => 'Ursprungsseite «$1» ist nicht vorhanden.',
+'mergehistory-no-destination' => 'Zielseite «$1» ist nicht vorhanden.',
+'mergehistory-autocomment' => '«[[:$1]]» vereinigt nach «[[:$2]]»',
+'mergehistory-comment' => '«[[:$1]]» vereinigt nach «[[:$2]]»: $3',
+
+# Diffs
+'history-title' => 'Versionsgeschichte von «$1»',
 
 # Search results
+'searchresults-title' => 'Suchergebnisse für «$1»',
+'searchsubtitle' => 'Deine Suchanfrage: «[[:$1]]» ([[Special:Prefixindex/$1|alle mit «$1» beginnenden Seiten]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Seiten, die nach «$1» verlinken]])',
+'searchsubtitleinvalid' => 'Deine Suchanfrage: «$1».',
 'toomanymatches' => 'Die Anzahl der Suchergebnisse ist zu gross, bitte versuche eine andere Abfrage.',
-'nonefound'      => "'''Hinweis:''' Es werden standardmässig nur einige Namensräume durchsucht. Setze ''all:'' vor deinen Suchbegriff, um alle Seiten (inkl. Diskussionsseiten, Vorlagen usw.) zu durchsuchen oder gezielt den Namen des zu durchsuchenden Namensraumes.",
+'searchmenu-exists' => "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''",
+'searchmenu-new' => "'''Erstelle die Seite «[[:$1]]» in diesem Wiki.'''",
+'search-redirect' => '(Weiterleitung von «$1»)',
+'search-suggest' => 'Meintest du «$1»?',
+'nonefound' => "'''Hinweis:''' Es werden standardmässig nur einige Namensräume durchsucht. Setze ''all:'' vor deinen Suchbegriff, um alle Seiten (inkl. Diskussionsseiten, Vorlagen usw.) zu durchsuchen oder gezielt den Namen des zu durchsuchenden Namensraumes.",
 
 # Preferences page
 'prefs-watchlist-days' => 'Anzahl der Tage, die die Beobachtungsliste standardmässig umfassen soll:',
-'prefs-edit-boxsize'   => 'Grösse des Bearbeitungsfensters:',
-'recentchangesdays'    => 'Anzahl der Tage, die die Liste der „Letzten Änderungen“ standardmässig umfassen soll:',
-'recentchangescount'   => 'Anzahl der standardmässig angezeigten Bearbeitungen:',
-'defaultns'            => 'In diesen Namensräumen soll standardmässig gesucht werden:',
-'prefs-textboxsize'    => 'Grösse des Bearbeitungsfensters',
+'prefs-edit-boxsize' => 'Grösse des Bearbeitungsfensters:',
+'recentchangesdays' => 'Anzahl der Tage, die die Liste der «Letzten Änderungen» standardmässig umfassen soll:',
+'recentchangescount' => 'Anzahl der standardmässig angezeigten Bearbeitungen:',
+'defaultns' => 'In diesen Namensräumen soll standardmässig gesucht werden:',
+'prefs-textboxsize' => 'Grösse des Bearbeitungsfensters',
+'prefs-help-signature' => 'Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.',
 
 # Rights
-'right-createpage'            => 'Seiten erstellen (ausser Diskussionsseiten)',
-'right-bigdelete'             => 'Seiten mit grosser Versionsgeschichte löschen',
+'right-createpage' => 'Seiten erstellen (ausser Diskussionsseiten)',
+'right-nominornewtalk' => 'Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige',
+'right-bigdelete' => 'Seiten mit grosser Versionsgeschichte löschen',
 'right-override-export-depth' => 'Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5',
+'right-passwordreset' => 'Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen',
+
+# User rights log
+'rightslogentry' => 'änderte die Benutzerrechte für «$1» von «$2» auf «$3»',
+'rightslogentry-autopromote' => 'wurde automatisch von «$2» nach «$3» zugeordnet',
+
+# Recent changes
+'rc_categories' => 'Nur Seiten aus den Kategorien (getrennt mit «|»):',
+'rc-old-title' => 'ursprünglich erstellt als «$1»',
+
+# Recent changes linked
+'recentchangeslinked-title' => 'Änderungen an Seiten, die von «$1» verlinkt sind',
 
 # Upload
-'file-too-large'           => 'Die übertragene Datei ist zu gross',
-'large-file'               => 'Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.',
-'largefileserver'          => 'Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.',
-'fileexists-extension'     => "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]
-* Name der hochzuladenden Datei: '''<tt>[[:$1]]</tt>'''
-* Name der vorhandenen Datei: '''<tt>[[:$2]]</tt>'''
-Nur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.",
+'uploadtext' => "Benutze dieses Formular, um neue Dateien hochzuladen.
+
+Gehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].
+
+Um ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+'illegalfilename' => 'Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.',
+'filename-toolong' => 'Dateinamen dürfen nicht grösser als 240 Byte sein.',
+'badfilename' => 'Der Dateiname wurde in «$1» geändert.',
+'filetype-mime-mismatch' => 'Dateierweiterung «.$1» stimmt nicht mit dem MIME-Typ ($2) überein.',
+'filetype-badmime' => 'Dateien mit dem MIME-Typ «$1» dürfen nicht hochgeladen werden.',
+'filetype-bad-ie-mime' => 'Diese Datei kann nicht hochgeladen werden, da der Internet Explorer sie als «$1» erkennt, welcher ein nicht erlaubter potentiell gefährlicher Dateityp ist.',
+'filetype-unwanted-type' => "'''«.$1»''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.",
+'filetype-banned-type' => "'''«.$1»''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.
+{{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
+'filetype-missing' => 'Die hochzuladende Datei hat keine Erweiterung (z. B. «.jpg»).',
+'file-too-large' => 'Die hochgeladene Datei war zu gross.',
+'large-file' => 'Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.',
+'largefileserver' => 'Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.',
+'fileexists-extension' => 'Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]
+* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>
+* Name der vorhandenen Datei: <strong>[[:$2]]</strong>
+Nur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.',
 'fileexists-thumbnail-yes' => "Bei der Datei scheint es sich um ein Bild verringerter Grösse ''(thumbnail)'' zu handeln. [[$1|thumb]]
-Bitte prüfe die Datei '''<tt>[[:$1]]</tt>'''.
+Bitte prüfe die Datei <strong>[[:$1]]</strong>.
 Wenn es sich um das Bild in Originalgrösse handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
-'file-thumbnail-no'        => "Der Dateiname beginnt mit '''<tt>$1</tt>'''. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.
+'file-thumbnail-no' => "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.
 Bitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
-'upload-maxfilesize'       => 'Maximale Dateigrösse: $1',
+'uploadedimage' => 'lud «[[$1]]» hoch',
+'overwroteimage' => 'lud eine neue Version von «[[$1]]» hoch',
+'upload-maxfilesize' => 'Maximale Dateigrösse: $1',
+'filename-bad-prefix' => "Der Dateiname beginnt mit '''«$1»'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.
+Bitte gib der Datei einen Namen, der den Inhalt besser beschreibt.",
 
 'upload-unknown-size' => 'Unbekannte Grösse',
 
+# File backend
+'backend-fail-maxsize' => 'Die Datei $1 konnte nicht erstellt werden, da sie grösser als {{PLURAL:$2|ein Byte|$2 Byte}} ist.',
+'backend-fail-readonly' => 'Das Speicher-Backend «$1» befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: «$2»',
+'backend-fail-synced' => 'Die Datei «$1» befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.',
+'backend-fail-connect' => 'Es konnte keine Verbindung zum Speicher-Backend «$1» hergestellt werden.',
+'backend-fail-internal' => 'Im Speicher-Backend «$1» ist ein unbekannter Fehler aufgetreten.',
+'backend-fail-contenttype' => 'Der Inhaltstyp, der im Pfad «$1» zu speichernden Datei, konnte nicht bestimmt werden.',
+'backend-fail-usable' => 'Die Datei «$1» konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends «$1» hergestellt werden.',
+'filejournal-fail-dbquery' => 'Die Journaldatenbank des Speicher-Backends «$1» konnte nicht aktualisiert werden.',
+
+# Lock manager
+'lockmanager-notlocked' => '«$1» konnte nicht entsperrt werden, da keine Sperrung besteht.',
+'lockmanager-fail-closelock' => 'Die Sperrdatei für «$1» konnte nicht geschlossen werden.',
+'lockmanager-fail-deletelock' => 'Die Sperrdatei für «$1» konnte nicht gelöscht werden.',
+'lockmanager-fail-acquirelock' => 'Die Sperre für «$1» konnte nicht abgerufen werden.',
+'lockmanager-fail-openlock' => 'Die Sperrdatei für «$1» konnte nicht geöffnet werden.',
+'lockmanager-fail-releaselock' => 'Die Sperre für «$1» konnte nicht freigegeben werden.',
+
+# ZipDirectoryReader
+'zip-bad' => 'Die Datei ist beschädigt oder eine aus anderweitigen Gründen nicht lesbare ZIP-Datei.
+Sie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.',
+'zip-unsupported' => 'Diese ZIP-Datei verfügt über Komprimierungseigenschaften, die nicht von MediaWiki unterstützt werden.
+Sie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.',
+
 # img_auth script messages
-'img-auth-nologinnWL' => 'Du bist nicht angemeldet und „$1“ ist nicht in der weissen Liste.',
+'img-auth-badtitle' => 'Aus «$1» kann kein gültiger Titel erstellt werden.',
+'img-auth-nologinnWL' => 'Du bist nicht angemeldet und «$1» ist nicht in der weissen Liste.',
+'img-auth-nofile' => 'Datei «$1» existiert nicht.',
+'img-auth-isdir' => 'Du versuchst, auf ein Verzeichnis «$1» zuzugreifen.
+Nur Dateizugriff ist erlaubt.',
+'img-auth-streaming' => 'Lade «$1».',
+'img-auth-noread' => 'Benutzer hat keine Berechtigung, «$1» zu lesen.',
+
+# HTTP errors
+'http-invalid-scheme' => 'URLs mit dem Schema «$1» werden nicht unterstützt',
 
 # Special:ListFiles
+'listfiles-summary' => 'Diese Spezialseite listet alle hochgeladenen Dateien auf. Standardmässig werden die zuletzt hochgeladenen Dateien zuerst angezeigt. Durch einen Klick auf die Spaltenüberschriften kann die Sortierung umgedreht werden oder es kann nach einer anderen Spalte sortiert werden.',
 'listfiles_size' => 'Grösse',
 
 # File description page
 'filehist-dimensions' => 'Masse',
-'filehist-filesize'   => 'Dateigrösse',
+'filehist-filesize' => 'Dateigrösse',
+
+# File reversion
+'filerevert' => 'Zurücksetzen von «$1»',
+
+# File deletion
+'filedelete' => 'Lösche «$1»',
+'filedelete-intro' => "Du löschst die Datei '''«[[Media:$1|$1]]»''' inklusive ihrer Versionsgeschichte.",
+'filedelete-intro-old' => "Du löschst von der Datei '''«[[Media:$1|$1]]»''' die [$4 Version vom $2, $3 Uhr].",
+'filedelete-success' => "'''«$1»''' wurde gelöscht.",
+'filedelete-success-old' => "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.",
+'filedelete-nofile' => "'''«$1»''' ist nicht vorhanden.",
+'filedelete-nofile-old' => "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.",
+
+# Random page
+'randompage-nopages' => 'Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»',
+
+# Random redirect
+'randomredirect-nopages' => 'Im Namensraum «$1» sind keine Weiterleitungen vorhanden.',
 
 # Special:Log
 'alllogstext' => 'Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.
 Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).',
 
+# Special:AllPages
+'allpages-bad-ns' => 'Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.',
+
+# Special:LinkSearch
+'linksearch-text' => 'Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />Unterstützte Protokolle: <code>$1</code> (Diese bitte nicht bei der Suchanfrage angeben.)',
+
+# E-mail user
+'emailpagetext' => 'Du kannst dem Benutzer mit dem unten stehenden Formular ein E-Mail senden.
+Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit der Benutzer dir antworten kann.',
+'defemailsubject' => '{{SITENAME}} - E-Mail von Benutzer «$1»',
+'emailnotarget' => 'Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.',
+'emailccme' => 'Sende eine Kopie des E-Mails an mich',
+'emailsenttext' => 'Dein E-Mail wurde verschickt.',
+'emailuserfooter' => 'Dieses E-Mail wurde von {{SITENAME}}-Benutzer «$1» an «$2» gesendet.',
+
+# Watchlist
+'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.',
+'removedwatchtext' => 'Die Seite «[[:$1]]» wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.',
+'iteminvalidname' => 'Problem mit dem Eintrag «$1», ungültiger Name.',
+
+# Displayed when you click the "watch" button and it is in the process of watching
+'watcherrortext' => 'Beim Ändern der Beobachtungslisteneinstellungen für «$1» ist ein Fehler aufgetreten.',
+
+# Delete
+'excontent' => 'Inhalt war: «$1»',
+'excontentauthor' => 'Inhalt war: «$1» (einziger Bearbeiter: [[Special:Contributions/$2|$2]])',
+'exbeforeblank' => 'Inhalt vor dem Leeren der Seite: «$1»',
+'delete-confirm' => 'Löschen von «$1»',
+'deletedtext' => '«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.',
+
+# Rollback
+'editcomment' => "Die Änderungszusammenfassung lautet: ''«$1»''.",
+
 # Protect
+'protectedarticle' => 'schützte «[[$1]]»',
+'modifiedarticleprotection' => 'änderte den Schutz von «[[$1]]»',
+'unprotectedarticle' => 'hob den Schutz von «[[$1]]» auf',
+'movedarticleprotection' => 'übertrug den Seitenschutz von «[[$2]]» auf «[[$1]]»',
+'protect-title' => 'Schutz ändern von «$1»',
+'protect-title-notallowed' => 'Schutz ansehen von «$1»',
+'protect-text' => 'Hier kannst du den Schutzstatus der Seite «$1» einsehen und ändern.',
+'protect-locked-blocked' => "Du kannst den Seitenschutz nicht ändern, da dein Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+'protect-locked-dblock' => "Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+'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-fallback' => 'Es wird die «$1»-Berechtigung benötigt.',
 'minimum-size' => 'Mindestgrösse',
 'maximum-size' => 'Maximalgrösse:',
 
+# Undelete
+'undeleteextrahelp' => '* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».
+* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».',
+'undeletedpage' => "'''«$1»''' wurde wiederhergestellt.
+
+Im [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
+'undelete-cleanup-error' => 'Fehler beim Löschen der unbenutzten Archiv-Version «$1».',
+'undelete-show-file-confirm' => 'Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?',
+
+# Contributions
+'contributions-title' => 'Benutzerbeiträge von «$1»',
+
+# What links here
+'whatlinkshere-title' => 'Seiten, die auf «$1» verlinken',
+'linkshere' => "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
+'nolinkshere' => "Keine Seite verlinkt auf '''«[[:$1]]»'''.",
+'nolinkshere-ns' => "Keine Seite verlinkt auf '''«[[:$1]]»''' im gewählten Namensraum.",
+
 # Block/unblock
+'ipb-confirmhideuser' => 'Du bist gerade dabei, einen Benutzer im Modus «Benutzer verstecken» zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?',
+'ipb-blocklist-contribs' => 'Benutzerbeiträge von «$1»',
+'autoblocker' => 'Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt. Grund der Benutzersperre: «$2».',
+'blocklogentry' => 'sperrte «[[$1]]» für den Zeitraum: $2 $3',
+'reblock-logentry' => 'änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3',
+'unblocklogentry' => 'hob die Sperre von «$1» auf',
+'ipb_already_blocked' => '«$1» wurde bereits gesperrt.',
+'ipb-needreblock' => '«$1» ist bereits gesperrt. Möchtest du die Sperrparameter ändern?',
 'ip_range_toolarge' => 'Adressbereiche, die größer als /$1 sind, sind nicht erlaubt.',
+'cant-see-hidden-user' => 'Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das «hideuser»-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.',
+
+# Move page
+'move-page' => 'Verschieben von «$1»',
+'movepage-moved' => "'''Die Seite «$1» wurde nach «$2» verschoben.'''",
+'movepage-page-exists' => 'Die Seite «$1» ist bereits vorhanden und kann nicht automatisch überschrieben werden.',
+'movepage-page-moved' => 'Die Seite «$1» wurde nach «$2» verschoben.',
+'movepage-page-unmoved' => 'Die Seite «$1» konnte nicht nach «$2» verschoben werden.',
+'delete_and_move_text' => '== Löschung erforderlich ==
+
+Die Seite «[[:$1]]» existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?',
+'delete_and_move_reason' => 'gelöscht, um Platz für die Verschiebung von «[[$1]]» zu machen',
+'immobile-source-namespace' => 'Seiten des «$1»-Namensraums können nicht verschoben werden',
+'immobile-target-namespace' => 'Seiten können nicht in den «$1»-Namensraum verschoben werden',
 
 # Thumbnails
-'thumbnail-more'  => 'vergrössern',
+'thumbnail-more' => 'vergrössern',
 'djvu_page_error' => 'DjVu-Seite ausserhalb des Seitenbereichs',
 
 # Special:Import
 'import-interwiki-templates' => 'Alle Vorlagen einschliessen',
-'importuploaderrorsize'      => 'Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.',
+'importuploaderrorsize' => 'Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.',
+'import-error-edit' => 'Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.',
+'import-error-create' => 'Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu erstellen.',
+'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 log
+'import-logentry-upload' => 'importierte «[[$1]]» von einer Datei',
+'import-logentry-interwiki' => 'importierte «$1» (Transwiki)',
+
+# JavaScriptTest
+'javascripttest-pagetext-unknownframework' => 'Unbekanntes Framework «$1».',
+
+# Tooltip help for the actions
+'tooltip-t-emailuser' => 'Ein E-Mail an diesen Benutzer senden',
+
+# Info page
+'pageinfo-title' => 'Informationen zu «$1»',
+
+# Patrolling
+'markedaspatrollederror' => 'Markierung als «kontrolliert» nicht möglich.',
+
+# Image deletion
+'filedelete-missing' => 'Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.',
+'filedelete-old-unregistered' => 'Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.',
+'filedelete-current-unregistered' => 'Die angegebene Datei «$1» ist nicht in der Datenbank vorhanden.',
+'filedelete-archive-read-only' => 'Das Archiv-Verzeichnis «$1» ist für den Webserver nicht beschreibbar.',
 
 # Media information
-'imagemaxsize'   => "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
-'thumbsize'      => 'Standardgrösse der Vorschaubilder:',
-'file-info'      => 'Dateigrösse: $1, MIME-Typ: $2',
+'imagemaxsize' => "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
+'thumbsize' => 'Standardgrösse der Vorschaubilder:',
+'file-info' => 'Dateigrösse: $1, MIME-Typ: $2',
 'file-info-size' => '$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4',
-'svg-long-desc'  => 'SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3',
+'file-info-size-pages' => '$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}',
+'svg-long-desc' => 'SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3',
+'show-big-image-preview' => 'Grösse dieser Vorschau: $1.',
 
 # Metadata
-'metadata-fields' => 'Die folgenden Felder der EXIF-Metadaten in diesem MediaWiki-Systemtext werden auf Bildbeschreibungsseiten angezeigt; weitere standardmässig „eingeklappte“ Details können angezeigt werden.
+'metadata-fields' => 'Die folgenden Felder der EXIF-Metadaten, die in diesem MediaWiki-Systemtext angegeben sind, werden auf Bildbeschreibungsseiten mit eingeklappter Metadatentabelle angezeigt.
+Weitere werden standardmässig nicht angezeigt.
 * make
 * model
 * datetimeoriginal
@@ -129,17 +497,85 @@ Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seite
 
 # EXIF tags
 'exif-jpeginterchangeformatlength' => 'Grösse der JPEG-Daten in Bytes',
-'exif-referenceblackwhite'         => 'Schwarz/Weiss-Referenzpunkte',
-'exif-maxaperturevalue'            => 'Grösste Blende',
-'exif-whitebalance'                => 'Weissabgleich',
-'exif-gpsdop'                      => 'Masspräzision',
+'exif-referenceblackwhite' => 'Schwarz/Weiss-Referenzpunkte',
+'exif-maxaperturevalue' => 'Grösste Blende',
+'exif-whitebalance' => 'Weissabgleich',
+'exif-gpsdop' => 'Masspräzision',
 
 'exif-lightsource-13' => 'Tagesweiss fluoreszierend (N 4600–5400 K)',
 'exif-lightsource-14' => 'Kaltweiss fluoreszierend (W 3900–4500 K)',
 'exif-lightsource-15' => 'Weiss fluoreszierend (WW 3200–3700 K)',
 
+'exif-isospeedratings-overflow' => 'Grösser als 65535',
+
+# E-mail address confirmation
+'confirmemail_text' => '{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizierst), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit «Bestätigungscode zuschicken» beschriftete Schaltfläche, damit ein automatisch erstelltes E-Mail an die angegebene Adresse geschickt wird. Dieses E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.',
+'confirmemail_pending' => 'Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt.
+Wenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf das E-Mail, bevor du einen neuen Code anforderst.',
+'confirmemail_body' => 'Hallo,
+
+jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto «$2» in {{SITENAME}} registriert.
+
+Um die E-Mail-Funktion von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,
+dass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte die folgende Web-Adresse:
+
+$3
+
+Sollte die vorstehende Adresse in deinem E-Mail-Programm über mehrere Zeilen gehen, musst du sie allenfalls per Hand in die Adresszeile deines Web-Browsers einfügen.
+
+Wenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:
+
+$5
+
+Dieser Bestätigungscode ist gültig bis $6, $7 Uhr.',
+'confirmemail_body_changed' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,
+hat die E-Mail-Adresse des Benutzerkontos «$2» zu dieser Adresse auf {{SITENAME}} geändert.
+
+Um zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört
+und um die E-Mail-Features auf {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:
+
+$3
+
+Falls das Konto *nicht* dir gehört, folge diesem Link,
+um die E-Mail-Adress-Bestätigung abzubrechen:
+
+$5
+
+Dieser Bestätigungscode ist gültig bis $4.',
+'confirmemail_body_set' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,
+hat die E-Mail-Adresse des Benutzerkontos «$2» auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.
+
+Um zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört
+und um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser:
+
+$3
+
+Falls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,
+um die Bestätigung der E-Mail-Adresse abzubrechen:
+
+$5
+
+Dieser Bestätigungscode ist gültig bis $4.',
+
+# Auto-summaries
+'autosumm-replace' => 'Der Seiteninhalt wurde durch einen anderen Text ersetzt: «$1»',
+'autosumm-new' => 'Die Seite wurde neu angelegt: «$1»',
+
+# Live preview
+'livepreview-error' => 'Verbindung nicht möglich: $1 «$1». Bitte die normale Vorschau benutzen.',
+
+# Watchlist editor
+'watchlistedit-normal-explain' => 'Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].',
+'watchlistedit-raw-explain' => 'Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.
+Pro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».
+Du kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.',
+
+# Core parser functions
+'unknown_extension_tag' => 'Unbekanntes Parsertag «$1»',
+'duplicate-defaultsort' => 'Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».',
+
 # Special:Version
-'version-license-info' => "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/ oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.
+'version-license-info' => "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.
 
 MediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.
 
@@ -147,15 +583,30 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-info' => '$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4',
+'fileduplicatesearch-result-1' => 'Die Datei «$1» hat keine identischen Duplikate.',
+'fileduplicatesearch-result-n' => 'Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.',
+'fileduplicatesearch-noresults' => 'Es wurde keine Datei namens «$1» gefunden.',
 
 # External image whitelist
-'external_image_whitelist' => ' #Diese Zeile nicht verändern<pre>
+'external_image_whitelist' => ' #Diese Zeile nicht verändern.<pre>
 #Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.
-#Diese werden mit den URLs von Bildern aus externen Quellen verglichen
-#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt
-#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt
-#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden
+#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.
+#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.
+#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.
+#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.
+
+#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>',
+
+# Feedback
+'feedback-bugornote' => 'Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].
+Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite «[$3 $2]» hinzugefügt.',
+'feedback-thanks' => 'Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.',
 
-#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern</pre>',
+# API errors
+'api-error-file-too-large' => 'Die hochgeladene Datei war zu gross.',
+'api-error-hookaborted' => 'Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).',
+'api-error-unknown-code' => 'Unbekannter Fehler: «$1»',
+'api-error-unknown-warning' => 'Unbekannte Warnung: «$1»',
+'api-error-unknownerror' => 'Unbekannter Fehler: «$1»',
 
 );
index 1c105b0..31a782a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** German (formal address) (‪Deutsch (Sie-Form)‬)
+/** German (formal address) (Deutsch (Sie-Form)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -39,61 +39,65 @@ Bitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.
 
 $1',
 
-'badaccess-group0' => 'Sie haben nicht die erforderliche Berechtigung für diese Aktion.',
+'badaccess-group0' => 'Sie haben nicht die erforderlichen Benutzerrechte für diese Aktion.',
 
-'youhavenewmessages'      => 'Sie haben $1 ($2).',
+'youhavenewmessages' => 'Sie haben $1 ($2).',
 'youhavenewmessagesmulti' => 'Sie haben neue Nachrichten: $1',
 
 # General errors
-'enterlockreason'     => 'Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung',
-'readonlytext'        => 'Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.
+'enterlockreason' => 'Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung',
+'readonlytext' => 'Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.
 
 Grund der Sperrung: $1',
-'missing-article'     => 'Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.
+'missing-article' => 'Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.
 
 Die Seite ist möglicherweise gelöscht oder verschoben worden.
 
 Falls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.',
 'actionthrottledtext' => 'Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze haben Sie überschritten.
 Bitte versuchen Sie es in ein paar Minuten erneut.',
-'viewsourcetext'      => 'Sie können den Quelltext dieser Seite betrachten und kopieren:',
-'viewyourtext'        => "Sie können den Quelltext '''Ihrer Bearbeitung''' dieser Seite betrachten und kopieren:",
-'editinginterface'    => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
-Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche aus.
-Ziehen Sie bitte im Fall von Übersetzungen in Betracht, diese bei [//translatewiki.net/wiki/Main_Page?setlang=de-formal translatewiki.net], der Lokalisierungsplattform für MediaWiki, durchzuführen.",
-'namespaceprotected'  => "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
-'customcssprotected'  => 'Sie haben nicht die Berechtigung diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.',
-'customjsprotected'   => 'Sie haben nicht die Berechtigung diese JavaScript enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.',
+'viewsourcetext' => 'Sie können den Quelltext dieser Seite betrachten und kopieren:',
+'viewyourtext' => "Sie können den Quelltext '''Ihrer 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.
+Nutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.',
+'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
+Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.
+Nutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+'namespaceprotected' => "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
+'customcssprotected' => 'Sie haben nicht die Berechtigung diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.',
+'customjsprotected' => 'Sie haben nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.',
+'exception-nologin-text' => 'Diese Seite oder Aktion erfordert, dass Sie auf diesem Wiki angemeldet sind.',
 
 # Login and logout pages
-'logouttext'                 => "'''Sie sind nun abgemeldet.'''
+'logouttext' => "'''Sie sind nun abgemeldet.'''
 
 Sie können {{SITENAME}} jetzt anonym weiternutzen, oder sich erneut unter demselben oder einem anderen Benutzernamen [[Special:UserLogin|anmelden]].
 Beachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
-'welcomecreation'            => '== Willkommen, $1! ==
-
-Ihr Benutzerkonto wurde eingerichtet.
-Vergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] anzupassen.',
-'yourdomainname'             => 'Ihre Domain:',
-'externaldberror'            => 'Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.',
-'nologin'                    => "Sie haben kein Benutzerkonto? '''$1'''.",
-'gotaccount'                 => "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
-'userexists'                 => 'Dieser Benutzername ist schon vergeben.
+'welcomecreation' => '== Willkommen, $1! ==
+
+Ihr Benutzerkonto wurde soeben eingerichtet.
+Vergessen Sie nicht, Ihre [[Special:Preferences|Einstellungen]] anzupassen.',
+'yourdomainname' => 'Ihre Domain:',
+'password-change-forbidden' => 'Sie können auf diesem Wiki keine Passwörter ändern.',
+'externaldberror' => 'Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.',
+'nologin' => "Sie haben kein Benutzerkonto? '''$1'''.",
+'gotaccount' => "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
+'userexists' => 'Dieser Benutzername ist schon vergeben.
 Bitte wählen Sie einen anderen.',
-'nocookiesnew'               => 'Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.
+'nocookiesnew' => 'Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.
 {{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und melden sich dann mit Ihrem neuen Benutzernamen und dem zugehörigen Passwort an.',
-'nocookieslogin'             => '{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.
+'nocookieslogin' => '{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.
 Sie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen Sie es erneut.',
-'noname'                     => 'Sie müssen einen gültigen Benutzernamen angeben.',
-'loginsuccess'               => 'Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.',
-'nosuchuser'                 => 'Der Benutzername „$1“ existiert nicht.
+'noname' => 'Sie müssen einen gültigen Benutzernamen angeben.',
+'loginsuccess' => 'Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.',
+'nosuchuser' => 'Der Benutzername „$1“ existiert nicht.
 Überprüfen Sie die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melden Sie sich als neuer Benutzer an]].',
-'nosuchusershort'            => 'Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.',
-'nouserspecified'            => 'Bitte geben Sie einen Benutzernamen an.',
-'wrongpassword'              => 'Das Passwort ist falsch. Bitte versuchen Sie es erneut.',
-'wrongpasswordempty'         => 'Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.',
-'password-name-match'        => 'Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.',
-'passwordremindertext'       => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.
+'nosuchusershort' => 'Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.',
+'nouserspecified' => 'Bitte geben Sie einen Benutzernamen an.',
+'wrongpassword' => 'Das Passwort ist falsch. Bitte versuchen Sie es erneut.',
+'wrongpasswordempty' => 'Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.',
+'password-name-match' => 'Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.',
+'passwordremindertext' => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.
 
 Das automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3
 
@@ -101,38 +105,39 @@ Falls Sie dies wirklich gewünscht haben, sollten Sie sich jetzt anmelden und da
 Das neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.
 
 Bitte ignorieren Sie diese E-Mail, falls Sie sie nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.',
-'noemailcreate'              => 'Sie müssen eine gültige E-Mail-Adresse angeben',
-'passwordsent'               => 'Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.
+'noemailcreate' => 'Sie müssen eine gültige E-Mail-Adresse angeben',
+'passwordsent' => 'Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.
 Bitte melden Sie sich damit an, sobald sie es erhalten haben. Das alte Passwort bleibt weiterhin gültig.',
-'blocked-mailpassword'       => 'Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.',
-'eauthentsent'               => 'Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.
+'blocked-mailpassword' => 'Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.',
+'eauthentsent' => 'Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.
 
 Bevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungs-E-Mail.',
 'acct_creation_throttle_hit' => 'Besucher dieses Wikis, die Ihre IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.
 
 Besucher, die diese IP-Adresse verwenden, können momentan keine Benutzerkonten mehr erstellen.',
-'emailauthenticated'         => 'Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.',
-'emailnotauthenticated'      => 'Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.',
-'noemailprefs'               => 'Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.',
-'invalidemailaddress'        => 'Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.',
-'createaccount-text'         => 'Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.
+'emailauthenticated' => 'Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.',
+'emailnotauthenticated' => 'Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.',
+'noemailprefs' => 'Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.',
+'invalidemailaddress' => 'Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.',
+'createaccount-text' => 'Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.
 
 Falls das Benutzerkonto irrtümlich angelegt wurde, können Sie diese Nachricht ignorieren.',
-'login-throttled'            => 'Sie haben zu oft versucht, sich anzumelden.
-Bitte warten Sie, bevor Sie es erneut probierst.',
+'login-throttled' => 'Sie haben zu oft versucht, sich anzumelden.
+Bitte warten Sie, bevor Sie es erneut probieren.',
 
 # Change password dialog
-'resetpass_announce'      => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, müssen Sie jetzt ein neues Passwort wählen.',
-'resetpass_text'          => '<!-- Ergänzen Sie den Text hier -->',
-'resetpass_success'       => 'Ihr Passwort wurde erfolgreich geändert. Es folgt die Anmeldung …',
-'resetpass-no-info'       => 'Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.',
+'resetpass_announce' => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, müssen Sie jetzt ein neues Passwort wählen.',
+'resetpass_text' => '<!-- Ergänzen Sie den Text hier -->',
+'resetpass_success' => 'Ihr Passwort wurde erfolgreich geändert. Es folgt die Anmeldung …',
+'resetpass-no-info' => 'Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.',
 'resetpass-wrong-oldpass' => 'Ungültiges temporäres oder aktuelles Passwort.
 Möglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.',
 
 # Special:PasswordReset
-'passwordreset-text'           => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen Ihres Benutzerkontos zu erhalten.',
-'passwordreset-capture-help'   => 'Sofern Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort, sowohl Ihnen angezeigt, als auch dem Benutzer zugesandt.',
-'passwordreset-emailtext-ip'   => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Erinnerung an Ihre Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen Ihres Benutzerkontos zu erhalten.',
+'passwordreset-pretext' => '{{PLURAL:$1||Geben Sie eines der folgenden Daten ein.}}',
+'passwordreset-capture-help' => 'Sofern Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort, sowohl Ihnen angezeigt, als auch dem Benutzer zugesandt.',
+'passwordreset-emailtext-ip' => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Erinnerung an Ihre Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
 
 $2
 
@@ -145,20 +150,20 @@ $2
 {{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Sie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht ändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes Passwort benutzen.',
 
 # Special:ChangeEmail
-'changeemail-text'    => 'Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.',
+'changeemail-text' => 'Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.',
 'changeemail-no-info' => 'Sie müssen angemeldet sein, um direkt auf diese Seite zugreifen zu können.',
 
 # Edit page toolbar
 'sig_tip' => 'Ihre Signatur mit Zeitstempel',
 
 # Edit pages
-'anoneditwarning'                  => "Sie bearbeiten diese Seite unangemeldet. Wenn Sie speichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
-'missingsummary'                   => "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
-'missingcommenttext'               => 'Ihr Abschnitt enthält keinen Text.',
-'missingcommentheader'             => "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
-'blockedtext'                      => "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''
+'anoneditwarning' => "Sie bearbeiten diese Seite unangemeldet. Wenn Sie sie speichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+'missingsummary' => "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
+'missingcommenttext' => 'Ihr Abschnitt enthält keinen Text.',
+'missingcommentheader' => "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
+'blockedtext' => "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''
 
-Die Sperrung wurde von $1 durchgeführt.
+Die Sperrung wurde vom Administrator $1 durchgeführt.
 Als Grund wurde ''$2'' angegeben.
 
 * Beginn der Sperre: $8
@@ -166,10 +171,10 @@ Als Grund wurde ''$2'' angegeben.
 * Sperre betrifft: $7
 
 Sie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
-Sie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist, oder diese Funktion für Sie gesperrt wurde.
-Ihre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.
+Sie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.
+Ihre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.
 Bitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
-'autoblockedtext'                  => "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.
+'autoblockedtext' => "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.
 Als Grund wurde angegeben:
 
 :''$2''
@@ -180,171 +185,170 @@ Als Grund wurde angegeben:
 
 Sie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
 
-Sie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist, oder diese Funktion für Sie gesperrt wurde.
+Sie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.
 
 Ihre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.
 Bitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
-'whitelistedittext'                => 'Sie müssen sich $1, um Seiten bearbeiten zu können.',
-'confirmedittext'                  => 'Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].',
-'nosuchsectiontext'                => 'Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.
+'whitelistedittext' => 'Sie müssen sich $1, um Seiten bearbeiten zu können.',
+'confirmedittext' => 'Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].',
+'nosuchsectiontext' => 'Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.
 Vermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.',
-'loginreqpagetext'                 => 'Sie müssen sich $1, um Seiten lesen zu können.',
-'newarticletext'                   => "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.
+'loginreqpagetext' => 'Sie müssen sich $1, um Seiten lesen zu können.',
+'newarticletext' => "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.
 Um diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (siehe die [[{{MediaWiki:Helppage}}|Hilfeseite]] für weitere Informationen).
 Sofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
-'anontalkpagetext'                 => "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
-'noarticletext'                    => 'Diese Seite enthält momentan noch keinen Text.
+'anontalkpagetext' => "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
+'noarticletext' => 'Diese Seite enthält momentan noch keinen Text.
 Sie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],
 <span class="plainlinks">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.',
-'noarticletext-nopermission'       => 'Diese Seite enthält momentan noch keinen Text.
-Sie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]
-oder in den zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen]</span>.',
-'userpage-userdoesnotexist'        => 'Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.',
-'clearyourcache'                   => "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.
+'noarticletext-nopermission' => 'Diese Seite enthält momentan noch keinen Text.
+Sie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>. Sie sind allerdings nicht berechtigt diese Seite zu erstellen.',
+'userpage-userdoesnotexist' => 'Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.',
+'clearyourcache' => "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.
 * '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken
 * '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken
 * '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken
-* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''
-* '''Konqueror:''' ''Aktualisieren'' anklicken oder ''F5'' drücken",
-'usercssyoucanpreview'             => "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
-'userjsyoucanpreview'              => "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
-'usercsspreview'                   => "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''
+* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+'usercssyoucanpreview' => "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
+'userjsyoucanpreview' => "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
+'usercsspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''
 '''Es wurde noch nicht gespeichert!'''",
-'userjspreview'                    => "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''
+'userjspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''
 '''Es wurde noch nicht gespeichert!'''",
-'sitecsspreview'                   => "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''
+'sitecsspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''
 '''Es wurde noch nicht gespeichert!'''",
-'sitejspreview'                    => "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''
+'sitejspreview' => "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''
 '''Es wurde noch nicht gespeichert!'''",
-'userinvalidcssjstitle'            => "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
-'previewconflict'                  => 'Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.',
-'session_fail_preview'             => "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.
+'userinvalidcssjstitle' => "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+'previewconflict' => 'Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.',
+'session_fail_preview' => "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.
 Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.
 Sollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
-'session_fail_preview_html'        => "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''
+'session_fail_preview_html' => "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''
 
 ''Da in {{SITENAME}} das Speichern von reinem HTML aktiviert ist, wurde die Vorschau ausgeblendet, um JavaScript-Attacken vorzubeugen.''
 
 '''Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.
 Sollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
-'token_suffix_mismatch'            => "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.
+'token_suffix_mismatch' => "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.
 Eine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
-'edit_form_incomplete'             => "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
-'explainconflict'                  => "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben sie zu bearbeiten.
+'edit_form_incomplete' => "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
+'explainconflict' => "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.
 Das obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.
 Das untere Textfeld enthält Ihre Änderungen.
 Bitte fügen Sie Ihre Änderungen in das obere Textfeld ein.
 '''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „{{int:savearticle}}“ klicken.",
-'yourtext'                         => 'Ihr Text',
-'nonunicodebrowser'                => "'''Achtung:''' Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten. Bitte verwenden Sie einen anderen Browser um Seiten zu bearbeiten.",
-'editingold'                       => "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
-'copyrightwarning'                 => "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />
+'yourtext' => 'Ihr Text',
+'nonunicodebrowser' => "'''Achtung:''' Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten. Bitte verwenden Sie einen anderen Browser um Seiten zu bearbeiten.",
+'editingold' => "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
+'copyrightwarning' => "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />
 Sie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.
-<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Details). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann drücken Sie nicht auf „Seite speichern“.</i>",
-'copyrightwarning2'                => "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.
+<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
+'copyrightwarning2' => "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.
 Reichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.
 
 Sie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben
-(siehe $1 für weitere Details). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
-'longpageerror'                    => "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''
+(siehe $1 für weitere Einzelheiten). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+'longpageerror' => "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''
 Er kann nicht gespeichert werden.",
-'readonlywarning'                  => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.
+'readonlywarning' => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.
 Sichern Sie den Text bitte lokal auf Ihrem Computer und versuchen Sie zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''
 
 Grund für die Sperre: $1",
-'nocreatetext'                     => 'Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].',
-'nocreate-loggedin'                => 'Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.',
-'permissionserrorstext'            => 'Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:',
+'nocreatetext' => 'Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].',
+'nocreate-loggedin' => 'Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.',
+'permissionserrorstext' => 'Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:',
 'permissionserrorstext-withaction' => 'Sie sind nicht berechtigt, $2.
 {{PLURAL:$1|Grund|Gründe}}:',
-'recreate-moveddeleted-warn'       => "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''
+'recreate-moveddeleted-warn' => "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''
 
 Bitte prüfen Sie sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.
 Zu Ihrer Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
-'edit-no-change'                   => 'Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.',
+'edit-no-change' => 'Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.',
 
 # "Undo" feature
 'undo-success' => 'Die Bearbeitung kann rückgängig gemacht werden.
-Bitte prüfen Sie den Vergleich unten um sicherzustellen, dass Sie dies tun möchten, und speicheren Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.',
+Bitte prüfen Sie den Vergleich unten, um sicherzustellen, dass Sie dies tun möchten, und speichern Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.',
 
 # Revision feed
 'history-feed-empty' => 'Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen Sie]] {{SITENAME}} nach passenden neuen Seiten.',
 
 # Revision deletion
-'rev-deleted-text-unhide'     => "Diese Version wurde '''gelöscht'''.
+'rev-deleted-text-unhide' => "Diese Version wurde '''gelöscht'''.
 Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].
 Sie können [$1 diese Version einsehen], sofern Sie möchten.",
-'rev-suppressed-text-unhide'  => "Diese Version wurde '''unterdrückt'''.
+'rev-suppressed-text-unhide' => "Diese Version wurde '''unterdrückt'''.
 Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].
 Sie können [$1 diese Version einsehen], sofern Sie möchten.",
-'rev-deleted-text-view'       => "Diese Version wurde '''gelöscht'''.
+'rev-deleted-text-view' => "Diese Version wurde '''gelöscht'''.
 Sie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-'rev-suppressed-text-view'    => "Diese Version wurde '''unterdrückt'''.
+'rev-suppressed-text-view' => "Diese Version wurde '''unterdrückt'''.
 Sie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
-'rev-deleted-no-diff'         => "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.
+'rev-deleted-no-diff' => "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.
 Details stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-'rev-suppressed-no-diff'      => "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
-'rev-deleted-unhide-diff'     => "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.
+'rev-suppressed-no-diff' => "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
+'rev-deleted-unhide-diff' => "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.
 Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].
 Sie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
-'rev-suppressed-unhide-diff'  => "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.
+'rev-suppressed-unhide-diff' => "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.
 Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].
 Sie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
-'rev-deleted-diff-view'       => "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.
+'rev-deleted-diff-view' => "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.
 Sie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
-'rev-suppressed-diff-view'    => "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.
+'rev-suppressed-diff-view' => "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.
 Sie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
-'revdelete-nooldid-text'      => 'Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.',
+'revdelete-nooldid-text' => 'Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.',
 'revdelete-show-file-confirm' => 'Sind Sie sicher, dass Sie die gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2 um $3 Uhr ansehen wollen?',
-'revdelete-confirm'           => 'Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.',
-'revdelete-show-no-access'    => 'Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.
+'revdelete-confirm' => 'Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.',
+'revdelete-show-no-access' => 'Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.
 Sie haben darauf keinen Zugriff.',
-'revdelete-modify-no-access'  => 'Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.
+'revdelete-modify-no-access' => 'Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.
 Sie haben darauf keinen Zugriff.',
 'revdelete-concurrent-change' => 'Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Es scheint, als ob der Status von jemandem geändert wurde, bevor Sie vorhatten, ihn zu bearbeiten.
 Bitte prüfen Sie die Logbücher.',
-'revdelete-only-restricted'   => 'Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.',
+'revdelete-only-restricted' => 'Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.',
 
 # History merging
 'mergehistory-header' => 'Mit dieser Spezialseite können Sie die Versionsgeschichte einer Ursprungsseite mit der Versionsgeschichte einer Zielseite vereinen.
 Stellen Sie sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.',
-'mergehistory-merge'  => 'Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.',
-'mergehistory-fail'   => 'Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.',
+'mergehistory-merge' => 'Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.',
+'mergehistory-fail' => 'Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.',
 
 # Search results
-'searchsubtitle'        => 'Ihre Suchanfrage: „[[:$1]]“ ([[Special:Prefixindex/$1|alle mit „$1“ beginnenden Seiten]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Seiten, die nach „$1“ verlinken]])',
+'searchsubtitle' => 'Ihre Suchanfrage: „[[:$1]]“ ([[Special:Prefixindex/$1|alle mit „$1“ beginnenden Seiten]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Seiten, die nach „$1“ verlinken]])',
 'searchsubtitleinvalid' => 'Ihre Suchanfrage: „$1“.',
-'toomanymatches'        => 'Die Anzahl der Suchergebnisse ist zu groß, bitte versuchen Sie eine andere Abfrage.',
-'searchmenu-new'        => "'''Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.'''",
-'search-suggest'        => 'Meinten Sie „$1“?',
-'nonefound'             => "'''Hinweis:''' Es werden standardmäßig nur einige Namensräume durchsucht. Setzen Sie ''all:'' vor Ihren Suchbegriff, um alle Seiten (inkl. Diskussionsseiten, Vorlagen usw.) zu durchsuchen oder gezielt den Namen des zu durchsuchenden Namensraumes.",
-'search-nonefound'      => 'Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.',
-'searchdisabled'        => 'Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.',
+'toomanymatches' => 'Die Anzahl der Suchergebnisse ist zu groß, bitte versuchen Sie eine andere Abfrage.',
+'searchmenu-new' => "'''Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.'''",
+'search-suggest' => 'Meinten Sie „$1“?',
+'nonefound' => "'''Hinweis:''' Es werden standardmäßig nur einige Namensräume durchsucht. Setzen Sie ''all:'' vor Ihren Suchbegriff, um alle Seiten (inkl. Diskussionsseiten, Vorlagen usw.) zu durchsuchen oder gezielt den Namen des zu durchsuchenden Namensraumes.",
+'search-nonefound' => 'Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.',
+'searchdisabled' => 'Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.',
 
 # Preferences page
-'prefsnologintext'           => 'Sie müssen <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} angemeldet]</span> sein, um Ihre Einstellungen ändern zu können.',
+'prefsnologintext' => 'Sie müssen <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} angemeldet]</span> sein, um Ihre Einstellungen ändern zu können.',
 'prefs-help-watchlist-token' => 'Das Ausfüllen dieses Feldes mit einem geheimen Schlüssel generiert einen RSS-Feed für Ihre Beobachtungsliste.
 Jeder, der diesen Schlüssel kennt, kann Ihre Beobachtungsliste einsehen. Wählen Sie also einen sicheren Wert.
 Hier ein zufällig generierter Wert, den Sie verwenden können: $1',
-'savedprefs'                 => 'Ihre Einstellungen wurden gespeichert.',
-'prefs-reset-intro'          => 'Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.
+'savedprefs' => 'Ihre Einstellungen wurden gespeichert.',
+'prefs-reset-intro' => 'Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.
 Dies kann nicht mehr rückgängig gemacht werden.',
-'prefs-help-realname'        => 'Optional. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.',
-'prefs-help-email'           => 'Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.',
-'prefs-help-email-others'    => 'Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.',
+'prefs-help-realname' => 'Optional. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.',
+'prefs-help-email' => 'Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.',
+'prefs-help-email-others' => 'Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.',
 
 # User rights
-'userrights-groups-help'      => 'Sie können die Gruppenzugehörigkeit dieses Benutzer ändern.
+'userrights-groups-help' => 'Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:
 * Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.
+* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.
 * Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).',
-'userrights-no-interwiki'     => 'Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.',
-'userrights-nologin'          => 'Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.',
-'userrights-notallowed'       => 'Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.',
-'userrights-changeable-col'   => 'Gruppenzugehörigkeit, die Sie ändern dürfen',
+'userrights-no-interwiki' => 'Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.',
+'userrights-nologin' => 'Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.',
+'userrights-notallowed' => 'Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.',
+'userrights-changeable-col' => 'Gruppenzugehörigkeit, die Sie ändern dürfen',
 'userrights-unchangeable-col' => 'Gruppenzugehörigkeit, die Sie nicht ändern dürfen',
 
 # Recent changes
-'recentchangestext'              => "Auf dieser Seite können Sie die letzten Änderungen auf '''{{SITENAME}}''' nachverfolgen.",
+'recentchanges-summary' => "Auf dieser Seite können Sie die letzten Änderungen auf '''{{SITENAME}}''' nachverfolgen.",
 'recentchanges-feed-description' => 'Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.',
 
 # Recent changes linked
@@ -352,45 +356,44 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 Seiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
 
 # Upload
-'uploadnologintext'           => 'Sie müssen [[Special:UserLogin|angemeldet sein]], um Dateien hochladen zu können.',
-'uploadtext'                  => "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.
+'uploadnologintext' => 'Sie müssen [[Special:UserLogin|angemeldet sein]], um Dateien hochladen zu können.',
+'uploadtext' => "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.
 
 Gehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].
 
 Um ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></tt>''' – für ein Vollbild
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></tt>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung
-* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></tt>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
-'illegalfilename'             => 'Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie sie erneut hochzuladen.',
-'emptyfile'                   => 'Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.',
-'fileexists'                  => "Eine Datei mit diesem Namen existiert bereits.
-Wenn Sie auf „Datei speichern“ klicken, wird die Datei überschrieben.
-Bitte prüfen Sie '''<tt>[[:$1]]</tt>''', wenn Sie sich nicht sicher sind.
-[[$1|thumb]]",
-'filepageexists'              => "Eine Beschreibungsseite wurde bereits als '''<tt>[[:$1]]</tt>''' erstellt, es ist aber keine Datei mit diesem Namen vorhanden.
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+'illegalfilename' => 'Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.',
+'empty-file' => 'Die von Ihnen übertragene Datei hat keinen Inhalt.',
+'emptyfile' => 'Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.',
+'fileexists' => 'Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfen Sie <strong>[[:$1]]</strong>, sofern Sie sich nicht sicher sind, ob Sie sie ändern möchten.
+[[$1|thumb]]',
+'filepageexists' => 'Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.
 Die eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.
 Die Beschreibungsseite müssen Sie nach dem Hochladen der Datei noch manuell bearbeiten.
-[[$1|thumb]]",
-'fileexists-extension'        => "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]
-* Name der hochzuladenden Datei: '''<tt>[[:$1]]</tt>'''
-* Name der vorhandenen Datei: '''<tt>[[:$2]]</tt>'''
-Bitte wählen Sie einen anderen Namen.",
-'fileexists-thumbnail-yes'    => "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(thumbnail)'' zu handeln. [[$1|thumb]]
-Bitte prüfen Sie die Datei '''<tt>[[:$1]]</tt>'''.
+[[$1|thumb]]',
+'fileexists-extension' => 'Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]
+* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>
+* Name der vorhandenen Datei: <strong>[[:$2]]</strong>
+Bitte wählen Sie einen anderen Namen.',
+'fileexists-thumbnail-yes' => "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Minitatur)'' zu handeln. [[$1|thumb]]
+Bitte prüfen Sie die Datei <strong>[[:$1]]</strong>.
 Wenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
-'file-thumbnail-no'           => "Der Dateiname beginnt mit '''<tt>$1</tt>'''. Dies deutet auf ein Bild verringerter Größe ''(thumbnail)'' hin.
+'file-thumbnail-no' => "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Miniatur)'' hin.
 Bitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden dieses unter dem Originalnamen hoch.",
-'fileexists-forbidden'        => 'Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]',
+'fileexists-forbidden' => 'Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'Unter diesem Namen existiert bereits eine Datei im zentralen Medienarchiv.
 Wenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ändern den Namen.
 [[File:$1|thumb|center|$1]]',
-'file-deleted-duplicate'      => 'Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.',
-'uploadwarning-text'          => 'Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.',
-'uploadfromurl-queued'        => 'Ihr Upload befindet sich nun in der Warteschlange.',
-'php-uploaddisabledtext'      => 'Das Hochladen von Dateien wurde in PHP deaktiviert.
+'file-deleted-duplicate' => 'Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.',
+'uploadwarning-text' => 'Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.',
+'uploadfromurl-queued' => 'Ihr Upload befindet sich nun in der Warteschlange.',
+'php-uploaddisabledtext' => 'Das Hochladen von Dateien wurde in PHP deaktiviert.
 Bitte überprüfen Sie die <code>file_uploads</code>-Einstellung.',
-'filewasdeleted'              => 'Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.',
-'filename-bad-prefix'         => "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.
+'filewasdeleted' => 'Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.',
+'filename-bad-prefix' => "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.
 Bitte geben Sie der Datei einen Namen, der den Inhalt besser beschreibt.",
 
 'upload-file-error-text' => 'Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten.
@@ -399,26 +402,37 @@ Bitte informieren Sie einen [[Special:ListUsers/sysop|System-Administrator]].',
 Prüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchem Sie erneut.
 Wenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|System-Administrator]].',
 
+# Special:UploadStash
+'uploadstash-badtoken' => 'Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil Ihre Sitzungsdaten abgelaufen sind. Bitte versuchen Sie es erneut.',
+
 # img_auth script messages
+'img-auth-nopathinfo' => 'PATH_INFO fehlt.
+Ihr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.
+Sie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.
+Siehe http://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-nologinnWL' => 'Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.',
-'img-auth-isdir'      => 'Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.
+'img-auth-isdir' => 'Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.
 Nur Dateizugriff ist erlaubt.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6-text'  => 'Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.',
-'upload-curl-error28-text' => 'Die Seite braucht zu lange für eine Antwort. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen es dann erneut. Es kann sinnvoll sein, einen erneuten Versuch zu einem anderen Zeitpunkt zu probieren.',
+'upload-curl-error6-text' => 'Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.',
+'upload-curl-error28-text' => 'Die Seite braucht zu lange, um zu antworten. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.',
 
 'upload_source_file' => ' (eine Datei auf Ihrem Computer)',
 
 # File description page
-'filehist-help'        => 'Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.',
-'filepage-nofile-link' => 'Es existiert keine Datei mit diesem Namen, aber Sie können [$1 diese Datei hochladen].',
+'filehist-help' => 'Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.',
+'sharedupload-desc-edit' => 'Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.
+Vielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
+'sharedupload-desc-create' => 'Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.
+Vielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.',
+'filepage-nofile-link' => 'Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].',
 
 # File reversion
 'filerevert-intro' => "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
 
 # File deletion
-'filedelete-intro'     => "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
+'filedelete-intro' => "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
 'filedelete-intro-old' => "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
 
 # Unused templates
@@ -427,7 +441,7 @@ Nur Dateizugriff ist erlaubt.',
 
 # Miscellaneous special pages
 'unusedimagestext' => 'Bitte beachten Sie, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.',
-'notargettext'     => 'Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.',
+'notargettext' => 'Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.',
 
 # Book sources
 'booksources-invalid-isbn' => 'Vermutlich ist die ISBN ungültig.
@@ -435,26 +449,26 @@ Bitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => 'Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.',
-'cachedspecial-viewing-cached-ts'  => 'Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.',
+'cachedspecial-viewing-cached-ts' => 'Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.',
 
 # E-mail user
 'mailnologintext' => 'Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.',
-'emailpagetext'   => 'Sie könnent dem Benutzer mit dem unten stehenden Formular eine E-Mail senden.
+'emailpagetext' => 'Sie könnent dem Benutzer mit dem unten stehenden Formular eine E-Mail senden.
 Als Absender wird die E-Mail-Adresse aus ihren [[Special:Preferences|Einstellungen]] eingetragen, damit der Benutzer Ihnen antworten kann.',
-'emailccsubject'  => 'Kopie Ihrer Nachricht an $1: $2',
-'emailsenttext'   => 'Ihre E-Mail wurde verschickt.',
+'emailccsubject' => 'Kopie Ihrer Nachricht an $1: $2',
+'emailsenttext' => 'Ihre E-Mail wurde verschickt.',
 
 # Watchlist
-'nowatchlist'       => 'Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.',
+'nowatchlist' => 'Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.',
 'watchlistanontext' => 'Sie müssen sich $1, um Ihre Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.',
-'watchnologin'      => 'Sie sind nicht angemeldet',
-'watchnologintext'  => 'Sie müssen [[Special:UserLogin|angemeldet]] sein, um Ihre Beobachtungsliste bearbeiten zu können.',
-'addedwatchtext'    => 'Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.
+'watchnologin' => 'Sie sind nicht angemeldet',
+'watchnologintext' => 'Sie müssen [[Special:UserLogin|angemeldet]] sein, um Ihre Beobachtungsliste bearbeiten zu können.',
+'addedwatchtext' => 'Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.
 
 Spätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet und
 in der Übersicht der [[Special:RecentChanges|letzten Änderungen]] in Fettschrift dargestellt.',
-'removedwatchtext'  => 'Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.',
-'watchnochange'     => 'Keine der von Ihnen beobachteten Seiten wurde während des angezeigten Zeitraums bearbeitet.',
+'removedwatchtext' => 'Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.',
+'watchnochange' => 'Keine der von Ihnen beobachteten Seiten wurde während des angezeigten Zeitraums bearbeitet.',
 'watchlist-details' => 'Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.',
 'watchlistcontains' => 'Ihre Beobachtungsliste enthält $1 {{PLURAL:$1|Seite|Seiten}}.',
 
@@ -486,30 +500,30 @@ Um diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHUR
 Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
-'historywarning'    => "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
+'historywarning' => "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
 'confirmdeletetext' => 'Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.',
-'deletedtext'       => '„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.',
+'deletedtext' => '„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.',
 
 # Edit tokens
-'sessionfailure' => 'Es gab ein Problem mit der Übertragung Ihrer Benutzerdaten.
+'sessionfailure' => 'Es gab ein Problem bei der Übertragung Ihrer Benutzerdaten.
 Diese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.
-Bitte gehen Sie zurück und versuchen Sie den Vorgang erneut auszuführen.',
+Bitte gehen Sie zurück zur vorherigen Seite, laden Sie sie erneut und versuchen Sie, den Vorgang erneut auszuführen.',
 
 # Protect
-'protect-text'           => 'Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.',
+'protect-text' => 'Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.',
 'protect-locked-blocked' => "Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''„$1“:'''",
-'protect-locked-access'  => "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
-'protect-cantedit'       => 'Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.',
+'protect-locked-access' => "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
+'protect-cantedit' => 'Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.',
 
 # Undelete
-'undeleteextrahelp'          => '* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.
+'undeleteextrahelp' => '* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.
 * Um lediglich bestimmte Versionen der Seite wiederherzustellen, wählen Sie die betreffenden Versionen einzeln aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.',
-'undeletehistory'            => 'Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.
+'undeletehistory' => 'Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.
 Wenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.',
-'undeleterevdel'             => 'Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.
+'undeleterevdel' => 'Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.
 In diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.
 Versionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.',
-'undeletedpage'              => "'''$1''' wurde wiederhergestellt.
+'undeletedpage' => "'''$1''' wurde wiederhergestellt.
 
 Im [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.",
 'undelete-show-file-confirm' => 'Sind Sie sicher, dass Sie eine gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2, $3 Uhr sehen wollen?',
@@ -518,26 +532,26 @@ Im [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelösch
 'tooltip-namespace_association' => 'Dieses Auswahlfeld anklicken, um den Ihrer Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen',
 
 # Block/unblock
-'blockiptext'              => 'Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.
+'blockiptext' => 'Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.
 Dies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].
 Bitte geben Sie den Grund für die Sperre an.',
-'ipb-blockingself'         => 'Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?',
-'ipb-confirmhideuser'      => 'Sie sind gerade dabei einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?',
-'unblockiptext'            => 'Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.',
-'autoblocker'              => 'Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Grund der Benutzersperre: „$2“.',
-'ipb-needreblock'          => '„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?',
-'proxyblockreason'         => 'Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.',
+'ipb-blockingself' => 'Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?',
+'ipb-confirmhideuser' => 'Sie sind gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?',
+'unblockiptext' => 'Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.',
+'autoblocker' => 'Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Grund der Benutzersperre: „$2“.',
+'ipb-needreblock' => '„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?',
+'proxyblockreason' => 'Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.',
 'cant-block-while-blocked' => 'Sie können keine anderen Benutzer sperren, während Sie selbst gesperrt sind.',
-'cant-see-hidden-user'     => 'Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.',
-'ipbblocked'               => 'Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind',
-'ipbnounblockself'         => 'Sie haben nicht die Berechtigung, sich selbst zu entsperren',
+'cant-see-hidden-user' => 'Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.',
+'ipbblocked' => 'Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind',
+'ipbnounblockself' => 'Sie haben nicht die Berechtigung, sich selbst zu entsperren',
 
 # Developer tools
-'locknoconfirm'     => 'Sie haben das Bestätigungsfeld nicht markiert.',
+'locknoconfirm' => 'Sie haben das Bestätigungsfeld nicht markiert.',
 'lockdbsuccesstext' => 'Die {{SITENAME}}-Datenbank wurde gesperrt.<br />Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.',
 
 # Move page
-'movepagetext'                 => "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.
+'movepagetext' => "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.
 Der alte Titel wird danach zum neuen weiterleiten.
 Sie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.
 Stellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|kaputten Weiterleitungen]] überprüfen.
@@ -560,26 +574,26 @@ Dies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie
 '''Warnung!'''
 Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.
 Sie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
-'movepagetalktext'             => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''
+'movepagetalktext' => "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''
 *Es existiert bereits eine Diskussionsseite mit diesem Namen, oder
 *Sie wählen die unten stehende Option ab.
 
 In diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.
 
 Bitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''",
-'moveuserpage-warning'         => "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
-'movenologin'                  => 'Sie sind nicht angemeldet',
-'movenologintext'              => 'Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.',
-'movenotallowed'               => 'Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.',
-'movenotallowedfile'           => 'Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.',
-'cant-move-user-page'          => 'Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.',
-'cant-move-to-user-page'       => 'Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).',
-'articleexists'                => 'Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.',
-'talkexists'                   => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussionsseite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.',
-'delete_and_move_text'         => '== Löschung erforderlich ==
+'moveuserpage-warning' => "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
+'movenologin' => 'Sie sind nicht angemeldet',
+'movenologintext' => 'Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.',
+'movenotallowed' => 'Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.',
+'movenotallowedfile' => 'Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.',
+'cant-move-user-page' => 'Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.',
+'cant-move-to-user-page' => 'Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).',
+'articleexists' => 'Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.',
+'talkexists' => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussionsseite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.',
+'delete_and_move_text' => '== Löschung erforderlich ==
 
 Die Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?',
-'file-exists-sharedrepo'       => 'Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.
+'file-exists-sharedrepo' => 'Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.
 Bitte wählen Sie einen anderen Namen.',
 
 # Export
@@ -599,20 +613,23 @@ Bitte besuchen Sie die Seiten [//www.mediawiki.org/wiki/Localisation MediaWiki-L
 Die Versionsdaten und Benutzernamen bleiben dabei erhalten.
 Alle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.',
 'import-token-mismatch' => 'Verlust der Sessiondaten. Bitte versuchen Sie es erneut.',
-'import-error-edit'     => 'Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.',
-'import-error-create'   => 'Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.',
+'import-error-edit' => 'Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.',
+'import-error-create' => 'Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.',
 
 # JavaScriptTest
+'javascripttest-pagetext-frameworks' => 'Bitte wählen Sie eine der folgenden Prüfumgebungen aus: $1',
 'javascripttest-pagetext-skins' => 'Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'     => 'Ihre Benutzerseite',
+'tooltip-pt-userpage' => 'Ihre Benutzerseite',
 'tooltip-pt-anonuserpage' => 'Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen',
-'tooltip-pt-mytalk'       => 'Ihre Diskussionsseite',
-'tooltip-pt-mycontris'    => 'Liste Ihrer Beiträge',
-'tooltip-n-portal'        => 'Über das Projekt, was Sie tun können, wo was zu finden ist',
-'tooltip-watch'           => 'Diese Seite zu Ihrer Beobachtungsliste hinzufügen',
-'tooltip-summary'         => 'Geben Sie eine kurze Zusammenfassung ein.',
+'tooltip-pt-mytalk' => 'Ihre Diskussionsseite',
+'tooltip-pt-mycontris' => 'Liste Ihrer Beiträge',
+'tooltip-n-mainpage' => 'Besuchen Sie die Hauptseite',
+'tooltip-n-mainpage-description' => 'Besuchen Sie die Hauptseite',
+'tooltip-n-portal' => 'Über das Projekt, was Sie tun können, wo was zu finden ist',
+'tooltip-watch' => 'Diese Seite zu Ihrer Beobachtungsliste hinzufügen',
+'tooltip-summary' => 'Geben Sie eine kurze Zusammenfassung ein.',
 
 # Metadata
 'notacceptable' => 'Der Wiki-Server kann die Daten nicht für Ihr Ausgabegerät aufbereiten.',
@@ -629,21 +646,21 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 Durch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.",
 
 # E-mail address confirmation
-'confirmemail_noemail'    => 'Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.',
-'confirmemail_text'       => '{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.',
-'confirmemail_pending'    => 'Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.
+'confirmemail_noemail' => 'Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.',
+'confirmemail_text' => '{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.',
+'confirmemail_pending' => 'Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.
 Wenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.',
-'confirmemail_oncreate'   => 'Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.',
+'confirmemail_oncreate' => 'Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.',
 'confirmemail_sendfailed' => '{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an Sie versenden.
 Bitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.
 
 Rückmeldung des Mailservers: $1',
-'confirmemail_invalid'    => 'Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.',
-'confirmemail_needlogin'  => 'Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.',
-'confirmemail_success'    => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].',
-'confirmemail_loggedin'   => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt.',
-'confirmemail_error'      => 'Es gab einen Fehler bei der Bestätigung Ihrer E-Mail-Adresse.',
-'confirmemail_body'       => 'Hallo,
+'confirmemail_invalid' => 'Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.',
+'confirmemail_needlogin' => 'Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.',
+'confirmemail_success' => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].',
+'confirmemail_loggedin' => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt.',
+'confirmemail_error' => 'Es gab einen Fehler bei der Bestätigung Ihrer E-Mail-Adresse.',
+'confirmemail_body' => 'Hallo,
 
 jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ in {{SITENAME}} registriert.
 
@@ -659,7 +676,7 @@ Wenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem
 $5
 
 Dieser Bestätigungscode ist gültig bis $6, $7 Uhr.',
-'confirmemail_body_set'   => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,
+'confirmemail_body_set' => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,
 hat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.
 
 Um zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört
@@ -678,35 +695,39 @@ Dieser Bestätigungscode ist gültig bis $4.',
 'deletedwhileediting' => 'Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben sie zu bearbeiten!
 Im [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.
 Wenn Sie die Seite speichern, wird sie neu angelegt.',
-'confirmrecreate'     => "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:
+'confirmrecreate' => "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:
 : ''$2''
 Bitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
 
+# Live preview
+'livepreview-failed' => 'Die Vorschau kann nicht sofort angezeigt werden!
+Bitte nutzen Sie die reguläre Vorschau.',
+
 # Watchlist editor
-'watchlistedit-numitems'       => 'Ihre Beobachtungsliste enthält {{PLURAL:$1|einen Eintrag|$1 Einträge}}. Die Diskussionsseiten wurden dabei nicht mitgezählt.',
-'watchlistedit-noitems'        => 'Ihre Beobachtungsliste ist leer.',
+'watchlistedit-numitems' => 'Ihre Beobachtungsliste enthält {{PLURAL:$1|einen Eintrag|$1 Einträge}}. Die Diskussionsseiten wurden dabei nicht mitgezählt.',
+'watchlistedit-noitems' => 'Ihre Beobachtungsliste ist leer.',
 'watchlistedit-normal-explain' => 'Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].',
-'watchlistedit-normal-done'    => '{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:',
-'watchlistedit-raw-explain'    => 'Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.
+'watchlistedit-normal-done' => '{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:',
+'watchlistedit-raw-explain' => 'Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.
 Pro Zeile ist ein Eintrag erlaubt.
 Sobald Sie fertig sind, klicken Sie auf „{{int:Watchlistedit-raw-submit}}“.
 Sie können auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.',
-'watchlistedit-raw-done'       => 'Ihre Beobachtungsliste wurde gespeichert.',
+'watchlistedit-raw-done' => 'Ihre Beobachtungsliste wurde gespeichert.',
 
 # Database error messages
-'dberr-again'     => 'Warten Sie einige Minuten und versuchen Sie dann neu zuladen.',
+'dberr-again' => 'Warten Sie einige Minuten und versuchen Sie dann neu zuladen.',
 'dberr-usegoogle' => 'Sie könnten in der Zwischenzeit mit Google suchen.',
 'dberr-outofdate' => 'Beachten Sie, dass der Suchindex unserer Inhalte bei Google veraltet sein kann.',
 
 # Feedback
 'feedback-bugornote' => 'Sofern Sie detailliert ein technisches Problem beschreiben möchten, melden Sie bitte [$1 einen Fehler].
 Anderenfalls können Sie auch das untenstehende einfache Formular nutzen. Ihr Kommentar wird, zusammen mit Ihrem Benutzernamen und der Version des von Ihnen verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.',
-'feedback-thanks'    => 'Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.',
-'feedback-bugcheck'  => 'Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.',
+'feedback-thanks' => 'Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.',
+'feedback-bugcheck' => 'Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.',
 
 # API errors
 'api-error-badaccess-groups' => 'Sie haben nicht die Berechtigung Dateien in dieses Wiki hochzuladen.',
-'api-error-hookaborted'      => 'Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).',
-'api-error-mustbeloggedin'   => 'Um Dateien hochladen zu können, müssen Sie angemeldet sein.',
+'api-error-hookaborted' => 'Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).',
+'api-error-mustbeloggedin' => 'Um Dateien hochladen zu können, müssen Sie angemeldet sein.',
 
 );
index 9718162..bd5de5c 100644 (file)
@@ -14,6 +14,7 @@
  * @author George Animal
  * @author Kaganer
  * @author Mirzali
+ * @author Olvörg
  * @author Reedy
  * @author Sahim
  * @author Xoser
@@ -24,7 +25,7 @@ $namespaceNames = array(
        NS_SPECIAL          => 'Xısusi',
        NS_TALK             => 'Werênayış',
        NS_USER             => 'Karber',
-       NS_USER_TALK        => 'Karber_mesac',
+       NS_USER_TALK        => 'Karber_werênayış',
        NS_PROJECT_TALK     => '$1_werênayış',
        NS_FILE             => 'Dosya',
        NS_FILE_TALK        => 'Dosya_werênayış',
@@ -32,26 +33,34 @@ $namespaceNames = array(
        NS_MEDIAWIKI_TALK   => 'MediaWiki_werênayış',
        NS_TEMPLATE         => 'Şablon',
        NS_TEMPLATE_TALK    => 'Şablon_werênayış',
-       NS_HELP             => 'Desteg',
-       NS_HELP_TALK        => 'Desteg_werênayış',
-       NS_CATEGORY         => 'Kategori',
-       NS_CATEGORY_TALK    => 'Kategori_werênayış',
+       NS_HELP             => 'Peşti',
+       NS_HELP_TALK        => 'Peşti_werênayış',
+       NS_CATEGORY         => 'Kategoriye',
+       NS_CATEGORY_TALK    => 'Kategoriye_werênayış',
+);
+
+$namespaceAliases = array(
+       'Karber_mesac'       => NS_USER_TALK,
+       'Desteg'             => NS_HELP,
+       'Desteg_werênayış'   => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_werênayış' => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'KarbereAktivi', 'AktivKarberi' ),
-       'Allmessages'               => array( 'MesaciPero' ),
-       'Allpages'                  => array( 'PeleyPero' ),
-       'Ancientpages'              => array( 'PeleyVereni' ),
+       'Activeusers'               => array( 'KarberêAktivi', 'AktivKarberi' ),
+       'Allmessages'               => array( 'MesaciPêro' ),
+       'Allpages'                  => array( 'PeleyPêro' ),
+       'Ancientpages'              => array( 'PeleyVerêni' ),
        'Badtitle'                  => array( 'SernameyoXırab' ),
        'Blankpage'                 => array( 'PelaVeng', 'VengPela' ),
        'Block'                     => array( 'Bloke', 'BlokeIP', 'BlokeKarber' ),
-       'Blockme'                   => array( 'BlokeMe' ),
+       'Blockme'                   => array( 'BlokêMe' ),
        'Booksources'               => array( 'KıtabeÇıme' ),
-       'BrokenRedirects'           => array( 'HetenayışoXırab' ),
+       'BrokenRedirects'           => array( 'HetênayışoXırab' ),
        'Categories'                => array( 'Kategoriye' ),
-       'ChangeEmail'               => array( 'EpostaBıvurne' ),
-       'ChangePassword'            => array( 'ParolaBıvurne', 'ParolaResetke' ),
+       'ChangeEmail'               => array( 'EpostaBıvurnê' ),
+       'ChangePassword'            => array( 'ParolaBıvurnê', 'ParolaResetke' ),
        'ComparePages'              => array( 'PelaPêverke' ),
        'Confirmemail'              => array( 'EpostayAraştke' ),
        'Contributions'             => array( 'İştiraxi' ),
@@ -103,23 +112,23 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PeleyêkeStaryayê' ),
        'Protectedtitles'           => array( 'SernameyêkeStaryayê' ),
        'Randompage'                => array( 'Raştamê', 'PelayakeRaştamê' ),
-       'Randomredirect'            => array( 'HetenayışoRaştmae' ),
+       'Randomredirect'            => array( 'HetenayışoRaştame' ),
        'Recentchanges'             => array( 'VurnayışêPeyêni' ),
        'Recentchangeslinked'       => array( 'GreyêVurnayışêPeyêni' ),
        'Revisiondelete'            => array( 'RevizyoniBesterne' ),
-       'RevisionMove'              => array( 'RevizyoniAhulne' ),
+       'RevisionMove'              => array( 'RewizyoniAhulne' ),
        'Search'                    => array( 'Cıgeyre' ),
        'Shortpages'                => array( 'PeleyêKılmi' ),
        'Specialpages'              => array( 'PeleyXısusi' ),
        'Statistics'                => array( 'İstatistiki' ),
        'Tags'                      => array( 'Etiketi' ),
-       'Unblock'                   => array( 'Bloqihewad' ),
+       'Unblock'                   => array( 'Bloqiwedarne' ),
        'Uncategorizedcategories'   => array( 'KategoriyêkeKategorinêbiyê' ),
        'Uncategorizedimages'       => array( 'DosyeyêkeKategorinêbiyê' ),
        'Uncategorizedpages'        => array( 'PeleyêkeKategorinêbiyê' ),
        'Uncategorizedtemplates'    => array( 'ŞablonêkeKategorinêbiyê' ),
        'Undelete'                  => array( 'Peyserbiya' ),
-       'Unlockdb'                  => array( 'DBKlitiake' ),
+       'Unlockdb'                  => array( 'DBSırmiake' ),
        'Unusedcategories'          => array( 'KategoriyêkeNêkaryayê' ),
        'Unusedimages'              => array( 'DosyeyêkeNêkaryayê' ),
        'Unusedtemplates'           => array( 'ŞablonêkeNêkaryayê' ),
@@ -133,140 +142,167 @@ $specialPageAliases = array(
        'Wantedcategories'          => array( 'KategoriyêkeWazênê' ),
        'Wantedfiles'               => array( 'DosyeyêkeWazênê' ),
        'Wantedpages'               => array( 'PeleyêkeWazênê' ),
-       'Wantedtemplates'           => array( 'ŞablonyêkeWazênê' ),
+       'Wantedtemplates'           => array( 'ŞablonêkeWazênê' ),
        'Watchlist'                 => array( 'Listeyseyri' ),
        'Whatlinkshere'             => array( 'PelarêGre' ),
        'Withoutinterwiki'          => array( 'Bêİnterwiki' ),
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#HETENAYIŞ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ESTENÇINO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERİÇINO__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ESTENZARURET__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ESTEN__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TİMARKERDIŞÇINO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SERNAMEÇINO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MEWCUDAŞMİ', 'MEWCUDAŞMİ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MEWCUDAŞMİ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMEYAŞMDAMEWCUD', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'MEWCUDAŞMACI', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MEWCUDAŞMİKILMKERDIŞ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'MEWCUDROCE', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'MEWCUDROCE2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMEYÊMEWCUDROCE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'MEWCUDSERRE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'MEWCUDDEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'MEWCUDSEHAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'WAREYAŞMİ', 'WAREYAŞMİ2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'WAREYAŞMİ1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NAMEYÊWAREYAŞMİ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NAMEYWAREDÊAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'WAREYAŞMİKILMKERDIŞ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'WAREYROCE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'WAREYROCE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NAMEYÊWAREYROCE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'WAREYSERRE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'WAREYDEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'WAREYSEHAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'AMARİYAPELAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AMARİYAWESİQAN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AMARİYADOSYAYAN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AMARİYAKARBERAN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AMARİYAAKTİVKARBERAN', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AMARİYAVURNAYIŞAN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AMARİYAMOCNAYIŞAN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NAMEYPELA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMEYPELAA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'CANAME', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'CANAMEE', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'AMARİYACANAME', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'CAYÊWERÊNAYIŞİ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'CAYÊWERÊNAYIŞAN', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'CAYÊMESEL', 'CAYÊWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'CAYÊMESELAN', 'CAYÊWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NAMEYPELAPÊRO', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NAMEYPELAPÊRON', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NAMEYBINPELA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NAMEYBINPELAA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NAMEYSERPELA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NAMEYSERPELAA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NAMEYPELAWERÊNAYIŞ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NAMEYPELAWERÊNAYIŞAN', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NAMEYPELAMESEL', 'NAMEYPELAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NAMEYPELAMESELER', 'NAMEYPELAQESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSC', 'MSG:' ),
-       'subst'                   => array( '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ),
-       'safesubst'               => array( '0', 'EMELEYATEBERDE', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'MSJNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'resmowerdı', 'werdı', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'resmowerdı=$1', 'erwdı=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'raşt', 'right' ),
-       'img_left'                => array( '1', 'çep', 'left' ),
-       'img_none'                => array( '1', 'çıno', 'none' ),
-       'img_width'               => array( '1', '$1pik', '$1piksel', '$1px' ),
-       'img_center'              => array( '1', 'werte', 'miyan', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'çerçeweyın', 'çerçeweya', 'çerçewe', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'beçerçewe', 'frameless' ),
-       'img_page'                => array( '1', 'pela=$1', 'pela_$1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'sinor', 'border' ),
-       'img_top'                 => array( '1', 'gedug', 'top' ),
-       'img_middle'              => array( '1', 'merkez', 'middle' ),
-       'img_link'                => array( '1', 'gre=$1', 'link=$1' ),
-       'int'                     => array( '0', 'İNT:', 'INT:' ),
-       'scriptpath'              => array( '0', 'RAYASCRIPTİ', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'TERZÊTEWRİ', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMER:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'CİNSİYET:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SERNAMEVURNAYIŞÇINO__', '__SVÇ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ZERREVURNAYIŞÇINO__', '__ZVÇ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'MEVCUDHEFTE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'MEVCUDWAREYHEFTİ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'WAREYHEFTİ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'WAREYROCAHEFTİ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NIMREYREVİZYONİ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ROCAREVİZYONİ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ROCAREVİZYON1', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'AŞMAREVİZYONİ', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'AŞMAREVİZYONİ1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'SERRAREVİZYONİ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'MELUMATÊREVİZYONÊDEMİ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVİZYONKARBER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ZAFEN:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'GREPÊRO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'GREYOPÊRON:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'GREYÊKANONİK:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'GREYOKANONİK:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'KHİLK:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BHİLK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KH:', 'LC:' ),
-       'uc'                      => array( '0', 'BH:', 'UC:' ),
-       'raw'                     => array( '0', 'XAM:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SERNAMEİBIMOCNE', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__GREYÊSERNAMEDÊNEWİ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GREYÊSERNAMEDÊNEWİÇINO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'MEWCUDVERSİYON', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'MEWCUDWAREYSEHAT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MALUMATÊWAREYSEHAT', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#ZIWAN', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ZIWANÊESTİN', 'ZIWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PELEYÊKECADÊNAMİDEYÊ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'AMARİYAXİZMETKARAN', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'BABETNAYIŞ', 'FORMATNUM' ),
-       'special'                 => array( '0', 'xısusi', 'special' ),
-       'speciale'                => array( '0', 'xısusiye', 'speciale' ),
-       'defaultsort'             => array( '1', 'RATNAYIŞOHESBNAYIŞ', 'QESAYARATNAYIŞOHESBNAYIŞ', 'KATEGORİYARATNAYIŞOHESBNAYIŞ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'RAYADOSYA:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'tag' ),
-       'hiddencat'               => array( '1', '__KATEGORİYANIMITİ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PELEYÊKEKATEGORİDEYÊ', 'KATDÊPELEY', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'EBATÊPELA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__SERSIQ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__SERSIQÇINYO__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'GRUBDEAMARE', 'AMARİYAGRUBER', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATİKHETENAYIŞ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SEWİYEYÊSTARE', 'PROTECTIONLEVEL' ),
-       'url_wiki'                => array( '0', 'WİKİ', 'WIKI' ),
+       'redirect'                  => array( '0', '#HETENAYIŞ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ESTENÇINO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERİÇINO__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ESTENZARURET__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ESTEN__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TİMARKERDIŞÇINO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SERNAMEÇINO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'AŞMİYANEWKİ', 'MEWCUDAŞMİ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'AŞMİYANEWKİ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMEYAŞMDANEWKİ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AŞMACIYANEWKİ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AŞMİYANEWKİKILMKERDIŞ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ROCENEWKİ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ROCENEWKİ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMEYÊROCENEWKİ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SERRENEWKİ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DEMENEWKİ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'SEHATNEWKİ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'WAREYAŞMİ', 'WAREYAŞMİ2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'WAREYAŞMİ1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NAMEYÊWAREYAŞMİ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NAMEYWAREDÊAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'WAREYAŞMİKILMKERDIŞ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'WAREYROCE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'WAREYROCE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NAMEYÊWAREYROCE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'WAREYSERRE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'WAREYDEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'WAREYSEHAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'AMARİYAPELAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AMARİYAWESİQAN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AMARİYADOSYAYAN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AMARİYAKARBERAN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AMARİYAAKTİVKARBERAN', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AMARİYAVURNAYIŞAN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AMARİYAMOCNAYIŞAN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NAMEYPELA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMEYPELAA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'CANAME', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'CANAMEE', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'AMARİYACANAME', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'CAYÊWERÊNAYIŞİ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'CAYÊWERÊNAYIŞAN', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'CAYÊMESEL', 'CAYÊWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'CAYÊMESELAN', 'CAYÊWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NAMEYPELAPÊRO', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NAMEYPELAPÊRON', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NAMEYBINPELA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NAMEYBINPELAA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NAMEYSERPELA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NAMEYSERPELAA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NAMEYPELAWERÊNAYIŞ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NAMEYPELAWERÊNAYIŞAN', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NAMEYPELAMESEL', 'NAMEYPELAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NAMEYPELAMESELER', 'NAMEYPELAQESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSC', 'MSG:' ),
+       'subst'                     => array( '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'EMELEYATEBERDE', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'MSJNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'resmoqıckek', 'qıckek', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'resmoqıckek=$1', 'qıckek=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'raşt', 'right' ),
+       'img_left'                  => array( '1', 'çep', 'left' ),
+       'img_none'                  => array( '1', 'çıniyo', 'none' ),
+       'img_width'                 => array( '1', '$1pik', '$1piksel', '$1px' ),
+       'img_center'                => array( '1', 'werte', 'miyan', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'çerçeweya', 'çerçeweniyo', 'çerçewe', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bêçerçewe', 'frameless' ),
+       'img_page'                  => array( '1', 'pela=$1', 'pela_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'disleg', 'disleg=$1', 'disleg_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'sinor', 'border' ),
+       'img_baseline'              => array( '1', 'Sinorêerdi', 'baseline' ),
+       'img_sub'                   => array( '1', 'bın', 'sub' ),
+       'img_super'                 => array( '1', 'corên', 'cor', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'gedug', 'top' ),
+       'img_text_top'              => array( '1', 'gedug-metin', 'text-top' ),
+       'img_middle'                => array( '1', 'merkez', 'middle' ),
+       'img_bottom'                => array( '1', 'erd', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'erd-metin', 'text-bottom' ),
+       'img_link'                  => array( '1', 'gre=$1', 'link=$1' ),
+       'int'                       => array( '0', 'İNT:', 'INT:' ),
+       'sitename'                  => array( '1', 'NAMEYSİTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'CN', 'NS:' ),
+       'nse'                       => array( '0', 'CNV', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKALGRE', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALGREV', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'SOPAWESİQAN', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'NIMREYPELA', 'PAGEID' ),
+       'server'                    => array( '0', 'ARDEN', 'SERVER' ),
+       'servername'                => array( '0', 'NAMEYARDEN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'RAYASCRIPTİ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'TERZÊTEWRİ', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMER:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'CİNSİYET:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SERNAMEVURNAYIŞÇINO__', '__SVÇ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ZERREVURNAYIŞÇINO__', '__ZVÇ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'MEVCUDHEFTE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'MEVCUDWAREYHEFTİ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'WAREYHEFTİ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'WAREYROCAHEFTİ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NIMREYREVİZYONİ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ROCAREVİZYONİ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ROCAREVİZYON1', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'AŞMAREVİZYONİ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'AŞMAREVİZYONİ1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'SERRAREVİZYONİ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MELUMATÊREVİZYONÊDEMİ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVİZYONKARBER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ZAFEN:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'GREPÊRO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'GREYOPÊRON:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'GREYÊKANONİK:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'GREYOKANONİK:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'KHİLK:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BHİLK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KH:', 'LC:' ),
+       'uc'                        => array( '0', 'BH:', 'UC:' ),
+       'raw'                       => array( '0', 'XAM:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SERNAMİBIMOCNE', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__GREYÊSERNAMEDÊNEWİ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GREYÊSERNAMEDÊNEWİÇINO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSİYONÊNEWKİ', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'WAREYSEHATÊNEWKİ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MALUMATÊWAREYSEHAT', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'HETANIŞANKERDIŞ', 'HETNIŞAN', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ZIWAN', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ZIWANÊESTİN', 'ZIWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PELEYÊKECADÊNAMİDEYÊ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'AMARİYAXİZMETKARAN', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'BABETNAYIŞ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ÇEPİPIRKE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RAŞTİPIRKE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'xısusi', 'special' ),
+       'speciale'                  => array( '0', 'xısusiye', 'speciale' ),
+       'defaultsort'               => array( '1', 'RATNAYIŞOHESBNAYIŞ', 'SIRMEYRATNAYIŞOHESBNAYIŞ', 'KATEGORİYARATNAYIŞOHESBNAYIŞ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'RAYADOSYA:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'tag' ),
+       'hiddencat'                 => array( '1', '__KATEGORİYANIMITİ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PELEYÊKEKATEGORİDEYÊ', 'KATDÊPELEY', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'EBATÊPELA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__SERSIQ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__SERSIQÇINYO__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'GRUBDEAMARE', 'AMARİYAGRUBER', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATİKHETENAYIŞ__', '__STATICHETENAYIŞ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SEWİYEYÊSTARE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'demêformati', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'RAY', 'PATH' ),
+       'url_wiki'                  => array( '0', 'WİKİ', 'WIKI' ),
+       'url_query'                 => array( '0', 'PERSİYE', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'xırabinçıniya', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'cewabçıniyo', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'pêro', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'peley', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'dosyey', 'files' ),
 );
 
 $messages = array(
@@ -306,7 +342,7 @@ $messages = array(
 'tog-uselivepreview' => 'Verqayto cınde bıxebetne (JavaScript lazımo) (hewna cerrebnayış dero)',
 'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
 'tog-watchlisthideown' => 'Vurnayışanê mı lista mına seyrkerdışi de bınımne',
-'tog-watchlisthidebots' => 'Vurnayışanê boti lista mına seyrkerdışi de bınımne',
+'tog-watchlisthidebots' => 'Vurnayışanê bota liste da seyrkerdışi de bınımne',
 'tog-watchlisthideminor' => 'Vurnayışanê qıckekan lista mına seyrkerdışi de bınımne',
 'tog-watchlisthideliu' => 'Lista seyrkerdışi ra vurnayışanê karberanê cıkewteyan bınımne',
 'tog-watchlisthideanons' => 'Lista seyrkerdışi ra vurnayışanê karberanê anoniman bınımne',
@@ -329,44 +365,44 @@ $messages = array(
 'editfont-serif' => 'Tipê nustey Serifi',
 
 # Dates
-'sunday' => 'Kırê',
-'monday' => 'Dışeme',
-'tuesday' => 'Sêşeme',
-'wednesday' => 'Çarşeme',
+'sunday' => 'Bazar',
+'monday' => 'Berarek',
+'tuesday' => 'Telete',
+'wednesday' => 'Çeharşeme',
 'thursday' => 'Pancşeme',
 'friday' => 'Êne',
-'saturday' => 'Şeme',
-'sun' => 'Krê',
-'mon' => 'Dşm',
-'tue' => 'Sşm',
+'saturday' => 'Bahdê êni',
+'sun' => 'Baz',
+'mon' => 'Ber',
+'tue' => 'Tlt',
 'wed' => 'Çrş',
-'thu' => 'Pşm',
+'thu' => 'P',
 'fri' => 'Êne',
-'sat' => 'Şem',
+'sat' => 'Bah',
 'january' => 'Çele',
-'february' => 'Şıbate',
-'march' => 'Adar',
-'april' => 'Nisane',
-'may_long' => 'Gulane',
+'february' => 'Zemherı',
+'march' => 'Mert',
+'april' => 'Lisane',
+'may_long' => 'Gulan',
 'june' => 'Heziran',
-'july' => 'Temuz',
+'july' => 'Paliyan',
 'august' => 'Tebaxe',
-'september' => 'Keşkelun',
-'october' => 'Tışrino Verên',
-'november' => 'Tışrino Peyên',
-'december' => 'Kanun',
-'january-gen' => 'Çeley',
-'february-gen' => 'Şıbate',
-'march-gen' => 'Adari',
-'april-gen' => 'Nisane',
-'may-gen' => 'Gulane',
-'june-gen' => 'Hezirani',
-'july-gen' => 'Temuzi',
+'september' => 'Kergan',
+'october' => 'Cıtan',
+'november' => 'Kelverdan',
+'december' => 'Vewran',
+'january-gen' => 'Çele',
+'february-gen' => 'Zemherı',
+'march-gen' => 'Mert',
+'april-gen' => 'Lisan',
+'may-gen' => 'Gulan',
+'june-gen' => 'Heziran',
+'july-gen' => 'Paliyan',
 'august-gen' => 'Tebaxe',
-'september-gen' => 'Keşkeluni',
-'october-gen' => 'Tışrinê Verêni',
-'november-gen' => 'Tışrinê Peyêni',
-'december-gen' => 'Kanuni',
+'september-gen' => 'Kergan',
+'october-gen' => 'Cıtan',
+'november-gen' => 'Kelverdan',
+'december-gen' => 'Vewran',
 'jan' => 'Çel',
 'feb' => 'Şbt',
 'mar' => 'Adr',
@@ -381,10 +417,10 @@ $messages = array(
 'dec' => 'Kan',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriy}}',
+'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
 'category_header' => 'Pelê ke kategoriya "$1" derê',
 'subcategories' => 'Kategoriyê bınêni',
-'category-media-header' => 'Medyawa ke kategoriya "$1" dera',
+'category-media-header' => 'Dosyeyê ke kategoriya da "$1" deyê',
 'category-empty' => "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
 'hidden-categories' => '{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}}',
 'hidden-category-category' => 'Kategoriyê nımıtey',
@@ -392,11 +428,12 @@ $messages = array(
 'category-subcat-count-limited' => 'Na kategoriye de {{PLURAL:$1|ena kategoriya bınêne esta|enê $1 kategoriyê bınêni estê}}.',
 'category-article-count' => '{{PLURAL:$2|Na kategoriye de teyna ena pele esta.|Na kategoriye de $2 ra pêro pia, {{PLURAL:$1|ena pele esta|enê $1 peli estê.}}, be $2 ra pêro pia}}',
 'category-article-count-limited' => '{{PLURAL:$1|Pela cêrêne|$1 Pelê cêrêni}} na kategoriye derê.',
-'category-file-count' => '{{PLURAL:$2|Na kategoriye de tenya dosya cêrêne esta.|Teberê $2 ra pêro, {{PLURAL:$1|dosya cêrêne|$1 dosyê cêrêni}} na kategoriye derê.}}',
+'category-file-count' => '<noinclude>{{PLURAL:$2|Na kategoriye tenya dosyayanê cêrênan muhtewa kena.}}</noinclude>
+*Na kategoriye de $2 dosyayan ra {{PLURAL:$1|yew dosya tenêka esta| $1 dosyey asenê}}.',
 'category-file-count-limited' => '{{PLURAL:$1|Dosya cêrêne|$1 Dosyê cêrêni}} na kategoriye derê.',
-'listingcontinuesabbrev' => 'dewam',
+'listingcontinuesabbrev' => '(dewam)',
 'index-category' => 'Pelê endeksıni',
-'noindex-category' => 'Pelê ke endeksıni niyê',
+'noindex-category' => 'Perê ke ratnena cı çinıya',
 'broken-file-category' => 'Peleye ke linkê Dosyayandê xelata muhtewa kenê',
 'categoryviewer-pagedlinks' => '($1) ($2)',
 
@@ -404,13 +441,13 @@ $messages = array(
 
 'about' => 'Heqa',
 'article' => 'Wesiqe',
-'newwindow' => '(Teqa da newi de abêno)',
-'cancel' => 'Bıterkne',
+'newwindow' => '(zerreyê teqeyê newey de beno a)',
+'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Vêşêri...',
 'mypage' => 'Pela mı',
-'mytalk' => 'Werênayışi',
+'mytalk' => 'Verênayışê mı',
 'anontalk' => 'Pela werênayışê nê IPy',
-'navigation' => 'Pusula',
+'navigation' => 'Geyrayış',
 'and' => '&#32;u',
 
 # Cologne Blue skin
@@ -427,15 +464,15 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
 'vector-action-delete' => 'Besterne',
-'vector-action-move' => 'Ahûln',
+'vector-action-move' => 'Wegirê',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
-'vector-simplesearch-preference' => 'Tewsiyanê cıgeyrayışê raverberdan ake (Tenya vector skin de)',
+'vector-simplesearch-preference' => 'Çuweya cı geyreyış de rehater aktiv ke (Tenya vector skin de)',
 'vector-view-create' => 'Vıraze',
 'vector-view-edit' => 'Bıvurne',
-'vector-view-history' => 'Tarixi bımocne',
-'vector-view-view' => 'Bıwanên',
+'vector-view-history' => 'Vurnayışê verêni',
+'vector-view-view' => 'Bıwanê',
 'vector-view-viewsource' => 'Çımey bıvêne',
 'actions' => 'Kerdeni',
 'namespaces' => 'Cayê namey',
@@ -449,8 +486,8 @@ $messages = array(
 'searchbutton' => 'Cı geyre',
 'go' => 'Şo',
 'searcharticle' => 'Şo',
-'history' => 'Ravêrdena pela',
-'history_short' => 'Ravêrden',
+'history' => 'Verora perer',
+'history_short' => 'Vurnayışê verêni',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışo çapkerden',
 'permalink' => 'Gıreyo daimi',
@@ -461,7 +498,7 @@ $messages = array(
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
 'delete' => 'Besterne',
-'deletethispage' => 'Ena pele 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',
 'protect' => 'Bıpawe',
@@ -469,11 +506,11 @@ $messages = array(
 'protectthispage' => 'Ena pele bıpawe',
 'unprotect' => 'Starkerdışi bıvurne',
 'unprotectthispage' => 'Starkerdışe ena peler bıvurne',
-'newpage' => 'Pela newi',
+'newpage' => 'Pera newiye',
 'talkpage' => 'Ena pele sero werêne',
 'talkpagelinktext' => 'Mesac',
 'specialpage' => 'Pela xısusiye',
-'personaltools' => 'Hacetê şexsi',
+'personaltools' => 'Haletê şexsi',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
 'talk' => 'Werênayış',
@@ -488,13 +525,13 @@ $messages = array(
 'categorypage' => 'Pela kategoriye bıvêne',
 'viewtalkpage' => 'Werênayışi bıvêne',
 'otherlanguages' => 'Zıwananê binan de',
-'redirectedfrom' => '($1 ra neqıl bi)',
+'redirectedfrom' => '(Pele da $1 ra heteneyê)',
 'redirectpagesub' => 'Pela berdışi',
 'lastmodifiedat' => 'Ena pele tewr peyên roca $2, $1 de biya rocaniye.',
 'viewcount' => 'Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.',
 'protectedpage' => 'Pela pawıtiye',
-'jumpto' => 'Şo be:',
-'jumptonavigation' => 'pusula',
+'jumpto' => 'Şo:',
+'jumptonavigation' => 'karfiyê',
 'jumptosearch' => 'cı geyre',
 'view-pool-error' => 'Qaytê qısuri mekerên, serverê ma enıka zêde bar gırewto xo ser.
 Hedê xo ra zêde karberi kenê ke seyrê na pele bıkerê.
@@ -506,7 +543,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 {{SITENAME}} de',
+'aboutsite' => 'Heqa de {{SITENAME}}',
 'aboutpage' => 'Project:Heqdê cı',
 'copyright' => 'Zerrek bınê $1 dero.',
 'copyrightpage' => '{{ns:project}}:Heqa telifi',
@@ -514,15 +551,15 @@ $1',
 'currentevents-url' => 'Project:Veng u vac',
 'disclaimers' => 'Redê mesuliyeti',
 'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
-'edithelp' => 'Seni vurneyêno?',
-'edithelppage' => 'Help:Pela seni vurniyêna',
+'edithelp' => 'Peştdariya vurnayışi',
+'edithelppage' => 'Help:Vurnayış',
 'helppage' => 'Help:Estêni',
-'mainpage' => 'Pela Seri',
+'mainpage' => 'Pera Seri',
 'mainpage-description' => 'Pela Seri',
 'policy-url' => 'Project:Terzê hereketi',
-'portal' => 'Portalê cemaeti',
-'portal-url' => 'Project:Portalê cemaeti',
-'privacy' => 'Madeyê dızdine',
+'portal' => 'Portalê şêlıgi',
+'portal-url' => 'Project:Portalê şêlıgi',
+'privacy' => 'Xısusiyeta nımıtin',
 'privacypage' => 'Project:Xısusiyetê nımtışi',
 
 'badaccess' => 'Xeta mısadey',
@@ -538,8 +575,8 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => '"$1" ra ard',
-'youhavenewmessages' => 'To rê estê $1 ($2).',
-'newmessageslink' => 'mesacê newey',
+'youhavenewmessages' => 'To rê $1 esto ($2).',
+'newmessageslink' => 'mesacê şıma',
 'newmessagesdifflink' => 'vurnayışo peyên',
 'youhavenewmessagesfromusers' => 'Zey $1 ra {{PLURAL:$3|zewbi karber|$3 karberi}} ($2) esto.',
 'youhavenewmessagesmanyusers' => '$1 ra tay karberi ($2) dı estê.',
@@ -549,10 +586,10 @@ $1',
 'editsection' => 'bıvurne',
 'editsection-brackets' => '[$1]',
 'editold' => 'bıvurne',
-'viewsourceold' => 'çımey bıvêne',
+'viewsourceold' => 'çımey cı bıvinê',
 'editlink' => 'bıvurne',
 'viewsourcelink' => 'çımey bıvêne',
-'editsectionhint' => 'Qısımi bıvurne: $1',
+'editsectionhint' => 'Leteyo ke bıvuriyo: $1',
 'toc' => 'Sernameyê meselan',
 'showtoc' => 'bımocne',
 'hidetoc' => 'bınımne',
@@ -570,16 +607,16 @@ $1',
 'page-atom-feed' => '"$1" Cıresnayışê atomi',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
-'red-link-title' => '$1 (pele çıniya)',
+'red-link-title' => '$1 (çınîya)',
 'sort-descending' => 'Ratnayışê qemeyayışi',
 'sort-ascending' => 'Ratnayışê Zeydnayışi',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Pele',
-'nstab-user' => 'Pela Karberi',
+'nstab-main' => 'Per',
+'nstab-user' => 'Pera Karberi',
 'nstab-media' => 'Pela Medya',
 'nstab-special' => 'Pela xısusiye',
-'nstab-project' => 'Pela Procey',
+'nstab-project' => 'Pera proci',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesac',
 'nstab-template' => 'Şablon',
@@ -619,7 +656,7 @@ Ena belki seba yew vurnayışo kıhan ya zi tarixê gırê yew pele esteriya.
 
 Eke wına niyo, belki ''software''i de yew xeta esta.
 Kerem kerê, naye be namey ''URL''i yew [[Special:ListUsers/sysop|karber]]i ra vacê.",
-'missingarticle-rev' => '(tekrar diyayış#: $1)',
+'missingarticle-rev' => '(rewizyon#: $1)',
 'missingarticle-diff' => '(Ferq: $1, $2)',
 'readonly_lag' => 'Daegeh (database) otomatikmen kılit bi, sureo ke  daegehê bınêni resay daegehê serêni.',
 'internalerror' => 'Xeta zerreki',
@@ -657,10 +694,10 @@ Perse: $2',
 'protectedpagetext' => 'No pel qey nêvuriyayiş hao (nao) pawyeno.',
 'viewsourcetext' => 'To şikinay çımey na pele bıvêne u kopya kerê:',
 'viewyourtext' => "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
-'protectedinterface' => 'No pel qey software nuştey hezır keno u ın semed ra şuxulyayişê no pel qedexe biyo.',
-'editinginterface' => "'''Teme:''' Şıma hao jû pela ke seba nuşteyê meqalanê cayanê bırnayeyan dana, vurnenê.
+'protectedinterface' => 'Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.',
+'editinginterface' => "'''İqaz:''' Şıma hao jû pela ke seba nuşteyê meqalanê cayanê bırnayeyan dana, vurnenê.
 Vurnayışê na pele karberanê binan rê serpela karberi kena ke bımocno.
-Seba çarnayışi, yardımê [//translatewiki.net/wiki/Main_Page?setlang=kiu translatewiki.net]i ra procêdoşkerdışi rê diqet kerên.",
+Seba çarnayışi, yardımê [//translatewiki.net/wiki/Main_Page?setlang=diq translatewiki.net]i ra procêdoşkerdışi rê diqet kerên.",
 'sqlhidden' => '(SQL pers kerdışê nımıte)',
 'cascadeprotected' => 'No pel de vurnayiş qedexe biyo, çunke şıma tuşa "kademeyın" aqtif kerdo u no {{PLURAL:$1|pelo|pelo}} pawıteyo de xebıtyeno:
 $2',
@@ -686,7 +723,7 @@ Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 # Login and logout pages
 'logouttext' => "'''Şıma hesab qefelna.'''
 
-Nıka kamiyê xo eşkera mekere u siteyê {{SITENAME}} ra eşkeni devam bıkeri, ya zi [[Special:UserLogin|newe ra hesabê xo akere]] (wazeni pey nameyê xo, wazeni pey yewna name).
+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! ==
 
@@ -700,19 +737,19 @@ Hesabê şıma biyo a.
 'yourdomainname' => 'Nameyê şıma yo meydani',
 'password-change-forbidden' => 'Şıma na wiki de nêşenê parola bıvurnê.',
 'externaldberror' => 'Ya database de xeta esta ya zi heqê şıma çino şıma no hesab bıvurni.',
-'login' => 'Cı kewe',
+'login' => 'Ronıştış akerê',
 'nav-login-createaccount' => 'Dekew de / hesab vıraze',
-'loginprompt' => "Cıkewtena {{SITENAME}}i rê gani ''cookies'' akerdey bê.",
+'loginprompt' => "{{SITENAME}} dı ronıştış akerdışi rê ''çerezan'' aktiv kerdış icab keno.",
 'userlogin' => 'Cı kewe / hesab vıraze',
-'userloginnocreate' => 'Cı kewe',
+'userloginnocreate' => 'Ronıştış akerê',
 'logout' => 'Veciyayış',
-'userlogout' => 'Bıveciyên',
+'userlogout' => 'Bıveciye',
 'notloggedin' => 'Hesab akerde niyo',
 'nologin' => "Hesabê şıma çıniyo? '''$1'''.",
 'nologinlink' => 'Yew hesab ake',
-'createaccount' => 'hesab vıraze',
+'createaccount' => 'Hesab vıraze',
 'gotaccount' => "Hesabê şıma esto? '''$1'''.",
-'gotaccountlink' => 'Cı kewe',
+'gotaccountlink' => 'Ronıştış akerê',
 'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
 'createaccountmail' => 'mı rê e-mail sera parola bırışe',
 'createaccountreason' => 'Sebeb:',
@@ -746,7 +783,7 @@ Nuştışê xo qonrol kerên, ya zi [[Special:UserLogin/signup|yew hesabo newe a
 'password-name-match' => 'Parola u nameyê şıma gani zeypê (seypê) nêbo.',
 'password-login-forbidden' => 'No namey karberi u parola karkerdışê cı  kerdo xırab.',
 'mailmypassword' => 'E-mail sera parola newiye bırışe',
-'passwordremindertitle' => 'Qey na keyepel {{SITENAME}} yew parolayo emanet',
+'passwordremindertitle' => "Qandê {{SITENAME}}'i idareten parolaya newiye",
 'passwordremindertext' => 'Yew ten (muhtemelen, şıma na aderesê IP ra $1 ) {{SITENAME}} ($4) newe yew parola waşt. "$2" no name ri emanet yew parola vıraziya "$3". Eke na şıma waşta, hesabê xo akere u newe yew parola bıvıraze. Muddetê parolayê şıma yo emanet {{PLURAL:$5|1 roc|$5 roci}}.
 
 Eke vurnayişê parolayi, şıma nêwaşt ya zi parolayê şıma ameyo şıma vir u şıma hini qayil nşye parolayê xo bıvurni; no mesaj peygoş kere u bıewne gureyê xo.',
@@ -770,7 +807,7 @@ Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
 'cannotchangeemail' => 'E-postay hesabi ena wiki sera nêvurneyêno.',
 'emaildisabled' => 'Na site ra e-posta nêrışêno.',
 'accountcreated' => 'Hesab vıraciya',
-'accountcreatedtext' => 'Qey no $1 karker newe yew hesab vıraziya.',
+'accountcreatedtext' => 'Qandê $1 hesabê karberi vıraziyayo.',
 'createaccount-title' => 'Qey {{SITENAME}} newe yew heab vıraştış',
 'createaccount-text' => 'Kesê, be e-posteyê şıma ra {{SITENAME}} ($4) de, ebe nameyê "$2" u parola "$3" ra yew hesab vıraşto.
 Şıma gani cı kewê u parola xo nıka bıvurnê.',
@@ -842,36 +879,36 @@ Parola vêrdiye: $2',
 'changeemail-newemail' => 'E-posta adresiyo newe:',
 'changeemail-none' => '(Çıno)',
 'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıterkne',
+'changeemail-cancel' => 'Bıtexelne',
 
 # Edit page toolbar
-'bold_sample' => 'Çapo qalınd',
-'bold_tip' => 'Herfo qalın',
-'italic_sample' => 'Herfo Çewt',
-'italic_tip' => 'Herfo çewt',
+'bold_sample' => 'Metno qalın',
+'bold_tip' => 'Metno qalın',
+'italic_sample' => 'Metno vırandere',
+'italic_tip' => 'Metno vırandere',
 'link_sample' => 'Namey gırê',
-'link_tip' => 'Gırê dahili',
-'extlink_sample' => 'http://www.example.com titleya gire',
-'extlink_tip' => 'Çımeyo tewer (http:// prefix)',
+'link_tip' => 'Gıreyê miyani',
+'extlink_sample' => 'http://www.example.com şınasiya adresi',
+'extlink_tip' => 'Greyê teberi (adresi vero http:// dekerê de)',
 'headline_sample' => 'nuştey xeta seri',
-'headline_tip' => 'Ket 2 headline',
+'headline_tip' => '2.ki sewiye sername',
 'nowiki_sample' => 'Non-format nuşte itiya ra bıerz',
-'nowiki_tip' => 'Formatê wiki iptal bık',
+'nowiki_tip' => 'Format kerdışê wiki bıterknê',
 'image_sample' => 'Misal resim.jpg',
-'image_tip' => 'Dosyaya embedi',
+'image_tip' => 'Dosyaya gumın',
 'media_sample' => 'misal.jpg',
 'media_tip' => 'Gırey dosya',
-'sig_tip' => 'İmzay tı u tarix',
-'hr_tip' => 'Çızgiy Horizantoli (use sparingly)',
+'sig_tip' => 'İmza u wext',
+'hr_tip' => 'Çıxiza dimdayi (hend akar mefiye)',
 
 # Edit pages
-'summary' => 'Xulasa:',
+'summary' => 'Xelese:',
 'subject' => 'Mewzu/serrêze:',
-'minoredit' => 'Vurnayışo werdı',
-'watchthis' => 'Ena pele seyr ke',
-'savearticle' => 'Peler qeyd ke',
+'minoredit' => 'Vurnayışo qıcek',
+'watchthis' => 'Ena perer teqib ke',
+'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
-'showpreview' => 'Verqayti bıvin',
+'showpreview' => 'Verqayti bımocne',
 'showlivepreview' => 'Verqayto cıwın',
 'showdiff' => 'Vurnayışa bıvin',
 'anoneditwarning' => 'Teme!: Şıma bı hesabê xo nıkewtê cı. Hurêndiya namey şıma dı IP-adresa şıma qeyd bena u asena.',
@@ -911,7 +948,7 @@ Not, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nê
 
 IP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.',
 'blockednoreason' => 'sebeb nidaniyo',
-'whitelistedittext' => 'Eka ti wazene binusi ti gani  $1.',
+'whitelistedittext' => 'Qandê vurnayış kerdışi rê $1.',
 'confirmedittext' => 'Eka ti wazene binusi, adresê xo e-maili confirme bike.
 Adresê xo e-maili [[Special:Preferences|user preferences]] de confirme bike.',
 'nosuchsectiontitle' => 'Eno qısım çıniyo',
@@ -933,9 +970,9 @@ Eka tı ita semed yew heta ra amey, ser gocekê '''back'''i klik bıkin.",
 Tı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernamey ena pele cı geyre]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cıkewtışê aidi rê cı geyre],
 ya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele bıvurne]</span>.',
-'noarticletext-nopermission' => 'No pel nıka veng o.
-No sernuşte şıma [[Special:Search/{{PAGENAME}}|pelanê binan de eşkeni bıgeri]]
-ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} itara eşekeni bıgere].</span>',
+'noarticletext-nopermission' => 'Na pela dı eno metin enewke vengo
+Na sernuşteya şıma [[Special:Search/{{PAGENAME}}|pelanê binan de şeni bıgeyri]]
+ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} itara şeni bıgeyri cı].</span> feqet şıma nişeni biizın teba bıkeri.',
 'missing-revision' => 'Rewizyonê name dê pela da #$1 "{{PAGENAME}}" dı çıniyo.
 
 No normal de tarix dê pelanê besterneyan dı ena xırabin asena.
@@ -961,8 +998,8 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 Dosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.",
 'updated' => '(Newenyaya)',
 'note' => "'''Not:'''",
-'previewnote' => "Teme! ena teyna verqeyda.'''
-Vurnayışê tu hama qeyd nıbiyo!",
+'previewnote' => "'''Xo vira mekerê ke ena yew verqayta.'''
+Vurnayışê şıma hona qeyd nêbiyo!",
 'continue-editing' => 'Vurnayışi rê dewam ke',
 'previewconflict' => 'No seyrkerdışê verqaydi serê qutiyê nuşte tezim kerdış de yo, eke şıma qayile vurnayişê maddeyi seyino bıvini, no mocneno şıma.',
 'session_fail_preview' => 'Ma ef kere. Vindibiyayişê tayê datay ra a kerdışê hesabê şıma de ma vurnayişê şıma qayd nêkerd. Newe ra tesel (cereb) bıkere. Eke no qayde zi nêbo, [[Special:UserLogout|hesabê xo bıqefelne]] u newera a kere.',
@@ -977,7 +1014,7 @@ 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' => 'Pela "$1"\'i bıvurnê',
 'creating' => "Pela $1'i vıraze",
-'editingsection' => '$1 vurneno (qısım)',
+'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',
 'explainconflict' => "Wexta ke şıma pel vurneyene yewna ten zi pel vurna.
@@ -1011,7 +1048,7 @@ Loge peniye cor de este:",
 'templatesusedsection' => '{{PLURAL:$1|Template|Templateyan}}  ke na qısım de xebetniyenê:',
 'template-protected' => '(kılit biyo)',
 'template-semiprotected' => '(nimey ena pele kılit biya)',
-'hiddencategories' => 'Ena pela bınê {{PLURAL:$1|1 hidden category|$1 categoriyan nımne}}:',
+'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',
@@ -1022,7 +1059,7 @@ Loge peniye cor de este:",
 'sectioneditnotsupported-text' => 'Destekê vurnayışiê qısımi ena pela vurnayışi de çıniyo.',
 'permissionserrors' => 'Xetayê icazeyi',
 'permissionserrorstext' => 'Qey {{PLURAL:$1|sebebê|sebebê}} cêrini ra icazeyê şıma çin o:',
-'permissionserrorstext-withaction' => 'Desturê to be $2 çıniyo, semedê {{PLURAL:$1|ena sebebi|enê sebeban}} ra:',
+'permissionserrorstext-withaction' => '{{PLURAL:$1|Sebeba|Sebeb da}} cêri ra icazetê $2 çıniyo:',
 'recreate-moveddeleted-warn' => "'''Hişyari: no pel o ke şıma vırazeni vere cû vırazyayo.'''
 
 Diqet bıkeri no vurnayişê şıma re gerek esto:",
@@ -1038,16 +1075,25 @@ Hewna kerde aseno.',
 'edit-already-exists' => 'Pelo newe nêvıraziyeno.
 Pel ca ra esto.',
 'defaultmessagetext' => 'Hesıbyaye metne mesaci',
+'content-failed-to-parse' => 'Qandê madela $3 zereyê $1, $2 sero nêagozyayo',
+'invalid-content-data' => 'Zerrey malumati nêravêrdeyo',
+'content-not-allowed-here' => '"$1" sero per da [[$2]] rê mısade nêdeyêno',
+
+# Content models
+'content-model-wikitext' => 'wikimetin',
+'content-model-text' => 'duz metin',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Hişyari: No pel de fonksiyoni zaf esti.
 
 No $2 daweti ra gani tay bıbo, na hel {{PLURAL:$1|1 dawet esto|$1 dawet esto}}.',
 'expensive-parserfunction-category' => 'Pelê ke tede zaf fonksiyoni esti',
-'post-expand-template-inclusion-warning' => 'Hişyari: zerreyê şabloni zaf gırdo.
+'post-expand-template-inclusion-warning' => 'Tembe: zerreyê şabloni zaf gırdo.
 Taye şabloni zerre pel de nêmociyayeni.',
 'post-expand-template-inclusion-category' => 'Pelê şabloni ke hed ra veceyi',
-'post-expand-template-argument-warning' => 'Hişyari: No pel de tewr tay yew şablono herayi esto.',
+'post-expand-template-argument-warning' => 'Tembe: No per de tewr tay yew şablono herayi esto.Nê vurnayeni ser çebyay',
 'post-expand-template-argument-category' => 'Pelê ke şablonê eyi qebul niye',
 'parser-template-loop-warning' => 'Gıreyê şabloni ca biyo: [[$1]]',
 'parser-template-recursion-depth-warning' => 'limitê şablonê newekerdışi biyo de ($1)',
@@ -1073,24 +1119,24 @@ Taye şabloni zerre pel de nêmociyayeni.',
 Sebebo ke terefê $3 ra diyao ''$2''",
 
 # History pages
-'viewpagelogs' => 'Qe ena pele logan bevinin',
+'viewpagelogs' => 'Heq dê ena perer qeydan bıvinên',
 'nohistory' => 'Verê vurnayışanê na pele çıniyo.',
 'currentrev' => 'Halo nıkayên',
 'currentrev-asof' => 'Revizyonanê peniyan, tarixê $1',
 'revisionasof' => 'Verziyonê roca $1ine',
-'revision-info' => 'Tehsis kerdışê roca $1ine be terefê $2',
+'revision-info' => 'Vıraştena cı karber $2 ra rewizyona $1',
 'previousrevision' => '← Çımraviyarnayışo kıhanêr',
-'nextrevision' => 'Tekrar-diyayışo newêr →',
-'currentrevisionlink' => 'Revizyono veror',
+'nextrevision' => 'Rewizyono newên →',
+'currentrevisionlink' => 'Tewr halê rocaniye bımocne',
 'cur' => 'ferq',
 'next' => 'badên',
-'last' => 'pey',
+'last' => 'peyên',
 'page_first' => 'verên',
 'page_last' => 'peyên',
-'histlegend' => "'''Ferqê weçinayışi:''' Qutiya versiyonan mor ke u  ''enter''i pıploxne ya zi makera cêrêner pılpxne.<br /> 
-Lecant: '''({{int:cur}})''' = ferqê versiyonê peni,
-'''({{int:last}})''' = ferqê versiyonê verni, '''{{int:minoreditletter}}''' = vurnayışo werdı.",
-'history-fieldset-title' => 'Tarixê browsey',
+'histlegend' => "'''Ferqê weçinayışi:''' Qutiya versiyonan mor ke u  ''enter''i bıpıloxne ya zi makera cêrêne bıpıloxne.<br /> 
+Lecant: '''({{int:cur}})''' = ferqê versiyonê peni,
+'''({{int:last}})''' = ferqê versiyonê verêni, '''{{int:minoreditletter}}''' = vurnayışo werdi.",
+'history-fieldset-title' => 'Bewni tarixer',
 'history-show-deleted' => 'Tenya esterıt',
 'histfirst' => 'Verênêr',
 'histlast' => 'Peyênêr',
@@ -1178,8 +1224,8 @@ $1",
 $1",
 'revdel-restore' => 'asayışi bıvurne',
 'revdel-restore-deleted' => 'revizyonê wedariyaye',
-'revdel-restore-visible' => 'revizyonanê esani',
-'pagehist' => 'vere cûyê peli',
+'revdel-restore-visible' => 'revizyonê ke asenê',
+'pagehist' => 'Verora perer',
 'deletedhist' => 'tarixê hewna şiyaye',
 'revdelete-hide-current' => '$2 $1 ney çiye ke wexta diyayene wera (wedar dayiş) xeta da: no reviyon nınımiyeno.',
 'revdelete-show-no-access' => '$2 $1 wexta ke ney tarix de mociyayene xeta da: ne çi "vergırewtı" nişane biyo.
@@ -1191,9 +1237,11 @@ resayişê şıma çino.',
 'revdelete-concurrent-change' => '$2 $1 no çi wexta ke vuriya xeta da: wina aseno ke wexta şıma vurnayiş kerdene o enate de yewna te vurnayiş kerdo.
 rocaneyan kontrol bıkere.',
 'revdelete-only-restricted' => 'Xetawa ke maddeyanê rocanê $2, $1ine nımnena: şıma nêşenê maddeyanê ke terefê idarekeran ra nêdiyaeyan, bê weçinıtışê tercihanê vêniyaoğanê binan ra zi yewi, çap kerê.',
-'revdelete-reason-dropdown' => '*sebebê hewna kerdışi umumi
-** ihlalê telifi
-** malumatê şexsiyo ke munasib niye',
+'revdelete-reason-dropdown' => '*Sebebê besternayış de umumi
+** İhlalê telifi
+** Malumatê şexsiyo ke munasib niye
+** Nameyo xırab
+** Malumatê iftira çekerdışi',
 'revdelete-otherreason' => 'ê bini/sebebê bini',
 'revdelete-reasonotherlist' => 'sebebê bini',
 'revdelete-edit-reasonlist' => 'sebebê hewna kerdışani bıvurn',
@@ -1239,8 +1287,8 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 'difference-title' => 'Pela "$1" ferqê çım ra viyarnayışan',
 'difference-title-multipage' => 'Ferkê pelan dê "$1" u "$2"',
 'difference-multipage' => '(Ferqê pelan)',
-'lineno' => 'Rêza $1i:',
-'compareselectedversions' => 'Verziyonan kontrol bıke',
+'lineno' => 'Xeta $1i:',
+'compareselectedversions' => 'Rewizyonanê weçineyan pêver ke',
 'showhideselectedversions' => 'Revizyonanê weçinıtan bımocne/bınımne',
 'editundo' => 'peyser bia',
 'diff-multi' => '({{PLURAL:$1|Yew revizyono miyanên|$1 revizyonê miyanêni}} terefê {{PLURAL:$2|yew karberi|$2 karberan}} nêmocno)',
@@ -1252,7 +1300,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 
 # Search results
 'searchresults' => 'Neticeyê geyrayışi',
-'searchresults-title' => '"$1" dı neticeyê geyrayışi',
+'searchresults-title' => 'Qandê "$1" neticeyê geyrayışi',
 'searchresulttext' => 'Zerrey {{SITENAME}} de heqa cıgeyrayışi de seba melumat gırewtışi, şenay qaytê [[{{MediaWiki:Helppage}}|{{int:help}}]] ke.',
 'searchsubtitle' => 'Tı semedê \'\'\'[[:$1]]\'\'\' cıgeyra. ([[Special:Prefixindex/$1|pelê ke pêro be "$1" ra dest niyaê pıra]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|pelê ke pêro be "$1"\' ra gırê xo esto]])',
 'searchsubtitleinvalid' => "Tı cıgeyra qe '''$1'''",
@@ -1275,32 +1323,30 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'searchprofile-articles' => 'Pelê tedeestey',
 'searchprofile-project' => 'Pelê yardım u projey',
 'searchprofile-images' => 'Multimedya',
-'searchprofile-everything' => 'Hemi',
-'searchprofile-advanced' => 'Reverşiyoğî',
+'searchprofile-everything' => 'Hemnan',
+'searchprofile-advanced' => 'Raverşiyaye',
 'searchprofile-articles-tooltip' => '$1 de bigêre',
 'searchprofile-project-tooltip' => '$1 de bigêre',
 'searchprofile-images-tooltip' => 'Dosya cı geyr',
 'searchprofile-everything-tooltip' => 'Tedeestey hemine cı geyre (pelanê mınaqeşey zi tey)',
 'searchprofile-advanced-tooltip' => 'qe cayê nimeyî bigêre',
 'search-result-size' => '$1 ({{PLURAL:$2|1 çekuyo|$2 çekuyê}})',
-'search-result-category-size' => '{{PLURAL:$1|1 eza|$1 ezayan}} ({{PLURAL:$2|1 ketegoriyê bini|$2 kategiryanê binan}}, {{PLURAL:$3|1 dosya|$3 dosyayan}})',
+'search-result-category-size' => '{{PLURAL:$1|1 eza|$1 ezayan}} ({{PLURAL:$2|1 kategoriyê bini|$2 kategirayanê binan}}, {{PLURAL:$3|1 dosya|$3 dosyayan}})',
 'search-result-score' => 'Eleqa: $1%',
 'search-redirect' => '(ber $1)',
 'search-section' => '(qısmê $1)',
-'search-suggest' => 'To ney rê vat: $1',
+'search-suggest' => 'To va: $1',
 'search-interwiki-caption' => 'Projey Bıray',
 'search-interwiki-default' => '$1 neticeyan:',
 'search-interwiki-more' => '(hona)',
-'search-mwsuggest-enabled' => 'ebe teklifan',
-'search-mwsuggest-disabled' => 'teklifi çıniyê',
 'search-relatedarticle' => 'Eqreba',
 'mwsuggest-disable' => 'Tewsiyay AJAXi bıgê',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
-'searchrelated' => 'eleqayî',
-'searchall' => 'têdıne',
+'searchrelated' => 'eleqeyın',
+'searchall' => 'pêro',
 'showingresults' => "Heta {{PLURAL:$1|'''1''' netice|'''$1''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
-'showingresultsnum' => "Heta binê {{PLURAL:$3|'''1''' netice|'''$3''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
-'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' of '''$3'''}} qe '''$4'''",
+'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.
 Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mınaqeşe, templatenan, ucb.) ya zi cıgeyro ser namecay ki tı wazeni.",
 'search-nonefound' => 'Zey cıgeyrayış de şıma netice nêvineya',
@@ -1326,13 +1372,13 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 
 # Preferences page
 'preferences' => 'Tercihi',
-'mypreferences' => 'Tercihi',
+'mypreferences' => 'Tercihê mı',
 'prefs-edits' => 'Amarê vurnayışan:',
 'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
 'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
 'changepassword' => 'Parola bıvurne',
 'prefs-skin' => 'Çerme',
-'skin-preview' => 'Verqayt',
+'skin-preview' => 'Verasayış',
 'datedefault' => 'Tercih çıniyo',
 'prefs-beta' => 'Xacetê beta',
 'prefs-datetime' => 'Tarix u wext',
@@ -1382,14 +1428,14 @@ Etıya şıma rê yew kılito raştameo ke şıma şenê bıgurenê/bıxebetnê:
 'timezoneregion-america' => 'Amerika',
 'timezoneregion-antarctica' => 'Antarktika',
 'timezoneregion-arctic' => 'Arktik',
-'timezoneregion-asia' => 'Esya',
+'timezoneregion-asia' => 'Asya',
 'timezoneregion-atlantic' => 'Okyanuso Atlantik',
 'timezoneregion-australia' => 'Evistiralya',
-'timezoneregion-europe' => 'Ewrope',
+'timezoneregion-europe' => 'Ewropa',
 'timezoneregion-indian' => 'Okyanuso Hind',
 'timezoneregion-pacific' => 'Okyanuso Pasifik',
 'allowemail' => 'Karberê bini wa bışê mı rê e-posta bırışê.',
-'prefs-searchoptions' => 'Tercihê cıgeyrayışi',
+'prefs-searchoptions' => 'Cı geyre',
 'prefs-namespaces' => 'Caê namey',
 'defaultns' => 'Eke heni, enê cayanê namey de cı geyre (sae ke):',
 'default' => 'hesıbyaye',
@@ -1522,7 +1568,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-delete' => 'Pele bestere',
 'right-bigdelete' => 'Pelanê be tarixanê dergan bestere',
 'right-deletelogentry' => 'besternayış u mebesternayışa re qeyde definayışê xısusi',
-'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya peyser bia',
+'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya zi peyser bia',
 'right-deletedhistory' => 'Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan',
 'right-deletedtext' => 'Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke',
 'right-browsearchive' => 'Bıgeyre pelanê eserıtiyan',
@@ -1542,7 +1588,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-editusercss' => 'Dosyanê CSSiê karberanê binan sero bıgureye',
 'right-edituserjs' => 'Dosyanê JSiê karberanê binan sero bıgureye',
 'right-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
-'right-markbotedits' => 'Vurnayışanê tekraran zey vurnayışanê boti nışan bıde',
+'right-markbotedits' => 'Vurnayışanê peyd ameyan, vurnayışê boti deye nışan kerê',
 'right-noratelimit' => 'Sinoranê xızi (rate limit) ra tesir nêbi',
 'right-import' => 'Pelan wikiyanê binan ra bia',
 'right-importupload' => 'Pelî dosya bar kerdişî ra import bike',
@@ -1581,7 +1627,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-reupload-shared' => 'dosyayê ki ho embarê medyayî de esto ser ay binusne',
 'action-upload_by_url' => 'Ena dosya yew URL ra bar bike',
 'action-writeapi' => 'ser nuşte API gure bike',
-'action-delete' => 'ena pele biestere',
+'action-delete' => 'ena perer besternê',
 'action-deleterevision' => 'nê çımraviyarnayışi bıestere',
 'action-deletedhistory' => 'tarixê ena pel ki estereyî biya, ey bivine',
 'action-browsearchive' => 'pelanê esterıteyan bıgeyre',
@@ -1591,7 +1637,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-block' => 'enê karberi vurnayışi ra bıreyne',
 'action-protect' => 'seviyeyê pawitişî se ena pele bivurne',
 'action-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
-'action-import' => 'ena pele yewna wîkî ra import bike',
+'action-import' => 'ena pele yewna wiki ra azere de',
 'action-importupload' => 'ena pele yew dosyayê bar kerdişî ra import bike',
 'action-patrol' => 'vurnayîşê karberanê binî nişan bike patrol biye',
 'action-autopatrol' => 'vurnayîşê xoye nişan bike ke belli biyo patrol biye',
@@ -1610,15 +1656,15 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
 'recentchanges-label-newpage' => 'Enê vurnayışi pelaya newi vıraşt',
 'recentchanges-label-minor' => 'Eno vurnayışo do qickek o',
-'recentchanges-label-bot' => 'Eno vurnayış terefê yew boti ra vıraziyo',
+'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
 'recentchanges-label-unpatrolled' => 'Eno edît patrol nibiyo',
-'rcnote' => "Bıni dı {{PLURAL:$1|is '''1''' vurnayış|peni '''$1''' vurnayışan estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetani $5, $4.",
-'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver  (heta '''$1''' mucnayiyo).",
-'rclistfrom' => '$1 ra vurnayışanê neweyan bımoc',
+'rcnote' => "Bıni dı {{PLURAL:$1|'''1''' vurnayış|peyni de '''$1''' vurnayışi estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetana $5, $4.",
+'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
+'rclistfrom' => '$1 ra vurnayışanê neweyan bımocne',
 'rcshowhideminor' => 'Vurnayışanê werdiya $1',
 'rcshowhidebots' => 'Bota $1',
-'rcshowhideliu' => 'karberanê qeydına $1',
-'rcshowhideanons' => 'karberanê anoniman $1',
+'rcshowhideliu' => 'Karberanê qeydına $1',
+'rcshowhideanons' => 'Karberanê anoniman $1',
 'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
 'rcshowhidemine' => 'nuştışanê mı $1',
 'rclinks' => 'Peyni $2 rocan de vurnayışa $1  bımocne <br />$3',
@@ -1626,7 +1672,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'hist' => 'verên',
 'hide' => 'Bınımne',
 'show' => 'Bımocne',
-'minoreditletter' => 'w',
+'minoreditletter' => 'q',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
 'unpatrolledletter' => '!',
@@ -1817,7 +1863,7 @@ Eke problem dewam kerd [[Special:ListUsers/sysop|serkari]] de irtibat kewe.',
 'backend-fail-internal' => 'Depo kerdışê "$1" peyni de ju xırabin vıcyê.',
 'backend-fail-contenttype' => 'Qandê depo kerdışi zerrey babeta dosya da "$1" nêvineya.',
 'backend-fail-batchsize' => 'Depo kerdışê  dosya da $1 {{PLURAL:$1|operasyon de|operasyonê}} cı groto; sinorê  {{PLURAL:$2|operasyoni|operasyona}} $2.',
-'backend-fail-usable' => 'Dosyay $1 nênusneyê çıkı ratnayışê cı racnayeyo yana kewmiyo.',
+'backend-fail-usable' => 'Dosyay $1 nênusneyê çıkı ratnayışê cı racnayeyo yana karkerdışe cı kemiyo.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Depo kerdış de "$1" qande malumatê gurweynayışi cıya irtibat nêkewiya.',
@@ -1853,7 +1899,7 @@ Kontrolê emeleyey oyo veş nêbeno.',
 'invalid-chunk-offset' => 'Ofseto nêravyarde',
 
 # img_auth script messages
-'img-auth-accessdenied' => 'Cıkewtış red biyo',
+'img-auth-accessdenied' => 'Cıresnayış vındarnayo.',
 'img-auth-nopathinfo' => 'PATH_INFO kemiyo.
 Teqdimkerê şıma seba ravurnayışê nê melumati eyar nêkerdo.
 Beno ke be CGI-bıngeyın bo u img_auth rê destek nêbeno.
@@ -1907,13 +1953,13 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'listfiles_name' => 'Name',
 'listfiles_user' => 'Karber',
 'listfiles_size' => 'Gırdiye',
-'listfiles_description' => 'Şınasiyen',
+'listfiles_description' => 'Sılasnayış',
 'listfiles_count' => 'Versiyoni',
 
 # File description page
 'file-anchor-link' => 'Dosya',
 'filehist' => 'Ravêrdê dosya',
-'filehist-help' => 'Klik bık ser yew tarih u aye tarih dı versionê dosya bıvin.',
+'filehist-help' => 'bıploxne ser yew tarih u aye tarih dı versionê dosya bıvin.',
 'filehist-deleteall' => 'hemî biestere',
 'filehist-deleteone' => 'bıestere',
 'filehist-revert' => 'reyna biyere',
@@ -1923,9 +1969,9 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'filehist-thumbtext' => 'Thumbnail qe versiyonê $1',
 'filehist-nothumb' => 'Thumbnail çin o.',
 'filehist-user' => 'Karber',
-'filehist-dimensions' => 'Dimensiyoni',
+'filehist-dimensions' => 'Ebati',
 'filehist-filesize' => 'Ebatê dosyayî',
-'filehist-comment' => 'Mışewre',
+'filehist-comment' => 'Vacayış',
 'filehist-missing' => 'Dosya nieseno',
 'imagelinks' => 'Gurenayışê dosya',
 'linkstoimage' => 'Ena {{PLURAL:$1|pela|$1 pela}} gıreye ena dosya:',
@@ -1950,6 +1996,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'shared-repo' => 'yew embarê repositoryî',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => '/* CSS placed here is included on the file description page, also included on foreign client wikis */',
+'upload-disallowed-here' => 'Nê asengi sero theba nênusneyêno.',
 
 # File reversion
 'filerevert' => '$1 reyna biyere',
@@ -2014,7 +2061,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'statistics-header-users' => 'Îstatistiksê karberî',
 'statistics-header-hooks' => 'Îstatistiksê binî',
 'statistics-articles' => 'Pelanê tedesteyî',
-'statistics-pages' => 'Peli',
+'statistics-pages' => 'Peri',
 'statistics-pages-desc' => 'Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.',
 'statistics-files' => 'Dosyayê bar biye',
 'statistics-edits' => 'Amarê vurnayîşî ke wextê {{SITENAME}} ronayîşî ra',
@@ -2028,7 +2075,7 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'statistics-mostpopular' => 'Pelayanê ke tewr zafî vînî biye',
 
 'disambiguations' => 'Pelayê ke maneyo bini rê gırey cı esto',
-'disambiguationspage' => 'Template:disambig',
+'disambiguationspage' => 'Template:Maneo bin',
 'disambiguations-text' => "Peleyê ke satır da sıteyên dı pelanê '''maneo bin'''i rê esteyina zeregri mocnenê. Nara satırda dıdın dı zi <br />tiya de [[MediaWiki:Disambiguationspage|Pelaya Maneo do bini ]] gani heme gıreyê şablonê ciya-manayan re gıre dayış icab keno.",
 
 'doubleredirects' => 'Hetenayışê dıletıni',
@@ -2057,7 +2104,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
-'nrevisions' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
+'nrevisions' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}}',
 'nviews' => '$1 {{PLURAL:$1|vînayîş|vînayîşî}}',
 'nimagelinks' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
 'ntransclusions' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
@@ -2066,7 +2113,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'lonelypagestext' => 'Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.',
 'uncategorizedpages' => 'Pelayanê ke kategorî nibiye',
 'uncategorizedcategories' => 'Kategoriyê ke bê kategorîyê',
-'uncategorizedimages' => 'Dosyayê ke bê kategorîyê',
+'uncategorizedimages' => 'Dosyayê ke bê kategoriyê',
 'uncategorizedtemplates' => 'Şablonê ke bê kategoriyê',
 'unusedcategories' => 'Kategoriyê ke nê xebtênê',
 'unusedimages' => 'Dosyeyê ke nê xebtênê',
@@ -2107,7 +2154,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' => 'bere',
+'move' => 'Wegirê',
 '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ê.',
@@ -2117,7 +2164,7 @@ Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gı
 'nopagetitle' => 'wina yew pelê hedefi çin o.',
 'nopagetext' => 'pelê hedefi ke şıma nişane kerdo çin o.',
 'pager-newer-n' => '{{PLURAL:$1|newiyer 1|newiyer $1}}',
-'pager-older-n' => '{{PLURAL:$1|Kıhanyer 1|Kıhanyer $1}}',
+'pager-older-n' => '{{PLURAL:$1|deha kehan 1|deha kehan $1}}',
 'suppress' => 'Çımpawıten',
 'querypage-disabled' => 'Na pelaya xısusi,sebeb de performansi ra qefılneyê.',
 
@@ -2141,18 +2188,18 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 'showhideselectedlogentries' => 'Qeydê weçinayışê bımocne/bınımne dekerê',
 
 # Special:AllPages
-'allpages' => 'Peli pêro',
+'allpages' => 'Peri pêro',
 'alphaindexline' => '$1 ra $2ine',
 'nextpage' => 'Pela badê cû ($1)',
 'prevpage' => 'Pela verêne ($1)',
 'allpagesfrom' => 'Pelanê ke be ena herfe dest pêkenê bımocne',
 'allpagesto' => 'Pelanê ke be ena herfe qediyenê bımocne:',
-'allarticles' => 'Peli pêro',
+'allarticles' => 'Wesiqey pêro',
 'allinnamespace' => 'Peli pênro ( $1 cayênameyî)',
 'allnotinnamespace' => 'Pelanê hemî ($1 cayênameyî de niyo)',
 'allpagesprev' => 'Verên',
 'allpagesnext' => 'ver şo',
-'allpagessubmit' => 'Biya',
+'allpagessubmit' => 'Şo',
 'allpagesprefix' => 'herfê ke şıma tiya de nuşti, pê ney herfan pelê ke destpêkenê liste ker:',
 'allpagesbadtitle' => 'pel o ke şıma kewenî cı, nameyê no peli de gıreyê zıwanan u wikiyi re elaqa esto, ê ra cıkewtış qebul niyo. ya zi sernameyan de karakterê qedexeyi tede esto.',
 'allpages-bad-ns' => '{{SITENAME}} keyepel de wina "$1" yew nameyê cayi çino.',
@@ -2175,7 +2222,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 # Special:DeletedContributions
 'deletedcontributions' => 'İştiraqê karberan de besternayına',
 'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'iştıraqi',
+'sp-deletedcontributions-contribs' => 'dekerdeni',
 
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
@@ -2195,9 +2242,9 @@ qaydeyê destek biyayeyi: <code>$1</code>',
 
 # Special:ActiveUsers
 'activeusers' => 'Listey karberan de aktivan',
-'activeusers-intro' => 'Ena yew listeye ke karberanê ke $1 {{PLURAL:$1|roc|rocan}} de îştiraq kerdo înan mocneno.',
-'activeusers-count' => 'ney {{PLURAL:$3|rocê peyin de|$3 rocê peyin de}} $1 {{PLURAL:$1|vuriyayiş|vuriyayiş}}',
-'activeusers-from' => 'karber ê ke pê ney destpêkeni ramocın:',
+'activeusers-intro' => 'Ena yew listeya karberê ke $1 {{PLURAL:$1|roc|rocan}} ra tepya iştiraq kerdo ênan mocneno.',
+'activeusers-count' => 'Karberi {{PLURAL:$3|roce peyni de|$3 roca peyni de}} $1 {{PLURAL:$1|vurnayış|vurnayışi}} kerdê',
+'activeusers-from' => 'Enê karberi ra tepya bımocne:',
 'activeusers-hidebots' => 'Botan bınımne',
 'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
 'activeusers-noresult' => 'Karberî çini yo.',
@@ -2215,7 +2262,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'listgrouprights-group' => 'Grup',
 'listgrouprights-rights' => 'Heqqî',
 'listgrouprights-helppage' => 'Help:Heqqanê gruban',
-'listgrouprights-members' => '(lista ezayan)',
+'listgrouprights-members' => '(listey ezayan)',
 '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' => 'şıma eşkenî hesabê xo re {{PLURAL:$2|grub|gruban}} têare kerî: $1',
@@ -2233,7 +2280,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailuser' => 'Ena karberi rê mesac bırse',
 'emailuser-title-target' => 'Na E-postaya {{GENDER:$1|karberi}}ya',
 'emailuser-title-notarget' => 'E-postaya karberi',
-'emailpage' => 'karberi re e-mail bışaw',
+'emailpage' => 'karberi re e-posta bırışê',
 'emailpagetext' => 'no/na karberi re e-posta erşawıtışi de şıma pê forma cêrıni eşkeni kar bıkerî.
 [[Special:Preferences|tercihanê şıma ye karberi]] de adresa e-posta ya ke şıma dayo, na adres qısmê adresa e-postayi de "From (kam ra)" asena, no sebebi ra gırewtox/e eşkeno/a direk cewab bıdo şıma.',
 'usermailererror' => 'xizmetê e-postayi xeta da:',
@@ -2252,7 +2299,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailfrom' => 'Rışten:',
 'emailto' => 'Geren:',
 'emailsubject' => 'Mersel:',
-'emailmessage' => 'Mesaj',
+'emailmessage' => 'E-posta:',
 'emailsend' => 'bıerşawê/bıruşnê',
 'emailccme' => 'kopyayekê mesaji mı re bıerşaw',
 'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:',
@@ -2267,7 +2314,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 
 # Watchlist
 'watchlist' => 'lista mına seyr-kerdışi',
-'mywatchlist' => 'Listey seyrkerdışi',
+'mywatchlist' => 'Listey taqiban',
 '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.',
@@ -2278,9 +2325,9 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem ma tu ri heber dun, zerri [[Special:RecentChanges|list of recent changes]] name pele beno qalın. Tı ri beno qolay çıta vurnaye biyo.',
 'removewatch' => 'Listedê mınê seyr kerdışi ra hewad',
 'removedwatchtext' => 'Ena pela "[[:$1]]" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].',
-'watch' => 'bıgê seyr-kerdış',
+'watch' => 'Temaşe ke',
 'watchthispage' => 'Peler seyr ke',
-'unwatch' => 'Seyr meke',
+'unwatch' => 'Teqib mekerê',
 'unwatchthispage' => 'temaşa kerdışê peli vındarn.',
 'notanarticle' => 'mebhesê peli niyo',
 'notvisiblerev' => 'Revizyon esteriyayo',
@@ -2305,7 +2352,7 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem
 'enotif_reset' => 'Pela pêro ziyaret kerde deye mor ke',
 'enotif_newpagetext' => 'Ena yew pela newî ya.',
 'enotif_impersonal_salutation' => '{{SITENAME}} karber',
-'changed' => 'vurniya',
+'changed' => 'vurneya',
 'created' => 'viraziya',
 'enotif_subject' => 'pelê {{SITENAME}}i $PAGETITLE, hetê/perrê $PAGEEDITOR $CHANGEDORCREATED',
 'enotif_lastvisited' => 'ziyareta şıma ye peyini ra nata heme vuryayiş ê ke biyê bıewnê $1i re..',
@@ -2341,7 +2388,7 @@ qey hemkari u pêşniyazi:
 'deletepage' => 'Pele bıestere',
 'confirm' => 'Testiq ke',
 'excontent' => "behso kêm: '$1'",
-'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]' karber/e têna paşt dayo/a)",
+'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]'  teyna iştıraq kerdo)",
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
 'exblank' => 'zerreyê peli vengo',
 'delete-confirm' => '"$1" bıestere',
@@ -2349,11 +2396,11 @@ qey hemkari u pêşniyazi:
 '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.',
-'actioncomplete' => 'Aksiyon temam biyo',
+'actioncomplete' => 'Xebten temam biyo',
 'actionfailed' => 'kar nêbı',
 'deletedtext' => '"$1" biya wedariya.
 Qe qeydê wedarnayışi, $2 bevinin.',
-'dellogpage' => 'Qeydê besternayışi',
+'dellogpage' => 'Qeydê esterniye',
 'dellogpagetext' => 'listeya cêrıni heme qaydê hewn a kerdeyan o.',
 'deletionlog' => 'qaydê hewnakerdışani',
 'reverted' => 'revizyono verin tepiya anciyayo',
@@ -2384,7 +2431,7 @@ yewna ten pel de vurnayiş kerdo u pel tepiya nêgeriyeno.
 
 oyo ke vurnayişo peyin kerdo: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "kılmnuşteyê vurnayişibi: \"''\$1''\".",
-'revertpage' => 'hetê [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ra vurnayiş biyo u ney vurnayişi tepiya geriyayo u no [[User:$1|$1]] kes o ke cuwa ver revizyon kerdo revizyonê no kesi tepiya anciyayo.',
+'revertpage' => 'Hetê [[Special:Contributions/$2|$2]] ([[User talk:$2|Mesac]]) ra vurnayiş biyo u ney vurnayişi tepiya geriyayo u no [[User:$1|$1]] kes o ke cuwa ver revizyon kerdo revizyonê no kesi tepiya anciyayo.',
 'revertpage-nouser' => '(nameyê karberi veteyo) no keso ke vuriyayiş kerdo vuriyayişê no kesi hetê no [[User:$1|$1]] kesi ra tepiya anciyayo',
 'rollback-success' => 'vurnayişê no kesi $1 tepiya geriyayo u hetê no
 $2 kesi ra cıwa ver o ke revizyon biyo no revizyon tepiya anciyayo.',
@@ -2396,7 +2443,7 @@ no kar semedê dızdiyê hesabi ibtal biyo.
 kerem kerê "tepiya" şiyerê u pel o ke şıma tera ameyî u o pel newe ra bar kerê , newe ra tesel/cereb kerê.',
 
 # Protect
-'protectlogpage' => 'Logê kılit-kerdışi',
+'protectlogpage' => 'Qeydê staryayan',
 'protectlogtext' => 'Şıma vurnayişê gırewtışê/wedarnayışê pawıtişi vinenê.
 Qey malumato ziyede [[Special:ProtectedPages|Peleyê ke star biye]] bewni rê êna .',
 'protectedarticle' => '"[[$1]]" kılit biyo',
@@ -2419,8 +2466,8 @@ Qey malumato ziyede [[Special:ProtectedPages|Peleyê ke star biye]] bewni rê ê
 '''$1''' eyarê peli:",
 'protect-locked-dblock' => "semedê kılidê database ya aktifi şıma neeşkeni seviyeya pawıtışi buvurni.
 '''$1''' eyarê no peli:",
-'protect-locked-access' => "Hesabê tu nıeşken seviyeyê kılit-kerdışi bıvurn.
-Ser pela '''$1''', itiya dı enformasyon esta:",
+'protect-locked-access' => "Karber hesabê şıma nêşeno  staryaye sewiyey ena peler bıvurno.
+Hesıbyayê sazê pela da '''$1''' enêyê:",
 'protect-cascadeon' => 'Ena pele nıka kılit biya. Çınki ena pele zerre listeyê {{PLURAL:$1|pele, ki|peleyan, which li}} bınê "cascading protection"iyo.
 Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading protection"i bıvurno.',
 'protect-default' => 'Destur bıde karberan pêrune',
@@ -2453,7 +2500,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 
 # Restrictions (nouns)
 'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Ahûln',
+'restriction-move' => 'Berê',
 'restriction-create' => 'Vıraze',
 'restriction-upload' => 'Barke',
 
@@ -2482,7 +2529,7 @@ Revizyoni ya hewn a biyê ya arşiw ra veciyayê ya zi cıresayişê şımayi ş
 'undelete-nodiff' => 'revizyonê verıni nidiya',
 'undeletebtn' => 'Timar bike',
 'undeletelink' => 'bıvêne/peyser bia',
-'undeleteviewlink' => 'ra mocın',
+'undeleteviewlink' => 'bıvin',
 'undeletereset' => 'Reset kerê',
 'undeleteinvert' => 'vicnayeyi qeldaye açarn',
 'undeletecomment' => 'Sebeb:',
@@ -2517,19 +2564,19 @@ $1',
 'namespace' => 'Cayê namey:',
 'invert' => 'Bê weçineni ê bina peyser biya',
 'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê',
-'namespace_association' => 'Pineyê cadê naman',
+'namespace_association' => 'Cayê nameyanê elaqadaran',
 'tooltip-namespace_association' => 'Herunda canemiya elekeyın nışan kerdışi sero qıse kerdışi yana zerre dekerdışi rê ena dora tesdiqi nışan kerê',
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştirakê karberi',
-'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştıraqi',
+'contributions' => 'İştiraqê karberi',
+'contributions-title' => 'Dekerdenê karber de $1',
+'mycontris' => 'Dekerdeni',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
-'uctop' => '(ser)',
-'month' => 'Aşm ra (u verniyer):',
-'year' => 'Serre ra (u verênêr):',
+'uctop' => '(top)',
+'month' => 'Aşm:',
+'year' => 'Ser:',
 
 'sp-contributions-newbies' => 'Tenya iştıraqanê karberanê neweyan bımocne',
 'sp-contributions-newbies-sub' => 'Qe hesebê newe',
@@ -2544,28 +2591,28 @@ $1',
 qê referansi qeydê vernigrewtışi cêr de eşkera biyo:',
 'sp-contributions-blocked-notice-anon' => 'Eno adresê IPi bloke biyo.
 Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
-'sp-contributions-search' => 'Ser iştariqi bıgeyr',
+'sp-contributions-search' => 'Dekerdena cı geyrê',
 'sp-contributions-username' => 'Adresa IP yana namey karberi:',
 'sp-contributions-toponly' => 'Tenya rewizyonanê tewr peyniyan bimocne',
 'sp-contributions-submit' => 'Cı geyre',
 
 # What links here
 'whatlinkshere' => 'Çı tiyay rê gırê beno',
-'whatlinkshere-title' => 'Peleye ke  "$1" re gre biyê',
-'whatlinkshere-page' => 'Pele:',
+'whatlinkshere-title' => 'Per da "$1" rê perê ke gre danê',
+'whatlinkshere-page' => 'Per:',
 'linkshere' => "Ena peleyan grey biya '''[[:$1]]''':",
-'nolinkshere' => "Yew pel zi '''[[:$1]]''' rê link nibeno.",
+'nolinkshere' => "Per da '''[[:$1]]''' rê pera ke gıre dana çıniya.",
 'nolinkshere-ns' => "Ena cayê nameyî de yew pel zi '''[[:$1]]''' rê link nibeno.",
-'isredirect' => 'pele redireksiyon',
-'istemplate' => 'Çarnayışin',
+'isredirect' => 'pera hetenayışi',
+'istemplate' => 'Açarnayene',
 'isimage' => 'gıreyê dosya',
 'whatlinkshere-prev' => '{{PLURAL:$1|veror|veror $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|verni|verni $1}}',
 'whatlinkshere-links' => '← gırey',
-'whatlinkshere-hideredirs' => 'Hetekerdışa $1',
+'whatlinkshere-hideredirs' => 'Hetenayışê $1',
 'whatlinkshere-hidetrans' => 'Açarnayışê $1',
-'whatlinkshere-hidelinks' => '$1 greyan',
-'whatlinkshere-hideimages' => 'gireyê resimî $1',
+'whatlinkshere-hidelinks' => 'Greyê $1',
+'whatlinkshere-hideimages' => 'Gireyê resımi $1',
 'whatlinkshere-filters' => 'Avrêci',
 
 # Block/unblock
@@ -2594,7 +2641,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'ipbenableautoblock' => 'verniyê IPadresa peyin ê no karberi u wexta ke vurnayişi kerd ê IPadresani otomotik bıger.',
 'ipbsubmit' => 'Ena karber blok bike',
 'ipbother' => 'Waxtê bini:',
-'ipboptions' => '2 seat:2 hours,1 roc:1 day,3 roc:3 days,1 hefte:1 week,2 hefte:2 weeks,1 aşm:1 month,3 aşm:3 months,6 aşm:6 months,1 aşm:1 year,ebedi:infinite',
+'ipboptions' => '2 seat:2 hours,1 roc:1 day,3 roci:3 days,1 hefte:1 week,2 heftey:2 weeks,1 aşm:1 month,3 aşm:3 months,6 aşmi:6 months,1 ser:1 year,ebedi:infinite',
 'ipbotheroption' => 'bini',
 'ipbotherreason' => 'Sebebê bini:',
 'ipbhidename' => 'Nameyê karberî listeyan u vurnayîşan ra binumne',
@@ -2645,28 +2692,28 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'ipblocklist-empty' => 'Listeyê blokî veng o.',
 'ipblocklist-no-results' => 'Adresa IPya waştiye ya zi namey karberi kılit nêbiyo.',
 'blocklink' => 'kılit ke',
-'unblocklink' => 'ake',
+'unblocklink' => 'bloqi hewad',
 'change-blocklink' => 'kılit-kerdışi bıvurne',
-'contribslink' => 'iştıraqi',
+'contribslink' => 'dekerdeni',
 'emaillink' => 'e-poste bırışe',
 'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
 Sebebê kılit-biyayışê $1\'i: "$2"o',
-'blocklogpage' => 'Protokolê kıliti',
+'blocklogpage' => 'Qeydê bloqi',
 'blocklog-showlog' => 'verniyê no/na karberi cıwa ver geriyayo/ya.',
 'blocklog-showsuppresslog' => 'verniyê no/na karberi cıwa ver geriyayo/ya.',
-'blocklogentry' => '[[$1]] block kerd, hetani $2 $3',
+'blocklogentry' => 'Karberê [[$1]] ke bloqe, bloqey cı hetana $2 $3 do bıramo.',
 'reblock-logentry' => 'qey [[$1]]i tarixê qediyayişi $2 $3 pa ninan a eyarê ver-grewtışan vurna.',
 'blocklogtext' => "No kuliyatê kılitkerdış u rakerdışê fealiyetê karberano.
 Adresê IP'ya ke otomatikmen kılit biyê lista de çıniya.
 Seba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvinê.",
 'unblocklogentry' => '$1 ake',
-'block-log-flags-anononly' => 'teyna karberê anonîmî',
-'block-log-flags-nocreate' => 'akerdışê hesabi qapan bi',
-'block-log-flags-noautoblock' => 'otoblok wedariyo',
-'block-log-flags-noemail' => 'e-mail blok biyo',
-'block-log-flags-nousertalk' => 'ti nieşkena pela minaqeşe xo bivurne',
-'block-log-flags-angry-autoblock' => 'otoblokê weşî a biyo',
-'block-log-flags-hiddenname' => 'nameyê karberî nimniya',
+'block-log-flags-anononly' => 'karberê anomini tenya',
+'block-log-flags-nocreate' => 'akerdışê hesabi racneyayo',
+'block-log-flags-noautoblock' => 'Oto-wedariye terkneyayo',
+'block-log-flags-noemail' => 'e-posta biya bloqe',
+'block-log-flags-nousertalk' => 'Pela verênayişi ke xo nêşeno bıvurno',
+'block-log-flags-angry-autoblock' => 'oto-wedariye amayen aktivo',
+'block-log-flags-hiddenname' => 'nameyê karberi nımteyo',
 'range_block_disabled' => 'Desturê administorî ke viraştişê blokê rangeyî kefiliyo.',
 'ipb_expiry_invalid' => 'Wextê qediyayışi nêvêreno.',
 'ipb_expiry_temp' => 'Kılitbiyayışê karberê nımıtey gani ebedi bo.',
@@ -2776,7 +2823,7 @@ Yewna name bınus.',
 'movepage-page-moved' => 'pelê $1i kırışiya pelê $2i.',
 'movepage-page-unmoved' => 'pelê $1i nêkırışiyeno sernameyê $2i.',
 'movepage-max-pages' => 'tewr ziyed $1 {{PLURAL:$1|peli|peli}} kırışiya u hıni ziyedê ıney otomotikmen nêkırışiyeno.',
-'movelogpage' => 'Logê berdışi',
+'movelogpage' => 'Qeydê berdışi',
 'movelogpagetext' => 'nameyê liste ya ke cêr de yo, pelê vuriyayeyani mocneno',
 'movesubpage' => '{{PLURAL:$1|Subpage|pelê bınıni}}',
 'movesubpagetext' => '{{PLURAL:$1|pelê bınıni yê|pelê bınıni yê}} no $1 peli cer de yo.',
@@ -2835,7 +2882,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 'allmessages' => 'Mesacê sistemi',
 'allmessagesname' => 'Name',
 'allmessagesdefault' => 'Hesıbyaye metnê mesaci',
-'allmessagescurrent' => 'nuşte yo ke Karyayo',
+'allmessagescurrent' => 'Metno ke karyayo',
 '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ê.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
@@ -2902,7 +2949,7 @@ dosyaya emaneti vindbiyo',
 'xml-error-string' => '$1 çizgi de $2 col $3 (bit $4): $5',
 'import-upload' => 'Dosyayê XML bar bike',
 'import-token-mismatch' => "vindibiyayişê ma'lumatê hesabi. kerem kerê newe ra tesel/cereb bıkerê.",
-'import-invalid-interwiki' => 'Eya wîkî ra nieşkenî împort bike.',
+'import-invalid-interwiki' => 'Ena wiki ra azere kerdış nêbeno.',
 'import-error-edit' => 'Pela " $1 " qandê vurnayışi aya nêgêrêna çıkı cı rê icazet nêdeyayo.',
 'import-error-create' => 'Pela " $1 " qandê vıraştışi aya nêabêna çıkı cı rê icazet nêdeyayo.',
 'import-error-interwiki' => 'Pela " $1 " qandê name dayışi aya nêgêrêna çıkı namey cı (interwiki) sero cırê ca abıryayo.',
@@ -2922,7 +2969,6 @@ dosyaya emaneti vindbiyo',
 
 # JavaScriptTest
 'javascripttest' => 'Cerbnayışê JavaScripti',
-'javascripttest-disabled' => 'Na kerdin, na wiki sero aktiv nêbiya.',
 '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.',
@@ -2938,8 +2984,8 @@ 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ıraqa',
-'tooltip-pt-login' => 'Seba cıkewtışi şıma rê dewato; labelê, no zeruri niyo',
+'tooltip-pt-mycontris' => 'Listey iştıraqan',
+'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ıveciyên',
 'tooltip-ca-talk' => 'Zerrey pela sero werênayış',
@@ -2952,22 +2998,22 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 '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 pele bıestere',
+'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-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' => 'Seba nê meqaley pelan seha ke',
-'tooltip-p-logo' => 'Pela seri',
+'tooltip-search-fulltext' => 'Nê  metni peran dı cı geyre',
+'tooltip-p-logo' => 'Pera serên',
 'tooltip-n-mainpage' => 'Şo pela seri',
 'tooltip-n-mainpage-description' => 'Şo pela seri',
-'tooltip-n-portal' => 'Heqa projey de, çı şenay bıkerê, çı koti vêniyeno',
+'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' => 'Pelê da raştamayiye bar ke',
-'tooltip-n-help' => 'Cayê doşkerdışi',
+'tooltip-n-randompage' => 'Şırê pera ke raştameyê',
+'tooltip-n-help' => 'Qande desteg grotış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',
@@ -2975,24 +3021,24 @@ 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' => 'Lista pelanê xasanê pêroinan',
+'tooltip-t-specialpages' => 'Listeya pelan dê xasa pêron',
 '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' => 'pelayê kılit-kerdeyi bıvin',
+'tooltip-ca-nstab-project' => 'Pera proci bıvin',
 'tooltip-ca-nstab-image' => 'Pelay dosya bımocne',
 'tooltip-ca-nstab-mediawiki' => 'Mesacê sistemi bivinên',
-'tooltip-ca-nstab-template' => 'Şabloni bıvêne',
+'tooltip-ca-nstab-template' => 'Şabloni bıvinê',
 'tooltip-ca-nstab-help' => 'Peleyê yardimi bivinên',
 'tooltip-ca-nstab-category' => 'Pele kategoriyan bevinin',
 'tooltip-minoredit' => 'Eno vurnayışê qıçkeko',
 'tooltip-save' => 'Vurnayışanê xo qeyd ke',
 'tooltip-preview' => 'Vurnayışê xo bıvin. Verniyê qeyd kerdışi, vurnayışê xo ena pele dı control bık.',
-'tooltip-diff' => 'Vurnayışe mı bımoc',
-'tooltip-compareselectedversions' => 'Ferqê versiyonan bevinin',
+'tooltip-diff' => 'Metni sero vurnayışan mocneno',
+'tooltip-compareselectedversions' => 'Ena per de ferqê rewziyonan de dı weçinaya bıvinê',
 'tooltip-watch' => 'Eno pele listey tıyo seyir-kerdişi ri dek',
 'tooltip-watchlistedit-normal-submit' => 'Sernuşteya hewad',
 'tooltip-watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
@@ -3004,6 +3050,519 @@ Tı eşkeno yew sebeb bınus.',
 'tooltip-preferences-save' => 'Terciha qeyd ke',
 'tooltip-summary' => 'Yew xulasaya kilm binuse',
 
+# Scripts
+'common.js' => "/**
+ * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
+ * loaded for all users on every wiki page. If possible create a gadget that is
+ * enabled by default instead of adding it here (since gadgets are fully
+ * optimized ResourceLoader modules with possibility to add dependencies etc.)
+ *
+ * Since common.js isn't a gadget, there is no place to declare its
+ * dependencies, so we have to lazy load them with mw.loader.using on demand and
+ * then execute the rest in the callback. In most cases these dependencies will
+ * be loaded (or loading) already and the callback will not be delayed. In case a
+ * dependency hasn't arrived yet it'll make sure those are loaded before this.
+ */
+mw.loader.using( 'mediawiki.util', function() {
+/* Begin of mw.loader.using callback */
+
+/**
+ * Redirect User:Name/skin.js and skin.css to the current skin's pages
+ * (unless the 'skin' page really exists)
+ * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
+ * @rev: 2
+ */
+if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) == 2 ) {
+       var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
+       // Make sure there was a part before and after the slash
+       // And that the latter is 'skin.js' or 'skin.css'
+       if ( titleParts.length == 2 ) {
+               var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
+               if ( titleParts.slice(-1) == 'skin.js' ) {
+                       window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
+               } else if ( titleParts.slice(-1) == 'skin.css' ) {
+                       window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
+               }
+       }
+}
+
+/** Map addPortletLink to mw.util 
+ */
+window.addPortletLink = function() {
+    return mw.util.addPortletLink.apply( mw.util, arguments );
+};
+
+/** extract a URL parameter from the current URL **********
+ *
+ * @deprecated: Use mw.util.getParamValue with proper escaping
+ */
+window.getURLParamValue = function() {
+    return mw.util.getParamValue.apply( mw.util, arguments );
+};
+
+/** &withCSS= and &withJS= URL parameters *******
+ * Allow to try custom scripts from MediaWiki space 
+ * without editing personal .css or .js files
+ */
+var extraCSS = mw.util.getParamValue(\"withCSS\");
+if ( extraCSS && extraCSS.match(/^MediaWiki:[^&<>=%]*\\.css\$/) ) {
+    importStylesheet(extraCSS);
+}
+var extraJS = mw.util.getParamValue(\"withJS\");
+if ( extraJS && extraJS.match(/^MediaWiki:[^&<>=%]*\\.js\$/) ) {
+    importScript(extraJS);
+}
+
+
+/* Import more specific scripts if necessary */
+if (wgAction == 'edit' || wgAction == 'submit' || wgPageName == 'Special:Upload') { //scripts specific to editing pages
+    importScript('MediaWiki:Common.js/edit.js');
+}
+else if (mw.config.get('wgPageName') == 'Special:Watchlist') { //watchlist scripts
+    mw.loader.load(mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=MediaWiki:Common.js/watchlist.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
+}
+
+if ( wgNamespaceNumber == 6 ) {
+    importScript('MediaWiki:Common.js/file.js');
+}
+
+/**
+ * WikiMiniAtlas
+ *
+ *  Description: WikiMiniAtlas is a popup click and drag world map.
+ *               This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
+ *               The script itself is located on meta because it is used by many projects.
+ *               See [[Meta:WikiMiniAtlas]] for more information. 
+ *  Maintainers: [[User:Dschwen]]
+ */
+
+mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
+
+/* Scripts specific to Internet Explorer */
+if (\$.client.profile().name == 'msie') {
+    /** Internet Explorer bug fix **************************************************
+     *
+     *  Description: Fixes IE horizontal scrollbar bug
+     *  Maintainers: [[User:Tom-]]?
+     */
+    
+    var oldWidth;
+    var docEl = document.documentElement;
+    
+    var fixIEScroll = function() {
+        if (!oldWidth || docEl.clientWidth > oldWidth) {
+            doFixIEScroll();
+        } else {
+            setTimeout(doFixIEScroll, 1);
+        }
+        
+        oldWidth = docEl.clientWidth;
+    };
+    
+    var doFixIEScroll = function () {
+        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? \"hidden\" : \"\";
+    };
+    
+    document.attachEvent(\"onreadystatechange\", fixIEScroll);
+    document.attachEvent(\"onresize\", fixIEScroll);
+    
+    // In print IE (7?) does not like line-height
+    mw.util.addCSS('@media print { sup, sub, p, .documentDescription { line-height: normal; } }');
+
+    // IE overflow bug
+    mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } '
+      + 'div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
+
+    // IE zoomfix
+    // Use to fix right floating div/table inside tables
+    mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1; }');
+
+    // Import scripts specific to Internet Explorer 6
+    if (\$.client.profile().versionBase == '6') {
+        importScript('MediaWiki:Common.js/IE60Fixes.js');
+    }
+}
+
+/* Fixes for Windows XP font rendering */
+if (navigator.appVersion.search(/windows nt 5/i) != -1) {
+    mw.util.addCSS('.IPA {font-family: \"Lucida Sans Unicode\", \"Arial Unicode MS\";} ' + 
+                   '.Unicode {font-family: \"Arial Unicode MS\", \"Lucida Sans Unicode\";}');
+}
+
+/* Helper script for .hlist class in Common.css
+ * Last updated: September 12, 2012
+ * Maintainer: [[User:Edokter]]
+ */
+if ( \$.client.profile().name == 'msie' ) {
+    /* Add pseudo-selector class to last-child list items in IE 8 */
+    if ( \$.client.profile().versionBase == '8' ) {
+        \$( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+            .addClass( 'hlist-last-child' );
+    }
+    /* Generate interpuncts and parens for IE < 8 */
+    if ( \$.client.profile().versionBase < '8' ) {
+        var hlists = \$( '.hlist' );
+        hlists.find( 'dt:not(:last-child)' )
+            .append( ': ' );
+        hlists.find( 'dd:not(:last-child)' )
+            .append( '<b>·</b> ' );
+        hlists.find( 'li:not(:last-child)' )
+            .append( '<b>·</b> ' );
+        hlists.find( 'dl dl, ol ol, ul ul' )
+            .prepend( '( ' ).append( ') ' );
+    }
+}
+
+/* Test if an element has a certain class
+ * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
+ *
+ * @deprecated:  Use \$(element).hasClass() instead.
+ */
+
+window.hasClass = ( function() {
+    var reCache = {};
+    return function (element, className) {
+        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp(\"(?:\\\\s|^)\" + className + \"(?:\\\\s|\$)\"))).test(element.className);
+    };
+})();
+
+
+/** Interwiki links to featured articles ***************************************
+ *
+ *  Description: Highlights interwiki links to featured articles (or
+ *               equivalents) by changing the bullet before the interwiki link
+ *               into a star.
+ *  Maintainers: [[User:R. Koot]]
+ */
+
+function LinkFA() {
+    if ( document.getElementById( \"p-lang\" ) ) {
+        var InterwikiLinks = document.getElementById( \"p-lang\" ).getElementsByTagName( \"li\" );
+
+        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
+            if ( document.getElementById( InterwikiLinks[i].className + \"-fa\" ) ) {
+                InterwikiLinks[i].className += \" FA\";
+                InterwikiLinks[i].title = \"This is a featured article in another language.\";
+            } else if ( document.getElementById( InterwikiLinks[i].className + \"-ga\" ) ) {
+                InterwikiLinks[i].className += \" GA\";
+                InterwikiLinks[i].title = \"This is a good article in another language.\";
+            }
+        }
+    }
+}
+
+\$( LinkFA );
+
+
+/** Collapsible tables *********************************************************
+ *
+ *  Description: Allows tables to be collapsed, showing only the header. See
+ *               [[Wikipedia:NavFrame]].
+ *  Maintainers: [[User:R. Koot]]
+ */
+
+var autoCollapse = 2;
+var collapseCaption = \"bınımne\";
+var expandCaption = \"bıvin\";
+
+window.collapseTable = function( tableIndex ){
+    var Button = document.getElementById( \"collapseButton\" + tableIndex );
+    var Table = document.getElementById( \"collapsibleTable\" + tableIndex );
+
+    if ( !Table || !Button ) {
+        return false;
+    }
+
+    var Rows = Table.rows;
+
+    if ( Button.firstChild.data == collapseCaption ) {
+        for ( var i = 1; i < Rows.length; i++ ) {
+            Rows[i].style.display = \"none\";
+        }
+        Button.firstChild.data = expandCaption;
+    } else {
+        for ( var i = 1; i < Rows.length; i++ ) {
+            Rows[i].style.display = Rows[0].style.display;
+        }
+        Button.firstChild.data = collapseCaption;
+    }
+}
+
+function createCollapseButtons(){
+    var tableIndex = 0;
+    var NavigationBoxes = new Object();
+    var Tables = document.getElementsByTagName( \"table\" );
+
+    for ( var i = 0; i < Tables.length; i++ ) {
+        if ( hasClass( Tables[i], \"collapsible\" ) ) {
+
+            /* only add button and increment count if there is a header row to work with */
+            var HeaderRow = Tables[i].getElementsByTagName( \"tr\" )[0];
+            if (!HeaderRow) continue;
+            var Header = HeaderRow.getElementsByTagName( \"th\" )[0];
+            if (!Header) continue;
+
+            NavigationBoxes[ tableIndex ] = Tables[i];
+            Tables[i].setAttribute( \"id\", \"collapsibleTable\" + tableIndex );
+
+            var Button     = document.createElement( \"span\" );
+            var ButtonLink = document.createElement( \"a\" );
+            var ButtonText = document.createTextNode( collapseCaption );
+
+            Button.className = \"collapseButton\";  //Styles are declared in Common.css
+
+            ButtonLink.style.color = Header.style.color;
+            ButtonLink.setAttribute( \"id\", \"collapseButton\" + tableIndex );
+            ButtonLink.setAttribute( \"href\", \"#\" );
+            addHandler( ButtonLink,  \"click\", new Function( \"evt\", \"collapseTable(\" + tableIndex + \" ); return killEvt( evt );\") );
+            ButtonLink.appendChild( ButtonText );
+
+            Button.appendChild( document.createTextNode( \"[\" ) );
+            Button.appendChild( ButtonLink );
+            Button.appendChild( document.createTextNode( \"]\" ) );
+
+            Header.insertBefore( Button, Header.firstChild );
+            tableIndex++;
+        }
+    }
+
+    for ( var i = 0;  i < tableIndex; i++ ) {
+        if ( hasClass( NavigationBoxes[i], \"collapsed\" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], \"autocollapse\" ) ) ) {
+            collapseTable( i );
+        } 
+        else if ( hasClass( NavigationBoxes[i], \"innercollapse\" ) ) {
+            var element = NavigationBoxes[i];
+            while (element = element.parentNode) {
+                if ( hasClass( element, \"outercollapse\" ) ) {
+                    collapseTable ( i );
+                    break;
+                }
+            }
+        }
+    }
+}
+
+\$( createCollapseButtons );
+
+
+/** Dynamic Navigation Bars (experimental) *************************************
+ *
+ *  Description: See [[Wikipedia:NavFrame]].
+ *  Maintainers: UNMAINTAINED
+ */
+
+// set up the words in your language
+var NavigationBarHide = '[' + collapseCaption + ']';
+var NavigationBarShow = '[' + expandCaption + ']';
+
+// shows and hides content and picture (if available) of navigation bars
+// Parameters:
+//     indexNavigationBar: the index of navigation bar to be toggled
+window.toggleNavigationBar = function(indexNavigationBar){
+    var NavToggle = document.getElementById(\"NavToggle\" + indexNavigationBar);
+    var NavFrame = document.getElementById(\"NavFrame\" + indexNavigationBar);
+
+    if (!NavFrame || !NavToggle) {
+        return false;
+    }
+
+    // if shown now
+    if (NavToggle.firstChild.data == NavigationBarHide) {
+        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
+                NavChild.style.display = 'none';
+            }
+        }
+    NavToggle.firstChild.data = NavigationBarShow;
+
+    // if hidden now
+    } else if (NavToggle.firstChild.data == NavigationBarShow) {
+        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
+                NavChild.style.display = 'block';
+            }
+        }
+        NavToggle.firstChild.data = NavigationBarHide;
+    }
+}
+
+// adds show/hide-button to navigation bars
+function createNavigationBarToggleButton(){
+    var indexNavigationBar = 0;
+    // iterate over all < div >-elements 
+    var divs = document.getElementsByTagName(\"div\");
+    for (var i = 0; NavFrame = divs[i]; i++) {
+        // if found a navigation bar
+        if (hasClass(NavFrame, \"NavFrame\")) {
+
+            indexNavigationBar++;
+            var NavToggle = document.createElement(\"a\");
+            NavToggle.className = 'NavToggle';
+            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
+            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
+
+            var isCollapsed = hasClass( NavFrame, \"collapsed\" );
+            /*
+             * Check if any children are already hidden.  This loop is here for backwards compatibility:
+             * the old way of making NavFrames start out collapsed was to manually add style=\"display:none\"
+             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
+             * the content visible without JavaScript support), the new recommended way is to add the class
+             * \"collapsed\" to the NavFrame itself, just like with collapsible tables.
+             */
+            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
+                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
+                    if ( NavChild.style.display == 'none' ) {
+                        isCollapsed = true;
+                    }
+                }
+            }
+            if (isCollapsed) {
+                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
+                        NavChild.style.display = 'none';
+                    }
+                }
+            }
+            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
+            NavToggle.appendChild(NavToggleText);
+
+            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
+            for(var j=0; j < NavFrame.childNodes.length; j++) {
+                if (hasClass(NavFrame.childNodes[j], \"NavHead\")) {
+                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
+                    NavFrame.childNodes[j].appendChild(NavToggle);
+                }
+            }
+            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
+        }
+    }
+}
+
+\$( createNavigationBarToggleButton );
+
+
+/** Main Page layout fixes *********************************************************
+ *
+ *  Description: Adds an additional link to the complete list of languages available.
+ *  Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
+ */
+
+if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page') {
+    \$(function () {
+        mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
+            'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias');
+    });
+}
+
+
+/** Table sorting fixes ************************************************
+  *
+  *  Description: Disables code in table sorting routine to set classes on even/odd rows
+  *  Maintainers: [[User:Random832]]
+  */
+ts_alternate_row_colors = false;
+
+
+/***** uploadwizard_newusers ********
+ * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
+ *
+ *  Maintainers: [[User:Krimpet]]
+ */
+function uploadwizard_newusers() {
+  if (wgNamespaceNumber == 4 && wgTitle == \"Upload\" && wgAction == \"view\") {
+    var oldDiv = document.getElementById(\"autoconfirmedusers\"),
+        newDiv = document.getElementById(\"newusers\");
+    if (oldDiv && newDiv) {
+      if (typeof wgUserGroups == \"object\" && wgUserGroups) {
+        for (i = 0; i < wgUserGroups.length; i++) {
+          if (wgUserGroups[i] == \"autoconfirmed\") {
+            oldDiv.style.display = \"block\";
+            newDiv.style.display = \"none\";
+            return;
+          }
+        }
+      }
+      oldDiv.style.display = \"none\";
+      newDiv.style.display = \"block\";
+      return;
+    }
+  }
+}
+\$(uploadwizard_newusers);
+
+
+/** IPv6 AAAA connectivity testing 
+
+var __ipv6wwwtest_factor = 100;
+var __ipv6wwwtest_done = 0;
+if ((wgServer != \"https://secure.wikimedia.org\") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
+    importScript(\"MediaWiki:Common.js/IPv6.js\");
+}
+**/
+
+/** Magic editintros ****************************************************
+ *
+ *  Description: Adds editintros on disambiguation pages and BLP pages.
+ *  Maintainers: [[User:RockMFR]]
+ */
+
+function addEditIntro( name ) {
+  \$( '.editsection, #ca-edit' ).find( 'a' ).each( function( i, el ) {
+    el.href = \$(this).attr(\"href\") + '&editintro=' + name;
+  });
+}
+
+if (wgNamespaceNumber === 0) {
+  \$(function(){
+    if (document.getElementById('disambigbox')) {
+      addEditIntro('Template:Disambig_editintro');
+    }
+  });
+
+  \$(function(){
+    var cats = document.getElementById('mw-normal-catlinks');
+    if (!cats) {
+      return;
+    }
+    cats = cats.getElementsByTagName('a');
+    for (var i = 0; i < cats.length; i++) {
+      if (cats[i].title == 'Category:Living people' || cats[i].title == 'Category:Possibly living people') {
+        addEditIntro('Template:BLP_editintro');
+        break;
+      }
+    }
+  });
+}
+
+/**
+ * Description: Stay on the secure server as much as possible
+ * Maintainers: [[User:TheDJ]]
+ */
+if ( mw.config.get('wgServer') == 'https://secure.wikimedia.org' ) {
+    /* Old secure server */
+    importScript( 'MediaWiki:Common.js/secure.js');
+} else if( document.location && document.location.protocol  && document.location.protocol == \"https:\" ) {
+  /* New secure servers */
+  importScript('MediaWiki:Common.js/secure new.js');
+}
+
+/**
+  * Description: Fix the toggle for Mobile view
+  * https://bugzilla.wikimedia.org/show_bug.cgi?id=38009
+  * Maintainer: [[User:TheDJ]]
+  */
+mw.loader.using( 'jquery.cookie', function() {
+    \$('a[href\$=\"toggle_view_mobile\"]').click(function(){
+        document.cookie = 'stopMobileRedirect=false; domain=.wikipedia.org;'
+                    + 'path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT;'
+    });
+});
+
+/* End of mw.loader.using callback */
+} );
+/* DO NOT ADD CODE BELOW THIS LINE */",
+
 # Metadata
 'notacceptable' => "formatê ma'lumati no peşkeşwanê wikiyi nêweniyeno.",
 
@@ -3044,6 +3603,7 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-views' => 'Amarina mocnayışan',
 'pageinfo-watchers' => 'Amariya pela serykeran',
 'pageinfo-redirects-name' => 'Hetenayışê na pela',
+'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Bınpelê na pela',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|hetenayış|hetenayışi}}; $3 {{PLURAL:$3|raykerdışt|raykerdışi}})',
 'pageinfo-firstuser' => 'Pela vıraşter',
@@ -3054,10 +3614,10 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-authors' => 'Amarina nuştekaran pêro',
 'pageinfo-recent-edits' => 'Amariya vurnayışan ($1 ra nata)',
 'pageinfo-recent-authors' => 'Amarina nuştekaran pêro',
-'pageinfo-restriction' => 'Xısusiyetê pela da  (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategoriye|Kategoriyan}} ($1) bınımne',
 'pageinfo-templates' => '{{PLURAL:$1|Şablon|Şabloni}} ($1) açarneyayê',
+'pageinfo-toolboxlink' => 'Malumatê perer',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3111,9 +3671,10 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'file-info' => 'ebatê dosyayi: $1, MIME tip: $2',
 'file-info-size' => '$1 × $2 pixelan, ebatê dosya: $3, MIME type: $4',
 'file-info-size-pages' => '$1 × $2 pikse, dergeya dosyay: $3, MIME tipiya cı: $4, $5 {{PLURAL:$5|pela|pela}}',
-'file-nohires' => 'Rovıleşiyayışo berzêr çıniyo.',
-'svg-long-desc' => 'SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3',
-'show-big-image' => 'Resolosyonê temami',
+'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',
+'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.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -3122,6 +3683,8 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'file-info-png-looped' => 'atlama biyo',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|hew|hew}} kay biyê',
 'file-info-png-frames' => '$1 {{PLURAL:$1|çerçeve|çerçeveyi}}',
+'file-no-thumb-animation' => "'''Not: Dılet tekniko limit, gırd agozneya resm de qıckek de animasyoni miyan dı nêbo.'''",
+'file-no-thumb-animation-gif' => "'''Not: Dılet tekniko limit, gırd agozneya resm de qıckek de  GIF imaci de animasyon do nêbo.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeriya dosyayan dê newan',
@@ -3131,7 +3694,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'newimages-label' => 'Nameyê dosya ( ya zi parçe ey)',
 'showhidebots' => '(bota $1)',
 'noimages' => 'Çik çini yo.',
-'ilsubmit' => 'Cıgeyre',
+'ilsubmit' => 'Cı geyre',
 'bydate' => 'goreyê zemani',
 'sp-newimages-showfrom' => 'Dosyayê newi ke $2, $1 ra dest pe keni bimocne',
 
@@ -3325,7 +3888,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-gpsaltituderef' => 'çımeyê berziyi',
 'exif-gpsaltitude' => 'berzî',
 'exif-gpstimestamp' => "Wextê GPSyi (se'eta atomiki)",
-'exif-gpssatellites' => 'Satellite yê ke pê peymawıtışi kenî',
+'exif-gpssatellites' => 'Qandê peymıtışi antenê ke vıstê kar',
 'exif-gpsstatus' => 'cayê gırewtoxi',
 'exif-gpsmeasuremode' => 'moda peymawıtışi',
 'exif-gpsdop' => 'karê peymawıtışi',
@@ -3501,7 +4064,7 @@ $8',
 'exif-lightsource-4' => 'Flaş',
 'exif-lightsource-9' => 'saye/hewayo weşî',
 'exif-lightsource-10' => 'hewra/hora',
-'exif-lightsource-11' => 'Virse',
+'exif-lightsource-11' => 'Sersiyın',
 'exif-lightsource-12' => 'Florasanê roşnê tici (D 5700 – 7100K)',
 'exif-lightsource-13' => 'Florasanê sipe ye roci (N 4600 – 5400K)',
 'exif-lightsource-14' => 'Florasanê sipe ye hewli (W 3900 – 4500K)',
@@ -3625,7 +4188,7 @@ $8',
 'exif-ycbcrpositioning-1' => 'Wertekerdış',
 'exif-ycbcrpositioning-2' => 'Wayırê-site',
 
-'exif-dc-contributor' => 'İştırakdari',
+'exif-dc-contributor' => 'Dekerdeni',
 'exif-dc-coverage' => 'Heruna yana wextin grotışa medya',
 'exif-dc-date' => 'Tarix(i)',
 'exif-dc-publisher' => 'Hesrekar',
@@ -3669,9 +4232,9 @@ $8',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'pêro',
-'namespacesall' => 'têde',
+'namespacesall' => 'pêro',
 'monthsall' => 'pêro',
-'limitall' => 'hemi',
+'limitall' => 'pêro',
 
 # E-mail address confirmation
 'confirmemail' => 'Adresê e-posta tesdiq ker',
@@ -3741,6 +4304,7 @@ kodê tesdiqi heta ıney tarixi $4 meqbul o.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Transcludê înterwîkîyî nihebityeno]',
 'scarytranscludefailed' => '[Qe $1 fetch kerdişî nihebitiyeno]',
+'scarytranscludefailed-httpstatus' => '[Qande $1 şablon nêşa bıgêriyo: HTTP $2]',
 'scarytranscludetoolong' => '[Ena URL zaf dergo]',
 
 # Delete conflict
@@ -3778,13 +4342,13 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 # Multipage image navigation
 'imgmultipageprev' => '← peleyê verin',
 'imgmultipagenext' => 'pela badê cû →',
-'imgmultigo' => 'Şı!',
+'imgmultigo' => 'Şo!',
 'imgmultigoto' => 'Şo pela da $1',
 
 # Table pager
 'ascending_abbrev' => 'berz',
 'descending_abbrev' => 'nızm',
-'table_pager_next' => 'Pela badê cû',
+'table_pager_next' => 'Pela peyên',
 'table_pager_prev' => 'Pela verêne',
 'table_pager_first' => 'Pela jûyıne',
 'table_pager_last' => 'Pela peyêne',
@@ -3855,7 +4419,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'vurnayışanê eleqadari bıvin',
-'watchlisttools-edit' => 'listey seyrkerdışi bevin u edit bık',
+'watchlisttools-edit' => 'listey taqiban bıvinê u bıvurnê',
 'watchlisttools-raw' => 'Listeyê seyr-kerdışi bıvin',
 
 # Iranian month names
@@ -3922,7 +4486,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 
 # Core parser functions
 'unknown_extension_tag' => 'Etiketê ekstensiyon ê "$1"î nizanyeno',
-'duplicate-defaultsort' => '\'\'\'Teme:\'\'\' Tuşê default sort "$2" sero tuşê default sort "$1"î ra şino.',
+'duplicate-defaultsort' => '\'\'\'Tembe:\'\'\' Hesıbyaye sırmey ratnayış de "$2" sırmey ratnayış de "$1"i nêhesıbneno.',
 
 # Special:Version
 'version' => 'Versiyon',
@@ -3992,10 +4556,10 @@ Resımi be tam asayış mocniyayê, tipê dosyaê bini be programê cıyo elaqed
 'specialpages-group-users' => 'Karber u heqqî',
 'specialpages-group-highuse' => 'Peleyê ke vêşi karênê',
 'specialpages-group-pages' => 'listeyanê pelan',
-'specialpages-group-pagetools' => 'Hacetê pelan',
+'specialpages-group-pagetools' => 'Haletê pelan',
 'specialpages-group-wiki' => 'Malumatê wiki u haceti',
 'specialpages-group-redirects' => 'Pela xasîyê ke heteneyayê',
-'specialpages-group-spam' => 'hacetê spami',
+'specialpages-group-spam' => 'haletê spami',
 
 # Special:BlankPage
 'blankpage' => 'Pela venge',
@@ -4013,7 +4577,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 
 # Special:Tags
 'tags' => 'Etiketê vurnayîşê raştî',
-'tag-filter' => '[[Special:Tags|Tag]] filitre:',
+'tag-filter' => 'Avrêcê [[Special:Tags|Etiketi]]:',
 'tag-filter-submit' => 'Avrêc',
 'tags-title' => 'Etiketan',
 'tags-intro' => 'Eno pel de listeyê eyiketî este ke belki software pê ey edit kenî.',
@@ -4109,6 +4673,10 @@ Ena sita dı newke xırabiya teknik esta.',
 'feedback-bugcheck' => 'Harika! Sadece [xırabina ke $1 ] çınyayışê cı kontrol keno.',
 'feedback-bugnew' => 'Mı qontrol ke. Xetaya newi xeber ke',
 
+# Search suggestions
+'searchsuggest-search' => 'Cı geyre',
+'searchsuggest-containing' => 'Estên...',
+
 # API errors
 'api-error-badaccess-groups' => 'Ena wiki de dosya barkerdışi rê mısade nêdeyêno.',
 'api-error-badtoken' => 'Xirabiya zerrek:Xırab resim.',
@@ -4161,4 +4729,6 @@ Ena sita dı newke xırabiya teknik esta.',
 'duration-centuries' => '$1 {{PLURAL:$1|seserre|seserri}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyum|milenyumi}}',
 
+# Unknown messages
+'bad-target-model' => 'Hedefo ke waştiyayo zerreke cı babetna model karneno. Ke nêşeno $1 ra açarno $2.',
 );
index 60acada..bf2393c 100644 (file)
@@ -316,7 +316,7 @@ $messages = array(
 'vector-action-protect' => 'Šćitaś',
 'vector-action-undelete' => 'Wótnowiś',
 'vector-action-unprotect' => 'Šćit změniś',
-'vector-simplesearch-preference' => 'Pólěpšone pytańske naraźenja zmóžniś (jano suknja Vector)',
+'vector-simplesearch-preference' => 'Zjadnorjonu pytańsku lejstwu zmóžniś (jano drastwa Vector)',
 'vector-view-create' => 'Napóraś',
 'vector-view-edit' => 'Wobźěłaś',
 'vector-view-history' => 'Wersije a awtory',
@@ -535,8 +535,10 @@ Wótpšašanje: $2',
 'protectedpagetext' => 'Wobźěłanje toś togo boka jo se znjemóžniło.',
 '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. Jogo wobźěłowanje jo se znjemóžniło, aby se znjewužywanjeju zadorało.',
-'editinginterface' => "'''Warnowanje:''' Wobźěłujoš bok, kótaryž se wužywa, aby se tekst za pówjerch software MediaWiki k dispoziciji stajił. Změny na toś tom boku buźo wuglědanje wužywarskego pówjercha za drugich wužywarjow wobwliwowaś. Wužywaj pšosym za pśełožki [//translatewiki.net/wiki/Main_Page?setlang=dsb translatewiki.net], projekt MediaWiki za lokalizacije.",
+'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.
+Aby pśełožki za wšykne wikije pśidał abo změnił, wužyj pšosym [//translatewiki.net/ translatewiki.net], lokalizěrowański projekt MediaWiki.',
+'editinginterface' => "'''Warnowanje:''' Wobźěłujoš bok, kótaryž se wužywa, aby se tekst za pówjerch software MediaWiki k dispoziciji stajił. Změny na toś tom boku buźo wuglědanje wužywarskego pówjercha za drugich wužywarjow na toś tom wikiju wobwliwowaś.
+Aby pśełožki za wšykne wikije pśidał abo změnił, wužywaj pšosym [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizacije.",
 'sqlhidden' => '(Wótpšašanje SQL schowane)',
 'cascadeprotected' => 'Za toś ten bok jo se wobźěłowanje znjemóžniło, dokulaž jo zawězany do {{PLURAL:$1|slědujucego boka|slědujuceju bokowu|slědujucych bokow}}, {{PLURAL:$1|kótaryž jo|kótarejž stej|kótarež su}} pśez kaskadowu opciju {{PLURAL:$1|šćitany|šćitanej|šćitane}}: $2',
 'namespaceprotected' => "Njejsy wopšawnjony, boki w rumje: '''$1''' wobźěłaś.",
@@ -560,7 +562,7 @@ Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
 # Login and logout pages
 'logouttext' => "'''Sy se něnto wótzjawił.'''
 
-Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš [[Special:UserLogin|se znowego pśizjawiś]] ako samski abo hynakšy wužywaŕ.
+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! ==
 
@@ -797,7 +799,7 @@ Aby bok napórał, zapiš do kašćika dołojce (glědaj [[{{MediaWiki:Helppage}
 'noarticletext' => 'Dotychměst toś ten bok hyšći njewopśimujo žeden tekst. Móžoš w drugich bokach [[Special:Search/{{PAGENAME}}|titel togo boka pytaś]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś] abo [{{fullurl:{{FULLPAGENAME}}|action=edit}} toś ten bok wobźěłaś]</span>.',
 'noarticletext-nopermission' => 'Tuchylu njejo žeden tekst na toś tom boku.
 Móžoš [[Special:Search/{{PAGENAME}}|toś ten bokowy titel]] na drugich bokach pytaś
-abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś]</span>.',
+abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś]</span>, ale njamaš pšawo, toś ten bok napóraś.',
 'missing-revision' => 'Wersija #$1 boka z mjenim "{{PAGENAME}}" njeeksistěrujo.
 
 Pśicyna jo zwětšego zestarjony wótkaz w historiji k bokoju, kótaryž jo se wulašował.
@@ -1051,7 +1053,9 @@ Pšosym pśeglědaj protokole.',
 'revdelete-only-restricted' => 'Zmólka pśi chowanju zapiska wót $2, $1; njamóžoš zapiski pśed wócami administratorow  pódtłocyś, mimo až teke wuběraš jadnu z drugich wiźobnosćowych opcijow.',
 'revdelete-reason-dropdown' => '*Zwucone pśicyny za wulašowanje
 ** Pśestupjenje awtorskego pšawa
-** Njegóźece se wósobinske informacije',
+** Njegóźece se komentary abo wósobinske informacije
+** Njegóźece se wužywarske mě
+** Potencielnje kśiwźece informacije',
 'revdelete-otherreason' => 'Druga/pśidatna pśicyna:',
 'revdelete-reasonotherlist' => 'Druga pśicyna',
 'revdelete-edit-reasonlist' => 'Pśicyny za lašowanje wobźěłaś',
@@ -1147,8 +1151,6 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-interwiki-caption' => 'Sotšine projekty',
 'search-interwiki-default' => '$1 wuslědki:',
 'search-interwiki-more' => '(wěcej)',
-'search-mwsuggest-enabled' => 'z naraźenjami',
-'search-mwsuggest-disabled' => 'žedne naraźenja',
 'search-relatedarticle' => 'swójźbne',
 'mwsuggest-disable' => 'Naraźenja pśez AJAX znjemóžniś',
 'searcheverything-enable' => 'We wšych mjenjowych rumach pytaś',
@@ -1244,7 +1246,7 @@ How jo pśipadnje napórana gódnota, kótaruž móžoš wužywaś: $1',
 'timezoneregion-indian' => 'Indiski ocean',
 'timezoneregion-pacific' => 'Pacifiski ocean',
 'allowemail' => 'Dostawanje e-mailow drugich wužywarjow zmóžniś.',
-'prefs-searchoptions' => 'PytaÅ\84ske opcije',
+'prefs-searchoptions' => 'PytaÅ\9b',
 'prefs-namespaces' => 'Mjenjowe rumy',
 'defaultns' => 'Howac w toś tych mjenjowych rumach pytaś:',
 'default' => 'Standard',
@@ -1663,7 +1665,7 @@ $1',
 'backend-fail-internal' => 'W składowańskem backenźe "$1" jo njeznata zmólka nastała.',
 'backend-fail-contenttype' => 'Wopśimjeśowy typ dataje, kótaraž ma se na "$1" składowaś, njedajo se zwěsćiś.',
 'backend-fail-batchsize' => 'Štapjelowa dataja, kótaraž wopśimujo {{PLURAL:$1|jadnu operaciju|$1 operaciji|$1 operacije|$1 operacijow}},  jo se  na składowański backend pósłała; limit jo $2 {{PLURAL:$1|operaciju|operaciji|operacije|operacijow}}.',
-'backend-fail-usable' => 'Dataja $1 njedajo se dla njedosegajucych  abo felujucych zapisow pisaś.',
+'backend-fail-usable' => 'Dataja "$1" njedajo se dla njedosegajucych  pšawow abo felujucych zapisow daniž cytaś daniž pisaś.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Njejo žeden zwisk ze žurnaloweju datoweju banku za składowański backend "$1" móžno.',
@@ -2736,7 +2738,6 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptowy test',
-'javascripttest-disabled' => 'Toś ta funkcija njejo na toś tom wikiju zmóžnjona.',
 'javascripttest-title' => 'Testy $1 se pśewjeduju',
 'javascripttest-pagetext-noframework' => 'Toś ten bok jo pśewjedowanjeju javascriptowych testow pśewóstajony.',
 'javascripttest-pagetext-unknownframework' => 'Njeznaty wobłuk "$1".',
@@ -2874,10 +2875,10 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-authors' => 'Cełkowna licba wšakich awtorow',
 'pageinfo-recent-edits' => 'Licba nejnowšych změnow (za zachadnych $1)',
 'pageinfo-recent-authors' => 'Nejnowša licba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Šćit boka (<code>$1</code>)',
 '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-toolboxlink' => 'Informacije wó boku',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -3446,6 +3447,7 @@ Toś ten wobkšuśeński kod płaśi až do $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Pśidawanje interwiki jo deaktiwěrowane]',
 'scarytranscludefailed' => '[Zapśěgnjenje pśedłogi za $1 njejo se raźiło]',
+'scarytranscludefailed-httpstatus' => '[Wótwołanje pśedłogi za $1 jo se njeraźiło: HTTP $2]',
 'scarytranscludetoolong' => '[URL jo pśedłujki]',
 
 # Delete conflict
@@ -3727,6 +3729,10 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'feedback-bugcheck' => 'Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].',
 'feedback-bugnew' => 'Som pśekontrolěrował. Nowu zmólku k wěsći daś',
 
+# Search suggestions
+'searchsuggest-search' => 'Pytaś',
+'searchsuggest-containing' => 'wopśimujo...',
+
 # API errors
 'api-error-badaccess-groups' => 'Njamaš pšawo dataje do toś togo wikija nagraś.',
 'api-error-badtoken' => 'Nutśikowna zmólka: Wopacny token',
index d32ea2b..c184f3d 100644 (file)
@@ -21,7 +21,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Lisoko idit tinamangan ih wagu kaalanai',
 'tog-newpageshidepatrolled' => 'Lisoko bolikon tinamangan mantad lis bolikon kawawagu',
 'tog-extendwatchlist' => 'Pointongo koinsanai listamangan do popokito koinsanai pinongundolihon, okon ko iri kawawagu nopo',
-'tog-usenewrc' => 'Gunao popoingkawas kaalanai kawawagu (momoguno JawaSikrip)',
+'tog-usenewrc' => 'Tinimungan nopingalanan maya bobolikon ii wagu kaalanai om lispintangan (momoguno JawaSikrip)',
 'tog-numberheadings' => 'oporian-mongonumbur it tuluhon',
 'tog-showtoolbar' => 'Pokitono kakamotbar mongidit (momoguno JawaSikrip)',
 'tog-editondblclick' => 'Idito bolikon momoguno induaan todos (momoguno JawaSikrip)',
@@ -29,20 +29,20 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Pabanaro sikson mongidit momoguno todos golibang id sikson tuluon (momoguno JawaSikrip)',
 'tog-showtoc' => 'Pokitono mija sinuang-suang (montok bolikon di kolobi do 3 tuluhon)',
 'tog-rememberpassword' => 'Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})',
-'tog-watchcreations' => 'Ruhangai bolikon di winonsoiku id lisintanganku',
-'tog-watchdefault' => 'Ruhangai bolikon di niditku id lisintanganku',
-'tog-watchmoves' => 'Ruhangai bolikon di pinawalihku id lisintanganku.',
-'tog-watchdeletion' => 'Ruhangai bolikon di pinugasku id lisintanganku',
+'tog-watchcreations' => 'Ruhangai bolikon di winonsoiku om nogi pail pinosuangku id lisintanganku',
+'tog-watchdefault' => 'Ruhangai bolikon om tangapail di niditku id lisintanganku',
+'tog-watchmoves' => 'Ruhangai bolikon om tangapail di pinawalihku id lisintanganku.',
+'tog-watchdeletion' => 'Ruhangai bolikon om tangapail di pinugasku id lisintanganku',
 'tog-minordefault' => 'Tandaai oinsanan niditan tokoro sobaagi do pongoiso',
 'tog-previewontop' => 'Pokitono duluon-kokikitanai id pogulu kutak idit',
 'tog-previewonfirst' => 'Pokitono duluon-kokikitanai di idit koinsan',
 'tog-nocache' => 'Antabai kasing popogigihum bolikon',
-'tog-enotifwatchlistpages' => 'Ponuratai-i doho soira do haro bolikon lisintanganku haro kowolion',
+'tog-enotifwatchlistpages' => 'Ponuratai-i oku soira do haro bolikon toi pail lisintanganku haro nokowolion',
 'tog-enotifusertalkpages' => 'Ponuratai-i oku soira kiharo kowolion id pibabarasan momomogunoku',
-'tog-enotifminoredits' => 'Ponuratai-i oku nogi do nung haro no idit tongokoro do bolikon',
+'tog-enotifminoredits' => 'Ponuratai-i oku nogi do nung haro no idit tongokoro do bolikon om nogi tangapail',
 'tog-enotifrevealaddr' => 'Pokitono adiris surat-i-ku id kapahabaran surat-i',
 'tog-shownumberswatching' => 'Pokitono ginumu do momomoguno minongintong',
-'tog-oldsig' => 'Poduluon kokikitanai do sain pinosuang',
+'tog-oldsig' => 'Sain poinsandad:',
 'tog-fancysig' => 'Pokitono sain sobaagi do tikwiki (ingaa oporian toput )',
 'tog-externaleditor' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
 'tog-externaldiff' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
@@ -140,6 +140,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'Mononoluod',
 'index-category' => 'Bolikon naka-abisi',
 'noindex-category' => 'Bolikon awu naka-abisi',
+'broken-file-category' => 'Bobolikon miampai pongoput pail do noputut',
 
 'about' => 'Kokomoi',
 'article' => 'Suang bolikon',
@@ -277,7 +278,11 @@ Intaai [[Special:Version|bolikon dinolinan]].',
 'youhavenewmessages' => 'Kiharo $1 montok dia ($2).',
 'newmessageslink' => 'pason kawawagu',
 'newmessagesdifflink' => 'naalanan kawawagu',
-'youhavenewmessagesmulti' => 'Kiharo pason kawawagu montok dia id $1',
+'youhavenewmessagesfromusers' => 'Nakaramit ko do $1 mantad {{PLURAL:$3|momomoguno suai|$3 tongomomomoguno}} ($2).',
+'youhavenewmessagesmanyusers' => 'Nakaramit koh do $1 mantad do tongomomomoguno ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|pason kawawagu|tangapason kawawagu}}',
+'newmessagesdifflinkplural' => 'dohuri do {{PLURAL:$1|naalanan|nopingalanan}}',
+'youhavenewmessagesmulti' => 'Kipason kawawagu montok dia id $1',
 'editsection' => 'idito',
 'editold' => 'idito',
 'viewsourceold' => 'intaai wowonod',
@@ -300,6 +305,8 @@ Intaai [[Special:Version|bolikon dinolinan]].',
 'page-rss-feed' => '"$1"  papababu RSS',
 'page-atom-feed' => '"$1" Papababu Atom',
 'red-link-title' => '$1 (bolikon awu poinsuang)',
+'sort-descending' => 'Uludo poinruhuk',
+'sort-ascending' => 'Uludo pointakad',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Bolikon',
@@ -329,9 +336,9 @@ Lis pointopot bobolikon pinatantu okito id [[Special:SpecialPages|{{int:specialp
 'dberrortext' => 'Nokosilap pogiuludan databing.
 Haro kaanto kutu id posuang-suangon.
 Tohuri pinokianu pogiuludan databing nopo nga:
-<blockquote><tt>$1</tt></blockquote>
-mantad suang momoguno  "<tt>$2</tt>".
-Databing nokosilap pinopoguli "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+mantad suang momoguno "<code>$2</code>".
+Databing nokosilap pinopoguli "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Haro kinosilapan pinongimuhatan sintak diri databing.
 Pinokianu databing di nokotohuri nopo nga:
 "$1"
@@ -367,34 +374,48 @@ Mangai poruputo iti hilod [[Special:ListUsers/sysop|mantatamong]], miampai nota
 'badarticleerror' => 'Awu milo momonsoi dino id bolikon diti.',
 'cannotdelete' => 'Iti bolikon toi pail "$1" awu milo pugason.
 Nopugas no kaanto do tulun suai.',
+'cannotdelete-title' => 'Awu milo pugason bolikon "$1"',
+'delete-hook-aborted' => 'Niditan pinaratu do kakait.
+Ingaa kointalangan narait.',
 'badtitle' => 'Sosomu tuluhon',
 'badtitletext' => 'Tuluhon bobolikon di pinokianu nopo nga nokosilap, aiso, nakasala pinioputan boros toi pinioputan tuluhon wiki.
 Haro kaanto sokukuri do iso pimato it awu milo gunoon id pongkotuluhon.',
-'perfcached' => 'Data sumusuhut namadangkob om okon ko noinwoguan. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Data sumusuhut namadangkob, om nopinwoguan ontok $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Data sumusuhut namadangkob om okon ko noinwoguan. Sokiginumu do  {{PLURAL:$1|iso asil|$1 tangahasil nopo nga}} haro id dangkob diti.',
+'perfcachedts' => 'Data sumusuhut namadangkob, om nopinwoguan ontok $1. Sokiginumu {{PLURAL:$4|iso asil|$4 tangahasil nopo nga}} haro id dangkob diti.',
 'querypage-no-updates' => 'Pinisok ponginwoguan id bolikon diti.
 Awu nodi posikapon do popointalang iri data kawawagu.',
 'wrong_wfQuery_params' => 'Nokosilap tangaparamito mongoi wfQuery()<br />
 Kopomogunoon: $1<br />
 Pongimuhatan: $2',
 'viewsource' => 'Intaai wowonod',
+'viewsource-title' => 'Intaai wowonod montok do $1',
 'actionthrottled' => 'Momilos',
 'actionthrottledtext' => 'Pinapanau lumawan-singkarap, Nantaban ko do mingguli momonsoi miagal dilo id timpu do osikap, om nagampot nu noh gisom diti.
 Umbalan kawagu do katalib poh pipiro minit.',
 'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pingiditan.',
 'viewsourcetext' => 'Pasagaon ko do mongintong om mangadalin wowonod diti bolikon:',
-'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.',
-'editinginterface' => "'''Panansarahan :''' Mongidit ko diti bolikon di gunoon do poposodia diri sinuratan montok posuang-suangon.
-Sinuratan id bolikon diti kopogoit do pongitanan  kourasan momoguno  montok momomoguno wokon.
-Montok pangawaliwboros, pomusarahai no do mongoguno [//translatewiki.net/wiki/Main_Page?setlang=dtp translatewiki.net], purujik popodusun ModiaWiki.",
+'viewyourtext' => "Milo nu do intangan om solinon ot wowonod '''niditannu''' id bolikon diti:",
+'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.
+Nung mongoruhang toi monimban do waliwboros tongowiki, mangai noh gunoo iri purujik popodusun do Modiawiki id [//translatewiki.net/ translatewiki.net].',
+'editinginterface' => "Panansarahan :''' Mongidit ko diti bolikon di gunoon do poposodia diri pongurasan montok posuang-suangon.
+Sinuratan id bolikon diti kopogoit do pongitanan  kourasan momoguno  montok momomoguno suai.
+Montok mongoruhang toi monimban do waliwboros, gunoo noh [//translatewiki.net/ translatewiki.net], purujik popodusun ModiaWiki.",
 'sqlhidden' => '(Pongimuhatan SQL poinlisok)',
 'cascadeprotected' => 'Notingoligan bolikon diti mantad do pingiditan tu nokosuang  id bolikon, {{PLURAL:$1 | do | it}} pinilian tingolig  "kasading" poinsikit:
 $2',
 'namespaceprotected' => "Ingaa kasagaannu do mongidit bobolikon it kinoingaran '''$1'''.",
 'customcssprotected' => 'Ingaa kasagaannu do mongidit diti bolikon CSS, tu kisuang ponguludan minsosondiri momoguno.',
+'customjsprotected' => 'Ingaa kasagaannu do mongidit diti bolikon JavaScript, tu kisuang ponguludan minsosondiri momoguno.',
 'ns-specialprotected' => 'Bolikon pinotontu awu milo iditon.',
 'titleprotected' => 'Notingoligan tuluhon diti mantad wonsoyon do [[User:$1|$1]].
 Sasabab no do "\'\'$2\'\'".',
+'filereadonlyerror' => 'Awu milo do simbanan pail "$1" tu pinogompi iti pail "$2" id mud do basaon noh tomod.
+
+Mongungulud di minongunsi pinopointalang do kointalangan diti: "$3".',
+'invalidtitle-knownnamespace' => 'Pogoduhan tuluhon kiruangaran "$2" om tiik "$3"',
+'invalidtitle-unknownnamespace' => 'Pogoduhan tuluhon it awu ointutunan ruangaran numbur $1 om tiik "$2"',
+'exception-nologin' => 'Amu nokolog sumuang',
+'exception-nologin-text' => 'Bolikon diti toi koimaan diti mumang do sumuang log koh id wiki diti.',
 
 # Virus scanner
 'virus-badscanner' => "Araat kinooturon: Awu otutunan pongkowili giuk: ''$1''",
@@ -404,7 +425,7 @@ Sasabab no do "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Baino nakalabus log ko noh.'''
 
-Milo ko do monilombus mongoguno {{SITENAME}} poinlisok, toi [[Special:UserLogin|sumuang log koh kawagu]] miagal ngaran di tiinu toi mongoguno ngaran suai.
+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.
@@ -415,6 +436,7 @@ Soroho no do mongolon [[Special:Preferences|{{SITENAME}} komoisoonnu]].',
 'remembermypassword' => 'Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})',
 'securelogin-stick-https' => 'Toririmo poinhubung hilo HTTPS soira kosuang log',
 'yourdomainname' => 'Damin nu:',
+'password-change-forbidden' => 'Awu koh kopongolon kaatalib id wiki diti.',
 'externaldberror' => 'Haro nokosilap pongintutunan bingdata toi awu ko pasagaon monginwagu takaun poinsoliwannu.',
 'login' => 'Sumuang log',
 'nav-login-createaccount' => 'Sumuang log / pomonsoi  do takaun',
@@ -448,7 +470,7 @@ Mangai papanaho ilo om umbalan kawagu.',
 Posikito no pogogonsoknu, gumulisuang id bolikon diti om umbalan kawagu.',
 'noname' => 'Awu nu pinosuang ngaran momomoguno di pasagaon.',
 'loginsuccesstitle' => 'Nokosuang log.',
-'loginsuccess' => "'''Awu kopo nokosuang log id {{SITENAME}} sobaagi do \"\$1\".'''",
+'loginsuccess' => "'''Nokosuang log ko noh id {{SITENAME}} sobaagi do \"\$1\".'''",
 'nosuchuser' => 'Ingaa momoguno pinungaranan "$1".
 Ngaran momoguno nopo nga kowoyo pimato.
 Intaai ijaannu, toi [[Special:UserLogin/signup|pomonsoi do takaun kawawagu]].',
@@ -489,6 +511,8 @@ Ingaa sinuratan-i pootodon montok nonggo-nonggo ilo komoyon sumusuhut.',
 'emailconfirmlink' => 'Pogiroto no surat-i nu.',
 'invalidemailaddress' => 'Awu aramit kinoyonon surat-i tu nokosilap nuludan.
 Maai posuango nuludan tosonong do kinoyonon toi pologoson do ingaa suang dilo posuangan.',
+'cannotchangeemail' => 'Porikatan surat-i do akaun diti awu milo do simbanan id wiki diti.',
+'emaildisabled' => 'Sosondoton diti awu awu kapaatod do tongosurat-i.',
 'accountcreated' => 'Nowonsoi takaun',
 'accountcreatedtext' => 'Momoguno takaun montok $1 nowonsoi noh.',
 'createaccount-title' => 'Winonsoi takaun montok {{SITENAME}}',
@@ -505,6 +529,7 @@ Andado poh do toruhai pogulu do minsingumbal kawagu.',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Awu nointutunan kinosilapan id don surat PHP () function',
+'user-mail-no-addy' => 'Mogumbal do papaatod surat-i tingaa o paatadan.',
 
 # Change password dialog
 'resetpass' => 'Alanai kaatalib',
@@ -526,11 +551,27 @@ Naalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.',
 'resetpass-temp-password' => 'Kaatalib daamot:',
 
 # Special:PasswordReset
+'passwordreset' => 'Pudoliai kawagu kaatalib',
+'passwordreset-text' => 'Gonopo poom diti do mangaramit tongosurat-i ponorou do nokomoi id akaun.',
+'passwordreset-legend' => 'Pudoliai kawagu kaatalib',
+'passwordreset-disabled' => 'Pomudolian kawagu do kaatalib kitaantob id wiki diti.',
 'passwordreset-username' => 'Ngarandait:',
 'passwordreset-emailtitle' => 'Kointalangan takaun id {{SITENAME}}',
+'passwordreset-emailelement' => 'Ngaranmoguno: $1
+Kaatalib daamot: $2',
+'passwordreset-emailsent' => 'Surat-i pononsorou nakaatod noh.',
+'passwordreset-emailsent-capture' => 'Surat-i pononsorou nakaatod noh, miagal id siriba diti.',
+'passwordreset-emailerror-capture' => 'Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1',
 
 # Special:ChangeEmail
+'changeemail' => 'Alanai porikatan surat-i',
+'changeemail-header' => 'Alanai akaun porikatan surat-i',
+'changeemail-text' => 'Gonopo poom diti do mongolon porikatan surat-i nuh. Mangai posuango kaatalibnu do papasaah di naalanan.',
 'changeemail-no-info' => 'Mositi sumuang log ko do mongoguno monilombus id bolikon diti.',
+'changeemail-oldemail' => 'Porikatan surat-i maso diti:',
+'changeemail-newemail' => 'Porikatan surat-i it kawawagu:',
+'changeemail-none' => '(ingaa)',
+'changeemail-submit' => 'Alanai surat-i',
 'changeemail-cancel' => 'Kinsilo',
 
 # Edit page toolbar
@@ -563,7 +604,7 @@ Naalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.',
 'showdiff' => 'Pokitono nokowolion',
 'anoneditwarning' => "'''Woning:''' Awu ko poinlog sumuang.
 Nantadon IPnu maan podolino id susuyan bolikon nidit do hiti.",
-'anonpreviewwarning' => "''Awu ko poinsuang log. Popogompi koponurat do kinoyonon IPnu id bobolikon susuyan niditan.''",
+'anonpreviewwarning' => "''Awu ko poinsuang log. Popogompi do sinuratan koponurat do kinoyonon IPnu id bobolikon susuyan niditan.''",
 'missingsummary' => "'''Panansarahan:''' Awu nu nosuratan hilo id koinibaan niditan.
 Nung todosonnu \"{{int:savearticle}}\" kawagu, kogompi niditannu nga ingaa koinibaan.",
 'missingcommenttext' => 'Mangai gia posuango pason id siriba.',
@@ -619,23 +660,27 @@ Kaatalib montok akaun wagu milo do alanan hilo id bolikon ''[[Special:ChangePass
 'newarticletext' => "Nakatanudko di noputan kumaa di bolikon di awu po nokosuang.
 Momonsoi ko nopo do bolikon diti, timpuun do manaip id kutak siriba (intaai [[{{MediaWiki:Helppage}}|bolikon ponokodung]] montok lobi gumu kointalangan).
 Nung nakaansau ko do hiti, tonsoko ot butang '''gumuli''' id pogigihumnu.",
+'anontalkpagetext' => "----''Iti nopo nga bolikon pogibabarasan montok di momomoguno poinlisok it awu poh nokopomonsoi do takaun, toi it awu momoguno dilo.
+Mantad dilo, asansagan yahai do poposurat numbur kinoyonon IP do mongintutun dau.
+Kinoyonon IP pogialasan do pipiro momomoguno.
+Nung momomoguno koh do ingaa ngaran om karamit koh do komin di awu kapadan, mangai [[Special:UserLogin/signup|wonsoyo takaun]] toi [[Special:UserLogin|sumuang log]] do magalai kounsuhan di momomoguno suai di tingaa ngaran.''",
 'noarticletext' => 'Maso po do ingaa tik id bolikon diti.
 Milo ko nogi do [[Special:Search/{{PAGENAME}}|mogihum do tuluhon bolikon diti]] id bolikon suai,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log],
 toi [{{fullurl:{{FULLPAGENAME}}|action=edit}} mongidit bolikon diti]</span>.',
 'noarticletext-nopermission' => 'Maso po do ingaa tik id bolikon diti.
 Milo ko nogi do [[Special:Search/{{PAGENAME}}|mogihum do tuluhon bolikon diti]] id bolikon suai, toi
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log] </span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log] </span>, nga ingaa kapasagaannu do momonsoi do bolikon diti.',
 'userpage-userdoesnotexist' => 'Akaun momomoguno "<nowiki>$1</nowiki>" awu nokorijisto.
 Mangai intangai nung mumang ko pomonsoi/mongidit do bolikon diti.',
 'userpage-userdoesnotexist-view' => 'Akaun momomoguno "$1" awu po nokorijisto.',
 'blocked-notice-logextract' => 'Maso do nantaban momomoguno diti.
 Riporon id siriba kokomoi nantaban di tohuri no:',
 'clearyourcache' => "'''Soroho:''' Opongoh do pogompi, mangai  pawayao dangkob pogigihumnu do mongintong di nopingalanan.
-'''Mozilla / Firefox / Safari:''' todoso ''Shift'' maso do mongotik ''Reload'', toi piandadon mononsok ''Ctrl-F5'' toi ''Ctrl-R'' (''Command-R'' id Mac);
-'''Konqueror:''' kotiko ''Reload'' toi tonsoko ''F5'';
-'''Opera:''' imuhawai id dangkob  ''Tools → Preferences'';
-'''Internet Explorer:''' todoso ''Ctrl'' maso do mongotik ''Refresh,'' toi tonsoko ''Ctrl-F5''.",
+'''Firefox / Safari:''' Pointodos ''Shift'' maso do mongotik ''Reload'', toi piandadon mononsok ''Ctrl-F5'' toi ''Ctrl-R'' (''⌘-R'' id Mac);
+'''Google Chrome:''' Todoso ''Ctrl-Shift-R'' (''⌘-Shift-R'' id Mac)
+'''Internet Explorer:''' Todoso ''Ctrl'' maso do mongotik ''Refresh,'' toi tonsoko ''Ctrl-F5''
+'''Opera:''' Imuhawai id dangkob  ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Tutuduk:''' Momoguno do \"{{int:showpreview}}\" butang do mongumbal CSS kawawagunu pogulu do popogompi.",
 'userjsyoucanpreview' => "'''Tutuduk:''' Momoguno do \"{{int:showpreview}}\" butang do mongumbal JawaSikrip kawawagunu pogulu do popogompi.",
 'usercsspreview' => "'''Soroho no do mongintong kono tomod diti CSS momogunonu.'''
@@ -650,8 +695,9 @@ Riporon id siriba kokomoi nantaban di tohuri no:',
 Bobolikon pinudali .css om .js momoguno do pimato tokoro, miagal pomitanan {{ns:user}}:Foo/vector.css sobaagi do ponuli di {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Noinwoguan)',
 'note' => "'''Pasoniba:'''",
-'previewnote' => "'''Soroho no do iti nopo nga pongintangan no toomod.'''
+'previewnote' => "'''Soroho no do iti nopo nga kopongintangan toomod.'''
 Awu po moti nokogompi iri nopingalanannu!",
+'continue-editing' => 'Potilombuso do mongidit.',
 'previewconflict' => 'Miagal no diti pongitanan do tik id boogian kawas kutak pongiditan tik nung pilionnu do popogompi.',
 'session_fail_preview' => "'''Siou! Awu di dahai opongoh niditannu gisom no do natagakan data.'''
 Mangai umbalai kawagu.
@@ -710,6 +756,7 @@ Miagal do nopugas iti.',
 'edit-no-change' => 'Pinologos niditannu, tu ingaa nopingalanan id tik.',
 'edit-already-exists' => 'Awu owonsoi bolikon kawawagu.
 Haro no do pinsuang.',
+'defaultmessagetext' => 'Tik pason sandad',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Pomisunudan:''' Kisuang bolikon diti do nosontob ogumu kogunoon lolohou parsor.
@@ -762,32 +809,40 @@ Umbalai [[Special:Search|mogihum id wiki]] ot bolikon di kikohompiton.',
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-deleted-text-unhide' => "Sinimakan bolikon diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko poh do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-suppressed-text-unhide' => "Sinimakan bolikon diti '''nalapahan'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-deleted-text-view' => "Sinimakan bolikon diti '''nopugas'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-suppressed-text-view' => "Sinimakan bolikon diti '''nalapahan'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
 'rev-deleted-no-diff' => "Awu nu okito pisuaian diti tu iso mantad sinimakan diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
-'rev-deleted-unhide-diff' => "Iso mantad sinimakan bolikon diti '''nopugas'''.
+'rev-suppressed-no-diff' => "Awu ko milo do mongintong pisuaian tu iso mantad do sinimakan '''nopugas'''.",
+'rev-deleted-unhide-diff' => "Iso mantad pisuaian sinimakan bolikon diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-suppressed-unhide-diff' => "Iso mantad sinimakan pisuaian diti '''nalapahan'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log nalapahan].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-deleted-diff-view' => "Sinimakan pisuaian diti '''nopugas'''.
-Sobaagi do mongungulud milo ko do mongintong pisuaian diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
+Milo ko do mongintong pisuaian diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-suppressed-diff-view' => "Iso mantad sinimakan pisuaian diti '''nalapahan'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
 'rev-delundel' => 'pokitono/lisoko',
 'rev-showdeleted' => 'popointalang',
+'revisiondelete' => 'Pugaso/pogulio sinimakan',
+'revdelete-nooldid-title' => 'Poimpalid rikoton do sinimakan',
+'revdelete-nologtype-title' => 'Awu nonuan koula-laho log',
+'revdelete-nologtype-text' => 'Awu nu pinoilo ot koula-laho log montok koimaan diti.',
+'revdelete-nologid-title' => 'Log pinosuang napalid',
+'revdelete-nologid-text' => 'Awu nu pinatantu rikoton kinaantakan log do popowonsoi kopomogunaan toi suang pointantu awu poinsuang.',
 'revdelete-no-file' => 'Pail pinotontu awu poinsuang.',
 'revdelete-show-file-confirm' => 'Mongintong ko di sinimakan nopugas do pail  "<nowiki>$1</nowiki>" mantad $2 ontok $3?',
 'revdelete-show-file-submit' => 'O',
 'revdelete-selected' => "'''{{PLURAL:$2|Sinimakan pinili|Sinimakan nopili}} id [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Log kinaantakan nopili|Tongolog kinaantakan it nopili}}:'''",
 'revdelete-legend' => 'Uludo pogigihum pangangantob',
 'revdelete-hide-text' => 'Polisoko sinimakan tiik',
 'revdelete-hide-image' => 'Polisoko suang pail',
@@ -827,7 +882,8 @@ Maai intaai tongolog.',
 'revdelete-reason-dropdown' => '*Sasabab do pugason
 ** Awu katanud kooturan kuasamonsupu
 ** Pail ahaltinan di awu kosudong
-** Kopoilaan di popinraat do wokon',
+** Ngaranmoguno di awu kosudong
+** Kopoilaan di mongindaraat do wokon',
 'revdelete-otherreason' => 'Sabab suai/poinsungku:',
 'revdelete-reasonotherlist' => 'Sabab suai',
 'revdelete-edit-reasonlist' => 'Idito sasabab pinugas',
@@ -836,22 +892,41 @@ Maai intaai tongolog.',
 # Suppression log
 'suppressionlog' => 'Log nopinlasadan',
 'suppressionlogtext' => 'Id siriba diti nopo nga lis di nopinpugasan om tantob kohompit suang poinlisok mantad mandur.
-Intaai [[Special:BlockList|lis IP nantaban]] montok lis kawawagu karaja mogoduh om mangantob.',
+Intaai [[Special:BlockList|lis nantaban]] montok lis kawawagu karaja mogoduh om mangantob.',
 
 # History merging
+'mergehistory-from' => 'Wowonod bolikon:',
+'mergehistory-into' => 'Rikoton bolikon:',
+'mergehistory-list' => 'Susuyan niditan milo pisompuruon',
+'mergehistory-submit' => 'Pisompuruo sinimakan',
+'mergehistory-empty' => 'Inggaa sinimakan do milo pisompuruon',
+'mergehistory-success' => '$3 {{PLURAL:$3|sinimakan|tongosinimakan}} montok[[:$1]] nokopisompuru noh id [[:$2]].',
+'mergehistory-fail' => 'Awu milo do pisompuruon susuyan, mangai imuriai iri bolikon om nuludan do timpu.',
+'mergehistory-no-source' => 'Wowonod bolikon $1 awu poinsuang.',
+'mergehistory-no-destination' => 'Korikoton do bolikon $1 awu poinsuang.',
+'mergehistory-invalid-source' => 'Wowonod do bolikon mositi do tuluhon di asaah.',
+'mergehistory-invalid-destination' => 'Korkoton do bolikon mositi di tuluhon asaah.',
+'mergehistory-autocomment' => 'Popisompuru [[:$1]] miampai [[:$2]]',
+'mergehistory-comment' => 'Popisompuru [[:$1]] miampai [[:$2]]: $3',
+'mergehistory-same-destination' => 'Wowonod om korikoton do bolikon awu milo do miagal',
 'mergehistory-reason' => 'Sabab:',
 
 # Merge log
 'mergelog' => 'Log pinisompuru',
 'pagemerge-logentry' => 'pisompuruo [[$1]] sumuang id [[$2]] (sinimakan gisom do $3)',
 'revertmerge' => 'Kada piisoo',
+'mergelogpagetext' => 'Id siriba diti nopo nga lis kawawagu do pinisompuruan susuyan tiso-iso bolikon kumaa doid bolikon do suai.',
 
 # Diffs
 'history-title' => 'Susuyan sinimakan do "$1"',
+'difference-title' => 'Pinisuaian mantad sinimakan do "$1"',
+'difference-title-multipage' => 'Pinisuaian do bolikon "$1" om "$2"',
+'difference-multipage' => '(Pisuaian do tongobolikon)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Popitimbang sinimakan nopili',
 'showhideselectedversions' => 'Pokitono/polisoko sinimakan nopili',
 'editundo' => 'suguto mongidit',
+'diff-multi' => '({{PLURAL:$1|Iso sinimakan pintangaan|$1 tongosinimakan pintangaan}} di {{PLURAL:$2|iso momomoguno|$2 momomoguno}} awu pokitonon)',
 
 # Search results
 'searchresults' => 'Kootuson nihuman',
@@ -883,14 +958,13 @@ Intaai [[Special:BlockList|lis IP nantaban]] montok lis kawawagu karaja mogoduh
 'searchprofile-everything-tooltip' => 'Ihumo oinsanan suang (kohompit bobolikon bolotok)',
 'searchprofile-advanced-tooltip' => 'Pogihum momoguno pinotomod ngaran',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ka|$2 ka-ka}})',
+'search-result-category-size' => '{{PLURAL:$1|1 tutumanud|$1 tongotutumanud}} ({{PLURAL:$2|1 rapang katogori|$2 tangarapang katogori}}, {{PLURAL:$3|1 pail|$3 tangapail}})',
 'search-redirect' => '(potilombuso hilo $1)',
 'search-section' => '(bogian $1)',
 'search-suggest' => '$1 ot komoyonnu?',
 'search-interwiki-caption' => 'Taka do purujik',
 'search-interwiki-default' => 'Kootuson $1:',
 'search-interwiki-more' => '(lobi)',
-'search-mwsuggest-enabled' => 'miampai tua do tutok',
-'search-mwsuggest-disabled' => 'ingaa tua do tutok',
 'search-relatedarticle' => 'Kompinaian',
 'searcheverything-enable' => 'Pogihum momoguno oinsanan ngaran:',
 'searchrelated' => 'kompinaian',
@@ -926,13 +1000,47 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'prefs-edits' => 'Ginumu niditan:',
 'prefsnologin' => 'Amu nokolog sumuang',
 'changepassword' => 'Alanai kaatalib',
+'prefs-skin' => 'Kulit',
 'skin-preview' => 'Kokitanan',
 'datedefault' => 'Ingaa komoisoon',
+'prefs-datetime' => 'Haribulan om timpu',
 'prefs-rc' => 'Wagu kaalanai',
+'prefs-resetpass' => 'Alanai kaatalib',
+'prefs-changeemail' => 'Alanai porikatan surat-i',
+'prefs-rendering' => 'Kowoyowoyoon',
+'saveprefs' => 'Pogompio',
+'resetprefs' => 'Pugaso nalanan awu nogompi',
+'searchresultshead' => 'Ihumo',
+'prefs-searchoptions' => 'Ihumo',
+'prefs-namespaces' => 'Ponuratan ngaran',
 'youremail' => 'Surat-i:',
 'yourrealname' => 'Ngaran otopot:',
 'prefs-help-email' => 'Surat-i pasagaon do momili, nga gunoon iti montok do popoguli do kaatalib, nung olihuannu kaatalib',
 'prefs-help-email-others' => 'Milo nogi do momili ko nung mokiromut do tulun suai momoguno maya do noputan surat-i id bolikon momogunonu toi id bolikon bolotok. Awu iy pokitonon surat-i nu kumaa do momomoguno suai.',
+'prefs-advancedediting' => 'Pomilian pointilombus',
+'prefs-advancedrc' => 'Pomilian pointilombus',
+'prefs-advancedrendering' => 'Pomilian pointilombus',
+'prefs-advancedsearchoptions' => 'Pomilian pointilombus',
+'prefs-advancedwatchlist' => 'Pomilian pointilombus',
+'prefs-displayrc' => 'Pomilian pongitanan',
+'prefs-displaysearchoptions' => 'Pomilian pongitanan',
+'prefs-displaywatchlist' => 'Pomilian pongitanan',
+'prefs-diffs' => 'Pisuaian',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'Porikatan surat-i asaah',
+'email-address-validity-invalid' => 'Posuango porikatan surat-i di asaah',
+
+# User rights
+'userrights' => 'Ponguludan don momomoguna',
+'userrights-lookup-user' => 'Uludo tinimungan momomoguno',
+'userrights-user-editname' => 'Posuango ngaranmoguno:',
+'editusergroup' => 'Idito tinimungan momomoguno',
+'editinguser' => "Monimban kapasagaan don momomoguno '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Mongidit tinimungan momomoguno',
+'saveusergroups' => 'Pogompio tinimungan momomoguno',
+'userrights-groupsmember' => 'Tutumanud montok:',
+'userrights-groupsmember-auto' => 'Tutumanud toporian montok:',
 
 # Groups
 'group-sysop' => 'Mandur',
@@ -1110,6 +1218,7 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 # Watchlist
 'watchlist' => 'Lis piintanganku',
 'mywatchlist' => 'Lis piintanganku',
+'watchlistfor2' => 'Montok $1 $2',
 'addedwatchtext' => "Bolikon \"[[:\$1]]\" nokoruhang no id [[Special:Watchlist|lis piintangannu]].
 Kinaalanan id bolikon om kinoruhangan bolikon bolotok diti do maso dumontol maan posurato do hiti, om bolikon diti pokitonon do '''akapal''' id [[Special:RecentChanges|lis wagu kaalanai]] do poposikap mongintutun.",
 'removedwatchtext' => 'Bolikon "[[:$1]]" noidu no mantad [[Special:Watchlist|lis piintangannu]].',
index 8ba3464..bece75c 100644 (file)
@@ -57,200 +57,200 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-hideminor'    => 'ކުޑަ ކުޑަ އުނި އިތުރުތައް އެންމެފަހުގެ ބަދަލުތަކުގެ ލިސްޓުން ފޮރުއްވަވާ',
+'tog-hideminor' => 'ކުޑަ ކުޑަ އުނި އިތުރުތައް އެންމެފަހުގެ ބަދަލުތަކުގެ ލިސްޓުން ފޮރުއްވަވާ',
 'tog-ccmeonemails' => 'އަޅުގަނޑު އެހެން މެމްބަރުންނަށް ފޮނުވާ އީމެއިލްގެ ނަކަލެއް އަޅުގަނޑަށް ފޮނުވާ',
 
 'underline-always' => 'އަބަދުވެސް',
-'underline-never'  => 'ހަމަހިލާ ނޫން',
+'underline-never' => 'ހަމަހިލާ ނޫން',
 
 # 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'    => 'އޯގަސްޓް',
+'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'           => 'ޑިސެމްބަރ',
+'october-gen' => 'އޮކްޓޯބަރ',
+'november-gen' => 'ނޮވެމްބަރ',
+'december-gen' => 'ޑިސެމްބަރ',
+'jan' => 'ޖެނުއަރީ',
+'feb' => 'ފެބްރުއަރީ',
+'mar' => 'މާޗް',
+'apr' => 'އޭޕްރިލް',
+'may' => 'މެއި',
+'jun' => 'ޖޫން',
+'jul' => 'ޖުލައި',
+'aug' => 'އޯގަސްޓް',
+'sep' => 'ސެޕްޓެމްބަރ',
+'oct' => 'އޮކްޓޯބަރ',
+'nov' => 'ނޮވެމްބަރ',
+'dec' => 'ޑިސެމްބަރ',
 
 # Categories related messages
 'category_header' => 'ގިސްމު "$1" ގައިވާ މަޒުމޫނުތައް',
-'subcategories'   => 'ކުދިގިސްމުތައް',
-'category-empty'  => "''މި ގިސްމުގައި އެއްވެއސް ސަފްހާ އެއް އަދި އެއްވެސް ފައިލެއް ނުހިމެނެއެވެ.''",
-
-'about'      => 'ތާރަފު',
-'article'    => 'ފިހުރިސްތު ޞަފްޙާ',
-'newwindow'  => '(އާ ވިންޑޯ އެއް ހުޅުވޭނެއެވެ)',
-'cancel'     => 'މަންސޫހު',
-'mytalk'     => 'މަގޭ ވާހަކަ',
+'subcategories' => 'ކުދިގިސްމުތައް',
+'category-empty' => "''މި ގިސްމުގައި އެއްވެއސް ސަފްހާ އެއް އަދި އެއްވެސް ފައިލެއް ނުހިމެނެއެވެ.''",
+
+'about' => 'ތާރަފު',
+'article' => 'ފިހުރިސްތު ޞަފްޙާ',
+'newwindow' => '(އާ ވިންޑޯ އެއް ހުޅުވޭނެއެވެ)',
+'cancel' => 'މަންސޫހު',
+'mytalk' => 'މަގޭ ވާހަކަ',
 'navigation' => 'ސަމުގާ',
-'and'        => '&#32;އަދި',
+'and' => '&#32;އަދި',
 
 # Cologne Blue skin
-'qbfind'        => 'ހޯއްދަވާ',
-'qbedit'        => 'އުނިއިތުރުގެންނަވާ',
+'qbfind' => 'ހޯއްދަވާ',
+'qbedit' => 'އުނިއިތުރުގެންނަވާ',
 'qbpageoptions' => 'މި ޞަފްޙާ',
-'qbmyoptions'   => 'މަގޭ ސަފްހާ ތައް',
-
-'errorpagetitle'    => 'ކުށް',
-'returnto'          => 'އަނބުރާ $1 އަށް ވަޑައިގަންނަވާ!',
-'tagline'           => 'ވިކިޕީޑިއާ އިން',
-'help'              => 'އެހީ',
-'search'            => 'ހޯއްދަވާ',
-'go'                => 'ދުރުވޭ',
-'history'           => 'ޞަފްޙާގެ ތާރީހު',
-'history_short'     => 'ތާރީހު',
-'printableversion'  => 'ޗާޕަށްފަހި ނުސްހާ',
-'permalink'         => 'ދާއިމީ ފާލަން',
-'print'             => 'ޗާޕުކުރައްވާ',
-'edit'              => 'އުނިއިތުރު ގެންނަވާ',
-'editthispage'      => 'މި ޞަފްޙާއަށް އުނިއިތުރު ގެންނަވާ',
-'delete'            => 'ފޮހެލައްވާ',
-'deletethispage'    => 'މި ޞަފްޙާ ފޮހެލައްވާ',
-'protect'           => 'ދިފާއުކުރައްވާ',
-'protect_change'    => 'ބަދަލު ގެންނަވާ',
-'protectthispage'   => 'މި ޞަފްޙާ ދިފާއުކުރައްވާ',
-'unprotect'         => 'ދިފާއުކުރުން ހުއްޓަވާލައްވާ',
+'qbmyoptions' => 'މަގޭ ސަފްހާ ތައް',
+
+'errorpagetitle' => 'ކުށް',
+'returnto' => 'އަނބުރާ $1 އަށް ވަޑައިގަންނަވާ!',
+'tagline' => 'ވިކިޕީޑިއާ އިން',
+'help' => 'އެހީ',
+'search' => 'ހޯއްދަވާ',
+'go' => 'ދުރުވޭ',
+'history' => 'ޞަފްޙާގެ ތާރީހު',
+'history_short' => 'ތާރީހު',
+'printableversion' => 'ޗާޕަށްފަހި ނުސްހާ',
+'permalink' => 'ދާއިމީ ފާލަން',
+'print' => 'ޗާޕުކުރައްވާ',
+'edit' => 'އުނިއިތުރު ގެންނަވާ',
+'editthispage' => 'މި ޞަފްޙާއަށް އުނިއިތުރު ގެންނަވާ',
+'delete' => 'ފޮހެލައްވާ',
+'deletethispage' => 'މި ޞަފްޙާ ފޮހެލައްވާ',
+'protect' => 'ދިފާއުކުރައްވާ',
+'protect_change' => 'ބަދަލު ގެންނަވާ',
+'protectthispage' => 'މި ޞަފްޙާ ދިފާއުކުރައްވާ',
+'unprotect' => 'ދިފާއުކުރުން ހުއްޓަވާލައްވާ',
 'unprotectthispage' => 'މި ޞަފްޙާ ދިފާއުކުރުން ހުއްޓަވާލައްވާ',
-'newpage'           => 'އާ ސަފްޙާ',
-'talkpage'          => 'މި ސަފްޙާއާ މެދު ބަހުސްކުރައްވާ',
-'talkpagelinktext'  => 'ޚިޔާލު ސަފްޙާ',
-'specialpage'       => 'ހާއްސަ ޞަފްޙާ',
-'articlepage'       => 'ފިހުރިސްތު ޞަފްޙާ ބައްލަވާ',
-'talk'              => 'ބަހުސް',
-'views'             => 'ހިޔާލުފުޅުތައް',
-'toolbox'           => 'އަތްމަތީފޮށި',
-'userpage'          => 'މެންބަރުގެ ޞަފްޙާ ބައްލަވާ',
-'viewtalkpage'      => 'ބަހުސް ބައްލަވާ',
-'otherlanguages'    => 'އެހެން ބަސްބަހުން',
-'redirectedfrom'    => '(މިސްރާބުކުރެވުނީ $1 އިން)',
-'redirectpagesub'   => 'ޞަފްޙާގެ މިސްރާބު އައުކުރައްވާ',
-'lastmodifiedat'    => 'މި ޞަފްހާ އަށް އެންމެ ފަހުން ބަދަލެއް ގެނެވިފައިވަނީ $1، $2 ގައެވެ.',
-'protectedpage'     => 'ދިފާއުކުރެވިފައިވާ ޞަފްޙާ',
-'jumptosearch'      => 'ހޯއްދަވާ',
+'newpage' => 'އާ ސަފްޙާ',
+'talkpage' => 'މި ސަފްޙާއާ މެދު ބަހުސްކުރައްވާ',
+'talkpagelinktext' => 'ޚިޔާލު ސަފްޙާ',
+'specialpage' => 'ހާއްސަ ޞަފްޙާ',
+'articlepage' => 'ފިހުރިސްތު ޞަފްޙާ ބައްލަވާ',
+'talk' => 'ބަހުސް',
+'views' => 'ހިޔާލުފުޅުތައް',
+'toolbox' => 'އަތްމަތީފޮށި',
+'userpage' => 'މެންބަރުގެ ޞަފްޙާ ބައްލަވާ',
+'viewtalkpage' => 'ބަހުސް ބައްލަވާ',
+'otherlanguages' => 'އެހެން ބަސްބަހުން',
+'redirectedfrom' => '(މިސްރާބުކުރެވުނީ $1 އިން)',
+'redirectpagesub' => 'ޞަފްޙާގެ މިސްރާބު އައުކުރައްވާ',
+'lastmodifiedat' => 'މި ޞަފްހާ އަށް އެންމެ ފަހުން ބަދަލެއް ގެނެވިފައިވަނީ $1، $2 ގައެވެ.',
+'protectedpage' => 'ދިފާއުކުރެވިފައިވާ ޞަފްޙާ',
+'jumptosearch' => 'ހޯއްދަވާ',
 
 # 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:ތާރަފު',
-'copyright'            => 'ހުރިހާ މާއްދާއެއް $1 ގެ ދަށުން ލިބެން އެބަހުއްޓެވެ.',
-'copyrightpage'        => '{{ns:project}}:ނަކަލުކުރުމުގެހައްގު',
-'currentevents'        => 'ހިނގަމުންދާ ހާދިސާތައް',
-'disclaimers'          => 'އިއުލާނުތައް',
-'edithelp'             => 'ބަދަލުތައް ގެނައުމަށް އެހީ އެއް',
-'edithelppage'         => 'އެހީ: އުނިއިތުރު ގެންނެވުން',
-'helppage'             => 'Help:ފިހުރިސްތު',
-'mainpage'             => 'މައި ޞަފްޙާ',
+'aboutsite' => 'ވިކިޕީޑިއާ ގެ ތާރަފު',
+'aboutpage' => 'Project:ތާރަފު',
+'copyright' => 'ހުރިހާ މާއްދާއެއް $1 ގެ ދަށުން ލިބެން އެބަހުއްޓެވެ.',
+'copyrightpage' => '{{ns:project}}:ނަކަލުކުރުމުގެހައްގު',
+'currentevents' => 'ހިނގަމުންދާ ހާދިސާތައް',
+'disclaimers' => 'އިއުލާނުތައް',
+'edithelp' => 'ބަދަލުތައް ގެނައުމަށް އެހީ އެއް',
+'edithelppage' => 'އެހީ: އުނިއިތުރު ގެންނެވުން',
+'helppage' => 'Help:ފިހުރިސްތު',
+'mainpage' => 'މައި ޞަފްޙާ',
 'mainpage-description' => 'މައި ޞަފްޙާ',
-'portal'               => 'އާންމު ހޮޅުއަށި',
-'privacy'              => 'އަމިއްލަވަންތަ ސިޔާސަތު',
+'portal' => 'އާންމު ހޮޅުއަށި',
+'privacy' => 'އަމިއްލަވަންތަ ސިޔާސަތު',
 
 'badaccess' => 'ހުއްދައިގެ ކުށެއް',
 
-'ok'              => 'ރަނގަޅު',
-'editsection'     => 'އުނިއިތުރު ގެންނަވާ',
+'ok' => 'ރަނގަޅު',
+'editsection' => 'އުނިއިތުރު ގެންނަވާ',
 'editsectionhint' => 'މަޒްމޫނުގެ $1 ބަޔަށް އުނިއިތުރު ގެންނަނީ',
-'toc'             => 'ފިހުރިސްތު',
-'showtoc'         => 'ދައްކަވާ',
-'hidetoc'         => 'ފޮރުއްވާ',
+'toc' => 'ފިހުރިސްތު',
+'showtoc' => 'ދައްކަވާ',
+'hidetoc' => 'ފޮރުއްވާ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'މަޒުމޫނު',
-'nstab-user'      => 'މެންބަރު ޞަފްޙާ',
-'nstab-special'   => 'ހާއްސަ',
+'nstab-main' => 'މަޒުމޫނު',
+'nstab-user' => 'މެންބަރު ޞަފްޙާ',
+'nstab-special' => 'ހާއްސަ',
 'nstab-mediawiki' => 'މެސެޖު',
-'nstab-template'  => 'ފަންވަތް',
-'nstab-category'  => 'ގިސްމު',
+'nstab-template' => 'ފަންވަތް',
+'nstab-category' => 'ގިސްމު',
 
 # General errors
-'error'         => 'ކުށް',
+'error' => 'ކުށް',
 'databaseerror' => 'ކޮށާރުގެ އޮޅުމެއް',
-'cannotdelete'  => 'ޞަފްޙާ ނުވަތަ ފައިލު ފޮހެއެއް ނުލެވުނު (ފަހަރެއްގައި މީގެ ކުރީން އެހެން ބޭފުޅަކު ފޮހެލެއްވީ ކަމަށް ވެދާނެ)',
-'badtitle'      => 'ނުރަނގަޅު ސުރުހީއެއް',
-'viewsource'    => 'މަސްދަރު ބައްލަވާ',
+'cannotdelete' => 'ޞަފްޙާ ނުވަތަ ފައިލު ފޮހެއެއް ނުލެވުނު (ފަހަރެއްގައި މީގެ ކުރީން އެހެން ބޭފުޅަކު ފޮހެލެއްވީ ކަމަށް ވެދާނެ)',
+'badtitle' => 'ނުރަނގަޅު ސުރުހީއެއް',
+'viewsource' => 'މަސްދަރު ބައްލަވާ',
 
 # Login and logout pages
-'welcomecreation'            => '== މަރުހަބާ، $1 ! ==
+'welcomecreation' => '== މަރުހަބާ، $1 ! ==
 ތިޔަބޭފުޅާގެ މެންބަރުޝިޕް ހެދިއްޖެއެވެ. ތިޔަ ބޭފުޅާގެ ވިކިޕީޑިއާގެ ތަރުޖީހުތައް ބަދަލުކުރައްވަން ހަނދުމަފުޅު ބަހައްޓަވާށެވެ.',
-'yourname'                   => 'މެންބަރުގެނަން',
-'yourpassword'               => 'ސިއްރުބަސް',
-'yourpasswordagain'          => 'ސިއްރުބަސް އަލުންލިޔުއްވާ',
-'login'                      => 'ވަދެވަޑައިގަންނަވާ',
-'userlogin'                  => 'ވަންނަވާ / މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
-'userlogout'                 => 'ބޭރަށް ވަޑައިގަންނަވާ',
-'nologin'                    => "މެމްބަރުކަން ހާސިލް ކުރައްވާފައި ނުވޭތޯ؟ '''$1'''",
-'nologinlink'                => 'މެމްބަރުކަން ހާސިލް ކުރައްވާ!',
-'createaccount'              => 'މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
-'badretype'                  => 'ތިޔަ ލިޔުއްވި ދެ ސިއްރުބަސް އެއް ސިއްރު ބަހާއި އަނެއް ސިއްރު ބަހާއި ދިމަލެއް ނުވޭ. އަދި ސިއްރުބަސް ރަނގަޅަށް ޖައްސަވާށެވެ!',
-'userexists'                 => 'ތިޔަ ލިޔުއްވި ނަން މިހާރުވެސް ދަނީ ބޭނުން ކުރެވެމުން، އައު ނަމެއް އިހުތިޔާރު ކުރައްވާ!',
-'wrongpassword'              => 'ތިޔަ ލިޔުއްވި ސިއްރުބަސް އަދި ރަނގަޅެއް ނޫނެވެ! އަދި މަސައްކަތް ކޮށްލައްވާށެވެ!',
-'wrongpasswordempty'         => 'ތިޔަ ލިޔުއްވި ސިއްރުބަހެއް ނޭނގުނު. އަލުން މަސައްކަތް ކޮށްލައްވާ!',
-'mailmypassword'             => 'ސިއްރުބަސް އީމޭލުކުރައްވާ',
+'yourname' => 'މެންބަރުގެނަން',
+'yourpassword' => 'ސިއްރުބަސް',
+'yourpasswordagain' => 'ސިއްރުބަސް އަލުންލިޔުއްވާ',
+'login' => 'ވަދެވަޑައިގަންނަވާ',
+'userlogin' => 'ވަންނަވާ / މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
+'userlogout' => 'ބޭރަށް ވަޑައިގަންނަވާ',
+'nologin' => "މެމްބަރުކަން ހާސިލް ކުރައްވާފައި ނުވޭތޯ؟ '''$1'''",
+'nologinlink' => 'މެމްބަރުކަން ހާސިލް ކުރައްވާ!',
+'createaccount' => 'މެންބަރަކަށް ވެ ވަޑައިގަންނަވާ',
+'badretype' => 'ތިޔަ ލިޔުއްވި ދެ ސިއްރުބަސް އެއް ސިއްރު ބަހާއި އަނެއް ސިއްރު ބަހާއި ދިމަލެއް ނުވޭ. އަދި ސިއްރުބަސް ރަނގަޅަށް ޖައްސަވާށެވެ!',
+'userexists' => 'ތިޔަ ލިޔުއްވި ނަން މިހާރުވެސް ދަނީ ބޭނުން ކުރެވެމުން، އައު ނަމެއް އިހުތިޔާރު ކުރައްވާ!',
+'wrongpassword' => 'ތިޔަ ލިޔުއްވި ސިއްރުބަސް އަދި ރަނގަޅެއް ނޫނެވެ! އަދި މަސައްކަތް ކޮށްލައްވާށެވެ!',
+'wrongpasswordempty' => 'ތިޔަ ލިޔުއްވި ސިއްރުބަހެއް ނޭނގުނު. އަލުން މަސައްކަތް ކޮށްލައްވާ!',
+'mailmypassword' => 'ސިއްރުބަސް އީމޭލުކުރައްވާ',
 'acct_creation_throttle_hit' => 'މާފު ކުރައްވާ، އެހެނީ ތިޔަބޭފުޅާ ވަނީ ކުރީއްސުރެ $1 މެންބަރުކަން ހޯއްދަވާފައި އެހެންވީމާ އިތުރަށް ލިބިވަޑައެއް ނުގަންނަވާނެ.',
 
 # Change password dialog
 'oldpassword' => 'ކުރީގެ ސިއްރުބަސް:',
 
 # Edit page toolbar
-'bold_sample'     => 'ބޯ އިބާރާތް',
-'bold_tip'        => 'ބޯ އިބާރާތް',
-'italic_sample'   => 'ކަތި އިބާރާތް',
-'italic_tip'      => 'ކަތި އިބާރާތް',
+'bold_sample' => 'ބޯ އިބާރާތް',
+'bold_tip' => 'ބޯ އިބާރާތް',
+'italic_sample' => 'ކަތި އިބާރާތް',
+'italic_tip' => 'ކަތި އިބާރާތް',
 'headline_sample' => 'ސުރުހީގެ އިބާރާތް',
 
 # Edit pages
-'summary'                  => 'ހުލާސާ:',
-'subject'                  => 'މާއްދާ/ސުރުހީ:',
-'minoredit'                => 'މިއީ ކުޑަކުޑަ އުނިއިތުރެކެވެ',
-'watchthis'                => 'މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
-'savearticle'              => 'ޞަފްޙާ ރައްކާކުރައްވާ',
-'preview'                  => 'ނަމޫނާ',
-'showpreview'              => 'ނަމޫނާ',
-'showdiff'                 => 'ބަދަލުތައް ދައްކަވާ',
-'anoneditwarning'          => "'''ސަމާލުކަމަށް:''' ތިޔަ ބޭފުޅާވަނީ ވިކިޕީޑިޔާގެ މެމްބަރެއްގެ ގޮތުގައި ވަދެ ވަޑައި ނުގަނެ. އެހެންކަމުން ތިޔަ '''އައި.ޕީ''' އެޑްރެސް މި ސަފްހާގެ ތާރީހުގައި ރެކޯޑު ކުރެވޭނެއެވެ.",
-'blockedtitle'             => 'މެންބަރާމެދު ވަނީ ފިޔަވަޅުއެޅިފައި',
-'blockedtext'              => "ތިޔަ މެމްބަރު، ނުވަތަ ތިޔަ ބޭފުޅާގެ އައި.ޕީ އެޑްރެސް ވަނީ ބްލޮކް ކުރެވިފައެވ
+'summary' => 'ހުލާސާ:',
+'subject' => 'މާއްދާ/ސުރުހީ:',
+'minoredit' => 'މިއީ ކުޑަކުޑަ އުނިއިތުރެކެވެ',
+'watchthis' => 'މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
+'savearticle' => 'ޞަފްޙާ ރައްކާކުރައްވާ',
+'preview' => 'ނަމޫނާ',
+'showpreview' => 'ނަމޫނާ',
+'showdiff' => 'ބަދަލުތައް ދައްކަވާ',
+'anoneditwarning' => "'''ސަމާލުކަމަށް:''' ތިޔަ ބޭފުޅާވަނީ ވިކިޕީޑިޔާގެ މެމްބަރެއްގެ ގޮތުގައި ވަދެ ވަޑައި ނުގަނެ. އެހެންކަމުން ތިޔަ '''އައި.ޕީ''' އެޑްރެސް މި ސަފްހާގެ ތާރީހުގައި ރެކޯޑު ކުރެވޭނެއެވެ.",
+'blockedtitle' => 'މެންބަރާމެދު ވަނީ ފިޔަވަޅުއެޅިފައި',
+'blockedtext' => "ތިޔަ މެމްބަރު، ނުވަތަ ތިޔަ ބޭފުޅާގެ އައި.ޕީ އެޑްރެސް ވަނީ ބްލޮކް ކުރެވިފައެވ
 
 މި އައި.ޕީ އެޑްރެސް ބްލޮކް ކުރީ $1 އެވެ.
 
@@ -264,66 +264,65 @@ $messages = array(
 
 ތިބޭފުޅޭގެ އައި.ޕީ އެޑް ރެސް އަކީ  $3 އެވެ.
 އަދި ބްލޮކް އައި.ޑީ އަކީ #$5 އެވެ.",
-'accmailtitle'             => 'ސިއްރުބަސް ފޮނުވިއްޖެ.',
-'accmailtext'              => '"$1" އަށްޓަކައިވާ ސިއްރު ބަސް $2 އަށް ވަނީ ފޮނުވިފައި',
-'newarticle'               => '(އައު)',
-'editing'                  => '$1 އަށް އުނިއިތުރު ގެންނަނީ',
-'editingsection'           => '$1 ގެ (ބަޔަކަށް) އުނި އިތުރު ގެންނަނީ',
-'editconflict'             => 'އުނިއިތުރުގެންނެވުމުގައި އަރާރުން: $1',
-'yourtext'                 => 'ތިޔބޭފުޅާގެ ލިޔުއްވުން',
-'yourdiff'                 => 'ތަފާތުތައް',
+'accmailtitle' => 'ސިއްރުބަސް ފޮނުވިއްޖެ.',
+'accmailtext' => '"$1" އަށްޓަކައިވާ ސިއްރު ބަސް $2 އަށް ވަނީ ފޮނުވިފައި',
+'newarticle' => '(އައު)',
+'editing' => '$1 އަށް އުނިއިތުރު ގެންނަނީ',
+'editingsection' => '$1 ގެ (ބަޔަކަށް) އުނި އިތުރު ގެންނަނީ',
+'editconflict' => 'އުނިއިތުރުގެންނެވުމުގައި އަރާރުން: $1',
+'yourtext' => 'ތިޔބޭފުޅާގެ ލިޔުއްވުން',
+'yourdiff' => 'ތަފާތުތައް',
 'semiprotectedpagewarning' => "'''ސަމާލުކަމަށް:''' މި ޞަފްހާވަނީ ދިފާއު ކުރެވިފައެވެ. އެހެންކަމުން މިސަފްޙާ އަށް އުނި އިތުރު ގެނެވޭނީ ހަމައެކަނި މެމްބަރުކަން ހާސިލް ކުރައްވާފައިވާ ބޭފުޅުންނަށެވެ!",
-'templatesused'            => 'މި ޞަފްޙާ ގައި ބޭނުން ކުރެވިފައިވާ ފަންވަތްތައް:',
+'templatesused' => 'މި ޞަފްޙާ ގައި ބޭނުން ކުރެވިފައިވާ ފަންވަތްތައް:',
 
 # History pages
 'next' => 'ކުރިޔަށް',
 
 # Diffs
-'difference'              => '(އިސްލާހުތަކުގައި ހުރި ފަރަގު)',
 'compareselectedversions' => 'އިހުތިޔާރު ކުރެވިފައިވާ ނުސްހާތައް އަޅައިކިޔުއްވާ',
 
 # Search results
-'viewprevnext'   => 'ބައްލަވާ($1 {{int:pipe-separator}} $2) ($3).',
+'viewprevnext' => 'ބައްލަވާ($1 {{int:pipe-separator}} $2) ($3).',
 'searchhelp-url' => 'Help:ފިހުރިސްތު',
 
 # Preferences page
-'preferences'    => 'ތަރުޖީހުތައް',
-'mypreferences'  => 'މަގޭ ތަރުޖީހުތައް',
+'preferences' => 'ތަރުޖީހުތައް',
+'mypreferences' => 'މަގޭ ތަރުޖީހުތައް',
 'changepassword' => 'ސިއްރުބަސް ބަދަލުކުރައްވާ',
-'columns'        => 'ކޮލަންތައް:',
-'prefs-files'    => 'ފައިލުތައް',
-'youremail'      => '٭ އީމޭލު',
-'username'       => 'މެންބަރުނަން:',
-'yourrealname'   => '* އަސްލު ނަން',
-'yourlanguage'   => 'ބަސް:',
-'yournick'       => 'ލަގަބު/ކުއްނިއްޔާ:',
-'email'          => 'އީމޭލު',
+'columns' => 'ކޮލަންތައް:',
+'prefs-files' => 'ފައިލުތައް',
+'youremail' => '٭ އީމޭލު',
+'username' => 'މެންބަރުނަން:',
+'yourrealname' => '* އަސްލު ނަން',
+'yourlanguage' => 'ބަސް:',
+'yournick' => 'ލަގަބު/ކުއްނިއްޔާ:',
+'email' => 'އީމޭލު',
 
 # User rights
-'userrights'               => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
+'userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
 'userrights-user-editname' => 'މެންބަރުނަން ލިޔުއްވާ:',
 
 # Recent changes
-'recentchanges'     => 'ފަހު ބަދަލުތައް',
-'recentchangestext' => 'މި ވިކިޕީޑިޔާ އަށް ގެނެވިފައިވާ އެންމެ ފަހުގެ ބަދަލުތައް މި ޞަފްހާ އިން ބައްލަވާ!',
-'diff'              => 'ފަރަގު',
-'hide'              => 'ފޮރުވާ',
-'show'              => 'ދައްކަވާ',
+'recentchanges' => 'ފަހު ބަދަލުތައް',
+'recentchanges-summary' => 'މި ވިކިޕީޑިޔާ އަށް ގެނެވިފައިވާ އެންމެ ފަހުގެ ބަދަލުތައް މި ޞަފްހާ އިން ބައްލަވާ!',
+'diff' => 'ފަރަގު',
+'hide' => 'ފޮރުވާ',
+'show' => 'ދައްކަވާ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'ގުޅުންހުރި ބަދަލުތައް',
-'recentchangeslinked-feed'    => 'ގުޅުންހުރި ބަދަލުތައް',
+'recentchangeslinked' => 'ގުޅުންހުރި ބަދަލުތައް',
+'recentchangeslinked-feed' => 'ގުޅުންހުރި ބަދަލުތައް',
 'recentchangeslinked-toolbox' => 'ގުޅުންހުރި ބަދަލުތައް',
 
 # Upload
-'upload'            => 'ފައިލު ފޮނުވާ',
-'uploadbtn'         => 'ފައިލު ފޮނުވާ',
-'filedesc'          => 'ހުލާސާ',
+'upload' => 'ފައިލު ފޮނުވާ',
+'uploadbtn' => 'ފައިލު ފޮނުވާ',
+'filedesc' => 'ހުލާސާ',
 'fileuploadsummary' => 'ހުލާސާ:',
-'filestatus'        => 'ނަކަލުކުރުމުގެހައްގުގެ ހާލަތު:',
-'filesource'        => 'މަސްދަރު:',
-'uploadedfiles'     => 'ފޮނުވިފައިވާ ފައިލުތައް',
-'uploadwarning'     => 'ފައިލުފޮނުއްވުމުގެ ކުރިން ދެވޭ އިންޒާރު',
+'filestatus' => 'ނަކަލުކުރުމުގެހައްގުގެ ހާލަތު:',
+'filesource' => 'މަސްދަރު:',
+'uploadedfiles' => 'ފޮނުވިފައިވާ ފައިލުތައް',
+'uploadwarning' => 'ފައިލުފޮނުއްވުމުގެ ކުރިން ދެވޭ އިންޒާރު',
 
 # Special:ListFiles
 'listfiles' => 'ފައިލުތަކުގެ ފިހުރިސްތު',
@@ -335,34 +334,34 @@ $messages = array(
 'randompage' => 'ކޮންމެވެސް ޞަފްޙާއެއް',
 
 # Statistics
-'statistics'              => 'ތަފާސްހިސާބުތައް',
+'statistics' => 'ތަފާސްހިސާބުތައް',
 'statistics-header-users' => 'މެންބަރުގެ ތަފާސްހިސާބު',
 
 'brokenredirects' => 'އޮޅިފައިވާ މިސްރާބުތައް',
 
 # Miscellaneous special pages
 'unusedcategories' => 'ބޭނުންނުކުރެވޭ ގިސްމުތައް',
-'unusedimages'     => 'ބޭނުންނުކުރެވޭ ފައިލުތައް',
+'unusedimages' => 'ބޭނުންނުކުރެވޭ ފައިލުތައް',
 'wantedcategories' => 'ބޭނުންފުޅުވާ ގިސްމުތައް',
-'wantedpages'      => 'ބޭނުންފުޅުވާ ޞަފްޙާތައް',
-'shortpages'       => 'ކުރު ޞަފްޙާތައް',
-'ancientpages'     => 'ބޯދާ ޞަފްޙާތައް',
-'move'             => 'ނަން/ތަން ބަދަލުކުރައްވާ',
-'movethispage'     => 'މި ޞަފްހާގެ ނަންބަދަލުކުރައްވާ',
+'wantedpages' => 'ބޭނުންފުޅުވާ ޞަފްޙާތައް',
+'shortpages' => 'ކުރު ޞަފްޙާތައް',
+'ancientpages' => 'ބޯދާ ޞަފްޙާތައް',
+'move' => 'ނަން/ތަން ބަދަލުކުރައްވާ',
+'movethispage' => 'މި ޞަފްހާގެ ނަންބަދަލުކުރައްވާ',
 
 # Book sources
 'booksources' => 'ފޮތްތަކުގެ މަސްދަރުތައް',
 
 # Special:AllPages
-'allpages'       => 'ހުރިހާ ޞަފްޙާތައް',
-'allarticles'    => 'ހުރިހާ މަޒުމޫނުތައް',
+'allpages' => 'ހުރިހާ ޞަފްޙާތައް',
+'allarticles' => 'ހުރިހާ މަޒުމޫނުތައް',
 'allinnamespace' => 'ހުރިހާ ޞަފްޙާތައް (ނުތުގު $1 ގައިވާ)',
-'allpagesprev'   => 'ކުރީގެ',
-'allpagesnext'   => 'ކުރިޔަށް އޮތް',
+'allpagesprev' => 'ކުރީގެ',
+'allpagesnext' => 'ކުރިޔަށް އޮތް',
 'allpagessubmit' => 'ދުރުވޭ',
 
 # Special:Categories
-'categories'         => 'ގިސްމުތައް',
+'categories' => 'ގިސްމުތައް',
 'categoriespagetext' => 'ތިރީގައި މިވާ ގިސްމުތައް ވިކީ ގައި މައުޖޫދުވެގެން ވެއެވެ.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
@@ -371,44 +370,44 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'emailuser' => 'މި މެންބަރަށް އީމޭލު ފޮނުއްވާ',
 
 # Watchlist
-'watchlist'         => 'މަގޭ ނަޒަރު',
-'addedwatchtext'    => "މި ޞަފްޙާ \"<nowiki>\$1</nowiki>\" ތިޔަބޭފުޅާގެ [[Special:Watchlist|ހާއްސަ ނަޒަރު]] ފިހުރިސްތަށް ލެވިއްޖެއެވެ. ދެން ކުރިމަގުގައި މި ޞަފްޙާ އަދި މިއާ ގުޅޭ ބަހުސް ގެ ޞަފްޙާ އަށް ގެނެވޭ އުނިއިތުރު ތަކުގެ މައުލޫމާތު މިޞަފްހާއަށް ލެވޭނެއެވެ. އަދި އެ ޞަފްޙާތަކުގެ ޝަނާހަތު ފަސޭހަ ކުރުމަށްޓަކައި [[Special:ފަހު ބަދަލުތައް|ފަހު ބަދަލުތަކުގެ ފިހުރިސްތު]] ގައި އެބައިތައް '''ބޯ''' (bold) އަކުރުން ލިޔެވޭނެއެވެ. <p> ކޮންމެ އިރަކުވެސް ތިޔަބޭފުޅާ ހާއްސަ ނަޒަރުގެ ފިހުރިސްތުން މި ޞަފްޙާ އުނިކުރައްވަން ބޭނުންފުޅިއްޔާ މަތީގައި ދެވިފައިވާ \"ހާއްސަ ނަޒަރުން އުނިކުރޭ\" ގައި ކޮއްޓަވާ ލައްވާށެވެ.",
-'watch'             => 'ނަޒަރުބަހައްޓަވާ',
-'watchthispage'     => 'މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
-'unwatch'           => 'ހާއްސަ ނަޒަރުން އުނިކުރޭ',
+'watchlist' => 'މަގޭ ނަޒަރު',
+'addedwatchtext' => "މި ޞަފްޙާ \"<nowiki>\$1</nowiki>\" ތިޔަބޭފުޅާގެ [[Special:Watchlist|ހާއްސަ ނަޒަރު]] ފިހުރިސްތަށް ލެވިއްޖެއެވެ. ދެން ކުރިމަގުގައި މި ޞަފްޙާ އަދި މިއާ ގުޅޭ ބަހުސް ގެ ޞަފްޙާ އަށް ގެނެވޭ އުނިއިތުރު ތަކުގެ މައުލޫމާތު މިޞަފްހާއަށް ލެވޭނެއެވެ. އަދި އެ ޞަފްޙާތަކުގެ ޝަނާހަތު ފަސޭހަ ކުރުމަށްޓަކައި [[Special:ފަހު ބަދަލުތައް|ފަހު ބަދަލުތަކުގެ ފިހުރިސްތު]] ގައި އެބައިތައް '''ބޯ''' (bold) އަކުރުން ލިޔެވޭނެއެވެ. <p> ކޮންމެ އިރަކުވެސް ތިޔަބޭފުޅާ ހާއްސަ ނަޒަރުގެ ފިހުރިސްތުން މި ޞަފްޙާ އުނިކުރައްވަން ބޭނުންފުޅިއްޔާ މަތީގައި ދެވިފައިވާ \"ހާއްސަ ނަޒަރުން އުނިކުރޭ\" ގައި ކޮއްޓަވާ ލައްވާށެވެ.",
+'watch' => 'ނަޒަރުބަހައްޓަވާ',
+'watchthispage' => 'މި ޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
+'unwatch' => 'ހާއްސަ ނަޒަރުން އުނިކުރޭ',
 'watchlistcontains' => 'ތިޔަބޭފުޅާގެ ހާއްސަ ނަޒަރު ފިހުރިސްތުގައި ވަނީ $1 ޞަފްޙާއެވެ.',
-'wlnote'            => 'ތިރީގައި މިވަނީ އެއީ ފާއިތުވި <b>$2</b> ގަޑި އިރުގެ ތެރޭގައިގެނެވިފައިވާ ފަހު $1 ބަދަލެވެ.',
+'wlnote' => 'ތިރީގައި މިވަނީ އެއީ ފާއިތުވި <b>$2</b> ގަޑި އިރުގެ ތެރޭގައިގެނެވިފައިވާ ފަހު $1 ބަދަލެވެ.',
 
 'changed' => 'ބަދަލުކުރެވިއްޖެ',
 
 # Delete
-'deletepage'        => 'ޞަފްޙާ ފޮހެލައްވާ',
-'confirm'           => 'ޔަގީން',
+'deletepage' => 'ޞަފްޙާ ފޮހެލައްވާ',
+'confirm' => 'ޔަގީން',
 'confirmdeletetext' => 'ތިޔަބޭފުޅާ ތިޔަ އުޅުއްވަނީ ޞަފްޙާއެއް ނުވަތަ ތަޞްވީރެއް އެއާ ގުޅިފައިވާ ހުރިހާ ތާރީހަކާއެކު ކޮށާރުން ފޮހެލައްވާށެވެ. މިކަން މިގޮތަށް ކުރައްވަން ބޭނުންފުޅުކަން ޔަގީން ކުރައްވާށެވެ. އަދި މިކަމުން ނުކުމެދާނެ ނަތީޖާއެއް ވެސް ތިޔަ ބޭފުޅާއަށް ރަނގަޅަށް އެނގިވަޑައިގަންނަވަންވާނެއެވެ. އަދި ތިޔަކަން ތިކުރެއްވެނީ [[{{MediaWiki:Policy-url}}|ވިކިޕީޑިއާ ގެ ސިޔާސަތާ]] އެއްގޮތަށްތޯ ވެސް ބައްލަވައި ޔަގީން ކުރައްވާށެވެ!',
-'actioncomplete'    => 'އަމަލު ފުރިހަމަވެއްޖެ',
-'deletecomment'     => 'ސަބަބު',
+'actioncomplete' => 'އަމަލު ފުރިހަމަވެއްޖެ',
+'deletecomment' => 'ސަބަބު',
 
 # Rollback
 'cantrollback' => 'އުނިއިތުރު އިއާދައެއް ނުކުރެވޭނެ؛ އެހެނީ އެންމެ ފަހު އުނިއިތުރުގައި ހިއްސާވި ފަރާތަކީ މިޞަފްޙާގެ ހަމައެކަނި މުއައްލިފެވެ.',
 
 # Protect
 'unprotectedarticle' => '"[[$1]]" ދިފާއުކުރުން ހުއްޓާލެވިއްޖެ',
-'prot_1movedto2'     => '[[$1]] އަށް ނަގުލުކުރެވިފައި [[$2]]',
+'prot_1movedto2' => '[[$1]] އަށް ނަގުލުކުރެވިފައި [[$2]]',
 
 # Restrictions (nouns)
 'restriction-edit' => 'އުނިއިތުރު ގެންނަވާ',
 
 # Undelete
-'undelete'        => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
+'undelete' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
 'viewdeletedpage' => 'ފޮހެލެވިފައިވާ ޞަފްޙާތައް ބައްލަވާ',
-'undeletebtn'     => 'އިއާދަ ކުރޭ!',
+'undeletebtn' => 'އިއާދަ ކުރޭ!',
 
 # Namespace form on various pages
 'blanknamespace' => '(މައި)',
 
 # Contributions
 'contributions' => 'މެންބަރު ގެ ހިއްސާ',
-'mycontris'     => 'މަގޭ ހިއްސާ',
+'mycontris' => 'މަގޭ ހިއްސާ',
 
 'sp-contributions-userrights' => 'މެންބަރުގެ ހައްގުތަކުގެ އިންތިޒާމް',
 
@@ -416,51 +415,51 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'whatlinkshere' => 'މިއާ ގުޅެނީ ކޮންއެއްޗެއް',
 
 # Block/unblock
-'blockip'           => 'މެންބަރާ މެދު ފިޔަވަޅުއަޅުއްވާ',
-'ipbreason'         => 'ސަބަބު',
-'ipbsubmit'         => 'މި މެމްބަރާއި މެދު ފިޔަވަޅު އަޅުއްވާ!',
-'badipaddress'      => 'ނުރަނގަޅު އައި.ޕީ އެޑްރެހެއް',
-'expiringblock'     => 'މުއްދަތު ހަމަވާނީ $1 $2',
-'blocklink'         => 'ފިޔަވަޅުއަޅުއްވާ',
-'contribslink'      => 'ޙިއްޞާ',
+'blockip' => 'މެންބަރާ މެދު ފިޔަވަޅުއަޅުއްވާ',
+'ipbreason' => 'ސަބަބު',
+'ipbsubmit' => 'މި މެމްބަރާއި މެދު ފިޔަވަޅު އަޅުއްވާ!',
+'badipaddress' => 'ނުރަނގަޅު އައި.ޕީ އެޑްރެހެއް',
+'expiringblock' => 'މުއްދަތު ހަމަވާނީ $1 $2',
+'blocklink' => 'ފިޔަވަޅުއަޅުއްވާ',
+'contribslink' => 'ޙިއްޞާ',
 'proxyblocksuccess' => 'ފުރިހަމަވެއްޖެ.',
 
 # Developer tools
-'lockdb'  => 'ކޮށާރު ބަންދުކުރައްވާ',
+'lockdb' => 'ކޮށާރު ބަންދުކުރައްވާ',
 'lockbtn' => 'ކޮށާރު ބަންދުކުރައްވާ',
 
 # Move page
-'move-page-legend'        => 'ޞަފްޙާގެ ނަން ބަދަލުކުރައްވާ',
-'movearticle'             => 'ޞަފްޙާގެ ނަން/ތަން ބަދަލުކުރައްވާ',
-'newtitle'                => 'އައު ނަމަކަށް',
-'move-watch'              => 'މި ޞަފްހާ އަށް ނަޒަރުބަހައްޓަވާ!',
-'movepagebtn'             => 'ޞަފްޙާގެނަން ބަދަލުކުރައްވާ',
-'articleexists'           => 'ތިޔަ ސުރުހީގައި ކުރީއްސުރެ ވެސް ޞަފްޙައެއް ވޭ، ނުވަތަ ތިޔަ އިހުތިޔާރުކުރެއްވި ނަން ރަނގަޅެއް ނޫން، ވީމާ އެހެން ނަމެއް އިހުތިޔާރުކުރެއްވުން އެދެވިގެންވެއެވެ.',
-'movedto'                 => 'އަށް ބަދަލުކުރެވިފައި',
-'movelogpagetext'         => 'ތިރީގައި މިވަނީ ނަން/ތަން ބަދަލުކުރެވިފައިވާ ޞަފްޙާތަކުގެ ފިހުރިސްތެކެވެ.',
-'movereason'              => 'ސަބަބު',
-'delete_and_move'         => 'ފޮހެލައްވާފައި އެހެންނަމަކަށްބަދަލުކުރައްވާ',
+'move-page-legend' => 'ޞަފްޙާގެ ނަން ބަދަލުކުރައްވާ',
+'movearticle' => 'ޞަފްޙާގެ ނަން/ތަން ބަދަލުކުރައްވާ',
+'newtitle' => 'އައު ނަމަކަށް',
+'move-watch' => 'މި ޞަފްހާ އަށް ނަޒަރުބަހައްޓަވާ!',
+'movepagebtn' => 'ޞަފްޙާގެނަން ބަދަލުކުރައްވާ',
+'articleexists' => 'ތިޔަ ސުރުހީގައި ކުރީއްސުރެ ވެސް ޞަފްޙައެއް ވޭ، ނުވަތަ ތިޔަ އިހުތިޔާރުކުރެއްވި ނަން ރަނގަޅެއް ނޫން، ވީމާ އެހެން ނަމެއް އިހުތިޔާރުކުރެއްވުން އެދެވިގެންވެއެވެ.',
+'movedto' => 'އަށް ބަދަލުކުރެވިފައި',
+'movelogpagetext' => 'ތިރީގައި މިވަނީ ނަން/ތަން ބަދަލުކުރެވިފައިވާ ޞަފްޙާތަކުގެ ފިހުރިސްތެކެވެ.',
+'movereason' => 'ސަބަބު',
+'delete_and_move' => 'ފޮހެލައްވާފައި އެހެންނަމަކަށްބަދަލުކުރައްވާ',
 'delete_and_move_confirm' => 'އާދެ، މި ޞަފްޙާ ފޮހެލައްވާ',
-'delete_and_move_reason'  => 'އެހެންނަމަކަށް ބަދަލުކުރުމަށްޓަކައި ފޮހެލެވިއްޖެ',
+'delete_and_move_reason' => 'އެހެންނަމަކަށް ބަދަލުކުރުމަށްޓަކައި ފޮހެލެވިއްޖެ',
 
 # Namespace 8 related
-'allmessages'        => 'ނިޒާމުގެ މެސެޖުތައް',
-'allmessagesname'    => 'ނަން',
+'allmessages' => 'ނިޒާމުގެ މެސެޖުތައް',
+'allmessagesname' => 'ނަން',
 'allmessagesdefault' => 'ކުރީގެ މަތަން',
 'allmessagescurrent' => 'މިހާރުގެ މަތަން',
 
 # Tooltip help for the actions
-'tooltip-pt-logout'  => 'ބޭރަށްވަޑައިގަންނަވާ',
+'tooltip-pt-logout' => 'ބޭރަށްވަޑައިގަންނަވާ',
 'tooltip-n-mainpage' => 'މައި ސަފްޙާއަށް ވަަޑައިގަންނަވާ',
 
 # Special:NewFiles
 'showhidebots' => '($1 ސެއްޓި)',
-'ilsubmit'     => 'ހޯއްދަވާ',
+'ilsubmit' => 'ހޯއްދަވާ',
 
 # EXIF tags
 'exif-imagedescription' => 'ތަސްވީރުގެ ސުރުހީ',
-'exif-artist'           => 'މުސައްނިފު',
-'exif-filesource'       => 'ފައިލުގެ މަސްދަރު',
+'exif-artist' => 'މުސައްނިފު',
+'exif-filesource' => 'ފައިލުގެ މަސްދަރު',
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-n' => 'ތަސްވީރުގެ ސުރުހީ',
index ad84110..8afc106 100644 (file)
@@ -27,220 +27,220 @@ $digitTransformTable = array(
 
 $messages = array(
 # 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'    => 'སྤྱི་ཟླ་ ༨ པའི་',
+'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'           => 'ཟླ་༡༢ པ།',
+'october-gen' => 'སྤྱི་ཟླ་ ༡༠ པའི་',
+'november-gen' => 'སྤྱི་ཟླ་ ༡༡ པའི་',
+'december-gen' => 'སྤྱི་ཟླ་ ༡༢ པའི་',
+'jan' => 'ཟླ་༡ པ།',
+'feb' => 'ཟླ་༢ པ།',
+'mar' => 'ཟླ་༣ པ།',
+'apr' => 'ཟླ་༤ པ།',
+'may' => 'ཟླ་༥ པ།',
+'jun' => 'ཟླ་༦ པ།',
+'jul' => 'ཟླ་༧ པ།',
+'aug' => 'ཟླ་༨ པ།',
+'sep' => 'ཟླ་༩ པ།',
+'oct' => 'ཟླ་༡༠ པ།',
+'nov' => 'ཟླ་༡༡ པ།',
+'dec' => 'ཟླ་༡༢ པ།',
 
 # Categories related messages
-'category_header'        => 'དབྱེ་རིམ་ "$1" ནང་གི་ཤོག་ལེབ་ཚུ།',
-'subcategories'          => 'ཡན་ལག་དབྱེ་རིམ།',
-'category-media-header'  => 'དབྱེ་རིམ་ \\"$1\\" ནང་གི་བརྡ་བརྒྱུད།',
-'category-empty'         => "''ད་ལྟོ་དབྱེ་རིམ་དེ་ནང་ ཤོག་ལེབ་དང་བརྡ་བརྒྱུད་ག་ནི་ཡང་མིན་འདུག།''",
+'category_header' => 'དབྱེ་རིམ་ "$1" ནང་གི་ཤོག་ལེབ་ཚུ།',
+'subcategories' => 'ཡན་ལག་དབྱེ་རིམ།',
+'category-media-header' => 'དབྱེ་རིམ་ \\"$1\\" ནང་གི་བརྡ་བརྒྱུད།',
+'category-empty' => "''ད་ལྟོ་དབྱེ་རིམ་དེ་ནང་ ཤོག་ལེབ་དང་བརྡ་བརྒྱུད་ག་ནི་ཡང་མིན་འདུག།''",
 'listingcontinuesabbrev' => 'འཕྲོ་མཐུད།',
 
-'about'     => 'སྐོར་ལས།',
+'about' => 'སྐོར་ལས།',
 'newwindow' => '(ཝིན་ཌོ་གསརཔ་ནང་ ཁ་ཕྱེཝ་ཨིན།)',
-'cancel'    => 'ཆ་མེད་གཏང་།',
-'mytalk'    => 'ངེ་གི་བློ།',
+'cancel' => 'ཆ་མེད་གཏང་།',
+'mytalk' => 'ངེ་གི་བློ།',
 
 # Cologne Blue skin
 'qbfind' => 'འཚོལ།',
 'qbedit' => 'ཞུན་དག',
 
-'errorpagetitle'   => 'འཛོལ་བ།',
-'returnto'         => '$1 ལུ་ལོག།',
-'tagline'          => '{{SITENAME}} ལས།',
-'help'             => 'གྲོགས་རམ།',
-'search'           => 'འཚོལ་ཞིབ།',
-'searchbutton'     => 'འཚོལ་ཞིབ།',
-'searcharticle'    => 'འགྱོ།',
-'history'          => 'ཤོག་ལེབ་སྤྱོད་ཤུལ།',
-'history_short'    => 'སྤྱོད་ཤུལ།',
+'errorpagetitle' => 'འཛོལ་བ།',
+'returnto' => '$1 ལུ་ལོག།',
+'tagline' => '{{SITENAME}} ལས།',
+'help' => 'གྲོགས་རམ།',
+'search' => 'འཚོལ་ཞིབ།',
+'searchbutton' => 'འཚོལ་ཞིབ།',
+'searcharticle' => 'འགྱོ།',
+'history' => 'ཤོག་ལེབ་སྤྱོད་ཤུལ།',
+'history_short' => 'སྤྱོད་ཤུལ།',
 'printableversion' => 'དཔར་བསྐྲུན་འབད་བཏུབ་པའི་ཐོན་རིམ།',
-'permalink'        => 'རྟག་བརྟན་འབྲེལ་ལམ།',
-'edit'             => 'ཞུན་དག།',
-'editthispage'     => 'ཤོག་ལེབ་འདི་ ཞུན་དག་འབད།',
-'delete'           => 'བཏོན་གཏང་།',
-'protect'          => 'ཉེན་སྐྱོབ།',
-'newpage'          => 'ཤོག་ལེབ་གསརཔ།',
-'talkpage'         => 'ཤོག་ལེབ་འདི་གྲོས་བསྡུར་འབད།',
+'permalink' => 'རྟག་བརྟན་འབྲེལ་ལམ།',
+'edit' => 'ཞུན་དག།',
+'editthispage' => 'ཤོག་ལེབ་འདི་ ཞུན་དག་འབད།',
+'delete' => 'བཏོན་གཏང་།',
+'protect' => 'ཉེན་སྐྱོབ།',
+'newpage' => 'ཤོག་ལེབ་གསརཔ།',
+'talkpage' => 'ཤོག་ལེབ་འདི་གྲོས་བསྡུར་འབད།',
 'talkpagelinktext' => 'བློ།',
-'personaltools'    => 'རང་དོན་ལག་ཆས།',
-'talk'             => 'གྲོས་བསྡུར།',
-'views'            => 'མཐོང་སྣང་།',
-'toolbox'          => 'ལག་ཆས་སྒྲོམ།',
-'redirectedfrom'   => '($1 ལས་ ལོག་བཏང་ཡོདཔ་)',
-'redirectpagesub'  => 'ཤོག་ལེབ་སླར་ལོག་འབད།',
-'jumpto'           => 'འཕྲོ་མཐུད་འགྱོ་:',
+'personaltools' => 'རང་དོན་ལག་ཆས།',
+'talk' => 'གྲོས་བསྡུར།',
+'views' => 'མཐོང་སྣང་།',
+'toolbox' => 'ལག་ཆས་སྒྲོམ།',
+'redirectedfrom' => '($1 ལས་ ལོག་བཏང་ཡོདཔ་)',
+'redirectpagesub' => 'ཤོག་ལེབ་སླར་ལོག་འབད།',
+'jumpto' => 'འཕྲོ་མཐུད་འགྱོ་:',
 'jumptonavigation' => 'འཛུལ་འགྱོ་',
-'jumptosearch'     => 'འཚོལ་ཞིབ།',
+'jumptosearch' => 'འཚོལ་ཞིབ།',
 
 # 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:སྐོར་ལས།',
-'copyrightpage'        => '{{ns:project}}:འདྲ་བཤུས་འབད་ཆ།',
-'currentevents'        => 'ད་ལྟོའི་བྱུང་ལས།',
-'currentevents-url'    => 'Project:ད་ལྟོའི་བྱུང་ལས།',
-'disclaimers'          => 'ཁས་མི་ལེན་པ།',
-'disclaimerpage'       => 'Project: སྤྱིར་བཏང་ཁས་མི་ལེན་པ།',
-'edithelp'             => 'ཞུན་དག་གྲོགས་རམ།',
-'edithelppage'         => 'Help: ཞུན་དག།',
-'helppage'             => 'Help:ནང་དོན།',
-'mainpage'             => 'མ་ཤོག།',
+'aboutsite' => '{{SITENAME}} གི་སྐོར་ལས།',
+'aboutpage' => 'Project:སྐོར་ལས།',
+'copyrightpage' => '{{ns:project}}:འདྲ་བཤུས་འབད་ཆ།',
+'currentevents' => 'ད་ལྟོའི་བྱུང་ལས།',
+'currentevents-url' => 'Project:ད་ལྟོའི་བྱུང་ལས།',
+'disclaimers' => 'ཁས་མི་ལེན་པ།',
+'disclaimerpage' => 'Project: སྤྱིར་བཏང་ཁས་མི་ལེན་པ།',
+'edithelp' => 'ཞུན་དག་གྲོགས་རམ།',
+'edithelppage' => 'Help: ཞུན་དག།',
+'helppage' => 'Help:ནང་དོན།',
+'mainpage' => 'མ་ཤོག།',
 'mainpage-description' => 'མ་ཤོག།',
-'portal'               => 'མི་སྡེའི་སྒོ་ར།',
-'portal-url'           => 'Project:མི་སྡེའི་སྒོ་ར།',
-'privacy'              => 'སྒེར་གསང་སྲིད་བྱུས།',
-'privacypage'          => 'Project:སྒེར་གསང་སྲིད་བྱུས།',
-
-'retrievedfrom'       => '"$1" ལས་ སླར་འདྲེན་འབད་ཡོདཔ།',
-'youhavenewmessages'  => 'ཁྱོད་ལུ་ $1 ($2) འདུག།',
-'newmessageslink'     => 'འཕྲིན་དོན་གསརཔ།',
+'portal' => 'མི་སྡེའི་སྒོ་ར།',
+'portal-url' => 'Project:མི་སྡེའི་སྒོ་ར།',
+'privacy' => 'སྒེར་གསང་སྲིད་བྱུས།',
+'privacypage' => 'Project:སྒེར་གསང་སྲིད་བྱུས།',
+
+'retrievedfrom' => '"$1" ལས་ སླར་འདྲེན་འབད་ཡོདཔ།',
+'youhavenewmessages' => 'ཁྱོད་ལུ་ $1 ($2) འདུག།',
+'newmessageslink' => 'འཕྲིན་དོན་གསརཔ།',
 'newmessagesdifflink' => 'བསྒྱུར་བཅོས་མཇུག།',
-'editsection'         => 'ཞུན་དག།',
-'editold'             => 'ཞུན་དག།',
-'editsectionhint'     => 'དབྱེ་ཚན་:$1 ཞུན་དག་འབད།',
-'toc'                 => 'ནང་དོན།',
-'showtoc'             => 'སྟོན།',
-'hidetoc'             => 'སྦ།',
-'site-rss-feed'       => '$1 ཨར་ཨེསི་ཨེསི་ འབྱུང་ས།',
-'site-atom-feed'      => '$1 ཨེ་ཊོམ་ འབྱུང་ས།',
-'page-rss-feed'       => '"$1" ཨར་ཨེསི་ཨེསི་འབྱུང་ས།',
+'editsection' => 'ཞུན་དག།',
+'editold' => 'ཞུན་དག།',
+'editsectionhint' => 'དབྱེ་ཚན་:$1 ཞུན་དག་འབད།',
+'toc' => 'ནང་དོན།',
+'showtoc' => 'སྟོན།',
+'hidetoc' => 'སྦ།',
+'site-rss-feed' => '$1 ཨར་ཨེསི་ཨེསི་ འབྱུང་ས།',
+'site-atom-feed' => '$1 ཨེ་ཊོམ་ འབྱུང་ས།',
+'page-rss-feed' => '"$1" ཨར་ཨེསི་ཨེསི་འབྱུང་ས།',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-user'     => 'ལག་ལེན་པའི་ཤོག་ལེབ།',
-'nstab-project'  => 'ལས་འགུལ་ཤོག་ལེབ།',
-'nstab-image'    => 'ཡིག་སྣོད།',
+'nstab-user' => 'ལག་ལེན་པའི་ཤོག་ལེབ།',
+'nstab-project' => 'ལས་འགུལ་ཤོག་ལེབ།',
+'nstab-image' => 'ཡིག་སྣོད།',
 'nstab-template' => 'ཊེམ་པེལེཊི།',
 'nstab-category' => 'དབྱེ་རིམ།',
 
 # General errors
-'badtitle'       => 'མགོ་མིང་བྱང་ཉེས།',
-'badtitletext'   => 'ཞུ་བ་འབད་ཡོད་པའི་ཤོག་ལེབ་མགོ་མིང་འདི་ ནུས་མེད་ སྟོངམ་ ཡང་ན་ བདེན་མེད་འབྲེལ་མཐུད་ཅན་གྱི་ནང་ཁུལ་-སྐད་ཡིག་ ཡངན་ ནང་ཁུལ་-ཝི་ཀི་མགོ་མིང་ཨིན་པས། དེ་ནང་ མགོ་མིང་ནང་ལུ་ལག་ལེན་འཐབ་མ་བཏུབ་པའི་ཡིག་འབྲུ་གཅིག་ ཡང་ན་ ལེ་ཤ་ཡོདཔ་འོང་།',
-'viewsource'     => 'འབྱུང་ས་སྟོན།',
+'badtitle' => 'མགོ་མིང་བྱང་ཉེས།',
+'badtitletext' => 'ཞུ་བ་འབད་ཡོད་པའི་ཤོག་ལེབ་མགོ་མིང་འདི་ ནུས་མེད་ སྟོངམ་ ཡང་ན་ བདེན་མེད་འབྲེལ་མཐུད་ཅན་གྱི་ནང་ཁུལ་-སྐད་ཡིག་ ཡངན་ ནང་ཁུལ་-ཝི་ཀི་མགོ་མིང་ཨིན་པས། དེ་ནང་ མགོ་མིང་ནང་ལུ་ལག་ལེན་འཐབ་མ་བཏུབ་པའི་ཡིག་འབྲུ་གཅིག་ ཡང་ན་ ལེ་ཤ་ཡོདཔ་འོང་།',
+'viewsource' => 'འབྱུང་ས་སྟོན།',
 'viewsourcetext' => 'ཁྱོད་ཀྱིས་ ཤོག་ལེབ་འདི་གི་འབྱུང་ས་བལྟ་བཏུབ་པའི་ཁར་ འདྲ་བཤུས་ཡང་རྐྱབ་བཏུབ་ཨིན་:',
 
 # Login and logout pages
-'yourname'                => 'ལག་ལེན་པའི་མིང་:',
-'yourpassword'            => 'ཆོག་ཡིག:',
-'remembermypassword'      => 'གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                   => 'ནང་བསྐྱོད།',
+'yourname' => 'ལག་ལེན་པའི་མིང་:',
+'yourpassword' => 'ཆོག་ཡིག:',
+'remembermypassword' => 'གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'ནང་བསྐྱོད།',
 'nav-login-createaccount' => 'ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།',
-'loginprompt'             => '{{SITENAME}} ནང་ལུ་ ནང་བསྐྱོད་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་ ཀུ་ཀིསི་འདི་ལྕོགས་ཅན་བཟོ་དགོ།',
-'userlogin'               => 'ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།',
-'logout'                  => 'ཕྱིར་བསྐྱོད།',
-'userlogout'              => 'ཕྱིར་བསྐྱོད།',
-'nologin'                 => "ནང་བསྐྱོད་མེད་ག? '''$1'''",
-'nologinlink'             => 'རྩིས་ཐོ་གསརཔ་བཟོ།',
-'createaccount'           => 'རྩིས་ཐོ་གསརཔ་བཟོ།',
-'gotaccount'              => "ཧེ་མ་ལས་རྩིས་ཐོ་ཡོད་ག? '''$1'''",
-'gotaccountlink'          => 'ནང་བསྐྱོད།',
-'loginsuccesstitle'       => 'ནང་བསྐྱོད་ལེགས་ཤོམ་འབད་ཡོདཔ།',
-'loginsuccess'            => "'''ད་འབདན་ཁྱོད་  {{SITENAME}} ནང་ \"\$1\" སྦེ་ ནང་བསྐྱོད་འབད་ཡོདཔ།'''",
-'nosuchuser'              => 'མིང་ "$1" བཟུམ་གྱི་ལག་ལེན་པ་མེད།
+'loginprompt' => '{{SITENAME}} ནང་ལུ་ ནང་བསྐྱོད་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་ ཀུ་ཀིསི་འདི་ལྕོགས་ཅན་བཟོ་དགོ།',
+'userlogin' => 'ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།',
+'logout' => 'ཕྱིར་བསྐྱོད།',
+'userlogout' => 'ཕྱིར་བསྐྱོད།',
+'nologin' => "ནང་བསྐྱོད་མེད་ག? '''$1'''",
+'nologinlink' => 'རྩིས་ཐོ་གསརཔ་བཟོ།',
+'createaccount' => 'རྩིས་ཐོ་གསརཔ་བཟོ།',
+'gotaccount' => "ཧེ་མ་ལས་རྩིས་ཐོ་ཡོད་ག? '''$1'''",
+'gotaccountlink' => 'ནང་བསྐྱོད།',
+'loginsuccesstitle' => 'ནང་བསྐྱོད་ལེགས་ཤོམ་འབད་ཡོདཔ།',
+'loginsuccess' => "'''ད་འབདན་ཁྱོད་  {{SITENAME}} ནང་ \"\$1\" སྦེ་ ནང་བསྐྱོད་འབད་ཡོདཔ།'''",
+'nosuchuser' => 'མིང་ "$1" བཟུམ་གྱི་ལག་ལེན་པ་མེད།
 སྡེབ་དཔྱད་འབད་ ཡང་ན་ རྩིས་ཐོ་གསརཔ་ཅིག་བཟོ།',
-'nosuchusershort'         => 'མིང་ "$1" བཟུམ་གྱི་ལག་ལེན་པ་མེད།
+'nosuchusershort' => 'མིང་ "$1" བཟུམ་གྱི་ལག་ལེན་པ་མེད།
 སྡེབ་དཔྱད་འབད།',
-'nouserspecified'         => 'ལག་ལེན་པའི་མིང་ གསལ་བཀོད་འབད་དགོ།',
-'wrongpassword'           => 'མ་བདེན་པའི་ཆོག་ཡིག་བཙུགས་ཡོདཔ། ལོག་འབད་རྩོལ་བསྐྱེད།',
-'wrongpasswordempty'      => 'ཆོག་ཡིག་བཙུགས་མི་འདི་སྟོངམ་ཨིན་པས། ལོག་འབད་རྩོལ་བསྐྱེད།',
-'passwordtooshort'        => 'ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ནུས་མེད་ ཡང་ན་ ཐུང་དྲགས་ནུག།
+'nouserspecified' => 'ལག་ལེན་པའི་མིང་ གསལ་བཀོད་འབད་དགོ།',
+'wrongpassword' => 'མ་བདེན་པའི་ཆོག་ཡིག་བཙུགས་ཡོདཔ། ལོག་འབད་རྩོལ་བསྐྱེད།',
+'wrongpasswordempty' => 'ཆོག་ཡིག་བཙུགས་མི་འདི་སྟོངམ་ཨིན་པས། ལོག་འབད་རྩོལ་བསྐྱེད།',
+'passwordtooshort' => 'ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ནུས་མེད་ ཡང་ན་ ཐུང་དྲགས་ནུག།
 ཆོག་ཡིག་འདི་ ཡིག་འབྲུ་ཉུང་ཤོས་ $1 དགོ་པའི་ཁར་ ལག་ལེན་པའི་མིང་དང་ཡང་མ་འདྲཝ་ཅིག་སྦེ་དགོཔ་ཨིན།',
-'mailmypassword'          => 'གློག་འཕྲིན་ཆོག་ཡིག།',
-'passwordremindertitle'   => '{{SITENAME}} གི་དོན་ལུ་ གནས་སྐབས་ཅིག་གི་ཆོག་ཡིག་གསརཔ།',
-'passwordremindertext'    => 'མི་གང་རུང་(ཡང་ན་ ཨའི་པི་ཁ་བྱང་ $1 ནང་ལས་ ཁྱོད་བཟུམ་ཅིག་གིས་)
+'mailmypassword' => 'གློག་འཕྲིན་ཆོག་ཡིག།',
+'passwordremindertitle' => '{{SITENAME}} གི་དོན་ལུ་ གནས་སྐབས་ཅིག་གི་ཆོག་ཡིག་གསརཔ།',
+'passwordremindertext' => 'མི་གང་རུང་(ཡང་ན་ ཨའི་པི་ཁ་བྱང་ $1 ནང་ལས་ ཁྱོད་བཟུམ་ཅིག་གིས་)
 {{SITENAME}} ($4) གི་དོན་ལུ་ ཆོག་ཡིག་གསརཔ་ཅིག་བཏང་ཡོད་པའི་སྐོར་ལས་ཞུ་བ་འབད་ནུག།
 ད་ལས་ཕར་ ལག་ལེན་པ་ \\"$2\\" གི་ཆོག་ཡིག་འདི་ \\"$3\\" ཨིན།
 ཁྱོད་ཀྱིས་ ད་ལྟོ་ར་ ནང་བསྐྱོད་འབད་དེ་ཆོག་ཡིག་སོར་དགོ།
 
 མི་གཞན་ཅིག་གིས་ཞུ་བ་འབད་ཡོད་པའི་སྐབས་ལུ་ ཡང་ན་ ཁྱོད་རའི་ཆོག་ཡིག་འདི་སེམས་ཁར་དྲན་ཚུགས་རུང་ བསྒྱུར་བཅོས་འབད་དགོ་མ་མནོ་བ་ཅིན་ འཕྲིན་དོན་དེ་སྣང་མེད་བཞག་སྟེ་ ཧེ་མའི་ཆོག་ཡིག་འདི་ར་ལག་ལེན་འཐབ་རུང་བཏུབ།',
-'noemail'                 => 'ལག་ལེན་པ་ "$1" གི་དོན་ལུ་ གློག་འཕྲིན་ཁ་བྱང་ཐོ་བཀོད་མ་འབད་བས།',
-'passwordsent'            => '"$1" ནང་ཐོ་བཀོད་འབད་ཡོད་མི་ གློག་འཕྲིན་ཁ་བྱང་ནང་ ཆོག་ཡིག་གསརཔ་ཅིག་བཏང་ནུག།
+'noemail' => 'ལག་ལེན་པ་ "$1" གི་དོན་ལུ་ གློག་འཕྲིན་ཁ་བྱང་ཐོ་བཀོད་མ་འབད་བས།',
+'passwordsent' => '"$1" ནང་ཐོ་བཀོད་འབད་ཡོད་མི་ གློག་འཕྲིན་ཁ་བྱང་ནང་ ཆོག་ཡིག་གསརཔ་ཅིག་བཏང་ནུག།
 གློག་འཕྲིན་དེ་ཐོབ་ད་ ལོག་སྟེ་ནང་བསྐྱོད་འབད་གནང་།',
-'eauthentsent'            => 'ངེས་དཔྱད་གློག་འཕྲིན་འདི་ གདམ་ཁ་བརྐྱབས་ཡོད་པའི་གློག་འཕྲིན་ཁ་བྱང་ལུ་ བཏང་ཡོདཔ།
+'eauthentsent' => 'ངེས་དཔྱད་གློག་འཕྲིན་འདི་ གདམ་ཁ་བརྐྱབས་ཡོད་པའི་གློག་འཕྲིན་ཁ་བྱང་ལུ་ བཏང་ཡོདཔ།
 གཞན་གློག་འཕྲིན་གང་རུང་ རྩིས་ཐོ་ནང་མ་གཏང་པའི་ཧེ་མ་ རྩིས་ཐོ་འདི་ཁྱོད་ར་གི་ཨིན་པའི་ངེས་དཔྱད་འབད་ནི་ལུ་ གློག་འཕྲིན་ནང་གི་བཀོད་རྒྱ་དང་འཁྲིལ་དགོཔ་ཨིན།',
 
 # Change password dialog
 'retypenew' => 'ཆོག་ཡིག་གསརཔ་ལོག་ཡིག་དཔར་རྐྱབས:',
 
 # Edit page toolbar
-'bold_sample'     => 'ཚིག་ཡིག་རྒྱགས་པ།',
-'bold_tip'        => 'ཚིག་ཡིག་རྒྱགས་པ།',
-'italic_sample'   => 'ཨའི་ཊ་ལིཀ་ཚིག་ཡིག།',
-'italic_tip'      => 'ཨའི་ཊ་ལིཀ་ཚིག་ཡིག།',
-'link_sample'     => 'འབྲེལ་ལམ་མགོ་མིང་།',
-'link_tip'        => 'ནང་འཁོད་འབྲེལ་ལམ།',
-'extlink_sample'  => 'http://www.example.com འབྲེལ་ལམ མགོ་མིང་།',
-'extlink_tip'     => 'ཕྱིའི་འབྲེལ་ལམ་ (http:// prefix སེམས་ཁར་བཞག)',
+'bold_sample' => 'ཚིག་ཡིག་རྒྱགས་པ།',
+'bold_tip' => 'ཚིག་ཡིག་རྒྱགས་པ།',
+'italic_sample' => 'ཨའི་ཊ་ལིཀ་ཚིག་ཡིག།',
+'italic_tip' => 'ཨའི་ཊ་ལིཀ་ཚིག་ཡིག།',
+'link_sample' => 'འབྲེལ་ལམ་མགོ་མིང་།',
+'link_tip' => 'ནང་འཁོད་འབྲེལ་ལམ།',
+'extlink_sample' => 'http://www.example.com འབྲེལ་ལམ མགོ་མིང་།',
+'extlink_tip' => 'ཕྱིའི་འབྲེལ་ལམ་ (http:// prefix སེམས་ཁར་བཞག)',
 'headline_sample' => 'གཙོ་དོན་ཚིག་ཡིག།',
-'headline_tip'    => 'གནས་རིམ་ ༢ གཙོ་དོན།',
-'nowiki_sample'   => 'ནཱ་ལུ་ རྩ་སྒྲིག་མ་འབད་བའི་ཚིག་ཡིག་བཙུགས།',
-'nowiki_tip'      => 'ཝི་ཀི་རྩ་སྒྲིག་ སྣང་མེད་བཞག།',
-'image_tip'       => 'གནས་འདྲེན་ཡིག་སྣོད།',
-'media_tip'       => 'ཡིག་སྣོད་ཀྱི་འབྲེལ་ལམ།',
-'sig_tip'         => 'དུས་བཀོད་དང་གཅིག་ཁར་ ཁྱོད་རའི་མིང་རྟགས།',
-'hr_tip'          => 'ཐད་སྙོམས་གྲལ་ཐིག་ (ཉུང་སུ་སྦེ་ལག་ལེན་འཐབ)',
+'headline_tip' => 'གནས་རིམ་ ༢ གཙོ་དོན།',
+'nowiki_sample' => 'ནཱ་ལུ་ རྩ་སྒྲིག་མ་འབད་བའི་ཚིག་ཡིག་བཙུགས།',
+'nowiki_tip' => 'ཝི་ཀི་རྩ་སྒྲིག་ སྣང་མེད་བཞག།',
+'image_tip' => 'གནས་འདྲེན་ཡིག་སྣོད།',
+'media_tip' => 'ཡིག་སྣོད་ཀྱི་འབྲེལ་ལམ།',
+'sig_tip' => 'དུས་བཀོད་དང་གཅིག་ཁར་ ཁྱོད་རའི་མིང་རྟགས།',
+'hr_tip' => 'ཐད་སྙོམས་གྲལ་ཐིག་ (ཉུང་སུ་སྦེ་ལག་ལེན་འཐབ)',
 
 # Edit pages
-'summary'                    => 'བཅུད་དོན།:',
-'subject'                    => 'དོན་ཚན་/གཙོ་དོན།:',
-'minoredit'                  => 'འདི་ གལ་གནད་ཆུང་བའི་ཞུན་དག་ཅིག་ཨིན།',
-'watchthis'                  => 'ཤོག་ལེབ་འདི་ལུ་བལྟ།',
-'savearticle'                => 'ཤོག་ལེབ་སྲུངས།',
-'preview'                    => 'སྔོན་ལྟ།',
-'showpreview'                => 'སྔོན་ལྟ་སྟོན།',
-'showdiff'                   => 'བསྒྱུར་བཅོས་ཚུ་སྟོན།',
-'anoneditwarning'            => "'''ཉེན་བརྡ:''' ཁྱོད་ཀྱིས་ ནང་བསྐྱོད་མ་འབད་བས།
+'summary' => 'བཅུད་དོན།:',
+'subject' => 'དོན་ཚན་/གཙོ་དོན།:',
+'minoredit' => 'འདི་ གལ་གནད་ཆུང་བའི་ཞུན་དག་ཅིག་ཨིན།',
+'watchthis' => 'ཤོག་ལེབ་འདི་ལུ་བལྟ།',
+'savearticle' => 'ཤོག་ལེབ་སྲུངས།',
+'preview' => 'སྔོན་ལྟ།',
+'showpreview' => 'སྔོན་ལྟ་སྟོན།',
+'showdiff' => 'བསྒྱུར་བཅོས་ཚུ་སྟོན།',
+'anoneditwarning' => "'''ཉེན་བརྡ:''' ཁྱོད་ཀྱིས་ ནང་བསྐྱོད་མ་འབད་བས།
 ཁྱོད་ཀྱི་ ཨའི་པི་ཁ་བྱང་འདི་ ཤོག་ལེབ་ཀྱི་ཞུན་དག་སྤྱོད་ཤུལ་འདི་ནང་ ཐོ་བཀོད་འབད་དེ་བཞག་འོང་།",
-'summary-preview'            => 'བཅུད་དོན་སྔོན་ལྟ།:',
-'blockedtext'                => "'''ཁྱོད་ཀྱི་ ལག་ལེན་པའི་མིང་ ཡང་ན་ ཨའི་པི་ཁ་བྱང་འདི་ བཀག་དམ་འབད་ཡོདཔ།'''
+'summary-preview' => 'བཅུད་དོན་སྔོན་ལྟ།:',
+'blockedtext' => "'''ཁྱོད་ཀྱི་ ལག་ལེན་པའི་མིང་ ཡང་ན་ ཨའི་པི་ཁ་བྱང་འདི་ བཀག་དམ་འབད་ཡོདཔ།'''
 
 དེ་ཡང་ $1 གིས་ བཀག་ཡོདཔ། བཀག་དགོ་པའི་རྒྱུ་མཚན་འདི་  ''$2''ཨིན་པས།
 
@@ -252,22 +252,22 @@ $messages = array(
 
 ཁྱོད་ཀྱིས་ ཁྱོད་རའི་ [[Special:Preferences|account preferences]] ནང་ ནུས་ལྡན་གློག་འཕྲིན་ཁ་བྱང་ཅིག་ གསལ་བཀོད་མ་འབད་ཚུན་དང་ དེ་ལག་ལེན་འཐབ་ནི་ལས་འགག་བསུབ་མ་འབད་བ་ཅིན་རྐྱངམ་ཅིག་ 'ལག་ལེན་པ་ལུ་ གློག་འཕྲིན་གཏང་' གི་ཁྱད་ཆོས་འདི་ ལག་ལེན་འཐབ་མི་བཏུབ་ཨིན།
 ཁྱོད་ཀྱི་ད་ལྟོའི་ཨའི་པི་ཁ་བྱང་འདི་ $3, དང་ འགག་བསུབ་ཨའི་ཌི་འདི་ #$5 ཨིན། དེ་གཉིས་ ཡང་ན་ ག་ཨིན་རུང་ཅིག་ འདྲི་དཔྱད་གང་རུང་གི་གྲངས་སུ་བཙུགས་གནང་།",
-'newarticle'                 => '(གསརཔ་)',
-'newarticletext'             => "ཁྱོད་ཀྱིས་ ཤོག་ལེབ་ཅིག་ལུ་ ད་ཚུན་མེད་པའི་འབྲེལ་མཐུད་འབད་ཡོདཔ།
+'newarticle' => '(གསརཔ་)',
+'newarticletext' => "ཁྱོད་ཀྱིས་ ཤོག་ལེབ་ཅིག་ལུ་ ད་ཚུན་མེད་པའི་འབྲེལ་མཐུད་འབད་ཡོདཔ།
 ཤོག་ལེབ་གསརཔ་བཟོ་ནི་ལུ་ འོག་གི་སྒྲོམ་ནང་ ཡིག་དཔར་རྐྱབས་ (བརྡ་དོན་ཁ་གསལ་གྱི་དོན་ལུ་ [[{{MediaWiki:Helppage}}|help page]] ལུ་བལྟ་)།
 གལ་སྲིད་འཛོལ་ཏེ་ཡར་སོང་པ་ཅིན་ '''རྒྱབ་''' ཨེབ་རྟ་ལུ་ ཨེབ་གཏང་འབད།",
-'noarticletext'              => 'ད་ལྟོ་ ཤོག་ལེབ་འདི་ནང་ ཚིག་ཡིག་མེདཔ་ཨིནམ་དང་ ཁྱོད་ཀྱིས་ [[Special:Search/{{PAGENAME}}| ཤོག་ལེབ་མགོ་མིང་འདི་ ]] ཤོག་ལེབ་གཞན་ནང་ལས་འཚོལ་བཏུབ་ ཡང་ན་ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ཤོག་ལེབ་འདི་ ཞུན་དག་འབད་བཏུབ།]',
-'previewnote'                => "'''འདི་ སྔོན་ལྟ་རྐྱངམ་ཅིག་ཨིན་  བསྒྱུར་བཅོས་ཚུ་ ད་ལྟོ་ཚུན་མ་སྲུངས་པས་!'''",
-'editing'                    => '$1 ཞུན་དག་འབད་དོ།',
-'editingsection'             => '$1 (དབྱེ་ཚན་)འདི་ ཞུན་དག་འབད་ནི།',
-'copyrightwarning'           => "{{SITENAME}} ལུ་ ཕུལ་མི་ཞལ་འདེབས་ཚུ་  $2 གི་འོག་ལུ་ གསར་བཏོན་འབད་ནིའི་ཆ་འཇོག་གྲུབ་ཡོདཔ་(ཁ་གསལ་གྱི་དོན་ལས་ $1 ལུ་བལྟ་)། གལ་སྲིད་ ཁྱོད་རའི་འབྲི་ལཱ་འདི་ ཞུན་དག་དང་ལོག་བཀྲམ་མ་འབད་ནི་ཨིན་པ་ཅིན་ ནཱ་ལུ་མ་ཕུལ།<br />
+'noarticletext' => 'ད་ལྟོ་ ཤོག་ལེབ་འདི་ནང་ ཚིག་ཡིག་མེདཔ་ཨིནམ་དང་ ཁྱོད་ཀྱིས་ [[Special:Search/{{PAGENAME}}| ཤོག་ལེབ་མགོ་མིང་འདི་ ]] ཤོག་ལེབ་གཞན་ནང་ལས་འཚོལ་བཏུབ་ ཡང་ན་ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ཤོག་ལེབ་འདི་ ཞུན་དག་འབད་བཏུབ།]',
+'previewnote' => "'''འདི་ སྔོན་ལྟ་རྐྱངམ་ཅིག་ཨིན་  བསྒྱུར་བཅོས་ཚུ་ ད་ལྟོ་ཚུན་མ་སྲུངས་པས་!'''",
+'editing' => '$1 ཞུན་དག་འབད་དོ།',
+'editingsection' => '$1 (དབྱེ་ཚན་)འདི་ ཞུན་དག་འབད་ནི།',
+'copyrightwarning' => "{{SITENAME}} ལུ་ ཕུལ་མི་ཞལ་འདེབས་ཚུ་  $2 གི་འོག་ལུ་ གསར་བཏོན་འབད་ནིའི་ཆ་འཇོག་གྲུབ་ཡོདཔ་(ཁ་གསལ་གྱི་དོན་ལས་ $1 ལུ་བལྟ་)། གལ་སྲིད་ ཁྱོད་རའི་འབྲི་ལཱ་འདི་ ཞུན་དག་དང་ལོག་བཀྲམ་མ་འབད་ནི་ཨིན་པ་ཅིན་ ནཱ་ལུ་མ་ཕུལ།<br />
 དེ་མ་ཚད་ཁྱོད་ཀྱིས་ ང་བཅས་ལུ་ དེ་ཁྱོད་རང་གིས་བྲིས་འབྲིཝ་དང་ མི་མང་ཌོ་མཱེན་ ཡང་ན་ རྒྱུ་ཁུངས་སྟོང་མར་ནང་ལས་འདྲ་བཤུས་བརྐྱབས་རྐྱབ་ཨིནམ་སྦེ་ བཤདཔ་ཨིན་པས།
 '''གནང་བ་མེད་པར་ འདྲ་བཤུས་དབང་ཆ་ཅན་གྱི་ལཱ་མ་ཕུལ་!'''",
-'templatesused'              => 'ཤོག་ལེབ་འདི་གུ་ལག་ལེན་འཐབ་ཡོད་པའི་ཊེམ་པེལེཊི:',
-'templatesusedpreview'       => 'སྔོན་ལྟ་འདི་ནང་ལག་ལེན་འཐབ་ཡོད་པའི་ {{PLURAL:$1|Template|Templates}} :',
-'template-protected'         => '(ཉེན་སྐྱོབ་འབད་ཡོདཔ།)',
-'template-semiprotected'     => '(ཉེན་སྐྱོབ་ཕྱེད་ཀ་འབད་ཡོདཔ་)',
-'nocreatetext'               => '{{SITENAME}} གིས་ ཤོག་ལེབ་གསརཔ་བཟོ་ནི་ལས་ བཀག་དམ་འབད་ཡོདཔ།
+'templatesused' => 'ཤོག་ལེབ་འདི་གུ་ལག་ལེན་འཐབ་ཡོད་པའི་ཊེམ་པེལེཊི:',
+'templatesusedpreview' => 'སྔོན་ལྟ་འདི་ནང་ལག་ལེན་འཐབ་ཡོད་པའི་ {{PLURAL:$1|Template|Templates}} :',
+'template-protected' => '(ཉེན་སྐྱོབ་འབད་ཡོདཔ།)',
+'template-semiprotected' => '(ཉེན་སྐྱོབ་ཕྱེད་ཀ་འབད་ཡོདཔ་)',
+'nocreatetext' => '{{SITENAME}} གིས་ ཤོག་ལེབ་གསརཔ་བཟོ་ནི་ལས་ བཀག་དམ་འབད་ཡོདཔ།
 ཁྱོད་ཀྱིས་ ལོག་འགྱོ་ཞིནམ་ལས་ ཡོད་བཞིན་པའི་ཤོག་ལེབ་འདི་ཞུན་དག་འབད་ ཡང་ན་  [[Special:UserLogin|ནང་བསྐྱོད་དང་ ཡངན་ རྩིས་ཐོ་གསརཔ་བཟོ་]].',
 'recreate-moveddeleted-warn' => "'''ཉེན་བརྡ་: ཁྱོད་ཀྱིས་ ཧ་མ་ལས་བཏོན་བཏང་ཡོད་པའི་ཤོག་ལེབ་ཅིག་ ལོག་གསར་བཟོ་འབདཝ་ཨིན་པས།'''
 
@@ -275,45 +275,44 @@ $messages = array(
 སྟབས་བདེ་ནིའི་དོན་ལས་ ཤོག་ལེབ་ཀྱི་བཏོན་གཏང་ལོག་འདི་ ནཱ་ལུ་བྱིན་ཏེ་ཡོད།:",
 
 # History pages
-'viewpagelogs'        => 'ཤོག་ལེབ་འདི་གི་ལོགསི་སྟོན།',
-'currentrev'          => 'ད་ལྟོའི་བསྐྱར་ཞིབ།',
-'revisionasof'        => '$1 གི་བསྐྱར་ཞིབ།',
-'revision-info'       => '$2 གིས་ $1 ཚུན་གྱི་བསྐྱར་ཞིབ།',
-'previousrevision'    => '←བསྐྱར་ཞིབ་རྙིངམ།',
-'nextrevision'        => 'བསྐྱར་ཞིབ་གསརཔ་→',
+'viewpagelogs' => 'ཤོག་ལེབ་འདི་གི་ལོགསི་སྟོན།',
+'currentrev' => 'ད་ལྟོའི་བསྐྱར་ཞིབ།',
+'revisionasof' => '$1 གི་བསྐྱར་ཞིབ།',
+'revision-info' => '$2 གིས་ $1 ཚུན་གྱི་བསྐྱར་ཞིབ།',
+'previousrevision' => '←བསྐྱར་ཞིབ་རྙིངམ།',
+'nextrevision' => 'བསྐྱར་ཞིབ་གསརཔ་→',
 'currentrevisionlink' => 'ད་ལྟོའི་བསྐྱར་ཞིབ།',
-'cur'                 => 'ཀཱར།',
-'last'                => 'མཇུག།',
-'page_first'          => 'དང་པ།',
-'page_last'           => 'མཇུག།',
-'histlegend'          => 'སེལ་འཐུ་སོར་སོ་: ག་བསྡུར་འབད་ནི་དང་ གཤམ་གྱི་བཙུགས་ལྡེ་ ཡང་ན་ ཨེབ་རྟ་ལུ་ཨེབ་ནི་ལུ་ ཐོན་རིམ་གྱི་རེ་ཌིའོ་སྒྲོམ་ལུ་རྟགས་བཀལ།<br />
+'cur' => 'ཀཱར།',
+'last' => 'མཇུག།',
+'page_first' => 'དང་པ།',
+'page_last' => 'མཇུག།',
+'histlegend' => 'སེལ་འཐུ་སོར་སོ་: ག་བསྡུར་འབད་ནི་དང་ གཤམ་གྱི་བཙུགས་ལྡེ་ ཡང་ན་ ཨེབ་རྟ་ལུ་ཨེབ་ནི་ལུ་ ཐོན་རིམ་གྱི་རེ་ཌིའོ་སྒྲོམ་ལུ་རྟགས་བཀལ།<br />
 འབད་ཤུལ་: (ཀཱར་) = ད་ལྟོའི་ཐོན་རིམ་ལས་སོར་སོ་
 (མཇུག་) = ཧེ་མའི་ཐོན་རིམ་ལས་སོར་སོ་ M = ཞུན་དག་ཆུང་ཀུ།',
-'histfirst'           => 'རྙིང་ཤོས།',
-'histlast'            => 'གསར་ཤོས།',
+'histfirst' => 'རྙིང་ཤོས།',
+'histlast' => 'གསར་ཤོས།',
 
 # Revision feed
 'history-feed-item-nocomment' => '$༢ ལུ་ $༡',
 
 # Diffs
-'history-title'           => '"$1" གི་བསྐྱར་ཞིབ་སྤྱོད་ཤུལ།',
-'difference'              => '(བསྐྱར་ཞིབ་བར་ནའི་ཁྱད་པར)',
-'lineno'                  => 'གྲལ་ཐིག་ $1:',
+'history-title' => '"$1" གི་བསྐྱར་ཞིབ་སྤྱོད་ཤུལ།',
+'lineno' => 'གྲལ་ཐིག་ $1:',
 'compareselectedversions' => 'སེལ་འཐུ་འབད་ཡོད་པའི་ཐོན་རིམ་ཚུ་ ག་བསྡུར་རྐྱབས།',
-'editundo'                => 'འབད་བཤོལ།',
-'diff-multi'              => '({{PLURAL:$1|བར་ནའི་བསྐྱར་ཞིབ་གཅིག་|$1 བར་ནའི་བསྐྱར་ཞིབ་ཚུ་}} མ་སྟོན་པས།)',
+'editundo' => 'འབད་བཤོལ།',
+'diff-multi' => '({{PLURAL:$1|བར་ནའི་བསྐྱར་ཞིབ་གཅིག་|$1 བར་ནའི་བསྐྱར་ཞིབ་ཚུ་}} མ་སྟོན་པས།)',
 
 # Search results
-'prevn'          => 'ཧེ་མའི་ {{PLURAL:$1|$1}}',
-'nextn'          => 'ཤུལ་མའི་ {{PLURAL:$1|$1}}',
-'viewprevnext'   => '($1 {{int:pipe-separator}} $2) ($3) སྟོན།',
+'prevn' => 'ཧེ་མའི་ {{PLURAL:$1|$1}}',
+'nextn' => 'ཤུལ་མའི་ {{PLURAL:$1|$1}}',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) སྟོན།',
 'searchhelp-url' => 'Help:ནང་དོན།',
-'powersearch'    => 'མཐོ་རིམ་ཅན་གྱི་འཚོལ་ཞིབ།',
+'powersearch' => 'མཐོ་རིམ་ཅན་གྱི་འཚོལ་ཞིབ།',
 
 # Preferences page
-'preferences'         => 'དགའ་གདམ།',
-'mypreferences'       => 'ངེ་གི་དགའ་གདམ།',
-'yourrealname'        => 'མིང་ངོ་མ:',
+'preferences' => 'དགའ་གདམ།',
+'mypreferences' => 'ངེ་གི་དགའ་གདམ།',
+'yourrealname' => 'མིང་ངོ་མ:',
 'prefs-help-realname' => 'མིང་ངོ་མ་འདི་ གདམ་ཁ་ཅན་ཨིན་རུང་ ཐོ་བཀོད་འབད་བ་ཅིན་ ཁྱོད་རའི་ལཱ་གི་ཁྱད་བརྗོད་ཀྱི་དོན་ལུ་ ལག་ལེན་འཐབ་འོང་།',
 
 'grouppage-sysop' => '{{ns:project}}:བདག་སྐྱོང་པ།',
@@ -322,39 +321,39 @@ $messages = array(
 'rightslog' => 'ལག་ལེན་པའི་དབང་ཆ་དྲན་དེབ།',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|བསྒྱུར་བཅོས་|བསྒྱུར་བཅོས་ཚུ}}',
-'recentchanges'                  => 'འཕྲལ་གྱི་བསྒྱུར་བཅོས',
+'nchanges' => '$1 {{PLURAL:$1|བསྒྱུར་བཅོས་|བསྒྱུར་བཅོས་ཚུ}}',
+'recentchanges' => 'འཕྲལ་གྱི་བསྒྱུར་བཅོས',
 'recentchanges-feed-description' => 'འབྱུང་སའི་ནང་ ཝི་ཀི་ལུ་འཕྲལ་གྱི་བསྒྱུར་བཅོས་འབད་མི་འདི་ རྗེས་འཚོལ་འབད།',
-'rcnote'                         => "གཤམ་འཁོད་ཚུ་ $3 ཚུན་ཚོད་ཀྱི་ མཇུག་མཐའ {{PLURAL:$2|ཉིནམ་|'''$2''' ཉིནམ་}} གྱི་ {{PLURAL:$1|བསྒྱུར་བཅོས་ | '''$1''' བསྒྱུར་བཅོས་ཚུ་ }} ཨིན།",
-'rcnotefrom'                     => "འོག་གི་ཚུ་ '''$2''' (up to '''$1''' shown) ལས་ཚུར་གྱི་བསྒྱུར་བཅོས་ཨིན།",
-'rclistfrom'                     => '$1 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་',
-'rcshowhideminor'                => '$1 གལ་གནད་ཆུང་བའི་ཞུན་དག།',
-'rcshowhidebots'                 => '$1 བོཊིསི།',
-'rcshowhideliu'                  => '$1 ནང་བསྐྱོད་འབད་ཡོད་པའི་ལག་ལེན་པ་ཚུ་',
-'rcshowhideanons'                => '$1 མིང་མེད་ལག་ལེན་པ།',
-'rcshowhidepatr'                 => '$1 པེ་ཌོལཊི་ཞུན་དག་ཚུ།',
-'rcshowhidemine'                 => '$1 ངེ་གི་ཞུན་དག།',
-'rclinks'                        => 'མཇུག་མཐའི་ $1 བསྒྱུར་བཅོས་ཚུ་ ཉིནམ་ $2 ནང་ལུ་སྟོན་<br />$3',
-'diff'                           => 'ཁྱད་པར།',
-'hist'                           => 'སྤྱོད་ཤུལ',
-'hide'                           => 'སྦ།',
-'show'                           => 'སྟོན།',
-'minoreditletter'                => 'm',
-'newpageletter'                  => 'N',
-'boteditletter'                  => 'b',
+'rcnote' => "གཤམ་འཁོད་ཚུ་ $3 ཚུན་ཚོད་ཀྱི་ མཇུག་མཐའ {{PLURAL:$2|ཉིནམ་|'''$2''' ཉིནམ་}} གྱི་ {{PLURAL:$1|བསྒྱུར་བཅོས་ | '''$1''' བསྒྱུར་བཅོས་ཚུ་ }} ཨིན།",
+'rcnotefrom' => "འོག་གི་ཚུ་ '''$2''' (up to '''$1''' shown) ལས་ཚུར་གྱི་བསྒྱུར་བཅོས་ཨིན།",
+'rclistfrom' => '$1 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་',
+'rcshowhideminor' => '$1 གལ་གནད་ཆུང་བའི་ཞུན་དག།',
+'rcshowhidebots' => '$1 བོཊིསི།',
+'rcshowhideliu' => '$1 ནང་བསྐྱོད་འབད་ཡོད་པའི་ལག་ལེན་པ་ཚུ་',
+'rcshowhideanons' => '$1 མིང་མེད་ལག་ལེན་པ།',
+'rcshowhidepatr' => '$1 པེ་ཌོལཊི་ཞུན་དག་ཚུ།',
+'rcshowhidemine' => '$1 ངེ་གི་ཞུན་དག།',
+'rclinks' => 'མཇུག་མཐའི་ $1 བསྒྱུར་བཅོས་ཚུ་ ཉིནམ་ $2 ནང་ལུ་སྟོན་<br />$3',
+'diff' => 'ཁྱད་པར།',
+'hist' => 'སྤྱོད་ཤུལ',
+'hide' => 'སྦ།',
+'show' => 'སྟོན།',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'          => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
-'recentchangeslinked-feed'     => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
-'recentchangeslinked-toolbox'  => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
-'recentchangeslinked-title'    => '"$1" དང་འབྲེལ་བ་ཡོད་པའི་བསྒྱུར་བཅོས་ཚུ།',
+'recentchangeslinked' => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
+'recentchangeslinked-feed' => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
+'recentchangeslinked-toolbox' => 'འབྲེལ་བ་ཅན་གྱི་བསྒྱུར་བཅོས།',
+'recentchangeslinked-title' => '"$1" དང་འབྲེལ་བ་ཡོད་པའི་བསྒྱུར་བཅོས་ཚུ།',
 'recentchangeslinked-noresult' => 'དུས་བཀོད་ཀྱི་སྐབས་ལུ་ འབྲེལ་མཐུད་ཅན་གྱི་ཤོག་ལེབ་ལུ་བསྒྱུར་བཅོས་མེད།',
-'recentchangeslinked-summary'  => "དམིགས་བསལ་ཤོག་ལེབ་འདི་གིས་ འབྲེལ་མཐུད་ཅན་གྱི་ཤོག་ལེབ་གུ་ མཇུག་ཀྱི་བསྒྱུར་བཅོས་ཚུ་ ཐོ་བཀོད་འབདཝ་ཨིན།
+'recentchangeslinked-summary' => "དམིགས་བསལ་ཤོག་ལེབ་འདི་གིས་ འབྲེལ་མཐུད་ཅན་གྱི་ཤོག་ལེབ་གུ་ མཇུག་ཀྱི་བསྒྱུར་བཅོས་ཚུ་ ཐོ་བཀོད་འབདཝ་ཨིན།
 ཁྱོད་ཀྱི་བལྟ་ཞིབ་ཐོ་ཡིག་གུ་འི་ཤོག་ལེབ་ཚུ་ '''མངོན་གསལ་ཅན་ཨིན།'''",
 
 # Upload
-'upload'        => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
-'uploadbtn'     => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
+'upload' => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
+'uploadbtn' => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
 'uploadlogpage' => 'ལོག་སྐྱེལ་བཙུགས་འབད།',
 'uploadedimage' => '"[[$1]]" སྐྱེལ་བཙུགས་འབད་ཡོདཔ།',
 
@@ -362,19 +361,19 @@ $messages = array(
 'listfiles' => 'ཡིག་སྣོད་ཐོ་ཡིག།',
 
 # File description page
-'file-anchor-link'          => 'ཡིག་སྣོད།',
-'filehist'                  => 'ཡིག་སྣོད་སྤྱོད་ཤུལ།',
-'filehist-help'             => 'ཡིག་སྣོད་འདི་ དེ་བསྒང་སྟོན་དོ་བཟུམ་སྦེ་ བལྟ་ནི་གི་དོན་ལུ་ ཚེས་གྲངས་/ཆུ་ཚོད་གུ་ ཨེབ་གཏང་འབད།',
-'filehist-current'          => 'ད་ལྟོ།',
-'filehist-datetime'         => 'ཚེས་གྲངས་/ཆུ་ཚོད།',
-'filehist-user'             => 'ལག་ལེན་པ།',
-'filehist-dimensions'       => 'རྒྱ་ཚད་',
-'filehist-filesize'         => 'པར་སྣོད་ཀྱི་ཚད།',
-'filehist-comment'          => 'བསམ་བཀོད།',
-'imagelinks'                => 'འབྲེལ་ལམ།',
-'linkstoimage'              => 'འོག་གི་ཤོག་ལེབ་ཚུ་ ཡིག་སྣོད་འདི་དང་འབྲེལ་བ་འདུག:',
-'nolinkstoimage'            => 'ཡིག་སྣོད་དེ་དང་འབྲེལ་བ་ཡོད་པའི་ཤོག་ལེབ་མིན་འདུག།',
-'sharedupload'              => 'ཡིག་སྣོད་འདི་རུབ་སྤྱོད་ཅན་གྱི་སྐྱེལ་བཙུགས་ཅིག་ཨིནམ་ལས་ ལས་འགུལ་གཞན་ཚུ་གིས་ལག་ལེན་འཐབ་འོང་།',
+'file-anchor-link' => 'ཡིག་སྣོད།',
+'filehist' => 'ཡིག་སྣོད་སྤྱོད་ཤུལ།',
+'filehist-help' => 'ཡིག་སྣོད་འདི་ དེ་བསྒང་སྟོན་དོ་བཟུམ་སྦེ་ བལྟ་ནི་གི་དོན་ལུ་ ཚེས་གྲངས་/ཆུ་ཚོད་གུ་ ཨེབ་གཏང་འབད།',
+'filehist-current' => 'ད་ལྟོ།',
+'filehist-datetime' => 'ཚེས་གྲངས་/ཆུ་ཚོད།',
+'filehist-user' => 'ལག་ལེན་པ།',
+'filehist-dimensions' => 'རྒྱ་ཚད་',
+'filehist-filesize' => 'པར་སྣོད་ཀྱི་ཚད།',
+'filehist-comment' => 'བསམ་བཀོད།',
+'imagelinks' => 'འབྲེལ་ལམ།',
+'linkstoimage' => 'འོག་གི་ཤོག་ལེབ་ཚུ་ ཡིག་སྣོད་འདི་དང་འབྲེལ་བ་འདུག:',
+'nolinkstoimage' => 'ཡིག་སྣོད་དེ་དང་འབྲེལ་བ་ཡོད་པའི་ཤོག་ལེབ་མིན་འདུག།',
+'sharedupload' => 'ཡིག་སྣོད་འདི་རུབ་སྤྱོད་ཅན་གྱི་སྐྱེལ་བཙུགས་ཅིག་ཨིནམ་ལས་ ལས་འགུལ་གཞན་ཚུ་གིས་ལག་ལེན་འཐབ་འོང་།',
 'uploadnewversion-linktext' => 'ཡིག་སྣོད་དེ་གི་ཐོ་རིམ་གསརཔ་ཅིག་ སྐྱེལ་བཙུགས་འབད།',
 
 # MIME search
@@ -406,51 +405,51 @@ $messages = array(
 'fewestrevisions' => 'བསྐྱར་ཞིབ་ཉུང་ཤོས་ཨིན་མི་ཤོག་ལེབ།',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 {{PLURAL:$1|བའིཊི|བའིཊིསི}}',
-'nlinks'                  => '$1 {{PLURAL:$1|འབྲེལ་ལམ་|འབྲེལ་ལམ་ཚུ་}}',
-'nmembers'                => '$1 {{PLURAL:$1|རིགས་|རིགས་ཚུ་}}',
-'lonelypages'             => 'རྩ་བའི་ཤོག་ལེབ་མེད་པའི་ཤོག་ལེབ་ཚུ།',
-'uncategorizedpages'      => 'དབྱེ་བ་མ་ཕཟོ་བའི་ཤོག་ལེབ།',
+'nbytes' => '$1 {{PLURAL:$1|བའིཊི|བའིཊིསི}}',
+'nlinks' => '$1 {{PLURAL:$1|འབྲེལ་ལམ་|འབྲེལ་ལམ་ཚུ་}}',
+'nmembers' => '$1 {{PLURAL:$1|རིགས་|རིགས་ཚུ་}}',
+'lonelypages' => 'རྩ་བའི་ཤོག་ལེབ་མེད་པའི་ཤོག་ལེབ་ཚུ།',
+'uncategorizedpages' => 'དབྱེ་བ་མ་ཕཟོ་བའི་ཤོག་ལེབ།',
 'uncategorizedcategories' => 'དབྱེ་ཁག་མ་བཟོ་བའི་དབྱེ་རིམ་',
-'uncategorizedimages'     => 'དབྱེ་རིམ་མ་བཟོ་བའི་ཡིག་སྣོད།',
-'uncategorizedtemplates'  => 'དབྱེ་རིམ་མ་བཟོ་བའི་ཊེམ་པེལེཊི།',
-'unusedcategories'        => 'ལག་ལེན་མ་འཐབ་པའི་དབྱེ་རིམ།',
-'unusedimages'            => 'ལག་ལེན་མ་འཐབ་པའི་ཡིག་སྣོད།',
-'wantedcategories'        => 'ངེས་མཁོའི་དབྱེ་རིམ།',
-'wantedpages'             => 'དགོས་མཁོ་ཡོད་པའི་ཤོག་ལེབ།',
-'mostlinked'              => 'ཤོག་ལེབ་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
-'mostlinkedcategories'    => 'དབྱེ་རིམ་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
-'mostlinkedtemplates'     => 'ཊེམ་པེལེཊིསི་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
-'mostcategories'          => 'དབྱེ་རིམ་མང་ཤོས་དང་འབྲེལ་བའི་ཤོག་ལེབ་',
-'mostimages'              => 'ཡིག་སྣོད་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
-'mostrevisions'           => 'བསྐྱར་ཞིབ་མང་ཤོས་དང་འབྲེལ་བའི་ཤོག་ལེབ་',
-'prefixindex'             => 'སྔོན་ཚིག་ཟུར་ཐོ།',
-'shortpages'              => 'ཤོག་ལེབ་ཐུང་ཀུ།',
-'longpages'               => 'ཤོག་ལེབ་རིངམོ།',
-'deadendpages'            => 'ཤོག་ལེབ་མཇུག་',
-'protectedpages'          => 'ཉེན་སྐྱོབ་འབད་ཡོད་པའི་ཤོག་ལེབ།',
-'listusers'               => 'ལག་ལེན་པའི་ཐོ་ཡིག།',
-'newpages'                => 'ཤོག་ལེབ་གསརཔ།',
-'ancientpages'            => 'ཤོག་ལེབ་རྙིང་ཤོས།',
-'move'                    => 'སྤོ་བཤུད་འབད།',
-'movethispage'            => 'ཤོག་ལེབ་འདི་ སྤོ་བཤུད་འབད།',
+'uncategorizedimages' => 'དབྱེ་རིམ་མ་བཟོ་བའི་ཡིག་སྣོད།',
+'uncategorizedtemplates' => 'དབྱེ་རིམ་མ་བཟོ་བའི་ཊེམ་པེལེཊི།',
+'unusedcategories' => 'ལག་ལེན་མ་འཐབ་པའི་དབྱེ་རིམ།',
+'unusedimages' => 'ལག་ལེན་མ་འཐབ་པའི་ཡིག་སྣོད།',
+'wantedcategories' => 'ངེས་མཁོའི་དབྱེ་རིམ།',
+'wantedpages' => 'དགོས་མཁོ་ཡོད་པའི་ཤོག་ལེབ།',
+'mostlinked' => 'ཤོག་ལེབ་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
+'mostlinkedcategories' => 'དབྱེ་རིམ་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
+'mostlinkedtemplates' => 'ཊེམ་པེལེཊིསི་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
+'mostcategories' => 'དབྱེ་རིམ་མང་ཤོས་དང་འབྲེལ་བའི་ཤོག་ལེབ་',
+'mostimages' => 'ཡིག་སྣོད་ལུ་འབྲེལ་མཐུད་ཆེ་ཤོས་',
+'mostrevisions' => 'བསྐྱར་ཞིབ་མང་ཤོས་དང་འབྲེལ་བའི་ཤོག་ལེབ་',
+'prefixindex' => 'སྔོན་ཚིག་ཟུར་ཐོ།',
+'shortpages' => 'ཤོག་ལེབ་ཐུང་ཀུ།',
+'longpages' => 'ཤོག་ལེབ་རིངམོ།',
+'deadendpages' => 'ཤོག་ལེབ་མཇུག་',
+'protectedpages' => 'ཉེན་སྐྱོབ་འབད་ཡོད་པའི་ཤོག་ལེབ།',
+'listusers' => 'ལག་ལེན་པའི་ཐོ་ཡིག།',
+'newpages' => 'ཤོག་ལེབ་གསརཔ།',
+'ancientpages' => 'ཤོག་ལེབ་རྙིང་ཤོས།',
+'move' => 'སྤོ་བཤུད་འབད།',
+'movethispage' => 'ཤོག་ལེབ་འདི་ སྤོ་བཤུད་འབད།',
 
 # Book sources
 'booksources' => 'ཀི་དེབ་འབྱུང་ས།',
 
 # Special:Log
-'specialloguserlabel'  => 'ལག་ལེན་པ:',
+'specialloguserlabel' => 'ལག་ལེན་པ:',
 'speciallogtitlelabel' => 'མགོ་མིང:',
-'log'                  => 'ལོགསི།',
-'all-logs-page'        => 'ལོག་སི་ཆ་མཉམ།',
+'log' => 'ལོགསི།',
+'all-logs-page' => 'ལོག་སི་ཆ་མཉམ།',
 
 # Special:AllPages
-'allpages'       => 'ཤོག་ལེབ་ག་ར།',
+'allpages' => 'ཤོག་ལེབ་ག་ར།',
 'alphaindexline' => '$1 ལས་ $2',
-'nextpage'       => 'ཤུལ་མའི་ཤོག་ལེབ་ ($1)',
-'prevpage'       => 'ཧེ་མའི་ཤོག་ལེབ་ ($1)',
-'allpagesfrom'   => 'ཤོག་ལེབ་བཀྲམ་སྟོན་འགོ་བཙུགས་:',
-'allarticles'    => 'ཤོག་ལེབ་ག་ར།',
+'nextpage' => 'ཤུལ་མའི་ཤོག་ལེབ་ ($1)',
+'prevpage' => 'ཧེ་མའི་ཤོག་ལེབ་ ($1)',
+'allpagesfrom' => 'ཤོག་ལེབ་བཀྲམ་སྟོན་འགོ་བཙུགས་:',
+'allarticles' => 'ཤོག་ལེབ་ག་ར།',
 'allpagessubmit' => 'འགྱོ།',
 'allpagesprefix' => 'སྔོན་ཚིག་གི་ཐོག་ལས་ཤོག་ལེབ་ཚུ་སྟོན།',
 
@@ -461,104 +460,104 @@ $messages = array(
 'emailuser' => 'ལག་ལེན་པ་ལུ་ གློག་འཕྲིན་གཏང་',
 
 # Watchlist
-'watchlist'         => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།',
-'mywatchlist'       => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།',
-'addedwatchtext'    => "ཤོག་ལེབ་  \"[[:\$1]]\" འདི་ ཁྱོད་རའི་ [[Special:Watchlist|watchlist]] ལུ་ ཁ་སྐོང་བརྐྱབས་ནུག།\\n
+'watchlist' => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།',
+'mywatchlist' => 'ངེ་གི་བལྟ་ཞིབ་ཐོ་ཡིག།',
+'addedwatchtext' => "ཤོག་ལེབ་  \"[[:\$1]]\" འདི་ ཁྱོད་རའི་ [[Special:Watchlist|watchlist]] ལུ་ ཁ་སྐོང་བརྐྱབས་ནུག།\\n
 ཤོག་ལེབ་དེ་ལུ་མ་འོངས་བསྒྱུར་བཅོས་དང་ དེ་གི་འབྲེལ་ཡོད་བློ་ཤོག་འདི་ དེ་ཁར་ཐོ་བཀོད་འབད་ནི་དང་ འཇམ་ཏོང་ཏོ་སྦེ་གདམ་ཁ་བརྐྱབ་ཚུགས་ནི་གི་དོན་ལུ་  ཤོག་ལེབ་འདི་ [[Special:RecentChanges|list of recent changes]] ནང་ལུ་ '''མངོན་གསལ་''' སྦེ་འབྱུང་འོང་།",
-'removedwatchtext'  => 'ཤོག་ལེབ་  "[[:$1]]" འདི་ [[Special:Watchlist|your watchlist]] ལས་ བཏོན་བཀོག་ནུག།',
-'watch'             => 'བལྟ་ཞིབ་འབད།',
-'watchthispage'     => 'ཤོག་ལེབ་འདི་ལྟ།',
-'unwatch'           => 'བལྟ་བཤོལ།',
+'removedwatchtext' => 'ཤོག་ལེབ་  "[[:$1]]" འདི་ [[Special:Watchlist|your watchlist]] ལས་ བཏོན་བཀོག་ནུག།',
+'watch' => 'བལྟ་ཞིབ་འབད།',
+'watchthispage' => 'ཤོག་ལེབ་འདི་ལྟ།',
+'unwatch' => 'བལྟ་བཤོལ།',
 'watchlist-details' => '{{PLURAL:$1|$1 ཤོག་ལེབ་|$1 ཤོག་ལེབ་ཚུ་}} ཁག་ཆེ་བའི་བློ་ཤོག་ བལྟ་ཞིབ་མ་འབད་བས།',
-'wlshowlast'        => 'མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2  $3 སྟོན་',
+'wlshowlast' => 'མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2  $3 སྟོན་',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'བལྟ་ཞིབ་འབད་དོ་་་',
+'watching' => 'བལྟ་ཞིབ་འབད་དོ་་་',
 'unwatching' => 'བལྟ་ཞིབ་འབད་བཤོལ་དོ་་་',
 
 # Delete
-'deletepage'            => 'ཤོག་ལེབ་བཏོན་གཏང་།',
-'historywarning'        => 'ཉེན་བརྡ་: ཁྱོད་ཀྱིས་ བཏོན་བཀོག་ནི་འབད་མི་ཤོག་ལེབ་ནང་སྤྱོད་ཤུལ་འདུག་:',
-'confirmdeletetext'     => 'ཁྱོད་ཀྱིས་ ཤོག་ལེབ་དང་དེའི་སྤྱོད་ཤུལ་ བཏོན་གཏང་ནི་འབད་དོ།
+'deletepage' => 'ཤོག་ལེབ་བཏོན་གཏང་།',
+'historywarning' => 'ཉེན་བརྡ་: ཁྱོད་ཀྱིས་ བཏོན་བཀོག་ནི་འབད་མི་ཤོག་ལེབ་ནང་སྤྱོད་ཤུལ་འདུག་:',
+'confirmdeletetext' => 'ཁྱོད་ཀྱིས་ ཤོག་ལེབ་དང་དེའི་སྤྱོད་ཤུལ་ བཏོན་གཏང་ནི་འབད་དོ།
 ཁྱོད་ཀྱིས་འདི་འབད་ནི་དང་ དེ་འབད་བ་ཅིན་ དེ་གི་འབྲེལ་འབྱུང་ དེ་ལས་ ཁྱོད་ཀྱིས་འབད་མི་འདི་  [[{{MediaWiki:Policy-url}}| སྲིད་བྱུས་]] དང་འཁྲིལ་ཏེ་ཨིན་པའི་ངེས་དཔྱད་འབད་གནང་།',
-'actioncomplete'        => 'བྱ་ལས་མཇུག་བསྡུ།',
-'deletedtext'           => '"$1" འདི་ བཏོན་བཀོག་ནུག།
+'actioncomplete' => 'བྱ་ལས་མཇུག་བསྡུ།',
+'deletedtext' => '"$1" འདི་ བཏོན་བཀོག་ནུག།
 འཕྲལ་ཁམས་ལུ་བཏོན་བཀོག་མི་ཐོ་གི་དོན་ལུ་ $2 ལུ་བལྟ།',
-'dellogpage'            => 'བཏོན་གཏང་ཡོད་པའི་ལོག།',
-'deletecomment'         => 'རྒྱུ་མཚན:',
-'deleteotherreason'     => 'གཞན་/ཁ་སྐོང་ཅན་གྱི་རྒྱུ་མཚན།',
+'dellogpage' => 'བཏོན་གཏང་ཡོད་པའི་ལོག།',
+'deletecomment' => 'རྒྱུ་མཚན:',
+'deleteotherreason' => 'གཞན་/ཁ་སྐོང་ཅན་གྱི་རྒྱུ་མཚན།',
 'deletereasonotherlist' => 'རྒྱུ་མཚན་གཞན།',
 
 # Rollback
 'rollbacklink' => 'རྒྱབ་སྒྲིལ།',
 
 # Protect
-'protectlogpage'              => 'ཉེན་སྐྱོབ་ལོག།',
-'prot_1movedto2'              => '[[$1]] འདི་ [[$2]] ལུ་སྤོ་བཤུད་འབད་ཡོདཔ།',
-'protectcomment'              => 'རྒྱུ་མཚན:',
-'protectexpiry'               => 'དུས་ཡོལ:',
-'protect_expiry_invalid'      => 'དུས་ཡོལ་དུས་ཚོད་འདི་ ནུས་མེད་ཨིན་པས།',
-'protect_expiry_old'          => 'དུས་ཡོལ་དུས་ཚོད་འདི་ཚར་ནུག།',
-'protect-text'                => "ཁྱོད་ཀྱིས་ ནཱ་ལུ་ ཤོག་ལེབ་ '''$1''' གི་དོན་ལུ་ ཉེན་སྐྱོབ་གནས་རིམ་འདི་བསྒྱུར་བཅོས་རྐྱབ་བཏུབ།",
-'protect-locked-access'       => "ཁྱོད་ཀྱི་རྩིས་ཐོ་ནང་ ཤོག་ལེབ་ཉེན་སྐྱོབ་གནས་རིམ་བསྒྱུར་བཅོས་འབད་ནིའི་གནང་བ་མིན་འདུག།
+'protectlogpage' => 'ཉེན་སྐྱོབ་ལོག།',
+'prot_1movedto2' => '[[$1]] འདི་ [[$2]] ལུ་སྤོ་བཤུད་འབད་ཡོདཔ།',
+'protectcomment' => 'རྒྱུ་མཚན:',
+'protectexpiry' => 'དུས་ཡོལ:',
+'protect_expiry_invalid' => 'དུས་ཡོལ་དུས་ཚོད་འདི་ ནུས་མེད་ཨིན་པས།',
+'protect_expiry_old' => 'དུས་ཡོལ་དུས་ཚོད་འདི་ཚར་ནུག།',
+'protect-text' => "ཁྱོད་ཀྱིས་ ནཱ་ལུ་ ཤོག་ལེབ་ '''$1''' གི་དོན་ལུ་ ཉེན་སྐྱོབ་གནས་རིམ་འདི་བསྒྱུར་བཅོས་རྐྱབ་བཏུབ།",
+'protect-locked-access' => "ཁྱོད་ཀྱི་རྩིས་ཐོ་ནང་ ཤོག་ལེབ་ཉེན་སྐྱོབ་གནས་རིམ་བསྒྱུར་བཅོས་འབད་ནིའི་གནང་བ་མིན་འདུག།
 ད་ལྟོ་ནཱ་ལུ་ཡོད་པའི་སྒྲིག་སྟངས་འདི་ ཤོག་ལེབ་ '''$1''' གི་དོན་ལུ་ཨིན་:",
-'protect-cascadeon'           => 'འོག་གི་ཀསི་ཀེ་ཌིངཉེན་སྐྱོབ་ཤུགས་ཅན་བཟོ་ཡོད་པའི་ {{PLURAL:$1|ཤོག་ལེབ| ཤོག་ལེབ་་ཚུ་}} གི་གྲངས་སུ་ཚུད་ཡོདཔ་ལས་ ཤོག་ལེབ་འདི་ ད་ལྟོ་ཉེན་སྐྱོབ་འབད་དེ་འདུག།
+'protect-cascadeon' => 'འོག་གི་ཀསི་ཀེ་ཌིངཉེན་སྐྱོབ་ཤུགས་ཅན་བཟོ་ཡོད་པའི་ {{PLURAL:$1|ཤོག་ལེབ| ཤོག་ལེབ་་ཚུ་}} གི་གྲངས་སུ་ཚུད་ཡོདཔ་ལས་ ཤོག་ལེབ་འདི་ ད་ལྟོ་ཉེན་སྐྱོབ་འབད་དེ་འདུག།
 ཁྱོད་ཀྱིས་ ཤོག་ལེབ་འདི་གི་ཉེན་སྐྱོབ་གནས་རིམ་འདི་ བསྒྱུར་བཅོས་འབད་ཚུགས་རུང་ ཀསི་ཀ་ཌིང་ཉེན་སྐྱོབ་ལུ་མི་གནོད།',
-'protect-default'             => '(སྔོན་སྒྲིག།)',
-'protect-fallback'            => '"$1" གནང་བ་དགོས།',
+'protect-default' => '(སྔོན་སྒྲིག།)',
+'protect-fallback' => '"$1" གནང་བ་དགོས།',
 'protect-level-autoconfirmed' => 'ལེན་པ་གསརཔ་དང་ཐོ་བཀོད་མ་འབད་བའི་ལག་ལེན་པ་ཚུ་ བཀག།',
-'protect-level-sysop'         => 'སི་སོཔསི་རྐྱངམ་ཅིག།',
-'protect-summary-cascade'     => 'ཀེསི་ཀེ་ཌིང་།',
-'protect-expiring'            => '$1 (UTC) དུས་ཡོལཝ་ཨིན།',
-'protect-cascade'             => 'ཤོག་ལེབ་(ཀེསི་ཀེ་ཌིང་ཉེན་སྐྱོབ་) ཀྱི་གྲངས་སུ་ཚུད་མི་ཉེན་སྐྱོབ་ཤོག་ལེབ།',
-'protect-cantedit'            => 'ཁྱོད་ལུ་ ཞུན་དག་གི་གནང་བ་མེདཔ་ལས་ ཤོག་ལེབ་འདི་གི་ཉེན་སྐྱོབ་གནས་རིམ་བསྒྱུར་མི་ཚུགས།',
-'protect-expiry-options'      => 'ཆུ་ཚོད་ ༢:2 hours,ཉིནམ་ ༡:1 day,ཉིནམ་ ༣:3 days,བདུན་ཕྲག་ ༡:1 week,བདུན་ཕྲག་ ༢:2 weeks,ཟླཝ་ ༡:1 month,ཟླཝ་ ༣:3 months,ཟླཝ་ ༦:6 months,ལོ་ ༡:1 year,ཚད་ལས་འདས་པ་:infinite',
-'restriction-type'            => 'གནང་བ:',
-'restriction-level'           => 'མི་ཆོག་པའི་གནས་རིམ:',
+'protect-level-sysop' => 'སི་སོཔསི་རྐྱངམ་ཅིག།',
+'protect-summary-cascade' => 'ཀེསི་ཀེ་ཌིང་།',
+'protect-expiring' => '$1 (UTC) དུས་ཡོལཝ་ཨིན།',
+'protect-cascade' => 'ཤོག་ལེབ་(ཀེསི་ཀེ་ཌིང་ཉེན་སྐྱོབ་) ཀྱི་གྲངས་སུ་ཚུད་མི་ཉེན་སྐྱོབ་ཤོག་ལེབ།',
+'protect-cantedit' => 'ཁྱོད་ལུ་ ཞུན་དག་གི་གནང་བ་མེདཔ་ལས་ ཤོག་ལེབ་འདི་གི་ཉེན་སྐྱོབ་གནས་རིམ་བསྒྱུར་མི་ཚུགས།',
+'protect-expiry-options' => 'ཆུ་ཚོད་ ༢:2 hours,ཉིནམ་ ༡:1 day,ཉིནམ་ ༣:3 days,བདུན་ཕྲག་ ༡:1 week,བདུན་ཕྲག་ ༢:2 weeks,ཟླཝ་ ༡:1 month,ཟླཝ་ ༣:3 months,ཟླཝ་ ༦:6 months,ལོ་ ༡:1 year,ཚད་ལས་འདས་པ་:infinite',
+'restriction-type' => 'གནང་བ:',
+'restriction-level' => 'མི་ཆོག་པའི་གནས་རིམ:',
 
 # Undelete
 'undeletebtn' => 'བསྐྱར་གསོ།',
 
 # Namespace form on various pages
-'namespace'      => 'མིང་:',
-'invert'         => 'གནས་ལོག་སེལ་འཐུ།',
+'namespace' => 'མིང་:',
+'invert' => 'གནས་ལོག་སེལ་འཐུ།',
 'blanknamespace' => '(གཙོ་བོ།)',
 
 # Contributions
 'contributions' => 'ལག་ལེན་པའི་ཞལ་འདེབས།',
-'mycontris'     => 'ངེ་གི་ཞལ་འདེབས།',
-'contribsub2'   => '$1 ($2) གི་དོན་ལུ་',
-'uctop'         => '(མགུ་)',
-'month'         => 'ཟླཝ་(ཧེ་མ་)ལས་:',
-'year'          => 'ལོ་(ཧེ་མ་)ལས་:',
+'mycontris' => 'ངེ་གི་ཞལ་འདེབས།',
+'contribsub2' => '$1 ($2) གི་དོན་ལུ་',
+'uctop' => '(མགུ་)',
+'month' => 'ཟླཝ་(ཧེ་མ་)ལས་:',
+'year' => 'ལོ་(ཧེ་མ་)ལས་:',
 
 'sp-contributions-newbies-sub' => 'རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ།',
-'sp-contributions-blocklog'    => 'སྡེབ་ཚན་ལོག།',
-'sp-contributions-talk'        => 'བློ།',
+'sp-contributions-blocklog' => 'སྡེབ་ཚན་ལོག།',
+'sp-contributions-talk' => 'བློ།',
 
 # What links here
-'whatlinkshere'       => 'ནཱ་ལུ་ ག་ཅི་འབྲེལ་མཐུད་འོང་ནི་མས།',
+'whatlinkshere' => 'ནཱ་ལུ་ ག་ཅི་འབྲེལ་མཐུད་འོང་ནི་མས།',
 'whatlinkshere-title' => '$1 དང་འབྲེལ་མཐུད་ཡོད་པའི་ཤོག་ལེབ།',
-'linkshere'           => "འོག་གི་ཤོག་ལེབ་ཚུ་ '''[[:$1]]''' ལུ་ འབྲེལ་མཐུད་འབད་ཨིན:",
-'nolinkshere'         => "'''[[:$1]]''' ལུ་ ཤོག་ལེབ་འབྲེལ་མཐུད་མིན་འདུག།",
-'isredirect'          => 'སླར་ལོག་ཤོག་ལེབ།',
-'istemplate'          => 'གྲངས་ཚུད།',
-'whatlinkshere-prev'  => '{{PLURAL:$1|ཧེ་མམ་|ཧེ་མམ་ $1}}',
-'whatlinkshere-next'  => '{{PLURAL:$1|ཤུལ་མམ་|ཤུལ་མམ་ $1}}',
+'linkshere' => "འོག་གི་ཤོག་ལེབ་ཚུ་ '''[[:$1]]''' ལུ་ འབྲེལ་མཐུད་འབད་ཨིན:",
+'nolinkshere' => "'''[[:$1]]''' ལུ་ ཤོག་ལེབ་འབྲེལ་མཐུད་མིན་འདུག།",
+'isredirect' => 'སླར་ལོག་ཤོག་ལེབ།',
+'istemplate' => 'གྲངས་ཚུད།',
+'whatlinkshere-prev' => '{{PLURAL:$1|ཧེ་མམ་|ཧེ་མམ་ $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|ཤུལ་མམ་|ཤུལ་མམ་ $1}}',
 'whatlinkshere-links' => '← འབྲེལ་ལམ།',
 
 # Block/unblock
-'blockip'       => 'ལག་ལེན་པ་བཀག',
-'ipboptions'    => 'ཆུ་ཚོད་ ༢:2 hours,ཉིནམ་ ༡:1 day,ཉིནམ་ ༣:3 days,བདུན་ཕྲག་ ༡:1 week,བདུན་ཕྲག་ ༢:2 weeks,ཟླཝ་ ༡:1 month,ཟླཝ་ ༣:3 months,ཟླཝ་ ༦:6 months,ལོ་ ༡:1 year,ཚད་ལས་འདས་པ་:infinite',
-'ipblocklist'   => 'བཀག་ཆ་འབད་ཡོད་པའི ཨའི་པི་ཁ་བྱང་དང་ལག་ལེན་པའི་མིང།',
-'blocklink'     => 'བཀག།',
-'unblocklink'   => 'བཀག་བཤོལ་',
-'contribslink'  => 'ཕན་འདེབས།',
-'blocklogpage'  => 'སྡེབ་ཚན་ལོག།',
+'blockip' => 'ལག་ལེན་པ་བཀག',
+'ipboptions' => 'ཆུ་ཚོད་ ༢:2 hours,ཉིནམ་ ༡:1 day,ཉིནམ་ ༣:3 days,བདུན་ཕྲག་ ༡:1 week,བདུན་ཕྲག་ ༢:2 weeks,ཟླཝ་ ༡:1 month,ཟླཝ་ ༣:3 months,ཟླཝ་ ༦:6 months,ལོ་ ༡:1 year,ཚད་ལས་འདས་པ་:infinite',
+'ipblocklist' => 'བཀག་ཆ་འབད་ཡོད་པའི ཨའི་པི་ཁ་བྱང་དང་ལག་ལེན་པའི་མིང།',
+'blocklink' => 'བཀག།',
+'unblocklink' => 'བཀག་བཤོལ་',
+'contribslink' => 'ཕན་འདེབས།',
+'blocklogpage' => 'སྡེབ་ཚན་ལོག།',
 'blocklogentry' => '[[$1]] འདི་ དུས་ཡོལ་དུས་ཚོད་ $2 $3 ལུ་ འགག་བསུབ་འབད་ཡོདཔ',
 
 # Move page
-'movepagetext'     => "འོག་གི་འབྲི་ཤོག་ལག་ལེན་འཐབ་མི་དེ་གིས་ སྤྱོད་ཤུལ་ཆ་མཉམ་ མིང་གསརཔ་ལུ་སྤོ་བཤུད་འབད་དེ་ ཤོག་ལེབ་ཀྱི་བསྐྱར་མིང་བཏགས་འོང་།
+'movepagetext' => "འོག་གི་འབྲི་ཤོག་ལག་ལེན་འཐབ་མི་དེ་གིས་ སྤྱོད་ཤུལ་ཆ་མཉམ་ མིང་གསརཔ་ལུ་སྤོ་བཤུད་འབད་དེ་ ཤོག་ལེབ་ཀྱི་བསྐྱར་མིང་བཏགས་འོང་།
 མགོ་མིང་རྙིངམ་འདི་ མགོ་མིང་གསརཔ་ནང་ སླར་ལོག་ཤོག་ལེབ་ལུ་འགྱུར་འོང་།
 མགོ་མིང་རྙིངམ་གི་འབྲེལ་ལམ་ཚུ་མི་འགྱུར་   སླར་ལོག་གཉིས་ལྡན་དང་མེདཔ་ཐལ་ཡོད་མི་ཚུ་ ཞིབ་དཔྱད་ངེས་གཏན་འབད་དགོ།
 ཁྱོད་ཀྱིས་ འབྲེལ་ལམ་ཚུ་རྒྱུན་མ་ཆད་པར་འཕྲོ་མཐུད་དེ་འགྱོ་ནི་ཡོདཔ་བཟོ་དགོ།
@@ -572,21 +571,21 @@ $messages = array(
 * ཁྱོད་ཀྱིས་ འོག་ལུ་སྒྲོམ་འདི་ ཞིབ་དཔྱད་འབད་བཤོལ་ནི།
 
 གནད་དོན་དེ་ནང་ དགོས་འདོད་དང་བསྟུན་ཏེ་ ཁྱོད་ཀྱིས་ ཤོག་ལེབ་འདི་ ལག་ཐོག་ལས་ མཉམ་བསྡོམས་འབད་དགོ།",
-'movearticle'      => 'ཤོག་ལེབ་སྤོ་བཤུད་འབད་:',
-'newtitle'         => 'མགོ་མིང་གསརཔ་ལུ་:',
-'move-watch'       => 'ཤོག་ལེབ་འདི་ལྟ།',
-'movepagebtn'      => 'ཤོག་ལེབ་སྤོ་བཤུད་འབད།',
-'pagemovedsub'     => 'སྤོ་བཤུད་མཐར་འཁྱོལ་བྱུང་ཡོདཔ།',
-'movepage-moved'   => '\'\'\'"$1" འདི་ "$2"\'\'\' ལུ་ སྤོ་བཤུད་འབད་ནུག།',
-'articleexists'    => 'ཤོག་ལེབ་མིང་འདི་ཧེ་མ་ལས་ཡོདཔ་ཨིནམ་དང་ ཡང་ན་ ཁྱོད་ཀྱིས་གདམ་ཁ་བརྐྱབས་མི་མིང་འདི་ ནུས་མེད་ཨིན་པས།
+'movearticle' => 'ཤོག་ལེབ་སྤོ་བཤུད་འབད་:',
+'newtitle' => 'མགོ་མིང་གསརཔ་ལུ་:',
+'move-watch' => 'ཤོག་ལེབ་འདི་ལྟ།',
+'movepagebtn' => 'ཤོག་ལེབ་སྤོ་བཤུད་འབད།',
+'pagemovedsub' => 'སྤོ་བཤུད་མཐར་འཁྱོལ་བྱུང་ཡོདཔ།',
+'movepage-moved' => '\'\'\'"$1" འདི་ "$2"\'\'\' ལུ་ སྤོ་བཤུད་འབད་ནུག།',
+'articleexists' => 'ཤོག་ལེབ་མིང་འདི་ཧེ་མ་ལས་ཡོདཔ་ཨིནམ་དང་ ཡང་ན་ ཁྱོད་ཀྱིས་གདམ་ཁ་བརྐྱབས་མི་མིང་འདི་ ནུས་མེད་ཨིན་པས།
 མིང་གཞན་ཅིག་ གདམ་ཁ་རྐྱབས།',
-'talkexists'       => "'''ཤོག་ལེབ་འདི་ལེགས་ཤོམ་པས་སྤོ་བཤུད་འབད་ཡོད་རུང་ གཅིག་ཧེ་མ་ལས་ར་ མགོ་མིང་གསརཔ་གུ་ཡོདཔ་ལས་ བློ་ཤོག་འདི་སྤོ་བཤུད་འབད་མ་ཚུགས།
+'talkexists' => "'''ཤོག་ལེབ་འདི་ལེགས་ཤོམ་པས་སྤོ་བཤུད་འབད་ཡོད་རུང་ གཅིག་ཧེ་མ་ལས་ར་ མགོ་མིང་གསརཔ་གུ་ཡོདཔ་ལས་ བློ་ཤོག་འདི་སྤོ་བཤུད་འབད་མ་ཚུགས།
 དེ་ཚུ་ ལག་ཐོག་ལས་མཉམ་བསྡོམས་འབད་གནང་།'''",
-'movedto'          => 'ལུ་སྤོ་བཤུད་འབད།',
-'movetalk'         => 'འབྲེལ་བ་ཡོད་པའི་ཁ་སླབ་ཤོག་ལེབ་ སྤོ་བཤུད་འབད།',
-'movelogpage'      => 'ལོག་སྤོ་བཤུད་འབད།',
-'movereason'       => 'རྒྱུ་མཚན:',
-'revertmove'       => 'རྒྱབ་ལོག།',
+'movedto' => 'ལུ་སྤོ་བཤུད་འབད།',
+'movetalk' => 'འབྲེལ་བ་ཡོད་པའི་ཁ་སླབ་ཤོག་ལེབ་ སྤོ་བཤུད་འབད།',
+'movelogpage' => 'ལོག་སྤོ་བཤུད་འབད།',
+'movereason' => 'རྒྱུ་མཚན:',
+'revertmove' => 'རྒྱབ་ལོག།',
 
 # Export
 'export' => 'ཤོག་ལེབ་ཕྱིར་འདྲེན་འབད།',
@@ -595,62 +594,62 @@ $messages = array(
 'allmessages' => 'རིམ་ལུགས་འཕྲིན་དོན།',
 
 # Thumbnails
-'thumbnail-more'  => 'ཆེར་བསྐྱེད།',
+'thumbnail-more' => 'ཆེར་བསྐྱེད།',
 'thumbnail_error' => 'མཐེ་གཟེར་གསར་བཟོའི་སྐབས་ལུ་འཛོལ་བ་: $1',
 
 # Import log
 'importlogpage' => 'ལོག་ ནང་འདྲེན་འབད།',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'ངེ་གི་ལག་ལེན་པའི་ཤོག་ལེབ།',
-'tooltip-pt-mytalk'               => 'ངེ་གི་བློ་ཤོག།',
-'tooltip-pt-preferences'          => 'ངེ་གི་དགའ་གདམ།',
-'tooltip-pt-watchlist'            => 'ཁྱོད་ཀྱིས་ བསྒྱུར་བཅོས་ཀྱི་དོན་ལས་ ལྟ་རྟོག་འབད་མི་ཤོག་ལེབ་ཐོ་ཡིག།',
-'tooltip-pt-mycontris'            => 'ངེ་གི་ཞལ་འདེབས་ཐོ་ཡིག།',
-'tooltip-pt-login'                => 'ནང་བསྐྱོད་འབད་ ཡང་ན་ མ་འབད་རུང་བཏུབ།',
-'tooltip-pt-logout'               => 'ཕྱིར་བསྐྱོད།',
-'tooltip-ca-talk'                 => 'ནང་དོན་ཤོག་ལེབ་ཀྱི་སྐོར་ལས་གྲོས་བསྡུར།',
-'tooltip-ca-edit'                 => 'ཁྱོད་ཀྱིས་ ཤོག་ལེབ་འདི་ཞུན་དག་འབད་བཏུབ། དེ་ མ་སྲུང་པའི་ཧེ་མ་ སྔོན་ལྟའི་ཨེབ་རྟ་འདི་ ལག་ལེན་འཐབ་གནང་།',
-'tooltip-ca-addsection'           => 'གྲོས་བསྡུར་འདི་ལུ་ བསམ་བཀོད་ཅིག་ཁ་སྐོང་རྐྱབས།',
-'tooltip-ca-viewsource'           => 'ཤོག་ལེབ་འདི་ཉེན་སྐྱོབ་ཅན་ཅིག་ཨིན། དེ་གི་འབྱུང་ས་བལྟ་བཏུབ།',
-'tooltip-ca-protect'              => 'ཤོག་ལེབ་འདི་ཉེན་སྐྱོབ་འབད།',
-'tooltip-ca-delete'               => 'ཤོག་ལེབ་འདི་ བཏོན་བཏང་།',
-'tooltip-ca-move'                 => 'ཤོག་ལེབ་འདི་ སྤོ་བཤུད་འབད།',
-'tooltip-ca-watch'                => 'ཤོག་ལེབ་འདི་ ཁྱོད་རའི་བལྟ་ཞིབ་ཐོ་ཡིག་ནང་ ཁ་སྐོང་རྐྱབས།',
-'tooltip-ca-unwatch'              => 'ཤོག་ལེབ་འདི་ ཁྱོད་རའི་བལྟ་ཞིབ་ཐོ་ཡིག་ནང་ལས་ བཏོན་གཏང་།',
-'tooltip-search'                  => '{{SITENAME}} འཚོལ་ཞིབ་འབད།',
-'tooltip-n-mainpage'              => 'མ་ཤོག་ལུ་བལྟ་ཞིབ་འབད།',
-'tooltip-n-portal'                => 'ལས་འགུལ་གྱི་སྐོར་ལས་   ཁྱོད་ཀྱིས་ ག་ཅི་འབད་ཚུགས་ག་ འཚོལ་ཞིབ་ག་ཏེ་ལས་འབད་ནི་ཨིན་ན་',
-'tooltip-n-currentevents'         => 'ད་ལྟོའི་འབྱུང་ལས་གུ་ རྒྱབ་གཞིའི་བརྡ་དོན་འཚོལ།',
-'tooltip-n-recentchanges'         => 'ཝི་ཀི་ནང་གི་ཕྲལ་གྱི་བསྒྱུར་བཅོས་ཐོ་ཡིག།',
-'tooltip-n-randompage'            => 'རིམ་བྲལ་ཤོག་ལེབ་ཅིག་ མངོན་གསལ་འབད།',
-'tooltip-n-help'                  => 'འཚོལ་ཞིབ་འབད་སའི་ས་གནས།',
-'tooltip-t-whatlinkshere'         => 'ནཱ་ལུ་ འབྲེལ་མཐུད་འབད་བའི་ཝི་ཀི་ཤོག་ལེབ་ག་ར་གི་ཐོ་ཡིག།',
-'tooltip-t-contributions'         => 'ལག་ལེན་པ་འདི་གི་ཞལ་འདེབས་ཐོ་ཡིག་བལྟ།',
-'tooltip-t-emailuser'             => 'ལག་ལེན་པ་འདི་ལུ་ གློག་འཕྲིན་གཏང་།',
-'tooltip-t-upload'                => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
-'tooltip-t-specialpages'          => 'དམིགས་བསལ་ཤོག་ལེབ་ཚུ་གི་ཐོ་ཡིག།',
-'tooltip-ca-nstab-user'           => 'ལག་ལེན་པའི་ཤོག་ལེབ་བལྟ།',
-'tooltip-ca-nstab-project'        => 'ལས་འགུལ་ཤོག་ལེབ་བལྟ།',
-'tooltip-ca-nstab-image'          => 'ཡིག་སྣོད་ཤོག་ལེབ་འདི་སྟོན།',
-'tooltip-ca-nstab-template'       => 'ཊེམ་པེལེཊི་བལྟ།',
-'tooltip-ca-nstab-help'           => 'གྲོགས་རམ་ཤོག་ལེབ་ལུ་ལྟ།',
-'tooltip-ca-nstab-category'       => 'དབྱེ་རིམ་ཤོག་ལེབ་སྟོན།',
-'tooltip-minoredit'               => 'གལ་གནད་ཆུང་བའི་ཞུན་དག་སྦེ་རྟགས་བཀལ།',
-'tooltip-save'                    => 'ཁྱོད་ཀྱིས་ བསྒྱུར་བཅོས་བརྐྱབས་མི་ཚུ་སྲུངས།',
-'tooltip-preview'                 => 'ཁྱོད་ཀྱི་བསྒྱུར་བཅོས་ཚུ་མ་སྲུང་པའི་ཧེ་མར་  སྔོན་ལྟ་འབད་གནང།',
-'tooltip-diff'                    => 'ཁྱོད་ཀྱིས་ ཚིག་ཡིག་ལུ་ ག་ཅི་བསྒྱུར་བཅོས་འབད་ཡི་ག་སྟོན།',
+'tooltip-pt-userpage' => 'ངེ་གི་ལག་ལེན་པའི་ཤོག་ལེབ།',
+'tooltip-pt-mytalk' => 'ངེ་གི་བློ་ཤོག།',
+'tooltip-pt-preferences' => 'ངེ་གི་དགའ་གདམ།',
+'tooltip-pt-watchlist' => 'ཁྱོད་ཀྱིས་ བསྒྱུར་བཅོས་ཀྱི་དོན་ལས་ ལྟ་རྟོག་འབད་མི་ཤོག་ལེབ་ཐོ་ཡིག།',
+'tooltip-pt-mycontris' => 'ངེ་གི་ཞལ་འདེབས་ཐོ་ཡིག།',
+'tooltip-pt-login' => 'ནང་བསྐྱོད་འབད་ ཡང་ན་ མ་འབད་རུང་བཏུབ།',
+'tooltip-pt-logout' => 'ཕྱིར་བསྐྱོད།',
+'tooltip-ca-talk' => 'ནང་དོན་ཤོག་ལེབ་ཀྱི་སྐོར་ལས་གྲོས་བསྡུར།',
+'tooltip-ca-edit' => 'ཁྱོད་ཀྱིས་ ཤོག་ལེབ་འདི་ཞུན་དག་འབད་བཏུབ། དེ་ མ་སྲུང་པའི་ཧེ་མ་ སྔོན་ལྟའི་ཨེབ་རྟ་འདི་ ལག་ལེན་འཐབ་གནང་།',
+'tooltip-ca-addsection' => 'གྲོས་བསྡུར་འདི་ལུ་ བསམ་བཀོད་ཅིག་ཁ་སྐོང་རྐྱབས།',
+'tooltip-ca-viewsource' => 'ཤོག་ལེབ་འདི་ཉེན་སྐྱོབ་ཅན་ཅིག་ཨིན། དེ་གི་འབྱུང་ས་བལྟ་བཏུབ།',
+'tooltip-ca-protect' => 'ཤོག་ལེབ་འདི་ཉེན་སྐྱོབ་འབད།',
+'tooltip-ca-delete' => 'ཤོག་ལེབ་འདི་ བཏོན་བཏང་།',
+'tooltip-ca-move' => 'ཤོག་ལེབ་འདི་ སྤོ་བཤུད་འབད།',
+'tooltip-ca-watch' => 'ཤོག་ལེབ་འདི་ ཁྱོད་རའི་བལྟ་ཞིབ་ཐོ་ཡིག་ནང་ ཁ་སྐོང་རྐྱབས།',
+'tooltip-ca-unwatch' => 'ཤོག་ལེབ་འདི་ ཁྱོད་རའི་བལྟ་ཞིབ་ཐོ་ཡིག་ནང་ལས་ བཏོན་གཏང་།',
+'tooltip-search' => '{{SITENAME}} འཚོལ་ཞིབ་འབད།',
+'tooltip-n-mainpage' => 'མ་ཤོག་ལུ་བལྟ་ཞིབ་འབད།',
+'tooltip-n-portal' => 'ལས་འགུལ་གྱི་སྐོར་ལས་   ཁྱོད་ཀྱིས་ ག་ཅི་འབད་ཚུགས་ག་ འཚོལ་ཞིབ་ག་ཏེ་ལས་འབད་ནི་ཨིན་ན་',
+'tooltip-n-currentevents' => 'ད་ལྟོའི་འབྱུང་ལས་གུ་ རྒྱབ་གཞིའི་བརྡ་དོན་འཚོལ།',
+'tooltip-n-recentchanges' => 'ཝི་ཀི་ནང་གི་ཕྲལ་གྱི་བསྒྱུར་བཅོས་ཐོ་ཡིག།',
+'tooltip-n-randompage' => 'རིམ་བྲལ་ཤོག་ལེབ་ཅིག་ མངོན་གསལ་འབད།',
+'tooltip-n-help' => 'འཚོལ་ཞིབ་འབད་སའི་ས་གནས།',
+'tooltip-t-whatlinkshere' => 'ནཱ་ལུ་ འབྲེལ་མཐུད་འབད་བའི་ཝི་ཀི་ཤོག་ལེབ་ག་ར་གི་ཐོ་ཡིག།',
+'tooltip-t-contributions' => 'ལག་ལེན་པ་འདི་གི་ཞལ་འདེབས་ཐོ་ཡིག་བལྟ།',
+'tooltip-t-emailuser' => 'ལག་ལེན་པ་འདི་ལུ་ གློག་འཕྲིན་གཏང་།',
+'tooltip-t-upload' => 'ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།',
+'tooltip-t-specialpages' => 'དམིགས་བསལ་ཤོག་ལེབ་ཚུ་གི་ཐོ་ཡིག།',
+'tooltip-ca-nstab-user' => 'ལག་ལེན་པའི་ཤོག་ལེབ་བལྟ།',
+'tooltip-ca-nstab-project' => 'ལས་འགུལ་ཤོག་ལེབ་བལྟ།',
+'tooltip-ca-nstab-image' => 'ཡིག་སྣོད་ཤོག་ལེབ་འདི་སྟོན།',
+'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-watch' => 'ཤོག་ལེབ་འདི་ ཁྱོད་རའི་བལྟ་ཞིབ་ཐོ་ཡིག་ནང་ ཁ་སྐོང་རྐྱབས།',
 
 # Browsing diffs
 'previousdiff' => '← ཧེ་མའི་ཁྱད་པར།',
-'nextdiff'     => 'ཤུལ་མམ་གྱི་ཁྱད་པར་ →',
+'nextdiff' => 'ཤུལ་མམ་གྱི་ཁྱད་པར་ →',
 
 # Media information
 'file-info-size' => '$1 × $2 པིག་སེལ་  ཡིག་སྣོད་ཀྱི་ཚད་: $3 མའིམ་དབྱེ་བ་: $4',
-'file-nohires'   => 'ཧུམ་ཆ་ལེགས་ཤོམ་མིན་འདུག།',
-'svg-long-desc'  => 'ཨེསི་བི་ཇི་ཡིག་སྣོད་  $1 × $2 པིག་སེལསི་ཆུང་སུ་ཅིག་  ཡིག་སྣོད་ཚད་: $3',
+'file-nohires' => 'ཧུམ་ཆ་ལེགས་ཤོམ་མིན་འདུག།',
+'svg-long-desc' => 'ཨེསི་བི་ཇི་ཡིག་སྣོད་  $1 × $2 པིག་སེལསི་ཆུང་སུ་ཅིག་  ཡིག་སྣོད་ཚད་: $3',
 'show-big-image' => 'ཧུམ་ཆ་གང་།',
 
 # Special:NewFiles
@@ -664,12 +663,12 @@ $messages = array(
 གྲལ་ཐིག་ཅོག་འཐད་མི་གུ་ལུ་ ཤུལ་མའི་འབྲེལ་ལམ་ག་ཅི་ཨིན་རུང་ དེའི་གྲངས་སུ་མི་རྩིས་ དེ་ཡང་ གྱལ་རིམ་ནང་ཡོད་པའི་ཡིག་སྣོད་ཤོགལེབ་ཚུ།',
 
 # Metadata
-'metadata'          => 'མེ་ཊ་གནས་སྡུད།',
-'metadata-help'     => 'ཡིག་སྣོད་དེ་ནང་ ཌི་ཇི་ཊཱལ་པར་ཆས་དང་ ཡང་ན་ པར་ལེན་འཕྲུལ་ཆས་ནང་ལས་ཁ་སྐོང་འབད་ཡོད་པའི་ གསར་བཟོའི་བརྡ་དོན་ཚུ་ཡོད།
+'metadata' => 'མེ་ཊ་གནས་སྡུད།',
+'metadata-help' => 'ཡིག་སྣོད་དེ་ནང་ ཌི་ཇི་ཊཱལ་པར་ཆས་དང་ ཡང་ན་ པར་ལེན་འཕྲུལ་ཆས་ནང་ལས་ཁ་སྐོང་འབད་ཡོད་པའི་ གསར་བཟོའི་བརྡ་དོན་ཚུ་ཡོད།
 གལ་སྲིད་ ཡིག་སྣོད་འདི་ སྔར་བཞིན་མ་བཞག་པར་ ལེགས་བཅོས་འབད་བ་ཅིན་ ཁ་གསལ་བཀོད་མི་ལ་ལོ་ཅིག་གིས་ལེགས་བཅོས་འབད་ཡོད་མི་ཡིག་སྣོད་ ཆ་ཚང་མི་སྟོན་འོང་།',
-'metadata-expand'   => 'རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་སྟོན།',
+'metadata-expand' => 'རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་སྟོན།',
 'metadata-collapse' => 'རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་ཚུ་སྦ།',
-'metadata-fields'   => 'མེ་ཊ་གནས་སྡུད་ཐིག་ཁྲམ་ ཧྲམ་པའི་སྐབས་ལུ་ འཕྲིན་དོན་འདི་ནང་ ཐོ་བཀོད་འབད་་ཡོད་པའི་ ཨི་ཨེགསི་ཨའི་ཨེཕ་ མེ་ཊ༌གནས་སྡུད་འདི་ གཟུགས་བརྙན་ཤོག་ལེབ་བཀྲམ་སྟོན་གུ་ གྲངས་སུ་བཙུགས་འོང་།
+'metadata-fields' => 'མེ་ཊ་གནས་སྡུད་ཐིག་ཁྲམ་ ཧྲམ་པའི་སྐབས་ལུ་ འཕྲིན་དོན་འདི་ནང་ ཐོ་བཀོད་འབད་་ཡོད་པའི་ ཨི་ཨེགསི་ཨའི་ཨེཕ་ མེ་ཊ༌གནས་སྡུད་འདི་ གཟུགས་བརྙན་ཤོག་ལེབ་བཀྲམ་སྟོན་གུ་ གྲངས་སུ་བཙུགས་འོང་།
 གཞན་ཚུ་ སྔོན་སྒྲིག་གི་ཐོག་ལས་སྦ་འོང་།
 * make
 * model
@@ -686,18 +685,18 @@ $messages = array(
 * gpsaltitude',
 
 # 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'     => 'ཆ་མཉམ།',
+'monthsall' => 'ཆ་མཉམ།',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'འབྲེལ་བ་ཡོད་པའི་བསྒྱུར་བཅོས་ཚུ་སྟོན།',
 'watchlisttools-edit' => 'བལྟ་སྟེ་བལྟ་ཞིབ་ཐོ་ཡིག་ཞུན་དག་འབད།',
-'watchlisttools-raw'  => 'རགས་ཙམ་གྱི་བལྟ་ཞིབ་ཐོ་ཡིག་ ཞུན་དག་འབད་',
+'watchlisttools-raw' => 'རགས་ཙམ་གྱི་བལྟ་ཞིབ་ཐོ་ཡིག་ ཞུན་དག་འབད་',
 
 # Special:Version
 'version' => 'ཐོན་རིམ།',
index 4b7c562..5be1194 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Ewe (Eʋegbe)
+/** Ewe (eʋegbe)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
 
 $messages = array(
 # User preference toggles
-'tog-hideminor'            => 'Ɣla tɔtrɔ suewo le tɔtrɔ yeyeawo me',
-'tog-watchcreations'       => 'Tsɔ axa siwo gɔme medze la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
-'tog-watchdefault'         => 'Tsɔ axa siwo ŋu metrɔ asi le la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
-'tog-watchmoves'           => 'Tsɔ axa siwo ƒe nɔƒe meɖɔli la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
-'tog-watchdeletion'        => 'Tsɔ axa siwo metutu la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
+'tog-hideminor' => 'Ɣla tɔtrɔ suewo le tɔtrɔ yeyeawo me',
+'tog-watchcreations' => 'Tsɔ axa siwo gɔme medze la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
+'tog-watchdefault' => 'Tsɔ axa siwo ŋu metrɔ asi le la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
+'tog-watchmoves' => 'Tsɔ axa siwo ƒe nɔƒe meɖɔli la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
+'tog-watchdeletion' => 'Tsɔ axa siwo metutu la kpe ɖe axa siwo ŋu nyeƒe ŋku le la ŋu',
 'tog-enotifwatchlistpages' => 'Ɖo du nam ne axa aɖe si ŋu nyeƒe ŋku le la trɔ',
 
 'underline-always' => 'Ɣesiaɣi',
-'underline-never'  => 'Gbeɖe',
+'underline-never' => 'Gbeɖe',
 
 # Dates
-'sunday'        => 'Kɔsiɖagbe',
-'monday'        => 'Dzoɖagbe',
-'tuesday'       => 'Brãɖagbe',
-'wednesday'     => 'Kuɖagbe',
-'thursday'      => 'Yawoɖagbe',
-'friday'        => 'Fiɖagbe',
-'saturday'      => 'Memleɖagbe',
-'sun'           => 'Kɔs',
-'mon'           => 'Dzo',
-'tue'           => 'Brã',
-'wed'           => 'Kuɖ',
-'thu'           => 'Yaw',
-'fri'           => 'Fiɖ',
-'sat'           => 'Mem',
-'january'       => 'Dzove',
-'february'      => 'Dzodze',
-'march'         => 'Tedoxe',
-'april'         => 'Afɔfiɛ',
-'may_long'      => 'Damɛ',
-'june'          => 'Masa',
-'july'          => 'Siamlɔm',
-'august'        => 'Dasiamime',
-'september'     => 'Anyɔnyɔ',
-'october'       => 'Kele',
-'november'      => 'Adeɛmekpɔxe',
-'december'      => 'Dzome',
-'january-gen'   => 'Dzove',
-'february-gen'  => 'Dzodze',
-'march-gen'     => 'Tedoxe',
-'april-gen'     => 'Afɔfiɛ',
-'may-gen'       => 'Damɛ',
-'june-gen'      => 'Masa',
-'july-gen'      => 'Siamlɔm',
-'august-gen'    => 'Dasiamime',
+'sunday' => 'Kɔsiɖagbe',
+'monday' => 'Dzoɖagbe',
+'tuesday' => 'Brãɖagbe',
+'wednesday' => 'Kuɖagbe',
+'thursday' => 'Yawoɖagbe',
+'friday' => 'Fiɖagbe',
+'saturday' => 'Memleɖagbe',
+'sun' => 'Kɔs',
+'mon' => 'Dzo',
+'tue' => 'Brã',
+'wed' => 'Kuɖ',
+'thu' => 'Yaw',
+'fri' => 'Fiɖ',
+'sat' => 'Mem',
+'january' => 'Dzove',
+'february' => 'Dzodze',
+'march' => 'Tedoxe',
+'april' => 'Afɔfiɛ',
+'may_long' => 'Damɛ',
+'june' => 'Masa',
+'july' => 'Siamlɔm',
+'august' => 'Dasiamime',
+'september' => 'Anyɔnyɔ',
+'october' => 'Kele',
+'november' => 'Adeɛmekpɔxe',
+'december' => 'Dzome',
+'january-gen' => 'Dzove',
+'february-gen' => 'Dzodze',
+'march-gen' => 'Tedoxe',
+'april-gen' => 'Afɔfiɛ',
+'may-gen' => 'Damɛ',
+'june-gen' => 'Masa',
+'july-gen' => 'Siamlɔm',
+'august-gen' => 'Dasiamime',
 'september-gen' => 'Anyɔnyɔ',
-'october-gen'   => 'Kele',
-'november-gen'  => 'Adeɛmekpɔxe',
-'december-gen'  => 'Dzome',
-'jan'           => 'Dzov',
-'feb'           => 'Dzod',
-'mar'           => 'Ted',
-'apr'           => 'Afɔ',
-'may'           => 'Damɛ',
-'jun'           => 'Mas',
-'jul'           => 'Sia',
-'aug'           => 'Das',
-'sep'           => 'Any',
-'oct'           => 'Kel',
-'nov'           => 'Ade',
-'dec'           => 'Dzom',
+'october-gen' => 'Kele',
+'november-gen' => 'Adeɛmekpɔxe',
+'december-gen' => 'Dzome',
+'jan' => 'Dzov',
+'feb' => 'Dzod',
+'mar' => 'Ted',
+'apr' => 'Afɔ',
+'may' => 'Damɛ',
+'jun' => 'Mas',
+'jul' => 'Sia',
+'aug' => 'Das',
+'sep' => 'Any',
+'oct' => 'Kel',
+'nov' => 'Ade',
+'dec' => 'Dzom',
 
 # Categories related messages
 'listingcontinuesabbrev' => 'yi dzi',
 
-'about'      => 'Ŋutinya',
-'newwindow'  => '(eʋua fesre yeye)',
-'cancel'     => 'Dzudzɔ etɔtrɔ',
-'mypage'     => 'Axa nye',
-'mytalk'     => 'Nyeƒe nyamedzroƒe',
+'about' => 'Ŋutinya',
+'newwindow' => '(eʋua fesre yeye)',
+'cancel' => 'Dzudzɔ etɔtrɔ',
+'mypage' => 'Axa nye',
+'mytalk' => 'Nyeƒe nyamedzroƒe',
 'navigation' => 'Mɔtabiala',
-'and'        => '&#32;kpakple',
+'and' => '&#32;kpakple',
 
 # Cologne Blue skin
-'qbfind'         => 'Di',
-'qbedit'         => 'Trɔ asi le eŋu',
-'qbpageoptions'  => 'Axa sia',
-'qbmyoptions'    => 'Nyeƒe axawo',
+'qbfind' => 'Di',
+'qbedit' => 'Trɔ asi le eŋu',
+'qbpageoptions' => 'Axa sia',
+'qbmyoptions' => 'Nyeƒe axawo',
 'qbspecialpages' => 'Axa tɔxewo',
 
 # Vector skin
-'vector-action-delete'   => 'Tutui',
-'vector-action-move'     => 'Ɖɔli eƒe nɔƒe',
-'vector-view-create'     => 'Dze egɔme',
-'vector-view-edit'       => 'Trɔ asi le eŋu',
-'vector-view-history'    => 'Kpɔ xoxoawo',
-'vector-view-view'       => 'Xlẽ',
+'vector-action-delete' => 'Tutui',
+'vector-action-move' => 'Ɖɔli eƒe nɔƒe',
+'vector-view-create' => 'Dze egɔme',
+'vector-view-edit' => 'Trɔ asi le eŋu',
+'vector-view-history' => 'Kpɔ xoxoawo',
+'vector-view-view' => 'Xlẽ',
 'vector-view-viewsource' => 'Kpɔ alesi woŋlɔe',
 
-'errorpagetitle'   => 'Vodada',
-'returnto'         => 'Gbugbɔ yi $1.',
-'tagline'          => 'Tso {{SITENAME}}',
-'help'             => 'Kpekpeɖeŋu',
-'search'           => 'Dii',
-'searchbutton'     => 'Dii',
-'go'               => 'Yi',
-'searcharticle'    => 'Yi',
-'history'          => 'Axa sia ƒe tata xoxoawo',
-'history_short'    => 'Xoxoawo',
-'edit'             => 'Trɔ asi le eŋu',
-'create'           => 'Dze egɔme',
-'editthispage'     => 'Ðɔ axa sia ɖo',
+'errorpagetitle' => 'Vodada',
+'returnto' => 'Gbugbɔ yi $1.',
+'tagline' => 'Tso {{SITENAME}}',
+'help' => 'Kpekpeɖeŋu',
+'search' => 'Dii',
+'searchbutton' => 'Dii',
+'go' => 'Yi',
+'searcharticle' => 'Yi',
+'history' => 'Axa sia ƒe tata xoxoawo',
+'history_short' => 'Xoxoawo',
+'edit' => 'Trɔ asi le eŋu',
+'create' => 'Dze egɔme',
+'editthispage' => 'Ðɔ axa sia ɖo',
 'create-this-page' => 'Dze axa sia gɔme',
-'delete'           => 'Tutui',
-'deletethispage'   => 'Tutu axa sia',
-'protect'          => 'Dzɔ eŋu',
-'protect_change'   => 'ɖɔlii',
-'protectthispage'  => 'Dzɔ axa sia ŋu',
-'newpage'          => 'Axa yeye',
+'delete' => 'Tutui',
+'deletethispage' => 'Tutu axa sia',
+'protect' => 'Dzɔ eŋu',
+'protect_change' => 'ɖɔlii',
+'protectthispage' => 'Dzɔ axa sia ŋu',
+'newpage' => 'Axa yeye',
 'talkpagelinktext' => 'Nyamedzroƒe',
-'specialpage'      => 'Axa Tɔxe',
-'personaltools'    => 'Wòƒe dɔwɔnuwo',
-'postcomment'      => 'Akpa yeye',
-'talk'             => 'Nyamedzroƒe',
-'toolbox'          => 'Dɔwɔnuɖaka',
-'otherlanguages'   => 'Le gbe bubuwo me',
-'redirectedfrom'   => '(Woɖo wò ɖe afii tso $1)',
-'lastmodifiedat'   => 'Wó ɖɔ axa sia ɖo susue le $2 le ŋkeke $1 dzi.',
-'viewcount'        => 'Wokpɔ axa sia zi {{PLURAL:$1|ɖeka|$1 sɔ̃}}.',
-'jumpto'           => 'Dzo yi:',
+'specialpage' => 'Axa Tɔxe',
+'personaltools' => 'Wòƒe dɔwɔnuwo',
+'postcomment' => 'Akpa yeye',
+'talk' => 'Nyamedzroƒe',
+'toolbox' => 'Dɔwɔnuɖaka',
+'otherlanguages' => 'Le gbe bubuwo me',
+'redirectedfrom' => '(Woɖo wò ɖe afii tso $1)',
+'lastmodifiedat' => 'Wó ɖɔ axa sia ɖo susue le $2 le ŋkeke $1 dzi.',
+'viewcount' => 'Wokpɔ axa sia zi {{PLURAL:$1|ɖeka|$1 sɔ̃}}.',
+'jumpto' => 'Dzo yi:',
 'jumptonavigation' => 'kuɖɔɖoɖo',
-'jumptosearch'     => 'dii',
+'jumptosearch' => 'dii',
 
 # 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}} ŋutinya',
-'aboutpage'            => 'Project:Ŋutinya',
-'copyright'            => 'Nusiwo le afii le $1 mɔɖeɖea te.',
-'copyrightpage'        => '{{ns:project}}:Mɔɖeɖewo',
-'currentevents'        => 'Amaneɛ',
-'currentevents-url'    => 'Project:Nusiwo le dzɔdzɔm',
-'disclaimers'          => 'Nuxlɔ̃amenyawo',
-'edithelp'             => 'Kpekpeɖeŋu na etɔtrɔ',
-'mainpage'             => 'Axa do Ŋgɔ',
+'aboutsite' => '{{SITENAME}} ŋutinya',
+'aboutpage' => 'Project:Ŋutinya',
+'copyright' => 'Nusiwo le afii le $1 mɔɖeɖea te.',
+'copyrightpage' => '{{ns:project}}:Mɔɖeɖewo',
+'currentevents' => 'Amaneɛ',
+'currentevents-url' => 'Project:Nusiwo le dzɔdzɔm',
+'disclaimers' => 'Nuxlɔ̃amenyawo',
+'edithelp' => 'Kpekpeɖeŋu na etɔtrɔ',
+'mainpage' => 'Axa do Ŋgɔ',
 'mainpage-description' => 'Axa do ŋgɔ',
-'portal'               => 'Takpekpewɔƒe',
-'portal-url'           => 'Project:Takpekpewɔƒe',
+'portal' => 'Takpekpewɔƒe',
+'portal-url' => 'Project:Takpekpewɔƒe',
 
-'badaccess'        => 'Mɔɖeɖe vodada',
+'badaccess' => 'Mɔɖeɖe vodada',
 'badaccess-group0' => 'Se meɖe mɔ be nawɔ nusi wòle babiam be yeawɔ o.',
 
-'retrievedfrom'           => 'Nuŋɔŋlɔ sia tso "$1"',
-'youhavenewmessages'      => '$1 le asiwo ($2).',
-'newmessageslink'         => 'du yeyewo',
-'newmessagesdifflink'     => 'tɔtrɔ mamlea',
+'retrievedfrom' => 'Nuŋɔŋlɔ sia tso "$1"',
+'youhavenewmessages' => '$1 le asiwo ($2).',
+'newmessageslink' => 'du yeyewo',
+'newmessagesdifflink' => 'tɔtrɔ mamlea',
 'youhavenewmessagesmulti' => 'Du yeyewo le asiwo le $1',
-'editsection'             => 'trɔ asi le eŋu',
-'editold'                 => 'trɔ asi le eŋu',
-'viewsourceold'           => 'kpɔ alesi wó ŋlɔe',
-'editlink'                => 'trɔ asi le eŋu',
-'viewsourcelink'          => 'kpɔ alesi woŋlɔe',
-'editsectionhint'         => 'Trɔ akpa: $1',
-'toc'                     => 'Emenyawo',
-'showtoc'                 => 'fia',
-'hidetoc'                 => 'ɣla',
-'thisisdeleted'           => 'Kpɔ $1 alo wòa gbugbɔe ve hã?',
-'viewdeleted'             => 'Wòa kpɔ $1 a?',
-'red-link-title'          => '$1 (womeŋlɔ axa sia haɖeke o)',
+'editsection' => 'trɔ asi le eŋu',
+'editold' => 'trɔ asi le eŋu',
+'viewsourceold' => 'kpɔ alesi wó ŋlɔe',
+'editlink' => 'trɔ asi le eŋu',
+'viewsourcelink' => 'kpɔ alesi woŋlɔe',
+'editsectionhint' => 'Trɔ akpa: $1',
+'toc' => 'Emenyawo',
+'showtoc' => 'fia',
+'hidetoc' => 'ɣla',
+'thisisdeleted' => 'Kpɔ $1 alo wòa gbugbɔe ve hã?',
+'viewdeleted' => 'Wòa kpɔ $1 a?',
+'red-link-title' => '$1 (womeŋlɔ axa sia haɖeke o)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Axa',
-'nstab-user'      => 'Ezãla axa',
-'nstab-special'   => 'Axa tɔxe',
-'nstab-image'     => 'Agbalẽ',
+'nstab-main' => 'Axa',
+'nstab-user' => 'Ezãla axa',
+'nstab-special' => 'Axa tɔxe',
+'nstab-image' => 'Agbalẽ',
 'nstab-mediawiki' => 'Du',
 
 # General errors
-'error'           => 'Vodada',
+'error' => 'Vodada',
 'badarticleerror' => 'Wòmateŋu awɔ nusia le axa sia dzi o.',
-'cannotdelete'    => 'Womateŋu atutu axa sia alo axa "$1" o.
+'cannotdelete' => 'Womateŋu atutu axa sia alo axa "$1" o.
 Ɖewomahĩ ame aɖe tutui xoxo.',
-'badtitle'        => 'Tanya gbegblẽ',
-'viewsource'      => 'Kpɔ alesi wowɔe',
+'badtitle' => 'Tanya gbegblẽ',
+'viewsource' => 'Kpɔ alesi wowɔe',
 
 # Login and logout pages
-'remembermypassword'         => 'Ɖo ŋku nyeƒe dzesi ŋkɔ dzi le mɔ sia dzi (vaseɖe {{PLURAL:$1|ŋkeke|ŋkeke}} $1 megbe)',
-'login'                      => 'Ge ɖe eme',
-'nav-login-createaccount'    => 'Geɖe me / Ŋlɔ ŋkɔ',
-'userlogin'                  => 'Ge ɖe eme / ŋlɔ ŋkɔ daɖi',
-'logout'                     => 'Do le eme',
-'userlogout'                 => 'Do le eme',
-'nologin'                    => "Wòmeŋlɔ ŋkɔ oa? '''$1'''.",
-'nologinlink'                => 'Ŋlɔ ŋkɔ daɖi',
-'createaccount'              => 'Ŋlɔ ŋkɔ daɖi',
-'gotaccount'                 => "Wò ŋlɔ ŋkɔ xoxoa? '''$1'''.",
-'gotaccountlink'             => 'Ge ɖe eme',
-'loginsuccesstitle'          => 'Wò ge ɖe eme azɔ̃.',
-'loginsuccess'               => "'''Wò le {{SITENAME}} me fifia abe \"\$1\" ene.'''",
-'nouserspecified'            => 'Elebe na ŋlɔ ŋkɔ si wò zãna',
+'remembermypassword' => 'Ɖo ŋku nyeƒe dzesi ŋkɔ dzi le mɔ sia dzi (vaseɖe {{PLURAL:$1|ŋkeke|ŋkeke}} $1 megbe)',
+'login' => 'Ge ɖe eme',
+'nav-login-createaccount' => 'Geɖe me / Ŋlɔ ŋkɔ',
+'userlogin' => 'Ge ɖe eme / ŋlɔ ŋkɔ daɖi',
+'logout' => 'Do le eme',
+'userlogout' => 'Do le eme',
+'nologin' => "Wòmeŋlɔ ŋkɔ oa? '''$1'''.",
+'nologinlink' => 'Ŋlɔ ŋkɔ daɖi',
+'createaccount' => 'Ŋlɔ ŋkɔ daɖi',
+'gotaccount' => "Wò ŋlɔ ŋkɔ xoxoa? '''$1'''.",
+'gotaccountlink' => 'Ge ɖe eme',
+'loginsuccesstitle' => 'Wò ge ɖe eme azɔ̃.',
+'loginsuccess' => "'''Wò le {{SITENAME}} me fifia abe \"\$1\" ene.'''",
+'nouserspecified' => 'Elebe na ŋlɔ ŋkɔ si wò zãna',
 'acct_creation_throttle_hit' => "Wiki sia zãla aɖe tso wò ''IP address'' ŋlɔ {{PLURAL:$1|1 ŋkɔ|$1 ŋkɔwo}} le ŋkeke si vayi me xoxo. Mɔɖeɖe le na ŋkɔ  ɖeka ko ŋɔŋlɔ le ŋkeke ɖeka me.<br />
 Le esiata la, ''IP address'' sia zãlawo mekpɔ mɔ aŋlɔ ŋkɔ bubuwo fifia o.",
-'loginlanguagelabel'         => 'Gbe: $1',
+'loginlanguagelabel' => 'Gbe: $1',
 
 # Edit page toolbar
 'sig_tip' => 'Dzesiwò kple gaƒoƒoa',
 
 # Edit pages
-'subject'                          => 'Ta nya:',
-'minoredit'                        => 'Esia nye tɔtrɔ sue aɖe ko',
-'watchthis'                        => 'Le ŋku ɖe axa sia ŋu',
-'savearticle'                      => 'Dzra axa sia ɖo',
-'preview'                          => 'Kpɔe do ŋgɔ',
-'showpreview'                      => 'Fiae do ŋgɔ',
-'showdiff'                         => 'Fia tɔtrɔwo',
-'newarticle'                       => '(Yeye)',
-'newarticletext'                   => "Eva ɖo axa si gɔme womedze haɖeke o. Ne wòadi be yeadze egɔme la, dze nuŋlɔm ɖe go sia me le afi sia ɖome (kpɔ [[{{MediaWiki:Helppage}}|kpekpeɖeŋu nyawo]] na kpekpeɖeŋu bubuwo). Ne wòme ɖoe be yeava afii hafi o la, ekema tia '''megbe''' eye wòa gbugbɔ ayi afisi wòtso va.",
-'previewnote'                      => "'''Ɖo ŋku edzi be wole afii fiam do ŋgɔ, wome dzrae ɖo haɖeke o!'''",
-'editing'                          => '$1 na etɔtrɔ',
-'editingsection'                   => 'Wòle $1 (ƒe akpa aɖe) trɔm',
-'yourtext'                         => 'Wò nuŋɔŋlɔ',
-'yourdiff'                         => 'Vovototowo',
-'copyrightwarning'                 => "Taflatse, mítsɔe be nusiwo katã netsɔ kpe ɖe {{SITENAME}} ŋu lii fãa le $2 la nu (kpɔ $1 me nyawo). Ne madze ŋuwò be amebubuwo natrɔ asi le nusiwo newɔ ŋuti o, eye woagbugbɔ dɔsiwo newɔ ama na amebubuwo fãa o la, mega dae ɖe afisia o.<br /> Wòle ŋugbe dom na mí bena wò ŋutɔe ŋlɔ nusiawo, alo etsɔe tso afisi mɔɖeɖe li fãa be amesiame na tsɔ nuwo tso afima fãa. '''Mega da nusiwo ŋu mɔɖeɖe meli na o la ɖe afisia o!'''",
+'subject' => 'Ta nya:',
+'minoredit' => 'Esia nye tɔtrɔ sue aɖe ko',
+'watchthis' => 'Le ŋku ɖe axa sia ŋu',
+'savearticle' => 'Dzra axa sia ɖo',
+'preview' => 'Kpɔe do ŋgɔ',
+'showpreview' => 'Fiae do ŋgɔ',
+'showdiff' => 'Fia tɔtrɔwo',
+'newarticle' => '(Yeye)',
+'newarticletext' => "Eva ɖo axa si gɔme womedze haɖeke o. Ne wòadi be yeadze egɔme la, dze nuŋlɔm ɖe go sia me le afi sia ɖome (kpɔ [[{{MediaWiki:Helppage}}|kpekpeɖeŋu nyawo]] na kpekpeɖeŋu bubuwo). Ne wòme ɖoe be yeava afii hafi o la, ekema tia '''megbe''' eye wòa gbugbɔ ayi afisi wòtso va.",
+'previewnote' => "'''Ɖo ŋku edzi be wole afii fiam do ŋgɔ, wome dzrae ɖo haɖeke o!'''",
+'editing' => '$1 na etɔtrɔ',
+'editingsection' => 'Wòle $1 (ƒe akpa aɖe) trɔm',
+'yourtext' => 'Wò nuŋɔŋlɔ',
+'yourdiff' => 'Vovototowo',
+'copyrightwarning' => "Taflatse, mítsɔe be nusiwo katã netsɔ kpe ɖe {{SITENAME}} ŋu lii fãa le $2 la nu (kpɔ $1 me nyawo). Ne madze ŋuwò be amebubuwo natrɔ asi le nusiwo newɔ ŋuti o, eye woagbugbɔ dɔsiwo newɔ ama na amebubuwo fãa o la, mega dae ɖe afisia o.<br /> Wòle ŋugbe dom na mí bena wò ŋutɔe ŋlɔ nusiawo, alo etsɔe tso afisi mɔɖeɖe li fãa be amesiame na tsɔ nuwo tso afima fãa. '''Mega da nusiwo ŋu mɔɖeɖe meli na o la ɖe afisia o!'''",
 'permissionserrorstext-withaction' => 'Se meɖe mɔ bena na $2 o, le {{PLURAL:$1|ta|ta}}:',
-'edit-already-exists'              => 'Wòmateŋu adze axa sia gɔme o.<br />
+'edit-already-exists' => 'Wòmateŋu adze axa sia gɔme o.<br />
 Wo ŋlɔe xoxo.',
 
 # History pages
-'currentrev-asof'      => 'Tata susue le $1 dzi',
-'revisionasof'         => 'Tataa le $1',
-'revision-info'        => 'Tataa le $1 si $2 wɔ',
-'previousrevision'     => '← Tata xoxoa',
-'nextrevision'         => 'Tata yeyea →',
-'currentrevisionlink'  => 'Tata susuea',
-'cur'                  => 'yeyea',
-'next'                 => 'eyome',
-'last'                 => 'mamlea',
-'page_first'           => 'gbãtɔ',
-'page_last'            => 'mamlea',
-'histlegend'           => "Vovo tatia: de dzesi tata siwo ƒe vovototowo wò di be yea kpɔ ɖa eye na tia 'enter' alo kpe si le eɖome.<br />
+'currentrev-asof' => 'Tata susue le $1 dzi',
+'revisionasof' => 'Tataa le $1',
+'revision-info' => 'Tataa le $1 si $2 wɔ',
+'previousrevision' => '← Tata xoxoa',
+'nextrevision' => 'Tata yeyea →',
+'currentrevisionlink' => 'Tata susuea',
+'cur' => 'yeyea',
+'next' => 'eyome',
+'last' => 'mamlea',
+'page_first' => 'gbãtɔ',
+'page_last' => 'mamlea',
+'histlegend' => "Vovo tatia: de dzesi tata siwo ƒe vovototowo wò di be yea kpɔ ɖa eye na tia 'enter' alo kpe si le eɖome.<br />
 Gɔmeɖeɖe: '''({{int:cur}})''' = vovototo tso tata mamlea gbɔ, '''({{int:last}})''' = vovototo tso tata si do ŋgɔ gbɔ, '''{{int:minoreditletter}}''' = tɔtrɔ sue.",
 'history-show-deleted' => 'Esiwo wotutu ko',
-'histfirst'            => 'Xoxoɔwu',
-'histlast'             => 'Yeyeɛwu',
+'histfirst' => 'Xoxoɔwu',
+'histlast' => 'Yeyeɛwu',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 le $2',
-'history-feed-empty'          => 'Axa si dim wòle meli o.
+'history-feed-empty' => 'Axa si dim wòle meli o.
 Dewomahĩ, wotutui le wiki sia dzi alo wotrɔ eƒe ŋkɔ.
 Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.',
 
 # Revision deletion
-'rev-delundel'          => 'fia/ɣla',
-'rev-showdeleted'       => 'fia',
-'revdelete-radio-same'  => '(megatrɔe o)',
-'revdelete-radio-set'   => 'Yo',
+'rev-delundel' => 'fia/ɣla',
+'rev-showdeleted' => 'fia',
+'revdelete-radio-same' => '(megatrɔe o)',
+'revdelete-radio-set' => 'Yo',
 'revdelete-radio-unset' => 'Kpao',
 
 # Diffs
-'history-title'           => '"$1" ƒe tata xoxoawo',
-'difference'              => '(Vovototowo le tata xoxoawo me)',
-'lineno'                  => 'Fli $1:',
+'history-title' => '"$1" ƒe tata xoxoawo',
+'lineno' => 'Fli $1:',
 'compareselectedversions' => 'Kpɔ tata siwo wotia la',
 
 # Search results
-'searchresults'                  => 'Nusiwo wòdi',
-'searchresults-title'            => 'Nusiwo wofɔ le "$1" didi me',
-'searchsubtitle'                 => 'Nusi wòdi enye \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|axawo katã siwo dze egɔme kple "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|axawo katã siwo kuɖe "$1" ŋu]]).',
-'searchsubtitleinvalid'          => "Wòdi '''$1'''",
-'notitlematches'                 => 'Mesɔ axa aɖeke ƒe tanya o',
-'notextmatches'                  => 'Axa aɖeke ƒe nyawo mesɔ kple nyasiawo o.',
-'prevn'                          => '{{PLURAL:$1|$1}} do ŋgɔ',
-'nextn'                          => '{{PLURAL:$1|$1}} yometɔwo',
-'viewprevnext'                   => 'Kpɔ ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists'              => "'''Axa si ŋkɔ enye \"[[:\$1]]\" le wiki sia dzi'''",
-'searchmenu-new'                 => "'''Dze axa \"[[:\$1]]\" sia ŋlɔm ɖe wiki la dzi!'''",
-'searchprofile-everything'       => 'Nuɖesiaɖe',
+'searchresults' => 'Nusiwo wòdi',
+'searchresults-title' => 'Nusiwo wofɔ le "$1" didi me',
+'searchsubtitle' => 'Nusi wòdi enye \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|axawo katã siwo dze egɔme kple "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|axawo katã siwo kuɖe "$1" ŋu]]).',
+'searchsubtitleinvalid' => "Wòdi '''$1'''",
+'notitlematches' => 'Mesɔ axa aɖeke ƒe tanya o',
+'notextmatches' => 'Axa aɖeke ƒe nyawo mesɔ kple nyasiawo o.',
+'prevn' => '{{PLURAL:$1|$1}} do ŋgɔ',
+'nextn' => '{{PLURAL:$1|$1}} yometɔwo',
+'viewprevnext' => 'Kpɔ ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Axa si ŋkɔ enye \"[[:\$1]]\" le wiki sia dzi'''",
+'searchmenu-new' => "'''Dze axa \"[[:\$1]]\" sia ŋlɔm ɖe wiki la dzi!'''",
+'searchprofile-everything' => 'Nuɖesiaɖe',
 'searchprofile-articles-tooltip' => 'Dii le $1',
-'searchprofile-project-tooltip'  => 'Dii le $1',
-'search-result-size'             => '$1 ({{PLURAL:$2|nya 1|nya $2}})',
-'search-suggest'                 => 'Ɖe wò be: $1',
-'search-interwiki-more'          => '(kɔ kpe ɖe eŋu)',
-'searchall'                      => 'wokatã',
-'powersearch'                    => 'Dii de eme',
-'powersearch-field'              => 'Di',
-'powersearch-toggleall'          => 'Wokatã',
+'searchprofile-project-tooltip' => 'Dii le $1',
+'search-result-size' => '$1 ({{PLURAL:$2|nya 1|nya $2}})',
+'search-suggest' => 'Ɖe wò be: $1',
+'search-interwiki-more' => '(kɔ kpe ɖe eŋu)',
+'searchall' => 'wokatã',
+'powersearch' => 'Dii de eme',
+'powersearch-field' => 'Di',
+'powersearch-toggleall' => 'Wokatã',
 
 # Preferences page
-'preferences'              => 'Didiwo',
-'mypreferences'            => 'Nyeƒe didiwo',
-'skin-preview'             => 'Kpɔe do ŋgɔ',
-'prefs-datetime'           => 'Ŋkeke kple gaƒoƒo',
+'preferences' => 'Didiwo',
+'mypreferences' => 'Nyeƒe didiwo',
+'skin-preview' => 'Kpɔe do ŋgɔ',
+'prefs-datetime' => 'Ŋkeke kple gaƒoƒo',
 'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
-'timezoneregion-africa'    => 'Afrika',
-'yourlanguage'             => 'Gbe:',
-'yournick'                 => 'Dzesi',
-'gender-male'              => 'Ŋutsu',
-'gender-female'            => 'Nyɔnu',
+'timezoneregion-africa' => 'Afrika',
+'yourlanguage' => 'Gbe:',
+'yournick' => 'Dzesi',
+'gender-male' => 'Ŋutsu',
+'gender-female' => 'Nyɔnu',
 
 # Groups
-'group'       => 'Hame:',
-'group-bot'   => 'Bɔtwo',
+'group' => 'Hame:',
+'group-bot' => 'Bɔtwo',
 'group-sysop' => 'Dɔdzikpɔlawo',
-'group-all'   => '(wokatã)',
+'group-all' => '(wokatã)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'xlẽ axa sia',
 'action-edit' => 'trɔ asi le axa sia ŋu',
 
 # Recent changes
-'recentchanges'        => 'Tɔtrɔ yeyewo',
+'recentchanges' => 'Tɔtrɔ yeyewo',
 'recentchanges-legend' => 'Tatiawo na tɔtrɔ yeyewo',
-'rcnote'               => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' susue|tɔtrɔ '''$1''' susuewo}} le {{PLURAL:$2|ŋkeke si|ŋkeke '''$2''' mamleawo siwo}} vayi la me, le $5, $4.",
-'rcnotefrom'           => "Tɔtrɔwo siwo wowɔ tso '''$2''' (wofia vaseɖe '''$1''') le afii.",
-'rclistfrom'           => 'Fia tɔtrɔ yeyewo tso $1',
-'rcshowhideminor'      => '$1 tɔtrɔ suewo',
-'rcshowhidebots'       => '$1 bɔtwo',
-'rcshowhideliu'        => '$1 ezãla siwo ŋlɔ ŋkɔ',
-'rcshowhideanons'      => '$1 ŋkɔ maŋlɔlawo',
-'rcshowhidemine'       => '$1 nyeƒe tɔtrɔwo',
-'rclinks'              => 'Fia tɔtrɔ $1 mamleawo le ŋkeke $2 siwo vayi me<br />$3',
-'diff'                 => 'tɔtrɔ',
-'hist'                 => 'xoxo',
-'hide'                 => 'Ɣla',
-'show'                 => 'Fia',
-'minoreditletter'      => 's',
-'newpageletter'        => 'Y',
+'rcnote' => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' susue|tɔtrɔ '''$1''' susuewo}} le {{PLURAL:$2|ŋkeke si|ŋkeke '''$2''' mamleawo siwo}} vayi la me, le $5, $4.",
+'rcnotefrom' => "Tɔtrɔwo siwo wowɔ tso '''$2''' (wofia vaseɖe '''$1''') le afii.",
+'rclistfrom' => 'Fia tɔtrɔ yeyewo tso $1',
+'rcshowhideminor' => '$1 tɔtrɔ suewo',
+'rcshowhidebots' => '$1 bɔtwo',
+'rcshowhideliu' => '$1 ezãla siwo ŋlɔ ŋkɔ',
+'rcshowhideanons' => '$1 ŋkɔ maŋlɔlawo',
+'rcshowhidemine' => '$1 nyeƒe tɔtrɔwo',
+'rclinks' => 'Fia tɔtrɔ $1 mamleawo le ŋkeke $2 siwo vayi me<br />$3',
+'diff' => 'tɔtrɔ',
+'hist' => 'xoxo',
+'hide' => 'Ɣla',
+'show' => 'Fia',
+'minoreditletter' => 's',
+'newpageletter' => 'Y',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Tɔtrɔ siwo kaa afii',
-'recentchangeslinked-feed'    => 'Tɔtrɔ siwo kaa afii',
+'recentchangeslinked' => 'Tɔtrɔ siwo kaa afii',
+'recentchangeslinked-feed' => 'Tɔtrɔ siwo kaa afii',
 'recentchangeslinked-toolbox' => 'Tɔtrɔ siwo kaa afii',
-'recentchangeslinked-title'   => 'Tɔtrɔ siwo ku ɖe "$1" ŋu',
-'recentchangeslinked-page'    => 'Axaa ƒe ŋkɔ',
+'recentchangeslinked-title' => 'Tɔtrɔ siwo ku ɖe "$1" ŋu',
+'recentchangeslinked-page' => 'Axaa ƒe ŋkɔ',
 
 # Upload
-'upload'    => 'Ɖo agbalẽ ɖa',
+'upload' => 'Ɖo agbalẽ ɖa',
 'uploadbtn' => 'Ɖo agbalẽ ɖa',
 
 # File description page
-'file-anchor-link'   => 'Agbalẽ',
-'filehist'           => 'Axa sia ƒe tata xoxoawo',
-'filehist-help'      => 'Tia ŋkeke/gaƒoƒo ɖeka ne wòadi be yea kpɔ axa sia ƒe tata le ɣemaɣi',
+'file-anchor-link' => 'Agbalẽ',
+'filehist' => 'Axa sia ƒe tata xoxoawo',
+'filehist-help' => 'Tia ŋkeke/gaƒoƒo ɖeka ne wòadi be yea kpɔ axa sia ƒe tata le ɣemaɣi',
 'filehist-deleteone' => 'tutui',
-'filehist-datetime'  => 'Ŋkeke/Gaƒoƒo',
-'filehist-user'      => 'Ezãla',
-'linkstoimage'       => 'Axa {{PLURAL:$1|sia|$1 siawo}} ku ɖe agbalẽ sia ŋu.',
-'sharedupload'       => "Agbalɛ̃ sia tso $1 eye dɔ (''alo project'') bubuawo woateŋu azãe fãa.",
+'filehist-datetime' => 'Ŋkeke/Gaƒoƒo',
+'filehist-user' => 'Ezãla',
+'linkstoimage' => 'Axa {{PLURAL:$1|sia|$1 siawo}} ku ɖe agbalẽ sia ŋu.',
+'sharedupload' => "Agbalɛ̃ sia tso $1 eye dɔ (''alo project'') bubuawo woateŋu azãe fãa.",
 
 # File deletion
 'filedelete-submit' => 'Tutui',
@@ -357,51 +356,51 @@ Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.',
 'mimesearch' => 'MIME me didi',
 
 # Random page
-'randompage'         => 'Axaa ɖe ko',
+'randompage' => 'Axaa ɖe ko',
 'randompage-nopages' => 'Axa aɖeke mele "$1" o.',
 
 # Statistics
 'statistics' => 'Akɔntawo',
 
-'brokenredirects-edit'   => 'trɔ asi le eŋu',
+'brokenredirects-edit' => 'trɔ asi le eŋu',
 'brokenredirects-delete' => 'tutui',
 
 'fewestrevisions' => 'Axawo siwo womeɖɔɖo zã o',
 
 # Miscellaneous special pages
-'wantedpages'    => 'Axawo siwo le hahĩam',
-'mostrevisions'  => 'Axawo siwo woɖɔɖo wu',
-'shortpages'     => 'Axa kpuiwo',
-'longpages'      => 'Axa didiwo',
+'wantedpages' => 'Axawo siwo le hahĩam',
+'mostrevisions' => 'Axawo siwo woɖɔɖo wu',
+'shortpages' => 'Axa kpuiwo',
+'longpages' => 'Axa didiwo',
 'protectedpages' => 'Axawo siwo ŋu wole dzɔdzɔm',
-'listusers'      => 'Ezãlawo ƒe xexlẽme',
-'usercreated'    => 'Wodze egɔme le ŋkeke $1 dzi le gaƒoƒo $2 me.',
-'newpages'       => 'Axa yeyewo',
-'ancientpages'   => 'Axawo si wo do xoxo wu',
-'move'           => 'Ɖɔli eƒe nɔƒe',
-'movethispage'   => 'Ɖɔli axa sia ƒe nɔƒe',
-'pager-newer-n'  => '{{PLURAL:$1|1 yeyea|$1 yeyeawo}}',
-'pager-older-n'  => '{{PLURAL:$1|1 xoxoa|$1 xoxoawo}}',
+'listusers' => 'Ezãlawo ƒe xexlẽme',
+'usercreated' => 'Wodze egɔme le ŋkeke $1 dzi le gaƒoƒo $2 me.',
+'newpages' => 'Axa yeyewo',
+'ancientpages' => 'Axawo si wo do xoxo wu',
+'move' => 'Ɖɔli eƒe nɔƒe',
+'movethispage' => 'Ɖɔli axa sia ƒe nɔƒe',
+'pager-newer-n' => '{{PLURAL:$1|1 yeyea|$1 yeyeawo}}',
+'pager-older-n' => '{{PLURAL:$1|1 xoxoa|$1 xoxoawo}}',
 
 # Book sources
-'booksources'               => 'Agbalɛ̃wo ƒe tsoƒe',
+'booksources' => 'Agbalɛ̃wo ƒe tsoƒe',
 'booksources-search-legend' => 'Di agbalẽwo ƒe tsoƒewo',
-'booksources-go'            => 'Yi',
+'booksources-go' => 'Yi',
 
 # Special:Log
-'specialloguserlabel'  => 'Ezãla:',
+'specialloguserlabel' => 'Ezãla:',
 'speciallogtitlelabel' => 'Ta nya:',
 
 # Special:AllPages
-'allpages'       => 'Axawo katã',
+'allpages' => 'Axawo katã',
 'alphaindexline' => '$1 vaseɖe $2',
-'nextpage'       => 'Axa yometɔ ($1)',
-'prevpage'       => 'Axa do ŋgɔ ($1)',
-'allpagesfrom'   => 'Fia axawo tso:',
-'allpagesto'     => 'Fia axawo vaseɖe:',
-'allarticles'    => 'Axawo katã',
+'nextpage' => 'Axa yometɔ ($1)',
+'prevpage' => 'Axa do ŋgɔ ($1)',
+'allpagesfrom' => 'Fia axawo tso:',
+'allpagesto' => 'Fia axawo vaseɖe:',
+'allarticles' => 'Axawo katã',
 'allinnamespace' => 'Axawo katã ($1 namespace)',
-'allpagesnext'   => 'Eyome',
+'allpagesnext' => 'Eyome',
 'allpagessubmit' => 'Yi',
 
 # Special:LinkSearch
@@ -414,153 +413,153 @@ Zã [[Special:Search|nuwo didi le wiki sia dzi]] kpɔ na axa yeyeawo.',
 'listgrouprights-group' => 'Hame',
 
 # Watchlist
-'watch'         => 'Le ŋku ɖe eŋu',
+'watch' => 'Le ŋku ɖe eŋu',
 'watchthispage' => 'Le ŋku ɖe axa sia ŋu',
-'wlnote'        => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.",
-'wlshowlast'    => 'Fia gaƒoƒo $1 ŋkeke $2 mamleawo. $3',
+'wlnote' => "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.",
+'wlshowlast' => 'Fia gaƒoƒo $1 ŋkeke $2 mamleawo. $3',
 
 # Delete
-'deletepage'     => 'Tutu axa sia',
-'exblank'        => 'axa la le gbɔlo',
+'deletepage' => 'Tutu axa sia',
+'exblank' => 'axa la le gbɔlo',
 'delete-confirm' => 'Tutu "$1"',
-'delete-legend'  => 'Tutui',
+'delete-legend' => 'Tutui',
 'actioncomplete' => 'Wowɔe vɔ',
 'dellogpagetext' => 'Afisia wofia axa mamleawo siwo wotutu la',
 
 # Protect
-'prot_1movedto2'              => '[[$1]] wohee yi [[$2]]',
-'protect-default'             => 'Namɔ ezãlawo katã',
+'prot_1movedto2' => '[[$1]] wohee yi [[$2]]',
+'protect-default' => 'Namɔ ezãlawo katã',
 'protect-level-autoconfirmed' => 'Xemɔ na ame yeyewo kple ŋkɔmaŋlɔlawo',
-'protect-expiring'            => 'ewunu $1 (UTC)',
-'protect-existing-expiry'     => 'Nuwuwu gaƒoƒo: $3, $2"',
-'protect-expiry-options'      => 'gaƒoƒo 1:1 hour,ŋkeke 1:1 day,kɔsiɖa 1:1 week,kɔsiɖa 2:2 weeks,ɣleti 1:1 month,ɣleti 3:3 months,ɣleti 6:6 months,ƒe 1:1 year,tegbe:infinite',
-'restriction-type'            => 'Mɔɖeɖe:',
+'protect-expiring' => 'ewunu $1 (UTC)',
+'protect-existing-expiry' => 'Nuwuwu gaƒoƒo: $3, $2"',
+'protect-expiry-options' => 'gaƒoƒo 1:1 hour,ŋkeke 1:1 day,kɔsiɖa 1:1 week,kɔsiɖa 2:2 weeks,ɣleti 1:1 month,ɣleti 3:3 months,ɣleti 6:6 months,ƒe 1:1 year,tegbe:infinite',
+'restriction-type' => 'Mɔɖeɖe:',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Trɔ asi le eŋu',
-'restriction-move'   => 'Ɖɔli eƒe nɔƒe',
+'restriction-edit' => 'Trɔ asi le eŋu',
+'restriction-move' => 'Ɖɔli eƒe nɔƒe',
 'restriction-create' => 'Dze egɔme',
 
 # Undelete
-'undelete'                  => 'Kpɔ axawo si wotutu',
-'viewdeletedpage'           => 'Kpɔ axawo si wotutu',
-'undeleteviewlink'          => 'kpɔe',
-'undelete-search-submit'    => 'Dii',
+'undelete' => 'Kpɔ axawo si wotutu',
+'viewdeletedpage' => 'Kpɔ axawo si wotutu',
+'undeleteviewlink' => 'kpɔe',
+'undelete-search-submit' => 'Dii',
 'undelete-show-file-submit' => 'Yo',
 
 # Namespace form on various pages
 'invert' => 'Trɔ tatiawo tu',
 
 # Contributions
-'contributions'       => 'Ezãla ƒe nuŋɔŋlɔwo',
+'contributions' => 'Ezãla ƒe nuŋɔŋlɔwo',
 'contributions-title' => '$1 ƒe nuŋɔŋlɔwo',
-'mycontris'           => 'Nyeƒe nuŋɔŋlɔwo',
-'contribsub2'         => 'Na $1 ($2)',
-'uctop'               => '(tametɔ)',
-'month'               => 'Tso ɣleti (kple do ŋgɔ):',
-'year'                => 'Tso ƒe (kple do ŋgɔ):',
+'mycontris' => 'Nyeƒe nuŋɔŋlɔwo',
+'contribsub2' => 'Na $1 ($2)',
+'uctop' => '(tametɔ)',
+'month' => 'Tso ɣleti (kple do ŋgɔ):',
+'year' => 'Tso ƒe (kple do ŋgɔ):',
 
 'sp-contributions-newbies' => 'Fia ŋkɔŋlɔla yeyewo ƒe ɖɔɖɔɖowo ko.',
-'sp-contributions-talk'    => 'Nyamedzroƒe',
-'sp-contributions-search'  => 'Di nuŋɔŋlɔwo',
-'sp-contributions-submit'  => 'Dii',
+'sp-contributions-talk' => 'Nyamedzroƒe',
+'sp-contributions-search' => 'Di nuŋɔŋlɔwo',
+'sp-contributions-submit' => 'Dii',
 
 # What links here
-'whatlinkshere'       => 'Nusiwo kaa afii ŋu',
+'whatlinkshere' => 'Nusiwo kaa afii ŋu',
 'whatlinkshere-title' => 'Axawo siwo ku ɖe "$1" ŋu',
-'whatlinkshere-page'  => 'Axa:',
-'linkshere'           => "Axa siwo le afisia ku ɖe '''[[:$1]]''' ŋu:",
-'nolinkshere'         => "Axa aɖeke meku ɖe '''[[:$1]]''' ŋu o.",
-'whatlinkshere-prev'  => '{{PLURAL:$1|do ŋgɔ|$1 do ŋgɔ}}',
-'whatlinkshere-next'  => '{{PLURAL:$1|eyome|$1 eyome}}',
+'whatlinkshere-page' => 'Axa:',
+'linkshere' => "Axa siwo le afisia ku ɖe '''[[:$1]]''' ŋu:",
+'nolinkshere' => "Axa aɖeke meku ɖe '''[[:$1]]''' ŋu o.",
+'whatlinkshere-prev' => '{{PLURAL:$1|do ŋgɔ|$1 do ŋgɔ}}',
+'whatlinkshere-next' => '{{PLURAL:$1|eyome|$1 eyome}}',
 
 # Block/unblock
-'blockip'                  => 'Xe mɔ na ezãla sia',
-'blockip-legend'           => 'Xe mɔ na ezãla sia',
-'ipbexpiry'                => 'Nuwuwu:',
-'ipboptions'               => 'gaƒoƒo 2:2 hours,ŋkeke 1:1 day,ŋkeke 3:3 days,kɔsiɖa 1:1 week,kɔsiɖa 2:2 weeks,ɣleti 1:1 month,ɣleti 3:3 months,ɣleti 6:6 months,ƒe 1:1 year,tegbe:infinite',
-'blockipsuccesssub'        => 'Mɔxexea dze edzi',
-'ipb-unblock-addr'         => 'Ɖe $1 ƒe mɔxexe ɖa',
-'ipb-blocklist'            => 'Kpɔ mɔxexe siwo li xoxo',
-'ipb-blocklist-contribs'   => '$1 ƒe nuŋɔŋlɔwo',
-'ipusubmit'                => 'Ɖe mɔxexe sia ɖa',
-'ipblocklist-submit'       => 'Dii',
-'infiniteblock'            => 'tegbee',
-'expiringblock'            => 'ewunu le gaƒoƒo $2 le ŋkeke $1 dzi',
-'createaccountblock'       => 'woxe mɔ na ŋkɔa ŋɔŋlɔ',
-'blocklink'                => 'xemɔ',
-'unblocklink'              => 'ɖe mɔxexe',
-'change-blocklink'         => 'ɖɔli mɔxexe',
-'contribslink'             => 'nuŋɔŋlɔ',
-'blocklogentry'            => 'xemɔ na [[$1]] vaseɖe $2 megbe $3',
+'blockip' => 'Xe mɔ na ezãla sia',
+'blockip-legend' => 'Xe mɔ na ezãla sia',
+'ipbexpiry' => 'Nuwuwu:',
+'ipboptions' => 'gaƒoƒo 2:2 hours,ŋkeke 1:1 day,ŋkeke 3:3 days,kɔsiɖa 1:1 week,kɔsiɖa 2:2 weeks,ɣleti 1:1 month,ɣleti 3:3 months,ɣleti 6:6 months,ƒe 1:1 year,tegbe:infinite',
+'blockipsuccesssub' => 'Mɔxexea dze edzi',
+'ipb-unblock-addr' => 'Ɖe $1 ƒe mɔxexe ɖa',
+'ipb-blocklist' => 'Kpɔ mɔxexe siwo li xoxo',
+'ipb-blocklist-contribs' => '$1 ƒe nuŋɔŋlɔwo',
+'ipusubmit' => 'Ɖe mɔxexe sia ɖa',
+'ipblocklist-submit' => 'Dii',
+'infiniteblock' => 'tegbee',
+'expiringblock' => 'ewunu le gaƒoƒo $2 le ŋkeke $1 dzi',
+'createaccountblock' => 'woxe mɔ na ŋkɔa ŋɔŋlɔ',
+'blocklink' => 'xemɔ',
+'unblocklink' => 'ɖe mɔxexe',
+'change-blocklink' => 'ɖɔli mɔxexe',
+'contribslink' => 'nuŋɔŋlɔ',
+'blocklogentry' => 'xemɔ na [[$1]] vaseɖe $2 megbe $3',
 'block-log-flags-nocreate' => 'wo xemɔ na ŋkɔ ŋɔŋlɔ',
 
 # Move page
-'move-page-legend'        => 'Ɖɔli eƒe nɔƒe',
-'movearticle'             => 'Ɖɔli eƒe nɔƒe:',
-'newtitle'                => 'Yi ɖe tanya yeye la:',
-'move-watch'              => 'Le ŋku ɖe axa sia ŋu',
-'movepagebtn'             => 'Ɖɔli eƒe nɔƒe',
-'pagemovedsub'            => 'Axaa ƒe hehe dze edzi',
-'movepage-moved'          => '\'\'\'Wohe "$1" vayi "$2"\'\'\'',
-'articleexists'           => 'Tanya alo ŋkɔ sia nye axa bubu aɖe tɔ xoxo, alo eda se dzi.
+'move-page-legend' => 'Ɖɔli eƒe nɔƒe',
+'movearticle' => 'Ɖɔli eƒe nɔƒe:',
+'newtitle' => 'Yi ɖe tanya yeye la:',
+'move-watch' => 'Le ŋku ɖe axa sia ŋu',
+'movepagebtn' => 'Ɖɔli eƒe nɔƒe',
+'pagemovedsub' => 'Axaa ƒe hehe dze edzi',
+'movepage-moved' => '\'\'\'Wohe "$1" vayi "$2"\'\'\'',
+'articleexists' => 'Tanya alo ŋkɔ sia nye axa bubu aɖe tɔ xoxo, alo eda se dzi.
 Tia ŋkɔ alo tanya bubu.',
 'cantmove-titleprotected' => 'Wòmateŋu ahe axa aɖeke va afii o, elabena wo xemɔ na tanya sia ƒe ŋɔŋlɔ',
-'movedto'                 => 'wohee yi',
+'movedto' => 'wohee yi',
 
 # Export
 'export' => 'Ɖo axa siawo ɖa',
 
 # Namespace 8 related
-'allmessages'               => 'Gbeƒãɖeɖewo',
-'allmessages-filter-all'    => 'Wokatã',
+'allmessages' => 'Gbeƒãɖeɖewo',
+'allmessages-filter-all' => 'Wokatã',
 'allmessages-filter-submit' => 'Yi',
 
 # Thumbnails
 'thumbnail-more' => 'Ne lolo ɖe edzi',
 
 # Tooltip help for the actions
-'tooltip-pt-preferences'          => 'Nyeƒe didiwo',
-'tooltip-pt-mycontris'            => 'Wò nuŋɔŋlɔwo ƒe xexlẽme',
-'tooltip-pt-login'                => 'Togbɔ be menye ɖe wò hĩa o tse la, mía ve nuwò bena na ŋlɔ ŋkɔ',
-'tooltip-pt-logout'               => 'Do le eme',
-'tooltip-ca-edit'                 => 'Wòateŋu aɖɔ axa sia ɖo.
+'tooltip-pt-preferences' => 'Nyeƒe didiwo',
+'tooltip-pt-mycontris' => 'Wò nuŋɔŋlɔwo ƒe xexlẽme',
+'tooltip-pt-login' => 'Togbɔ be menye ɖe wò hĩa o tse la, mía ve nuwò bena na ŋlɔ ŋkɔ',
+'tooltip-pt-logout' => 'Do le eme',
+'tooltip-ca-edit' => 'Wòateŋu aɖɔ axa sia ɖo.
 Ne ewɔvɔ la, tia "Fiae do ŋgɔ" kpea gbã hafi na dzrae ɖo.',
-'tooltip-ca-addsection'           => 'Dze akpa yeye gɔme',
-'tooltip-ca-viewsource'           => 'Wo dokpɔ ɖe axa sia ŋu.
+'tooltip-ca-addsection' => 'Dze akpa yeye gɔme',
+'tooltip-ca-viewsource' => 'Wo dokpɔ ɖe axa sia ŋu.
 Wòateŋu akpɔ alesi woŋlɔe.',
-'tooltip-ca-history'              => 'Axa sia ƒe tata xoxoawo',
-'tooltip-ca-protect'              => 'Dzɔ axa sia ŋu',
-'tooltip-ca-delete'               => 'Tutu axa sia',
-'tooltip-ca-move'                 => 'Ɖɔli axa sia ƒe nɔƒe',
-'tooltip-search'                  => 'Dii {{SITENAME}}',
-'tooltip-search-go'               => 'Yi axa si ƒe ŋkɔ enye esia ne woŋlɔe xoxo',
-'tooltip-search-fulltext'         => 'Di nyasiawo le axawo me.',
-'tooltip-n-mainpage'              => 'Yi axa si do ŋgɔ',
-'tooltip-n-mainpage-description'  => 'Yi axa si do ŋgɔ',
-'tooltip-n-recentchanges'         => 'Tɔtrɔ yeyewo le wiki sia me.',
-'tooltip-n-randompage'            => 'Kpɔ axa ɖesiaɖe ko',
-'tooltip-n-help'                  => 'Nuwo srɔ̃ƒe',
-'tooltip-t-whatlinkshere'         => 'Wiki nuŋɔŋlɔwo katã siwo ku ɖe afii ŋuti',
-'tooltip-t-recentchangeslinked'   => 'Tɔtrɔ yeyewo le axa siwo ku ɖe axa sia ŋuti',
-'tooltip-t-contributions'         => 'Kpɔ nusiwo amesia ŋlɔ',
-'tooltip-t-upload'                => 'Ɖo nutatawo kple nuƒoƒowo ɖa',
-'tooltip-t-specialpages'          => 'Axa tɔxewo ƒe xexlẽme',
-'tooltip-ca-nstab-main'           => 'Kpɔ axa si tanyawo le',
-'tooltip-ca-nstab-special'        => 'Axa sia nye axa tɔxe.  Wò mateŋu atrɔ nu aɖeke le edzi o.',
-'tooltip-minoredit'               => 'Esia nye tɔtrɔ sue aɖe ko',
-'tooltip-save'                    => 'Dzra wòƒe tɔtrɔwo ɖo',
-'tooltip-preview'                 => 'Kpɔ wò ɖɔɖɔɖowo do ŋgɔ, mía ve nuwo bena na zãe hafi na dzrae ɖo!',
-'tooltip-diff'                    => 'Fia tɔtrɔ siwo newɔ le nuŋɔŋlɔa me',
+'tooltip-ca-history' => 'Axa sia ƒe tata xoxoawo',
+'tooltip-ca-protect' => 'Dzɔ axa sia ŋu',
+'tooltip-ca-delete' => 'Tutu axa sia',
+'tooltip-ca-move' => 'Ɖɔli axa sia ƒe nɔƒe',
+'tooltip-search' => 'Dii {{SITENAME}}',
+'tooltip-search-go' => 'Yi axa si ƒe ŋkɔ enye esia ne woŋlɔe xoxo',
+'tooltip-search-fulltext' => 'Di nyasiawo le axawo me.',
+'tooltip-n-mainpage' => 'Yi axa si do ŋgɔ',
+'tooltip-n-mainpage-description' => 'Yi axa si do ŋgɔ',
+'tooltip-n-recentchanges' => 'Tɔtrɔ yeyewo le wiki sia me.',
+'tooltip-n-randompage' => 'Kpɔ axa ɖesiaɖe ko',
+'tooltip-n-help' => 'Nuwo srɔ̃ƒe',
+'tooltip-t-whatlinkshere' => 'Wiki nuŋɔŋlɔwo katã siwo ku ɖe afii ŋuti',
+'tooltip-t-recentchangeslinked' => 'Tɔtrɔ yeyewo le axa siwo ku ɖe axa sia ŋuti',
+'tooltip-t-contributions' => 'Kpɔ nusiwo amesia ŋlɔ',
+'tooltip-t-upload' => 'Ɖo nutatawo kple nuƒoƒowo ɖa',
+'tooltip-t-specialpages' => 'Axa tɔxewo ƒe xexlẽme',
+'tooltip-ca-nstab-main' => 'Kpɔ axa si tanyawo le',
+'tooltip-ca-nstab-special' => 'Axa sia nye axa tɔxe.  Wò mateŋu atrɔ nu aɖeke le edzi o.',
+'tooltip-minoredit' => 'Esia nye tɔtrɔ sue aɖe ko',
+'tooltip-save' => 'Dzra wòƒe tɔtrɔwo ɖo',
+'tooltip-preview' => 'Kpɔ wò ɖɔɖɔɖowo do ŋgɔ, mía ve nuwo bena na zãe hafi na dzrae ɖo!',
+'tooltip-diff' => 'Fia tɔtrɔ siwo newɔ le nuŋɔŋlɔa me',
 'tooltip-compareselectedversions' => 'Kpɔ vovototwo le axa sia ƒe tata eve siwo wotia la me',
 
 # Browsing diffs
 'previousdiff' => '← Tata xoxoa',
-'nextdiff'     => 'Tɔtrɔ yeyea →',
+'nextdiff' => 'Tɔtrɔ yeyea →',
 
 # Special:NewFiles
 'newimages' => 'Nutata yeyewo',
-'ilsubmit'  => 'Dii',
+'ilsubmit' => 'Dii',
 
 # External editor support
 'edit-externally-help' => '(Kpɔ [//www.mediawiki.org/wiki/Manual:External_editors gɔmedzedze sewo] na kpekpeɖeŋu bubuwo.)',
@@ -568,19 +567,19 @@ Wòateŋu akpɔ alesi woŋlɔe.',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'katã',
 'namespacesall' => 'wokatã',
-'monthsall'     => 'wokatã',
+'monthsall' => 'wokatã',
 
 # Multipage image navigation
 'imgmultipagenext' => 'axa yometɔ',
-'imgmultigo'       => 'Yi!',
-'imgmultigoto'     => 'Yi axa $1',
+'imgmultigo' => 'Yi!',
+'imgmultigoto' => 'Yi axa $1',
 
 # Table pager
-'table_pager_next'         => 'Axa yometɔ',
-'table_pager_prev'         => 'Axa si do ŋgɔ',
-'table_pager_first'        => 'Axa gbãtɔ',
-'table_pager_last'         => 'Axa mamlea',
-'table_pager_limit'        => 'Fia nu $1 le axa sia axa dzi',
+'table_pager_next' => 'Axa yometɔ',
+'table_pager_prev' => 'Axa si do ŋgɔ',
+'table_pager_first' => 'Axa gbãtɔ',
+'table_pager_last' => 'Axa mamlea',
+'table_pager_limit' => 'Fia nu $1 le axa sia axa dzi',
 'table_pager_limit_submit' => 'Yi',
 
 # Watchlist editing tools
index 5ee9f93..e5858a9 100644 (file)
@@ -212,143 +212,143 @@ $dateFormats = array(
 
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ΧΩΡΙΣΠΙΝΑΚΟΘΗΚΗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ΜΕΠΠ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ΠΠ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ΧΩΡΙΣΕΠΕΞΕΝΟΤ__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__ΧΩΡΙΣΚΕΦΑΛΙΔΑ__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΟΝΟΜΑ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΓΕΝΙΚΗ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΣΥΝΤ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑΟΝΟΜΑ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ΤΡΕΧΟΝΕΤΟΣ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ΤΡΕΧΩΝΧΡΟΝΟΣ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ΤΡΕΧΟΥΣΑΩΡΑ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΟΝΟΜΑ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΓΕΝΙΚΗ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΣΥΝΤ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ΤΟΠΙΚΗΜΕΡΑΟΝΟΜΑ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ΤΟΠΙΚΟΕΤΟΣ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ΤΟΠΙΚΟΣΧΡΟΝΟΣ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ΤΟΠΙΚΗΩΡΑ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ΑΡΙΘΜΟΣΣΕΛΙΔΩΝ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ΑΡΙΘΜΟΣΑΡΘΡΩΝ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ΑΡΙΘΜΟΣΑΡΧΕΙΩΝ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ΑΡΙΘΜΟΣΧΡΗΣΤΩΝ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ΕΝΕΡΓΟΙΧΡΗΣΤΕΣ', 'ΑΡΙΘΜΟΣΕΝΕΡΓΩΝΧΡΗΣΤΩΝ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ΑΡΙΘΜΟΣΕΠΕΞΕΡΓΑΣΙΩΝ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ΑΡΙΘΜΟΣΕΜΦΑΝΙΣΕΩΝ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝΚ', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣΚ', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣΚ', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝΚ', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣΚ', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ΚΕΙΜΕΝΟ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ΑΛΛΑΓΗ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'ΑΠΛΟΚΕΙΜΕΝΟ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'μικρογραφία', 'μινιατούρα', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'μικρογραφία=$1', 'μινιατούρα=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'δεξιά', 'right' ),
-       'img_left'                => array( '1', 'αριστερά', 'left' ),
-       'img_none'                => array( '1', 'καθόλου', 'none' ),
-       'img_width'               => array( '1', '$1εσ', '$1px' ),
-       'img_center'              => array( '1', 'κέντρο', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'με-πλαίσιο', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'χωρίς-πλαίσιο', 'frameless' ),
-       'img_page'                => array( '1', 'σελίδα=$1', 'σελίδα $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'πλαίσιο', 'border' ),
-       'img_baseline'            => array( '1', 'γραμμήβάσης', 'baseline' ),
-       'img_sub'                 => array( '1', 'δείκτης', 'sub' ),
-       'img_super'               => array( '1', 'εκθέτης', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'άνω', 'top' ),
-       'img_text_top'            => array( '1', 'πάνω-από-το-κείμενο', 'text-top' ),
-       'img_middle'              => array( '1', 'μέσο', 'middle' ),
-       'img_bottom'              => array( '1', 'κάτω', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'κάτω-από-το-κείμενο', 'text-bottom' ),
-       'img_link'                => array( '1', 'σύνδεσμος=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'εναλλ.=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ΕΣΩΤ:', 'INT:' ),
-       'sitename'                => array( '1', 'ΙΣΤΟΧΩΡΟΣ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ΧΟ:', 'NS:' ),
-       'localurl'                => array( '0', 'ΤΟΠΙΚΟURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ΤΟΠΙΚΟURLΚ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ΕΞΥΠΗΡΕΤΗΤΗΣ', 'SERVER' ),
-       'servername'              => array( '0', 'ΟΝΟΜΑΕΞΥΠΗΡΕΤΗΤΗ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ΔΙΑΔΡΟΜΗΠΡΟΓΡΑΜΜΑΤΟΣ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ΓΡΑΜΜΑΤΙΚΗ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ΦΥΛΟ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__ΧΩΡΙΣΜΕΤΑΤΡΟΠΗΤΙΤΛΟΥ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ΧΩΡΙΣΜΕΤΑΤΡΟΠΗΠΕΡΙΧΟΜΕΝΟΥ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ΤΡΕΧΟΥΣΑΕΒΔΟΜΑΔΑ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑΕΒΔΟΜΑΔΑΣ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ΤΟΠΙΚΗΕΒΔΟΜΑΔΑ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ΤΟΠΙΚΗΜΕΡΑΕΒΔΟΜΑΔΑΣ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ΚΩΔΙΚΟΣΑΛΛΑΓΗΣ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ΜΗΝΑΣΑΛΛΑΓΗΣ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ΕΤΟΣΑΛΛΑΓΗΣ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ΧΡΟΝΟΣΗΜΑΝΣΗΑΛΛΑΓΗΣ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'ΠΛΗΘΥΝΤΙΚΟΣ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ΠΛΗΡΕΣURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ΠΛΗΡΕΣURLΚ:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ΠΡΩΤΟΠΕΖΟ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ΠΡΩΤΟΚΕΦΑΛΑΙΟ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ΠΕΖΑ:', 'LC:' ),
-       'uc'                      => array( '0', 'ΚΕΦΑΛΑΙΑ:', 'UC:' ),
-       'raw'                     => array( '0', 'ΓΥΜΝΑ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ΔΕΙΞΕΤΙΤΛΟ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Γ', 'R' ),
-       'newsectionlink'          => array( '1', '__ΔΕΣΜΟΣΝΕΑΣΕΝΟΤΗΤΑΣ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ΤΡΕΧΟΥΣΑΕΚΔΟΣΗ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ΚΩΔΙΚΟΠΟΙΗΣΗURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ΚΩΔΙΚΟΠΟΙΗΣΗΑΓΚΥΡΑΣ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'ΤΡΕΧΟΥΣΑΧΡΟΝΟΣΗΜΑΝΣΗ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ΤΟΠΙΚΗΧΡΟΝΟΣΗΜΑΝΣΗ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'ΚΩΔΙΚΟΣΦΟΡΑΣ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ΓΛΩΣΣΑ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ΓΛΩΣΣΑΠΕΡΙΕΧΟΜΕΝΟΥ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ΣΕΛΙΔΕΣΣΤΗΝΠΕΡΙΟΧΗΟΝΟΜΑΤΩΝ:', 'ΣΕΛΙΔΕΣΣΤΗΝΠΟ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ΑΡΙΘΜΟΣΔΙΑΧΕΙΡΙΣΤΩΝ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ΜΟΡΦΟΠΟΙΗΣΗΑΡΙΘΜΟΥ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ΑΡΙΣΤΕΡΟΠΑΡΑΓΕΜΙΣΜΑ', 'PADLEFT' ),
-       'padright'                => array( '0', 'ΔΕΞΙΠΑΡΑΓΕΜΙΣΜΑ', 'PADRIGHT' ),
-       'special'                 => array( '0', 'λειτουργία', 'special' ),
-       'defaultsort'             => array( '1', 'ΠΡΟΚΑΘΟΡΙΣΜΕΝΗΤΑΞΙΝΟΜΗΣΗ:', 'ΚΛΕΙΔΙΠΡΟΚΑΘΟΡΙΣΜΕΝΗΣΤΑΞΙΝΟΜΗΣΗΣ:', 'ΠΡΟΚΑΘΟΡΙΣΜΕΝΗΤΑΞΙΝΟΜΗΣΗΚΑΤΗΓΟΡΙΑΣ:', 'ΠΡΟΚΤΑΞ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ΔΙΑΔΡΟΜΗΑΡΧΕΙΟΥ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ετικέτα', 'tag' ),
-       'hiddencat'               => array( '1', '__ΚΡΥΦΗΚΑΤΗΓΟΡΙΑ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'ΣΕΛΙΔΕΣΣΤΗΝΚΑΤΗΓΟΡΙΑ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ΜΕΓΕΘΟΣΣΕΛΙΔΑΣ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ΕΥΡΕΤΗΡΙΟ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__ΧΩΡΙΣΕΥΡΕΤΗΡΙΟ__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ΟΜΑΔΑΑΡΙΘΜΗΣΗΣ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ΣΤΑΤΙΚΗΑΝΑΚΑΤΕΥΘΥΝΣΗ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ΧΩΡΙΣΠΙΝΑΚΟΘΗΚΗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ΜΕΠΠ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ΠΠ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ΧΩΡΙΣΕΠΕΞΕΝΟΤ__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__ΧΩΡΙΣΚΕΦΑΛΙΔΑ__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΟΝΟΜΑ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΓΕΝΙΚΗ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΣΥΝΤ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑΟΝΟΜΑ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ΤΡΕΧΟΝΕΤΟΣ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ΤΡΕΧΩΝΧΡΟΝΟΣ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ΤΡΕΧΟΥΣΑΩΡΑ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣ1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΟΝΟΜΑ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΓΕΝΙΚΗ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ΤΟΠΙΚΟΣΜΗΝΑΣΣΥΝΤ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ΤΟΠΙΚΗΜΕΡΑ2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ΤΟΠΙΚΗΜΕΡΑΟΝΟΜΑ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ΤΟΠΙΚΟΕΤΟΣ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ΤΟΠΙΚΟΣΧΡΟΝΟΣ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ΤΟΠΙΚΗΩΡΑ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ΑΡΙΘΜΟΣΣΕΛΙΔΩΝ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ΑΡΙΘΜΟΣΑΡΘΡΩΝ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ΑΡΙΘΜΟΣΑΡΧΕΙΩΝ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ΑΡΙΘΜΟΣΧΡΗΣΤΩΝ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ΕΝΕΡΓΟΙΧΡΗΣΤΕΣ', 'ΑΡΙΘΜΟΣΕΝΕΡΓΩΝΧΡΗΣΤΩΝ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ΑΡΙΘΜΟΣΕΠΕΞΕΡΓΑΣΙΩΝ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ΑΡΙΘΜΟΣΕΜΦΑΝΙΣΕΩΝ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝΚ', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ΠΛΗΡΕΣΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ΟΝΟΜΑΥΠΟΣΕΛΙΔΑΣΚ', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ΒΑΣΗΟΝΟΜΑΤΟΣΣΕΛΙΔΑΣΚ', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΣΥΖΗΤΗΣΕΩΝΚ', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΘΕΜΑΤΟΣΚ', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ΚΕΙΜΕΝΟ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ΑΛΛΑΓΗ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'ΑΠΛΟΚΕΙΜΕΝΟ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'μικρογραφία', 'μινιατούρα', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'μικρογραφία=$1', 'μινιατούρα=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'δεξιά', 'right' ),
+       'img_left'                  => array( '1', 'αριστερά', 'left' ),
+       'img_none'                  => array( '1', 'καθόλου', 'none' ),
+       'img_width'                 => array( '1', '$1εσ', '$1px' ),
+       'img_center'                => array( '1', 'κέντρο', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'με-πλαίσιο', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'χωρίς-πλαίσιο', 'frameless' ),
+       'img_page'                  => array( '1', 'σελίδα=$1', 'σελίδα $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'πλαίσιο', 'border' ),
+       'img_baseline'              => array( '1', 'γραμμήβάσης', 'baseline' ),
+       'img_sub'                   => array( '1', 'δείκτης', 'sub' ),
+       'img_super'                 => array( '1', 'εκθέτης', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'άνω', 'top' ),
+       'img_text_top'              => array( '1', 'πάνω-από-το-κείμενο', 'text-top' ),
+       'img_middle'                => array( '1', 'μέσο', 'middle' ),
+       'img_bottom'                => array( '1', 'κάτω', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'κάτω-από-το-κείμενο', 'text-bottom' ),
+       'img_link'                  => array( '1', 'σύνδεσμος=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'εναλλ.=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ΕΣΩΤ:', 'INT:' ),
+       'sitename'                  => array( '1', 'ΙΣΤΟΧΩΡΟΣ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ΧΟ:', 'NS:' ),
+       'localurl'                  => array( '0', 'ΤΟΠΙΚΟURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ΤΟΠΙΚΟURLΚ:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'ΕΞΥΠΗΡΕΤΗΤΗΣ', 'SERVER' ),
+       'servername'                => array( '0', 'ΟΝΟΜΑΕΞΥΠΗΡΕΤΗΤΗ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ΔΙΑΔΡΟΜΗΠΡΟΓΡΑΜΜΑΤΟΣ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ΓΡΑΜΜΑΤΙΚΗ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ΦΥΛΟ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__ΧΩΡΙΣΜΕΤΑΤΡΟΠΗΤΙΤΛΟΥ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ΧΩΡΙΣΜΕΤΑΤΡΟΠΗΠΕΡΙΧΟΜΕΝΟΥ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ΤΡΕΧΟΥΣΑΕΒΔΟΜΑΔΑ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ΤΡΕΧΟΥΣΑΜΕΡΑΕΒΔΟΜΑΔΑΣ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ΤΟΠΙΚΗΕΒΔΟΜΑΔΑ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ΤΟΠΙΚΗΜΕΡΑΕΒΔΟΜΑΔΑΣ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ΚΩΔΙΚΟΣΑΛΛΑΓΗΣ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ΜΗΝΑΣΑΛΛΑΓΗΣ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ΕΤΟΣΑΛΛΑΓΗΣ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ΧΡΟΝΟΣΗΜΑΝΣΗΑΛΛΑΓΗΣ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'ΠΛΗΘΥΝΤΙΚΟΣ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ΠΛΗΡΕΣURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ΠΛΗΡΕΣURLΚ:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ΠΡΩΤΟΠΕΖΟ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ΠΡΩΤΟΚΕΦΑΛΑΙΟ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ΠΕΖΑ:', 'LC:' ),
+       'uc'                        => array( '0', 'ΚΕΦΑΛΑΙΑ:', 'UC:' ),
+       'raw'                       => array( '0', 'ΓΥΜΝΑ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ΔΕΙΞΕΤΙΤΛΟ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Γ', 'R' ),
+       'newsectionlink'            => array( '1', '__ΔΕΣΜΟΣΝΕΑΣΕΝΟΤΗΤΑΣ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ΤΡΕΧΟΥΣΑΕΚΔΟΣΗ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ΚΩΔΙΚΟΠΟΙΗΣΗURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ΚΩΔΙΚΟΠΟΙΗΣΗΑΓΚΥΡΑΣ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'ΤΡΕΧΟΥΣΑΧΡΟΝΟΣΗΜΑΝΣΗ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ΤΟΠΙΚΗΧΡΟΝΟΣΗΜΑΝΣΗ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'ΚΩΔΙΚΟΣΦΟΡΑΣ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ΓΛΩΣΣΑ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ΓΛΩΣΣΑΠΕΡΙΕΧΟΜΕΝΟΥ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ΣΕΛΙΔΕΣΣΤΗΝΠΕΡΙΟΧΗΟΝΟΜΑΤΩΝ:', 'ΣΕΛΙΔΕΣΣΤΗΝΠΟ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ΑΡΙΘΜΟΣΔΙΑΧΕΙΡΙΣΤΩΝ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ΜΟΡΦΟΠΟΙΗΣΗΑΡΙΘΜΟΥ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ΑΡΙΣΤΕΡΟΠΑΡΑΓΕΜΙΣΜΑ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ΔΕΞΙΠΑΡΑΓΕΜΙΣΜΑ', 'PADRIGHT' ),
+       'special'                   => array( '0', 'λειτουργία', 'special' ),
+       'defaultsort'               => array( '1', 'ΠΡΟΚΑΘΟΡΙΣΜΕΝΗΤΑΞΙΝΟΜΗΣΗ:', 'ΚΛΕΙΔΙΠΡΟΚΑΘΟΡΙΣΜΕΝΗΣΤΑΞΙΝΟΜΗΣΗΣ:', 'ΠΡΟΚΑΘΟΡΙΣΜΕΝΗΤΑΞΙΝΟΜΗΣΗΚΑΤΗΓΟΡΙΑΣ:', 'ΠΡΟΚΤΑΞ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ΔΙΑΔΡΟΜΗΑΡΧΕΙΟΥ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ετικέτα', 'tag' ),
+       'hiddencat'                 => array( '1', '__ΚΡΥΦΗΚΑΤΗΓΟΡΙΑ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'ΣΕΛΙΔΕΣΣΤΗΝΚΑΤΗΓΟΡΙΑ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ΜΕΓΕΘΟΣΣΕΛΙΔΑΣ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ΕΥΡΕΤΗΡΙΟ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__ΧΩΡΙΣΕΥΡΕΤΗΡΙΟ__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ΟΜΑΔΑΑΡΙΘΜΗΣΗΣ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ΣΤΑΤΙΚΗΑΝΑΚΑΤΕΥΘΥΝΣΗ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
 );
 
 $messages = array(
@@ -616,6 +616,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' => 'επεξεργασία',
@@ -736,6 +740,8 @@ $2',
 'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
 
 Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
+'exception-nologin' => 'Δεν έχετε συνδεθεί.',
+'exception-nologin-text' => 'Αυτή η σελίδα ή η ενέργεια απαιτεί να είστε {{GENDER:|συνδεμένος|συνδεμένη}} στο wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Λάθος ρύθμιση: άγνωστος ανιχνευτής ιών: ''$1''",
@@ -745,7 +751,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Έχετε αποσυνδεθεί.'''
 
-Μπορείτε να παραμείνετε στο {{SITENAME}} ανώνυμα, ή μπορείτε [[Special:UserLogin|να συνδεθείτε ξανά]] με το ίδιο ή με διαφορετικό (εάν έχετε) όνομα χρήστη.
+Μπορείτε να παραμείνετε στο {{SITENAME}} ανώνυμα, ή μπορείτε <span class='plainlinks'>[$1 να συνδεθείτε ξανά]</span> με το ίδιο ή με διαφορετικό (εάν έχετε) όνομα χρήστη.
 Έχετε υπόψη σας πως αρκετές σελίδες θα συνεχίσουν να εμφανίζονται κανονικά, σαν να μην έχετε αποσυνδεθεί, μέχρι να καθαρίσετε τη λανθάνουσα μνήμη του φυλλομετρητή σας.",
 'welcomecreation' => '== Καλώς ήλθατε, $1! ==
 Ο λογαριασμός σας έχει δημιουργηθεί.
@@ -1328,8 +1334,6 @@ $1",
 'search-interwiki-caption' => 'Αδελφικά εγχειρήματα',
 'search-interwiki-default' => '$1 αποτελέσματα:',
 'search-interwiki-more' => '(περισσότερα)',
-'search-mwsuggest-enabled' => 'με υποδείξεις',
-'search-mwsuggest-disabled' => 'χωρίς υποδείξεις',
 'search-relatedarticle' => 'Σχετικά',
 'mwsuggest-disable' => 'Απενεργοποίηση των προτάσεων AJAX',
 'searcheverything-enable' => 'Αναζήτηση σε όλες τις περιοχές ονομάτων',
@@ -2239,6 +2243,8 @@ $1',
 μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]
 για να στείλετε e-mail σε άλλους χρήστες.',
 'emailuser' => 'Στείλτε μήνυμα σε αυτό τον χρήστη',
+'emailuser-title-target' => 'Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη',
+'emailuser-title-notarget' => 'Αποστολή e-mail σε χρήστη',
 'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη',
 'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
 'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:',
@@ -2386,6 +2392,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}}]]), διότι κάποιος έχει ήδη αναιρέσει την αλλαγή ή έχει αλλάξει εκ νέου τη σελίδα.
@@ -2914,7 +2922,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Δοκιμή JavaScript',
-'javascripttest-disabled' => 'Αυτή η λειτουργία έχει απενεργοποιηθεί.',
 'javascripttest-title' => 'Εκτελούνται  $1  δοκιμές',
 'javascripttest-pagetext-noframework' => 'Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Άγνωστο πλαίσιο δοκιμών " $1 ".',
@@ -3044,7 +3051,14 @@ $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' => 'Μήκος σελίδας (σε bytes)',
+'pageinfo-article-id' => 'Αναγνωριστικό σελίδας',
 'pageinfo-views' => 'Αριθμός προβολών',
 'pageinfo-watchers' => 'Αριθμός παρατηρητών',
 'pageinfo-edits' => 'Αριθμός επεξεργασιών',
@@ -3879,6 +3893,10 @@ $5
 'feedback-bugcheck' => 'Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [ $1  γνωστά σφάλματα].',
 'feedback-bugnew' => 'Έλεγξα. Αναφέρετε ένα νέο σφάλμα',
 
+# Search suggestions
+'searchsuggest-search' => 'Αναζήτηση',
+'searchsuggest-containing' => 'περιέχει...',
+
 # API errors
 'api-error-badaccess-groups' => 'Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.',
 'api-error-badtoken' => 'Εσωτερικό σφάλμα: εσφαλμένο διακριτικό.',
index 6675900..b0fd2ad 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Emiliano-Romagnolo (Emiliàn e rumagnòl)
+/** Emiliano-Romagnolo (emiliàn e rumagnòl)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -16,102 +16,102 @@ $fallback = 'it';
 
 $messages = array(
 # Dates
-'sunday'    => 'Dmànga',
-'monday'    => 'Lonedè',
-'tuesday'   => 'Martedè',
+'sunday' => 'Dmànga',
+'monday' => 'Lonedè',
+'tuesday' => 'Martedè',
 'wednesday' => 'Merculdè',
-'thursday'  => 'Giuvidè',
-'friday'    => 'Venerdè',
-'saturday'  => 'Sâbet',
-'january'   => 'Znèr',
-'february'  => 'Febrèr',
-'march'     => 'Mèrz',
-'april'     => 'Avrîl',
-'june'      => 'Zógn',
-'july'      => 'Lój',
-'august'    => 'Agòst',
+'thursday' => 'Giuvidè',
+'friday' => 'Venerdè',
+'saturday' => 'Sâbet',
+'january' => 'Znèr',
+'february' => 'Febrèr',
+'march' => 'Mèrz',
+'april' => 'Avrîl',
+'june' => 'Zógn',
+'july' => 'Lój',
+'august' => 'Agòst',
 'september' => 'Setàmber',
-'october'   => 'Utóber',
-'november'  => 'Nuvàmber',
-'december'  => 'Dzèmber',
-'may'       => 'Mâz',
+'october' => 'Utóber',
+'november' => 'Nuvàmber',
+'december' => 'Dzèmber',
+'may' => 'Mâz',
 
 'mytalk' => 'I mê discussiòun',
 
 # Cologne Blue skin
 'qbspecialpages' => 'Pagini specièli',
 
-'returnto'         => 'Tórna a $1.',
-'help'             => 'Per quî rivê da pôch',
-'history_short'    => 'Stôria',
+'returnto' => 'Tórna a $1.',
+'help' => 'Per quî rivê da pôch',
+'history_short' => 'Stôria',
 'printableversion' => 'Versiòun stampàbil',
-'permalink'        => 'Link permanèint',
-'edit'             => 'Mudifichèr',
-'delete'           => 'Dscanzèla',
-'protect'          => 'Prutèzz',
-'specialpage'      => 'Pàgina specièla',
-'talk'             => 'Discussiòun',
-'jumptosearch'     => 'Zerca',
+'permalink' => 'Link permanèint',
+'edit' => 'Mudifichèr',
+'delete' => 'Dscanzèla',
+'protect' => 'Prutèzz',
+'specialpage' => 'Pàgina specièla',
+'talk' => 'Discussiòun',
+'jumptosearch' => 'Zerca',
 
 # 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).
-'currentevents'     => 'Fât e prugèt ed tót',
+'currentevents' => 'Fât e prugèt ed tót',
 'currentevents-url' => 'Project:Prugèt_ed_tót',
-'helppage'          => 'Help:Introduzione',
-'portal'            => 'Discóter e quistiunêr',
-'portal-url'        => 'Project:Bar',
+'helppage' => 'Help:Introduzione',
+'portal' => 'Discóter e quistiunêr',
+'portal-url' => 'Project:Bar',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Artéccol',
+'nstab-main' => 'Artéccol',
 'nstab-template' => 'Modèl',
 
 # Login and logout pages
-'logouttext'           => "'''Adèsa s'et discunnês.'''
+'logouttext' => "'''Adèsa s'et discunnês.'''
 
 Putiv cuntinuèr ad usèr {{SITENAME}} anonimamèint, o putiv cunnètterv dòp cun al stèss nàmm o cun un èter.
 Nutêv ca alcuni pàgini i putrèbber cuntinuèr a cràdder ca vueter a-sîv discunnès, finchè non purghê la cache dal vòster browser.",
-'userlogin'            => 'Entrèr / Argistrères',
-'logout'               => 'va fôra',
-'userlogout'           => 'Va fôra',
-'userexists'           => "Al nòmm ch'èt scélt l'è stê bèle usê: càten un èter, per piasêr.",
-'loginsuccess'         => "'''Adèsa sèt cunês in {{SITENAME}} cun al nàmm d'utèint \"\$1\".'''",
-'wrongpassword'        => "La password ch'et méss l'è sbajèda. Pròva ancàrra.",
+'userlogin' => 'Entrèr / Argistrères',
+'logout' => 'va fôra',
+'userlogout' => 'Va fôra',
+'userexists' => "Al nòmm ch'èt scélt l'è stê bèle usê: càten un èter, per piasêr.",
+'loginsuccess' => "'''Adèsa sèt cunês in {{SITENAME}} cun al nàmm d'utèint \"\$1\".'''",
+'wrongpassword' => "La password ch'et méss l'è sbajèda. Pròva ancàrra.",
 'blocked-mailpassword' => "Al tô indirézz IP l'an pôl più feèr di cambiamèint, e l'en brisa abilitê par user la funziòun ed recópper ed password par evitèr di abûs.",
-'accountcreated'       => 'Et criê un nôv account',
+'accountcreated' => 'Et criê un nôv account',
 
 # Edit pages
-'summary'          => "Mutîv d'al cambiamèint:",
-'minoredit'        => "Còst cambiamèint ché l'é un gnînt in tót",
-'watchthis'        => "Tîn a drê a c'la pàgina chè",
-'savearticle'      => 'Salva',
-'showpreview'      => 'Anteprémma',
-'showdiff'         => 'Guèrda al differèinzi',
-'anoneditwarning'  => "'''Attenziòun:''' An sîv ménga vgnû dèinter. Al vòster indirézz IP al vrà signê in d'la stòria d'i cambiamèint ed sta pagina chè..",
+'summary' => "Mutîv d'al cambiamèint:",
+'minoredit' => "Còst cambiamèint ché l'é un gnînt in tót",
+'watchthis' => "Tîn a drê a c'la pàgina chè",
+'savearticle' => 'Salva',
+'showpreview' => 'Anteprémma',
+'showdiff' => 'Guèrda al differèinzi',
+'anoneditwarning' => "'''Attenziòun:''' An sîv ménga vgnû dèinter. Al vòster indirézz IP al vrà signê in d'la stòria d'i cambiamèint ed sta pagina chè..",
 'anontalkpagetext' => "----''Sta chè l'éla pàgina ed discussiòun d'un utèint anònim c'al n'à brisa criê un sô account o c'an l'usa ménga. Bsògna quindi usêr al sô indirézz IP par identifichèrel. L'istèss indirézz IP al pôl èsser usê da di mòndi utèint. Se sèt un utèint anònim e pèinset c'a-t in sun stèdi fâti di cummèint irrilevànt, per piasér [[Special:UserLogin|criêt un account o fê al log-in]] par evitèr confusiòuni futuri cun di èter utèint anònim.''",
-'editing'          => 'Cambiamèint ed $1',
-'yourdiff'         => 'Differèinzi',
-'templatesused'    => '{{PLURAL:$1|Modêl|Modêl}} usèdi in sta pàgina:',
+'editing' => 'Cambiamèint ed $1',
+'yourdiff' => 'Differèinzi',
+'templatesused' => '{{PLURAL:$1|Modêl|Modêl}} usèdi in sta pàgina:',
 
 # Search results
 'searchhelp-url' => 'Help:Introduzione',
 
 # Preferences page
 'mypreferences' => 'AL mê preferèinzi',
-'yourrealname'  => 'Al tô vér nàmm:',
-'yourlanguage'  => 'Léngua:',
+'yourrealname' => 'Al tô vér nàmm:',
+'yourlanguage' => 'Léngua:',
 
 # Recent changes
 'recentchanges' => 'Ûltem cambiamèint',
-'diff'          => 'diferèinzi',
-'hist'          => 'stôria',
+'diff' => 'diferèinzi',
+'hist' => 'stôria',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Mudéffic curelèdi',
-'recentchangeslinked-feed'    => 'Mudéffic curelèdi',
+'recentchangeslinked' => 'Mudéffic curelèdi',
+'recentchangeslinked-feed' => 'Mudéffic curelèdi',
 'recentchangeslinked-toolbox' => 'Mudéffic curelèdi',
 
 # Upload
-'upload'            => 'Carghèr un file',
-'filedesc'          => "Ugêt d'al cambiamèint",
+'upload' => 'Carghèr un file',
+'filedesc' => "Ugêt d'al cambiamèint",
 'fileuploadsummary' => "Ugêt d'al cambiamèint:",
 
 # Special:ListFiles
@@ -133,19 +133,19 @@ Nutêv ca alcuni pàgini i putrèbber cuntinuèr a cràdder ca vueter a-sîv dis
 'newuserlogpage' => 'Regestér di nōv utèint',
 
 # Watchlist
-'watchlist'     => 'Al còsi ca guèrd',
-'watch'         => 'Tîn a drê',
+'watchlist' => 'Al còsi ca guèrd',
+'watch' => 'Tîn a drê',
 'watchthispage' => "Tîn a drê a c'la pàgina chè",
 
 # Delete
-'excontent'         => "al cointgnû l'éra: '$1'",
-'excontentauthor'   => "al cointgnû l'éra: '$1' (e l'ónic cuntribudôr l'éra '[[Special:Contributions/$2|$2]]')",
+'excontent' => "al cointgnû l'éra: '$1'",
+'excontentauthor' => "al cointgnû l'éra: '$1' (e l'ónic cuntribudôr l'éra '[[Special:Contributions/$2|$2]]')",
 'confirmdeletetext' => "Stèt per scanzlèr 'na pàgina o n'imàgin, insìmma a tòt la sô crunolugî dal database.
 Cunfermèr per piasèr ca saîv quàl che stèv par fêr, ca capîv al pussìbil counseguèinzi e ca stèv facènd quàst in confurmitê cun [[{{MediaWiki:Policy-url}}]].",
-'deletedtext'       => '"$1" l\'è stê scanzlê.
+'deletedtext' => '"$1" l\'è stê scanzlê.
 Guèrda $2 par vèdder la lésta d\'al pàgin ch\'i sun stèdi scanzlèdi di recèint.',
-'dellogpage'        => 'Regestér dal scanzladûri',
-'deletionlog'       => 'regéster dal scanzladûri',
+'dellogpage' => 'Regestér dal scanzladûri',
+'deletionlog' => 'regéster dal scanzladûri',
 
 # Contributions
 'mycontris' => 'I mê cuntribùdi',
@@ -154,7 +154,7 @@ Guèrda $2 par vèdder la lésta d\'al pàgin ch\'i sun stèdi scanzlèdi di rec
 'whatlinkshere' => 'I pùnten chè',
 
 # Block/unblock
-'blocklink'    => 'blòchel',
+'blocklink' => 'blòchel',
 'contribslink' => "còl ch'l'à scrét",
 
 # Move page
index 0828bbe..f5353b6 100644 (file)
@@ -118,7 +118,7 @@ $namespaceGenderAliases = array();
  * 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 (DateFormatter.php).
+ * supported by the wikitext converter (parser/DateFormatter.php).
  *
  * The special key "default" is an alias for either dmy or mdy depending on
  * $wgAmericanDates
@@ -207,7 +207,6 @@ $magicWords = array(
        'forcetoc'                => array( 0,    '__FORCETOC__' ),
        'toc'                     => array( 0,    '__TOC__' ),
        'noeditsection'           => array( 0,    '__NOEDITSECTION__' ),
-       'noheader'                => array( 0,    '__NOHEADER__' ),
        'currentmonth'            => array( 1,    'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'           => array( 1,    'CURRENTMONTH1' ),
        'currentmonthname'        => array( 1,    'CURRENTMONTHNAME' ),
@@ -442,7 +441,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'RecentChanges' ),
        'Recentchangeslinked'       => array( 'RecentChangesLinked', 'RelatedChanges' ),
        'Revisiondelete'            => array( 'RevisionDelete' ),
-       'RevisionMove'              => array( 'RevisionMove' ),
        'Search'                    => array( 'Search' ),
        'Shortpages'                => array( 'ShortPages' ),
        'Specialpages'              => array( 'SpecialPages' ),
@@ -800,7 +798,7 @@ XHTML id names.
 'vector-action-protect'          => 'Protect',
 'vector-action-undelete'         => 'Undelete',
 'vector-action-unprotect'        => 'Change protection',
-'vector-simplesearch-preference' => 'Enable enhanced search suggestions (Vector skin only)',
+'vector-simplesearch-preference' => 'Enable simplified search bar (Vector skin only)',
 'vector-view-create'             => 'Create',
 'vector-view-edit'               => 'Edit',
 'vector-view-history'            => 'View history',
@@ -895,6 +893,7 @@ $1',
 'portal-url'           => 'Project:Community portal',
 'privacy'              => 'Privacy policy',
 'privacypage'          => 'Project:Privacy policy',
+'content-failed-to-parse' => "Failed to parse $2 content for $1 model: $3",
 
 'badaccess'        => 'Permission error',
 'badaccess-group0' => 'You are not allowed to execute the action you have requested.',
@@ -914,8 +913,8 @@ See [[Special:Version|version page]].',
 'newmessagesdifflink'          => 'last change',
 'youhavenewmessagesfromusers'  => 'You have $1 from {{PLURAL:$3|another user|$3 users}} ($2).',
 'youhavenewmessagesmanyusers'  => 'You have $1 from many users ($2).',
-'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}', # don't rely on the value of $1, it's 1 for singular and 2 for "more than one"
-'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}', # don't rely on the value of $1, it's 1 for singular and 2 for "more than one"
+'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}',
+'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}',
 'youhavenewmessagesmulti'      => 'You have new messages on $1',
 'newtalkseparator'             => ',&#32;', # do not translate or duplicate this message to other languages
 'editsection'                  => 'edit',
@@ -1037,10 +1036,11 @@ Please try again in a few minutes.',
 'protectedpagetext'             => 'This page has been protected to prevent editing.',
 '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, and is protected to prevent abuse.',
+'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.
-Changes to this page will affect the appearance of the user interface for other users.
-For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
+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:
 $2',
@@ -1066,7 +1066,7 @@ The administrator who locked it offered this explanation: "$3".',
 # Login and logout pages
 'logouttext'                 => "'''You are now logged out.'''
 
-You can continue to use {{SITENAME}} anonymously, or you can [[Special:UserLogin|log in again]] as the same or as a different user.
+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.
@@ -1362,8 +1362,7 @@ You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other page
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
 or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
 'noarticletext-nopermission'       => 'There is currently no text in this page.
-You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
-or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.',
+You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.',
 'noarticletextanon'                => '{{int:noarticletext}}', # do not translate or duplicate this message to other languages
 'missing-revision'                 => 'The revision #$1 of the page named "{{PAGENAME}}" does not exist.
 
@@ -1435,6 +1434,7 @@ You are also promising us that you wrote this yourself, or copied it from a publ
 If you do not want your writing to be edited mercilessly, then do not submit it here.<br />
 You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).
 '''Do not submit copyrighted work without permission!'''",
+'editpage-head-copy-warn'          => '-', # do not translate or duplicate this message to other languages
 'editpage-tos-summary'             => '-', # do not translate or duplicate this message to other languages
 'longpage-hint'                    => '-', # do not translate or duplicate this message to other languages
 'longpageerror'                    => "'''Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
@@ -1485,6 +1485,8 @@ It already exists.',
 'addsection-preload'               => '', # do not translate or duplicate this message to other languages
 'addsection-editintro'             => '', # do not translate or duplicate this message to other languages
 'defaultmessagetext'               => 'Default message text',
+'invalid-content-data'             => 'Invalid content data',
+'content-not-allowed-here'         => '"$1" content is not allowed on page [[$2]]',
 
 # Parser/template warnings
 'expensive-parserfunction-warning'        => "'''Warning:''' This page contains too many expensive parser function calls.
@@ -1646,7 +1648,8 @@ Please check the logs.',
 'revdelete-only-restricted'   => 'Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.',
 'revdelete-reason-dropdown'   => '*Common delete reasons
 ** Copyright violation
-** Inappropriate personal information
+** Inappropriate comment or personal information
+** Inappropriate username
 ** Potentially libelous information',
 'revdelete-otherreason'       => 'Other/additional reason:',
 'revdelete-reasonotherlist'   => 'Other reason',
@@ -1751,8 +1754,6 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'search-interwiki-default'         => '$1 results:',
 'search-interwiki-custom'          => '', # do not translate or duplicate this message to other languages
 'search-interwiki-more'            => '(more)',
-'search-mwsuggest-enabled'         => 'with suggestions',
-'search-mwsuggest-disabled'        => 'no suggestions',
 'search-relatedarticle'            => 'Related',
 'mwsuggest-disable'                => 'Disable AJAX suggestions',
 'searcheverything-enable'          => 'Search in all namespaces',
@@ -1869,7 +1870,7 @@ Here's a randomly-generated value you can use: $1",
 'timezoneregion-indian'         => 'Indian Ocean',
 'timezoneregion-pacific'        => 'Pacific Ocean',
 'allowemail'                    => 'Enable e-mail from other users',
-'prefs-searchoptions'           => 'Search options',
+'prefs-searchoptions'           => 'Search',
 'prefs-namespaces'              => 'Namespaces',
 'defaultns'                     => 'Otherwise search in these namespaces:',
 'default'                       => 'default',
@@ -2205,16 +2206,16 @@ this file is $2.',
 This might be due to a typo in the filename.
 Please check whether you really want to upload this file.',
 'windows-nonascii-filename'   => 'This wiki does not support filenames with special characters.',
-'fileexists'                  => "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
-[[$1|thumb]]",
-'filepageexists'              => "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
+'fileexists'                  => 'A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
+[[$1|thumb]]',
+'filepageexists'              => 'The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
 The summary you enter will not appear on the description page.
 To make your summary appear there, you will need to manually edit it.
-[[$1|thumb]]",
-'fileexists-extension'        => "A file with a similar name exists: [[$2|thumb]]
+[[$1|thumb]]',
+'fileexists-extension'        => 'A file with a similar name exists: [[$2|thumb]]
 * Name of the uploading file: <strong>[[:$1]]</strong>
 * Name of the existing file: <strong>[[:$2]]</strong>
-Please choose a different name.",
+Please choose a different name.',
 'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size ''(thumbnail)''.
 [[$1|thumb]]
 Please check the file <strong>[[:$1]]</strong>.
@@ -2320,7 +2321,7 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-internal'      => 'An unknown error occurred in storage backend "$1".',
 'backend-fail-contenttype'   => 'Could not determine the content type of the file to store at "$1".',
 'backend-fail-batchsize'     => 'The storage backend was given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
-'backend-fail-usable'        => 'Could not write file "$1" due to insufficient permissions or missing directories/containers.',
+'backend-fail-usable'        => 'Could not read or write file "$1" due to insufficient permissions or missing directories/containers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Could not connect to the journal database for storage backend "$1".',
@@ -2793,38 +2794,38 @@ There may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] a
 'listgrouprights-removegroup-self-all' => 'Remove all groups from own account',
 
 # E-mail user
-'mailnologin'          => 'No send address',
-'mailnologintext'      => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.',
-'emailuser'            => 'E-mail this user',
-'emailuser-title-target' => 'E-mail this {{GENDER:$1|user}}',
+'mailnologin'              => 'No send address',
+'mailnologintext'          => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.',
+'emailuser'                => 'E-mail this user',
+'emailuser-title-target'   => 'E-mail this {{GENDER:$1|user}}',
 'emailuser-title-notarget' => 'E-mail user',
-'emailuser-summary'    => '', # do not translate or duplicate this message to other languages
-'emailpage'            => 'E-mail user',
-'emailpagetext'        => 'You can use the form below to send an e-mail message to this user.
+'emailuser-summary'        => '', # do not translate or duplicate this message to other languages
+'emailpage'                => 'E-mail user',
+'emailpagetext'            => 'You can use the form below to send an e-mail message to this 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:',
-'defemailsubject'      => '{{SITENAME}} e-mail from user "$1"',
-'usermaildisabled'     => 'User e-mail disabled',
-'usermaildisabledtext' => 'You cannot send e-mail to other users on this wiki',
-'noemailtitle'         => 'No e-mail address',
-'noemailtext'          => 'This user has not specified a valid e-mail address.',
-'nowikiemailtitle'     => 'No e-mail allowed',
-'nowikiemailtext'      => 'This user has chosen not to receive e-mail from other users.',
-'emailnotarget'        => 'Non-existent or invalid username for recipient.',
-'emailtarget'          => 'Enter username of recipient',
-'emailusername'        => 'Username:',
-'emailusernamesubmit'  => 'Submit',
-'email-legend'         => 'Send an e-mail to another {{SITENAME}} user',
-'emailfrom'            => 'From:',
-'emailto'              => 'To:',
-'emailsubject'         => 'Subject:',
-'emailmessage'         => 'Message:',
-'emailsend'            => 'Send',
-'emailccme'            => 'E-mail me a copy of my message.',
-'emailccsubject'       => 'Copy of your message to $1: $2',
-'emailsent'            => 'E-mail sent',
-'emailsenttext'        => 'Your e-mail message has been sent.',
-'emailuserfooter'      => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.',
+'usermailererror'          => 'Mail object returned error:',
+'defemailsubject'          => '{{SITENAME}} e-mail from user "$1"',
+'usermaildisabled'         => 'User e-mail disabled',
+'usermaildisabledtext'     => 'You cannot send e-mail to other users on this wiki',
+'noemailtitle'             => 'No e-mail address',
+'noemailtext'              => 'This user has not specified a valid e-mail address.',
+'nowikiemailtitle'         => 'No e-mail allowed',
+'nowikiemailtext'          => 'This user has chosen not to receive e-mail from other users.',
+'emailnotarget'            => 'Non-existent or invalid username for recipient.',
+'emailtarget'              => 'Enter username of recipient',
+'emailusername'            => 'Username:',
+'emailusernamesubmit'      => 'Submit',
+'email-legend'             => 'Send an e-mail to another {{SITENAME}} user',
+'emailfrom'                => 'From:',
+'emailto'                  => 'To:',
+'emailsubject'             => 'Subject:',
+'emailmessage'             => 'Message:',
+'emailsend'                => 'Send',
+'emailccme'                => 'E-mail me a copy of my message.',
+'emailccsubject'           => 'Copy of your message to $1: $2',
+'emailsent'                => 'E-mail sent',
+'emailsenttext'            => 'Your e-mail message has been sent.',
+'emailuserfooter'          => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.',
 
 # User Messenger
 'usermessage-summary'  => 'Leaving system message.',
@@ -3067,8 +3068,8 @@ You may have a bad link, or the revision may have been restored or removed from
 'undeletedrevisions'           => '{{PLURAL:$1|1 revision|$1 revisions}} restored',
 'undeletedrevisions-files'     => '{{PLURAL:$1|1 revision|$1 revisions}} and {{PLURAL:$2|1 file|$2 files}} restored',
 'undeletedfiles'               => '{{PLURAL:$1|1 file|$1 files}} restored',
-'cannotundelete'               => 'Undelete failed;
-someone else may have undeleted the page first.',
+'cannotundelete'               => 'Undelete failed:
+$1',
 'undeletedpage'                => "'''$1 has been restored'''
 
 Consult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
@@ -3390,6 +3391,7 @@ cannot move a page over itself.',
 'immobile-target-namespace-iw' => 'Interwiki link is not a valid target for page move.',
 'immobile-source-page'         => 'This page is not movable.',
 'immobile-target-page'         => 'Cannot move to that destination title.',
+'bad-target-model'             => 'The desired destination uses a different content model. Can not convert from $1 to $2.',
 'imagenocrossnamespace'        => 'Cannot move file to non-file namespace',
 'nonfile-cannot-move-to-file'  => 'Cannot move non-file to file namespace',
 'imagetypemismatch'            => 'The new file extension does not match its type',
@@ -3523,7 +3525,6 @@ Please try again.',
 # JavaScriptTest
 'javascripttest'                           => 'JavaScript testing',
 'javascripttest-backlink'                  => '< $1', # do not translate or duplicate this message to other languages
-'javascripttest-disabled'                  => 'This function has not been enabled on this wiki.',
 'javascripttest-title'                     => 'Running $1 tests',
 'javascripttest-pagetext-noframework'      => 'This page is reserved for running JavaScript tests.',
 'javascripttest-pagetext-unknownframework' => 'Unknown testing framework "$1".',
@@ -3734,6 +3735,7 @@ 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-header-basic'        => 'Basic information',
 'pageinfo-header-edits'        => 'Edit history',
@@ -3749,7 +3751,7 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-views'               => 'Number of views',
 'pageinfo-watchers'            => 'Number of page watchers',
 'pageinfo-redirects-name'      => 'Redirects to this page',
-'pageinfo-redirects-value'     => '$1',
+'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',
@@ -3760,10 +3762,11 @@ This is probably caused by a link to a blacklisted external site.',
 '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-restriction'         => 'Page protection (<code>{{lcfirst:$1}}</code>)',
 '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',
 
 # Skin names
 'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
@@ -3809,29 +3812,29 @@ $1',
 'nextdiff'     => 'Newer edit →',
 
 # Media information
-'mediawarning'           => "'''Warning''': This file type may contain malicious code.
+'mediawarning'                => "'''Warning''': This file type may contain malicious code.
 By executing it, your system may be compromised.",
-'imagemaxsize'           => "Image size limit:<br />''(for file description pages)''",
-'thumbsize'              => 'Thumbnail size:',
-'widthheight'            => '$1 × $2', # only translate this message to other languages if you have to change it
-'widthheightpage'        => '$1 × $2, $3 {{PLURAL:$3|page|pages}}',
-'file-info'              => 'file size: $1, MIME type: $2',
-'file-info-size'         => '$1 × $2 pixels, file size: $3, MIME type: $4',
-'file-info-size-pages'   => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}',
-'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',
-'show-big-image'         => 'Full resolution',
-'show-big-image-preview' => 'Size of this preview: $1.',
-'show-big-image-other'   => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
-'show-big-image-size'    => '$1 × $2 pixels',
-'file-info-gif-looped'   => 'looped',
-'file-info-gif-frames'   => '$1 {{PLURAL:$1|frame|frames}}',
-'file-info-png-looped'   => 'looped',
-'file-info-png-repeat'   => 'played $1 {{PLURAL:$1|time|times}}',
-'file-info-png-frames'   => '$1 {{PLURAL:$1|frame|frames}}',
-'file-no-thumb-animation'=> '\'\'\'Note: Due to technical limitations, thumbnails of this file will not be animated.\'\'\'',
-'file-no-thumb-animation-gif' => '\'\'\'Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.\'\'\'',
+'imagemaxsize'                => "Image size limit:<br />''(for file description pages)''",
+'thumbsize'                   => 'Thumbnail size:',
+'widthheight'                 => '$1 × $2', # only translate this message to other languages if you have to change it
+'widthheightpage'             => '$1 × $2, $3 {{PLURAL:$3|page|pages}}',
+'file-info'                   => 'file size: $1, MIME type: $2',
+'file-info-size'              => '$1 × $2 pixels, file size: $3, MIME type: $4',
+'file-info-size-pages'        => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}',
+'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',
+'show-big-image'              => 'Full resolution',
+'show-big-image-preview'      => 'Size of this preview: $1.',
+'show-big-image-other'        => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
+'show-big-image-size'         => '$1 × $2 pixels',
+'file-info-gif-looped'        => 'looped',
+'file-info-gif-frames'        => '$1 {{PLURAL:$1|frame|frames}}',
+'file-info-png-looped'        => 'looped',
+'file-info-png-repeat'        => 'played $1 {{PLURAL:$1|time|times}}',
+'file-info-png-frames'        => '$1 {{PLURAL:$1|frame|frames}}',
+'file-no-thumb-animation'     => "'''Note: Due to technical limitations, thumbnails of this file will not be animated.'''",
+'file-no-thumb-animation-gif' => "'''Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.'''",
 
 # Special:NewFiles
 'newimages'             => 'Gallery of new files',
@@ -4458,9 +4461,10 @@ This confirmation code will expire at $4.',
 'invalidateemail'           => 'Cancel e-mail confirmation',
 
 # Scary transclusion
-'scarytranscludedisabled' => '[Interwiki transcluding is disabled]',
-'scarytranscludefailed'   => '[Template fetch failed for $1]',
-'scarytranscludetoolong'  => '[URL is too long]',
+'scarytranscludedisabled'          => '[Interwiki transcluding is disabled]',
+'scarytranscludefailed'            => '[Template fetch failed for $1]',
+'scarytranscludefailed-httpstatus' => '[Template fetch failed for $1: HTTP $2]',
+'scarytranscludetoolong'           => '[URL is too long]',
 
 # Delete conflict
 'deletedwhileediting'      => "'''Warning''': This page was deleted after you started editing!",
@@ -4694,7 +4698,7 @@ You can also [[Special:EditWatchlist|use the standard editor]].',
 'version-svn-revision'                  => '(r$2)', # only translate this message to other languages if you have to change it
 'version-license'                       => 'License',
 'version-poweredby-credits'             => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
-'version-poweredby-others'              => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS others]',
+'version-poweredby-others'              => 'others',
 'version-license-info'                  => 'MediaWiki 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.
 
 MediaWiki 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.
@@ -4873,7 +4877,7 @@ This site is experiencing technical difficulties.',
 
 # Feedback
 'feedback-bugornote' => 'If you are ready to describe a technical problem in detail please [$1 report a bug].
-Otherwise, you can use the easy form below. Your comment will be added to the page "[$3 $2]", along with your username and what browser you are using.',
+Otherwise, you can use the easy form below. Your comment will be added to the page "[$3 $2]", along with your username.',
 'feedback-subject'   => 'Subject:',
 'feedback-message'   => 'Message:',
 'feedback-cancel'    => 'Cancel',
@@ -4887,6 +4891,10 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'feedback-bugcheck'  => 'Great! Just check that it is not already one of the [$1 known bugs].',
 'feedback-bugnew'    => 'I checked. Report a new bug',
 
+# Search suggestions
+'searchsuggest-search'     => 'Search',
+'searchsuggest-containing' => 'containing...',
+
 # API errors
 'api-error-badaccess-groups'              => 'You are not permitted to upload files to this wiki.',
 'api-error-badtoken'                      => 'Internal error: Bad token.',
@@ -4939,4 +4947,10 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Content model IDs for the ContentHandler facility; used by ContentHandler::getContentModel()
+'content-model-wikitext' => 'wikitext',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+'content-model-text' => 'plain text',
+
 );
index 3928e70..c38fd29 100644 (file)
@@ -25,23 +25,56 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-watchcreations' => 'Add pages I create to my watchlist',
-'tog-watchdefault'   => 'Add pages I edit to my watchlist',
-'tog-watchmoves'     => 'Add pages I move to my watchlist',
-'tog-watchdeletion'  => 'Add pages I delete to my watchlist',
+'tog-watchdefault' => 'Add pages I edit to my watchlist',
+'tog-watchmoves' => 'Add pages I move to my watchlist',
+'tog-watchdeletion' => 'Add pages I delete to my watchlist',
+'tog-showjumplinks' => 'Enable ‘jump to’ accessibility links',
+
+# Categories related messages
+'category_header' => 'Pages in category ‘$1’',
+'category-media-header' => 'Media in category ‘$1’',
+
+'retrievedfrom' => 'Retrieved from ‘$1’',
+'page-rss-feed' => '‘$1’ RSS feed',
+'page-atom-feed' => '‘$1’ Atom feed',
 
 # General errors
+'dberrortext' => 'A database query syntax error has occurred.
+This may indicate a bug in the software.
+The last attempted database query was:
+<blockquote><tt>$1</tt></blockquote>
+from within function ‘<tt>$2</tt>.’
+Database returned error ‘<tt>$3: $4</tt>.’',
+'dberrortextcl' => 'A database query syntax error has occurred.
+The last attempted database query was:
+‘$1’
+from within function ‘$2.’
+Database returned error ‘$3: $4’',
 'missing-article' => 'The database did not find the text of a page that it should have found, named ‘$1’ $2.
 
 This is usually caused by following an outdated diff or history link to a page that has been deleted.
 
 If this is not the case, you may have found a bug in the software.
 Please report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.',
+'fileappenderrorread' => 'Could not read ‘$1’ during append.',
+'fileappenderror' => 'Could not append ‘$1’ to ‘$2.’',
+'filecopyerror' => 'Could not copy file ‘$1’ to ‘$2.’',
+'filerenameerror' => 'Could not rename file ‘$1’ to ‘$2.’',
+'filedeleteerror' => 'Could not delete file ‘$1’.',
+'directorycreateerror' => 'Could not create directory ‘$1’.',
+'filenotfound' => 'Could not find file ‘$1’.',
+'fileexistserror' => 'Unable to write to file ‘$1’: file exists',
+'unexpected' => 'Unexpected value: ‘$1’=‘$2’.',
+'cannotdelete' => 'The page or file ‘$1’ could not be deleted.
+It may have already been deleted by someone else.',
+'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',
 
 # Miscellaneous special pages
-'uncategorizedpages'      => 'Uncategorised pages',
+'uncategorizedpages' => 'Uncategorised pages',
 'uncategorizedcategories' => 'Uncategorised categories',
-'uncategorizedimages'     => 'Uncategorised files',
-'uncategorizedtemplates'  => 'Uncategorised templates',
+'uncategorizedimages' => 'Uncategorised files',
+'uncategorizedtemplates' => 'Uncategorised templates',
 
 # Edit tokens
 'sessionfailure' => 'There seems to be a problem with your login session;
@@ -58,11 +91,11 @@ Fill in a specific reason below (for example, citing particular pages that were
 If the file has been modified from its original state, some details may not fully reflect the modified file.',
 
 # EXIF tags
-'exif-ycbcrcoefficients'   => 'Colour space transformation matrix coefficients',
-'exif-colorspace'          => 'Colour space',
-'exif-datetimedigitized'   => 'Date and time of digitising',
+'exif-ycbcrcoefficients' => 'Colour space transformation matrix coefficients',
+'exif-colorspace' => 'Colour space',
+'exif-datetimedigitized' => 'Date and time of digitising',
 'exif-subsectimedigitized' => 'DateTimeDigitised subseconds',
-'exif-exposureprogram'     => 'Exposure programme',
+'exif-exposureprogram' => 'Exposure programme',
 
 'exif-exposureprogram-2' => 'Normal programme',
 'exif-exposureprogram-5' => 'Creative programme (biased toward depth of field)',
index dc36986..8045cf3 100644 (file)
@@ -175,129 +175,129 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ALIDIREKTU', '#ALIDIREKTI', '#AL', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NI__', '__NEINDEKSO__', '__NT__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NG__', '__SENBILDARO__', '__SB__', '__SG__', '__SENGALERIO__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FI__', '__FORTUINDEKSON__', '__FT__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__I__', '__T__', '__INDEKSO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SRS__', '__NES__', '__SENREDAKTISEKCIOJN__', '__SENREDAKTISEKCION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SENTITOLO__', '__NH__', '__ST__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'NUNAMONATO', 'NUNAMONATO2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'NUNAMONATO1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NUNAMONATNOMO', 'NUNAMONATONOMO', 'NUNAMONATANOMO', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NUNAMONATNOMOGEN', 'NUNAMONATONOMOGEN', 'NUNAMONATANOMOGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NUNAMONATNOMOMAL', 'NUNAMONATONOMOMAL', 'NUNAMONATANOMOMAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NUNATAGO', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NUNATAGO2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NUNATAGNOMO', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NUNAJARO', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NUNATEMPO', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NUNAHORO', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKAMONATO', 'LOKAMONATO2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKAMONATO1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKAMONATNOMO', 'LOKAMONATONOMO', 'LOKAMONATANOMO', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKAMONATNOMOGEN', 'LOKAMONATONOMOGEN', 'LOKAMONATANOMOGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKAMONATNOMOMAL', 'LOKAMONATONOMOMAL', 'LOKAMONATANOMOMAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKATAGO', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKATAGO2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKATAGNOMO', 'LOKATAGONOMO', 'LOKATAGANOMO', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKAJARO', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKATEMPO', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKAHORO', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBRODEPAĜOJ', 'NOMBRODEPAGXOJ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBRODEARTIKOLOJ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBRODEDOSIEROJ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBRODEUZANTOJ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBRODEAKTIVAJUZANTOJ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBRODEREDAKTOJ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBRODEVIZITOJ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PAĜONOMO', 'PAGXONOMO', 'PAĜNOMO', 'PAGXNOMO', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAĜONOMOO', 'PAGXONOMOO', 'PAĜNOMOO', 'PAGXNOMOO', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NOMSPACO', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NOMSPACOO', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUTNOMSPACO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUTNOMSPACOO', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'TUTAPAĜONOMO', 'TUTAPAGXONOMO', 'TUTAPAĜNOMO', 'TUTAPAGXNOMO', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'TUTAPAĜONOMOO', 'TUTAPAGXONOMOO', 'TUTAPAĜNOMOO', 'TUTAPAGXNOMOO', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'SUBPAĜONOMO', 'SUBPAGXONOMO', 'SUBPAĜNOMO', 'SUBPAGXNOMO', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'SUBPAĜONOMOO', 'SUBPAGXONOMOO', 'SUBPAĜNOMOO', 'SUBPAGXNOMOO', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'PATRAPAĜONOMO', 'PATRAPAGXONOMO', 'PATRAPAĜNOMO', 'PATRAPAGXNOMO', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'PATRAPAĜONOMOO', 'PATRAPAGXONOMOO', 'PATRAPAĜNOMOO', 'PATRAPAGXNOMOO', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUTPAĜONOMO', 'DISKUTPAGXONOMO', 'DISKUTPAĜNOMO', 'DISKUTPAGXNOMO', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUTPAĜONOMOO', 'DISKUTPAGXONOMOO', 'DISKUTPAĜNOMOO', 'DISKUTPAGXNOMOO', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSĜ:', 'MSGX:', 'MSG:' ),
-       'subst'                   => array( '0', 'ANSTAT:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'SEKURANSTAT:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'NVMSĜ:', 'NVMSGX:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'eta', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'eta=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dekstra', 'dekstre', 'right' ),
-       'img_left'                => array( '1', 'maldekstra', 'maldekstre', 'left' ),
-       'img_none'                => array( '1', 'nenio', 'neniu', 'none' ),
-       'img_width'               => array( '1', '$1ra', '$1px' ),
-       'img_center'              => array( '1', 'centra', 'meza', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'kadro', 'enkadrita', 'enkadrite', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'senkadra', 'frameless' ),
-       'img_page'                => array( '1', 'paĝo=$1', 'paĝo $1', 'pagxo=$1', 'pagxo_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'altdekstre', 'altdekstre=$1', 'altdekstre_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kadra', 'kadrita', 'kadrigita', 'kadrite', 'kadrigite', 'border' ),
-       'img_sub'                 => array( '1', 'sube', 'malsupre', 'sub' ),
-       'img_super'               => array( '1', 'supre', 'malsube', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'alte', 'top' ),
-       'img_text_top'            => array( '1', 'tekst-alte', 'text-top' ),
-       'img_middle'              => array( '1', 'meze', 'middle' ),
-       'img_bottom'              => array( '1', 'malalte', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'suba-teksto', 'text-bottom' ),
-       'img_link'                => array( '1', 'ligilo=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'alternative=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ENE:', 'INT:' ),
-       'sitename'                => array( '1', 'TTT-NOMO', 'RETPAĜNOMO', 'RETPAGXNOMO', 'RETEJNOMO', 'SITENAME' ),
-       'nse'                     => array( '0', 'NSS:', 'NSO:', 'NSE:' ),
-       'localurl'                => array( '0', 'LOKATTT:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKATTTT:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKOLAPADO', 'ARTIKOLAVOJO', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SERVILO', 'SERVER' ),
-       'servername'              => array( '0', 'NOMODESERVILO', 'SERVILANOMO', 'SERVILONOMO', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTO-VOJO', 'SKRIPTOVOJO', 'SKRIPTVOJO', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STILO-VOJO', 'STILOVOJO', 'STILVOJO', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKO:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SEKSO:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__NEKONVERTUTITOLON__', '__NKT__', '__NTC__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__NEKONVERTUENHAVON__', '__NKH__', '__NCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'NUNASEMAJNO', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'LOKASEMAJNO', 'LOCALWEEK' ),
-       'revisionyear'            => array( '1', 'JARODEREVIZIO', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'PLURALA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PLENALIGILO:', 'PLENLIG:', 'TUTATTT:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PLENALIGILOO:', 'PLENLIGG:', 'TUTATTTT:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'MALMAJUSKLEUNUA:', 'MINUSKLEUNUA:', 'MMU:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'MAJUSKLEUNUA:', 'MALMINUSKLEUNUA:', 'MU:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MALMAJUSKLE:', 'MINUSKLE:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUSKLE:', 'MALMINUSKLE:', 'UC:' ),
-       'displaytitle'            => array( '1', 'MONTRUTITOLON:', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LIGILOALNOVASEKCIO__', '__NSL__', '__LNS__', '__LANS__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__SENLIGILOALNOVASEKCIO__', '__NNSL__', '__SLNS__', '__SLANS__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'NUNAVERSIO', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'NUNATEMPINDIKO', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKATEMPINDIKO', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#LINGVO:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ENHAVA-LINGVO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAĜOJENNOMSPACO', 'PAGXOJENNOMSPACO', 'PAĜOJENS', 'PAGXOJENNS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBRODEADMINOJ', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'speciala', 'special' ),
-       'defaultsort'             => array( '1', 'DEFAŬLTORDIGO:', 'DEFAUXLTORDIGO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DOSIERO-VORO', 'DOSIERVOJO', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'marko', 'etikedo', 'tag' ),
-       'hiddencat'               => array( '1', '__KK__', '__KAŜITAKATEGORIO__', '__KASXITAKATEGORIO__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAĜOJENKATEGORIO', 'PAGXOJENKATEGORIO', 'PAĜOJENKAT', 'PAGXOJENKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAĜOPEZO', 'PAGXOPEZO', 'PEZODEPAĜO', 'PEZODEPAGXO', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKSU__', '__INDEKSI__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NEINDEKSU__', '__NIU__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__STATIKAALIDIREKTO__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'PROTEKTONIVELO', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'VOJO', 'PATH' ),
-       'url_wiki'                => array( '0', 'VIKIO', 'WIKI' ),
-       'url_query'               => array( '0', 'INFORMPETO', 'QUERY' ),
+       'redirect'                  => array( '0', '#ALIDIREKTU', '#ALIDIREKTI', '#AL', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NI__', '__NEINDEKSO__', '__NT__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NG__', '__SENBILDARO__', '__SB__', '__SG__', '__SENGALERIO__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FI__', '__FORTUINDEKSON__', '__FT__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__I__', '__T__', '__INDEKSO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SRS__', '__NES__', '__SENREDAKTISEKCIOJN__', '__SENREDAKTISEKCION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SENTITOLO__', '__NH__', '__ST__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'NUNAMONATO', 'NUNAMONATO2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'NUNAMONATO1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NUNAMONATNOMO', 'NUNAMONATONOMO', 'NUNAMONATANOMO', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NUNAMONATNOMOGEN', 'NUNAMONATONOMOGEN', 'NUNAMONATANOMOGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NUNAMONATNOMOMAL', 'NUNAMONATONOMOMAL', 'NUNAMONATANOMOMAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NUNATAGO', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NUNATAGO2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NUNATAGNOMO', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NUNAJARO', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NUNATEMPO', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NUNAHORO', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKAMONATO', 'LOKAMONATO2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKAMONATO1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKAMONATNOMO', 'LOKAMONATONOMO', 'LOKAMONATANOMO', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKAMONATNOMOGEN', 'LOKAMONATONOMOGEN', 'LOKAMONATANOMOGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKAMONATNOMOMAL', 'LOKAMONATONOMOMAL', 'LOKAMONATANOMOMAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKATAGO', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKATAGO2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKATAGNOMO', 'LOKATAGONOMO', 'LOKATAGANOMO', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKAJARO', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKATEMPO', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKAHORO', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBRODEPAĜOJ', 'NOMBRODEPAGXOJ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBRODEARTIKOLOJ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRODEDOSIEROJ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRODEUZANTOJ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBRODEAKTIVAJUZANTOJ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRODEREDAKTOJ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBRODEVIZITOJ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PAĜONOMO', 'PAGXONOMO', 'PAĜNOMO', 'PAGXNOMO', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAĜONOMOO', 'PAGXONOMOO', 'PAĜNOMOO', 'PAGXNOMOO', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NOMSPACO', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NOMSPACOO', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUTNOMSPACO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUTNOMSPACOO', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'TUTAPAĜONOMO', 'TUTAPAGXONOMO', 'TUTAPAĜNOMO', 'TUTAPAGXNOMO', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'TUTAPAĜONOMOO', 'TUTAPAGXONOMOO', 'TUTAPAĜNOMOO', 'TUTAPAGXNOMOO', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'SUBPAĜONOMO', 'SUBPAGXONOMO', 'SUBPAĜNOMO', 'SUBPAGXNOMO', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'SUBPAĜONOMOO', 'SUBPAGXONOMOO', 'SUBPAĜNOMOO', 'SUBPAGXNOMOO', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'PATRAPAĜONOMO', 'PATRAPAGXONOMO', 'PATRAPAĜNOMO', 'PATRAPAGXNOMO', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'PATRAPAĜONOMOO', 'PATRAPAGXONOMOO', 'PATRAPAĜNOMOO', 'PATRAPAGXNOMOO', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUTPAĜONOMO', 'DISKUTPAGXONOMO', 'DISKUTPAĜNOMO', 'DISKUTPAGXNOMO', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUTPAĜONOMOO', 'DISKUTPAGXONOMOO', 'DISKUTPAĜNOMOO', 'DISKUTPAGXNOMOO', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSĜ:', 'MSGX:', 'MSG:' ),
+       'subst'                     => array( '0', 'ANSTAT:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'SEKURANSTAT:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'NVMSĜ:', 'NVMSGX:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'eta', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'eta=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dekstra', 'dekstre', 'right' ),
+       'img_left'                  => array( '1', 'maldekstra', 'maldekstre', 'left' ),
+       'img_none'                  => array( '1', 'nenio', 'neniu', 'none' ),
+       'img_width'                 => array( '1', '$1ra', '$1px' ),
+       'img_center'                => array( '1', 'centra', 'meza', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'kadro', 'enkadrita', 'enkadrite', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'senkadra', 'frameless' ),
+       'img_page'                  => array( '1', 'paĝo=$1', 'paĝo $1', 'pagxo=$1', 'pagxo_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'altdekstre', 'altdekstre=$1', 'altdekstre_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kadra', 'kadrita', 'kadrigita', 'kadrite', 'kadrigite', 'border' ),
+       'img_sub'                   => array( '1', 'sube', 'malsupre', 'sub' ),
+       'img_super'                 => array( '1', 'supre', 'malsube', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'alte', 'top' ),
+       'img_text_top'              => array( '1', 'tekst-alte', 'text-top' ),
+       'img_middle'                => array( '1', 'meze', 'middle' ),
+       'img_bottom'                => array( '1', 'malalte', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'suba-teksto', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ligilo=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'alternative=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ENE:', 'INT:' ),
+       'sitename'                  => array( '1', 'TTT-NOMO', 'RETPAĜNOMO', 'RETPAGXNOMO', 'RETEJNOMO', 'SITENAME' ),
+       'nse'                       => array( '0', 'NSS:', 'NSO:', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKATTT:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKATTTT:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKOLAPADO', 'ARTIKOLAVOJO', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SERVILO', 'SERVER' ),
+       'servername'                => array( '0', 'NOMODESERVILO', 'SERVILANOMO', 'SERVILONOMO', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTO-VOJO', 'SKRIPTOVOJO', 'SKRIPTVOJO', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STILO-VOJO', 'STILOVOJO', 'STILVOJO', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKO:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SEKSO:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__NEKONVERTUTITOLON__', '__NKT__', '__NTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__NEKONVERTUENHAVON__', '__NKH__', '__NCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'NUNASEMAJNO', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'LOKASEMAJNO', 'LOCALWEEK' ),
+       'revisionyear'              => array( '1', 'JARODEREVIZIO', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'PLURALA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PLENALIGILO:', 'PLENLIG:', 'TUTATTT:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PLENALIGILOO:', 'PLENLIGG:', 'TUTATTTT:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'MALMAJUSKLEUNUA:', 'MINUSKLEUNUA:', 'MMU:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'MAJUSKLEUNUA:', 'MALMINUSKLEUNUA:', 'MU:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MALMAJUSKLE:', 'MINUSKLE:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUSKLE:', 'MALMINUSKLE:', 'UC:' ),
+       'displaytitle'              => array( '1', 'MONTRUTITOLON:', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LIGILOALNOVASEKCIO__', '__NSL__', '__LNS__', '__LANS__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__SENLIGILOALNOVASEKCIO__', '__NNSL__', '__SLNS__', '__SLANS__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'NUNAVERSIO', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'NUNATEMPINDIKO', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKATEMPINDIKO', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#LINGVO:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ENHAVA-LINGVO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAĜOJENNOMSPACO', 'PAGXOJENNOMSPACO', 'PAĜOJENS', 'PAGXOJENNS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBRODEADMINOJ', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'speciala', 'special' ),
+       'defaultsort'               => array( '1', 'DEFAŬLTORDIGO:', 'DEFAUXLTORDIGO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DOSIERO-VORO', 'DOSIERVOJO', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'marko', 'etikedo', 'tag' ),
+       'hiddencat'                 => array( '1', '__KK__', '__KAŜITAKATEGORIO__', '__KASXITAKATEGORIO__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAĜOJENKATEGORIO', 'PAGXOJENKATEGORIO', 'PAĜOJENKAT', 'PAGXOJENKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAĜOPEZO', 'PAGXOPEZO', 'PEZODEPAĜO', 'PEZODEPAGXO', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKSU__', '__INDEKSI__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NEINDEKSU__', '__NIU__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__STATIKAALIDIREKTO__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'PROTEKTONIVELO', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'VOJO', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VIKIO', 'WIKI' ),
+       'url_query'                 => array( '0', 'INFORMPETO', 'QUERY' ),
 );
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
@@ -630,12 +630,12 @@ Listo de validaj specialaj paĝoj estas trovebla ĉe [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Eraro',
 'databaseerror' => 'Datumbaza eraro',
-'dberrortext' => 'Sintakseraro okazis dum informpeto al la datumaro.
-Ĝi eble indikas cimon en la programaro.
+'dberrortext' => 'Sintakseraro okazis dum informpeto al la datenbazo.
+Ĝi eble indikas misaĵeton en la programaro.
 Jen la plej laste provita informpeto:
-<blockquote><tt>$1</tt></blockquote>
-el la funkcio "<tt>$2</tt>".
-MySQL liveris eraron "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+el la funkcio "<code>$2</code>".
+La datenbazo liveris eraron "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Sintaksa eraro de la datumbaza informmendo okazis.
 La lasta provita datumbaza informmendo estis:
 "$1"
@@ -722,7 +722,7 @@ La administranto kiu ŝlosis ĝin proponis tiun klarigon: "$3".',
 # Login and logout pages
 'logouttext' => "'''Vi nun estas elsalutita.'''
 
-Vi rajtas daŭre vikiumi sennome, aŭ vi povas [[Special:UserLogin|reensaluti]] kiel la sama aŭ kiel alia uzanto.
+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.
@@ -989,12 +989,10 @@ Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'userpage-userdoesnotexist-view' => 'Uzanto-konto "$1" ne estas registrita.',
 'blocked-notice-logextract' => 'Ĉi tiu uzanto estas ĉi-momente forbarita.
 La lasta protokolero estas jene montrata por via referenco:',
-'clearyourcache' => "'''Notu:''' Post konservado vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn. 
-* '''Firefox / Safari:''' Premu majuskligan klavon klakante ''Reŝarĝi'', aŭ premu ''Stir-F5'', aŭ premu ''Stir-R'' aŭ ''⌘-R'' kun Makintoŝo
-* '''Google Chrome:''' Premu ''Stir-majuskligklavon'' aŭ ⌘-Majuskligklavo-R'' kun Makintoŝo
+'clearyourcache' => "Notu:''' Post konservado, vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn. 
+* '''Firefox / Safari:''' Premu majuskligan klavon klakante ''Reŝarĝi'', aŭ premu aŭ ''Stir-F5'' aŭ ''Stir-R'' (''⌘-R'' kun Makintoŝo)
+* '''Google Chrome:''' Premu ''Stir-majuskligklavon-R'' (''⌘-Majuskligklavo-R'' kun Makintoŝo)
 * '''Interreta Esplorilo''': Premu ''Stir'' klakante ''Refreŝu'', aŭ premu ''Stir-F5'' 
-* '''Safari:''' ''Cmd-R''
-* '''Konqueror:''' Klaku ''Reŝarĝu'' aŭ premu ''F5''
 * '''Opera:''' Nuligi la kaŝmemoro en ''Iloj → Preferoj''",
 'usercssyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigardi\" por provi vian novan CSS-kodon antaŭ konservado.",
 'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigard\" por provi vian novan JS-kodon antaŭ konservado.",
@@ -1346,8 +1344,6 @@ Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'search-interwiki-caption' => 'Kunprojektoj',
 'search-interwiki-default' => '$1 rezultoj:',
 'search-interwiki-more' => '(plu)',
-'search-mwsuggest-enabled' => 'kun sugestoj',
-'search-mwsuggest-disabled' => 'sen sugestoj',
 'search-relatedarticle' => 'Relataj',
 'mwsuggest-disable' => 'Malŝalti AJAX-sugestojn',
 'searcheverything-enable' => 'Traserĉi ĉiujn nomspacojn',
@@ -1988,6 +1984,7 @@ Eble vi volas redakti la priskribon ĉe ties [$2 dosier-priskriba paĝo].',
 'uploadnewversion-linktext' => 'Alŝuti novan version de ĉi tiu dosiero',
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'komuna dosierujo',
+'upload-disallowed-here' => 'Bedaŭrinde, vi ne povas superskribi ĉi tiun bildon.',
 
 # File reversion
 'filerevert' => 'Restarigi $1',
@@ -2270,6 +2267,8 @@ Estas [[{{MediaWiki:Listgrouprights-helppage}}|aldona informo]] pri individuaj r
 'mailnologin' => 'Neniu alsendota adreso',
 'mailnologintext' => 'Vi nepre estu [[Special:UserLogin|salutanta]] kaj havanta validan retpoŝtadreson en viaj [[Special:Preferences|preferoj]] por retpoŝti al aliaj uzantoj.',
 'emailuser' => 'Retpoŝti ĉi tiun uzanton',
+'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.
 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.',
@@ -2953,7 +2952,6 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # JavaScriptTest
 'javascripttest' => 'Ĝavoskripta testado',
-'javascripttest-disabled' => 'Ĉi tiu funkcio estas malŝaltita en ĉi tiu vikio.',
 'javascripttest-title' => 'Irigante $1 testoj',
 'javascripttest-pagetext-noframework' => 'Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Nekonta test-framo "$1".',
@@ -3093,11 +3091,18 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # Info page
 'pageinfo-title' => 'Informoj por "$1"',
-'pageinfo-header-edits' => 'Redaktoj',
+'pageinfo-header-basic' => 'Baza informo',
+'pageinfo-header-edits' => 'Historio de redaktoj',
+'pageinfo-article-id' => 'Paĝa identigo',
+'pageinfo-robot-index' => 'Indeksebla',
+'pageinfo-robot-noindex' => 'Ne indeksebla',
 'pageinfo-views' => 'Nombro de rigardoj',
-'pageinfo-watchers' => 'Nombro de atentantoj',
-'pageinfo-edits' => 'Nombro de redaktoj',
-'pageinfo-authors' => 'Nombro de distingaj aŭtoroj',
+'pageinfo-watchers' => 'Nombro de paĝatentantoj',
+'pageinfo-lastuser' => 'Lasta redaktoro',
+'pageinfo-lasttime' => 'Dato de lasta redakto',
+'pageinfo-edits' => 'Tuta nombro de redaktoj',
+'pageinfo-authors' => 'Tuta nombro de malsamaj aŭtoroj',
+'pageinfo-recent-authors' => 'Lasta nombro de malsamaj aŭtoroj',
 
 # Skin names
 'skinname-standard' => 'Klasiko',
@@ -3943,6 +3948,10 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'feedback-bugcheck' => 'Bonega! Nur konfirmu ke ĝi ne jam ekzistas inter la [$1 konataj cimoj].',
 'feedback-bugnew' => 'Mi konfirmis. Raportu novan cimon.',
 
+# Search suggestions
+'searchsuggest-search' => 'Serĉi',
+'searchsuggest-containing' => 'enhavas...',
+
 # API errors
 'api-error-badaccess-groups' => 'Vi ne havas permeson alŝuti dosierojn al tiu ĉi vikio.',
 'api-error-badtoken' => 'Interna eraro: fuŝaĵo.',
index e93f9d0..29fe179 100644 (file)
@@ -70,6 +70,7 @@
  * @author Richard Wolf VI
  * @author Sanbec
  * @author Savh
+ * @author Shirayuki
  * @author Spacebirdy
  * @author Technorum
  * @author The Evil IP address
@@ -79,6 +80,7 @@
  * @author Urhixidur
  * @author VegaDark
  * @author Vivaelcelta
+ * @author Waldir
  * @author Wilfredor
  * @author XalD
  * @author XanaG
@@ -130,7 +132,7 @@ $specialPageAliases = array(
        'ChangeEmail'               => array( 'CambiarEmail', 'CambiarCorreo' ),
        'ChangePassword'            => array( 'Cambiar_contraseña', 'CambiarContraseña', 'ResetearContraseña', 'Resetear_contraseña' ),
        'ComparePages'              => array( 'CompararPáginas' ),
-       'Confirmemail'              => array( 'ConfirmarEmail', 'Confirmar_e-mail' ),
+       'Confirmemail'              => array( 'ConfirmarEmail', 'Confirmar_correo_electrónico' ),
        'Contributions'             => array( 'Contribuciones' ),
        'CreateAccount'             => array( 'Crear_una_cuenta', 'CrearCuenta' ),
        'Deadendpages'              => array( 'PáginasSinSalida', 'Páginas_sin_salida' ),
@@ -144,7 +146,7 @@ $specialPageAliases = array(
        'FileDuplicateSearch'       => array( 'BuscarArchivosDuplicados', 'Buscar_archivos_duplicados' ),
        'Filepath'                  => array( 'RutaDeArchivo', 'Ruta_de_archivo' ),
        'Import'                    => array( 'Importar' ),
-       'Invalidateemail'           => array( 'InvalidarEmail', 'Invalidar_e-mail' ),
+       'Invalidateemail'           => array( 'InvalidarEmail', 'Invalidar_correo_electrónico' ),
        'BlockList'                 => array( 'UsuariosBloqueados', 'Lista_de_usuarios_bloqueados' ),
        'LinkSearch'                => array( 'BúsquedaDeEnlaces', 'Búsqueda_de_enlaces' ),
        'Listadmins'                => array( 'ListaDeAdministradores', 'Lista_de_administradores' ),
@@ -173,6 +175,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'NuevasImágenes', 'Nuevas_imágenes' ),
        'Newpages'                  => array( 'PáginasNuevas', 'Páginas_nuevas' ),
        'PasswordReset'             => array( 'RestablecerContraseña' ),
+       'PermanentLink'             => array( 'EnlacePermanente' ),
        'Popularpages'              => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ),
@@ -215,125 +218,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NOTDC__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MESLOCALCOMPLETO', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'AÑOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACIODENOMBRE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'img_thumbnail'           => array( '1', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'derecha', 'dcha', 'der', 'right' ),
-       'img_left'                => array( '1', 'izquierda', 'izda', 'izq', 'left' ),
-       'img_none'                => array( '1', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
-       'img_center'              => array( '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'borde', 'border' ),
-       'img_link'                => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
-       'ns'                      => array( '0', 'EN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCAL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'RUTAESTILO', 'RUTADEESTILO', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAACTUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'MINÚS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAYUS:', 'MAYÚS:', 'UC:' ),
-       'displaytitle'            => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__VINCULARANUEVASECCION__', 'VÍNCULARANUEVASECCIÓN__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NOVINCULARANUEVASECCION__', 'NOVÍNCULARANUEVASECCIÓN__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICARURL:', 'URLENCODE:' ),
-       'currenttimestamp'        => array( '1', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'NÚMEROADMINIISTRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENAR:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiqueta', 'ETIQUETA', 'tag' ),
-       'hiddencat'               => array( '1', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SIN_TDC__', '__NOTDC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SIN_GALERÍA__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORZAR_TDC__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NO_EDITAR_SECCIÓN__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SIN_TÍTULO__', '__SINTÍTULO__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MESLOCALCOMPLETO', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'AÑOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACIODENOMBRE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NÚMERODELESPACIO', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'subst'                     => array( '0', 'SUST:', 'FIJAR:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'derecha', 'dcha', 'der', 'right' ),
+       'img_left'                  => array( '1', 'izquierda', 'izda', 'izq', 'left' ),
+       'img_none'                  => array( '1', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
+       'img_center'                => array( '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'borde', 'border' ),
+       'img_link'                  => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
+       'ns'                        => array( '0', 'EN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCAL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'RUTAESTILO', 'RUTADEESTILO', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAACTUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'URLCANONICA:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'URLCANONICAC:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'MINÚS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAYUS:', 'MAYÚS:', 'UC:' ),
+       'raw'                       => array( '0', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
+       'displaytitle'              => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'SF', 'R' ),
+       'newsectionlink'            => array( '1', '__VINCULARANUEVASECCION__', 'VÍNCULARANUEVASECCIÓN__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NOVINCULARANUEVASECCION__', 'NOVÍNCULARANUEVASECCIÓN__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICARURL:', 'URLENCODE:' ),
+       'currenttimestamp'          => array( '1', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PÁGINASENESPACIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NÚMEROADMINIISTRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENAR:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiqueta', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
 );
 
 $datePreferences = false;
@@ -382,7 +392,7 @@ $messages = array(
 'tog-externaldiff' => 'Utilizar diff externo por defecto (sólo para expertos, pues necesitas ajustes especiales en tu ordenador; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
 'tog-showjumplinks' => 'Habilitar enlaces de accesibilidad «saltar a»',
 'tog-uselivepreview' => 'Usar live preview (JavaScript) (Experimental)',
-'tog-forceeditsummary' => 'Alertar al grabar sin resumen de edición.',
+'tog-forceeditsummary' => 'Avisar cuando grabe la página sin introducir un resumen de edición',
 'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
 'tog-watchlisthidebots' => 'Ocultar ediciones de bots en la lista de seguimiento',
 'tog-watchlisthideminor' => 'Ocultar ediciones menores en la lista de seguimiento',
@@ -506,7 +516,7 @@ $messages = array(
 'vector-action-protect' => 'Proteger',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar protección',
-'vector-simplesearch-preference' => 'Activar sugerencias de búsqueda mejoradas (piel Vector solamente)',
+'vector-simplesearch-preference' => 'Activar la barra de búsqueda simplificada (sólo con la apariencia Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver historial',
@@ -563,7 +573,7 @@ $messages = array(
 'categorypage' => 'Ver página de categoría',
 'viewtalkpage' => 'Ver discusión',
 'otherlanguages' => 'Otros idiomas',
-'redirectedfrom' => '(Redirigido desde $1)',
+'redirectedfrom' => '(Redirigido desde «$1»)',
 'redirectpagesub' => 'Página redirigida',
 '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}}.',
@@ -601,7 +611,7 @@ $1',
 'privacypage' => 'Project:Política de protección de datos',
 
 'badaccess' => 'Error de permisos',
-'badaccess-group0' => 'No tienes autorización para ejecutar la acción que ha solicitado.',
+'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',
@@ -726,8 +736,11 @@ Consulta: $2',
 'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición.',
 '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 provee texto del interfaz del software, y está protegida para evitar vandalismos.',
-'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar texto de interfaz para el software. Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios. Para traducciones, por favor considera usar [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], el proyecto de regionalización de MediaWiki.",
+'protectedinterface' => 'Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.
+Para agregar o cambiar las traducciones para todos los wikis, por favor use [//translatewiki.net/translatewiki.net], el proyecto de localización de MediaWiki.',
+'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar el texto de la interfaz para el software. 
+Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios de este wiki. 
+Para añadir o cambiar las traducciones, por favor considera usar [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
 'sqlhidden' => '(Consulta SQL oculta)',
 'cascadeprotected' => 'Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:
 $2',
@@ -752,7 +765,7 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 # Login and logout pages
 'logouttext' => "'''Ha terminado su sesión.'''
 
-Puedes continuar usando {{SITENAME}} de forma anónima, o puedes [[Special:UserLogin|iniciar sesión otra vez]] con el mismo u otro usuario.
+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! ==
 
@@ -987,10 +1000,10 @@ La razón dada es esta:
 
 Puedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.
 
-Ten en cuenta de que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.
+Ten en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.
 
 Tu actual dirección IP es $3, y el identificador del bloqueo es #$5.
-Por favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+Por favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
 'blockednoreason' => 'no se ha especificado el motivo',
 'whitelistedittext' => 'Tienes que $1 para editar artículos.',
 'confirmedittext' => 'Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].',
@@ -1014,10 +1027,11 @@ Puedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otra
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.',
 'noarticletext-nopermission' => 'Actualmente no hay texto en esta página.
-Puedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>.',
-'missing-revision' => 'La revisión # $1  de la página denominada "{{PAGENAME}}" no existe.
-!¡ N!Esto es generalmente causado al seguir un enlace de historia obsoleto a una página que se ha borrado.!¡ N!Los detalles pueden encontrarse en el [{{fullurl: {{#Special:Log}} / delete|page = {{FULLPAGENAMEE}}}} registro de borrado].',
+Puedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienes permiso para crear esta página.',
+'missing-revision' => 'La revisión #$1 de la página «{{PAGENAME}}» no existe.
+
+Esto suele deberse a seguir un enlace obsoleto hacia el historial de una página que ya ha sido borrada.
+Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].',
 'userpage-userdoesnotexist' => 'La cuenta de usuario «<nowiki>$1</nowiki>» no está registrada. Por favor comprueba si quieres crear o editar esta página.',
 'userpage-userdoesnotexist-view' => 'La cuenta de usuario «$1» no está registrada.',
 'blocked-notice-logextract' => 'Este usuario está actualmente bloqueado.
@@ -1277,17 +1291,18 @@ No tiene acceso a él.',
 'revdelete-only-restricted' => 'Error ocultando el item de fecha $2, $1: no puedes suprimir elementos de vista de los administradores sin seleccionar asímismo una de las otras opciones de visibilidad.',
 'revdelete-reason-dropdown' => '*Razones de borrado comunes
 ** Violación a los derechos de autor
-** Información personal inapropiada
+** Comentario o información personal inapropiados
+** Nombre de usuario inapropiado
 ** Información potencialmente injuriosa o calumniante',
 'revdelete-otherreason' => 'Otra/adicional razón:',
 'revdelete-reasonotherlist' => 'Otra razón',
 'revdelete-edit-reasonlist' => 'Editar razones de borrado',
-'revdelete-offender' => 'Autor de revisión:',
+'revdelete-offender' => 'Autor de la revisión:',
 
 # Suppression log
 'suppressionlog' => 'Registro de supresiones',
 'suppressionlogtext' => 'A continuación hay una lista con los borrados y bloqueos cuyo contenido se encuentra oculto para los administradores.
-Ver la [[Special:BlockList|lista de bloqueos]] que incluye las prohibiciones y bloqueos actualmente operativos.',
+Véase la [[Special:BlockList|lista de bloqueos]] que incluye las prohibiciones y bloqueos actualmente operativos.',
 
 # History merging
 'mergehistory' => 'Fusionar historiales de páginas',
@@ -1331,8 +1346,10 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'editundo' => 'deshacer',
 'diff-multi' => '(No se {{PLURAL:$1|muestra una edición intermedia realizada|muestran $1 ediciones intermedias realizadas}} por {{PLURAL:$2|un usuario|$2 usuarios}})',
 'diff-multi-manyusers' => '(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})',
-'difference-missing-revision' => '{{PLURAL:$2|Un revisión| $2  revisiones}} de esta diferencia ( $1 )  no {{PLURAL:$2| ha siado encontrada|han sido encontradas}}.
-!¡ N!Esto es generalmente causado por seguir un enlace de diffs obsoletas a una página que ha sido borrada.!¡ N!Los detalles pueden encontrarse en el [{{fullurl:{{#Special:log}} / delete|page = {{FULLPAGENAMEE}}}} registro de borrado].',
+'difference-missing-revision' => 'No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).
+
+Esto suele deberse a seguir un enlace obsoleto hacia una página que ya ha sido borrada.
+Los detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].',
 
 # Search results
 'searchresults' => 'Resultados de la búsqueda',
@@ -1375,8 +1392,6 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'search-interwiki-caption' => 'Proyectos hermanos',
 'search-interwiki-default' => 'Resultados de $1:',
 'search-interwiki-more' => '(más)',
-'search-mwsuggest-enabled' => 'con sugerencias',
-'search-mwsuggest-disabled' => 'sin sugerencias',
 'search-relatedarticle' => 'Relacionado',
 'mwsuggest-disable' => 'Desactivar AJAX al realizar búsquedas',
 'searcheverything-enable' => 'Buscar en todos los espacios de nombres',
@@ -1473,7 +1488,7 @@ Cualquiera que conozca la clave en este campo será capaz de leer tu lista de se
 'timezoneregion-indian' => 'Océano Índico',
 'timezoneregion-pacific' => 'Océano Pacífico',
 'allowemail' => 'Aceptar correo electrónico de otros usuarios',
-'prefs-searchoptions' => 'Opciones de búsqueda',
+'prefs-searchoptions' => 'Buscar',
 'prefs-namespaces' => 'Espacios de nombres',
 'defaultns' => 'Buscar en estos espacios de nombres por defecto:',
 'default' => 'por defecto',
@@ -1895,7 +1910,7 @@ $1',
 'backend-fail-internal' => 'Se ha producido un error desconocido en el servidor (backend) de almacenamiento "$1".',
 'backend-fail-contenttype' => 'No se pudo determinar el tipo de contenido del archivo a guardar en " $1 ".',
 'backend-fail-batchsize' => 'El servidor (back-end) de almacenamiento ha suministrado un lote de $1 {{PLURAL:$1|operación|operaciones}} de archivo; el límite es de $2 {{PLURAL:$2|operación|operaciones}}.',
-'backend-fail-usable' => 'No se pudo escribir el archivo $1 debido a permisos insuficientes o directorios/contenedores desaparecidos.',
+'backend-fail-usable' => 'No se pudo leer o escribir el archivo "$1" debido a permisos insuficientes o directorios/contenedores desaparecidos.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'No se pudo conectar a la base de datos del registro del sistema de almacenamiento "$1".',
@@ -2822,7 +2837,7 @@ por favor, asegúrate de entender las consecuencias del procedimiento antes de s
 
 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 de que solo la página será trasladada pero el usuario '''no''' será renombrado.",
+'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.",
 '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.',
@@ -2995,7 +3010,6 @@ No hay un directorio temporal.',
 
 # JavaScriptTest
 'javascripttest' => 'Pruebas de JavaScript',
-'javascripttest-disabled' => 'Esta función no ha sido activada en este wiki.',
 'javascripttest-title' => 'Pruebas de $1 en ejecución',
 'javascripttest-pagetext-noframework' => 'Esta página está reservada para ejecutar pruebas de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Marco de pruebas desconocido "$1".',
@@ -3162,10 +3176,10 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de ediciones recientes (en los últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recientes',
-'pageinfo-restriction' => 'Protección de la página (<code>$1</code>)',
 '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-toolboxlink' => 'Información de la página',
 
 # Skin names
 'skinname-standard' => 'Estándar',
@@ -3745,6 +3759,7 @@ Este código de confirmación caducará el $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Transclusión interwiki está deshabilitada]',
 'scarytranscludefailed' => '[Obtención de plantilla falló para $1]',
+'scarytranscludefailed-httpstatus' => '[Error de recuperación de plantilla para $1: HTTP $2]',
 'scarytranscludetoolong' => '[El URL es demasiado largo]',
 
 # Delete conflict
@@ -4024,6 +4039,10 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'feedback-bugcheck' => '¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].',
 'feedback-bugnew' => 'Lo he comprobado. Informar de un nuevo fallo.',
 
+# Search suggestions
+'searchsuggest-search' => 'Buscar',
+'searchsuggest-containing' => 'que contiene...',
+
 # API errors
 'api-error-badaccess-groups' => 'No puedes cargar archivos en este wiki.',
 'api-error-badtoken' => 'Error interno: Símbolo incorrecto.',
index edc9ffd..9be5c96 100644 (file)
@@ -17,6 +17,7 @@
  * @author KalmerE.
  * @author Ker
  * @author Kyng
+ * @author Morel
  * @author Oop
  * @author Pikne
  * @author Silvar
@@ -105,6 +106,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Uued_failid' ),
        'Newpages'                  => array( 'Uued_leheküljed' ),
        'PasswordReset'             => array( 'Parooli_lähtestamine' ),
+       'PermanentLink'             => array( 'Püsilink' ),
        'Popularpages'              => array( 'Loetumad_leheküljed' ),
        'Preferences'               => array( 'Eelistused' ),
        'Prefixindex'               => array( 'Kõik_pealkirjad_eesliitega' ),
@@ -158,99 +160,99 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#suuna', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SISUKORRATA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERIITA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__SISUKORDEES__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SISUKORD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ALAOSALINGITA__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'HETKEKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HETKEKUU1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HETKEKUUNIMETUS', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'HETKEKUUPÄEV', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HETKEKUUPÄEV2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HETKENÄDALAPÄEV', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HETKEAASTA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HETKEAEG', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HETKETUND', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'KOHALIKKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'KOHALIKKUU1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'KOHALIKKUUNIMETUS', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'KOHALIKKUUPÄEV', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'KOHALIKKUUPÄEV2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'KOHALIKNÄDALAPÄEV', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'KOHALIKAASTA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'KOHALIKAEG', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'KOHALIKTUND', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'LEHEMÄÄR', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKLIMÄÄR', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAILIMÄÄR', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'KASUTAJAMÄÄR', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'TEGUSKASUTAJAMÄÄR', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'REDIGEERIMISMÄÄR', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'VAATAMISTEARV', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'LEHEKÜLJENIMI', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'LEHEKÜLJENIMI1', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NIMERUUM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NIMERUUM1', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ARUTELUNIMERUUM', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ARUTELUNIMERUUM1', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SISUNIMERUUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SISUNIMERUUM1', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'KOGULEHEKÜLJENIMI', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KOGULEHEKÜLJENIMI1', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALAMLEHEKÜLJENIMI', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALAMLEHEKÜLJENIMI1', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NIMERUUMITANIMI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NIMERUUMITANIMI1', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ARUTELUNIMI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ARUTELUNIMI1', 'TALKPAGENAMEE' ),
-       'subst'                   => array( '0', 'ASENDA:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'pisi', 'pisipilt', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'pisi=$1', 'pisipilt=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'paremal', 'right' ),
-       'img_left'                => array( '1', 'vasakul', 'left' ),
-       'img_none'                => array( '1', 'tühi', 'none' ),
-       'img_center'              => array( '1', 'keskel', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'raam', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'raamita', 'frameless' ),
-       'img_page'                => array( '1', 'lehekülg=$1', 'lehekülg_$1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'ääris', 'border' ),
-       'sitename'                => array( '1', 'KOHANIMI', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'nse'                     => array( '0', 'NR1:', 'NSE:' ),
-       'localurl'                => array( '0', 'KOHALIKURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'KOHALIKURL1', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERINIMI', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'SUGU:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'HETKENÄDAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HETKENÄDALAPÄEV1', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'KOHALIKNÄDAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'KOHALIKNÄDALAPÄEV1', 'LOCALDOW' ),
-       'fullurl'                 => array( '0', 'KOGUURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'KOGUURL1:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ESIVT:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ESIST:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'VT:', 'LC:' ),
-       'uc'                      => array( '0', 'ST:', 'UC:' ),
-       'displaytitle'            => array( '1', 'PEALKIRI', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__UUEALAOSALINK__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__UUEALAOSALINGITA__', '__NONEWSECTIONLINK__' ),
-       'currenttimestamp'        => array( '1', 'HETKEAJATEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'KOHALIKAJATEMPEL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#KEEL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'VAIKEKEEL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'LEHEKÜLGINIMERUUMIS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ÜLEMAMÄÄR', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ARVUVORMINDUS', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'JÄRJESTA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__PEIDETUDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'LEHEKÜLGIKATEGOORIAS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'index'                   => array( '1', 'INDEKSIGA', '__INDEX__' ),
-       'noindex'                 => array( '1', 'INDEKSITA', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'KASUTAJAIDRÜHMAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'protectionlevel'         => array( '1', 'KAITSETASE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'kuupäevavormindus', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#suuna', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SISUKORRATA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERIITA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__SISUKORDEES__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SISUKORD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ALAOSALINGITA__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'HETKEKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HETKEKUU1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HETKEKUUNIMETUS', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'HETKEKUUPÄEV', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HETKEKUUPÄEV2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HETKENÄDALAPÄEV', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HETKEAASTA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HETKEAEG', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HETKETUND', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'KOHALIKKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'KOHALIKKUU1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'KOHALIKKUUNIMETUS', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'KOHALIKKUUPÄEV', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'KOHALIKKUUPÄEV2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'KOHALIKNÄDALAPÄEV', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'KOHALIKAASTA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'KOHALIKAEG', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'KOHALIKTUND', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'LEHEMÄÄR', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKLIMÄÄR', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAILIMÄÄR', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'KASUTAJAMÄÄR', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'TEGUSKASUTAJAMÄÄR', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'REDIGEERIMISMÄÄR', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'VAATAMISTEARV', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'LEHEKÜLJENIMI', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'LEHEKÜLJENIMI1', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NIMERUUM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NIMERUUM1', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ARUTELUNIMERUUM', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ARUTELUNIMERUUM1', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SISUNIMERUUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SISUNIMERUUM1', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'KOGULEHEKÜLJENIMI', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KOGULEHEKÜLJENIMI1', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALAMLEHEKÜLJENIMI', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALAMLEHEKÜLJENIMI1', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NIMERUUMITANIMI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NIMERUUMITANIMI1', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ARUTELUNIMI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ARUTELUNIMI1', 'TALKPAGENAMEE' ),
+       'subst'                     => array( '0', 'ASENDA:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'pisi', 'pisipilt', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'pisi=$1', 'pisipilt=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'paremal', 'right' ),
+       'img_left'                  => array( '1', 'vasakul', 'left' ),
+       'img_none'                  => array( '1', 'tühi', 'none' ),
+       'img_center'                => array( '1', 'keskel', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'raam', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'raamita', 'frameless' ),
+       'img_page'                  => array( '1', 'lehekülg=$1', 'lehekülg_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'ääris', 'border' ),
+       'sitename'                  => array( '1', 'KOHANIMI', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'nse'                       => array( '0', 'NR1:', 'NSE:' ),
+       'localurl'                  => array( '0', 'KOHALIKURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'KOHALIKURL1', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERINIMI', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'SUGU:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'HETKENÄDAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HETKENÄDALAPÄEV1', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'KOHALIKNÄDAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'KOHALIKNÄDALAPÄEV1', 'LOCALDOW' ),
+       'fullurl'                   => array( '0', 'KOGUURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'KOGUURL1:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ESIVT:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ESIST:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'VT:', 'LC:' ),
+       'uc'                        => array( '0', 'ST:', 'UC:' ),
+       'displaytitle'              => array( '1', 'PEALKIRI', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__UUEALAOSALINK__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__UUEALAOSALINGITA__', '__NONEWSECTIONLINK__' ),
+       'currenttimestamp'          => array( '1', 'HETKEAJATEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'KOHALIKAJATEMPEL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#KEEL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'VAIKEKEEL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'LEHEKÜLGINIMERUUMIS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ÜLEMAMÄÄR', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ARVUVORMINDUS', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'JÄRJESTA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__PEIDETUDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'LEHEKÜLGIKATEGOORIAS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'index'                     => array( '1', 'INDEKSIGA', '__INDEX__' ),
+       'noindex'                   => array( '1', 'INDEKSITA', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'KASUTAJAIDRÜHMAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'protectionlevel'           => array( '1', 'KAITSETASE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'kuupäevavormindus', 'formatdate', 'dateformat' ),
 );
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
@@ -289,16 +291,16 @@ $dateFormats = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Lingid alla kriipsutada',
+'tog-underline' => 'Linkide allakriipsutus:',
 'tog-justify' => 'Lõikude rööpjoondus',
 'tog-hideminor' => 'Peida pisiparandused viimastes muudatustes',
-'tog-hidepatrolled' => 'Peida viimaste muudatuste loetelus jälgimisloendis esitatavad muudatused',
+'tog-hidepatrolled' => 'Peida kontrollitud redaktsioonid viimastes muudatustes',
 'tog-newpageshidepatrolled' => 'Peida uute lehtede loendis kontrollitud leheküljed',
 'tog-extendwatchlist' => 'Laienda jälgimisloendit, et näha kõiki muudatusi, mitte vaid kõige värskemaid',
 'tog-usenewrc' => 'Rühmita viimased muudatused ja muudatused jälgimisloendis lehekülje järgi (vaja JavaScripti)',
 'tog-numberheadings' => 'Pealkirjade automaatnummerdus',
-'tog-showtoolbar' => 'Redigeerimise tööriistariba näitamine',
-'tog-editondblclick' => 'Artiklite redigeerimine topeltklõpsu peale (JavaScript)',
+'tog-showtoolbar' => 'Näita redigeerimise tööriistariba (vaja JavaScripti)',
+'tog-editondblclick' => 'Redigeeri lehekülgi topeltklõpsu peale (vaja JavaScripti)',
 'tog-editsection' => 'Näita alaosade redigeerimise linke',
 'tog-editsectiononrightclick' => 'Alusta alaosa redigeerimist paremklõpsuga alaosa pealkirjal (vaja JavaScripti)',
 'tog-showtoc' => 'Näita sisukorda (lehtedel, millel on rohkem kui 3 pealkirja)',
@@ -445,7 +447,7 @@ $messages = array(
 'vector-action-protect' => 'Kaitse',
 'vector-action-undelete' => 'Taasta',
 'vector-action-unprotect' => 'Muuda kaitset',
-'vector-simplesearch-preference' => 'Luba täiustatud otsinguvihjed (ainult Vektori-kujunduses)',
+'vector-simplesearch-preference' => 'Kasuta lihtsustatud otsiriba (ainult Vektori-kujunduses)',
 'vector-view-create' => 'Loo',
 'vector-view-edit' => 'Redigeeri',
 'vector-view-history' => 'Näita ajalugu',
@@ -493,14 +495,14 @@ $messages = array(
 'talk' => 'Arutelu',
 'views' => 'vaatamisi',
 'toolbox' => 'Tööriistad',
-'userpage' => 'Kasutajalehekülg',
+'userpage' => 'Vaata kasutajalehekülge',
 'projectpage' => 'Vaata projektilehekülge',
 'imagepage' => 'Vaata faililehekülge',
 'mediawikipage' => 'Vaata sõnumi lehekülge',
-'templatepage' => 'Mallilehekülg',
+'templatepage' => 'Vaata malli lehekülge',
 'viewhelppage' => 'Vaata abilehekülge',
-'categorypage' => 'Kategoorialehekülg',
-'viewtalkpage' => 'Arutelulehekülg',
+'categorypage' => 'Vaata kategooria lehekülge',
+'viewtalkpage' => 'Vaata arutelulehekülge',
 'otherlanguages' => 'Teistes keeltes',
 'redirectedfrom' => '(Ümber suunatud leheküljelt $1)',
 'redirectpagesub' => 'Ümbersuunamisleht',
@@ -666,8 +668,11 @@ Palun proovi mõne minuti pärast uuesti.',
 'protectedpagetext' => 'See lehekülg on lukustatud, et muudatusi ei tehtaks.',
 '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 tarkvara kasutajaliidese tekst. Kuritahtliku muutmise vältimiseks on lehekülg lukustatud.',
-'editinginterface' => "'''Hoiatus:''' Redigeerid tarkvara kasutajaliidese tekstiga lehekülge. Muudatused siin mõjutavad kõikide kasutajate kasutajaliidest. Tõlkijad, palun kaaluge MediaWiki lokaliseerimisprojekti [//translatewiki.net/wiki/Main_Page?setlang=et translatewiki.net] kasutamist.",
+'protectedinterface' => 'Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.
+Et lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].',
+'editinginterface' => "'''Hoiatus:''' Redigeerid tarkvara kasutajaliidese tekstiga lehekülge.
+Muudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.
+Et lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL päring peidetud)',
 'cascadeprotected' => 'See lehekülg on muutmise eest kaitstud, sest see on osa {{PLURAL:$1|järgmisest leheküljest|järgmistest lehekülgedest}}, mis on kaskaadkaitse all:
 $2',
@@ -692,7 +697,7 @@ Administraator lukustas selle järgmisel põhjusel: "$3".',
 # Login and logout pages
 'logouttext' => "'''Oled nüüd välja loginud.'''
 
-Võid jätkata {{GRAMMAR:genitive|{{SITENAME}}}} kasutamist anonüümselt, aga ka sama või mõne teise kasutajana uuesti [[Special:UserLogin|sisse logida]].
+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! ==
 
@@ -720,7 +725,7 @@ Sinu konto on loodud.
 'gotaccount' => "Kui sul on juba konto, '''$1'''.",
 'gotaccountlink' => 'logi sisse',
 'userlogin-resetlink' => 'Kas oled unustanud oma sisselogimisandmed?',
-'createaccountmail' => 'e-posti teel',
+'createaccountmail' => 'E-posti teel',
 'createaccountreason' => 'Põhjus:',
 'badretype' => 'Sisestatud paroolid ei lange kokku.',
 'userexists' => 'Sisestatud kasutajanimi on juba kasutusel.
@@ -938,9 +943,8 @@ Kui sattusid siia kogemata, klõpsa võrgulehitseja ''tagasi''-nupule.",
 'noarticletext' => 'Käesoleval leheküljel hetkel teksti ei ole.
 Võid [[Special:Search/{{PAGENAME}}|otsida pealkirjaks olevat fraasi]] teistelt lehtedelt,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} uurida asjassepuutuvaid logisid] või [{{fullurl:{{FULLPAGENAME}}|action=edit}} puuduva lehekülje ise luua]</span>.',
-'noarticletext-nopermission' => 'Sellel leheküljel ei ole teksti.
-Sa võid [[Special:Search/{{PAGENAME}}|otsida lehekülje nime]] teistelt lehekülgedelt
-või <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} otsida lehekülje nime logidest]</span>.',
+'noarticletext-nopermission' => 'Sellel leheküljel pole praegu teksti.
+Saad [[Special:Search/{{PAGENAME}}|otsida selle lehekülje pealkirja]] teistelt lehekülgedelt või <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} otsida seonduvatest logidest]</span>, aga sul pole õigust seda lehekülge alustada.',
 'missing-revision' => 'Lehekülje "{{PAGENAME}}" redaktsiooni $1 pole.
 
 Harilikult tähendab see seda, et sind siia juhatanud link on vananenud ja siin asunud lehekülg on kustutatud.
@@ -1193,9 +1197,11 @@ Sul ei ole sellele ligipääsu.',
 'revdelete-concurrent-change' => 'Tõrge üksuse kuupäevaga $2, kell $1 muutmisel: paistab, et keegi teine on selle olekut sel ajal muutnud, kui sina seda muuta üritasid.
 Palun vaata logisid.',
 'revdelete-only-restricted' => 'Ei õnnestu varjata üksust seisuga $1, kell $2: Seda üksust ei saa administraatorite eest varjata, valimata seejuures ka ühte muudest nähtavussuvanditest.',
-'revdelete-reason-dropdown' => '*Tavalised kustutamise põhjused
+'revdelete-reason-dropdown' => '*Peamised kustutamise põhjused
 ** Autoriõiguste rikkumine
-** Kohatud eraelulised andmed',
+** Kohatu märkus või isiklik info
+** Kohatu kasutajanimi
+** Potentsiaalne halvustav informatsioon',
 'revdelete-otherreason' => 'Muu või täiendav põhjus:',
 'revdelete-reasonotherlist' => 'Muu põhjus',
 'revdelete-edit-reasonlist' => 'Redigeeri kustutamise põhjuseid',
@@ -1294,8 +1300,6 @@ Harilikult tähendab see seda, et sind siia juhatanud link on vananenud ja siin
 'search-interwiki-caption' => 'Sõsarprojektid',
 'search-interwiki-default' => '$1 tulemused:',
 'search-interwiki-more' => '(veel)',
-'search-mwsuggest-enabled' => 'ettepanekutega',
-'search-mwsuggest-disabled' => 'ettepanekuid ei ole',
 'search-relatedarticle' => 'Seotud',
 'mwsuggest-disable' => 'Ära näita otsinguvihjeid',
 'searcheverything-enable' => 'Otsi kõigist nimeruumidest',
@@ -1807,7 +1811,7 @@ Kui probleem ei kao, võta ühendust [[Special:ListUsers/sysop|administraatoriga
 'backend-fail-create' => 'Faili $1 ei saa kirjutada.',
 'backend-fail-maxsize' => 'Faili $1 ei saa kirjutada, sest see on {{PLURAL:$2|ühest baidist|$2 baidist}} suurem.',
 'backend-fail-contenttype' => 'Faili, mida soovitakse talletada asukohas "$1", sisutüüpi saanud kindlaks teha.',
-'backend-fail-usable' => 'Faili $1 ei saa ebapiisavate õiguste või puuduvate kataloogide/konteinerite tõttu kirjutada.',
+'backend-fail-usable' => 'Faili $1 ei saa ebapiisavate õiguste või puuduvate kataloogide/konteinerite tõttu lugeda ega kirjutada.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Rada "$1" ei saa lukust lahti teha, sest see pole lukus.',
@@ -2820,8 +2824,8 @@ Viimasel juhul saab kasutada ka linki, näiteks lehekülje "[[{{MediaWiki:Mainpa
 'allmessagesname' => 'Nimi',
 'allmessagesdefault' => 'Vaikimisi tekst',
 'allmessagescurrent' => 'Praegune tekst',
-'allmessagestext' => 'See on loend kõikidest kättesaadavatest süsteemi sõnumitest MediaWiki: nimeruumis.
-Kui soovid MediaWiki tarkvara tõlkimises osaleda siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
+'allmessagestext' => 'See on loend kõikidest olemasolevatest süsteemisõnumitest MediaWiki nimeruumis.
+Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Seda lehekülge ei saa kasutada, sest '''\$wgUseDatabaseMessages''' ei tööta.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Muutmisoleku filter:',
@@ -2908,7 +2912,6 @@ Palun ürita uuesti.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScripti katsetamine',
-'javascripttest-disabled' => 'See funktsioon pole selles vikis lubatud.',
 'javascripttest-title' => '$1-katse käitus',
 'javascripttest-pagetext-noframework' => 'Seda lehekülge hoitakse JavaScripti katsete jaoks.',
 'javascripttest-pagetext-unknownframework' => 'Tundmatu katseraamistik "$1".',
@@ -3046,7 +3049,6 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-authors' => 'Erinevate autorite koguarv',
 'pageinfo-recent-edits' => 'Viimaste redigeerimiste arv (viimase $1 jooksul)',
 'pageinfo-recent-authors' => 'Erinevate viimaste toimetajate arv',
-'pageinfo-restriction' => 'Lehekülje kaitse (<code>$1</code>)',
 '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)',
@@ -3412,8 +3414,8 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 
 'exif-filesource-3' => 'Digitaalne fotokaamera',
 
-'exif-customrendered-0' => 'Normaalne protsess',
-'exif-customrendered-1' => 'Kohandatud protsess',
+'exif-customrendered-0' => 'Tavatöötlus',
+'exif-customrendered-1' => 'Kohandatud töötlus',
 
 'exif-exposuremode-0' => 'Automaatne säritus',
 'exif-exposuremode-1' => 'Manuaalne säritus',
@@ -3434,16 +3436,16 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-gaincontrol-4' => 'Vähene',
 
 'exif-contrast-0' => 'Normaalne',
-'exif-contrast-1' => 'Pehme',
-'exif-contrast-2' => 'Kõva',
+'exif-contrast-1' => 'Nõrk',
+'exif-contrast-2' => 'Tugev',
 
 'exif-saturation-0' => 'Normaalne',
 'exif-saturation-1' => 'Madal värviküllastus',
 'exif-saturation-2' => 'Kõrge värviküllastus',
 
 'exif-sharpness-0' => 'Normaalne',
-'exif-sharpness-1' => 'Pehme',
-'exif-sharpness-2' => 'Kõva',
+'exif-sharpness-1' => 'Nõrk',
+'exif-sharpness-2' => 'Tugev',
 
 'exif-subjectdistancerange-0' => 'Teadmata',
 'exif-subjectdistancerange-1' => 'Makro',
@@ -3868,6 +3870,10 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'feedback-bugcheck' => 'Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].',
 'feedback-bugnew' => 'Kontrollisin. Teata uuest veast',
 
+# Search suggestions
+'searchsuggest-search' => 'Otsi',
+'searchsuggest-containing' => 'sisalduv...',
+
 # API errors
 'api-error-badaccess-groups' => 'Sul pole selles vikis üleslaadimisõigust.',
 'api-error-badtoken' => 'Sisemine tõrge: Sobimatu nimi.',
index 84836f3..69c3cc6 100644 (file)
@@ -104,22 +104,22 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#BIRZUZENDU', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'ORAINGOHILABETE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ORAINGOHILABETEIZEN', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ORAINGOEGUN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ORAINGOEGUN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ORAINGOEGUNIZEN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ORAINGOURTE', 'CURRENTYEAR' ),
-       'numberofpages'           => array( '1', 'ORRIALDEKOPURU', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKULUKOPURU', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FITXATEGIKOPURU', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'LANKIDEKOPURU', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ALDAKETAKOPURU', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ORRIALDEIZEN', 'PAGENAME' ),
-       'img_right'               => array( '1', 'eskuinera', 'right' ),
-       'img_left'                => array( '1', 'ezkerrera', 'left' ),
-       'img_center'              => array( '1', 'erdian', 'center', 'centre' ),
+       'redirect'                  => array( '0', '#BIRZUZENDU', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'ORAINGOHILABETE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ORAINGOHILABETEIZEN', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ORAINGOEGUN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ORAINGOEGUN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ORAINGOEGUNIZEN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ORAINGOURTE', 'CURRENTYEAR' ),
+       'numberofpages'             => array( '1', 'ORRIALDEKOPURU', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKULUKOPURU', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FITXATEGIKOPURU', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'LANKIDEKOPURU', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ALDAKETAKOPURU', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ORRIALDEIZEN', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'eskuinera', 'right' ),
+       'img_left'                  => array( '1', 'ezkerrera', 'left' ),
+       'img_center'                => array( '1', 'erdian', 'center', 'centre' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' ); /* Bug 15717 */
@@ -132,7 +132,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ezkutatu patruilatutako aldaketa azken aldaketetan',
 'tog-newpageshidepatrolled' => 'Ezkutatu patruilatutako orriak, orri-zerrenda berritik',
 'tog-extendwatchlist' => 'Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak',
-'tog-usenewrc' => 'Hobetutako azken aldaketak (JavaScript behar da)',
+'tog-usenewrc' => 'Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu (JavaScript behar da)',
 'tog-numberheadings' => 'Goiburukoak automatikoki zenbakitu',
 'tog-showtoolbar' => 'Aldaketen tresna-barra erakutsi (JavaScript)',
 'tog-editondblclick' => 'Klik bikoitzaren bitartez orrialdeak aldatu (JavaScript)',
@@ -140,17 +140,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Atalen izenburuetan klik eginez atala<br />aldatzea gaitu (JavaScript)',
 'tog-showtoc' => 'Edukien taula erakutsi (3 goiburukotik gorako orrialdeentzako)',
 'tog-rememberpassword' => 'Nire saioa ordenagailu honetan gorde ({{PLURAL:$1|egun baterako| $1 egunerako}} gehienez)',
-'tog-watchcreations' => 'Sortzen ditudan orrialdeak nire segimendu zerrendara gehitu',
-'tog-watchdefault' => 'Aldatzen ditudan orrialdeak nire segimendu zerrendara gehitu',
-'tog-watchmoves' => 'Izena aldatutako orrialdeak segimendu zerrendan erakutsi',
-'tog-watchdeletion' => 'Ezabatzen ditudan orrialdeak nire segimendu zerrendara gehitu',
+'tog-watchcreations' => 'Sortzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
+'tog-watchdefault' => 'Aldatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
+'tog-watchmoves' => 'Izena aldatutako orrialdeak eta fitxategiak jarraipen-zerrendara gehitu',
+'tog-watchdeletion' => 'Ezabatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu',
 'tog-minordefault' => 'Lehenetsi bezala aldaketa txiki bezala markatu guztiak',
 'tog-previewontop' => 'Aurrebista aldaketa koadroaren aurretik erakutsi',
 'tog-previewonfirst' => 'Lehen aldaketan aurrebista erakutsi',
 'tog-nocache' => 'Orrialdeen katxea ezgaitu',
-'tog-enotifwatchlistpages' => 'Bidal iezadazue e-postako mezua, jarraitzen ari naizen orri bat aldatzen denean',
+'tog-enotifwatchlistpages' => 'Bidal iezadazue e-posta bat, jarraitzen ari naizen orrialde edo fitxategi bat aldatzen denean',
 'tog-enotifusertalkpages' => 'Nire eztabaida orrialdea aldatzen denean e-posta jaso',
-'tog-enotifminoredits' => 'Aldaketa txikiak direnean ere e-posta jaso',
+'tog-enotifminoredits' => 'Orrialde edo fitxategietan aldaketak txikiak direnean ere e-posta jaso',
 'tog-enotifrevealaddr' => 'Jakinarazpen mezuetan nire e-posta helbidea erakutsi',
 'tog-shownumberswatching' => 'Jarraitzen duen erabiltzaile kopurua erakutsi',
 'tog-oldsig' => 'Egungo sinadura:',
@@ -387,6 +387,7 @@ $1',
 'youhavenewmessages' => '$1 dauzkazu ($2).',
 'newmessageslink' => 'Mezu berriak',
 'newmessagesdifflink' => 'azken aldaketa ikusi',
+'newmessagesdifflinkplural' => 'azken {{PLURAL:$1|aldaketa|aldaketak}}',
 'youhavenewmessagesmulti' => 'Mezu berriak dituzu $1(e)n',
 'editsection' => 'aldatu',
 'editold' => 'aldatu',
@@ -436,10 +437,12 @@ Existitzen direnen zerrenda ikus dezakezu  [[Special:SpecialPages|{{int:specialp
 # General errors
 'error' => 'Errorea',
 'databaseerror' => 'Datu-base errorea',
-'dberrortext' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. Baliteke softwareak bug bat izatea. Datu-basean egindako azken kontsulta:
-<blockquote><tt>$1</tt></blockquote>
-funtzio honekin: "<tt>$2</tt>".
-Datu-baseak emandako errore informazioa: "<tt>$3: $4</tt>".',
+'dberrortext' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. 
+Baliteke softwareak bug bat izatea. 
+Datu-basean egindako azken kontsulta:
+<blockquote><code>$1</code></blockquote>
+funtzio honekin: "<code>$2</code>".
+Datu-baseak emandako errorea: "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da.
 Datu-basean egindako azken kontsulta:
 "$1"
@@ -475,15 +478,17 @@ Mesedez, bidali gertakar hau administradore bati, URLaren izena jarriz.',
 'badarticleerror' => 'Ezin da ekintza hau orrialde honetan burutu.',
 'cannotdelete' => 'Ezin izan da "$1" orrialde edo fitxategia ezabatu.
 Baliteke beste norbaitek ezabatu izana.',
+'cannotdelete-title' => 'Ezin da "$1" orrialdea ezabatu',
 'badtitle' => 'Izenburu ezegokia',
 'badtitletext' => 'Eskatutako orrialde izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat izatea.',
 'perfcached' => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
-'perfcachedts' => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
+'perfcachedts' => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$4|emaitza 1 dago|$4 emaitza daude}} eskuragarri katxean.',
 'querypage-no-updates' => 'Orrialde honen berritzeak ez dira baimentzen. Hemen dagoen data ez da zuzenean berrituko.',
 'wrong_wfQuery_params' => 'Baliogabeko parametroak eman zaizkio wfQuery() funtzioari<br />
 Funtzioa: $1<br />
 Kontsulta: $2',
 'viewsource' => 'Kodea ikusi',
+'viewsource-title' => '$1-en iturria ikusi',
 'actionthrottled' => 'Ekintzaren gainetik pasa da',
 '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.',
@@ -509,7 +514,7 @@ Emandako arrazoia ''$2'' izan zen.",
 # Login and logout pages
 'logouttext' => "'''Saioa itxi egin duzu.'''
 
-Erabiltzaile anonimo bezala jarrai dezakezu {{SITENAME}} erabiltzen, edo [[Special:UserLogin|saioa has dezakezu berriz]] erabiltzaile berdinarekin edo ezberdin batekin.
+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! ==
 
@@ -634,6 +639,8 @@ Behin-behineko pasahitza: $2',
 'passwordreset-emailsent' => 'Gogorarazteko e-posta bidali da.',
 
 # Special:ChangeEmail
+'changeemail' => 'Aldatu e-mail helbidea',
+'changeemail-oldemail' => 'Egungo e-mail helbidea:',
 'changeemail-newemail' => 'E-posta helbide berria:',
 'changeemail-none' => '(bat ere ez)',
 'changeemail-submit' => 'E-posta aldatu',
@@ -735,12 +742,11 @@ edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}
 'userpage-userdoesnotexist-view' => '"$1" erabiltzaile-kontua ez dago erregistraturik.',
 'blocked-notice-logextract' => 'Erabiltzaile hau blokeatuta dago une honetan.
 Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:',
-'clearyourcache' => "'''Oharra:''' Gorde ondoren zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.
-* '''Firefox / Safari:''' ''Shift'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-Shift-R'' sakatu (''⌘-R''' Mac baten)
-* '''Google Chrome:''' ''Ctrl-Shift-R'' sakatu (''⌘-R'' Mac batean)
+'clearyourcache' => "'''Oharra:''' Gorde ondoren, zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.
+* '''Firefox / Safari:''' ''Shift'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-Shift-R'' edo ''Crtl-F5'' sakatu (''⌘-R''' Mac batean)
+* '''Google Chrome:''' ''Ctrl-Shift-R'' sakatu (''⌘-Shift-R'' Mac batean)
 * '''Internet Explorer:''' ''Ctrl'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-F5'' sakatu
-* '''Konqueror:''': Birkargatzeko klik egin, edo F5 sakatu, besterik ez
-* '''Opera''' erabiltzaileek ''Tresnak → Hobespenak'' atalera jo eta katxea garbitzeko aukera hautatu",
+* '''Opera''' erabiltzaileek ''Tresnak → Hobespenak'' atalera joan eta katxea garbitzeko aukera hautatu",
 'usercssyoucanpreview' => "'''Laguntza:''' Zure CSS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
 'userjsyoucanpreview' => "'''Laguntza:''' Zure JS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
 'usercsspreview' => "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.'''
@@ -755,6 +761,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',
 '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.'''
@@ -766,6 +773,7 @@ Zure aldaketak ez dira oraindik gorde!",
 Aldaketa ezeztatua izan da testuaren galtzea galarazteko.
 Hau batzuetan gertatzen da buggyan oinarritutako web proxy zerbitzua erabiltzean.'''",
 'editing' => '$1 aldatzen',
+'creating' => '$1 sortzen',
 'editingsection' => '$1 aldatzen (atala)',
 'editingcomment' => '$1 aldatzen (atal berria)',
 'editconflict' => 'Aldaketa gatazka: $1',
@@ -906,9 +914,9 @@ Administratzaile bezala ikus dezakezu; xehetasun gehiagorako [{{fullurl:{{#Speci
 'rev-deleted-no-diff' => "Ezin duzu ezberdintasun hau ikusi, berrikuspenetako bat '''ezabatua''' izan delako.
 Xehetasunak [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabaketa erregistroan] aurki ditzakezu.",
 'rev-suppressed-no-diff' => "Ezin duzu ezberdintasunik ikusi berrikuspenen bat '''ezabatua''' izan delako.",
-'rev-deleted-unhide-diff' => "diff honen bertsioetako bat '''ezabatu''' da.
+'rev-deleted-unhide-diff' => "aldaketa honen bertsioetako bat '''ezabatu''' da.
 Xehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabatze erregistroan].
-Administratzailea zarenez, oraindik [$1 diff hau ikus dezakezu], nahi izanez gero.",
+Oraindik [$1 aldaketa hau ikus dezakezu], nahi izanez gero.",
 'rev-suppressed-unhide-diff' => "diff honen bertsioetako bat '''ezeztatu''' da.
 Xehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ezeztatze erregistroan].
 Administratzailea zarenez, oraindik [$1 diff hau ikus dezakezu], nahi izanez gero.",
@@ -972,9 +980,10 @@ Ezin duzu atzitu.',
 'revdelete-concurrent-change' => 'Errorea, $1 $2 data duen elementua aldatzean: badirudi haren egoera aldatu duela nor edo nork, zu aldatzen saiatzen ari zinela.
 Begira itzazu erregistroak.',
 'revdelete-reason-dropdown' => '*Ezabatzeko ohiko arrazoiak
-**Egile eskubideen urraketa
-**Informazio pertsonal desegokia
-**Iraingarria izan daitekeen informazioa',
+** Egile eskubideen urraketa
+** Informazio pertsonal edo iruzkin desegokia
+** Lankide izen desegokia
+** Iraingarria izan daitekeen informazioa',
 'revdelete-otherreason' => 'Bestelako arrazoia:',
 'revdelete-reasonotherlist' => 'Beste arrazoi bat',
 'revdelete-edit-reasonlist' => 'Ezabaketa arrazoiak aldatu',
@@ -983,7 +992,7 @@ Begira itzazu erregistroak.',
 # Suppression log
 'suppressionlog' => 'Ezabatze loga',
 'suppressionlogtext' => 'Azpian administratzaileek ezkutatutako edukia duten ezabaketa eta blokeoen zerrenda dago.
-Ikusi [[Special:BlockList|IP blokeoen zerrenda]] orain dauden blokeoak ikusi ahal izateko.',
+Ikusi [[Special:BlockList|blokeoen zerrenda]] orain dauden blokeoak eta debekuak ikusi ahal izateko.',
 
 # History merging
 'mergehistory' => 'Orrialdeen historiak bateratu',
@@ -1018,6 +1027,7 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 
 # Diffs
 'history-title' => '"$1" orrialdearen historia berrikuspena',
+'difference-title' => '"$1"-en berrikuspenen arteko aldaketa',
 'difference-multipage' => '(Orrialdeen arteko ezberdintasunak)',
 'lineno' => '$1. lerroa:',
 'compareselectedversions' => 'Hautatutako bertsioak alderatu',
@@ -1066,8 +1076,6 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 'search-interwiki-caption' => 'Beste proiektuak',
 'search-interwiki-default' => '$1(r)en emaitzak:',
 'search-interwiki-more' => '(gehiago)',
-'search-mwsuggest-enabled' => 'iradokizunekin',
-'search-mwsuggest-disabled' => 'ez dago gomendiorik',
 'search-relatedarticle' => 'Erlazionatua',
 'mwsuggest-disable' => 'AJAX gomendioak ezgaitu',
 'searcheverything-enable' => 'Bilatu izen-tarte guztietan',
@@ -1121,6 +1129,8 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-watchlist-token' => 'Jarraipen zerrendaren tokena:',
 'prefs-misc' => 'Denetarik',
 'prefs-resetpass' => 'Pasahitza aldatu',
+'prefs-changeemail' => 'Aldatu e-mail helbidea',
+'prefs-setemail' => 'E-mail helbide bat ezarri',
 'prefs-email' => 'E-posta aukerak',
 'prefs-rendering' => 'Itxura',
 'saveprefs' => 'Gorde',
@@ -1242,7 +1252,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'group-all' => '(guztiak)',
 
 'group-user-member' => '{{GENDER:$1|lankidea}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|baieztatutako erabiltzailea}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|baieztatutako lankidea}}',
 'group-bot-member' => '{{GENDER:$1|bot-a}}',
 'group-sysop-member' => '{{GENDER:$1|administratzailea}}',
 'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
@@ -1355,6 +1365,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'action-userrights' => 'lankide guztien eskumenak aldatu',
 'action-userrights-interwiki' => 'beste wikietako lankideen lankide-eskumenak aldatu',
 'action-siteadmin' => 'datubasea babestu edo babesa kendu',
+'action-sendemail' => 'E-mailak bidali',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|aldaketa 1|$1 aldaketa}}',
@@ -1528,7 +1539,7 @@ $1',
 'img-auth-nopathinfo' => 'PATH_INFO falta da.
 Zure zerbitzaria ez dago informazio hau pasatzeko konfiguratuta.
 CGI-oinarriduna izan daiteke, img_auth onartzen ez duena.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization Ikusi irudi-baimenak.]',
+Ikusi https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Eskatutako bidea ez dago kofiguratutako igoera-direktorioan.',
 'img-auth-badtitle' => 'Ezin izan da baleko izenbururik eraiki "$1" izenetik abiatuta',
 'img-auth-nologinnWL' => 'Ez duzu saioa hasi eta "$1" ez dago zerrenda zurian.',
@@ -1634,6 +1645,7 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 ** Copyright bortxaketa
 ** Bikoiztutako fitxategia',
 'filedelete-edit-reasonlist' => 'Ezabaketa arrazoiak aldatu',
+'filedelete-maintenance-title' => 'Ezin da artxiboa ezabatu',
 
 # MIME search
 'mimesearch' => 'MIME bilaketa',
@@ -1682,7 +1694,9 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 
 'disambiguations' => 'Argipen orrietara lotzen duten orriak',
 'disambiguationspage' => 'Template:argipen',
-'disambiguations-text' => "Jarraian azaltzen diren orrialdeek '''argipen orrialde''' baterako lotura dute. Kasu bakoitzean dagokion artikulu zuzenarekin izan beharko lukete lotura.<br />Orrialde bat argipen motakoa dela antzeman ohi da [[MediaWiki:Disambiguationspage]] orrialdean agertzen den txantiloietako bat duenean.",
+'disambiguations-text' => "Jarraian azaltzen diren orrialdeek '''argipen orrialde''' baterako lotura dute. 
+Kasu bakoitzean dagokion artikulu zuzenarekin izan beharko lukete lotura.<br />
+Orrialde bat argipen motakoa dela antzeman ohi da [[MediaWiki:Disambiguationspage]] orrialdean agertzen den txantiloietako bat duenean.",
 
 'doubleredirects' => 'Birzuzenketa bikoitzak',
 'doubleredirectstext' => 'Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara <del>zuzendu</del> beharko luke.',
@@ -1797,6 +1811,10 @@ Erregistro mota, erabiltzailearen izena edota orrialdearen izena iragaziz bistar
 'allpagesprefix' => 'Aurrizki hau duten orrialdeak bistaratu:',
 'allpagesbadtitle' => 'Orrialdearen izena baliogabekoa da edo interwiki edo hizkuntzen arteko aurrizkia dauka. Izenburuetan erabili ezin daitezkeen karaktere bat edo gehiago izan ditzake.',
 'allpages-bad-ns' => '{{SITENAME}}(e)k ez dauka "$1" izeneko izen-tarterik.',
+'allpages-hide-redirects' => 'Birzuzenketak ezkutatu',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Azkena ikusi.',
 
 # Special:Categories
 'categories' => 'Kategoriak',
@@ -1862,6 +1880,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 'mailnologin' => 'Bidalketa helbiderik ez',
 'mailnologintext' => 'Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].',
 'emailuser' => 'Erabiltzaile honi e-posta bidali',
+'emailuser-title-notarget' => 'Erabiltzaileari e-maila bidali',
 'emailpage' => 'Erabiltzaileari e-posta bidali',
 'emailpagetext' => 'Erabiltzaile honek baliozko e-posta helbide bat ezarri badu bere hobespenetan, beheko formularioa erabiliz mezu bat bidal dakioke.
 [[Special:Preferences|Hobespenetan]] daukazun e-posta helbidea azalduko da mezuaren bidaltzaile bezala eta beraz erantzun ahal izango dizu.',
@@ -2114,6 +2133,7 @@ In such cases, you must uncheck or unhide the newest deleted revision.',
 
 [[Special:Log/delete|Ezabaketa erregistrora]] jo azken ezabaketa eta leheneraketak ikusteko.",
 'undelete-header' => 'Berriki ezabatutako orrialdeak ikusteko [[Special:Log/delete|ezabaketa erregistrora]] jo.',
+'undelete-search-title' => 'Ezabatutako orrialdeak bilatu',
 'undelete-search-box' => 'Ezabatutako orrialdeak bilatu',
 'undelete-search-prefix' => 'Honela hasten diren orrialdeak erakutsi:',
 'undelete-search-submit' => 'Bilatu',
@@ -2214,8 +2234,8 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'ipb-confirm' => 'Blokeoa baieztatu',
 'badipaddress' => 'Baliogabeko IP helbidea',
 'blockipsuccesssub' => 'Blokeoa burutu da',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] erabiltzaileari blokeoa ezarri zaio.<br />
-Ikus [[Special:BlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] blokeatua izan da.<br />
+Ikus [[Special:BlockList|blokeoen zerrenda]] blokeoak aztertzeko.',
 'ipb-edit-dropdown' => 'Blokeatzeko arrazoiak aldatu',
 'ipb-unblock-addr' => '$1 lankide edo IP helbideari blokeoa baliogabetu',
 'ipb-unblock' => 'Erabiltzaile izen edo IP helbide bati blokeoa kendu',
@@ -2247,6 +2267,7 @@ Ikus [[Special:BlockList|IP blokeoen zerrenda]] blokeoak aztertzeko.',
 'unblocklink' => 'blokeoa kendu',
 'change-blocklink' => 'blokeoa aldatu',
 'contribslink' => 'ekarpenak',
+'emaillink' => 'E-maila bidali',
 'autoblocker' => '"[[User:$1|$1]]"(e)k berriki erabili duen IP helbidea duzulako autoblokeatu zaizu. $1(e)k emandako arrazoia zera da: "\'\'\'$2\'\'\'"',
 'blocklogpage' => 'Blokeo erregistroa',
 'blocklog-showlog' => 'Lankide hau aurretik blokeatua izan da.
@@ -2255,7 +2276,9 @@ Blokeo erregistroa ematen da azpian erreferentziarako:',
 Erregistroa ematen da azpian erreferentziarako:',
 'blocklogentry' => '"[[$1]]" wikilariari blokeoa ezarri zaio. Blokeoaldia: $2 $3',
 'reblock-logentry' => '[[$1]] wikilariari blokeoaldia aldatu diogu. Blokeoaldi berria: $2 $3',
-'blocklogtext' => 'Erabiltzaileen blokeoen ezarpen eta ezabaketen erregistroa da hau. Ez dira automatikoki blokeatutako IP helbideak zerrendatzen. Ikus [[Special:BlockList|IP blokeoen zerrenda]] aktibo dauden blokeoak aztertzeko.',
+'blocklogtext' => 'Erabiltzaileen blokeoen ezarpen eta ezabaketen erregistroa da hau. 
+Automatikoki blokeatutako IP helbideak ez dira zerrendatzen. 
+Ikus [[Special:BlockList|blokeoen zerrenda]] aktibo dauden blokeoak eta debekuak aztertzeko.',
 'unblocklogentry' => '$1 desblokeatu da',
 'block-log-flags-anononly' => 'erabiltzaile anonimoak bakarrik',
 'block-log-flags-nocreate' => 'kontuak sortzea ezgaituta',
@@ -2362,7 +2385,7 @@ Kasu horietan orrialdea eskuz mugitu edo bestearekin bateratu beharko duzu.",
 
 "[[:$1]]" helburua existitzen da. Lekua egiteko ezabatu nahi al duzu?',
 'delete_and_move_confirm' => 'Bai, orrialdea ezabatu',
-'delete_and_move_reason' => 'Lekua egiteko ezabatu da',
+'delete_and_move_reason' => '[[$1]] mugitzeko ezabatu da',
 'selfmove' => 'Helburu izenburua berdina da; ezin da orrialde bat bere gainera mugitu.',
 'immobile-source-namespace' => '"$1" motako orrialdeak ezin dira mugitu',
 'immobile-target-namespace' => 'Orrialdeak ezin dira "$1" motara mugitu',
@@ -2387,6 +2410,7 @@ Azken erregistroko sarrera ematen da azpian erreferentzia gisa:",
 Orrialdeak esportatzeko zehaztu hauen izenburuak beheko koadroan, izenburu bat lerroko, eta aukeratu zein bertsio esportatu nahi dituzun.
 
 Horrez gain, lotura zuzena ere erabil dezakezu; adibidez, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] "[[{{MediaWiki:Mainpage}}]]" orrialdearentzako.',
+'exportall' => 'Orrialde guztiak esportatu',
 'exportcuronly' => 'Oraingo berrikuspena bakarrik hartu, ez historia guztia',
 'exportnohistory' => "----
 '''Oharra:''' Formulario honen bitartez orrialdeen historia osoak esportatzeko aukera ezgaitu egin da, errendimendua dela-eta.",
@@ -2573,9 +2597,9 @@ Baliteke zerrenda beltzean dagoen kanpo lotura batek sortzea arazo hori.',
 'spam_blanking' => 'Berrikuspen guztiek $1(e)rako lotura zeukaten, husten',
 
 # Info page
-'pageinfo-header-edits' => 'Aldaketak',
+'pageinfo-header-edits' => 'Aldaketen historia',
 'pageinfo-views' => 'Bistaratze-kopurua',
-'pageinfo-edits' => 'Aldaketa kopurua',
+'pageinfo-edits' => 'Aldaketa kopuru totala',
 
 # Skin names
 'skinname-standard' => 'Lehenetsia',
@@ -3071,6 +3095,10 @@ Egiaztapen kode hau $4 iraungiko da.',
 'confirm-purge-top' => 'Orrialde honen katxea ezabatu?',
 'confirm-purge-bottom' => 'Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'Ados',
+'confirm-unwatch-button' => 'Ados',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; aurreko orrialdea',
 'imgmultipagenext' => 'hurrengo orrialdea &rarr;',
@@ -3186,7 +3214,7 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 * <strong class="mw-specialpagerestricted">Mugatutako orrialde bereziak.</strong>',
 'specialpages-group-maintenance' => 'Mantentze-oharrak',
 'specialpages-group-other' => 'Beste orrialde berezi batzuk',
-'specialpages-group-login' => 'Sartu / Izena eman',
+'specialpages-group-login' => 'Saioa hasi / kontua sortu',
 'specialpages-group-changes' => 'Aldaketa berriak eta erregistroak',
 'specialpages-group-media' => 'Artxiboen orriak',
 'specialpages-group-users' => 'Erabiltzaileak eta eskumenak',
@@ -3265,4 +3293,8 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'feedback-cancel' => 'Utzi',
 'feedback-submit' => 'Feedbacka bidali',
 
+# Search suggestions
+'searchsuggest-search' => 'Bilatu',
+'searchsuggest-containing' => 'edukian...',
+
 );
index 533c28c..05c119c 100644 (file)
@@ -377,7 +377,7 @@ La razón es la siguienti: ''$2''.",
 
 # Login and logout pages
 'logouttext' => "'''Cuenta afechá corretamenti.'''<br />
-Pueis acontinal gastandu {{SITENAME}} de holma anónima, u [[Special:UserLogin|entral ena tu cuenta]] con el mesmu ussuáriu, u con otru.
+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! ==
 
@@ -790,8 +790,6 @@ Asigurati e qu'esti chambu mantenga la continuiá el estorial la páhina.",
 'search-interwiki-caption' => 'Proyeutus helmanus',
 'search-interwiki-default' => '$1 resurtaus:',
 'search-interwiki-more' => '(más)',
-'search-mwsuggest-enabled' => 'muestral sugeréncias',
-'search-mwsuggest-disabled' => 'nu muestral sugeréncias',
 'searchrelated' => 'relacionau',
 'searchall' => 'tó',
 'showingresults' => "Embahu se {{PLURAL:$1|muestra '''1''' resurtau qu'esmiença|muestran hata '''$1''' resurtaus qu'esmiençan}} pol #'''$2'''.",
index 5a968c8..19cb9c3 100644 (file)
@@ -264,158 +264,158 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نگارخانه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__بافهرست__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرست__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__بی‌عنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'روز۲', 'روز_۲', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'نام‌روز', 'نام_روز', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'سال', 'سال‌کنونی', 'سال_کنونی', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'زمان‌کنونی', 'زمان_کنونی', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ساعت', 'ساعت‌کنونی', 'ساعت_کنونی', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ماه‌محلی', 'ماه_محلی', 'ماه‌محلی۲', 'ماه_محلی۲', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'روزمحلی۲', 'روز_محلی_۲', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'نام‌روزمحلی', 'نام_روز_محلی', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'سال‌محلی', 'سال_محلی', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'زمان‌محلی', 'زمان_محلی', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ساعت‌محلی', 'ساعت_محلی', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'شماره_فضای_نام', 'شماره‌فضای‌نام', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'فضای‌موضوع‌کد', 'فضای‌مقاله‌کد', 'فضای_موضوع_کد', 'فضای_مقاله_کد', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'نام‌کامل‌صفحه', 'نام_کامل_صفحه', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'نام‌صفحه‌بحث‌کد', 'نام_صفحه_بحث_کد', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'نام‌صفحه‌موضوع', 'نام‌صفحه‌مقاله', 'نام_صفحه_موضوع', 'نام_صفحه_مقاله', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'نام‌صفحه‌موضوع‌کد', 'نام‌صفحه‌مقاله‌کد', 'نام_صفحه_موضوع_کد', 'نام_صفحه_مقاله_کد', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'پیغام:', 'پ:', 'MSG:' ),
-       'subst'                   => array( '0', 'جایگزین:', 'جا:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'جایگزین_امن:', 'جام:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'پیغام‌بی‌بسط:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'بندانگشتی', 'انگشتدان', 'انگشتی', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'بندانگشتی=$1', 'انگشتدان=$1', 'انگشتی=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'راست', 'right' ),
-       'img_left'                => array( '1', 'چپ', 'left' ),
-       'img_none'                => array( '1', 'هیچ', 'none' ),
-       'img_width'               => array( '1', '$1پیکسل', '$1px' ),
-       'img_center'              => array( '1', 'وسط', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'قاب', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'بی‌قاب', 'بیقاب', 'بی_قاب', 'frameless' ),
-       'img_page'                => array( '1', 'صفحه=$1', 'صفحه_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'ایستاده', 'ایستاده=$1', 'ایستاده_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'حاشیه', 'border' ),
-       'img_baseline'            => array( '1', 'همکف', 'baseline' ),
-       'img_sub'                 => array( '1', 'زیر', 'sub' ),
-       'img_super'               => array( '1', 'زبر', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'بالا', 'top' ),
-       'img_text_top'            => array( '1', 'متن-بالا', 'text-top' ),
-       'img_middle'              => array( '1', 'میانه', 'middle' ),
-       'img_bottom'              => array( '1', 'پایین', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'متن-پایین', 'text-bottom' ),
-       'img_link'                => array( '1', 'پیوند=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'جایگزین=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ترجمه:', 'INT:' ),
-       'sitename'                => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
-       'ns'                      => array( '0', 'فن:', 'NS:' ),
-       'nse'                     => array( '0', 'فنک:', 'NSE:' ),
-       'localurl'                => array( '0', 'نشانی:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'نشانی‌کد:', 'نشانی_کد:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'مسیرمقاله', 'مسیر_مقاله', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'سرور', 'کارساز', 'SERVER' ),
-       'servername'              => array( '0', 'نام‌کارساز', 'نام_کارساز', 'نام‌سرور', 'نام_سرور', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'مسیرسند', 'مسیر_سند', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'مسیرسبک', 'مسیر_سبک', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__عنوان‌تبدیل‌نشده__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__محتواتبدیل‌نشده__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'هفته', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'روزهفته', 'روز_هفته', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'هفته‌محلی', 'هفته_محلی', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'روزهفته‌محلی', 'روز_هفته_محلی', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'نسخه', 'شماره‌نسخه', 'شماره_نسخه', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'روزنسخه', 'روز_نسخه', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'روزنسخه۲', 'روز_نسخه۲', 'روز_نسخه_۲', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ماه‌نسخه', 'ماه_نسخه', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'ماه‌نسخه۱', 'ماه_نسخه_۱', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'سال‌نسخه', 'سال_نسخه', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'زمان‌یونیکسی‌نسخه', 'زمان‌نسخه', 'زمان_یونیکسی_نسخه', 'زمان_نسخه', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'کاربرنسخه', 'کاربر_نسخه', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'جمع:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'نشانی‌کامل:', 'نشانی_کامل:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'نشانی_استاندارد:', 'نشانی‌استاندارد:', 'CANONICALURL:' ),
-       'lcfirst'                 => array( '0', 'ابتداکوچک:', 'ابتدا_کوچک:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ابتدابزرگ:', 'ابتدا_بزرگ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ک:', 'LC:' ),
-       'uc'                      => array( '0', 'ب:', 'UC:' ),
-       'raw'                     => array( '0', 'خام:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'عنوان‌ظاهری', 'عنوان_ظاهری', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'ن', 'R' ),
-       'newsectionlink'          => array( '1', '__بخش‌جدید__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__بی‌پیوندبخش__', '__بی‌پیوند‌بخش‌جدید__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'نسخه‌کنونی', 'نسخه_کنونی', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'کدنشانی:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'کدلنگر:', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'زمان‌یونیکسی', 'زمان_یونیکسی', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'زمان‌یونیکسی‌محلی', 'زمان_یونیکسی_محلی', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'علامت‌جهت', 'علامت_جهت', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#زبان:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'زبان‌محتوا', 'زبان_محتوا', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'صفحه‌درفضای‌نام:', 'صفحه_در_فضای_نام:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'تعدادمدیران', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'آرایش‌عدد', 'آرایش_عدد', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'لبه‌چپ', 'لبه_چپ', 'PADLEFT' ),
-       'padright'                => array( '0', 'لبه‌راست', 'لبه_راست', 'PADRIGHT' ),
-       'special'                 => array( '0', 'ویژه', 'special' ),
-       'defaultsort'             => array( '1', 'ترتیب:', 'ترتیب‌پیش‌فرض:', 'ترتیب_پیش_فرض:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'مسیرپرونده:', 'مسیر_پرونده:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'برچسب', 'tag' ),
-       'hiddencat'               => array( '1', '__رده‌پنهان__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'صفحه‌دررده', 'صفحه_در_رده', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'اندازه‌صفحه', 'اندازه_صفحه', 'PAGESIZE' ),
-       'index'                   => array( '1', '__نمایه__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__بی‌نمایه__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'تعداددرگروه', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__تغییرمسیرثابت__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'سطح‌حفاطت', 'سطح_حفاظت', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'آرایش‌تاریخ', 'آرایش_تاریخ', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'مسیر', 'PATH' ),
-       'url_wiki'                => array( '0', 'ویکی', 'WIKI' ),
-       'url_query'               => array( '0', 'دستور', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'بدون‌خطا', 'بدون_خطا', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
+       'redirect'                  => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نگارخانه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__بی‌عنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'روز۲', 'روز_۲', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'نام‌روز', 'نام_روز', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'سال', 'سال‌کنونی', 'سال_کنونی', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'زمان‌کنونی', 'زمان_کنونی', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ساعت', 'ساعت‌کنونی', 'ساعت_کنونی', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ماه‌محلی', 'ماه_محلی', 'ماه‌محلی۲', 'ماه_محلی۲', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'روزمحلی۲', 'روز_محلی_۲', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'نام‌روزمحلی', 'نام_روز_محلی', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'سال‌محلی', 'سال_محلی', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'زمان‌محلی', 'زمان_محلی', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ساعت‌محلی', 'ساعت_محلی', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'شماره_فضای_نام', 'شماره‌فضای‌نام', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'فضای‌موضوع‌کد', 'فضای‌مقاله‌کد', 'فضای_موضوع_کد', 'فضای_مقاله_کد', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'نام‌کامل‌صفحه', 'نام_کامل_صفحه', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'نام‌صفحه‌بحث‌کد', 'نام_صفحه_بحث_کد', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'نام‌صفحه‌موضوع', 'نام‌صفحه‌مقاله', 'نام_صفحه_موضوع', 'نام_صفحه_مقاله', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'نام‌صفحه‌موضوع‌کد', 'نام‌صفحه‌مقاله‌کد', 'نام_صفحه_موضوع_کد', 'نام_صفحه_مقاله_کد', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'پیغام:', 'پ:', 'MSG:' ),
+       'subst'                     => array( '0', 'جایگزین:', 'جا:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'جایگزین_امن:', 'جام:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'پیغام‌بی‌بسط:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'بندانگشتی', 'انگشتدان', 'انگشتی', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'بندانگشتی=$1', 'انگشتدان=$1', 'انگشتی=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'راست', 'right' ),
+       'img_left'                  => array( '1', 'چپ', 'left' ),
+       'img_none'                  => array( '1', 'هیچ', 'none' ),
+       'img_width'                 => array( '1', '$1پیکسل', '$1px' ),
+       'img_center'                => array( '1', 'وسط', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'قاب', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'بی‌قاب', 'بیقاب', 'بی_قاب', 'frameless' ),
+       'img_page'                  => array( '1', 'صفحه=$1', 'صفحه_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'ایستاده', 'ایستاده=$1', 'ایستاده_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'حاشیه', 'border' ),
+       'img_baseline'              => array( '1', 'همکف', 'baseline' ),
+       'img_sub'                   => array( '1', 'زیر', 'sub' ),
+       'img_super'                 => array( '1', 'زبر', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'بالا', 'top' ),
+       'img_text_top'              => array( '1', 'متن-بالا', 'text-top' ),
+       'img_middle'                => array( '1', 'میانه', 'middle' ),
+       'img_bottom'                => array( '1', 'پایین', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'متن-پایین', 'text-bottom' ),
+       'img_link'                  => array( '1', 'پیوند=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'جایگزین=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ترجمه:', 'INT:' ),
+       'sitename'                  => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
+       'ns'                        => array( '0', 'فن:', 'NS:' ),
+       'nse'                       => array( '0', 'فنک:', 'NSE:' ),
+       'localurl'                  => array( '0', 'نشانی:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'نشانی‌کد:', 'نشانی_کد:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'مسیرمقاله', 'مسیر_مقاله', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'سرور', 'کارساز', 'SERVER' ),
+       'servername'                => array( '0', 'نام‌کارساز', 'نام_کارساز', 'نام‌سرور', 'نام_سرور', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'مسیرسند', 'مسیر_سند', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'مسیرسبک', 'مسیر_سبک', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__عنوان‌تبدیل‌نشده__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__محتواتبدیل‌نشده__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'هفته', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'روزهفته', 'روز_هفته', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'هفته‌محلی', 'هفته_محلی', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'روزهفته‌محلی', 'روز_هفته_محلی', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'نسخه', 'شماره‌نسخه', 'شماره_نسخه', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'روزنسخه', 'روز_نسخه', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'روزنسخه۲', 'روز_نسخه۲', 'روز_نسخه_۲', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ماه‌نسخه', 'ماه_نسخه', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'ماه‌نسخه۱', 'ماه_نسخه_۱', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'سال‌نسخه', 'سال_نسخه', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'زمان‌یونیکسی‌نسخه', 'زمان‌نسخه', 'زمان_یونیکسی_نسخه', 'زمان_نسخه', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'کاربرنسخه', 'کاربر_نسخه', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'نشانی‌کامل:', 'نشانی_کامل:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'نشانی_استاندارد:', 'نشانی‌استاندارد:', 'CANONICALURL:' ),
+       'lcfirst'                   => array( '0', 'ابتداکوچک:', 'ابتدا_کوچک:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ابتدابزرگ:', 'ابتدا_بزرگ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ک:', 'LC:' ),
+       'uc'                        => array( '0', 'ب:', 'UC:' ),
+       'raw'                       => array( '0', 'خام:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'عنوان‌ظاهری', 'عنوان_ظاهری', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'ن', 'R' ),
+       'newsectionlink'            => array( '1', '__بخش‌جدید__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__بی‌پیوندبخش__', '__بی‌پیوند‌بخش‌جدید__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'نسخه‌کنونی', 'نسخه_کنونی', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'کدنشانی:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'کدلنگر:', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'زمان‌یونیکسی', 'زمان_یونیکسی', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'زمان‌یونیکسی‌محلی', 'زمان_یونیکسی_محلی', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'علامت‌جهت', 'علامت_جهت', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#زبان:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'زبان‌محتوا', 'زبان_محتوا', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'صفحه‌درفضای‌نام:', 'صفحه_در_فضای_نام:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'تعدادمدیران', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'آرایش‌عدد', 'آرایش_عدد', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'لبه‌چپ', 'لبه_چپ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'لبه‌راست', 'لبه_راست', 'PADRIGHT' ),
+       'special'                   => array( '0', 'ویژه', 'special' ),
+       'defaultsort'               => array( '1', 'ترتیب:', 'ترتیب‌پیش‌فرض:', 'ترتیب_پیش_فرض:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'مسیرپرونده:', 'مسیر_پرونده:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'برچسب', 'tag' ),
+       'hiddencat'                 => array( '1', '__رده‌پنهان__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'صفحه‌دررده', 'صفحه_در_رده', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'اندازه‌صفحه', 'اندازه_صفحه', 'PAGESIZE' ),
+       'index'                     => array( '1', '__نمایه__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__بی‌نمایه__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'تعداددرگروه', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__تغییرمسیرثابت__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'سطح‌حفاطت', 'سطح_حفاظت', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'آرایش‌تاریخ', 'آرایش_تاریخ', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'مسیر', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ویکی', 'WIKI' ),
+       'url_query'                 => array( '0', 'دستور', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'بدون‌خطا', 'بدون_خطا', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
 );
 
 # Harakat are intentionally not included in the linkTrail. Their addition should
@@ -432,37 +432,37 @@ $imageFiles = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'زÛ\8cر Ù¾Û\8cÙ\88Ù\86دÙ\87ا Ø®Ø· Ú©Ø´Û\8cدÙ\87 Ø´Ù\88د',
+'tog-underline' => 'خط Ú©Ø´Û\8cدÙ\86 Ø²Û\8cر Ù¾Û\8cÙ\88Ù\86دÙ\87ا:',
 'tog-justify' => 'بندها تمام‌چین نمایش یابند',
 'tog-hideminor' => 'تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند',
 'tog-hidepatrolled' => 'ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند',
 'tog-newpageshidepatrolled' => 'صفحه‌های نهگبانی‌شده از فهرست صفحه‌های تازه پنهان شوند',
 'tog-extendwatchlist' => 'گسترش فهرست پی‌گیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها',
-'tog-usenewrc' => 'گروه تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
+'tog-usenewrc' => 'گروه‌بندی تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
 'tog-numberheadings' => 'شماره‌گذاری خودکار عنوان‌ها',
 'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)',
 'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)',
 'tog-editsection' => 'ویرایش بخش‌ها از طریق پیوندهای [ویرایش] فعال باشد',
-'tog-editsectiononrightclick' => 'ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش‌ها فعال باشد (نیازمند جاوااسکریپت)',
+'tog-editsectiononrightclick' => 'امکان ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش (نیازمند جاوااسکریپت)',
 'tog-showtoc' => 'فهرست مندرجات نمایش یابد (برای صفحه‌های دارای بیش از ۳ عنوان)',
-'tog-rememberpassword' => 'گذرواژهٔ من (حداکثر $1 روز) در این مرورگر به خاطر سپرده شود',
-'tog-watchcreations' => 'صفحه‌هایی که می‌سازم و پرونده‌هایی را که بارگذاری می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdefault' => 'صفحه‌ها و پرونده‌هایی را که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchmoves' => 'صفحه‌ها و پرونده‌هایی را که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdeletion' => 'صفحه‌ها و پرونده‌هایی را که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'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-enotifwatchlistpages' => 'اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من نامه‌ای فرستاده شود',
+'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود',
 'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من نامه‌ای فرستاده شود',
 'tog-enotifrevealaddr' => 'نشانی رایانامهٔ من در رایانامه‌های اطلاع‌رسانی نمایش یابد',
 'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده نمایش یابد',
 'tog-oldsig' => 'امضای کنونی:',
 'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)',
-'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته. نیازمند تنظیمات ویژه در رایانهٔ‌تان است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
-'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته. نیازمند تنظیمات ویژه در رایانهٔ‌تان است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
+'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
+'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
 'tog-showjumplinks' => 'پیوندهای دسترسی‌پذیری «پرش به» فعال باشد',
 'tog-uselivepreview' => 'استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)',
 'tog-forceeditsummary' => 'هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع داده شود',
@@ -576,7 +576,7 @@ $messages = array(
 'qbbrowse' => 'مرور',
 'qbedit' => 'ویرایش',
 'qbpageoptions' => 'این صفحه',
-'qbpageinfo' => 'بافت',
+'qbpageinfo' => 'محتوا',
 'qbmyoptions' => 'صفحه‌های من',
 'qbspecialpages' => 'صفحه‌های ویژه',
 'faq' => 'پرسش‌های متداول',
@@ -589,7 +589,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' => 'نمایش تاریخچه',
@@ -645,7 +645,7 @@ $messages = array(
 'viewhelppage' => 'نمایش صفحهٔ راهنما',
 'categorypage' => 'نمایش صفحهٔ رده',
 'viewtalkpage' => 'نمایش صفحهٔ بحث',
-'otherlanguages' => 'زبان‌های دیگر',
+'otherlanguages' => 'بÙ\87 Ø²Ø¨Ø§Ù\86â\80\8cÙ\87اÛ\8c Ø¯Û\8cگر',
 'redirectedfrom' => '(تغییرمسیر از $1)',
 'redirectpagesub' => 'صفحهٔ تغییرمسیر',
 'lastmodifiedat' => 'این صفحه آخرین‌بار در $1 ساعت $2 تغییر یافته‌است.',
@@ -673,15 +673,15 @@ $1',
 'disclaimers' => 'تکذیب‌نامه‌ها',
 'disclaimerpage' => 'Project:تکذیب‌نامهٔ عمومی',
 'edithelp' => 'راهنمای ویرایش‌کردن',
-'edithelppage' => 'Help:چگونه صفحه‌ها را ویرایش کنیم',
-'helppage' => 'Help:محتویات',
+'edithelppage' => 'Help:ویرایش',
+'helppage' => 'Help:محتوا',
 'mainpage' => 'صفحهٔ اصلی',
 'mainpage-description' => 'صفحهٔ اصلی',
 'policy-url' => 'Project:سیاست‌ها',
 'portal' => 'ورودی کاربران',
 'portal-url' => 'Project:ورودی کاربران',
-'privacy' => 'سیاست حفظ اسرار',
-'privacypage' => 'Project:سیاست حفظ اسرار',
+'privacy' => 'سیاست محرمانگی',
+'privacypage' => 'Project:سیاست محرمانگی',
 
 'badaccess' => 'خطای دسترسی',
 'badaccess-group0' => 'شما اجازهٔ اجرای عملی را که درخواست کرده‌اید ندارید.',
@@ -697,6 +697,10 @@ $1',
 'youhavenewmessages' => '$1 دارید ($2).',
 'newmessageslink' => 'پیام‌های جدید',
 'newmessagesdifflink' => 'آخرین تغییر',
+'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3| کاربر دیگر| $3  کاربر}} $1 دارید ($2).',
+'youhavenewmessagesmanyusers' => 'شما از تعدادی کاربر $1 دارید ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید|پیام جدید}}',
+'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییرات}} اخیر',
 'youhavenewmessagesmulti' => 'پیام‌های جدیدی در $1 دارید.',
 'editsection' => 'ویرایش',
 'editold' => 'ویرایش',
@@ -753,27 +757,27 @@ $1',
 'dberrortext' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 دلیل این مشکل می‌تواند ایرادی در نرم‌افزار باشد.
 آخرین درخواست که برای پایگاه داده فرستاد شد این بود:
-<blockquote style="direction:ltr;"><tt>$1</tt></blockquote>
-این درخواست از درون عملگر «<span class="ltr"><tt>$2</tt></span>» فرستاده شد.
+<blockquote class="mw-content-ltr"><code>$1</code></blockquote>
+این درخواست از درون عملگر «<span class="mw-content-ltr"><code>$2</code></span>» فرستاده شد.
 پایگاه داده این خطا را بازگرداند:
-<div class="ltr"><tt>$3: $4</tt></div>',
+<div class="mw-content-ltr"><samp>$3: $4</samp></div>',
 'dberrortextcl' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 آخرین درخواستی که برای پایگاه داده فرستاد شد این بود:
-<div class="ltr">$1</div>
-این درخواست از درون عملگر «<span class="ltr">$2</span>» فرستاده شد.
+<div class="mw-content-ltr">$1</div>
+این درخواست از درون عملگر «<span class="mw-content-ltr">$2</span>» فرستاده شد.
 پایگاه داده این خطا را بازگرداند:
-<div class="ltr">$3: $4</div>',
-'laggedslavemode' => "'''Ù\87شدار:''' ØµÙ\81Ø­Ù\87 Ù\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ø´Ø§Ù\85Ù\84 Ø¨Ù\87â\80\8cرÙ\88زرساÙ\86Û\8câ\80\8cÙ\87اÛ\8c Ø§Ø®Û\8cر Ø±Ø§ نشود.",
+<div class="mw-content-ltr">$3: $4</div>',
+'laggedslavemode' => "'''Ù\87شدار:''' ØµÙ\81Ø­Ù\87 Ù\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ø¨Ù\87â\80\8cرÙ\88زرساÙ\86Û\8câ\80\8cÙ\87اÛ\8c Ø§Ø®Û\8cر Ø±Ø§ Ø´Ø§Ù\85Ù\84 نشود.",
 'readonly' => 'پایگاه داده قفل شد',
 'enterlockreason' => 'دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد',
-'readonlytext' => 'پاÛ\8cگاÙ\87 Ø¯Ø§Ø¯Ù\87 Ø¯Ø± Ø­Ø§Ù\84 Ø­Ø§Ø¶Ø± Ø¯Ø± Ø¨Ø±Ø§Ø¨Ø± ØªØºÛ\8cÛ\8cرات Ù\88 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ù\82Ù\81Ù\84 Ø´Ø¯Ù\87â\80\8cاستØ\8c احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.
+'readonlytext' => 'پاÛ\8cگاÙ\87 Ø¯Ø§Ø¯Ù\87 Ø¯Ø± Ø­Ø§Ù\84 Ø­Ø§Ø¶Ø± Ø¯Ø± Ø¨Ø±Ø§Ø¨Ø± ØªØºÛ\8cÛ\8cرات Ù\88 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ù\82Ù\81Ù\84 Ø´Ø¯Ù\87â\80\8cاستØ\9b Ø§Û\8cÙ\86 Ù\88ضعÛ\8cت احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.
 
 مدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1',
 'missing-article' => 'پایگاه داده متن صفحهٔ با نام «$1» $2 را که باید پیدا می‌کرد نیافت.
 
 این مشکل معمولاً به علت دنبال‌کردن یک پیوند تفاوت تاریخ‌گذشته یا تاریخچهٔ صفحه‌ای که حذف شده‌است، رخ می‌دهد.
 
-در غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشید.
+در غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشد.
 لطفاً این مشکل را با ذکر نشانی اینترنتی به یکی از [[Special:ListUsers/sysop|مدیران]] گزارش دهید.',
 'missingarticle-rev' => '(شمارهٔ نسخه: $1)',
 'missingarticle-diff' => '(تفاوت: $1، $2)',
@@ -794,7 +798,7 @@ $1',
 'cannotdelete' => 'امکان حذف صفحه یا تصویر «$1» وجود ندارد.
 ممکن است قبلاً فرد دیگری آن را حذف کرده باشد.',
 'cannotdelete-title' => 'نمی‌توان صفحهٔ «$1» را حذف کرد',
-'delete-hook-aborted' => 'ویرایش توسط قلاب لغو شد.
+'delete-hook-aborted' => 'حذف توسط قلاب لغو شد.
 توضیحی در این مورد داده نشد.',
 'badtitle' => 'عنوان بد',
 'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی میان‌زبانی یا میان‌ویکی‌ای با پیوند نادرست بود.
@@ -807,17 +811,18 @@ $1',
 تابع: $1<br />
 پرس‌وجو: $2',
 'viewsource' => 'نمایش مبدأ',
-'viewsource-title' => 'Ù\85شاÙ\87دÙ\87Ù\94 Ù\85Ù\86بع برای $1',
+'viewsource-title' => 'Ù\86Ù\85اÛ\8cØ´ Ù\85بدأ برای $1',
 'actionthrottled' => 'جلوی عمل شما گرفته شد',
 'actionthrottledtext' => 'به منظور جلوگیری از انتشار اسپم، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.
 لطفاً پس از چند دقیقه دوباره تلاش کنید.',
-'protectedpagetext' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø¨Ø±Ø§Û\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ù\88Û\8cراÛ\8cØ´ Ù\82Ù\81Ù\84 شده‌است.',
+'protectedpagetext' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø¨Ø±Ø§Û\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ù\88Û\8cراÛ\8cØ´ Ù\85حاÙ\81ظت شده‌است.',
 'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:',
 'viewyourtext' => "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
-'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار است و به منظور پیشگیری از خرابکاری قفل شده‌است.',
-'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل متنی‌است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
+'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.
+برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.',
+'editinginterface' => "'''هشدار:''' صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
 تغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.
-براÛ\8c ØªØ±Ø¬Ù\85Ù\87 Ù\84Ø·Ù\81اÙ\8b Ø§Ø² [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] (پرÙ\88Ú\98Ù\87Ù\94 ØªØ±Ø¬Ù\85Ù\87Ù\94 Ù\85دÛ\8cاÙ\88Û\8cÚ©Û\8c) استفاده کنید.",
+براÛ\8c Ø§Ù\81زÙ\88دÙ\86 Û\8cا ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\86 ØªØ±Ø¬Ù\85Ù\87 Ø¨Ø±Ø§Û\8c Ù\87Ù\85Ù\87Ù\94 Ù\88Û\8cÚ©Û\8câ\80\8cÙ\87اØ\8c Ù\84Ø·Ù\81اÙ\8b Ø§Ø² [//translatewiki.net/ translatewiki.net]Ø\8c Ù¾Ø±Ù\88Ú\98Ù\87Ù\94 Ù\85Ø­Ù\84Û\8câ\80\8cسازÛ\8c Ù\85دÛ\8cاÙ\88Û\8cÚ©Û\8cØ\8c استفاده کنید.",
 'sqlhidden' => '(دستور اس‌کیوال پنهان شده)',
 'cascadeprotected' => 'این صفحه در مقابل ویرایش محافظت شده‌است چون در {{PLURAL:$1|صفحهٔ|صفحه‌های}} محافظت‌شدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آن‌ها}} انتخاب شده قرار گرفته‌است:
 $2',
@@ -827,13 +832,13 @@ $2',
 'ns-specialprotected' => 'صفحه‌های ویژه غیر قابل ویرایش هستند.',
 'titleprotected' => "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.
 دلیل ارائه‌شده این است: «''$2''».",
-'filereadonlyerror' => "تغییر پرونده «$1» ممکن نیست چون مخزن پرونده «$2» در حالت فقط خواندنی قرار دارد.
+'filereadonlyerror' => 'تغییر پرونده «$1» ممکن نیست چون مخزن پرونده «$2» در حالت فقط خواندنی قرار دارد.
 
-مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  ''$3''.",
+مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  «$3».',
 'invalidtitle-knownnamespace' => 'عنوان نامعتبر با فضای نام «$2» و متن «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»',
 'exception-nologin' => 'به سامانه وارد نشده‌اید',
-'exception-nologin-text' => 'در Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c Ø§Ù\86جاÙ\85 Ø§Û\8cÙ\86 Ø¹Ù\85Ù\84 نیازمند وارد شدن به سیستم  است.',
+'exception-nologin-text' => 'دسترسÛ\8c Ø¨Ù\87 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Û\8cا Ø§Ù\86جاÙ\85 Ø§Û\8cÙ\86 Ø¹Ù\85Ù\84 Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c نیازمند وارد شدن به سیستم  است.',
 
 # Virus scanner
 'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''",
@@ -843,14 +848,14 @@ $2',
 # Login and logout pages
 'logouttext' => "'''هم‌اکنون از سامانه خارج شدید.'''
 
-شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا با همین حساب کاربری یا حسابی دیگر [[Special:UserLogin|به سامانه وارد شوید]].
+شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا با همین حساب کاربری یا حسابی دیگر <span class='plainlinks'>[$1 به سامانه وارد شوید]</span>.
 توجه کنید که تا زمانی که میانگیر مرورگرتان را پاک نکنید، بعضی صفحه‌ها ممکن است به گونه‌ای نمایش یابند که گویی هنوز از سامانه خارج نشده‌اید.",
 'welcomecreation' => '==$1، خوش آمدید!==
 حساب شما ایجاد شد.
 فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] را برای خود تغییر دهید.',
 'yourname' => 'نام کاربری:',
 'yourpassword' => 'گذرواژه:',
-'yourpasswordagain' => 'گذرواژه را دوباره وارد کنید',
+'yourpasswordagain' => 'تکرار گذرواژه:',
 'remembermypassword' => 'گذرواژه را (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) در این رایانه به خاطر بسپار',
 'securelogin-stick-https' => 'پس از ورود به سامانه به HTTPS متصل بمان',
 'yourdomainname' => 'دامنهٔ شما:',
@@ -867,8 +872,8 @@ $2',
 'nologin' => 'حساب کاربری ندارید؟ $1.',
 'nologinlink' => 'یک حساب کاربری جدید بسازید',
 'createaccount' => 'ایجاد حساب کاربری',
-'gotaccount' => "حساب کاربری دارید؟ '''$1'''.",
-'gotaccountlink' => 'وارد شوید',
+'gotaccount' => 'حساب کاربری دارید؟ $1.',
+'gotaccountlink' => 'به سامانه وارد شوید',
 'userlogin-resetlink' => 'جزئیات ورود را فراموش کرده‌اید؟',
 'createaccountmail' => 'با رایانامه',
 'createaccountreason' => 'دلیل:',
@@ -900,7 +905,7 @@ $2',
 لطفاً دوباره امتحان کنید.',
 'wrongpasswordempty' => 'گذرواژه‌ای که وارد کرده‌اید، خالی است.
 لطفاً دوباره تلاش کنید.',
-'passwordtooshort' => 'گذرواژه باید دست‌کم {{PLURAL:$1|$1 حرف|$1 حرف}} داشته باشد.',
+'passwordtooshort' => 'گذرواژه باید دست‌کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته باشد.',
 'password-name-match' => 'گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.',
 'password-login-forbidden' => 'استفاده از این نام کاربری و گذرواژه ممنوع است.',
 'mailmypassword' => 'گذرواژهٔ جدید با رایانامه فرستاده شود',
@@ -919,7 +924,7 @@ $2',
 'eauthentsent' => 'یک نامه برای تأیید نشانی رایانامه به نشانی موردنظر ارسال شد.
 قبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهایی که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.',
 'throttled-mailpassword' => 'یک یادآور گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته برای شما فرستاده شده‌است.
-برای جلوگیری از سوءاستفاده هر  $1 ساعت تنها یک یادآوری فرستاده می‌شود.',
+برای جلوگیری از سوءاستفاده هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک یادآوری فرستاده می‌شود.',
 'mailerror' => 'خطا در فرستادن رایانامه: $1',
 'acct_creation_throttle_hit' => 'بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.
 به همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.',
@@ -1002,8 +1007,8 @@ $2
 'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'تغییر آدرس پست رایانامه',
-'changeemail-header' => 'تغییر آدرس ایمیل حساب کاربری',
+'changeemail' => 'تغییر نشانی رایانامه',
+'changeemail-header' => 'تغییر نشانی رایانامهٔ حساب کاربری',
 'changeemail-text' => 'این فرم را تکمیل کنید تا آدرس رایانامه‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.',
 'changeemail-no-info' => 'برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.',
 'changeemail-oldemail' => 'نشانی رایانامهٔ کنونی:',
@@ -1108,17 +1113,20 @@ $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> ولی شما اجازه ایجاد این صفحه را ندارید.',
+'missing-revision' => 'ویرایش #$1 از صفحهٔ "{{PAGENAME}}" موجود نیست.
+
+معمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.
+می‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.',
 'userpage-userdoesnotexist' => 'حساب کاربر «<nowiki>$1</nowiki>» ثبت نشده‌است.
 لطفاً مطمئن شوید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.',
 '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'' را با هم فشار دهید
-*'''کانکوئرر:''' روی دکمهٔ ''Reload'' کلیک کنید و یا کلید ''F5'' را فشار دهید
 *'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools &rarr; Preferences'' پاک کنید",
 'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیه‌کردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
 'userjsyoucanpreview' => "'''نکته:''' پیش از ذخیره‌کردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
@@ -1147,7 +1155,7 @@ $2
 
 '''اگر مطمئن هستید که این پیش‌نمایش یک ویرایش مجاز است، آن را تکرار کنید.'''
 اگر تکرار پیش‌نمایش نتیجه نداد، از سامانه [[Special:UserLogout|خارج شوید]] و دوباره وارد شوید.",
-'token_suffix_mismatch' => "'''ویرایش شما ذخیره نشد، زیرا مرورگر شما نویسه‌های نقطه‌گذاری را از هم پاشیده‌است.'''
+'token_suffix_mismatch' => "'''Ù\88Û\8cراÛ\8cØ´ Ø´Ù\85ا Ø°Ø®Û\8cرÙ\87 Ù\86شدØ\8c Ø²Û\8cرا Ù\85رÙ\88رگر Ø´Ù\85ا Ù\86Ù\88Û\8cسÙ\87â\80\8cÙ\87اÛ\8c Ù\86Ù\82Ø·Ù\87â\80\8cگذارÛ\8c Ø±Ø§ Ø¯Ø± Ú©Ø¯ Ø§Ù\85Ù\86Û\8cتÛ\8c Ù\88Û\8cراÛ\8cØ´ Ø§Ø² Ù\87Ù\85 Ù¾Ø§Ø´Û\8cدÙ\87â\80\8cاست.'''
 ویرایش شما مردود شد تا از خراب شدن متن صفحه جلوگیری شود.
 گاهی این اشکال زمانی پیش می‌آید که شما از یک پروکسی تحت وب استفاده کنید.",
 'edit_form_incomplete' => "'''بعضی قسمت‌های فرم ویرایش به سرور نرسیدند؛ اطمینان حاصل کنید که ویرایش‌های شما کامل است و دوباره تلاش کنید.'''",
@@ -1242,6 +1250,7 @@ $2
 'expansion-depth-exceeded-warning' => 'صفحه حداکثر عمق بسط دادن تجاوز کرد',
 'parser-unstrip-loop-warning' => 'حلقه در دستور unstrip پیدا شد',
 'parser-unstrip-recursion-limit' => 'از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)',
+'converter-manual-rule-error' => 'خطا در قوانین مبدل دستی زبان',
 
 # "Undo" feature
 'undo-success' => 'این ویرایش را می‌توان خنثی کرد.
@@ -1262,7 +1271,7 @@ $2
 'currentrev' => 'نسخهٔ فعلی',
 'currentrev-asof' => 'نسخهٔ کنونی تا $1',
 'revisionasof' => 'نسخهٔ $1',
-'revision-info' => 'Ù\88Û\8cراÛ\8cØ´ Ø¯Ø± تاریخ $1 توسط $2',
+'revision-info' => 'Ù\86سخÙ\87Ù\94 تاریخ $1 توسط $2',
 'previousrevision' => '→ نسخهٔ قدیمی‌تر',
 'nextrevision' => 'نسخهٔ جدیدتر ←',
 'currentrevisionlink' => 'نمایش نسخهٔ فعلی',
@@ -1271,8 +1280,8 @@ $2
 'last' => 'قبلی',
 'page_first' => 'نخست',
 'page_last' => 'واپسین',
-'histlegend' => 'شرح: (فعلی) = تفاوت با نسخهٔ فعلی،
-(قبلی) = تفاوت با نسخهٔ قبلی، جز = ویرایش جزئی',
+'histlegend' => "انتخاب تفاوت: دکمه‌های گرد کنار ویرایش‌هایی که می‌خواهید با هم مقایسه کنید را علامت بزنید و دکمهٔ Enter را بزنید یا دکمهٔ پایین را فشار دهید.<br />
+اختصارات: '''({{int:cur}})''' = تفاوت با نسخهٔ فعلی، '''({{int:last}})''' = تفاوت با نسخهٔ قبلی، '''({{int:minoreditletter}})''' = ویرایش جزئی.",
 'history-fieldset-title' => 'مرور تاریخچه',
 'history-show-deleted' => 'فقط حذف‌شده',
 'histfirst' => 'قدیمی‌ترین',
@@ -1282,7 +1291,7 @@ $2
 
 # Revision feed
 'history-feed-title' => 'تاریخچهٔ ویرایش‌ها',
-'history-feed-description' => 'تاریخچهٔ ویرایشهای صفحه در ویکی',
+'history-feed-description' => 'تاریخچهٔ ویرایش‌های این صفحه در ویکی',
 'history-feed-item-nocomment' => '$1 در $2',
 'history-feed-empty' => 'صفحهٔ درخواست شده وجود ندارد.
 ممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.
@@ -1291,20 +1300,20 @@ $2
 # Revision deletion
 'rev-deleted-comment' => '(خلاصه ویرایش حذف شد)',
 'rev-deleted-user' => '(نام کاربری حذف شد)',
-'rev-deleted-event' => '(مورد پاک شد)',
+'rev-deleted-event' => '(مورد از سیاهه پاک شده)',
 'rev-deleted-user-contribs' => '[نام کاربری یا نشانی آی‌پی حذف شده - ویرایش مخفی شده در مشارکت‌ها]',
 'rev-deleted-text-permission' => "این ویرایش از این صفحه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-deleted-text-unhide' => "این ویرایش از این صفحه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
 'rev-suppressed-text-unhide' => "این ویرایش از این صفحه '''فرونشانده شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این نسخه را ببینید].",
 'rev-deleted-text-view' => "این ویرایش از این صفحه '''حذف شده‌است'''.
-شما به عنوان یک مدیر می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
+شما می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-text-view' => "این ویرایش از این صفحه '''فرونشانی شده‌است'''.
-شما به عنوان یک مدیر می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
+شما می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
 'rev-deleted-no-diff' => "شما نمی‌توانید این تفاوت را مشاهده کنید زیرا یکی از دو نسخه '''حذف شده‌است'''.
 ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-no-diff' => "شما نمی‌توانید این تفاوت را مشاهده کنید زیرا یکی از نسخه‌ها '''حذف شده‌است'''.",
@@ -1313,11 +1322,11 @@ $2
 شما کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
 'rev-suppressed-unhide-diff' => "یکی از نسخه‌های این تفاوت '''فرونشانی شده‌است'''.
 ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page=سیاههٔ فرونشانی{{FULLPAGENAMEE}}}}] موجود باشد.
-شما به عنوان یک مدیر کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
+شما کماکان می‌توانید در صورت تمایل [$1 این تفاوت را ببینید].",
 'rev-deleted-diff-view' => "یکی از نسخه‌های این تفاوت '''حذف شده‌است'''.
-شما به عنوان یک مدیر کماکان می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
+شما می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
 'rev-suppressed-diff-view' => "یکی از نسخه‌های این تفاوت '''فرونشانی شده‌است'''.
-شما به عنوان یک مدیر کماکان می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
+شما می‌توانید این تفاوت را ببینید؛ ممکن است جزئیاتی در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ فرونشانی] موجود باشد.",
 'rev-delundel' => 'نمایش/نهفتن',
 'rev-showdeleted' => 'نمایش',
 'revisiondelete' => 'حذف/احیای نسخه‌ها',
@@ -1325,7 +1334,7 @@ $2
 'revdelete-nooldid-text' => 'شما نسخه‌های هدف را برای انجام این عمل مشخص نکرده‌اید یا این نسخه‌ها وجود ندارند، یا این که شما می‌خواهید آخرین نسخه را پنهان کنید.',
 'revdelete-nologtype-title' => 'نوع سیاهه مشخص نشده‌است',
 'revdelete-nologtype-text' => 'شما هیچ نوع سیاهه‌ای را برای این کار مشخص نکردید.',
-'revdelete-nologid-title' => 'مدخل غیرمجاز در سیاهه',
+'revdelete-nologid-title' => 'مورد غیرمجاز در سیاهه',
 'revdelete-nologid-text' => 'شما یا رویدادی را در سیاههٔ هدف مشخص نکردید یا موردی را مشخص کردید که وجود ندارد.',
 'revdelete-no-file' => 'پروندهٔ مشخص شده وجود ندارد.',
 'revdelete-show-file-confirm' => 'آیا مطمئن هستید که می‌خواهید یک نسخهٔ حذف شده از پروندهٔ «<nowiki>$1</nowiki>» مورخ $2 ساعت $3 را ببینید؟',
@@ -1374,7 +1383,8 @@ $1",
 'revdelete-only-restricted' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: شما نمی‌توانید موارد را از دید مدیران پنهان کنید مگر آن که یکی دیگر از گزینه‌های پنهان‌سازی را نیز انتخاب کنید.',
 'revdelete-reason-dropdown' => '*دلایل متداول حذف
 ** نقض حق تکثیر
-** اطلاعات فردی نامناسب
+** اظهار نظر یا اطلاعات فردی نامناسب
+** نام کاربری نامناسب
 ** اطلاعات به طور بالقوه افتراآمیز',
 'revdelete-otherreason' => 'دلیل دیگر/اضافی:',
 'revdelete-reasonotherlist' => 'دلیل دیگر',
@@ -1404,8 +1414,8 @@ $1",
 'mergehistory-fail' => 'ادغام تاریخچه ممکن نیست، لطفاً گزینه‌های صفحه و زمان را بازبینی کنید.',
 'mergehistory-no-source' => 'صفحهٔ مبدأ $1 وجود ندارد.',
 'mergehistory-no-destination' => 'صفحهٔ مقصد $1 وجود ندارد.',
-'mergehistory-invalid-source' => 'صفحهٔ مبدأ باید عنوان قابل قبولی داشته باشد.',
-'mergehistory-invalid-destination' => 'صفحهٔ مقصد باید عنوان قابل قبولی داشته باشد.',
+'mergehistory-invalid-source' => 'صفحهٔ مبدأ باید عنوانی معتبر داشته باشد.',
+'mergehistory-invalid-destination' => 'صفحهٔ مقصد باید عنوانی معتبر داشته باشد.',
 'mergehistory-autocomment' => '[[:$1]] را در [[:$2]] ادغام کرد',
 'mergehistory-comment' => '[[:$1]] را در [[:$2]] ادغام کرد: $3',
 'mergehistory-same-destination' => 'صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد',
@@ -1428,6 +1438,10 @@ $1",
 'editundo' => 'خنثی‌سازی',
 'diff-multi' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)',
 'diff-multi-manyusers' => '({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)',
+'difference-missing-revision' => '{{PLURAL:$2|یک ویرایش|$2 ویرایش}}  از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}}  نشد.
+
+معمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.
+می‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.',
 
 # Search results
 'searchresults' => 'نتایج جستجو',
@@ -1449,7 +1463,7 @@ $1",
 'searchmenu-legend' => 'گزینه‌های جستجو',
 'searchmenu-exists' => "'''صفحه‌ای با عنوان \"[[:\$1]]\" در این ویکی وجود دارد.'''",
 'searchmenu-new' => "'''صفحهٔ «[[:$1]]» را در این ویکی بسازید!'''",
-'searchhelp-url' => 'Help:راهنما',
+'searchhelp-url' => 'Help:محتوا',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|مرور صفحه‌های با این پیشوند]]',
 'searchprofile-articles' => 'صفحه‌های محتوایی',
 'searchprofile-project' => 'صفحه‌های راهنما و پروژه',
@@ -1470,8 +1484,6 @@ $1",
 'search-interwiki-caption' => 'پروژه‌های خواهر',
 'search-interwiki-default' => '$1 نتیجه:',
 'search-interwiki-more' => '(بیشتر)',
-'search-mwsuggest-enabled' => 'با پیشنهاد',
-'search-mwsuggest-disabled' => 'هیچ پیشنهادی وجود ندارد',
 'search-relatedarticle' => 'مرتبط',
 'mwsuggest-disable' => 'پیشنهادهای مبتنی بر AJAX را غیرفعال کن',
 'searcheverything-enable' => 'جستجو در تمام فضاهای نام',
@@ -1996,7 +2008,7 @@ $1',
 'backend-fail-internal' => 'خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.',
 'backend-fail-contenttype' => 'تعیین نوع محتوای پرونده برای ذخیره در «$1» ناموفق بود.',
 'backend-fail-batchsize' => 'دسته‌ای مشتمل بر $1 {{PLURAL:$1|عملکرد|عملکرد}} پرونده به پشتیبان ذخیره داده شد؛ حداکثر مجاز $2 {{PLURAL:$2|عملکرد|عملکرد}} است.',
-'backend-fail-usable' => 'امکان نوشتن در پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه مورد نظر وجود ندارد.',
+'backend-fail-usable' => 'امکان خواندن یا نوشتن پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه/محفظهٔ مورد نظر وجود ندارد.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.',
@@ -2132,6 +2144,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'shared-repo-from' => 'از $1',
 'shared-repo' => 'یک مخزن مشترک',
 'shared-repo-name-wikimediacommons' => 'ویکی‌انبار',
+'upload-disallowed-here' => 'متاسفانه شما نمی توانید این نگاره را بازنویس کنید.',
 
 # File reversion
 'filerevert' => 'واگردانی $1',
@@ -2213,8 +2226,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 
 'disambiguations' => 'صفحه‌های دارای پیوند به صفحه‌های ابهام‌زدایی',
 'disambiguationspage' => 'Template:ابهام‌زدایی',
-'disambiguations-text' => "صفحه‌های زیر پیوندی به یک '''صفحهٔ ابهام‌زدایی''' هستند.
-اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ø¨اید در عوض به موضوعات مرتبط پیوند داده شوند.<br />
+'disambiguations-text' => "صفحه‌های زیر حاوی حداقل یک پیوند به یک '''صفحهٔ ابهام‌زدایی''' هستند.
+اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ø´اید در عوض به موضوعات مرتبط پیوند داده شوند.<br />
 یک صفحه هنگامی صفحهٔ ابهام‌زدایی در نظر گرفته می‌شود که در آن از الگویی که به [[MediaWiki:Disambiguationspage]] پیوند دارد استفاده شده باشد.",
 
 'doubleredirects' => 'تغییرمسیرهای دوتایی',
@@ -2240,6 +2253,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 # 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|نسخه|نسخه}}',
@@ -2268,6 +2282,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'mostlinkedtemplates' => 'الگوهایی که بیشتر از همه به آن‌ها پیوند داده شده‌است',
 'mostcategories' => 'صفحه‌های دارای بیشترین رده',
 'mostimages' => 'پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است',
+'mostinterwikis' => 'صفحه‌های دارای بیشترین میان‌ویکی',
 'mostrevisions' => 'صفحه‌های دارای بیشترین نسخه',
 'prefixindex' => 'تمام صفحه‌ها با پیشوند',
 'prefixindex-namespace' => 'همهٔ صفحه‌های دارای پیشوند (فضای‌نام $1)',
@@ -2414,6 +2429,8 @@ 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' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این کاربر استفاده کنید.
 نشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.',
@@ -2667,7 +2684,7 @@ $NEWPAGE
 'undeleterevision-missing' => 'نسخه نامعتبر یا مفقود است.
 ممکن است پیوندتان نادرست باشد یا اینکه نسخه از بایگانی حذف یا بازیابی شده باشد .',
 'undelete-nodiff' => 'نسخهٔ قدیمی‌تری یافت نشد.',
-'undeletebtn' => 'احیا شود',
+'undeletebtn' => 'احیا',
 'undeletelink' => 'نمایش/احیا',
 'undeleteviewlink' => 'نمایش',
 'undeletereset' => 'از نو',
@@ -3066,6 +3083,7 @@ $1',
 'import-interwiki-templates' => 'تمام الگوها را شامل شود',
 'import-interwiki-submit' => 'درون‌ریزی شود',
 'import-interwiki-namespace' => 'فضای نام مقصد:',
+'import-interwiki-rootpage' => 'مقصد صفحه ٔ مبنا (اختیاری):',
 'import-upload-filename' => 'نام پرونده:',
 'import-comment' => 'توضیح:',
 'importtext' => 'لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برون‌بری]] دریافت کنید.
@@ -3100,6 +3118,9 @@ $1',
 'import-error-interwiki' => 'صفحه «$1» وارد نشد. چون نام آن برای پیوند خارجی (interwiki) رزرو شده‌است.',
 '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' => 'سیاههٔ درون‌ریزی‌ها',
@@ -3111,7 +3132,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'آزمایش جاوا اسکریپت',
-'javascripttest-disabled' => 'این عملکرد در این ویکی فعال نشده‌است.',
 'javascripttest-title' => 'در حال اجرای آزمایش‌های $1',
 'javascripttest-pagetext-noframework' => 'این صفحه برای اجرای آزمایش‌های جاوا اسکریپت کنار گذاشته شده‌است.',
 'javascripttest-pagetext-unknownframework' => 'چارچوب آزمایشی ناشناخته «$1».',
@@ -3211,8 +3231,8 @@ $1',
 
 # Spam protection
 'spamprotectiontitle' => 'پالایهٔ هرزنگاری‌ها',
-'spamprotectiontext' => 'از ذخیره کردن صفحه توسط صافی هرزنگاری‌ها جلوگیری شد.
\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 Ø¬Ø¯Û\8cد ØµÙ\81Ø­Ù\87Ø\8c Ø­Ø§Ù\88Û\8c Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¨Ù\87 Û\8cÚ© Ù\86شاÙ\86Û\8c Ù\88ب Ø®Ø§Ø±Ø¬Û\8c Ø¨Ø§Ø´د.',
+'spamprotectiontext' => 'از ذخیره کردن صفحه توسط پالایهٔ هرزنگاری‌ها جلوگیری شد.
\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 Ø¬Ø¯Û\8cد ØµÙ\81Ø­Ù\87Ø\8c Ø­Ø§Ù\88Û\8c Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¨Ù\87 Û\8cÚ© Ù\86شاÙ\86Û\8c Ù\88ب Ø¨Ø§Ø´Ø¯ Ú©Ù\87 Ø¯Ø± Ù\81Ù\87رست Ø³Û\8cاÙ\87 Ù\82رار Ø¯Ø§Ø±د.',
 'spamprotectionmatch' => 'متن زیر چیزی‌است که پالایهٔ هرزه‌نگاری ما را به کارانداخت: $1',
 'spambot_username' => 'هرزه‌تمیزکارِ مدیاویکی',
 'spam_reverting' => 'واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.',
@@ -3221,11 +3241,34 @@ $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' => 'شناسهٔ صفحه',
+'pageinfo-robot-policy' => 'وضعیت موتور جستجو',
+'pageinfo-robot-index' => 'فهرست‌پذیر',
+'pageinfo-robot-noindex' => 'عدم فهرست‌پذیری',
 'pageinfo-views' => 'شمار بازدیدها',
-'pageinfo-watchers' => 'شمار پی‌گیری‌کنندگان',
-'pageinfo-edits' => 'شمار ویرایش‌ها',
-'pageinfo-authors' => 'شمار نویسندگان یکتا',
+'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' => 'اطلاعات صفحه',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -3281,6 +3324,7 @@ $1',
 'file-info-size-pages' => '<span style="direction:ltr">$1 × $2</span> نقطه، حجم پرونده: $3، نوع MIME پرونده: $4، $5 صفحه',
 'file-nohires' => 'تفکیک‌پذیری بالاتری در دسترس نیست.',
 'svg-long-desc' => 'پروندهٔ اس‌وی‌جی، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
+'svg-long-desc-animated' => 'پروندهٔ اس‌وی‌جی متحرک، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
 'show-big-image' => 'تصویر با تفکیک‌پذیری بالاتر',
 'show-big-image-preview' => 'اندازهٔ این پیش‌نمایش: $1.',
 'show-big-image-other' => '{{PLURAL:$2|کیفیت|کیفیت‌های}} دیگر: $1.',
@@ -3290,6 +3334,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' => 'نگارخانهٔ پرونده‌های جدید',
@@ -3318,7 +3364,7 @@ $1',
 پیوندهایی بعدی در همان سطر استثنا در نظر گرفته می‌شوند.',
 
 # Metadata
-'metadata' => 'Ù\85تاداده',
+'metadata' => 'Ù\81راداده',
 'metadata-help' => 'این پرونده حاوی اطلاعات اضافه‌ای‌است که احتمالاً دوربین دیجیتال یا پویشگری که در ایجاد یا دیجیتالی‌کردن آن به کار رفته آن را افزوده‌است. اگر پرونده از وضعیت ابتدایی‌اش تغییر داده شده باشد آنگاه ممکن است شرح و تفصیلات موجود اطلاعات تصویر را تماماً بازتاب ندهد.',
 'metadata-expand' => 'نمایش جزئیات تفصیلی',
 'metadata-collapse' => 'نهفتن جزئیات تفصیلی',
@@ -3802,6 +3848,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[تراگنجانش بین‌ویکیانه فعال نیست]',
 'scarytranscludefailed' => '[فراخوانی الگو برای $1 میسر نشد]',
+'scarytranscludefailed-httpstatus' => '[فراخوانی الگو برای $1 میسر نشد: خطای اچ‌تی‌تی‌پی $2]',
 'scarytranscludetoolong' => '[نشانی اینترنتی مورد نظر (URL) بیش از اندازه بلند بود]',
 
 # Delete conflict
@@ -3858,7 +3905,7 @@ $5
 'size-gigabytes' => '$1 گیگابایت',
 
 # Live preview
-'livepreview-loading' => 'در حال بارشدن…',
+'livepreview-loading' => 'در حال بارگیری…',
 'livepreview-ready' => 'بارشدن… آماده!',
 'livepreview-failed' => 'پیش‌نمایش زنده به مشکل برخورد! لطفاً از پیش‌نمایش عادی استفاده کنید',
 'livepreview-error' => 'ارتباط به مشکل برخورد: $1 "$2" از پیش‌نمایش عادی استفاده کنید.',
@@ -4140,6 +4187,10 @@ $5
 'feedback-bugcheck' => 'عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.',
 'feedback-bugnew' => 'بررسی کردم. ایرادی جدید را گزارش بده',
 
+# Search suggestions
+'searchsuggest-search' => 'جستجو',
+'searchsuggest-containing' => 'صفحه‌های دربردارنده...',
+
 # API errors
 'api-error-badaccess-groups' => 'شما اجازهٔ بارگذاری پرونده‌ها را در این ویکی ندارید.',
 'api-error-badtoken' => 'خطای داخلی: کد امنیتی اشتباه (Bad token).',
index 8309848..45ce3eb 100644 (file)
  * @ingroup Language
  * @file
  *
+ * @author Amire80
  * @author Amkoullel
  * @author Guaka (on ff.wikipedia.org)
+ * @author Ibrahima
  */
 
 $fallback = 'fr';
 
 $messages = array(
+# User preference toggles
+'tog-underline' => 'Diidtol jokke',
+'tog-justify' => 'Fonndito lelnanɗe',
+'tog-hideminor' => 'Duuɗ taƴtanɗe pamare e bayle cakkitiiɗe',
+'tog-hidepatrolled' => 'Suuɗ taƴtanɗe deenaaɗe ɗee e bayle cakkitiiɗe',
+'tog-newpageshidepatrolled' => 'Suuɗ kelle deenaaɗe e doggol kelle kese',
+'tog-extendwatchlist' => 'Wertu doggol ndeenka ngam hollude bayle fof, wonaa tan cakkitiiɗe',
+'tog-usenewrc' => 'Renndin bayle e hello e bayle cakkitiiɗe kañum e doggol ndeenka (ena naamnii Javascritp)',
+'tog-numberheadings' => 'Ɓeydi limoore tiitooɗe e jaajol',
+'tog-showtoolbar' => 'Hollu palal taƴtorde (ena naamnii JavaScript)',
+'tog-editondblclick' => 'Taƴto kelle e dobtitannde (ena naamnii Javascritp)',
+
+'underline-default' => 'Goowaaɗe wanngorde',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'Pannol ponte boowal taƴtorgal',
+'editfont-default' => 'Goowaaɗe wanngorde',
+
+# Dates
+'sunday' => 'Dewo',
+'monday' => 'Aaɓnde',
+'tuesday' => 'Mawbaare',
+'wednesday' => 'Njeslaare',
+'thursday' => 'Naasaande',
+'friday' => 'Mawnde',
+'saturday' => 'Hoore-Biir',
+'sun' => 'Dew',
+'mon' => 'Aaɓ',
+'tue' => 'Maw',
+'wed' => 'Nje',
+'thu' => 'Naa',
+'fri' => 'Mde',
+'sat' => 'Hoo',
+'january' => 'Siilo',
+'february' => 'Colte',
+'march' => 'MBooy',
+'april' => 'Seeɗto',
+'may_long' => 'Duujal',
+'june' => 'Korse',
+'july' => 'Morso',
+'august' => 'Juko',
+'september' => 'Siilto',
+'october' => 'Yarkomaa',
+'november' => 'Jolal',
+'december' => 'Bowte',
+'january-gen' => 'Siilo',
+'february-gen' => 'Colte',
+'march-gen' => 'Mbooy',
+'april-gen' => 'Seeɗto',
+'may-gen' => 'Duujal',
+'june-gen' => 'Korse',
+'july-gen' => 'Morso',
+'august-gen' => 'Juko',
+'september-gen' => 'Siilto',
+'october-gen' => 'Yarkomaa',
+'november-gen' => 'Jolal',
+'december-gen' => 'Bowte',
+'jan' => 'Sii',
+'feb' => 'Col',
+'mar' => 'Mbo',
+'apr' => 'See',
+'may' => 'Duu',
+'jun' => 'Kor',
+'jul' => 'Mor',
+'aug' => 'Juk',
+'sep' => 'Sto',
+'oct' => 'Yar',
+'nov' => 'Jol',
+'dec' => 'Bow',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|Fedde|Pelle}}',
+'category_header' => 'Kelle e fedde "$1"',
+'subcategories' => 'Taƴte pelle',
+'hidden-categories' => '{{PLURAL:$1|Fedde suuɗiinde|Pelle cuuɗiiɗe}}',
+'listingcontinuesabbrev' => 'jokku',
+'noindex-category' => 'Kello njoopaaka',
+
 'mytalk' => 'kaldigal am',
+'navigation' => 'Peeragol',
+
+# Vector skin
+'vector-action-addsection' => 'Ɓeydi toɓɓere',
+'vector-action-move' => 'Dirtin',
+'vector-view-edit' => 'Taƴto',
+'vector-view-history' => 'Yiyto aslol',
+'vector-view-view' => 'Tar',
+'actions' => 'Baɗe',
+'namespaces' => 'Boowal inɗe',
+'variants' => 'Lomtooɗe',
 
-'help'             => 'Ballal',
-'history_short'    => 'Tarik',
-'edit'             => 'Wallifaade',
-'talkpagelinktext' => 'Kaldigal',
-'talk'             => 'Kaldigal',
-'toolbox'          => 'Wakannde gollirɗe',
-'otherlanguages'   => 'ɗemɗe goɗe',
-'jumptosearch'     => 'Ɗaɓɓitugol',
+'errorpagetitle' => 'Juumre',
+'returnto' => 'Rutto to $1.',
+'tagline' => 'Iwde to {{SITENAME}}',
+'help' => 'Ballal',
+'search' => 'Yiylo',
+'searchbutton' => 'Yiylo',
+'searcharticle' => 'Tar',
+'history_short' => 'Tarik',
+'printableversion' => 'Yamre winndittoonde',
+'permalink' => 'Jokkol duumingol',
+'view' => 'Yiyto',
+'edit' => 'Wallifaade',
+'create' => 'Sos',
+'editthispage' => 'Taƴto ngoo hello',
+'create-this-page' => 'Sos ngoo hello',
+'delete' => 'Momtu',
+'deletethispage' => 'Momtu ngoo hello',
+'protect' => 'Hisnu',
+'protect_change' => 'waylu',
+'protectthispage' => 'Hisnu ngoo hello',
+'unprotect' => 'Waylu kisnugol',
+'unprotectthispage' => 'Waylu kisnugol e ngoo hello',
+'newpage' => 'Hello heso',
+'talkpage' => 'Yeewtu baɗte ngoo hello',
+'talkpagelinktext' => 'Yeewtere',
+'specialpage' => 'Hello heeriingo',
+'personaltools' => 'Kuutorɗe maa keeriiɗe',
+'postcomment' => 'Taƴre hesere',
+'articlepage' => 'Yiyto hello loowdi ngoo',
+'talk' => 'Kaldigal',
+'views' => 'Jiyte',
+'toolbox' => 'Wakannde gollirɗe',
+'userpage' => 'Yiyto hello kuutoro',
+'projectpage' => 'Yiyto hello eɓɓoore',
+'imagepage' => 'Yiyto hello fiilde',
+'mediawikipage' => 'Yiyto hello ɓatakuure ndee',
+'templatepage' => 'Yiyto hello tiimtorde',
+'viewhelppage' => 'Yiyto hello ballal',
+'categorypage' => 'Yiyto hello fedde',
+'viewtalkpage' => 'Yiyto yeewtere',
+'otherlanguages' => 'ɗemɗe goɗe',
+'redirectedfrom' => '(Yiitannde iwde e $1)',
+'redirectpagesub' => 'Hello jiiltugol',
+'lastmodifiedat' => 'Ngoo hello waylaa ko ñalnde $1 sahnga $2.',
+'viewcount' => 'Ngoo hello yillaama laabi $1.',
+'protectedpage' => 'Hello hisnaango',
+'jumpto' => 'Diw fayde:',
+'jumptonavigation' => 'peeragol',
+'jumptosearch' => 'Ɗaɓɓitugol',
+'view-pool-error' => 'Ɗaccu hakke, carworɗe ɗee ko keewraa oo sahaa.
+Etotooɓe yillaade ngoo hello keewii haa ɓurti.
+Tiiɗno sabbo seeɗa hade maa etaade naatde e hello ngoo kadi.',
+'pool-timeout' => 'Sahaa ɓennii fade geƴƴol',
+'pool-queuefull' => 'Doggol golle ko keewngol',
+'pool-errorunknown' => 'Juumre nde heftinaaka',
 
 # 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).
-'currentevents'        => 'Tawtoraɗi',
-'currentevents-url'    => 'Project:Tawtoraɗi',
-'mainpage'             => 'Hello jaɓɓorgo',
+'aboutsite' => 'Baɗte {{SITENAME}}',
+'aboutpage' => 'Project:Baɗte',
+'copyright' => 'Loowdi ena heɓoo les $1.',
+'copyrightpage' => '{{ns:project}}:Copyrights',
+'currentevents' => 'Tawtoraɗi',
+'currentevents-url' => 'Project:Tawtoraɗi',
+'disclaimers' => 'Deentine',
+'disclaimerpage' => 'Project:Deentine kuuɓtidinɗe',
+'edithelp' => 'Ballal Taƴtagol',
+'edithelppage' => 'Help:Taƴtagol',
+'helppage' => 'Help:Loowdi',
+'mainpage' => 'Hello jaɓɓorgo',
 'mainpage-description' => 'Hello jaɓɓorgo',
-'portal'               => 'Jaɓɓogol renndo',
+'policy-url' => 'Eɓɓoore:Dawirgol',
+'portal' => 'Jaɓɓogol renndo',
+'portal-url' => 'Project:Damugal renndo',
+'privacy' => 'Dawirgol suturo',
+'privacypage' => 'Project:Dawirgol suturo',
+
+'badaccess' => 'Juumre jamirooje',
+'badaccess-group0' => 'A yamiraaka siynude gollal naamni-ɗaa ngal.',
+
+'ok' => 'OK',
+'retrievedfrom' => 'Ittaa ko to "$1"',
+'youhavenewmessages' => 'A heɓii $1 ($2).',
+'newmessageslink' => 'ɓatakuuje kese',
+'newmessagesdifflink' => 'baylol cakkitiingol',
+'youhavenewmessagesmulti' => 'A heɓii ɓatakuuje kese e $1',
+'editsection' => 'taƴto',
+'editold' => 'taƴto',
+'viewsourceold' => 'yiyto ɗaɗol',
+'editlink' => 'taƴto',
+'viewsourcelink' => 'yiyto ɗaɗol',
+'editsectionhint' => 'Taƴto rogere: $1',
+'toc' => 'Loowdi',
+'showtoc' => 'hollu',
+'hidetoc' => 'suuɗ',
+'collapsible-collapse' => 'Taggu',
+'collapsible-expand' => 'Wertu',
+'thisisdeleted' => 'Yiyto walla artir $1?',
+'viewdeleted' => 'Yiyto $1?',
+'feedlinks' => 'Balol',
+'feed-invalid' => 'Lulnannde fannu balol moƴƴaani',
+'feed-unavailable' => 'Bale lultinorde ɗee keɓotaako',
+'site-rss-feed' => '$1 balol RSS',
+'site-atom-feed' => 'Balol Atom $1',
+'page-rss-feed' => '"$1" balol RSS',
+'page-atom-feed' => '"$1" balol Atom',
+'red-link-title' => '$1 (hello ngoo woodaani)',
+'sort-descending' => 'Leemto telloo',
+'sort-ascending' => 'Leemto faya dow',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Winndannde',
+'nstab-user' => 'Hello kuutoro',
+'nstab-media' => 'Hello Mejaaje',
+'nstab-special' => 'Hello heeriingo',
+'nstab-project' => 'Hello eɓɓoore',
+'nstab-image' => 'Fiilde',
+'nstab-mediawiki' => 'Ɓatakuure',
+'nstab-template' => 'Tiimtorde',
+'nstab-help' => 'Hello ballal',
+'nstab-category' => 'Fedde',
+
+# Main script and global functions
+'nosuchaction' => 'Ngal baɗal anndaaka',
+'nosuchactiontext' => 'Baɗal joopagnal e URL ngal moƴƴaani.
+Maa taw w juum e mbinndiin URL oo, walla ndew-ɗaa ko e jokkol taƴngol.
+Ɗuum kadi ena waawi wonde buggere e topirde huutoraande e {{SITENAME}}.',
+'nosuchspecialpage' => 'Ngoo hello heeriingo woodaani',
+'nospecialpagetext' => '<strong>A naamniima hello heeriingo ngo woodaani.</strong>
+Doggol kelle ɗe moƴƴaani ena tawee to [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Faljere',
+'databaseerror' => 'Juumre ruttorde keɓe',
+'dberrortext' => 'Juumre lelngo ɗaɓɓitannde keɓe waɗii.
+Ɗuum kadi ena waawi wonde buggere e topirde ndee.
+Ɗaɓɓitannde keɓe sakkitiinde eteede wonnoo ko:
+<blockquote><code>$1</code></blockquote>
+iwde e golloore "<code>$2</code>".
+Ruttorde keɓe ruttinii juumre "<samp>$3: $4</samp>".',
+'missing-article' => 'Ruttorde keɓe ndee yiytaani loowdi hello ndi nde fotnoo yiytude, ena inniraa "$1" $2.
+
+Heewi waɗde noon ko diff nayeejo walla jokkol aslol fayde e hello momtaango.
+
+So wonaa ɗuum, maataw ko a kawruɗo e buggere e topirde ndee.
+Tiiɗno jaŋto ɗum to [[Special:ListUsers/sysop|jiiloowo]] mbaasaa yejjitde URL jokkol ngol.',
+'badtitle' => 'Tiitoonde moƴƴaani',
+'badtitletext' => 'Tiitoonde ello ɗaɓɓitaango ngoo moƴƴaani, ko mehre, walla ko hakkude-ɗemɗe jokkoraade no feewaani walla tiitoonde hakkude-wiki',
+
+# Login and logout pages
+'yourname' => 'Innde Kuutoro',
+'yourpassword' => 'Finnde:',
+'remembermypassword' => 'Siiftor ceŋagol am e ndee wanngorde (so heewii ko {{PLURAL:$1|ñalawma|balɗe}}$1)',
+'login' => 'Seŋo',
+'nav-login-createaccount' => 'Seŋo / uddit konte',
+'loginprompt' => 'Alaa e sago kurminaa kukiije ngam seŋaade e {{SITENAME}}.',
+'userlogin' => 'Seŋo / uddit konte',
+'nologin' => 'A alaa konte tawo? $1.',
+'nologinlink' => 'Uddit konte',
+'mailmypassword' => 'Neldu finnde hesere e iimeel',
+'loginlanguagelabel' => 'Ɗemngal: $1',
 
 # Edit pages
+'preview' => 'Yiytindo',
 'newarticle' => '(Kesi)',
+'newarticletext' => 'A rewii e jokkol feewde e hello ngo woodaani tawo.
+Ngam sosde hello ngoo, fuɗɗo tappude e gallol les ngol (Yah to [[{{MediaWiki:Helppage}}|help page]] ngam ɓeydude humpito).',
+'noarticletext' => 'Ngoo hello alaa tawo hay binndol.
+Aɗa waawi [[Special:Search/{{PAGENAME}}|weddo njiilaw e tiitoonde mayre]] e kello goɗɗe,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} yiylo logge toɗɗiiɗe ɗum],
+walla [{{fullurl:{{FULLPAGENAME}}|action=edit}} taƴto hello ngoo]</span>.',
+'editingsection' => 'Taƴtagol $1 (taƴre)',
+'templatesused' => '{{PLURAL:$1|Tiimtorde|Tiimtorɗe}} kuutoraaɗe e ngoo hello:',
+'template-protected' => 'ko-ko hisnaa',
+'template-semiprotected' => '(ena hisnaa feccere)',
+'hiddencategories' => 'Ngoo hello jeyaa ko e {{PLURAL:$1|1 fedde suuɗiinde|$1 pelle cuuɗiiɗe}}:',
+
+# Parser/template warnings
+'post-expand-template-argument-warning' => "'''Warning:''' Ngoo hello ena jogii daliilu tiimtorde jogiiɗo ɓetol layo mawngol haa ɓurti.
+Ɗiin dalillaaji nduulaama.",
+'post-expand-template-argument-category' => 'Kelle jogiiɗe dalillaaji tiimtorde jejjitaaɗe',
+
+# History pages
+'viewpagelogs' => 'Yiyto loge ngoo hello',
+'revisionasof' => 'Waylitannde $1',
+'histlegend' => 'Cifol : ({{int:cur}}) = ko seerti e yamre wonaande ndee, ({{int:last}}) = ko seerti e yamre ɓennunde ndee, <b>{{int:minoreditletter}}</b> = baylital pamaral',
+'history-fieldset-title' => 'Feero e aslol',
+'history-show-deleted' => 'Momtaaɗi tan',
+'histfirst' => 'Hello adanngo',
+
+# Revision deletion
+'revdel-restore' => 'waylu jiyagol',
+'revdel-restore-visible' => 'baylitte jiyotooɗe',
+
+# Merge log
+'revertmerge' => 'Ittu renndino',
+
+# Diffs
+'history-title' => 'Aslol baylitte "$1"',
+'lineno' => 'Gorol $1:',
+'compareselectedversions' => 'Yerondir baylitte labaaɗe',
+'editundo' => 'firtu',
+
+# Search results
+'searchresults' => 'Yiylo e njaltudi',
+'searchresults-title' => 'Yiylo "$1" e njaltudi',
+'prevn' => 'caggal {{PLURAL:$1|$1}}',
+'nextn' => 'yeeso {{PLURAL:$1|$1}}',
+'prevn-title' => 'Caggal $1 {{PLURAL:$1|njaltudi|jaltuɗe}}',
+'nextn-title' => 'Yeeso $1 {{PLURAL:$1|njaltudi|jaltuɗe}}',
+'shown-title' => 'Hollu $1 {{PLURAL:$1|njaltudi|jaltuɗe}} e hello fof',
+'viewprevnext' => 'Yiyto ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Ena woodi hello ena wiyee \"[[:\$1]]\" e oo wiki.'''",
+'searchprofile-articles' => 'Kello loowdi',
+'searchprofile-project' => 'Hello ballal e Eɓɓoore',
+'searchprofile-images' => 'Sawmejaajo',
+'searchprofile-everything' => 'Fofof',
+'searchprofile-advanced' => 'Ceeɓtore',
+'searchprofile-articles-tooltip' => 'Yiylo e $1',
+'searchprofile-project-tooltip' => 'Yiylo e $1',
+'searchprofile-images-tooltip' => 'Yiylo piille',
+'searchprofile-everything-tooltip' => 'Yiylo loowdi fof (waɗoe heen kelle jeewte)',
+'searchprofile-advanced-tooltip' => 'Yiylo e boowe inɗe peŋtore',
+'search-result-size' => '$1 ({{PLURAL:$2|helmere 1|kelme$ 2}})',
+'search-redirect' => '(yiiltu $1)',
+'search-section' => '(taƴre $1)',
+'searchall' => 'fof',
+'showingresultsheader' => "{{PLURAL:$5|Njaltudi'''$1''' of '''$3'''|Jaltuɗe'''$1 - $2''' of '''$3'''}} for '''$4'''",
 
 # Recent changes
 'recentchanges' => 'Wailitooji kesi',
+'recentchanges-legend' => 'Cuɓe bayle cakkitiiɗe',
+'recentchanges-label-newpage' => 'Ngoo taƴto sosii hello heso',
+'recentchanges-label-bot' => 'Ngoo taƴto waɗi ɗum ko botol',
+'recentchanges-label-unpatrolled' => 'Ngoo taƴto suwaa tawo ƴeewteede',
+'rclistfrom' => 'Hollu bayle kese puɗɗiiɗe gila $1',
+'rclinks' => 'Hollu bayle $1 cakkitiiɗe baɗaaɗe e balɗe $2 ɓannuɗe ɗee<br />$3',
+'diff' => 'ceer',
+'hist' => 'aslol',
+'rc-enhanced-expand' => 'Hollu cariiɗe (ena naamnii JavaScript)',
+'rc-enhanced-hide' => 'Suuɗ cariiɗe',
+
+# Recent changes linked
+'recentchangeslinked' => 'Bayle toɗɗiiɗe ɗum',
+'recentchangeslinked-toolbox' => 'Bayle toɗɗiiɗe ɗee',
+'recentchangeslinked-title' => 'Bayle toɗɗiiɗe "$1"',
+'recentchangeslinked-noresult' => 'Alaa bayle ngoni e hello jokkiingo ngoo e dumunna joopaaɗo oo.',
+'recentchangeslinked-page' => 'Innde hello:',
+'recentchangeslinked-to' => 'Hollu bayle kelle jokkaaɗe e hello toɗɗaango ngoo kisa',
 
 # Upload
+'upload' => 'Yollu fiilde',
 'uploaderror' => 'Faljere',
+'filedesc' => 'Tonngol',
+
+# File description page
+'filehist' => 'Aslol fiilde',
+'imagelinks' => 'Kuutorgol fiilde',
+'nolinkstoimage' => 'Alaa kelle jokkiiɗe e ndee fiilde.',
 
 # Random page
 'randompage' => 'Ɗerewol kawral',
 
+# Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|bitere|bite}}',
+'nmembers' => '$1 {{PLURAL:$1|tergal|terɗe}}',
+'newpages' => 'Kelle kese',
+'pager-newer-n' => '{{PLURAL:$1|kesol 1|kesi $1}}',
+'pager-older-n' => '{{PLURAL:$1|ɓennungol 1|ɓennuɗi $1}}',
+
+# Book sources
+'booksources' => 'Sewnde defte',
+
+# Special:Log
+'log' => 'Loge',
+
 # Special:AllPages
 'allarticles' => 'Winndannde hesere',
 
+# Special:LinkSearch
+'linksearch-line' => '$1 ko-ko jokkaa e $2',
+
 # Watchlist
+'watchlist' => 'Doggol ndeenka am',
 'watch' => 'Rewindaande',
+'unwatch' => 'Darin rewindo',
+
+# Delete
+'actioncomplete' => 'Gollal timmii',
+'actionfailed' => 'Gollal woorii',
+'dellogpage' => 'Logagol momtaaɗe',
+
+# Rollback
+'rollbacklink' => 'riiwtu',
+
+# Undelete
+'undeletelink' => 'yiyto/artir',
+
+# Namespace form on various pages
+'blanknamespace' => '(Dowrowo)',
+
+# Contributions
+'contributions' => 'Ballitte kuutoro',
+'month' => 'Tuggi nduu lewru (e ɓennuɗi):',
+'year' => 'Tuggi ndee hitaande (e ɓennuɗe):',
 
 'sp-contributions-talk' => 'Kaldigal',
 
+# What links here
+'whatlinkshere' => 'Ko jokkii ɗoo',
+'whatlinkshere-title' => 'Kello jokkiiɗe e "$1"',
+'whatlinkshere-page' => 'Hello:',
+'linkshere' => "Kelle ɗee-ɗoo jokkii ko to '''[[:$1]]''':",
+'isredirect' => 'hello yiiltorde',
+'istemplate' => 'naattine',
+'isimage' => 'jokkol fiilde',
+'whatlinkshere-prev' => '{{PLURAL:$1|caggal|caggal $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|yeeso|yeeso $1}}',
+'whatlinkshere-links' => '← jokke',
+'whatlinkshere-hideredirs' => '$1 jiiltanɗe',
+'whatlinkshere-hidetrans' => '$1 naattine',
+'whatlinkshere-hidelinks' => '$1 jokke',
+'whatlinkshere-filters' => 'Ceɗe',
+
+# Block/unblock
+'blocklink' => 'daaƴ',
+'unblocklink' => 'daaƴtu',
+'change-blocklink' => 'wayli daaƴo',
+'contribslink' => 'ballitte',
+
+# Move page
+'movelogpage' => 'Dirtin loge',
+'revertmove' => 'firlit',
+
+# Namespace 8 related
+'allmessagesname' => 'Innde',
+'allmessagesdefault' => 'Binndo ɓatakuru goowangol',
+
+# Thumbnails
+'thumbnail-more' => 'Mawnin',
+'thumbnail_error' => 'Juumre waɗii e cosgol dooɓre $1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'Hello kuutoro maa',
+'tooltip-pt-mytalk' => 'Hello jeewte maa',
+'tooltip-pt-preferences' => 'Cuɓoraaɗe maa',
+'tooltip-pt-watchlist' => "Doggol kelle ɗe ngon-ɗaa e ƴeewtaade bayle mum'en",
+'tooltip-pt-mycontris' => 'Doggol ballitte maa',
+'tooltip-pt-login' => 'Aɗa wasiyaa yo a seŋo; kono waɗɗaaki',
+'tooltip-pt-logout' => 'Seŋto',
+'tooltip-ca-talk' => 'Yeewtere baɗte hello loowdi ngoo',
+'tooltip-ca-edit' => 'Aɗa waawi taƴtaade ngoo hello. Tiiɗno huutoro butoŋ yiytindo oo hade maa danndude',
+'tooltip-ca-viewsource' => 'Ngoo hello ko hisnaango.
+Aɗa waawi yiytaade ɗaɗol maggo.',
+'tooltip-ca-history' => 'Baylitte ɓennuɗe e  ngoo hello',
+'tooltip-ca-protect' => 'Hisnu ngoo hello',
+'tooltip-ca-delete' => 'Momtu ngoo hello',
+'tooltip-ca-unwatch' => 'Momtu ngoo hello e doggol ndeenka maa',
+'tooltip-search' => 'Yiylo e {{SITENAME}}',
+'tooltip-search-fulltext' => 'Yiylo ndii loowdi e kelle ɗee',
+'tooltip-p-logo' => 'Yillo hello jaɓɓorgo ngoo',
+'tooltip-n-mainpage' => 'Yillo hello jaɓɓorgo ngoo',
+'tooltip-n-mainpage-description' => 'Yillo hello jaɓɓorgo ngoo',
+'tooltip-n-portal' => 'Baɗte eɓɓoore ndee, hol ko mbaaw-ɗaa waɗde, hol to njiytataa geɗe',
+'tooltip-n-currentevents' => 'Yiylo humpito yawtungo toɗɗiingo ɗee joljole',
+'tooltip-n-recentchanges' => 'Doggol bayle cakkitiiɗe e Wiki hee',
+'tooltip-n-randompage' => 'Loow hello hawraango',
+'tooltip-n-help' => 'Ko ɗoo yiytetee',
+'tooltip-t-whatlinkshere' => 'Doggol kelle Wiki jokkaaɗe ɗoo ɗee fof',
+'tooltip-t-recentchangeslinked' => 'Bayle cakkitiiɗe e kelle jokkaaɗe e ngoo hello',
+'tooltip-t-contributions' => 'Doggol ballitte oo kuutoro',
+'tooltip-t-upload' => 'Yollu piille',
+'tooltip-t-specialpages' => 'Doggol kelle keeriiɗe fof',
+'tooltip-t-print' => 'Jame binndittooɗe ngoo hello',
+'tooltip-t-permalink' => 'Jokkol duumingol e baylital ngoo hello',
+'tooltip-ca-nstab-main' => 'Yiyto hello loowdi ngoo',
+'tooltip-ca-nstab-user' => 'Yiyto hello kuutoro',
+'tooltip-ca-nstab-project' => 'Yiyto hello eɓɓoore ngoo',
+'tooltip-ca-nstab-image' => 'Yiyto hello fiilde ngoo',
+'tooltip-minoredit' => 'Maanto ɗum ko taƴto famaro',
+'tooltip-compareselectedversions' => 'Ƴeew ko seerndi hakkunde baylitte ɗiɗi ngoo hello labaaɗe ɗee',
+'tooltip-watch' => 'Ɓeydu ngoo hello e doggol ndeenka maa',
+'tooltip-rollback' => '"Riiwtude" firlittu taƴte  ngoo hello ruttoo to battindiiɗo waylude ngo e dobannde wootere',
+'tooltip-undo' => '"Firtu" artirtu ngol taƴtol tee uddita gallol taƴto ngol e mbaydi yiytindo. Nafata ko ɓeydude daliilu e tonngol ngol.',
+
+# Browsing diffs
+'previousdiff' => 'Taƴte ɓennungol',
+
+# Media information
+'file-nohires' => 'Werngo ɓurngo ɗoo toowde alaa.',
+'svg-long-desc' => 'Fiilde SVG, werngo mum ko $1 × $2 pikelle, ɓetol fiildee: $3',
+
 # Special:NewFiles
 'ilsubmit' => 'Yiilaade',
 
+# Bad image list
+'bad_image_list' => 'Mbayka kaa ko nih yahri:
+
+Reggin teme tan (kelle puɗɗoriiɗe *) ena kiisaa.
+Jokkol gadanol e gorol foti wonde ko jokkol fiilde nde moƴƴaani.
+Kala jokkol dewngol e ngool gorol nanngiraa ko paltooje, wano kelle ɗo fiilde ndee waawi yaltude.',
+
+# Metadata
+'metadata-help' => 'Ngoo hello ena waɗi humpito woɗngo, tawata ko ummii ko e kameraa numerik walla niiwtorde huutoraande ngam sosde walla ngaanndinde nde.',
+'metadata-fields' => 'Galli metaakeɓe natal gongal nde nduu ɓaakuru maa naatine e jaytinol hello natal tuma nde haatumeere metaakeɓe ndee taggitaa.
+Goɗɗe maa cuuɗe e sahaa kala.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
+# External editor support
+'edit-externally' => 'Taƴto ndee fiilde huutoraade jaaɓnirgal jiggangal',
+'edit-externally-help' => '(Yah to [//www.mediawiki.org/wiki/Manual:External_editors/ff tinndinoore teelto] ngam ɓeydude humpito)',
+
+# 'all' in various places, this might be different for inflected languages
+'monthsall' => 'fof',
+
+# Special:SpecialPages
+'specialpages' => 'Kelle keeriiɗe',
+
 );
index ce09c1f..b02562f 100644 (file)
@@ -103,110 +103,110 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OHJAUS', '#UUDELLEENOHJAUS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__EISISLUETT__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__SISLUETTPAKOTUS__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SISÄLLYSLUETTELO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__EIOSIOMUOKKAUSTA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__EIOTSIKKOA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'KULUVAKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'KULUVAKUUNIMI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'KULUVAKUUNIMIGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'KULUVAKUUNIMILYHYT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'KULUVAPÄIVÄ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'KULUVAPÄIVÄ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'KULUVAPÄIVÄNIMI', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'KULUVAVUOSI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KULUVAAIKA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KULUVATUNTI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PAIKALLINENKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'PAIKALLINENKUUNIMI', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PAIKALLINENKUUNIMIGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PAIKALLINENKUUNIMILYHYT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PAIKALLINENPÄIVÄ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PAIKALLINENPÄIVÄ2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PAIKALLINENPÄIVÄNIMI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PAIKALLINENVUOSI', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PAIKALLINENAIKA', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PAIKALLINENTUNTI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SIVUMÄÄRÄ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTIKKELIMÄÄRÄ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'TIEDOSTOMÄÄRÄ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'KÄYTTÄJÄMÄÄRÄ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'MUOKKAUSMÄÄRÄ', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'SIVUHAKUMÄÄRÄ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIVUNIMI', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIVUNIMIE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NIMIAVARUUS', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NIMIAVARUUSE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'KESKUSTELUAVARUUS', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'KESKUSTELUAVARUUSE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'AIHEAVARUUS', 'ARTIKKELIAVARUUS', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'AIHEAVARUUSE', 'ARTIKKELIAVARUUSE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'KOKOSIVUNIMI', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'KOKOSIVUNIMIE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALASIVUNIMI', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALASIVUNIMIE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'KANTASIVUNIMI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'KANTASIVUNIMIE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'KESKUSTELUSIVUNIMI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'KESKUSTELUSIVUNIMIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'AIHESIVUNIMI', 'ARTIKKELISIVUNIMI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'AIHESIVUNIMIE', 'ARTIKKELISIVUNIMIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'VASTINE:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'pienoiskuva', 'pienois', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'pienoiskuva=$1', 'pienois=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'oikea', 'right' ),
-       'img_left'                => array( '1', 'vasen', 'left' ),
-       'img_none'                => array( '1', 'tyhjä', 'none' ),
-       'img_center'              => array( '1', 'keskitetty', 'keski', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kehyksetön', 'frameless' ),
-       'img_page'                => array( '1', 'sivu=$1', 'sivu $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'reunus', 'border' ),
-       'img_baseline'            => array( '1', 'perustaso', 'baseline' ),
-       'img_sub'                 => array( '1', 'alaindeksi', 'sub' ),
-       'img_super'               => array( '1', 'yläindeksi', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'ylös', 'ylhäällä', 'top' ),
-       'img_middle'              => array( '1', 'keskellä', 'middle' ),
-       'img_bottom'              => array( '1', 'alas', 'alhaalla', 'bottom' ),
-       'img_link'                => array( '1', 'linkki=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'SIVUSTONIMI', 'SITENAME' ),
-       'ns'                      => array( '0', 'NA:', 'NS:' ),
-       'localurl'                => array( '0', 'PAIKALLINENOSOITE:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'PAIKALLINENOSOITEE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'PALVELIN', 'SERVER' ),
-       'servername'              => array( '0', 'PALVELINNIMI', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTIPOLKU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'TAIVUTUS:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SUKUPUOLI:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'KULUVAVIIKKO', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'KULUVAVIIKONPÄIVÄ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'PAIKALLINENVIIKKO', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'PAIKALLINENVIIKONPÄIVÄ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VERSIOID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VERSIOPÄIVÄ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VERSIOPÄIVÄ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VERSIOKUUKAUSI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'VERSIOVUOSI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VERSIOAIKALEIMA', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MONIKKO:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TÄYSIOSOITE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TÄYSIOSOITEE:', 'FULLURLE:' ),
-       'displaytitle'            => array( '1', 'NÄKYVÄOTSIKKO', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'NYKYINENVERSIO', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'KULUVAAIKALEIMA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'PAIKALLINENAIKALEIMA', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#KIELI:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'YLLÄPITÄJÄMÄÄRÄ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'MUOTOILELUKU', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'AAKKOSTUS:', 'OLETUSAAKKOSTUS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'TIEDOSTOPOLKU:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__PIILOLUOKKA__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'SIVUKOKO', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__HAKUKONEKIELTO__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', 'SUOJAUSTASO', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#OHJAUS', '#UUDELLEENOHJAUS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__EISISLUETT__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__SISLUETTPAKOTUS__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SISÄLLYSLUETTELO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__EIOSIOMUOKKAUSTA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__EIOTSIKKOA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'KULUVAKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'KULUVAKUUNIMI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'KULUVAKUUNIMIGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'KULUVAKUUNIMILYHYT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'KULUVAPÄIVÄ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'KULUVAPÄIVÄ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'KULUVAPÄIVÄNIMI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'KULUVAVUOSI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KULUVAAIKA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KULUVATUNTI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PAIKALLINENKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'PAIKALLINENKUUNIMI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PAIKALLINENKUUNIMIGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PAIKALLINENKUUNIMILYHYT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PAIKALLINENPÄIVÄ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PAIKALLINENPÄIVÄ2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PAIKALLINENPÄIVÄNIMI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PAIKALLINENVUOSI', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PAIKALLINENAIKA', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PAIKALLINENTUNTI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SIVUMÄÄRÄ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTIKKELIMÄÄRÄ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'TIEDOSTOMÄÄRÄ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'KÄYTTÄJÄMÄÄRÄ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'MUOKKAUSMÄÄRÄ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'SIVUHAKUMÄÄRÄ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIVUNIMI', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIVUNIMIE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NIMIAVARUUS', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NIMIAVARUUSE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'KESKUSTELUAVARUUS', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'KESKUSTELUAVARUUSE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'AIHEAVARUUS', 'ARTIKKELIAVARUUS', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'AIHEAVARUUSE', 'ARTIKKELIAVARUUSE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'KOKOSIVUNIMI', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'KOKOSIVUNIMIE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALASIVUNIMI', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALASIVUNIMIE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'KANTASIVUNIMI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'KANTASIVUNIMIE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'KESKUSTELUSIVUNIMI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'KESKUSTELUSIVUNIMIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'AIHESIVUNIMI', 'ARTIKKELISIVUNIMI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'AIHESIVUNIMIE', 'ARTIKKELISIVUNIMIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'VASTINE:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'pienoiskuva', 'pienois', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'pienoiskuva=$1', 'pienois=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'oikea', 'right' ),
+       'img_left'                  => array( '1', 'vasen', 'left' ),
+       'img_none'                  => array( '1', 'tyhjä', 'none' ),
+       'img_center'                => array( '1', 'keskitetty', 'keski', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kehyksetön', 'frameless' ),
+       'img_page'                  => array( '1', 'sivu=$1', 'sivu $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'reunus', 'border' ),
+       'img_baseline'              => array( '1', 'perustaso', 'baseline' ),
+       'img_sub'                   => array( '1', 'alaindeksi', 'sub' ),
+       'img_super'                 => array( '1', 'yläindeksi', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'ylös', 'ylhäällä', 'top' ),
+       'img_middle'                => array( '1', 'keskellä', 'middle' ),
+       'img_bottom'                => array( '1', 'alas', 'alhaalla', 'bottom' ),
+       'img_link'                  => array( '1', 'linkki=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'SIVUSTONIMI', 'SITENAME' ),
+       'ns'                        => array( '0', 'NA:', 'NS:' ),
+       'localurl'                  => array( '0', 'PAIKALLINENOSOITE:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'PAIKALLINENOSOITEE:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'PALVELIN', 'SERVER' ),
+       'servername'                => array( '0', 'PALVELINNIMI', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTIPOLKU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'TAIVUTUS:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SUKUPUOLI:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'KULUVAVIIKKO', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'KULUVAVIIKONPÄIVÄ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'PAIKALLINENVIIKKO', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'PAIKALLINENVIIKONPÄIVÄ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VERSIOID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VERSIOPÄIVÄ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VERSIOPÄIVÄ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VERSIOKUUKAUSI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'VERSIOVUOSI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VERSIOAIKALEIMA', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MONIKKO:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TÄYSIOSOITE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TÄYSIOSOITEE:', 'FULLURLE:' ),
+       'displaytitle'              => array( '1', 'NÄKYVÄOTSIKKO', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'NYKYINENVERSIO', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'KULUVAAIKALEIMA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'PAIKALLINENAIKALEIMA', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#KIELI:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'YLLÄPITÄJÄMÄÄRÄ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'MUOTOILELUKU', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'AAKKOSTUS:', 'OLETUSAAKKOSTUS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'TIEDOSTOPOLKU:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__PIILOLUOKKA__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'SIVUKOKO', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__HAKUKONEKIELTO__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', 'SUOJAUSTASO', 'PROTECTIONLEVEL' ),
 );
 
 $specialPageAliases = array(
@@ -470,7 +470,7 @@ $messages = array(
 'vector-action-protect' => 'Suojaa',
 'vector-action-undelete' => 'Palauta',
 'vector-action-unprotect' => 'Muuta suojausta',
-'vector-simplesearch-preference' => 'Ota käyttöön parannetut hakuehdotukset (vain Vector-ulkoasu)',
+'vector-simplesearch-preference' => 'Ota käyttöön yksinkertaistettu hakupalkki (vain Vector-ulkoasu)',
 'vector-view-create' => 'Luo',
 'vector-view-edit' => 'Muokkaa',
 'vector-view-history' => 'Näytä historia',
@@ -485,7 +485,7 @@ $messages = array(
 'tagline' => '{{SITENAME}}',
 'help' => 'Ohje',
 'search' => 'Haku',
-'searchbutton' => 'Etsi',
+'searchbutton' => 'Hae',
 'go' => 'Siirry',
 'searcharticle' => 'Siirry',
 'history' => 'Historia',
@@ -684,10 +684,11 @@ Joku muu on saattanut poistaa sen.',
 'protectedpagetext' => 'Tämä sivu on suojattu muutoksilta.',
 'viewsourcetext' => 'Voit tarkastella ja kopioida tämän sivun lähdekoodia:',
 'viewyourtext' => "Voit tarkastella ja kopioida lähdekoodin '''tekemistäsi muutoksista''' tähän sivuun:",
-'protectedinterface' => 'Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.',
+'protectedinterface' => 'Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.
+Viestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.',
 'editinginterface' => "'''Varoitus:''' Muokkaat sivua, joka sisältää ohjelmiston käyttöliittymätekstiä.
-Muutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun.
-Viestien kääntäminen tulisi tehdä [//translatewiki.net/wiki/Main_Page?setlang=fi translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
+Muutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.
+Viestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
 'sqlhidden' => '(SQL-kysely piilotettu)',
 'cascadeprotected' => 'Tämä sivu on suojattu muokkauksilta, koska se on sisällytetty alla {{PLURAL:$1|olevaan laajennetusti suojattuun sivuun|oleviin laajennetusti suojattuihin sivuihin}}:
 $2',
@@ -697,9 +698,9 @@ $2',
 'ns-specialprotected' => 'Toimintosivuja ei voi muokata.',
 'titleprotected' => "Käyttäjä [[User:$1|$1]] on suojannut tämän sivunimen, ja sivua ei voi luoda.
 Syynä on: ''$2''.",
-'filereadonlyerror' => 'Tiedostoa "$1" ei voi muuttaa, koska jaettu mediavarasto "$2" on "vain luku" -tilassa.
+'filereadonlyerror' => 'Tiedostoa $1 ei voi muuttaa, koska jaettu mediavarasto $2 on vain luku -tilassa.
 
-Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: "$3".',
+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',
@@ -713,7 +714,7 @@ Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: "$3
 # Login and logout pages
 'logouttext' => "'''Olet nyt kirjautunut ulos.'''
 
-Voit jatkaa {{GRAMMAR:genitive|{{SITENAME}}}} käyttöä nimettömänä, tai [[Special:UserLogin|kirjautua uudelleen sisään]].
+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.
@@ -780,7 +781,7 @@ Tästä johtuen tästä IP-osoitteesta ei voi tällä hetkellä luoda uusia tunn
 'noemailprefs' => 'Sähköpostiosoitetta ei ole määritelty.',
 'emailconfirmlink' => 'Varmenna sähköpostiosoite',
 'invalidemailaddress' => 'Sähköpostiosoitetta ei voida hyväksyä, koska se ei ole oikeassa muodossa. Ole hyvä ja anna oikea sähköpostiosoite tai jätä kenttä tyhjäksi.',
-'cannotchangeemail' => 'Tunnuksien sähköpostiosoitteita ei voi muuttaa tässä wikissä.',
+'cannotchangeemail' => 'Tunnusten sähköpostiosoitteita ei voi muuttaa tässä wikissä.',
 'emaildisabled' => 'Tältä sivustolta ei voi lähettää sähköpostia.',
 'accountcreated' => 'Käyttäjätunnus luotiin',
 'accountcreatedtext' => 'Käyttäjän $1 käyttäjätunnus luotiin.',
@@ -955,8 +956,7 @@ Voit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]
 tai [{{fullurl:{{FULLPAGENAME}}|action=edit}} muokata tätä sivua]</span>.',
 'noarticletext-nopermission' => 'Tällä hetkellä tällä sivulla ei ole tekstiä.
-Voit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta
-tai <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]</span>',
+Voit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta tai <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]</span>, mutta sinulla ei ole oikeutta luoda tätä sivua.',
 'missing-revision' => 'Muutosta #$1 sivulla "{{PAGENAME}}" ei ole olemassa.
 
 Tämä yleensä johtuu vanhentuneesta historialinkistä sivulle, joka on poistettu.
@@ -969,7 +969,6 @@ Alla on viimeisin estolokin tapahtuma:',
 * '''Firefox ja Safari:''' Napsauta ''Shift''-näppäin pohjassa ''Päivitä'' tai paina ''Ctrl-F5'' tai ''Ctrl-R'' (''⌘-R'' Macilla)
 * '''Google Chrome:''' Paina ''Ctrl-Shift-R'' (''⌘-Shift-R'' Macilla)
 * '''Internet Explorer:''' Napsauta ''Ctrl''-näppäin pohjassa ''Päivitä'' tai paina ''Ctrl-F5''
-* '''Konqueror''': Napsauta ''Päivitä'' tai paina ''F5''
 * '''Opera:''' Tyhjennä välimuisti: ''Tools→Preferences''",
 'usercssyoucanpreview' => 'Voit testata uutta CSS:ää ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.',
 'userjsyoucanpreview' => 'Voit testata uutta JavaScriptiä ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.',
@@ -982,7 +981,8 @@ Alla on viimeisin estolokin tapahtuma:',
 'userinvalidcssjstitle' => "'''Varoitus:''' Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.",
 'updated' => '(Päivitetty)',
 'note' => "'''Huomautus:'''",
-'previewnote' => "'''Tämä on vasta sivun esikatselu. Tekemiäsi muokkauksia ei ole vielä tallennettu!'''",
+'previewnote' => "'''Tämä on vasta sivun esikatselu.'''
+Tekemiäsi muutoksia ei ole vielä tallennettu.",
 'continue-editing' => 'Jatka muokkaamista',
 'previewconflict' => 'Tämä esikatselu näyttää miltä muokkausalueella oleva teksti näyttää tallennettuna.',
 'session_fail_preview' => "'''Muokkaustasi ei voitu tallentaa, koska istuntosi tiedot ovat kadonneet.''' Yritä uudelleen. Jos ongelma ei katoa, yritä [[Special:UserLogout|kirjautua ulos]] ja takaisin sisään.",
@@ -1119,7 +1119,7 @@ Kokeile [[Special:Search|hakua]] löytääksesi asiaan liittyviä sivuja.',
 'rev-deleted-comment' => '(muokkausyhteenveto poistettu)',
 'rev-deleted-user' => '(käyttäjänimi poistettu)',
 'rev-deleted-event' => '(lokitapahtuma poistettu)',
-'rev-deleted-user-contribs' => '[käyttäjänimi tai IP-osoite poistettu – muokkaus piilotettu muokkauksista]',
+'rev-deleted-user-contribs' => '[käyttäjätunnus tai IP-osoite poistettu – muokkaus on piilotettu muokkausluettelosta]',
 'rev-deleted-text-permission' => "Tämä versio sivusta on '''poistettu'''.
 Lisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
 'rev-deleted-text-unhide' => "Tämä versio sivusta on '''poistettu'''.
@@ -1200,7 +1200,9 @@ Sinulla ei ole oikeutta siihen.',
 'revdelete-only-restricted' => 'Virhe piilotettaessa $1 kello $2 päivättyä kohdetta: Et voi poistaa kohteita ylläpitäjien näkyviltä valitsematta myös jotain muuta näkyvyysasetusta.',
 'revdelete-reason-dropdown' => '*Yleiset poistosyyt
 ** Tekijänoikeusrikkomus
-** Sopimattomat henkilötiedot',
+** Sopimattomat henkilötiedot
+** Sopimaton käyttäjätunnus
+** Mahdollinen kunnianloukkaus',
 'revdelete-otherreason' => 'Muu syy tai tarkennus',
 'revdelete-reasonotherlist' => 'Muu syy',
 'revdelete-edit-reasonlist' => 'Muokkaa poistosyitä',
@@ -1241,9 +1243,9 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men
 'mergelogpagetext' => 'Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.',
 
 # Diffs
-'history-title' => 'Sivun "$1" muutoshistoria',
-'difference-title' => 'Ero sivun ”$1” versioiden välillä',
-'difference-title-multipage' => 'Erot sivujen "$1" ja "$2" välillä',
+'history-title' => 'Sivun $1 muutoshistoria',
+'difference-title' => 'Ero sivun $1 versioiden välillä',
+'difference-title-multipage' => 'Erot sivujen $1 ja $2 välillä',
 'difference-multipage' => '(Sivujen välinen eroavaisuus)',
 'lineno' => 'Rivi $1:',
 'compareselectedversions' => 'Vertaile valittuja versioita',
@@ -1299,8 +1301,6 @@ $1 {{int:pipe-separator}} $2',
 'search-interwiki-caption' => 'Sisarprojektit',
 'search-interwiki-default' => 'Tulokset osoitteesta $1:',
 'search-interwiki-more' => '(lisää)',
-'search-mwsuggest-enabled' => 'näytä ehdotukset',
-'search-mwsuggest-disabled' => 'ilman ehdotuksia',
 'search-relatedarticle' => 'Hae samankaltaisia sivuja',
 'mwsuggest-disable' => 'Älä näytä ehdotuksia AJAXilla',
 'searcheverything-enable' => 'Hae kaikista nimiavaruuksista',
@@ -1319,7 +1319,7 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön
 'powersearch-field' => 'Etsi',
 'powersearch-togglelabel' => 'Muuta valintaa',
 'powersearch-toggleall' => 'Valitse kaikki',
-'powersearch-togglenone' => 'Valitse ei mitään',
+'powersearch-togglenone' => 'Poista valinnat',
 'search-external' => 'Ulkoinen haku',
 'searchdisabled' => 'Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>',
 
@@ -1521,7 +1521,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'right-writeapi' => 'Käyttää kirjoitus-APIa',
 'right-delete' => 'Poistaa sivuja',
 'right-bigdelete' => 'Poistaa sivuja, joilla on pitkä historia',
-'right-deletelogentry' => 'Poista ja palauta tiettyjä lokimerkintöjä',
+'right-deletelogentry' => 'Poistaa ja palauttaa tiettyjä lokimerkintöjä',
 'right-deleterevision' => 'Poistaa ja palauttaa sivujen versioita',
 'right-deletedhistory' => 'Tarkastella poistettuja versiotietoja ilman niihin liittyvää sisältöä',
 'right-deletedtext' => 'Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä',
@@ -1809,7 +1809,7 @@ $1',
 'backend-fail-internal' => 'Tuntematon virhe taustajärjestelmässä "$1".',
 'backend-fail-contenttype' => 'Tiedostoa ei voitu tallentaa kohteeseen $1, koska tiedostomuotoa ei voitu määrittää.',
 'backend-fail-batchsize' => 'Taustajärjestelmälle on annettu $1 {{PLURAL:$1|tiedostotoiminto|toimintoa}}; enimmäismäärä on $2 {{PLURAL:$2|tiedostotoiminto|toimintoa}}.',
-'backend-fail-usable' => 'Ei voitu luoda tiedostoa $1, koska käyttöoikeudet eivät riittäneet tai hakemisto puuttuu.',
+'backend-fail-usable' => 'Tiedostoa $1 ei voitu lukea tai luoda, koska käyttöoikeudet eivät riittäneet tai hakemisto puuttuu.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Kohteen $1 lukitusta ei voitu poistaa, koska se ei ole lukittu.',
@@ -2044,6 +2044,7 @@ Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen o
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|tavu|tavua}}',
 'ncategories' => '$1 {{PLURAL:$1|luokka|luokkaa}}',
+'ninterwikis' => '$1 {{PLURAL:$1|kielilinkki|kielilinkkiä}}',
 'nlinks' => '$1 {{PLURAL:$1|linkki|linkkiä}}',
 'nmembers' => '$1 {{PLURAL:$1|jäsen|jäsentä}}',
 'nrevisions' => '$1 {{PLURAL:$1|muutos|muutosta}}',
@@ -2072,6 +2073,7 @@ Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen o
 'mostlinkedtemplates' => 'Viitatuimmat mallineet',
 'mostcategories' => 'Luokitelluimmat sivut',
 'mostimages' => 'Viitatuimmat tiedostot',
+'mostinterwikis' => 'Sivut, joilla on eniten kielilinkkejä',
 'mostrevisions' => 'Muokatuimmat sivut',
 'prefixindex' => 'Kaikki sivut katkaisuhaulla',
 'prefixindex-namespace' => 'Kaikki sivut etuliitteellä (nimiavaruus $1)',
@@ -2144,11 +2146,11 @@ Voit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muut
 'allpagesprefix' => 'Katkaisuhaku',
 'allpagesbadtitle' => 'Annettu otsikko oli kelvoton tai siinä oli wikien välinen etuliite.',
 'allpages-bad-ns' => '{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimiavaruutta ”$1”.',
-'allpages-hide-redirects' => 'Piilota ohjaussivut',
+'allpages-hide-redirects' => 'Piilota ohjaukset',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => 'Katselet arkistoitua versiota tästä sivusta, joka voi olla jopa $1 vanha.',
-'cachedspecial-viewing-cached-ts' => 'Katselet arkistoitua versiota tästä sivusta, joka ei välttämättä ole sivun viimeisin versio.',
+'cachedspecial-viewing-cached-ttl' => 'Tarkastelet arkistoitua versiota tästä sivusta, joka voi olla jopa $1 vanha.',
+'cachedspecial-viewing-cached-ts' => 'Tarkastelet arkistoitua versiota tästä sivusta, joka ei välttämättä ole sivun viimeisin versio.',
 'cachedspecial-refresh-now' => 'Näytä uusin versio.',
 
 # Special:Categories
@@ -2218,6 +2220,8 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'mailnologin' => 'Lähettäjän osoite puuttuu',
 'mailnologintext' => 'Sinun pitää olla [[Special:UserLogin|kirjautuneena sisään]] ja [[Special:Preferences|asetuksissasi]] pitää olla toimiva ja <strong>varmennettu</strong> sähköpostiosoite, jotta voit lähettää sähköpostia muille käyttäjille.',
 'emailuser' => 'Lähetä sähköpostia tälle käyttäjälle',
+'emailuser-title-target' => 'Lähetä sähköpostia tälle {{GENDER:$1|käyttäjälle}}',
+'emailuser-title-notarget' => 'Lähetä sähköpostia käyttäjälle',
 'emailpage' => 'Lähetä sähköpostia käyttäjälle',
 'emailpagetext' => 'Jos tämä käyttäjä on antanut asetuksissaan kelvollisen sähköpostiosoitteen, alla olevalla lomakkeella voit lähettää hänelle viestin. [[Special:Preferences|Omissa asetuksissasi]] annettu sähköpostiosoite näkyy sähköpostin lähettäjän osoitteena, jotta vastaanottaja voi suoraan vastata viestiin.',
 'usermailererror' => 'Postitus palautti virheen:',
@@ -2356,7 +2360,7 @@ Sivulla $2 on lista viimeaikaisista poistoista.',
 'rollback' => 'palauta aiempaan versioon',
 'rollback_short' => 'Palautus',
 'rollbacklink' => 'palauta',
-'rollbacklinkcount' => 'palauta {{PLURAL:$1|muokkaus|$1 muokkausta}}',
+'rollbacklinkcount' => 'palauta {{PLURAL:$1|muutos|$1 muutosta}}',
 'rollbacklinkcount-morethan' => 'palauta yli $1 {{PLURAL:$1|muutos|muutosta}}',
 'rollbackfailed' => 'Palautus epäonnistui',
 'cantrollback' => 'Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.',
@@ -2573,7 +2577,7 @@ Alla on viimeisin estolokin tapahtuma:',
 'ipb-confirm' => 'Vahvista esto',
 'badipaddress' => 'IP-osoite on väärin muotoiltu.',
 'blockipsuccesssub' => 'Esto onnistui',
-'blockipsuccesstext' => 'Käyttäjä tai IP-osoite [[Special:Contributions/$1|$1]] on estetty.<br />
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] on estetty.<br />
 Voimassa olevat estot näkyvät [[Special:BlockList|estolistasta]].',
 'ipb-blockingself' => 'Olet estämässä itseäsi. Oletko varma, että haluat tehdä niin?',
 'ipb-confirmhideuser' => 'Olet estämässä käyttäjää ”piilota käyttäjä” -toiminnon kanssa.  Tämä piilottaa käyttäjän nimen kaikissa luetteloissa ja lokitapahtumissa.  Oletko varma, että haluat tehdä näin?',
@@ -2858,6 +2862,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'import-error-interwiki' => 'Sivua $1 ei voitu tuoda, koska sen nimi on varattu ulkoisen linkittämisen (interwiki).',
 'import-error-special' => 'Sivua $1 ei tuoda, koska se kuuluu nimitilaan, joka ei salli sivuja.',
 'import-error-invalid' => 'Sivua $1 ei tuoda, koska sen nimi ei kelpaa.',
+'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Tuontiloki',
@@ -2869,7 +2874,6 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptin testaus',
-'javascripttest-disabled' => 'Tämä toiminto ei ole käytössä tässä wikissä.',
 'javascripttest-title' => 'Suoritetaan $1-testejä.',
 'javascripttest-pagetext-noframework' => 'Tämä sivu on varattu JavaScript-testien suorittamiseen.',
 'javascripttest-pagetext-unknownframework' => 'Tuntematon testausalusta $1.',
@@ -3007,11 +3011,25 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 
 # Info page
 'pageinfo-title' => 'Tietoja sivusta $1',
-'pageinfo-header-edits' => 'Muokkaukset',
+'pageinfo-header-basic' => 'Perustiedot',
+'pageinfo-header-edits' => 'Muutoshistoria',
+'pageinfo-header-restrictions' => 'Sivun suojaus',
+'pageinfo-header-properties' => 'Sivun ominaisuudet',
+'pageinfo-default-sort' => 'Oletuslajitteluavain',
+'pageinfo-length' => 'Sivun pituus (tavuina)',
+'pageinfo-article-id' => 'Sivun tunniste',
 'pageinfo-views' => 'Katselukertojen määrä',
-'pageinfo-watchers' => 'Tarkkailijoiden lukumäärä',
-'pageinfo-edits' => 'Muokkausten lukumäärä',
-'pageinfo-authors' => 'Eri tekijöiden lukumäärä',
+'pageinfo-watchers' => 'Sivun tarkkailijoiden lukumäärä',
+'pageinfo-redirects-name' => 'Sivulle johtavat ohjaukset',
+'pageinfo-subpages-name' => 'Sivun alasivut',
+'pageinfo-firstuser' => 'Sivun luonut',
+'pageinfo-lastuser' => 'Viimeisin muokkaaja',
+'pageinfo-edits' => 'Muokkausten kokonaismäärä',
+'pageinfo-authors' => 'Sivun eri muokkaajien kokonaismäärä',
+'pageinfo-magic-words' => '{{PLURAL:$1|Taikasana|Taikasanat}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Sisällytetty malline|Sisällytetyt mallineet}} ($1)',
+'pageinfo-toolboxlink' => 'Sivun tiedot',
 
 # Skin names
 'skinname-standard' => 'Perus',
@@ -3578,6 +3596,7 @@ Varmennuskoodi vanhenee $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Wikienvälinen sisällytys ei ole käytössä]',
 'scarytranscludefailed' => '[Mallineen hakeminen epäonnistui: $1]',
+'scarytranscludefailed-httpstatus' => '[Mallineen hakeminen epäonnistui: $1 HTTP $2]',
 'scarytranscludetoolong' => '[Verkko-osoite on liian pitkä]',
 
 # Delete conflict
@@ -3857,6 +3876,10 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'feedback-bugcheck' => 'Hyvä! Varmista, että ohjelmointivirhe ei vielä löydy [$1 tästä listasta].',
 'feedback-bugnew' => 'Varmistin. Ilmoitan uuden ohjelmointivirheen',
 
+# Search suggestions
+'searchsuggest-search' => 'Hae',
+'searchsuggest-containing' => 'sisältää...',
+
 # API errors
 'api-error-badaccess-groups' => 'Sinulla ei ole oikeutta tallentaa tiedostoja tähän wikiin.',
 'api-error-badtoken' => 'Sisäinen virhe: virheellinen tarkistussumma.',
index 2055a8f..7ee949f 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Sigatabu',
-'monday'        => 'Moniti',
-'tuesday'       => 'Tusiti',
-'wednesday'     => 'Vukelulu',
-'thursday'      => 'Lotulevu',
-'friday'        => 'Vakaraubuka',
-'saturday'      => 'Vakarauwai',
-'sun'           => 'Sigatabu',
-'mon'           => 'Moniti',
-'tue'           => 'Tusiti',
-'wed'           => 'Vukelulu',
-'thu'           => 'Lotulevu',
-'fri'           => 'Vakaraubuka',
-'sat'           => 'Vakarauwai',
-'january'       => 'Janueri',
-'february'      => 'Veverueri',
-'march'         => 'Maji',
-'april'         => 'Epereli',
-'july'          => 'Jiulai',
-'august'        => 'Okosita',
-'september'     => 'Seviteba',
-'october'       => 'Okotova',
-'november'      => 'Noveba',
-'december'      => 'Tiseba',
-'january-gen'   => 'Janueri',
-'february-gen'  => 'Veverueri',
-'march-gen'     => 'Maji',
-'april-gen'     => 'Evereli',
-'may-gen'       => 'Me',
-'july-gen'      => 'Jiulai',
-'august-gen'    => 'Okosita',
+'sunday' => 'Sigatabu',
+'monday' => 'Moniti',
+'tuesday' => 'Tusiti',
+'wednesday' => 'Vukelulu',
+'thursday' => 'Lotulevu',
+'friday' => 'Vakaraubuka',
+'saturday' => 'Vakarauwai',
+'sun' => 'Sigatabu',
+'mon' => 'Moniti',
+'tue' => 'Tusiti',
+'wed' => 'Vukelulu',
+'thu' => 'Lotulevu',
+'fri' => 'Vakaraubuka',
+'sat' => 'Vakarauwai',
+'january' => 'Janueri',
+'february' => 'Veverueri',
+'march' => 'Maji',
+'april' => 'Epereli',
+'july' => 'Jiulai',
+'august' => 'Okosita',
+'september' => 'Seviteba',
+'october' => 'Okotova',
+'november' => 'Noveba',
+'december' => 'Tiseba',
+'january-gen' => 'Janueri',
+'february-gen' => 'Veverueri',
+'march-gen' => 'Maji',
+'april-gen' => 'Evereli',
+'may-gen' => 'Me',
+'july-gen' => 'Jiulai',
+'august-gen' => 'Okosita',
 'september-gen' => 'Seviteba',
-'october-gen'   => 'Okotova',
-'november-gen'  => 'Noveba',
-'december-gen'  => 'Tiseba',
-'jan'           => 'Janueri',
-'feb'           => 'Veverueri',
-'mar'           => 'Maji',
-'apr'           => 'Epereli',
-'may'           => 'Me',
-'jun'           => 'June',
-'jul'           => 'Julai',
-'aug'           => 'Okosita',
-'sep'           => 'Seviteba',
-'oct'           => 'Okotova',
-'nov'           => 'Noveba',
-'dec'           => 'Tiseba',
-
-'cancel'     => 'Sasamaki',
-'mytalk'     => 'Noqu vosa',
+'october-gen' => 'Okotova',
+'november-gen' => 'Noveba',
+'december-gen' => 'Tiseba',
+'jan' => 'Janueri',
+'feb' => 'Veverueri',
+'mar' => 'Maji',
+'apr' => 'Epereli',
+'may' => 'Me',
+'jun' => 'June',
+'jul' => 'Julai',
+'aug' => 'Okosita',
+'sep' => 'Seviteba',
+'oct' => 'Okotova',
+'nov' => 'Noveba',
+'dec' => 'Tiseba',
+
+'cancel' => 'Sasamaki',
+'mytalk' => 'Noqu vosa',
 'navigation' => 'Vakatasosoko',
 
 # Cologne Blue skin
 'qbedit' => 'Veisautaki',
 
-'help'             => 'Veivuke',
-'search'           => 'Vaqaqara',
-'searchbutton'     => 'Vaqaqara',
-'go'               => 'Lako',
-'searcharticle'    => 'Lako',
-'history_short'    => 'Tukuni',
+'help' => 'Veivuke',
+'search' => 'Vaqaqara',
+'searchbutton' => 'Vaqaqara',
+'go' => 'Lako',
+'searcharticle' => 'Lako',
+'history_short' => 'Tukuni',
 'printableversion' => 'Tikina e rawa ni tabaki',
-'permalink'        => 'Sema tudei',
-'edit'             => 'Veisautaki',
-'delete'           => 'Vakarusa',
-'protect'          => 'Taqomaki',
-'unprotect'        => 'Sega ni taqomaki',
-'talk'             => 'Veiwasei',
-'toolbox'          => 'Kato ni yaya',
-'otherlanguages'   => 'Veimataqali vosa',
+'permalink' => 'Sema tudei',
+'edit' => 'Veisautaki',
+'delete' => 'Vakarusa',
+'protect' => 'Taqomaki',
+'unprotect' => 'Sega ni taqomaki',
+'talk' => 'Veiwasei',
+'toolbox' => 'Kato ni yaya',
+'otherlanguages' => 'Veimataqali vosa',
 'jumptonavigation' => 'Vakatasosoko',
-'jumptosearch'     => 'Vaqaqara',
+'jumptosearch' => 'Vaqaqara',
 
 # 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).
-'currentevents'        => 'Tukutuku kuruvaki',
-'currentevents-url'    => 'Project:Tukutuku kuruvaki',
-'edithelp'             => 'Veivukei',
-'mainpage'             => 'Tabana levu',
+'currentevents' => 'Tukutuku kuruvaki',
+'currentevents-url' => 'Project:Tukutuku kuruvaki',
+'edithelp' => 'Veivukei',
+'mainpage' => 'Tabana levu',
 'mainpage-description' => 'Tabana levu',
-'portal'               => 'Soqosoqo toso',
+'portal' => 'Soqosoqo toso',
 
 'editsection' => 'Veisautaki',
-'editold'     => 'Veisautaki',
+'editold' => 'Veisautaki',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Vola volai',
 
 # Login and logout pages
-'yourname'           => 'Yaca vakayagataki',
-'yourpassword'       => 'Yaca vuni',
-'yourpasswordagain'  => 'Vola tale na Yaca vuni',
+'yourname' => 'Yaca vakayagataki',
+'yourpassword' => 'Yaca vuni',
+'yourpasswordagain' => 'Vola tale na Yaca vuni',
 'remembermypassword' => 'Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'Curu mai',
-'userlogin'          => 'Curu mai / Dolava nomu Akaude',
-'logout'             => 'Curu yani',
-'userlogout'         => 'Curu yani',
-'nologinlink'        => 'Dolava nomu Akaude',
-'createaccount'      => 'Dolava nomu Akaude',
-'gotaccountlink'     => 'Curu mai',
+'login' => 'Curu mai',
+'userlogin' => 'Curu mai / Dolava nomu Akaude',
+'logout' => 'Curu yani',
+'userlogout' => 'Curu yani',
+'nologinlink' => 'Dolava nomu Akaude',
+'createaccount' => 'Dolava nomu Akaude',
+'gotaccountlink' => 'Curu mai',
 
 # Edit pages
-'summary'      => 'Kena i Soqoni:',
-'watchthis'    => 'Vakaraica toka na tabana oqo',
-'savearticle'  => 'Vakabula na tabana oqo',
-'showpreview'  => 'Vakaraitaka na kenai yaloyalo',
-'showdiff'     => 'Vakaritaka na veisau',
+'summary' => 'Kena i Soqoni:',
+'watchthis' => 'Vakaraica toka na tabana oqo',
+'savearticle' => 'Vakabula na tabana oqo',
+'showpreview' => 'Vakaraitaka na kenai yaloyalo',
+'showdiff' => 'Vakaritaka na veisau',
 'loginreqlink' => 'Curu mai',
 
 # Search results
 'powersearch' => 'Vaqaqara',
 
 # Preferences page
-'mypreferences'     => 'Ulutaga taleitaki',
+'mypreferences' => 'Ulutaga taleitaki',
 'searchresultshead' => 'Vaqaqara',
-'youremail'         => 'I vola livaliva *:',
-'username'          => 'Yaca vakayagataki:',
-'email'             => 'I vola livaliva',
+'youremail' => 'I vola livaliva *:',
+'username' => 'Yaca vakayagataki:',
+'email' => 'I vola livaliva',
 
 # Recent changes
 'recentchanges' => 'Veisau vovou',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Veisau e veiwekani',
-'recentchangeslinked-feed'    => 'Veisau e veiwekani',
+'recentchangeslinked' => 'Veisau e veiwekani',
+'recentchangeslinked-feed' => 'Veisau e veiwekani',
 'recentchangeslinked-toolbox' => 'Veisau e veiwekani',
 
 # Upload
-'upload'            => 'Vakasinaita',
-'uploadbtn'         => 'Vakasinaita',
-'filedesc'          => 'Kena i Soqoni',
+'upload' => 'Vakasinaita',
+'uploadbtn' => 'Vakasinaita',
+'filedesc' => 'Kena i Soqoni',
 'fileuploadsummary' => 'Kena i Soqoni:',
-'watchthisupload'   => 'Vakaraica toka na tabana oqo',
+'watchthisupload' => 'Vakaraica toka na tabana oqo',
 
 # Random page
 'randompage' => 'Vakawasoma',
 
-'brokenredirects-edit'   => 'Veisautaki',
+'brokenredirects-edit' => 'Veisautaki',
 'brokenredirects-delete' => 'Vakarusa',
 
 # Miscellaneous special pages
 'newpages-username' => 'Yaca vakayagataki:',
-'move'              => 'Toso',
-'movethispage'      => 'Toso na tabana oqo',
+'move' => 'Toso',
+'movethispage' => 'Toso na tabana oqo',
 
 # Special:AllPages
 'allpagessubmit' => 'Lako',
@@ -163,8 +163,8 @@ $messages = array(
 'defemailsubject' => '{{SITENAME}} I vola livaliva',
 
 # Watchlist
-'watchlist'     => 'Ulutaga yadravi',
-'watch'         => 'Vakaraica mada',
+'watchlist' => 'Ulutaga yadravi',
+'watch' => 'Vakaraica mada',
 'watchthispage' => 'Vakaraica toka na tabana oqo',
 
 # Restrictions (nouns)
@@ -185,17 +185,17 @@ $messages = array(
 
 # Move page
 'move-page-legend' => 'Toso kina yasana kadua',
-'movearticle'      => 'Toso kina yasana kadua',
-'move-watch'       => 'Vakaraica toka na tabana oqo',
-'movepagebtn'      => 'Toso kina yasana kadua',
-'movereason'       => 'Vuna',
+'movearticle' => 'Toso kina yasana kadua',
+'move-watch' => 'Vakaraica toka na tabana oqo',
+'movepagebtn' => 'Toso kina yasana kadua',
+'movereason' => 'Vuna',
 
 # Tooltip help for the actions
 'tooltip-pt-preferences' => 'Ulutaga taleitaki',
-'tooltip-pt-logout'      => 'Curu yani',
-'tooltip-ca-move'        => 'Toso na tabana oqo',
-'tooltip-search'         => 'Vaqaqara {{SITENAME}}',
-'tooltip-p-logo'         => 'Tabana levu',
+'tooltip-pt-logout' => 'Curu yani',
+'tooltip-ca-move' => 'Toso na tabana oqo',
+'tooltip-search' => 'Vaqaqara {{SITENAME}}',
+'tooltip-p-logo' => 'Tabana levu',
 
 # Special:NewFiles
 'ilsubmit' => 'Vaqaqara',
index fbab491..ba766cc 100644 (file)
@@ -514,7 +514,7 @@ Givin orsøk er "\'\'$2\'\'".',
 
 # Login and logout pages
 'logouttext' => "'''Tú hevur nú ritað út.'''
-Tú kanst halda fram at brúka {{SITENAME}} sum dulnevndur, ella kanst tú [[Special:UserLogin|logga á aftur]] sum sami ella sum annar brúkari. 
+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! ==
 
@@ -1071,8 +1071,6 @@ Tú hevur ikki atgongd til hann.',
 'search-interwiki-caption' => 'Líknandi verkætlanir',
 'search-interwiki-default' => '$1 úrslit:',
 'search-interwiki-more' => '(meira)',
-'search-mwsuggest-enabled' => 'við uppskotum',
-'search-mwsuggest-disabled' => 'ongi uppskot',
 'search-relatedarticle' => 'Líknandi',
 'mwsuggest-disable' => 'Slá AJAX uppskot frá',
 'searcheverything-enable' => 'Leita í øllum navnaøkjum',
@@ -2253,6 +2251,9 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'compare-page1' => 'Síða 1',
 'compare-page2' => 'Síða 2',
 
+# Search suggestions
+'searchsuggest-search' => 'Leita',
+
 # API errors
 'api-error-empty-file' => 'Fílan sum tú sendi inn var tóm.',
 'api-error-file-too-large' => 'Fílan sum tú sendi inn var óv stór.',
index 3838f0e..d21a9d2 100644 (file)
@@ -55,6 +55,7 @@
  * @author Meithal
  * @author Moyg
  * @author Nicolas Raoul
+ * @author Nnemo
  * @author Od1n
  * @author Omnipaedista
  * @author Peter17
@@ -65,6 +66,7 @@
  * @author Sandji
  * @author Seb35
  * @author Sherbrooke
+ * @author Shirayuki
  * @author Skalman
  * @author The Evil IP address
  * @author Tititou36
@@ -135,143 +137,143 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__AUCUNENTETE__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'vignette', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'droite', 'right' ),
-       'img_left'                => array( '1', 'gauche', 'left' ),
-       'img_none'                => array( '1', 'néant', 'neant', 'none' ),
-       'img_center'              => array( '1', 'centré', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
-       'img_upright'             => array( '1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'bordure', 'border' ),
-       'img_baseline'            => array( '1', 'ligne_de_base', 'base', 'baseline' ),
-       'img_sub'                 => array( '1', 'indice', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'exposant', 'exp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'haut', 'top' ),
-       'img_text_top'            => array( '1', 'haut-texte', 'haut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'bas', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'bas-texte', 'bas-txt', 'text-bottom' ),
-       'img_link'                => array( '1', 'lien=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMSITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'ESPACEN:', 'NS:' ),
-       'nse'                     => array( '0', 'ESPACENX:', 'NSE:' ),
-       'localurl'                => array( '0', 'URLLOCALE:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALEX:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'CHEMINARTICLE', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SERVEUR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMSERVEUR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'CHEMINSTYLE', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMAIRE:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDVERSION', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'JOUR2VERSION', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MOISVERSION', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MOISVERSION1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'ANNEEVERSION', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'UTILISATEURVERSION', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'PLURIEL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'BRUT', 'B', 'R' ),
-       'newsectionlink'          => array( '1', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENCODEURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENCODEANCRE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LANGUE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
-       'padright'                => array( '0', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spécial', 'special' ),
-       'defaultsort'             => array( '1', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CHEMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balise', 'tag' ),
-       'hiddencat'               => array( '1', '__CATCACHEE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAILLEPAGE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__AUCUNINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'CHEMIN', 'PATH' ),
-       'url_query'               => array( '0', 'QUESTION', 'QUERY' ),
+       'redirect'                  => array( '0', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__AUCUNENTETE__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'vignette', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'gauche', 'left' ),
+       'img_none'                  => array( '1', 'néant', 'neant', 'none' ),
+       'img_center'                => array( '1', 'centré', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
+       'img_upright'               => array( '1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'bordure', 'border' ),
+       'img_baseline'              => array( '1', 'ligne_de_base', 'base', 'baseline' ),
+       'img_sub'                   => array( '1', 'indice', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'exposant', 'exp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'haut', 'top' ),
+       'img_text_top'              => array( '1', 'haut-texte', 'haut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'bas', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'bas-texte', 'bas-txt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lien=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMSITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'ESPACEN:', 'NS:' ),
+       'nse'                       => array( '0', 'ESPACENX:', 'NSE:' ),
+       'localurl'                  => array( '0', 'URLLOCALE:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALEX:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'CHEMINARTICLE', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SERVEUR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMSERVEUR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'CHEMINSTYLE', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMAIRE:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDVERSION', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'JOUR2VERSION', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MOISVERSION', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MOISVERSION1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'ANNEEVERSION', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'UTILISATEURVERSION', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'PLURIEL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'BRUT', 'B', 'R' ),
+       'newsectionlink'            => array( '1', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENCODEURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENCODEANCRE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LANGUE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spécial', 'special' ),
+       'defaultsort'               => array( '1', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CHEMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balise', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATCACHEE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAILLEPAGE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__AUCUNINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
+       'url_query'                 => array( '0', 'QUESTION', 'QUERY' ),
 );
 
 $specialPageAliases = array(
@@ -528,7 +530,7 @@ $messages = array(
 'vector-action-protect' => 'Protéger',
 'vector-action-undelete' => 'Rétablir',
 'vector-action-unprotect' => 'Changer la protection',
-'vector-simplesearch-preference' => 'Activer les suggestions de recherche améliorées (seulement pour Vector)',
+'vector-simplesearch-preference' => "Activer la barre de recherche simplifiée (seulement pour l'habillage Vector)",
 'vector-view-create' => 'Créer',
 'vector-view-edit' => 'Modifier',
 'vector-view-history' => 'Afficher l’historique',
@@ -749,8 +751,10 @@ Essayez à nouveau dans quelques minutes.',
 'protectedpagetext' => 'Cette page a été protégée pour empêcher sa modification.',
 '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 et est protégée pour éviter les abus.',
-'editinginterface' => "'''Attention :''' vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements se répercuteront, selon le contexte, sur toutes ou certaines pages visibles par les autres utilisateurs. Pour les traductions, nous vous invitons à utiliser le projet MediaWiki d’internationalisation des messages [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
+'protectedinterface' => 'Cette page fournit du texte d’interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
+Pour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.',
+'editinginterface' => "'''Attention''': Vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront dur l'apparence de l'interface utilisateur pour les autres utilisateurs de ce wiki.
+Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d’internationalisation de MediaWiki.",
 'sqlhidden' => '(Requête SQL cachée)',
 'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{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 :
 $2',
@@ -776,16 +780,16 @@ L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
 # Login and logout pages
 'logouttext' => "'''Vous êtes à présent déconnecté(e).'''
 
-Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, [[Special:UserLogin|vous reconnecter]] sous le même nom ou un autre.
+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 :',
-'yourpassword' => 'Mot de passe :',
+'yourname' => 'Nom d’utilisateur&nbsp;:',
+'yourpassword' => 'Mot de passe&nbsp;:',
 'yourpasswordagain' => 'Confirmez le mot de passe :',
-'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
+'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.',
@@ -817,7 +821,7 @@ Veuillez choisir un nom différent.',
 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 ».',
+'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
 '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]].',
@@ -1283,7 +1287,7 @@ 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 ;
-** Renseignements personnels inappropriés ;
+** Commentaires ou renseignements personnels inappropriés ;
 ** Informations potentiellement diffamatoires.',
 'revdelete-otherreason' => 'Autre raison / raison supplémentaire :',
 'revdelete-reasonotherlist' => 'Autre raison',
@@ -1381,8 +1385,6 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'search-interwiki-caption' => 'Projets frères',
 'search-interwiki-default' => 'Résultats sur $1 :',
 'search-interwiki-more' => '(plus)',
-'search-mwsuggest-enabled' => 'avec suggestions',
-'search-mwsuggest-disabled' => 'sans suggestions',
 'search-relatedarticle' => 'Relaté',
 'mwsuggest-disable' => 'Désactiver les suggestions AJAX',
 'searcheverything-enable' => 'Rechercher dans tous les espaces de noms',
@@ -1748,9 +1750,9 @@ Le journal des suppressions et celui des déplacements de cette page sont affich
 '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]]. 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 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 ;
+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 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 l’afficher.",
 'upload-permitted' => 'Formats de fichiers autorisés : $1.',
 'upload-preferred' => 'Formats de fichiers préférés : $1.',
@@ -1905,7 +1907,7 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 '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 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".',
@@ -2247,7 +2249,7 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 'allpagesprev' => 'Précédent',
 'allpagesnext' => 'Suivant',
 'allpagessubmit' => 'Lister',
-'allpagesprefix' => 'Afficher les pages commençant par le préfixe :',
+'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-hide-redirects' => 'Masquer les redirections',
@@ -3014,7 +3016,6 @@ Un dossier temporaire est manquant.",
 
 # JavaScriptTest
 'javascripttest' => 'Test de JavaScript',
-'javascripttest-disabled' => "Cette fonction n'a pas été activée sur ce wiki.",
 'javascripttest-title' => 'Exécution des tests $1',
 'javascripttest-pagetext-noframework' => "Cette page est réservée pour l'exécution des tests JavaScript.",
 'javascripttest-pagetext-unknownframework' => 'Structure "$1" inconnue.',
@@ -3180,10 +3181,10 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'pageinfo-authors' => "Nombre total d'auteurs distincts",
 'pageinfo-recent-edits' => 'Nombre de modifications récentes (dans les derniers $1)',
 'pageinfo-recent-authors' => "Nombre d'auteurs distincts récents",
-'pageinfo-restriction' => 'Protection de la page (<code>$1</code>)',
 '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-toolboxlink' => 'Information sur la page',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3772,6 +3773,7 @@ $5',
 # 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]',
 
 # Delete conflict
@@ -3956,7 +3958,7 @@ Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licen
 'version-software' => 'Logiciels installés',
 'version-software-product' => 'Produit',
 'version-software-version' => 'Version',
-'version-entrypoints' => 'URL de 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]',
@@ -4075,10 +4077,10 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-suppress-revision' => "$1 a secrètement modifié la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
 '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 caché',
+'revdelete-content-hid' => 'contenu masqué',
 'revdelete-summary-hid' => 'résumé de modification caché',
 'revdelete-uname-hid' => "nom d'utilisateur caché",
-'revdelete-content-unhid' => 'contenu démasqué',
+'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-restricted' => 'restrictions appliquées aux administrateurs',
@@ -4087,8 +4089,8 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-move-move-noredirect' => '$1 a déplacé la page $3 vers $4 sans laisser de redirection',
 'logentry-move-move_redir' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection',
 '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 contrôlée',
-'logentry-patrol-patrol-auto' => '$1 a automatiquement marqué la révision $4 de la page $3 comme contrôlée',
+'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',
@@ -4111,6 +4113,10 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 '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
+'searchsuggest-search' => 'Rechercher',
+'searchsuggest-containing' => 'contenant...',
+
 # API errors
 'api-error-badaccess-groups' => 'Vous n’êtes pas autorisé à verser des fichiers sur ce wiki.',
 'api-error-badtoken' => 'Erreur interne : mauvais « jeton ».',
@@ -4149,18 +4155,18 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'api-error-unknown-error' => 'Erreur interne : Quelque chose a mal tourné lors du versement de votre fichier.',
 'api-error-unknown-warning' => 'Avertissement inconnu : $1',
 'api-error-unknownerror' => 'Erreur inconnue : « $1 ».',
-'api-error-uploaddisabled' => 'Le versement est désactivé sur ce wiki.',
+'api-error-uploaddisabled' => 'Le téléversement est désactivé sur ce wiki.',
 'api-error-verification-error' => 'Ce fichier peut être corrompu, ou son extension est incorrecte.',
 
 # Durations
-'duration-seconds' => '$1 {{PLURAL:$1|seconde|secondes}}',
-'duration-minutes' => '$1 {{PLURAL:$1|minute|minutes}}',
-'duration-hours' => '$1 {{PLURAL:$1|heure|heures}}',
-'duration-days' => '$1 {{PLURAL:$1|jour|jours}}',
-'duration-weeks' => '$1 {{PLURAL:$1|semaine|semaines}}',
-'duration-years' => '$1 {{PLURAL:$1|année|années}}',
-'duration-decades' => '$1 {{PLURAL:$1|décennie|décennies}}',
-'duration-centuries' => '$1 {{PLURAL:$1|siècle|siècles}}',
-'duration-millennia' => '$1 {{PLURAL:$1|millénaire|millénaires}}',
+'duration-seconds' => '$1 seconde{{PLURAL:$1||s}}',
+'duration-minutes' => '$1 minute{{PLURAL:$1||s}}',
+'duration-hours' => '$1 heure{{PLURAL:$1||s}}',
+'duration-days' => '$1 jour{{PLURAL:$1||s}}',
+'duration-weeks' => '$1 semaine{{PLURAL:$1||s}}',
+'duration-years' => '$1 année{{PLURAL:$1||s}}',
+'duration-decades' => '$1 décennie{{PLURAL:$1||s}}',
+'duration-centuries' => '$1 siècle{{PLURAL:$1||s}}',
+'duration-millennia' => '$1 millénaire{{PLURAL:$1||s}}',
 
 );
index fb1cf20..c5dd402 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Cajun French (Français cadien)
+/** Cajun French (français cadien)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -20,421 +20,420 @@ $fallback = 'fr';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Souligner les liens:',
-'tog-justify'                 => 'Égalisez les paragraphes',
-'tog-hideminor'               => 'Cachez les petits changements dans la liste des derniers changements',
-'tog-hidepatrolled'           => '↓ Cachez les petits changements dans la liste des derniers changements',
-'tog-newpageshidepatrolled'   => '↓Cache pages patrollés de la list des pages nouveau',
-'tog-extendwatchlist'         => 'Agrandir la liste des pages guettées pour montrer tous les changements',
-'tog-usenewrc'                => 'User les derniers changements improuvés (JavaScript)',
-'tog-numberheadings'          => 'Mettre les numéros sus les en-têtes',
-'tog-showtoolbar'             => "Montrer la barre d'outils des changements (JavaScript)",
-'tog-editondblclick'          => 'Faire un clic-double pour changer la page (JavaScript)',
-'tog-editsection'             => 'Changer une section avec les liens [changer]',
+'tog-underline' => 'Souligner les liens:',
+'tog-justify' => 'Égalisez les paragraphes',
+'tog-hideminor' => 'Cachez les petits changements dans la liste des derniers changements',
+'tog-hidepatrolled' => '↓ Cachez les petits changements dans la liste des derniers changements',
+'tog-newpageshidepatrolled' => '↓Cache pages patrollés de la list des pages nouveau',
+'tog-extendwatchlist' => 'Agrandir la liste des pages guettées pour montrer tous les changements',
+'tog-usenewrc' => 'User les derniers changements improuvés (JavaScript)',
+'tog-numberheadings' => 'Mettre les numéros sus les en-têtes',
+'tog-showtoolbar' => "Montrer la barre d'outils des changements (JavaScript)",
+'tog-editondblclick' => 'Faire un clic-double pour changer la page (JavaScript)',
+'tog-editsection' => 'Changer une section avec les liens [changer]',
 'tog-editsectiononrightclick' => 'Changer une section en faisant un clic droit sus son nom (JavaScript)',
-'tog-showtoc'                 => 'Montrer la table des matières (pour les pages avec plus que 3 têtes)',
-'tog-rememberpassword'        => 'Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations'          => 'Additionner les pages que je crée à ma liste des pages guettées',
-'tog-watchdefault'            => 'Additionner les pages que je change à ma liste des pages guettées',
-'tog-watchmoves'              => 'Additionner les pages que je renomme à ma liste des pages guettées',
-'tog-watchdeletion'           => "Additionner les pages que j'ôte à ma liste des pages guettées",
-'tog-minordefault'            => "Marquer tous les petits changements d'après le réglage",
-'tog-previewontop'            => "Montrer la vue d'avance au-dessus la boëte de changement",
-'tog-previewonfirst'          => "Montrer la vue d'avance au temps du premier changement",
-'tog-nocache'                 => 'Arrêter le cache des pages',
-'tog-enotifwatchlistpages'    => 'Envoyer un e-mail quand une de mes pages guettées est changée',
-'tog-enotifusertalkpages'     => 'Envoyer un e-mail quand ma page de discussion est changée',
-'tog-enotifminoredits'        => 'Envoyer un e-mail même pour les petits changements',
-'tog-enotifrevealaddr'        => "Montrer mon adresse e-mail dans les e-mails d'avertissement",
-'tog-shownumberswatching'     => 'Montrer le montant de guetteurs',
-'tog-oldsig'                  => '↓ Preview du signature existant:',
-'tog-fancysig'                => 'Signature brute (sans liens préparés)',
-'tog-externaleditor'          => 'Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur)',
-'tog-externaldiff'            => 'User un autre comparateur comme réglage ordinaire',
-'tog-showjumplinks'           => 'Mettre les "liens vites" en haut de la page',
-'tog-uselivepreview'          => "User la vue d'avance vite (JavaScript) (En assai)",
-'tog-forceeditsummary'        => "M'avertir quand j'ai laissé la boëte de commentaires vide",
-'tog-watchlisthideown'        => 'Cacher mes changements dans la liste des pages guettées',
-'tog-watchlisthidebots'       => 'Cacher les changements faits par les bots dans la liste des pages guettées',
-'tog-watchlisthideminor'      => 'Cacher les petits changements dans la liste des pages guettées',
-'tog-watchlisthideliu'        => 'Cacher édites de useurs anonymes du liste de pages guettées',
-'tog-watchlisthideanons'      => 'Cacher édites de useurs anonymes du liste de pages guettées',
-'tog-watchlisthidepatrolled'  => 'Cacher les changements faits par les bots dans la liste des pages guettées',
-'tog-nolangconversion'        => 'Arrêter le changement des différences de langue',
-'tog-ccmeonemails'            => "Envoyer une copie des e-mails que j'envoye aux autres useurs",
-'tog-diffonly'                => 'Couper la page sous les diffs',
-
-'underline-always'  => 'Tout le temps',
-'underline-never'   => 'Jamais',
+'tog-showtoc' => 'Montrer la table des matières (pour les pages avec plus que 3 têtes)',
+'tog-rememberpassword' => 'Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'Additionner les pages que je crée à ma liste des pages guettées',
+'tog-watchdefault' => 'Additionner les pages que je change à ma liste des pages guettées',
+'tog-watchmoves' => 'Additionner les pages que je renomme à ma liste des pages guettées',
+'tog-watchdeletion' => "Additionner les pages que j'ôte à ma liste des pages guettées",
+'tog-minordefault' => "Marquer tous les petits changements d'après le réglage",
+'tog-previewontop' => "Montrer la vue d'avance au-dessus la boëte de changement",
+'tog-previewonfirst' => "Montrer la vue d'avance au temps du premier changement",
+'tog-nocache' => 'Arrêter le cache des pages',
+'tog-enotifwatchlistpages' => 'Envoyer un e-mail quand une de mes pages guettées est changée',
+'tog-enotifusertalkpages' => 'Envoyer un e-mail quand ma page de discussion est changée',
+'tog-enotifminoredits' => 'Envoyer un e-mail même pour les petits changements',
+'tog-enotifrevealaddr' => "Montrer mon adresse e-mail dans les e-mails d'avertissement",
+'tog-shownumberswatching' => 'Montrer le montant de guetteurs',
+'tog-oldsig' => '↓ Preview du signature existant:',
+'tog-fancysig' => 'Signature brute (sans liens préparés)',
+'tog-externaleditor' => 'Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur)',
+'tog-externaldiff' => 'User un autre comparateur comme réglage ordinaire',
+'tog-showjumplinks' => 'Mettre les "liens vites" en haut de la page',
+'tog-uselivepreview' => "User la vue d'avance vite (JavaScript) (En assai)",
+'tog-forceeditsummary' => "M'avertir quand j'ai laissé la boëte de commentaires vide",
+'tog-watchlisthideown' => 'Cacher mes changements dans la liste des pages guettées',
+'tog-watchlisthidebots' => 'Cacher les changements faits par les bots dans la liste des pages guettées',
+'tog-watchlisthideminor' => 'Cacher les petits changements dans la liste des pages guettées',
+'tog-watchlisthideliu' => 'Cacher édites de useurs anonymes du liste de pages guettées',
+'tog-watchlisthideanons' => 'Cacher édites de useurs anonymes du liste de pages guettées',
+'tog-watchlisthidepatrolled' => 'Cacher les changements faits par les bots dans la liste des pages guettées',
+'tog-ccmeonemails' => "Envoyer une copie des e-mails que j'envoye aux autres useurs",
+'tog-diffonly' => 'Couper la page sous les diffs',
+
+'underline-always' => 'Tout le temps',
+'underline-never' => 'Jamais',
 'underline-default' => "D'après le réglage du navigateur",
 
 # Dates
-'sunday'        => 'dimanche',
-'monday'        => 'lundi',
-'tuesday'       => 'mardi',
-'wednesday'     => 'mercredi',
-'thursday'      => 'jeudi',
-'friday'        => 'vendredi',
-'saturday'      => 'samedi',
-'sun'           => 'dim',
-'mon'           => 'lun',
-'tue'           => 'mar',
-'wed'           => 'mer',
-'thu'           => 'jeu',
-'fri'           => 'ven',
-'sat'           => 'sam',
-'january'       => 'de janvier',
-'february'      => 'de février',
-'march'         => 'de mars',
-'april'         => "d'avril",
-'may_long'      => 'de mai',
-'june'          => 'de juin',
-'july'          => 'de juliette',
-'august'        => "d'août",
-'september'     => 'de septembre',
-'october'       => "d'octobre",
-'november'      => 'de novembre',
-'december'      => 'de décembre',
-'january-gen'   => 'janvier',
-'february-gen'  => 'février',
-'march-gen'     => 'mars',
-'april-gen'     => 'avril',
-'may-gen'       => 'mai',
-'june-gen'      => 'juin',
-'july-gen'      => 'juliette',
-'august-gen'    => 'août',
+'sunday' => 'dimanche',
+'monday' => 'lundi',
+'tuesday' => 'mardi',
+'wednesday' => 'mercredi',
+'thursday' => 'jeudi',
+'friday' => 'vendredi',
+'saturday' => 'samedi',
+'sun' => 'dim',
+'mon' => 'lun',
+'tue' => 'mar',
+'wed' => 'mer',
+'thu' => 'jeu',
+'fri' => 'ven',
+'sat' => 'sam',
+'january' => 'de janvier',
+'february' => 'de février',
+'march' => 'de mars',
+'april' => "d'avril",
+'may_long' => 'de mai',
+'june' => 'de juin',
+'july' => 'de juliette',
+'august' => "d'août",
+'september' => 'de septembre',
+'october' => "d'octobre",
+'november' => 'de novembre',
+'december' => 'de décembre',
+'january-gen' => 'janvier',
+'february-gen' => 'février',
+'march-gen' => 'mars',
+'april-gen' => 'avril',
+'may-gen' => 'mai',
+'june-gen' => 'juin',
+'july-gen' => 'juliette',
+'august-gen' => 'août',
 'september-gen' => 'septembre',
-'october-gen'   => 'octobre',
-'november-gen'  => 'novembre',
-'december-gen'  => 'décembre',
-'jan'           => 'jan',
-'feb'           => 'fév',
-'mar'           => 'mar',
-'apr'           => 'avr',
-'may'           => 'mai',
-'jun'           => 'jui',
-'jul'           => 'jul',
-'aug'           => 'aoû',
-'sep'           => 'sep',
-'oct'           => 'oct',
-'nov'           => 'nov',
-'dec'           => 'déc',
+'october-gen' => 'octobre',
+'november-gen' => 'novembre',
+'december-gen' => 'décembre',
+'jan' => 'jan',
+'feb' => 'fév',
+'mar' => 'mar',
+'apr' => 'avr',
+'may' => 'mai',
+'jun' => 'jui',
+'jul' => 'jul',
+'aug' => 'aoû',
+'sep' => 'sep',
+'oct' => 'oct',
+'nov' => 'nov',
+'dec' => 'déc',
 
 # Categories related messages
-'pagecategories'        => '{{PLURAL:$1|Classe|Classes}}',
-'category_header'       => 'Articles dans classe "$1"',
-'subcategories'         => 'Sous-classes',
+'pagecategories' => '{{PLURAL:$1|Classe|Classes}}',
+'category_header' => 'Articles dans classe "$1"',
+'subcategories' => 'Sous-classes',
 'category-media-header' => 'Média dans classe "$1"',
-'category-empty'        => "''À présent, cette classe a ni articles ni média.''",
+'category-empty' => "''À présent, cette classe a ni articles ni média.''",
 
-'about'         => 'Info',
-'article'       => 'Page des matières',
-'newwindow'     => '(va ouverre une nouvelle fenêtre)',
-'cancel'        => 'Arrêter',
+'about' => 'Info',
+'article' => 'Page des matières',
+'newwindow' => '(va ouverre une nouvelle fenêtre)',
+'cancel' => 'Arrêter',
 'moredotdotdot' => 'Plus...',
-'mypage'        => 'Ma page',
-'mytalk'        => 'Ma page de discussion',
-'anontalk'      => 'Discussion avec cette adresse IP',
-'navigation'    => 'Navigation',
+'mypage' => 'Ma page',
+'mytalk' => 'Ma page de discussion',
+'anontalk' => 'Discussion avec cette adresse IP',
+'navigation' => 'Navigation',
 
 # Cologne Blue skin
-'qbfind'         => 'Charcher',
-'qbbrowse'       => 'Regarder',
-'qbedit'         => 'Changer',
-'qbpageoptions'  => 'Page de choix',
-'qbpageinfo'     => "Page d'information",
-'qbmyoptions'    => 'Mes options',
+'qbfind' => 'Charcher',
+'qbbrowse' => 'Regarder',
+'qbedit' => 'Changer',
+'qbpageoptions' => 'Page de choix',
+'qbpageinfo' => "Page d'information",
+'qbmyoptions' => 'Mes options',
 'qbspecialpages' => 'Pages espéciales',
-'faq'            => 'Questions Communes',
-'faqpage'        => 'Project:Questions Communes',
+'faq' => 'Questions Communes',
+'faqpage' => 'Project:Questions Communes',
 
 # Vector skin
-'vector-action-delete'  => 'Supprimer',
+'vector-action-delete' => 'Supprimer',
 'vector-action-protect' => 'Protéger',
 
-'errorpagetitle'    => 'Erreur',
-'returnto'          => 'Retourner back à la page $1.',
-'tagline'           => 'Un article de {{SITENAME}}',
-'help'              => 'Aide',
-'search'            => 'Charcher',
-'searchbutton'      => 'Charcher',
-'go'                => 'Aller',
-'searcharticle'     => 'Aller',
-'history'           => 'Changements',
-'history_short'     => 'Changements',
-'updatedmarker'     => 'changé depuis ma dernière visite',
-'printableversion'  => 'Version imprimable',
-'permalink'         => 'Lien permanent',
-'print'             => 'Imprimer',
-'edit'              => 'Changer',
-'editthispage'      => 'Faire un changement',
-'delete'            => 'Supprimer',
-'deletethispage'    => 'Supprimer cette page',
-'undelete_short'    => 'Rétablir {{PLURAL:$1|un changement|$1 changements}}',
-'protect'           => 'Protéger',
-'protect_change'    => 'Changer le niveau de protection',
-'protectthispage'   => 'Protéger cette page',
-'unprotect'         => 'déprotéger',
+'errorpagetitle' => 'Erreur',
+'returnto' => 'Retourner back à la page $1.',
+'tagline' => 'Un article de {{SITENAME}}',
+'help' => 'Aide',
+'search' => 'Charcher',
+'searchbutton' => 'Charcher',
+'go' => 'Aller',
+'searcharticle' => 'Aller',
+'history' => 'Changements',
+'history_short' => 'Changements',
+'updatedmarker' => 'changé depuis ma dernière visite',
+'printableversion' => 'Version imprimable',
+'permalink' => 'Lien permanent',
+'print' => 'Imprimer',
+'edit' => 'Changer',
+'editthispage' => 'Faire un changement',
+'delete' => 'Supprimer',
+'deletethispage' => 'Supprimer cette page',
+'undelete_short' => 'Rétablir {{PLURAL:$1|un changement|$1 changements}}',
+'protect' => 'Protéger',
+'protect_change' => 'Changer le niveau de protection',
+'protectthispage' => 'Protéger cette page',
+'unprotect' => 'déprotéger',
 'unprotectthispage' => 'Déprotéger cette page',
-'newpage'           => 'Nouvelle page',
-'talkpage'          => 'Discuter cette page',
-'talkpagelinktext'  => 'Discuter',
-'specialpage'       => 'Page espéciale',
-'personaltools'     => 'Outils personnels',
-'postcomment'       => 'Nouvelle section',
-'articlepage'       => "Voir l'article",
-'talk'              => 'Discussion',
-'views'             => 'Vues',
-'toolbox'           => "Boëte d'outils",
-'userpage'          => "Page d'useur",
-'projectpage'       => 'Page des projets',
-'imagepage'         => 'Page des images',
-'mediawikipage'     => 'Page des messages',
-'templatepage'      => 'Page de patron',
-'viewhelppage'      => "Page d'aide",
-'categorypage'      => 'Page des classes',
-'viewtalkpage'      => 'Page de discussion',
-'otherlanguages'    => 'Autres langues',
-'redirectedfrom'    => '(Envoyé ici de la page $1)',
-'redirectpagesub'   => 'Page de redirection',
-'lastmodifiedat'    => 'Cette page a été changée le $1 à $2.',
-'viewcount'         => 'Cette page a été visitée {{PLURAL:$1|$1 fois|$1 fois}}.',
-'protectedpage'     => 'Page protégée',
-'jumpto'            => 'Aller à:',
-'jumptosearch'      => 'charcher',
+'newpage' => 'Nouvelle page',
+'talkpage' => 'Discuter cette page',
+'talkpagelinktext' => 'Discuter',
+'specialpage' => 'Page espéciale',
+'personaltools' => 'Outils personnels',
+'postcomment' => 'Nouvelle section',
+'articlepage' => "Voir l'article",
+'talk' => 'Discussion',
+'views' => 'Vues',
+'toolbox' => "Boëte d'outils",
+'userpage' => "Page d'useur",
+'projectpage' => 'Page des projets',
+'imagepage' => 'Page des images',
+'mediawikipage' => 'Page des messages',
+'templatepage' => 'Page de patron',
+'viewhelppage' => "Page d'aide",
+'categorypage' => 'Page des classes',
+'viewtalkpage' => 'Page de discussion',
+'otherlanguages' => 'Autres langues',
+'redirectedfrom' => '(Envoyé ici de la page $1)',
+'redirectpagesub' => 'Page de redirection',
+'lastmodifiedat' => 'Cette page a été changée le $1 à $2.',
+'viewcount' => 'Cette page a été visitée {{PLURAL:$1|$1 fois|$1 fois}}.',
+'protectedpage' => 'Page protégée',
+'jumpto' => 'Aller à:',
+'jumptosearch' => 'charcher',
 
 # 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'            => "Qui c'est {{SITENAME}}?",
-'aboutpage'            => 'Project:Info',
-'copyright'            => 'Les matières sont avalable en accord avec $1',
-'copyrightpage'        => '{{ns:project}}:Protection de Droits',
-'currentevents'        => 'Événements',
-'currentevents-url'    => 'Project:Événements',
-'disclaimers'          => 'Avertissements',
-'disclaimerpage'       => 'Project:Avertissements ordinaires',
-'edithelp'             => 'Aide',
-'edithelppage'         => 'Help:Comment changer une page',
-'helppage'             => 'Help:Aide',
-'mainpage'             => 'Page Principale',
+'aboutsite' => "Qui c'est {{SITENAME}}?",
+'aboutpage' => 'Project:Info',
+'copyright' => 'Les matières sont avalable en accord avec $1',
+'copyrightpage' => '{{ns:project}}:Protection de Droits',
+'currentevents' => 'Événements',
+'currentevents-url' => 'Project:Événements',
+'disclaimers' => 'Avertissements',
+'disclaimerpage' => 'Project:Avertissements ordinaires',
+'edithelp' => 'Aide',
+'edithelppage' => 'Help:Comment changer une page',
+'helppage' => 'Help:Aide',
+'mainpage' => 'Page Principale',
 'mainpage-description' => 'Page Principale',
-'policy-url'           => 'Project:Régulations',
-'portal'               => 'Communauté',
-'portal-url'           => 'Project:Communauté',
-'privacy'              => 'Régulations des affaires privées',
-'privacypage'          => 'Project:Régulations des affaires privées',
+'policy-url' => 'Project:Régulations',
+'portal' => 'Communauté',
+'portal-url' => 'Project:Communauté',
+'privacy' => 'Régulations des affaires privées',
+'privacypage' => 'Project:Régulations des affaires privées',
 
-'badaccess'        => 'Erreur de permission',
+'badaccess' => 'Erreur de permission',
 'badaccess-group0' => 'Vous avez pas assez de permission de faire ça que vous demandez.',
 'badaccess-groups' => "L'action que vous avez demandé est juste pour les useurs dans une des groupes $1.",
 
-'versionrequired'     => 'Vous avez besoin de la version $1 de MediaWiki.',
+'versionrequired' => 'Vous avez besoin de la version $1 de MediaWiki.',
 'versionrequiredtext' => 'Vous avez besoin de la version $1 de MediaWiki pour utiliser cette page. Voir [[Special:Version]].',
 
-'retrievedfrom'           => 'Pris de "$1"',
-'youhavenewmessages'      => 'Vous avez $1 ($2).',
-'newmessageslink'         => 'nouveaux messages',
-'newmessagesdifflink'     => 'dernier changement',
+'retrievedfrom' => 'Pris de "$1"',
+'youhavenewmessages' => 'Vous avez $1 ($2).',
+'newmessageslink' => 'nouveaux messages',
+'newmessagesdifflink' => 'dernier changement',
 'youhavenewmessagesmulti' => 'Vous avez des nouveaux messages sus $1.',
-'editsection'             => 'changer',
-'editold'                 => 'changer',
-'viewsourcelink'          => 'Voir la source',
-'editsectionhint'         => 'Changer la section: $1',
-'toc'                     => 'Matières',
-'showtoc'                 => 'montrer',
-'hidetoc'                 => 'cacher',
-'thisisdeleted'           => 'Vous aimerait mieux voir ou rétablir $1?',
-'viewdeleted'             => 'Voir $1?',
-'restorelink'             => '{{PLURAL:$1|1 changement ôté|$1 changements ôtés}}',
-'feedlinks'               => 'Distribution RSS:',
-'feed-invalid'            => 'Mauvaise qualité de distribution RSS.',
-'red-link-title'          => "$1 (page n'existe pas)",
+'editsection' => 'changer',
+'editold' => 'changer',
+'viewsourcelink' => 'Voir la source',
+'editsectionhint' => 'Changer la section: $1',
+'toc' => 'Matières',
+'showtoc' => 'montrer',
+'hidetoc' => 'cacher',
+'thisisdeleted' => 'Vous aimerait mieux voir ou rétablir $1?',
+'viewdeleted' => 'Voir $1?',
+'restorelink' => '{{PLURAL:$1|1 changement ôté|$1 changements ôtés}}',
+'feedlinks' => 'Distribution RSS:',
+'feed-invalid' => 'Mauvaise qualité de distribution RSS.',
+'red-link-title' => "$1 (page n'existe pas)",
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Page',
-'nstab-user'     => 'Useur',
-'nstab-media'    => 'Média',
-'nstab-special'  => 'Page espécial',
-'nstab-project'  => 'Info',
-'nstab-image'    => 'Dossier',
+'nstab-main' => 'Page',
+'nstab-user' => 'Useur',
+'nstab-media' => 'Média',
+'nstab-special' => 'Page espécial',
+'nstab-project' => 'Info',
+'nstab-image' => 'Dossier',
 'nstab-template' => 'Patron',
-'nstab-help'     => 'Aide',
+'nstab-help' => 'Aide',
 'nstab-category' => 'Classe',
 
 # Main script and global functions
-'nosuchaction'      => 'Action inconnue',
-'nosuchactiontext'  => "L'action demandée dans l'adresse URL est pas reconnue par le wiki.",
+'nosuchaction' => 'Action inconnue',
+'nosuchactiontext' => "L'action demandée dans l'adresse URL est pas reconnue par le wiki.",
 'nosuchspecialpage' => 'Page espéciale inconnue',
 'nospecialpagetext' => 'La page que vous avez demandée est pas une bonne page espéciale.  Vous pouvez trouver une liste des bonnes pages espéciales dans la [[Special:SpecialPages|liste des pages espéciales]].',
 
 # General errors
-'error'                => 'Erreur',
-'databaseerror'        => "Erreur de la base d'information",
-'dberrortext'          => 'Erreur de syntaxe dans la base d\'information.
+'error' => 'Erreur',
+'databaseerror' => "Erreur de la base d'information",
+'dberrortext' => 'Erreur de syntaxe dans la base d\'information.
 
 Ça pourrait vouloir dire qu\'y a une imperfection dans le software.<br />
 La dernière demande faite dans la base d\'information était:
 <blockquote><tt>$1</tt></blockquote>
 dedans la fonction "<tt>$2</tt>".<br />
 MySQL a retourné l\'erreur "<tt>$3: $4</tt>".',
-'dberrortextcl'        => 'Erreur de syntaxe dans la base d\'information.
+'dberrortextcl' => 'Erreur de syntaxe dans la base d\'information.
 
 La dernière demande faite dans la base d\'information était:
 "$1"
 dedans la fonction "$2".
 MySQL a retourné l\'erreur "$3: $4".',
-'laggedslavemode'      => 'Avertissement: La page est peut-être pas renouvelée.',
-'readonly'             => "La base d'information est barrée.",
-'enterlockreason'      => "Écrire une raison pour le barrage avec un temps estimé
+'laggedslavemode' => 'Avertissement: La page est peut-être pas renouvelée.',
+'readonly' => "La base d'information est barrée.",
+'enterlockreason' => "Écrire une raison pour le barrage avec un temps estimé
 d'équand le barrage va être ôté.",
-'readonlytext'         => "À présent, la base d'information est barrée aux nouveaux changements, peut-être pour le soutien habituel de la base d'information, et ça va retourner à normal t'à l'heure.
+'readonlytext' => "À présent, la base d'information est barrée aux nouveaux changements, peut-être pour le soutien habituel de la base d'information, et ça va retourner à normal t'à l'heure.
 
 L'administrateur qui l'a barrée a donné cette explication: $1",
-'readonly_lag'         => "La base d'information s'a barré pendant que les serveurs de la base d'information rapprochont le maître.",
-'internalerror'        => 'Erreur internelle',
-'internalerror_info'   => 'Erreur intérieur: $1',
-'filecopyerror'        => 'Impossible de copier le dossier de "$1" à "$2".',
-'filerenameerror'      => 'Impossible de renommer le dossier de "$1" à "$2".',
-'filedeleteerror'      => 'Impossible d\'ôter le dossier "$1".',
+'readonly_lag' => "La base d'information s'a barré pendant que les serveurs de la base d'information rapprochont le maître.",
+'internalerror' => 'Erreur internelle',
+'internalerror_info' => 'Erreur intérieur: $1',
+'filecopyerror' => 'Impossible de copier le dossier de "$1" à "$2".',
+'filerenameerror' => 'Impossible de renommer le dossier de "$1" à "$2".',
+'filedeleteerror' => 'Impossible d\'ôter le dossier "$1".',
 'directorycreateerror' => 'Impossible de créer le directoire "$1".',
-'filenotfound'         => 'Impossible de trouver le dossier "$1".',
-'fileexistserror'      => 'Impossible d\'écrire dans le dossier "$1": le dossier est là',
-'unexpected'           => 'Valeur pas prévue: "$1"="$2".',
-'formerror'            => "Erreur: impossible d'envoyer l'application",
-'badarticleerror'      => 'Cette action peut pas être faite sus cette page.',
-'cannotdelete'         => "Impossible d'ôter la page ou le dossier choisi.  (Il est possible que quèqu'une d'autre l'a déjà ôté.)",
-'badtitle'             => 'Mauvais titre',
-'badtitletext'         => 'Le titre que vous avez demandé était pas bon, vide, ou y avait un mauvais titre entre-langue ou entre-wiki.  Ça pourrait avoir des caractères qui pouvont pas être usés dans les titres.',
-'perfcached'           => 'Cette information est en cache et pourrait pas être courante. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'         => 'Cette information est en cache et le dernier changement a été fait $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'filenotfound' => 'Impossible de trouver le dossier "$1".',
+'fileexistserror' => 'Impossible d\'écrire dans le dossier "$1": le dossier est là',
+'unexpected' => 'Valeur pas prévue: "$1"="$2".',
+'formerror' => "Erreur: impossible d'envoyer l'application",
+'badarticleerror' => 'Cette action peut pas être faite sus cette page.',
+'cannotdelete' => "Impossible d'ôter la page ou le dossier choisi.  (Il est possible que quèqu'une d'autre l'a déjà ôté.)",
+'badtitle' => 'Mauvais titre',
+'badtitletext' => 'Le titre que vous avez demandé était pas bon, vide, ou y avait un mauvais titre entre-langue ou entre-wiki.  Ça pourrait avoir des caractères qui pouvont pas être usés dans les titres.',
+'perfcached' => 'Cette information est en cache et pourrait pas être courante. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcachedts' => 'Cette information est en cache et le dernier changement a été fait $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => "À présent, les renouvelages pour cette page sont barrés.  L'information ici va pas être renouvelée t'à l'heure.",
 'wrong_wfQuery_params' => 'Informaton incorrecte sus le wfQuery()<br />
 Fonction: $1<br />
 Demande: $2',
-'viewsource'           => 'Voir la source',
-'protectedpagetext'    => 'Cette page est barrée pour empêcher des changements.',
-'viewsourcetext'       => 'Vous pouvez voir et copier la source de cette page:',
-'protectedinterface'   => "Cette page crée le texte de l'interface pour le software, et est barrée pour empêcher l'abus.",
-'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+'viewsource' => 'Voir la source',
+'protectedpagetext' => 'Cette page est barrée pour empêcher des changements.',
+'viewsourcetext' => 'Vous pouvez voir et copier la source de cette page:',
+'protectedinterface' => "Cette page crée le texte de l'interface pour le software, et est barrée pour empêcher l'abus.",
+'editinginterface' => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
 Changes to this page will affect the appearance of the user interface for other users.
 For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
-'sqlhidden'            => '(Demande SQL cachée)',
-'cascadeprotected'     => 'Cette page est protégée parce qu’elle est incluse par {{PLURAL:$1|la page suivante, qui est protégée|les pages suivantes, qui sont protégées}} avec l’option « protection en cascade » activée :
+'sqlhidden' => '(Demande SQL cachée)',
+'cascadeprotected' => 'Cette page est protégée parce qu’elle est incluse par {{PLURAL:$1|la page suivante, qui est protégée|les pages suivantes, qui sont protégées}} avec l’option « protection en cascade » activée :
 $2',
-'namespaceprotected'   => 'Vous avez pas la permission de changer les pages dans l\'espace de noms "$1".',
-'ns-specialprotected'  => "Vous pouvez pas changer les pages dans l'espace de noms {{ns:special}}.",
+'namespaceprotected' => 'Vous avez pas la permission de changer les pages dans l\'espace de noms "$1".',
+'ns-specialprotected' => "Vous pouvez pas changer les pages dans l'espace de noms {{ns:special}}.",
 
 # Login and logout pages
-'logouttext'                 => "'''Vous êtes déconnecté asteur.'''
+'logouttext' => "'''Vous êtes déconnecté asteur.'''
 
 Vous pouvez continuer à user {{SITENAME}} sans nom ou vous pouvez connecter encore une fois avec le même nom ou un autre nom.
 Notez: certaines pages pourriont être vues comme si vous êtes connecté, jusqu'à vous videz l'information de votre navigateur.",
-'welcomecreation'            => '== Bonjour, $1! ==
+'welcomecreation' => '== Bonjour, $1! ==
 
 Votre compte a été créé.  Oubliez pas de changer votre réglage sus {{SITENAME}}.',
-'yourname'                   => "Nom d'useur:",
-'yourpassword'               => 'Mot de passe:',
-'yourpasswordagain'          => 'Mot de passe encore:',
-'remembermypassword'         => 'Garder mon mot de passe dans cette browser (pour un maximum of $1 {{PLURAL:$1|jour|jours}})',
-'yourdomainname'             => 'Votre domaine:',
-'externaldberror'            => "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
-'login'                      => 'Connecter',
-'nav-login-createaccount'    => 'Connecter / créer un compte',
-'loginprompt'                => 'Il faut partir les cookies pour connecter à {{SITENAME}}.',
-'userlogin'                  => 'Connecter / créer un compte',
-'logout'                     => 'Déconnecter',
-'userlogout'                 => 'Déconnecter',
-'notloggedin'                => 'Pas connecté',
-'nologin'                    => "Vous avez pas de compte? '''$1'''.",
-'nologinlink'                => 'Créez un compte',
-'createaccount'              => 'Créer un compte',
-'gotaccount'                 => "Vous avez un compte déjà? '''$1'''.",
-'gotaccountlink'             => 'Connectez',
-'userlogin-resetlink'        => 'Oublié vôtre détailes de log in?',
-'createaccountmail'          => 'par e-mail',
-'badretype'                  => 'Les mots de passe que vous avez mis sont pas pareils.',
-'userexists'                 => "Le nom d'useur choisi est déjà usé.  Choissez donc un autre nom.",
-'loginerror'                 => "Erreur d'identification",
-'nocookiesnew'               => "Votre compte a été créé, mais vous êtes pas connecté.  {{SITENAME}} use les cookies pour connecter les useurs.  Partez les cookies et connectez avec votre nouveau nom d'useur et votre mot de passe, s'il vous plaît.",
-'nocookieslogin'             => '{{SITENAME}} use les cookies pour connecter les useurs.  Partez donc les cookies et assayez encore.',
-'nocookiesfornew'            => "Le conte d'useur n'était pas fait, à cause qu'on pouvait pas confirmer la source.  Ensurer que tu as des cookies, reload ce page et essayer encore.",
-'noname'                     => "Vous avez pas mis un bon nom d'useur.",
-'loginsuccesstitle'          => 'Vous êtes connecté',
-'loginsuccess'               => "'''Asteur vous êtes connecté à {{SITENAME}} comme \"\$1\".'''",
-'nosuchuser'                 => 'Y a aucun utilisateur avec le nom "$1".  Les noms d\'utilisateur respectent les majuscules et minuscules. Vérifiez l\'orthographe, ou créez un nouveau compte.',
-'nosuchusershort'            => 'Y a aucun useur avec le nom "$1".  Regardez donc l\'espellage.',
-'nouserspecified'            => "Il faut mettre un nom d'useur.",
-'login-userblocked'          => 'Cet useur est blockée.  Log in pas accépté.',
-'wrongpassword'              => "Mauvais mot de passe.  Assayez encore s'il vous plaît.",
-'wrongpasswordempty'         => "Le mot de passe était vide.  Assayez encore s'il vous plaît.",
-'passwordtooshort'           => "Votre mot de passe est soit pas bon ou trop court.  Un mot de passe devrait avoir au moins $1 caractères et être différent de votre nom d'useur.",
-'mailmypassword'             => 'Envoyer mon mot de passe par e-mail',
-'passwordremindertitle'      => 'Votre nouveau mot de passe sus {{SITENAME}}',
-'passwordremindertext'       => 'Quèqu\'une (peut-être vous, de l\'adresse IP $1) a demandé qu\'on vous envoye un nouveau mot de passe pour {{SITENAME}} ($4).  Le mot de passe pour useur "$2" est "$3" asteur.  Vous devrait connecter et changer votre mot de passe asteur.
+'yourname' => "Nom d'useur:",
+'yourpassword' => 'Mot de passe:',
+'yourpasswordagain' => 'Mot de passe encore:',
+'remembermypassword' => 'Garder mon mot de passe dans cette browser (pour un maximum of $1 {{PLURAL:$1|jour|jours}})',
+'yourdomainname' => 'Votre domaine:',
+'externaldberror' => "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
+'login' => 'Connecter',
+'nav-login-createaccount' => 'Connecter / créer un compte',
+'loginprompt' => 'Il faut partir les cookies pour connecter à {{SITENAME}}.',
+'userlogin' => 'Connecter / créer un compte',
+'logout' => 'Déconnecter',
+'userlogout' => 'Déconnecter',
+'notloggedin' => 'Pas connecté',
+'nologin' => "Vous avez pas de compte? '''$1'''.",
+'nologinlink' => 'Créez un compte',
+'createaccount' => 'Créer un compte',
+'gotaccount' => "Vous avez un compte déjà? '''$1'''.",
+'gotaccountlink' => 'Connectez',
+'userlogin-resetlink' => 'Oublié vôtre détailes de log in?',
+'createaccountmail' => 'par e-mail',
+'badretype' => 'Les mots de passe que vous avez mis sont pas pareils.',
+'userexists' => "Le nom d'useur choisi est déjà usé.  Choissez donc un autre nom.",
+'loginerror' => "Erreur d'identification",
+'nocookiesnew' => "Votre compte a été créé, mais vous êtes pas connecté.  {{SITENAME}} use les cookies pour connecter les useurs.  Partez les cookies et connectez avec votre nouveau nom d'useur et votre mot de passe, s'il vous plaît.",
+'nocookieslogin' => '{{SITENAME}} use les cookies pour connecter les useurs.  Partez donc les cookies et assayez encore.',
+'nocookiesfornew' => "Le conte d'useur n'était pas fait, à cause qu'on pouvait pas confirmer la source.  Ensurer que tu as des cookies, reload ce page et essayer encore.",
+'noname' => "Vous avez pas mis un bon nom d'useur.",
+'loginsuccesstitle' => 'Vous êtes connecté',
+'loginsuccess' => "'''Asteur vous êtes connecté à {{SITENAME}} comme \"\$1\".'''",
+'nosuchuser' => 'Y a aucun utilisateur avec le nom "$1".  Les noms d\'utilisateur respectent les majuscules et minuscules. Vérifiez l\'orthographe, ou créez un nouveau compte.',
+'nosuchusershort' => 'Y a aucun useur avec le nom "$1".  Regardez donc l\'espellage.',
+'nouserspecified' => "Il faut mettre un nom d'useur.",
+'login-userblocked' => 'Cet useur est blockée.  Log in pas accépté.',
+'wrongpassword' => "Mauvais mot de passe.  Assayez encore s'il vous plaît.",
+'wrongpasswordempty' => "Le mot de passe était vide.  Assayez encore s'il vous plaît.",
+'passwordtooshort' => "Votre mot de passe est soit pas bon ou trop court.  Un mot de passe devrait avoir au moins $1 caractères et être différent de votre nom d'useur.",
+'mailmypassword' => 'Envoyer mon mot de passe par e-mail',
+'passwordremindertitle' => 'Votre nouveau mot de passe sus {{SITENAME}}',
+'passwordremindertext' => 'Quèqu\'une (peut-être vous, de l\'adresse IP $1) a demandé qu\'on vous envoye un nouveau mot de passe pour {{SITENAME}} ($4).  Le mot de passe pour useur "$2" est "$3" asteur.  Vous devrait connecter et changer votre mot de passe asteur.
 
 Si quèqu\'une d\'autre a demandé ce mot de passe ou si vous vous rappelez de votre mot de passe et vous voulez p\'us le changer, vous pouvez ignorer ce message et continuer à user votre vieux mot de passe.',
-'noemail'                    => 'Y a aucune adresse e-mail pour l\'useur "$1".',
-'passwordsent'               => 'Un nouveau mot de passe a été envoyé à l\'adresse e-mail de l\'useur "$1".  Reconnectez donc après que vous l\'avez reçu.',
-'blocked-mailpassword'       => "Votre adresse IP est bloquée.  Pour empêcher l'abus, vous pouvez ni faire des changements ni user la fonction de rappel du mot de passe.",
-'eauthentsent'               => "Un message de confirmation a été envoyé à l'adresse e-mail choisie.  Avant qu'on peuve envoyer des autres e-mails à ce compte, il faut que vous suivez les instructions dans le message pour confirmer que le compte est le vôtre.",
-'throttled-mailpassword'     => "On a déjà envoyé un e-mail de rappel avec votre mot de passe dans les $1 dernières heures.  Pour empêcher l'abus, juste un seul e-mail de rappel va être envoyé en $1 heures.",
-'mailerror'                  => 'On pouvait pas envoyer votre e-mail: $1',
+'noemail' => 'Y a aucune adresse e-mail pour l\'useur "$1".',
+'passwordsent' => 'Un nouveau mot de passe a été envoyé à l\'adresse e-mail de l\'useur "$1".  Reconnectez donc après que vous l\'avez reçu.',
+'blocked-mailpassword' => "Votre adresse IP est bloquée.  Pour empêcher l'abus, vous pouvez ni faire des changements ni user la fonction de rappel du mot de passe.",
+'eauthentsent' => "Un message de confirmation a été envoyé à l'adresse e-mail choisie.  Avant qu'on peuve envoyer des autres e-mails à ce compte, il faut que vous suivez les instructions dans le message pour confirmer que le compte est le vôtre.",
+'throttled-mailpassword' => "On a déjà envoyé un e-mail de rappel avec votre mot de passe dans les $1 dernières heures.  Pour empêcher l'abus, juste un seul e-mail de rappel va être envoyé en $1 heures.",
+'mailerror' => 'On pouvait pas envoyer votre e-mail: $1',
 'acct_creation_throttle_hit' => "Ça fait de la peine, vous avez déjà créé $1 comptes.  Vous pouvez pas en créer d'autres.",
-'emailauthenticated'         => 'Votre adresse e-mail a été certifiée le $1.',
-'emailnotauthenticated'      => 'Votre adresse e-mail est pas encore certifiée.  On va pas envoyer des e-mails pour les fonctions suivantes.',
-'noemailprefs'               => 'Il faut donner une adresse e-mail pour partir ces fonctions.',
-'emailconfirmlink'           => 'Confirmez votre adresse e-mail',
-'invalidemailaddress'        => "L'adresse e-mail peut pas être acceptée parce que c'est pas bien écrit.  Mettez donc une bonne adresse ou laissez-lé vide.",
-'accountcreated'             => 'Compte créé',
-'accountcreatedtext'         => "Le compte d'useur pour $1 a été créé.",
-'loginlanguagelabel'         => 'Langue: $1',
+'emailauthenticated' => 'Votre adresse e-mail a été certifiée le $1.',
+'emailnotauthenticated' => 'Votre adresse e-mail est pas encore certifiée.  On va pas envoyer des e-mails pour les fonctions suivantes.',
+'noemailprefs' => 'Il faut donner une adresse e-mail pour partir ces fonctions.',
+'emailconfirmlink' => 'Confirmez votre adresse e-mail',
+'invalidemailaddress' => "L'adresse e-mail peut pas être acceptée parce que c'est pas bien écrit.  Mettez donc une bonne adresse ou laissez-lé vide.",
+'accountcreated' => 'Compte créé',
+'accountcreatedtext' => "Le compte d'useur pour $1 a été créé.",
+'loginlanguagelabel' => 'Langue: $1',
 
 # Change password dialog
-'resetpass'           => 'Rétablir le mot de passe du compte',
-'resetpass_announce'  => "Pour le moment, vous êtes connecté avec un mot de passe qu'a été envoyé par e-mail.  Pour finir de vous connecter, il faut créer un nouveau mot de passe ici:",
-'resetpass_text'      => '<!-- Mettez du texte ici -->',
-'resetpass_header'    => 'Rétablir le mot de passe',
-'resetpass_submit'    => 'Créer le mot de passe et connecter',
-'resetpass_success'   => 'Vous avez bien changé votre mot de passe!  On est après vous connecter...',
+'resetpass' => 'Rétablir le mot de passe du compte',
+'resetpass_announce' => "Pour le moment, vous êtes connecté avec un mot de passe qu'a été envoyé par e-mail.  Pour finir de vous connecter, il faut créer un nouveau mot de passe ici:",
+'resetpass_text' => '<!-- Mettez du texte ici -->',
+'resetpass_header' => 'Rétablir le mot de passe',
+'resetpass_submit' => 'Créer le mot de passe et connecter',
+'resetpass_success' => 'Vous avez bien changé votre mot de passe!  On est après vous connecter...',
 'resetpass_forbidden' => 'Vous pouvez pas changer votre mot de passe sus ce wiki ici.',
 
 # Edit page toolbar
-'bold_sample'     => 'Gras',
-'bold_tip'        => 'Gras',
-'italic_sample'   => 'Italique',
-'italic_tip'      => 'Italique',
-'link_sample'     => 'Nom du lien',
-'link_tip'        => 'Lien intérieur',
-'extlink_sample'  => 'http://www.example.com nom du lien',
-'extlink_tip'     => 'Lien extérieur (Oubliez pas de mettre http:// avant.)',
+'bold_sample' => 'Gras',
+'bold_tip' => 'Gras',
+'italic_sample' => 'Italique',
+'italic_tip' => 'Italique',
+'link_sample' => 'Nom du lien',
+'link_tip' => 'Lien intérieur',
+'extlink_sample' => 'http://www.example.com nom du lien',
+'extlink_tip' => 'Lien extérieur (Oubliez pas de mettre http:// avant.)',
 'headline_sample' => 'Sujet',
-'headline_tip'    => 'Sujet niveau 2',
-'nowiki_sample'   => 'Mettez du texte non-préparé ici',
-'nowiki_tip'      => 'Ignorez le code wiki',
-'image_sample'    => 'Exemple.jpg',
-'image_tip'       => 'Mettez un portrait',
-'media_sample'    => 'Exemple.ogg',
-'media_tip'       => 'Lien dossier',
-'sig_tip'         => 'Votre signature avec la date',
-'hr_tip'          => 'Ligne horizontale (Abusez-lé pas.)',
+'headline_tip' => 'Sujet niveau 2',
+'nowiki_sample' => 'Mettez du texte non-préparé ici',
+'nowiki_tip' => 'Ignorez le code wiki',
+'image_sample' => 'Exemple.jpg',
+'image_tip' => 'Mettez un portrait',
+'media_sample' => 'Exemple.ogg',
+'media_tip' => 'Lien dossier',
+'sig_tip' => 'Votre signature avec la date',
+'hr_tip' => 'Ligne horizontale (Abusez-lé pas.)',
 
 # Edit pages
-'summary'                          => 'Description:',
-'subject'                          => 'Sujet:',
-'minoredit'                        => "Ça ici, c'est un petit changement.",
-'watchthis'                        => 'Guetter cette page',
-'savearticle'                      => 'Sauver la page',
-'preview'                          => "Vue d'avance",
-'showpreview'                      => "Vue d'avance",
-'showlivepreview'                  => "Vue d'avance vite",
-'showdiff'                         => 'Montrer les changements',
-'anoneditwarning'                  => "'''Attention:''' Vous êtes pas connecté.  Votre adresse IP vas être sauvée dans la liste des changements pour cette page.",
-'missingsummary'                   => "'''Attention:'''  Vous avez pas mis de description.  Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans description.",
-'missingcommenttext'               => 'Mettez donc un commentaire en bas.',
-'missingcommentheader'             => "'''Attention :''' Vous avez pas mis de sujet pour ce commentaire. Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans sujet.",
-'summary-preview'                  => "Vue d'avance de la description:",
-'subject-preview'                  => "Vue d'avance du sujet:",
-'blockedtitle'                     => "L'useur est bloqué",
-'blockedtext'                      => "'''Votre compte d'useur (ou votre adresse IP) est bloqué.'''
+'summary' => 'Description:',
+'subject' => 'Sujet:',
+'minoredit' => "Ça ici, c'est un petit changement.",
+'watchthis' => 'Guetter cette page',
+'savearticle' => 'Sauver la page',
+'preview' => "Vue d'avance",
+'showpreview' => "Vue d'avance",
+'showlivepreview' => "Vue d'avance vite",
+'showdiff' => 'Montrer les changements',
+'anoneditwarning' => "'''Attention:''' Vous êtes pas connecté.  Votre adresse IP vas être sauvée dans la liste des changements pour cette page.",
+'missingsummary' => "'''Attention:'''  Vous avez pas mis de description.  Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans description.",
+'missingcommenttext' => 'Mettez donc un commentaire en bas.',
+'missingcommentheader' => "'''Attention :''' Vous avez pas mis de sujet pour ce commentaire. Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans sujet.",
+'summary-preview' => "Vue d'avance de la description:",
+'subject-preview' => "Vue d'avance du sujet:",
+'blockedtitle' => "L'useur est bloqué",
+'blockedtext' => "'''Votre compte d'useur (ou votre adresse IP) est bloqué.'''
 
 Le blocage a été fait par $1.  La raison donnée est ''$2''.
 
@@ -443,7 +442,7 @@ Le blocage a été fait par $1.  La raison donnée est ''$2''.
 * L'useur bloqué: $7
 
 Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour discuter le blocage.  Vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user.  Votre adresse IP est $3, et le numéro du blocage est #$5.  Mettez donc cette information dans toutes vos demandes.",
-'autoblockedtext'                  => "Le système a bloqué votre adresse IP parce qu'alle a été usée par un autre useur qu'était bloqué par $1.
+'autoblockedtext' => "Le système a bloqué votre adresse IP parce qu'alle a été usée par un autre useur qu'était bloqué par $1.
 
 La raison donnée est: ''$2''
 
@@ -455,74 +454,76 @@ Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrat
 Notez donc que vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user.
 
 Votre numéro de blocage est #$5.  Mettez donc cette information dans toutes vos demandes.",
-'whitelistedittext'                => 'Il faut $1 pour faire des changements.',
-'confirmedittext'                  => "Il faut confirmer votre adresse e-mail pour faire des changements.  Mettez et confirmez un adresse e-mail dans votre [[Special:Preferences|réglage de compte]], s'il vous plaît.",
-'nosuchsectiontitle'               => 'Aucune section pareille',
-'nosuchsectiontext'                => "Vous avez assayé de faire des changements dans une section qu'existe pas.",
-'loginreqtitle'                    => 'Il faut connecter.',
-'loginreqlink'                     => 'connecter',
-'loginreqpagetext'                 => 'Il faut $1 pour voir des autres pages.',
-'accmailtitle'                     => 'Mot de passe envoyé.',
-'accmailtext'                      => 'Le mot de passe pour "$1" a été envoyé à $2.',
-'newarticle'                       => '(Nouveau)',
-'newarticletext'                   => "Vous avez suit un lien à une page qu'existe pas encore.
+'whitelistedittext' => 'Il faut $1 pour faire des changements.',
+'confirmedittext' => "Il faut confirmer votre adresse e-mail pour faire des changements.  Mettez et confirmez un adresse e-mail dans votre [[Special:Preferences|réglage de compte]], s'il vous plaît.",
+'nosuchsectiontitle' => 'Aucune section pareille',
+'nosuchsectiontext' => "Vous avez assayé de faire des changements dans une section qu'existe pas.",
+'loginreqtitle' => 'Il faut connecter.',
+'loginreqlink' => 'connecter',
+'loginreqpagetext' => 'Il faut $1 pour voir des autres pages.',
+'accmailtitle' => 'Mot de passe envoyé.',
+'accmailtext' => 'Le mot de passe pour "$1" a été envoyé à $2.',
+'newarticle' => '(Nouveau)',
+'newarticletext' => "Vous avez suit un lien à une page qu'existe pas encore.
 Pour créer la page, mettez des mots dans la boëte en bas (voyez la [[{{MediaWiki:Helppage}}|page d'aide]] pour plus d'information).
 Si vous êtes ici par erreur, cliquez le bouton \"back\" sus votre navigateur.",
-'anontalkpagetext'                 => "----''Ça ici, c'est la page de discussion pour un useur sans nom qu'a pas encore créé un compte ou qui l'use pas.  Ça fait, il faut user l'adresse IP numérique pour l'identifier.  Une adresse comme ça pourrait être usée par plusieurs useurs.  Si vous êtes un useur sans nom et vous croyez que des messages sans rapport ont été envoyés à vous, [[Special:UserLogin|créer un compte ou connecter]] pour empêcher la confusion avec des autres useurs sans nom dans l'avenir.''",
-'noarticletext'                    => 'À présent, y a pas de texte sus cette page.
+'anontalkpagetext' => "----''Ça ici, c'est la page de discussion pour un useur sans nom qu'a pas encore créé un compte ou qui l'use pas.  Ça fait, il faut user l'adresse IP numérique pour l'identifier.  Une adresse comme ça pourrait être usée par plusieurs useurs.  Si vous êtes un useur sans nom et vous croyez que des messages sans rapport ont été envoyés à vous, [[Special:UserLogin|créer un compte ou connecter]] pour empêcher la confusion avec des autres useurs sans nom dans l'avenir.''",
+'noarticletext' => 'À présent, y a pas de texte sus cette page.
 Vous pouvez [[Special:Search/{{PAGENAME}}|charcher pour le titre de cette page]] dans des autres pages, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} charcher dans les notes parents], ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} changer cette page]</span>.',
-'clearyourcache'                   => "'''Notez:''' Après que vous avez sauvé votres changements, il foudra peut-être dépasser le cache de votre navigateur pour voir les changements.  '''Mozilla / Firefox / Safari:''' Tenez le bouton ''Shift'' en pèsant ''Reload'', ou pèsez ''Ctrl-Shift-R'' (''Cmd-Shift-R'' sus Apple Mac); '''IE:''' Tenez ''Ctrl'' en pèsant ''Refresh'', ou pèsez ''Ctrl-F5''; '''Konqueror:''' Simplement pèsez le bouton ''Reload'', ou pèsez ''F5''; Pour les useurs de '''Opera''', il foudra peut-être vider complètement le cache dans ''Tools→Preferences''.",
-'usercssyoucanpreview'             => "'''Conseil:''' Usez le bouton \"Vue d'avance\" pour tester votre nouvelle feuille CSS avant de la sauver.",
-'userjsyoucanpreview'              => "'''Conseil:''' Usez le bouton \"Vue d'avance\" pour tester votre nouvelle feuille JS avant de la sauver.",
-'usercsspreview'                   => "'''Rappelez-vous que vous êtes après regarder votre feuille CSS qu'a pas encore été sauvée!'''",
-'userjspreview'                    => "'''Rappelez-vous que vous êtes juste après regarder ou tester votre code JavaScript qu'a pas encore été sauvé!'''",
-'userinvalidcssjstitle'            => "'''Attention:''' Y a pas de style \"\$1\".  Rappelez-vous qu'il faut user les petites lettres dans le sujet des pages personnelles avec les extensions .css et .js.
+'clearyourcache' => "'''Notez:''' Après que vous avez sauvé votres changements, il foudra peut-être dépasser le cache de votre navigateur pour voir les changements.  '''Mozilla / Firefox / Safari:''' Tenez le bouton ''Shift'' en pèsant ''Reload'', ou pèsez ''Ctrl-Shift-R'' (''Cmd-Shift-R'' sus Apple Mac); '''IE:''' Tenez ''Ctrl'' en pèsant ''Refresh'', ou pèsez ''Ctrl-F5''; '''Konqueror:''' Simplement pèsez le bouton ''Reload'', ou pèsez ''F5''; Pour les useurs de '''Opera''', il foudra peut-être vider complètement le cache dans ''Tools→Preferences''.",
+'usercssyoucanpreview' => "'''Conseil:''' Usez le bouton \"Vue d'avance\" pour tester votre nouvelle feuille CSS avant de la sauver.",
+'userjsyoucanpreview' => "'''Conseil:''' Usez le bouton \"Vue d'avance\" pour tester votre nouvelle feuille JS avant de la sauver.",
+'usercsspreview' => "'''Rappelez-vous que vous êtes après regarder votre feuille CSS qu'a pas encore été sauvée!'''",
+'userjspreview' => "'''Rappelez-vous que vous êtes juste après regarder ou tester votre code JavaScript qu'a pas encore été sauvé!'''",
+'userinvalidcssjstitle' => "'''Attention:''' Y a pas de style \"\$1\".  Rappelez-vous qu'il faut user les petites lettres dans le sujet des pages personnelles avec les extensions .css et .js.
 Exemple:  {{ns:user}}:Foo/vector.css (bon)  {{ns:user}}:Foo/Vector.css (mauvais)",
-'updated'                          => '(Renouvelé)',
-'note'                             => "'''Notez:'''",
-'previewnote'                      => "'''Ça ici, c'est juste une vue d'avance; les changements ont pas encore été sauvés!'''",
-'previewconflict'                  => "Cette vue d'avance montre le texte qu'est dans la boëte de changements en haut comme ça serait si vous choisirait de le sauver.",
-'session_fail_preview'             => "'''Ça fait de la peine!  Votre changement pouvait pas être sauvé à cause d'une perte d'information de la session.  Assayez donc encore.  Si ça travaille pas toujours, assayez de déconnecter et reconnecter.'''",
-'session_fail_preview_html'        => "'''Ça fait de la peine!  Votre changement pouvait pas être sauvé à cause d'une perte d'information de votre session.'''
+'updated' => '(Renouvelé)',
+'note' => "'''Notez:'''",
+'previewnote' => "'''Ça ici, c'est juste une vue d'avance; les changements ont pas encore été sauvés!'''",
+'previewconflict' => "Cette vue d'avance montre le texte qu'est dans la boëte de changements en haut comme ça serait si vous choisirait de le sauver.",
+'session_fail_preview' => "'''Ça fait de la peine!  Votre changement pouvait pas être sauvé à cause d'une perte d'information de la session.  Assayez donc encore.  Si ça travaille pas toujours, assayez de déconnecter et reconnecter.'''",
+'session_fail_preview_html' => "'''Ça fait de la peine!  Votre changement pouvait pas être sauvé à cause d'une perte d'information de votre session.'''
 
 ''La vue d'avance est cachée pour empêcher les attaques JavaScript parce que ce wiki use le HTML brute.''
 
 '''Si ça ici est un changement juste, assayez donc encore.  Si ça travaille pas toujours, assayez de déconnecter et reconnecter.'''",
-'token_suffix_mismatch'            => "'''Votre changement pouvait pas être accepté parce que votre navigateur a mélangé les caractères de ponctuation dans l'indication des changements.  Le changement a été rejeté pour empêcher la corruption du texte de l'article.  Ça arrive des fois quand vous êtes après user un proxy sans nom.'''",
-'editing'                          => 'Changement de $1',
-'editingsection'                   => 'Changement de $1 (section)',
-'editingcomment'                   => 'Changement de $1 (remarque)',
-'editconflict'                     => 'Dispute de changement: $1',
-'explainconflict'                  => "Quèqu'une d'autre a changé cette page depuis vous avez commencé à la changer.
+'token_suffix_mismatch' => "'''Votre changement pouvait pas être accepté parce que votre navigateur a mélangé les caractères de ponctuation dans l'indication des changements.  Le changement a été rejeté pour empêcher la corruption du texte de l'article.  Ça arrive des fois quand vous êtes après user un proxy sans nom.'''",
+'editing' => 'Changement de $1',
+'editingsection' => 'Changement de $1 (section)',
+'editingcomment' => 'Changement de $1 (remarque)',
+'editconflict' => 'Dispute de changement: $1',
+'explainconflict' => "Quèqu'une d'autre a changé cette page depuis vous avez commencé à la changer.
 La boëtte de changements en haut contient le texte de la page comme c'est asteur.
 Vos changements sont montrés dans la boëtte de changements en bas.
 Il foudra que vous mettez vos changements dans le texte qu'est là asteur.
 '''Juste''' le texte dans la boëtte de changements en haut va être sauvé quand vous pèsez \"{{int:savearticle}}\".",
-'yourtext'                         => 'Votre texte',
-'storedversion'                    => 'Version sauvée',
-'nonunicodebrowser'                => "'''ATTENTION: Votre navigateur supporte pas les caractères unicode.  Une solution de peu de durée a été trouvée pour que vous peuvez changer des articles sans problèmes.  Les caractères qui sont pas ASCII va apparaître dans la boëte de changements comme des codes hexadécimaux.'''",
-'editingold'                       => "'''ATTENTION: Vous êtes après changer une vieille version de cette page.  Si vous le sauverait, vous perdrait n'importe quels changements faits depuis cette version.'''",
-'yourdiff'                         => 'Différences',
-'copyrightwarning'                 => "Notez donc que toutes les contributions à {{SITENAME}} sont considérées d'être libérées sous le $2 (voyez $1 pour les détails).  Si vous voulez pas que votre écriture soye changée sans pitié et redistribuée à volonté, mettez donc pas votre écriture ici.<br />  Vous êtes après nous promettre aussi que vous l'avez écrit vous-même ou que vous l'avez copié du domain public ou un autre ressource libre. ''' METTEZ PAS DE L'OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION!'''",
-'copyrightwarning2'                => "Notez donc que toutes les contributions à {{SITENAME}} pourriont être changées ou ôtées par des autres useurs.  Si vous voulez pas que votre écriture soye changée sans pitié, mettez donc pas votre écriture ici.<br />  Vous êtes après nous promettre aussi que vous l'avez écrit vous-même ou que vous l'avez copié du domain public ou un autre ressource libre (voyez $1 pour les détails). ''' METTEZ PAS DE L'OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION!'''",
-'longpageerror'                    => "'''ERREUR: Le texte que vous avec mis a une taille de $1 kilobytes qu'est plus grande que le maximum de $2 kilobytes.  Ça peut pas être sauvé.'''",
-'readonlywarning'                  => "'''ATTENTION: La base d'information a été barrée, ça fait, vous serez pas capable de sauver votres changements asteur.  Vous ferait mieux de copier et coller le texte dans un dossier texte et le sauver pour plus tard.'''",
-'protectedpagewarning'             => "'''ATTENTION: Cette page a été barrée pour que ça peuve être changée juste par les administrateurs.'''",
-'semiprotectedpagewarning'         => "'''Notez:'''  Cette page a été barrée pour que ça peuve être changé juste par les useurs connectés.",
-'cascadeprotectedwarning'          => "'''Attention :''' Cette page est protégée (ne peut être modifiée que par les administrateurs) parce qu’elle est incluse par {{PLURAL:$1|une page protégée|des pages protégées}} avec la protection en cascade activée :",
-'templatesused'                    => 'Patrons usés sus cette page:',
-'templatesusedpreview'             => "Patrons usés dans cette vue d'avance:",
-'templatesusedsection'             => 'Patrons usés dans cette section:',
-'template-protected'               => '(protégé)',
-'template-semiprotected'           => '(demi-protégé)',
-'edittools'                        => "<!-- Le texte que vous mettez ici va être montré sous les boëttes de changements ou d'import de dossier. -->",
-'nocreatetitle'                    => 'Création de page limitée',
-'nocreatetext'                     => "La création des pages est limitée.  Vous pouvez changer une page qu'a été déjà créée ou [[Special:UserLogin|connecter ou créer un compte]].",
-'nocreate-loggedin'                => 'Vous avez pas la permission de créer des nouvelles pages.',
-'permissionserrors'                => 'Erreur de permissions',
-'permissionserrorstext'            => 'Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:',
+'yourtext' => 'Votre texte',
+'storedversion' => 'Version sauvée',
+'nonunicodebrowser' => "'''ATTENTION: Votre navigateur supporte pas les caractères unicode.  Une solution de peu de durée a été trouvée pour que vous peuvez changer des articles sans problèmes.  Les caractères qui sont pas ASCII va apparaître dans la boëte de changements comme des codes hexadécimaux.'''",
+'editingold' => "'''ATTENTION: Vous êtes après changer une vieille version de cette page.  Si vous le sauverait, vous perdrait n'importe quels changements faits depuis cette version.'''",
+'yourdiff' => 'Différences',
+'copyrightwarning' => "Notez donc que toutes les contributions à {{SITENAME}} sont considérées d’être libérées sous le $2 (voyez $1 pour les détails). Si vous voulez pas que votre écriture soye changée sans pitié et redistribuée à volonté, mettez donc pas votre écriture ici.<br 
+/>Vous êtes après nous promettre aussi que vous l’avez écrit vous-même ou que vous l’avez copié du domaine public ou un autre ressource libre. ''' METTEZ PAS DE L’OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION !'''",
+'copyrightwarning2' => "Notez donc que toutes les contributions à {{SITENAME}} pourriont être changées ou ôtées par des autres useurs. Si vous voulez pas que votre écriture soye changée sans pitié, mettez donc pas votre écriture ici.<br 
+/>Vous êtes après nous promettre aussi que vous l’avez écrit vous-même ou que vous l’avez copié du domaine public ou un autre ressource libre (voyez $1 pour les détails). ''' METTEZ PAS DE L’OUVRAGE SOUS COPYRIGHT ICI SANS PERMISSION !'''",
+'longpageerror' => "'''ERREUR: Le texte que vous avec mis a une taille de $1 kilobytes qu'est plus grande que le maximum de $2 kilobytes.  Ça peut pas être sauvé.'''",
+'readonlywarning' => "'''ATTENTION: La base d'information a été barrée, ça fait, vous serez pas capable de sauver votres changements asteur.  Vous ferait mieux de copier et coller le texte dans un dossier texte et le sauver pour plus tard.'''",
+'protectedpagewarning' => "'''ATTENTION: Cette page a été barrée pour que ça peuve être changée juste par les administrateurs.'''",
+'semiprotectedpagewarning' => "'''Notez:'''  Cette page a été barrée pour que ça peuve être changé juste par les useurs connectés.",
+'cascadeprotectedwarning' => "'''Attention :''' Cette page est protégée (ne peut être modifiée que par les administrateurs) parce qu’elle est incluse par {{PLURAL:$1|une page protégée|des pages protégées}} avec la protection en cascade activée :",
+'templatesused' => 'Patrons usés sus cette page:',
+'templatesusedpreview' => "Patrons usés dans cette vue d'avance:",
+'templatesusedsection' => 'Patrons usés dans cette section:',
+'template-protected' => '(protégé)',
+'template-semiprotected' => '(demi-protégé)',
+'edittools' => "<!-- Le texte que vous mettez ici va être montré sous les boëttes de changements ou d'import de dossier. -->",
+'nocreatetitle' => 'Création de page limitée',
+'nocreatetext' => "La création des pages est limitée.  Vous pouvez changer une page qu'a été déjà créée ou [[Special:UserLogin|connecter ou créer un compte]].",
+'nocreate-loggedin' => 'Vous avez pas la permission de créer des nouvelles pages.',
+'permissionserrors' => 'Erreur de permissions',
+'permissionserrorstext' => 'Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:',
 'permissionserrorstext-withaction' => 'Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:',
-'recreate-moveddeleted-warn'       => "'''Attention: Vous êtes après recréer une page qu'a déjà été ôtée.'''
+'recreate-moveddeleted-warn' => "'''Attention: Vous êtes après recréer une page qu'a déjà été ôtée.'''
 
 Vous devrait considérer si c'est à propos de continuer à changer cette page.
 Les notes d'ôtage pour cette page sont données ici pour vous aider:",
@@ -536,96 +537,95 @@ Les notes d'ôtage pour cette page sont données ici pour vous aider:",
 'cantcreateaccounttitle' => 'Impossible de créer le compte',
 
 # History pages
-'viewpagelogs'        => 'Voir les notes pour cette page',
-'nohistory'           => 'Y a pas de changements pour cette page.',
-'currentrev'          => 'Version courante',
-'revisionasof'        => 'Version depuis le $1',
-'revision-info'       => 'Version depuis le $1 par $2',
-'previousrevision'    => '←Version avant',
-'nextrevision'        => 'Version après→',
+'viewpagelogs' => 'Voir les notes pour cette page',
+'nohistory' => 'Y a pas de changements pour cette page.',
+'currentrev' => 'Version courante',
+'revisionasof' => 'Version depuis le $1',
+'revision-info' => 'Version depuis le $1 par $2',
+'previousrevision' => '←Version avant',
+'nextrevision' => 'Version après→',
 'currentrevisionlink' => 'Version courante',
-'cur'                 => 'cour.',
-'next'                => 'prochain',
-'last'                => 'dernier',
-'page_first'          => 'premier',
-'page_last'           => 'dernier',
-'histlegend'          => 'Choisir une version: Marquez les ronds pour les versions que vous voulez comparer et cliquez "enter" ou le bouton en bas.<br />
+'cur' => 'cour.',
+'next' => 'prochain',
+'last' => 'dernier',
+'page_first' => 'premier',
+'page_last' => 'dernier',
+'histlegend' => 'Choisir une version: Marquez les ronds pour les versions que vous voulez comparer et cliquez "enter" ou le bouton en bas.<br />
 Clé: (cour.) = différence avec la version courante, (dernier) = différence avec la version avant, m = petit changement.',
-'histfirst'           => 'Premiers changements',
-'histlast'            => 'Derniers changements',
-'historyempty'        => '(vide)',
+'histfirst' => 'Premiers changements',
+'histlast' => 'Derniers changements',
+'historyempty' => '(vide)',
 
 # Revision feed
-'history-feed-title'          => 'Détails des changements',
-'history-feed-description'    => 'Détails des changements pour cette page sus le wiki',
+'history-feed-title' => 'Détails des changements',
+'history-feed-description' => 'Détails des changements pour cette page sus le wiki',
 'history-feed-item-nocomment' => '$1 le $2',
-'history-feed-empty'          => 'La page que vous avez demandé est pas là.
+'history-feed-empty' => 'La page que vous avez demandé est pas là.
 Ça a peut-être été ôté du wiki, ou renommé.
 Assayez de [[Special:Search|charcher dans le wiki]] pour des nouvelles pages.',
 
 # Revision deletion
-'rev-deleted-comment'         => '(remarque ôtée)',
-'rev-deleted-user'            => "(nom d'useur ôté)",
-'rev-deleted-event'           => '(message ôté)',
+'rev-deleted-comment' => '(remarque ôtée)',
+'rev-deleted-user' => "(nom d'useur ôté)",
+'rev-deleted-event' => '(message ôté)',
 'rev-deleted-text-permission' => "Cette page a été ôtée de la liste des pages publiques.  Il pourrait y avoir des détails dans les [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} notes d'ôtage].",
-'rev-deleted-text-view'       => "Cette version de la page a été ôtée de la liste des pages publiques.  Comme administrateur sus ce wiki vous pouvez le voir; il pourrait y avoir des détails dans les [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} notes d'ôtage].",
-'rev-delundel'                => 'montrer/cacher',
-'revisiondelete'              => 'Supprimer/rétablir les changements',
-'revdelete-nooldid-title'     => 'Aucun changement choisi',
-'revdelete-nooldid-text'      => 'Vous avez pas choisi le ou les changement(s) pour user cette fonction.',
-'revdelete-selected'          => "'''{{PLURAL:$2|Changement choisi|Changements choisis}} de [[:$1]]'''",
-'logdelete-selected'          => "'''{{PLURAL:$1|Événement de notes choisi|Événements de notes choisis}}:'''",
-'revdelete-text'              => "'''La liste des changements va sauver les versions ôtées, mais le public pourra pas voir certains morceaux de ces versions.'''
+'rev-deleted-text-view' => "Cette version de la page a été ôtée de la liste des pages publiques.  Comme administrateur sus ce wiki vous pouvez le voir; il pourrait y avoir des détails dans les [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} notes d'ôtage].",
+'rev-delundel' => 'montrer/cacher',
+'revisiondelete' => 'Supprimer/rétablir les changements',
+'revdelete-nooldid-title' => 'Aucun changement choisi',
+'revdelete-nooldid-text' => 'Vous avez pas choisi le ou les changement(s) pour user cette fonction.',
+'revdelete-selected' => "'''{{PLURAL:$2|Changement choisi|Changements choisis}} de [[:$1]]'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Événement de notes choisi|Événements de notes choisis}}:'''",
+'revdelete-text' => "'''La liste des changements va sauver les versions ôtées, mais le public pourra pas voir certains morceaux de ces versions.'''
 
 Des autres administrateurs sus ce wiki ont la permission de voir et de rétablir les morceaux cachés hormis qu'y aye des restrictions.",
-'revdelete-legend'            => 'Mettre des restrictions',
-'revdelete-hide-text'         => 'Cacher le texte de la version',
-'revdelete-hide-image'        => "Cacher l'information du dossier",
-'revdelete-hide-name'         => "Cacher l'action et l'objet",
-'revdelete-hide-comment'      => 'Cacher la remarque du changement',
-'revdelete-hide-user'         => "Cacher le nom ou l'adresse IP de l'useur",
-'revdelete-hide-restricted'   => 'Appliquer ces restrictions aux administrateurs et les autres useurs',
-'revdelete-suppress'          => 'Supprimer les données des administrateurs ainsi que celles des autres utilisateurs',
-'revdelete-unsuppress'        => 'Enlever les restrictions des versions rétablies',
-'revdelete-log'               => 'Raison:',
-'revdelete-submit'            => 'Appliquer à la version choisie',
-'revdelete-success'           => "'''Vous avez bien changé la visibilité des versions.'''",
-'logdelete-success'           => "'''Vous avez bien changé la visibilité des événements.'''",
+'revdelete-legend' => 'Mettre des restrictions',
+'revdelete-hide-text' => 'Cacher le texte de la version',
+'revdelete-hide-image' => "Cacher l'information du dossier",
+'revdelete-hide-name' => "Cacher l'action et l'objet",
+'revdelete-hide-comment' => 'Cacher la remarque du changement',
+'revdelete-hide-user' => "Cacher le nom ou l'adresse IP de l'useur",
+'revdelete-hide-restricted' => 'Appliquer ces restrictions aux administrateurs et les autres useurs',
+'revdelete-suppress' => 'Supprimer les données des administrateurs ainsi que celles des autres utilisateurs',
+'revdelete-unsuppress' => 'Enlever les restrictions des versions rétablies',
+'revdelete-log' => 'Raison:',
+'revdelete-submit' => 'Appliquer à la version choisie',
+'revdelete-success' => "'''Vous avez bien changé la visibilité des versions.'''",
+'logdelete-success' => "'''Vous avez bien changé la visibilité des événements.'''",
 
 # Diffs
-'difference'              => '(Différences entre les versions)',
-'lineno'                  => 'Ligne $1:',
+'lineno' => 'Ligne $1:',
 'compareselectedversions' => 'Comparer les versions choisies',
-'editundo'                => 'renverser',
-'diff-multi'              => '({{PLURAL:$1|Un changement moyen caché|$1 changements moyens cachés}})',
+'editundo' => 'renverser',
+'diff-multi' => '({{PLURAL:$1|Un changement moyen caché|$1 changements moyens cachés}})',
 
 # Search results
-'searchresults'            => 'Résultats de la charche',
-'searchresults-title'      => 'Résultats de charche pour « $1 »',
-'searchresulttext'         => "Pour plus d'information pour vous aider à charcher dans {{SITENAME}}, voyez [[{{MediaWiki:Helppage}}|{{int:help}}]].",
-'searchhelp-url'           => 'Help:Aide',
+'searchresults' => 'Résultats de la charche',
+'searchresults-title' => 'Résultats de charche pour « $1 »',
+'searchresulttext' => "Pour plus d'information pour vous aider à charcher dans {{SITENAME}}, voyez [[{{MediaWiki:Helppage}}|{{int:help}}]].",
+'searchhelp-url' => 'Help:Aide',
 'searchprofile-everything' => 'Tout',
-'search-result-size'       => '$1 ({{PLURAL:$2|1 mot|$2 mots}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1 mot|$2 mots}})',
 
 # Preferences page
-'preferences'         => 'Réglage',
-'mypreferences'       => 'Mon réglage',
-'skin-preview'        => "Vue d'avance",
-'prefs-custom-css'    => 'Custom CSS',
-'prefs-custom-js'     => 'Custom JavaScript',
-'youremail'           => 'E-mail:',
-'username'            => "Nom d'useur:",
-'uid'                 => "Numéro d'useur:",
-'yourrealname'        => 'Vrai nom:',
-'yourlanguage'        => 'Langue:',
-'yourvariant'         => 'Différent:',
-'yournick'            => "'Tit nom:",
-'badsig'              => 'Votre signature brute est pas bonne.  Regardez-voir les tags HTML.',
-'badsiglength'        => "Votre 'tit nom est trop long.  Il faut que ça soye moins que $1 caractères.",
-'gender-male'         => 'Male',
-'gender-female'       => 'Female',
+'preferences' => 'Réglage',
+'mypreferences' => 'Mon réglage',
+'skin-preview' => "Vue d'avance",
+'prefs-custom-css' => 'Custom CSS',
+'prefs-custom-js' => 'Custom JavaScript',
+'youremail' => 'E-mail:',
+'username' => "Nom d'useur:",
+'uid' => "Numéro d'useur:",
+'yourrealname' => 'Vrai nom:',
+'yourlanguage' => 'Langue:',
+'yourvariant' => 'Différent:',
+'yournick' => "'Tit nom:",
+'badsig' => 'Votre signature brute est pas bonne.  Regardez-voir les tags HTML.',
+'badsiglength' => "Votre 'tit nom est trop long.  Il faut que ça soye moins que $1 caractères.",
+'gender-male' => 'Male',
+'gender-female' => 'Female',
 'prefs-help-realname' => 'Votre vrai nom est pas nécessaire.  Si vous choisirait de le mettre, ça serait usé pour vous donner du crédit pour votre ouvrage.',
-'prefs-help-email'    => "Votre adresse e-mail est pas nécessaire, mais ça quitte le monde vous contacter par votre page d'useur ou votre page de discussion sans montrer votre identité.",
+'prefs-help-email' => "Votre adresse e-mail est pas nécessaire, mais ça quitte le monde vous contacter par votre page d'useur ou votre page de discussion sans montrer votre identité.",
 
 # User rights
 'editinguser' => "Changement de '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
@@ -634,7 +634,7 @@ Des autres administrateurs sus ce wiki ont la permission de voir et de rétablir
 'action-edit' => 'Faire un changement',
 
 # Recent changes
-'recentchanges'  => 'Changements récent',
+'recentchanges' => 'Changements récent',
 'rcshowhidepatr' => '$1 les modifications patrouillés',
 
 # File description page
@@ -644,8 +644,8 @@ Des autres administrateurs sus ce wiki ont la permission de voir et de rétablir
 'randompage' => 'Page au hasard',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 octet{{PLURAL:$1||s}}',
-'move'         => 'Renommer',
+'nbytes' => '$1 octet{{PLURAL:$1||s}}',
+'move' => 'Renommer',
 'movethispage' => 'Renommer cette page',
 
 # Special:Categories
@@ -655,37 +655,37 @@ Des autres administrateurs sus ce wiki ont la permission de voir et de rétablir
 'emailuser' => 'E-mail cet useur',
 
 # Watchlist
-'watchlist'   => 'Mes pages guettées',
+'watchlist' => 'Mes pages guettées',
 'mywatchlist' => 'Mes pages guettées',
-'watch'       => 'Guetter',
-'unwatch'     => "guettez p'us",
+'watch' => 'Guetter',
+'unwatch' => "guettez p'us",
 
 # Namespace form on various pages
 'blanknamespace' => '(Principal)',
 
 # Contributions
 'contributions' => "Changements de l'useur",
-'mycontris'     => 'Mes changements',
+'mycontris' => 'Mes changements',
 
 'sp-contributions-talk' => 'Discuter',
 
 # Block/unblock
-'ipblocklist'              => 'Useurs bloqués',
-'blocklink'                => 'bloquer',
-'contribslink'             => 'changes',
+'ipblocklist' => 'Useurs bloqués',
+'blocklink' => 'bloquer',
+'contribslink' => 'changes',
 'block-log-flags-nocreate' => 'création de compte interdite',
 
 # Tooltip help for the actions
-'tooltip-pt-login'        => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier mais ce n’est pas obligatoire.',
-'tooltip-ca-talk'         => 'Discussion de cette page de contenu',
-'tooltip-search'          => 'Charche {{SITENAME}}',
+'tooltip-pt-login' => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier mais ce n’est pas obligatoire.',
+'tooltip-ca-talk' => 'Discussion de cette page de contenu',
+'tooltip-search' => 'Charche {{SITENAME}}',
 'tooltip-search-fulltext' => 'Charche les pages pour ce texte',
-'tooltip-p-logo'          => "Visitez la page d'acceuil",
-'tooltip-n-portal'        => 'À propos du projet, quoi faire, où trouver tout',
+'tooltip-p-logo' => "Visitez la page d'acceuil",
+'tooltip-n-portal' => 'À propos du projet, quoi faire, où trouver tout',
 'tooltip-n-recentchanges' => 'La liste de changement récent dans ce wiki',
-'tooltip-n-randompage'    => 'Afficher un page au hasard',
-'tooltip-n-help'          => 'La place pour savoir',
-'tooltip-t-specialpages'  => 'Liste de tout les pages speciales',
+'tooltip-n-randompage' => 'Afficher un page au hasard',
+'tooltip-n-help' => 'La place pour savoir',
+'tooltip-t-specialpages' => 'Liste de tout les pages speciales',
 
 # Bad image list
 'bad_image_list' => 'Le format est le suivant :
index 7e02042..fab20f1 100644 (file)
@@ -145,149 +145,149 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRÈCCION', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NION_SOMÈRO__', '__NIONA_TRÂBLA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NIONA_GALERIE__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCIÉR_LO_SOMÈRO__', '__FORCIÉR_LA_TRÂBLA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SOMÈRO__', '__TRÂBLA__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SÈCCION_QUE_PÔT_PAS_ÉTRE_CHANGIÊ__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__NION_EN_TÉTA__', '__AUCUNENTETE__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MÊS_D_ORA', 'MÊS_D_ORA_2', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MÊS_D_ORA_1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOM_DU_MÊS_D_ORA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_D_ORA', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABRÈV_DU_MÊS_D_ORA', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JORN_D_ORA', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JORN_D_ORA_2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOM_DU_JORN_D_ORA', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AN_D_ORA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORÈRO_D_ORA', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORA_D_ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MÊS_LOCAL', 'MÊS_LOCAL_2', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MÊS_LOCAL_1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOM_DU_MÊS_LOCAL', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_LOCAL', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABRÈV_DU_MÊS_LOCAL', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JORN_LOCAL', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JORN_LOCAL_2', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOM_DU_JORN_LOCAL', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'AN_LOCAL', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORÈRO_LOCAL', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORA_LOCALA', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBRO_DE_PÂGES', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBRO_D_ARTICLLOS', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBRO_DE_FICHIÉRS', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBRO_D_USANCIÉRS', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBRO_D_USANCIÉRS_ACTIFS', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBRO_DE_CHANGEMENTS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBRO_DE_VUES', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOM_DE_LA_PÂGE', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOM_DE_LA_PÂGE_URL', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ÈSPÂÇO_DE_NOMS', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ÈSPÂÇO_DE_NOMS_URL', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ÈSPÂÇO_DE_DISCUSSION', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ÈSPÂÇO_DE_DISCUSSION_URL', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ÈSPÂÇO_DU_SUJÈT', 'ÈSPÂÇO_DE_L_ARTICLLO', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ÈSPÂÇO_DU_SUJÈT_URL', 'ÈSPÂÇO_DE_L_ARTICLLO_URL', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE_URL', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOM_DE_LA_SOT_PÂGE', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOM_DE_LA_SOT_PÂGE_URL', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA_URL', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION_URL', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT_URL', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO_URL', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'MSJNV:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'figura', 'vignette', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'figura=$1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'drêta', 'droite', 'right' ),
-       'img_left'                => array( '1', 'gôche', 'gauche', 'left' ),
-       'img_none'                => array( '1', 'vouedo', 'néant', 'neant', 'none' ),
-       'img_center'              => array( '1', 'centrâ', 'centré', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sen_câdro', 'pas_encâdrâ', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
-       'img_page'                => array( '1', 'pâge=$1', 'pâge $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'bordura', 'bordure', 'border' ),
-       'img_baseline'            => array( '1', 'legne_de_bâsa', 'ligne_de_base', 'base', 'baseline' ),
-       'img_sub'                 => array( '1', 'segno', 'indice', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'èxposent', 'èxp', 'exposant', 'exp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'd\'amont', 'haut', 'top' ),
-       'img_text_top'            => array( '1', 'tèxto-d\'amont', 'haut-texte', 'haut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'entre-mié', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'd\'avâl', 'bas', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tèxto-d\'avâl', 'bas-texte', 'bas-txt', 'text-bottom' ),
-       'img_link'                => array( '1', 'lim=$1', 'lien=$1', 'link=$1' ),
-       'int'                     => array( '0', 'ENT:', 'INT:' ),
-       'sitename'                => array( '1', 'NOM_DU_SETO', 'NOMSITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'ÈDN:', 'ESPACEN:', 'NS:' ),
-       'nse'                     => array( '0', 'ÈDN_URL:', 'ESPACENX:', 'NSE:' ),
-       'localurl'                => array( '0', 'URL_LOCALA:', 'URLLOCALE:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URL_LOCALA_URL:', 'URLLOCALEX:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'CHEMIN_DE_L_ARTICLLO', 'CHEMINARTICLE', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SÈRVOR', 'SERVEUR', 'SERVER' ),
-       'servername'              => array( '0', 'NOM_DU_SÈRVOR', 'NOMSERVEUR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CHEMIN_DU_SCRIPTE', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'CHEMIN_DU_STILO', 'CHEMINSTYLE', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMÈRE:', 'GRAMMAIRE:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRO:', 'GENRE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEN_CONVÈRSION_DE_TITRO__', '__SENCDT__', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEN_CONVÈRSION_DE_CONTEGNU__', '__SENCDC__', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANA_D_ORA', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDS_D_ORA', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANA_LOCALA', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDS_LOCAL', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NUMERÔ_DE_LA_VÈRSION', 'IDVERSION', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'JORN_DE_LA_VÈRSION', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'JORN_DE_LA_VÈRSION_2', 'JOUR2VERSION', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MÊS_DE_LA_VÈRSION', 'MOISVERSION', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MÊS_DE_LA_VÈRSION_1', 'MOISVERSION1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'AN_DE_LA_VÈRSION', 'ANNEEVERSION', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'DÂTA_ET_HORA_DE_LA_VÈRSION', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'USANCIÉR_DE_LA_VÈRSION', 'UTILISATEURVERSION', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'PLURÂL:', 'PLURIEL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URL_COMPLÈTA:', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URL_COMPLÈTA_URL:', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PREMIÉRE_PETIÔTA_LÈTRA:', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PREMIÉRE_GRANTA_LÈTRA:', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'PETIÔTA_LÈTRA:', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'GRANTA_LÈTRA:', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUTO:', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'FÂRE_VÊRE_LO_TITRO', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'B', 'BRUT', 'R' ),
-       'newsectionlink'          => array( '1', '__LIM_DE_NOVÈLA_SÈCCION__', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NION_LIM_DE_NOVÈLA_SÈCCION__', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VÈRSION_D_ORA', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URL_ENCODÂ:', 'ENCODEURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANCRO_ENCODÂ', 'ENCODEANCRE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'DÂTA_ET_HORA_D_ORA', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'DÂTA_ET_HORA_LOCALA', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MÂRCA_DE_DIRÈCCION', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LENGOUA:', '#LANGUE:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LENGOUA_DU_CONTEGNU', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PÂGES_DENS_L_ÈSPÂÇO_DE_NOMS:', 'PÂGES_DENS_L_ÈDN:', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBRO_D_ADMINS', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMAT_NOMBRO', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BORRÂJO_A_GÔCHE', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
-       'padright'                => array( '0', 'BORRÂJO_A_DRÊTA', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spèciâl', 'spécial', 'special' ),
-       'defaultsort'             => array( '1', 'CLLÂF_DE_TRI:', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CHEMIN_D_ACCÈS:', 'CHEMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balisa', 'balise', 'tag' ),
-       'hiddencat'               => array( '1', '__CATÈGORIE_CACHIÊ__', '__CATCACHEE__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PÂGES_DENS_LA_CATÈGORIE', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TALYE_DE_LA_PÂGE', 'TAILLEPAGE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ENDÈXE__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NION_ENDÈXE__', '__AUCUNINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NOMBRO_D_USANCIÉRS_DENS_LA_TROPA', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRÈCCION_IMOBILA__', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVÉL_DE_PROTÈCCION', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'format_de_dâta', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'CHEMIN', 'PATH' ),
-       'url_wiki'                => array( '0', 'VOUIQUI', 'WIKI' ),
+       'redirect'                  => array( '0', '#REDIRÈCCION', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NION_SOMÈRO__', '__NIONA_TRÂBLA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NIONA_GALERIE__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCIÉR_LO_SOMÈRO__', '__FORCIÉR_LA_TRÂBLA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SOMÈRO__', '__TRÂBLA__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SÈCCION_QUE_PÔT_PAS_ÉTRE_CHANGIÊ__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__NION_EN_TÉTA__', '__AUCUNENTETE__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MÊS_D_ORA', 'MÊS_D_ORA_2', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MÊS_D_ORA_1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOM_DU_MÊS_D_ORA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_D_ORA', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABRÈV_DU_MÊS_D_ORA', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JORN_D_ORA', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JORN_D_ORA_2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOM_DU_JORN_D_ORA', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AN_D_ORA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORÈRO_D_ORA', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORA_D_ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MÊS_LOCAL', 'MÊS_LOCAL_2', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MÊS_LOCAL_1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOM_DU_MÊS_LOCAL', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'GÈNITIF_DU_NOM_DU_MÊS_LOCAL', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABRÈV_DU_MÊS_LOCAL', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JORN_LOCAL', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JORN_LOCAL_2', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOM_DU_JORN_LOCAL', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'AN_LOCAL', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORÈRO_LOCAL', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORA_LOCALA', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBRO_DE_PÂGES', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBRO_D_ARTICLLOS', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRO_DE_FICHIÉRS', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRO_D_USANCIÉRS', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBRO_D_USANCIÉRS_ACTIFS', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRO_DE_CHANGEMENTS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBRO_DE_VUES', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOM_DE_LA_PÂGE', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOM_DE_LA_PÂGE_URL', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ÈSPÂÇO_DE_NOMS', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ÈSPÂÇO_DE_NOMS_URL', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ÈSPÂÇO_DE_DISCUSSION', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ÈSPÂÇO_DE_DISCUSSION_URL', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ÈSPÂÇO_DU_SUJÈT', 'ÈSPÂÇO_DE_L_ARTICLLO', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ÈSPÂÇO_DU_SUJÈT_URL', 'ÈSPÂÇO_DE_L_ARTICLLO_URL', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOM_COMPLÈT_DE_LA_PÂGE_URL', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOM_DE_LA_SOT_PÂGE', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOM_DE_LA_SOT_PÂGE_URL', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOM_DE_LA_PÂGE_DE_BÂSA_URL', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOM_DE_LA_PÂGE_DE_DISCUSSION_URL', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT_URL', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO_URL', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'MSJNV:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'figura', 'vignette', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'figura=$1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'drêta', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'gôche', 'gauche', 'left' ),
+       'img_none'                  => array( '1', 'vouedo', 'néant', 'neant', 'none' ),
+       'img_center'                => array( '1', 'centrâ', 'centré', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sen_câdro', 'pas_encâdrâ', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
+       'img_page'                  => array( '1', 'pâge=$1', 'pâge $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'bordura', 'bordure', 'border' ),
+       'img_baseline'              => array( '1', 'legne_de_bâsa', 'ligne_de_base', 'base', 'baseline' ),
+       'img_sub'                   => array( '1', 'segno', 'indice', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'èxposent', 'èxp', 'exposant', 'exp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'd\'amont', 'haut', 'top' ),
+       'img_text_top'              => array( '1', 'tèxto-d\'amont', 'haut-texte', 'haut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'entre-mié', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'd\'avâl', 'bas', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tèxto-d\'avâl', 'bas-texte', 'bas-txt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lim=$1', 'lien=$1', 'link=$1' ),
+       'int'                       => array( '0', 'ENT:', 'INT:' ),
+       'sitename'                  => array( '1', 'NOM_DU_SETO', 'NOMSITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'ÈDN:', 'ESPACEN:', 'NS:' ),
+       'nse'                       => array( '0', 'ÈDN_URL:', 'ESPACENX:', 'NSE:' ),
+       'localurl'                  => array( '0', 'URL_LOCALA:', 'URLLOCALE:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URL_LOCALA_URL:', 'URLLOCALEX:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'CHEMIN_DE_L_ARTICLLO', 'CHEMINARTICLE', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SÈRVOR', 'SERVEUR', 'SERVER' ),
+       'servername'                => array( '0', 'NOM_DU_SÈRVOR', 'NOMSERVEUR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CHEMIN_DU_SCRIPTE', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'CHEMIN_DU_STILO', 'CHEMINSTYLE', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMÈRE:', 'GRAMMAIRE:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRO:', 'GENRE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEN_CONVÈRSION_DE_TITRO__', '__SENCDT__', '__SANSCONVERSIONTITRE__', '__SANSCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEN_CONVÈRSION_DE_CONTEGNU__', '__SENCDC__', '__SANSCONVERSIONCONTENU__', '__SANSCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANA_D_ORA', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDS_D_ORA', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANA_LOCALA', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDS_LOCAL', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NUMERÔ_DE_LA_VÈRSION', 'IDVERSION', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'JORN_DE_LA_VÈRSION', 'JOURVERSION', 'JOUR1VERSION', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'JORN_DE_LA_VÈRSION_2', 'JOUR2VERSION', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MÊS_DE_LA_VÈRSION', 'MOISVERSION', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MÊS_DE_LA_VÈRSION_1', 'MOISVERSION1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'AN_DE_LA_VÈRSION', 'ANNEEVERSION', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'DÂTA_ET_HORA_DE_LA_VÈRSION', 'INSTANTVERSION', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'USANCIÉR_DE_LA_VÈRSION', 'UTILISATEURVERSION', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'PLURÂL:', 'PLURIEL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URL_COMPLÈTA:', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URL_COMPLÈTA_URL:', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PREMIÉRE_PETIÔTA_LÈTRA:', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PREMIÉRE_GRANTA_LÈTRA:', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'PETIÔTA_LÈTRA:', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'GRANTA_LÈTRA:', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUTO:', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'FÂRE_VÊRE_LO_TITRO', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'B', 'BRUT', 'R' ),
+       'newsectionlink'            => array( '1', '__LIM_DE_NOVÈLA_SÈCCION__', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NION_LIM_DE_NOVÈLA_SÈCCION__', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VÈRSION_D_ORA', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URL_ENCODÂ:', 'ENCODEURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANCRO_ENCODÂ', 'ENCODEANCRE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'DÂTA_ET_HORA_D_ORA', 'INSTANTACTUEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'DÂTA_ET_HORA_LOCALA', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MÂRCA_DE_DIRÈCCION', 'MARQUEDIRECTION', 'MARQUEDIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LENGOUA:', '#LANGUE:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LENGOUA_DU_CONTEGNU', 'LANGUECONTENU', 'LANGCONTENU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PÂGES_DENS_L_ÈSPÂÇO_DE_NOMS:', 'PÂGES_DENS_L_ÈDN:', 'PAGESDANSESPACE:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBRO_D_ADMINS', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMAT_NOMBRO', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BORRÂJO_A_GÔCHE', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BORRÂJO_A_DRÊTA', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spèciâl', 'spécial', 'special' ),
+       'defaultsort'               => array( '1', 'CLLÂF_DE_TRI:', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CHEMIN_D_ACCÈS:', 'CHEMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balisa', 'balise', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATÈGORIE_CACHIÊ__', '__CATCACHEE__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÂGES_DENS_LA_CATÈGORIE', 'PAGESDANSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TALYE_DE_LA_PÂGE', 'TAILLEPAGE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ENDÈXE__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NION_ENDÈXE__', '__AUCUNINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NOMBRO_D_USANCIÉRS_DENS_LA_TROPA', 'NOMBREDANSGROUPE', 'NBDANSGROUPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRÈCCION_IMOBILA__', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVÉL_DE_PROTÈCCION', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'format_de_dâta', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VOUIQUI', 'WIKI' ),
 );
 
 $linkTrail = '/^([a-zàâçéèêîœôû·’æäåāăëēïīòöōùü‘]+)(.*)$/sDu';
@@ -461,13 +461,13 @@ $messages = array(
 'faqpage' => 'Project:Quèstions sovent posâyes',
 
 # Vector skin
-'vector-action-addsection' => 'Apondre un sujèt',
+'vector-action-addsection' => 'Apondre na chousa',
 'vector-action-delete' => 'Suprimar',
 'vector-action-move' => 'Renomar',
 'vector-action-protect' => 'Protègiér',
 'vector-action-undelete' => 'Refâre',
 'vector-action-unprotect' => 'Changiér la protèccion',
-'vector-simplesearch-preference' => 'Activar les idês de rechèrche bônâyes (solament por « Vèctor »)',
+'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',
@@ -643,7 +643,7 @@ 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, probâblament por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
+'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.
 
 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.
@@ -689,10 +689,11 @@ Volyéd tornar èprovar dens un tôrn.',
 'protectedpagetext' => 'Ceta pâge est étâye protègiêye por empachiér son changement.',
 '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' => 'Ceta pâge balye de tèxto d’entèrface por la programeria 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êye por èvitar los abus.
+Por apondre ou ben changiér des traduccions sur tôs los vouiquis, volyéd empleyér [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.',
 'editinginterface' => "'''Atencion :''' vos éte aprés changiér na pâge empleyêye por fâre lo tèxto d’entèrface de la programeria.
-Los changements sè cognetront sur totes ou ben doux-três pâges visibles per los ôtros utilisators.
-Por les traduccions, nos vos envitens a empleyér [//translatewiki.net/wiki/Main_Page?setlang=frp translatewiki.net], lo projèt de localisacion de MediaWiki.",
+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â :
 $2',
@@ -712,7 +713,7 @@ La rêson balyêye est « ''$2'' ».",
 # Login and logout pages
 'logouttext' => "'''Ora vos éte dèbranchiê{{GENDER:||ye|(ye)}}.'''
 
-Vos pouede continuar a empleyér {{SITENAME}} de façon anonima ou ben [[Special:UserLogin|vos tornar branchiér]] desot lo mémo nom ou un ôtro.
+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.
@@ -772,24 +773,24 @@ Volyéd tornar èprovar.',
 'password-login-forbidden' => 'L’usâjo de cél nom d’utilisator et de cél contresegno est étâ dèfendu.',
 'mailmypassword' => 'Recêvre un contresegno novél per mèssageria èlèctronica',
 'passwordremindertitle' => 'Contresegno temporèro novél por {{SITENAME}}',
-'passwordremindertext' => 'Quârqu’un (probâblament vos, avouéc l’adrèce IP $1) at demandâ un contresegno
+'passwordremindertext' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
 novél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por
 l’utilisator « $2 » et est « $3 ». S’o ére voutra entencion, vos vos devréd
 branchiér et pués chouèsir un contresegno novél.
-Voutron contresegno temporèro èxpirerat dens $5 jorn{{PLURAL:$5||s}}.
+Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|yon jorn|$5 jorns}}.
 
-Se cela demanda vint pas de vos ou ben se vos vos rapelâd ora
-de voutron contresegno et que vos souhètâd pas més nen changiér, vos
+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' => 'Niona adrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
 'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica valida',
 '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 rapèl du contresegno est vêr dèsactivâye por èvitar los abus.',
+'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 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 rapèl 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 rapèl serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
+'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}}.',
 '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.
 Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
@@ -822,7 +823,7 @@ Volyéd atendre devant que tornar èprovar.',
 
 # Change password dialog
 'resetpass' => 'Changiér lo contresegno',
-'resetpass_announce' => 'Vos vos éte branchiê avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.
+'resetpass_announce' => 'Vos vos éte branchiê{{GENDER:||ye|(ye)}} 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',
@@ -830,59 +831,59 @@ Por chavonar lo branchement, vos dête buchiér un contresegno novél ique :',
 'newpassword' => 'Contresegno novél :',
 'retypenew' => 'Confirmar lo contresegno novél :',
 'resetpass_submit' => 'Changiér lo contresegno et sè branchiér',
-'resetpass_success' => 'Voutron contresegno at étâ changiê avouéc reusséta !
+'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_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-submit-loggedin' => 'Changiér lo contresegno',
 'resetpass-submit-cancel' => 'Anular',
-'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora fôx.
-Vos éd pôt-étre ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.',
+'resetpass-wrong-oldpass' => 'Contresegno temporèro ou ben d’ora envalido.
+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' => 'Tornar inicialisar lo contresegno',
-'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de rapèl des dètalys de voutron compto.',
+'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-disabled' => 'La remisa a zérô des contresegnos at étâ dèsactivâ sur ceti vouiqui.',
-'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yon des bocons de balyês ce-desot}}',
-'passwordreset-username' => 'Nom d’usanciér :',
+'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 montrâ en mémo temps que serat mandâ a l’usanciér.',
+'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-email' => 'Adrèce èlèctronica :',
 'passwordreset-emailtitle' => 'Dètalys du compto dessus {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Quârqu’un (probâblament vos, avouéc l’adrèce IP $1) at demandâ un rapèl des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto usanciér est associyê|Cetos comptos usanciérs sont associyês}}
-a celadrèce èlèctronica :
+'passwordreset-emailtext-ip' => 'Quârqu’un (probâblament vos, dês l’adrèce IP $1) at demandâ na sovegnence des dètalys
+de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+a celadrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens $5 jorn{{PLURAL:$5||s}}.
-Ora, vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos,
-ou ben se vos vos rapelâd ora de voutron contresegno originâl et que vos souhètâd pas més nen changiér,
-vos pouede ignorar ceti mèssâjo et continuar a utilisar voutron viely contresegno.',
-'passwordreset-emailtext-user' => 'L’usanciér $1 dessus {{SITENAME}} at demandâ un rapèl des dètalys
-de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto usanciér est associyê|Cetos comptos usanciérs sont associyês}}
-a celadrèce èlèctronica :
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
+ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
+vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
+'passwordreset-emailtext-user' => 'L’utilisator $1 dessus {{SITENAME}} at demandâ na sovegnence des dètalys
+de voutron compto por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}
+a celadrèce èlèctronica :
 
 $2
 
-{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens $5 jorn{{PLURAL:$5||s}}.
-Ora, vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos,
-ou ben se vos vos rapelâd ora de voutron contresegno originâl et que vos souhètâd pas més nen changiér,
-vos pouede ignorar ceti mèssâjo et continuar a utilisar voutron viely contresegno.',
-'passwordreset-emailelement' => 'Nom d’usanciér : $1
+{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|yon jorn|$5 jorns}}.
+Ora vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos
+ou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,
+vos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
+'passwordreset-emailelement' => 'Nom d’utilisator : $1
 Contresegno temporèro : $2',
-'passwordreset-emailsent' => 'Un mèssâjo de rapèl at étâ mandâ.',
-'passwordreset-emailsent-capture' => 'Un mèssâjo de rapèl at étâ mandâ, qu’est montrâ ce-desot.',
-'passwordreset-emailerror-capture' => 'Un mèssâjo de rapèl at étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’usanciér at pas reussia : $1',
+'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',
 
 # Special:ChangeEmail
 'changeemail' => 'Changiér l’adrèce èlèctronica',
-'changeemail-header' => 'Changiér l’adrèce èlèctronica',
-'changeemail-text' => 'Rempléd ceti formulèro por changiér voutra 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 avêr accès a cela pâge.',
+'changeemail-header' => 'Changiér l’adrèce èlèctronica du compto',
+'changeemail-text' => 'Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.',
+'changeemail-no-info' => 'Vos dête étre branchiê por arrevar tot drêt a cela pâge.',
 'changeemail-oldemail' => 'Adrèce èlèctronica d’ora :',
 'changeemail-newemail' => 'Novèla adrèce èlèctronica :',
 'changeemail-none' => '(niona)',
@@ -890,28 +891,28 @@ Contresegno temporèro : $2',
 'changeemail-cancel' => 'Anular',
 
 # Edit page toolbar
-'bold_sample' => 'Tèxto en grâs',
-'bold_tip' => 'Tèxto en grâs',
-'italic_sample' => 'Tèxto en étalico',
-'italic_tip' => 'Tèxto en étalico',
+'bold_sample' => 'Tèxto grâs',
+'bold_tip' => 'Tèxto grâs',
+'italic_sample' => 'Tèxto étalico',
+'italic_tip' => 'Tèxto étalico',
 'link_sample' => 'Titro du lim',
 'link_tip' => 'Lim de dedens',
 'extlink_sample' => 'http://www.example.com titro du lim',
 'extlink_tip' => 'Lim de defôr (oubliâd pas lo prèfixo http://)',
-'headline_sample' => 'Tèxto de sot-titro',
+'headline_sample' => 'Tèxto dtitro',
 'headline_tip' => 'Sot-titro nivél 2',
 'nowiki_sample' => 'Buchiéd lo tèxto pas formatâ ique',
 'nowiki_tip' => 'Ignorar lo formatâjo vouiqui',
 'image_sample' => 'Ègzemplo.jpg',
-'image_tip' => 'Fichiér entrebetâ',
+'image_tip' => 'Fichiér apondu',
 'media_sample' => 'Ègzemplo.ogg',
 'media_tip' => 'Lim de vers un fichiér',
-'sig_tip' => 'Voutra signatura avouéc la dâta',
+'sig_tip' => 'Voutra signatura avouéc la dâta et hora',
 'hr_tip' => 'Legne plana (pas nen abusar)',
 
 # Edit pages
 'summary' => 'Rèsumâ :',
-'subject' => 'Sujèt / titro :',
+'subject' => 'Chousa / titro :',
 'minoredit' => 'Petiôt changement',
 'watchthis' => 'Siuvre ceta pâge',
 'savearticle' => 'Sôvar la pâge',
@@ -992,12 +993,11 @@ 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â.
 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 cache de voutron navigator por vêre los changements.
+'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''
-* '''Konqueror :''' clicâd sur lo boton ''Rechargiér'' ou ben prèssâd ''F5''
-* '''Opera :''' èfaciéd lo cache dens ''Outils → Prèferences''",
+* '''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.'''
@@ -1346,8 +1346,6 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo
 'search-interwiki-caption' => 'Projèts frâres',
 'search-interwiki-default' => 'Rèsultats dessus $1 :',
 'search-interwiki-more' => '(més)',
-'search-mwsuggest-enabled' => 'avouéc consèlys',
-'search-mwsuggest-disabled' => 'sen consèlys',
 'search-relatedarticle' => 'Raportâ',
 'mwsuggest-disable' => 'Dèsactivar los consèlys AJAX',
 'searcheverything-enable' => 'Rechèrchiér dens tôs los èspâços de noms',
@@ -1446,7 +1444,7 @@ Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
 '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',
-'prefs-searchoptions' => 'Chouèx de rechèrche',
+'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',
@@ -2986,7 +2984,6 @@ Volyéd tornar èprovar.',
 
 # JavaScriptTest
 'javascripttest' => 'Èprôva de JavaScript',
-'javascripttest-disabled' => 'Cela fonccion-que est pas étâye activâye sur ceti vouiqui.',
 'javascripttest-title' => 'Èprôves de $1 en cors',
 'javascripttest-qunit-intro' => 'Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.',
 'javascripttest-qunit-heading' => 'Suita d’èprôva QUnit de JavaScript dessus MediaWiki',
@@ -3125,11 +3122,11 @@ 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-edits' => 'Changements',
+'pageinfo-header-edits' => 'Historico des changements',
 'pageinfo-views' => 'Nombro de visualisacions',
-'pageinfo-watchers' => 'Nombro de contributors qu’ont la pâge dens lor lista de survelyence',
-'pageinfo-edits' => 'Nombro de changements',
-'pageinfo-authors' => 'Nombro d’ôtors difèrents',
+'pageinfo-watchers' => 'Nombro de contributors qu’ont la pâge dedens lor lista de survelyence',
+'pageinfo-edits' => 'Soma totâla de changements',
+'pageinfo-authors' => 'Soma totâla d’ôtors difèrents',
 
 # Skin names
 'skinname-standard' => 'Estandârd',
@@ -4064,6 +4061,10 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'feedback-bugcheck' => 'Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].',
 'feedback-bugnew' => 'J’é controlâ. Signalar una cofierie novèla',
 
+# Search suggestions
+'searchsuggest-search' => 'Rechèrchiér',
+'searchsuggest-containing' => 'que contint...',
+
 # API errors
 'api-error-badaccess-groups' => 'Vos éte pas ôtorisâ a tèlèchargiér des fichiérs sur ceti vouiqui.',
 'api-error-badtoken' => 'Èrror de dedens : crouyo « jeton ».',
index fd91b54..6d97dd8 100644 (file)
@@ -422,7 +422,7 @@ Di grünj faan di administraator as: „$3“.',
 # Login and logout pages
 'logouttext' => "'''Dü bast nü oufmälded.'''
 
-Dü koost {{SITENAME}} nü anonüüm widerbrüke, unti de wider uner diseelew unti en oudern brükernoome [[Special:UserLogin|önjmälde]].
+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! ==
 
@@ -1026,8 +1026,6 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'search-interwiki-caption' => 'Süsterprujäkte',
 'search-interwiki-default' => '$1 resultoote:',
 'search-interwiki-more' => '(widere)',
-'search-mwsuggest-enabled' => 'ma forsliike',
-'search-mwsuggest-disabled' => 'niinj forsliike',
 'search-relatedarticle' => 'früne',
 'mwsuggest-disable' => 'forsliike per Ajax deaktiviire',
 'searcheverything-enable' => 'Onj ål noomerüme säke',
index 2fe2c25..5841167 100644 (file)
@@ -410,7 +410,7 @@ Al podarès vê dentri caratars che no podin jessi doprâts tai titui.',
 # Login and logout pages
 'logouttext' => "'''Tu sâs cumò lât fûr.'''
 
-Tu puedis continuâ a doprâ {{SITENAME}} come anonim, o tu puedis [[Special:UserLogin|jentrâ di gnûf]] cul stes o cuntun altri non utent.
+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. 
@@ -692,8 +692,6 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve
 'search-interwiki-caption' => 'Progjets fradis',
 'search-interwiki-default' => 'Risultâts di $1:',
 'search-interwiki-more' => '(altri)',
-'search-mwsuggest-enabled' => 'cui sugjeriments',
-'search-mwsuggest-disabled' => 'cence i sugjeriments',
 'mwsuggest-disable' => 'Disative i sugjeriments AJAX',
 'searchrelated' => 'leâts',
 'searchall' => 'ducj',
@@ -1701,6 +1699,10 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 # New logging system
 'newuserlog-byemail' => 'peraule clâf mandade par pueste eletroniche',
 
+# Search suggestions
+'searchsuggest-search' => 'Ricercje',
+'searchsuggest-containing' => 'che al à dentri...',
+
 # API errors
 'api-error-unclassified' => 'Al è capitât un erôr no cognossût',
 
index ee72895..71b79b4 100644 (file)
@@ -504,7 +504,7 @@ De oanfierde reden is ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Jo binne no ôfmeld.'''
 
-Jo kinne de {{SITENAME}} fierders anonym brûke, of jo op 'e [[Special:UserLogin|nij oanmelde]] ûnder deselde of in oare namme.
+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.',
@@ -942,8 +942,6 @@ Prebearje in oare sykopdracht.',
 'search-interwiki-caption' => 'Susterprojekten',
 'search-interwiki-default' => '$1 resultaten:',
 'search-interwiki-more' => '(mear)',
-'search-mwsuggest-enabled' => 'mei suggestjes',
-'search-mwsuggest-disabled' => 'gjin suggestjes',
 'search-relatedarticle' => 'Besibbe',
 'mwsuggest-disable' => 'Suggestjes fia AJAX útskeakelje',
 'searcheverything-enable' => 'Sykje op alle nammeromten',
index df96f18..cee9a1e 100644 (file)
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#athsheoladh', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GANCÁ__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__CÁGACHUAIR__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__CÁ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GANMHÍRATHRÚ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MÍLÁITHREACH', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'GINAINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'GIORRÚNAMÍOSALÁITHREAÍ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'LÁLÁITHREACH', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'AINMANLAELÁITHRIGH', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'BLIAINLÁITHREACH', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AMLÁITHREACH', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'LÍONNANALT', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'LÍONNAGCOMHAD', 'NUMBEROFFILES' ),
-       'pagename'                => array( '1', 'AINMANLGH', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'AINMANLGHB', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'AINMSPÁS', 'NAMESPACE' ),
-       'msg'                     => array( '0', 'TCHT:', 'MSG:' ),
-       'subst'                   => array( '0', 'IONAD:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'TCHTFS:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mionsamhail', 'mion', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'deas', 'right' ),
-       'img_left'                => array( '1', 'clé', 'left' ),
-       'img_none'                => array( '1', 'faic', 'none' ),
-       'img_center'              => array( '1', 'lár', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'fráma', 'frámaithe', 'framed', 'enframed', 'frame' ),
-       'int'                     => array( '0', 'INMH:', 'INT:' ),
-       'sitename'                => array( '1', 'AINMANTSUÍMH', 'SITENAME' ),
-       'ns'                      => array( '0', 'AS:', 'NS:' ),
-       'localurl'                => array( '0', 'URLÁITIÚIL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLÁITIÚILB', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'FREASTALAÍ', 'SERVER' ),
-       'servername'              => array( '0', 'AINMANFHREASTALAÍ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SCRIPTCHOSÁN', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMADACH:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__GANTIONTÚNADTEIDEAL__', '__GANTT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GANTIONTÚNANÁBHAIR__', '__GANTA__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEACHTAINLÁITHREACH', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'LÁLÁITHREACHNAS', 'CURRENTDOW' ),
-       'revisionid'              => array( '1', 'IDANLEASAITHE', 'REVISIONID' ),
+       'redirect'                  => array( '0', '#athsheoladh', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GANCÁ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__CÁGACHUAIR__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__CÁ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GANMHÍRATHRÚ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MÍLÁITHREACH', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'GINAINMNAMÍOSALÁITHREAÍ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'GIORRÚNAMÍOSALÁITHREAÍ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'LÁLÁITHREACH', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'AINMANLAELÁITHRIGH', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'BLIAINLÁITHREACH', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AMLÁITHREACH', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'LÍONNANALT', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'LÍONNAGCOMHAD', 'NUMBEROFFILES' ),
+       'pagename'                  => array( '1', 'AINMANLGH', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'AINMANLGHB', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'AINMSPÁS', 'NAMESPACE' ),
+       'msg'                       => array( '0', 'TCHT:', 'MSG:' ),
+       'subst'                     => array( '0', 'IONAD:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'TCHTFS:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mionsamhail', 'mion', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'deas', 'right' ),
+       'img_left'                  => array( '1', 'clé', 'left' ),
+       'img_none'                  => array( '1', 'faic', 'none' ),
+       'img_center'                => array( '1', 'lár', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'fráma', 'frámaithe', 'framed', 'enframed', 'frame' ),
+       'int'                       => array( '0', 'INMH:', 'INT:' ),
+       'sitename'                  => array( '1', 'AINMANTSUÍMH', 'SITENAME' ),
+       'ns'                        => array( '0', 'AS:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLÁITIÚIL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLÁITIÚILB', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'FREASTALAÍ', 'SERVER' ),
+       'servername'                => array( '0', 'AINMANFHREASTALAÍ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SCRIPTCHOSÁN', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMADACH:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__GANTIONTÚNADTEIDEAL__', '__GANTT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GANTIONTÚNANÁBHAIR__', '__GANTA__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEACHTAINLÁITHREACH', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'LÁLÁITHREACHNAS', 'CURRENTDOW' ),
+       'revisionid'                => array( '1', 'IDANLEASAITHE', 'REVISIONID' ),
 );
 
 $namespaceNames = array(
@@ -476,7 +476,7 @@ An fáth ná ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Tá tú logáilte amach anois.'''
 
-Is féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat [[Special:UserLogin|logáil isteach arís]] mar an úsáideoir céanna, nó mar úsáideoir eile.
+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! ==
 
@@ -802,8 +802,6 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 'search-interwiki-caption' => 'Comhthionscadail',
 'search-interwiki-default' => '$1 torthaí:',
 'search-interwiki-more' => '(níos mó)',
-'search-mwsuggest-enabled' => 'le moltaí',
-'search-mwsuggest-disabled' => 'gan mholtaí',
 'search-relatedarticle' => 'Gaolmhar',
 'mwsuggest-disable' => 'Díchumasaigh moltaí AJAX',
 'searchrelated' => 'gaolmhara',
@@ -2234,4 +2232,7 @@ Rachaidh an cód deimhnithe seo as feidhm ag $4.',
 'feedback-message' => 'Teachtaireacht:',
 'feedback-cancel' => 'Cealaigh',
 
+# Search suggestions
+'searchsuggest-search' => 'Cuardaigh',
+
 );
index fd490b0..5502087 100644 (file)
@@ -93,7 +93,7 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÖNNENDİRMÄKLER', '#YÖNNENDİR', '#YÖNNENDİRMÄ', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#YÖNNENDİRMÄKLER', '#YÖNNENDİR', '#YÖNNENDİRMÄ', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
 );
 
 $messages = array(
@@ -375,8 +375,8 @@ Yalvarêrız benneyiniz URL - i hem raport ediniz bunu bir [[Special:ListUsers/s
 'viewsourcetext' => 'Var nicä görmää hem kopiya etmää bu yapraa gelinirini:',
 
 # Login and logout pages
-'logouttext' => 'Sessiyayı kapattınız.
-Şindi var nicä devam etmää kullanmaa {{SITENAME}} saytını kimlik göstermedän yaki [[Special:UserLogin|enidän sessiya açmaa]] (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.',
+'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ää.',
@@ -588,8 +588,6 @@ Nışannar: (bitki) = şindiki versiyalan aradaki fark,
 'search-interwiki-caption' => 'Kardaş proyektlär',
 'search-interwiki-default' => '$1 rezultatlar:',
 'search-interwiki-more' => '(taa çok)',
-'search-mwsuggest-enabled' => 'tekliflerlän',
-'search-mwsuggest-disabled' => 'tekliflersiz',
 'nonefound' => "'''Bennemäk''': Sadä kimi ad erleri sessizcä aaranêr.
 Aaramaanızın önünä ''all:'' prefiksini koyun da deneyin hepsi içlii aaramaa deyni (sözleşmäk sayfaları, şablonlar h.b.pay alarak), yaki kullanınız beenilän prefiksi sansın er adı.",
 'powersearch' => 'Gelişmiş arama',
index decfa8b..64c800e 100644 (file)
 $fallback = 'gan-hant, zh-hant, zh-hans';
 
 $namespaceNames = array(
-       NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Special',
-       NS_TALK             => 'Talk',
-       NS_USER             => 'User',
-       NS_USER_TALK        => 'User_talk',
-       NS_PROJECT_TALK     => '$1_talk',
-       NS_FILE             => 'File',
-       NS_FILE_TALK        => 'File_talk',
-       NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
-       NS_TEMPLATE         => 'Template',
-       NS_TEMPLATE_TALK    => 'Template_talk',
-       NS_HELP             => 'Help',
-       NS_HELP_TALK        => 'Help_talk',
-       NS_CATEGORY         => 'Category',
-       NS_CATEGORY_TALK    => 'Category_talk',
+       NS_MEDIA            => '媒體',
+       NS_SPECIAL          => '特別',
+       NS_TALK             => '談詑',
+       NS_USER             => '用戶',
+       NS_USER_TALK        => '用戶・談詑',
+       NS_PROJECT_TALK     => '$1_談詑',
+       NS_FILE             => '文檔',
+       NS_FILE_TALK        => '文檔・談詑',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki・談詑',
+       NS_TEMPLATE         => '模板',
+       NS_TEMPLATE_TALK    => '模板・談詑',
+       NS_HELP             => '幫助',
+       NS_HELP_TALK        => '幫助・談詑',
+       NS_CATEGORY         => '分類',
+       NS_CATEGORY_TALK    => '分類・談詑',
 );
 
 $messages = array(
index 6187ec1..3c792c9 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Simplified Gan script (‪赣语(简体)‬)
+/** Simplified Gan script (赣语(简体)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -401,7 +401,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''汝退出正哩。'''
 
-接到汝得匿名使用{{SITENAME}},或[[Special:UserLogin|登入过]]。除非汝删吥浏览器缓存,只把子页面可能会接到话汝系登入状态。",
+接到汝得匿名使用{{SITENAME}},或<span class='plainlinks'>[$1 登入过]</span>。除非汝删吥浏览器缓存,只把子页面可能会接到话汝系登入状态。",
 'welcomecreation' => '== 欢迎, $1! ==
 
 建正哩汝𠮶帐户,莫𫍧记设置 [[Special:Preferences|{{SITENAME}}𠮶个人参数]]。',
@@ -767,8 +767,6 @@ $2',
 'search-interwiki-caption' => '姊妹计划',
 'search-interwiki-default' => '$1只结果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '有建议',
-'search-mwsuggest-disabled' => '冇建议',
 'searchrelated' => '相关',
 'searchall' => '所有',
 'showingresults' => '底下从第<b>$2</b>条显示起先𠮶<b>$1</b>条结果:',
@@ -2241,6 +2239,7 @@ $3
 'version-hook-subscribedby' => '订阅人',
 'version-version' => '(版本 $1)',
 'version-license' => '许可证',
+'version-poweredby-credits' => "个只 Wiki 由 '''[//www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
 'version-software' => '装正𠮶软件',
 'version-software-version' => '版本',
 
@@ -2270,4 +2269,7 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|标签]]过滤器:',
 
+# Search suggestions
+'searchsuggest-search' => '寻吖',
+
 );
index bf73fb7..be42d3e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Traditional Gan script (‪贛語(繁體)‬)
+/** Traditional Gan script (贛語(繁體)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -423,7 +423,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''汝退出正哩。'''
 
-接到汝得匿名使用{{SITENAME}},或[[Special:UserLogin|登入過]]。除非汝刪吥瀏覽器緩存,隻把子頁面可能會接到話汝係登入狀態。",
+接到汝得匿名使用{{SITENAME}},或<span class='plainlinks'>[$1 登入過]</span>。除非汝刪吥瀏覽器緩存,隻把子頁面可能會接到話汝係登入狀態。",
 'welcomecreation' => '== 歡迎, $1! ==
 
 建正哩汝嗰帳戶,莫誺記設置 [[Special:Preferences|{{SITENAME}}嗰個人參數]]。',
@@ -789,8 +789,6 @@ $2',
 'search-interwiki-caption' => '姊妹計劃',
 'search-interwiki-default' => '$1隻結果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '有建議',
-'search-mwsuggest-disabled' => '冇建議',
 'searchrelated' => '相關',
 'searchall' => '所有',
 'showingresults' => '底下從第<b>$2</b>條顯示起先嗰<b>$1</b>條結果:',
@@ -2293,4 +2291,7 @@ $3
 # Special:Tags
 'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
 
+# Search suggestions
+'searchsuggest-search' => '尋吖',
+
 );
index c27cc54..4be696f 100644 (file)
@@ -251,7 +251,7 @@ $messages = array(
 'otherlanguages' => 'Ann an cànain eile',
 'redirectedfrom' => '(Air ath-sheòladh o $1)',
 'redirectpagesub' => 'Ath-sheòl an duilleag',
-'lastmodifiedat' => 'Chaidh an duilleag seo a mhùthadh $1, aig $2 turas mu dheireadh.',
+'lastmodifiedat' => 'Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.',
 'viewcount' => 'Chaidh inntrigeadh a dhèanam dhan duilleag seo {{PLURAL:$1|aon turas|$1 thuras|$1 turas|$1 turais|$1 turas}}.',
 'protectedpage' => 'Duilleag fo dhìon',
 'jumpto' => 'Gearr leum gu:',
@@ -353,9 +353,9 @@ Gheibh thu liosta nan duilleagan sònraichte 's dligheach aig [[Special:SpecialP
 'dberrortext' => 'Thachair mearachd co-chàraidh rè iarrtas an stòir-dhàta.
 Faodaidh gu bheil seo a\' comharrachadh mearachd sa bhathar-bhog.
 Seo iarrtas an stòir-dhàta mu dheireadh a chaidh feuchainn ris:
-<blockquote><tt>$1</tt></blockquote>
-o bhroinn an fhoincsein "<tt>$2</tt>".
-Thill an stòr-dàta a\' mhearachd "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+o bhroinn an fhoincsein "<code>$2</code>".
+Thill an stòr-dàta a\' mhearachd "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Thachair mearachd co-chàraidh rè iarrtas an stòir-dhàta.
 Seo iarrtas an stòir-dhàta mu dheireadh a chaidh feuchainn ris:
 "$1"
@@ -431,7 +431,7 @@ Seo am mìneachadh: "\'\'$2\'\'".',
 
 # Login and logout pages
 'logouttext' => "'''Chaidh do logadh a-mach.'''
-'S urrainn dhut leantainn air adhart a' cleachdadh {{SITENAME}} a chleachdadh gun urra no 's urrainn dhut [[Special:UserLogin|logadh a-steach a-rithist]] mar an dearbh-chleachdaiche no mar chleachdaiche eile.
+'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.
@@ -700,11 +700,10 @@ 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.',
 'blocked-notice-logextract' => "Tha an cleachdaiche seo air a bhacadh an-dràsta fhèin.
 Chì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
-'clearyourcache' => "''An aire:''' As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.
+'clearyourcache' => "'''An aire:''' As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.
 * '''Firefox / Safari:''' Cum 'shìos 'Shift'' is briog air ''Ath-luchdaich' no brùth ''Ctrl-F5'' no ''Ctrl-R'' (''⌘-R'' air Mac)
 * '''Google Chrome:''' Brùth ''Ctrl-Shift-R'' (''⌘-Shift-R'' air Mac)
 * '''Internet Explorer:''' Cum shìos ''Ctrl'' is briog air ''Ath-nuadhaich'' no brùth ''Ctrl-F5''
-* '''Konqueror:''' Briog air ''Reload'' no brùth ''F5''
 * '''Opera:''' Falamhaich an tasgadan ann an ''Innealan → Roghainnean''",
 'usercssyoucanpreview' => "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" airson an CSS agad a chur fo dheuchainn mus sàbhail thu e.",
 'userjsyoucanpreview' => "'''Gliocas:''' Cleachd am putan \"{{int:showpreview}}\" gus an JavaScript ùr agad a chur fo dheuchainn mus sàbhail thu e.",
@@ -716,11 +715,29 @@ Chì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
 '''Cha deach a shàbhaladh fhathast!''''",
 'sitejspreview' => "'''Cuimhnich nach e seo ach ro-shealladh air còd a' JavaScript agad.'''
 '''Cha deach a shàbhaladh fhathast!''''",
+'userinvalidcssjstitle' => "'''Rabhadh:''' Chan eil an craiceann \"\$1\" ann.
+Cleachdaidh duilleagan gnàthaichte .css agus .js tiotal ann an litrichean beaga, m.e. {{ns:user}}:Foo/vector.css seach {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Air ùrachadh)',
+'note' => "'''An aire:'''",
 'previewnote' => "'''Cuimhnich nach eil ann ach ro-shealladh.'''
 Cha deach na mùthaidhean agad a shàbhaladh fhathast!",
+'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?
+Mur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
+'session_fail_preview_html' => "'''Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.'''
+
+''A chionn 's gun do chuir {{SITENAME}} HTML amh an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.''
+
+'''Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.'''
+Mur obraich e fhathast, feuch is [[Special:UserLogout|clàraich a-mach]] is a-steach a-rithist an uairsin.",
+'token_suffix_mismatch' => "'''Dhiùlt sinn na dheasaich thu a chionn 's gun do chuir an cliant agad na caractaran puingeachaidh tro chèile san tòcan deasachaidh.'''
+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",
 'editingsection' => "A' deasachadh $1 (earrann)",
+'editingcomment' => "A' deasachadh $1 (earrann ùr)",
 'editconflict' => 'Còmhstri deasachaidh: $1',
 'explainconflict' => "Tha cuideigin eile air an duilleag seo a mhùthadh on a thòisich thu fhèin air a dheasachadh.
 Tha am bogsa teacsa gu h-àrd a' nochdadh na duilleige mar a tha i an-dràsta.
@@ -729,6 +746,8 @@ Bidh agad ris na mùthaidhean agad fhilleadh a-steach san teacsa làithreach.
 Cha dèid '''ach an teacsa gu h-àrd''' a shàbhaladh nuair a bhriogas tu air \"{{int:savearticle}}\".",
 'yourtext' => 'An teacsa agad',
 'storedversion' => 'Lethbhreac taisgte',
+'nonunicodebrowser' => "'''Rabhadh: Chan eil am brabhsair agad co-chòrdail le Unicode.'''
+Chuir sinn gleus air dòigh dhut a nì cinnteach gun urrainn dhut duilleagan a shàbhaladh gu tèarainte: Nochdaidh caractaran taobh a-muigh ASCII mar chòd sia-dheicheach sa bhogsa deasachaidh.",
 'editingold' => "'''RABHADH: Tha thu a' deasachadh lethbhreac seann-aimsireil na duilleige seo.
 Ma shàbhalas tu seo, thèid gach mùthadh air chall a rinneadh a-mach on mhùthadh seo.'''",
 'yourdiff' => 'Caochlaidhean',
@@ -740,13 +759,33 @@ Tha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn t
 Mur eil thu ag iarraidh an sgrìobhaidh agad a dheasaichear is a sgaoilear le càch, na cuir e.<br />
 Ma dh'fhoilleachas tu rudeigin an seo, bidh tu a' dearbhadh gun do sgrìobh thu fhèin e, no gur ann às an raon phòballach a thàinig e; thoir aire '''nach eil''' sin a' gabhail a-staigh duilleagan-lìn mar as àbhaist (seall $1 airson barrachd fiosrachaidh). <br />
 '''NA CLEACHDAIBH SAOTHAIR FO DHLIGHE-SGRÌOBHAIDH GUN CHEAD!'''",
+'longpageerror' => "'''Mearachd: Tha an teacsa a chur thu thugainn {{PLURAL:$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|$1 kilobyte|}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ({{PLURAL:$1 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|$2 kilobyte|}}).'''
+Cha ghabh a shàbhaladh.",
+'readonlywarning' => "'''Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na còraichean-deasachaidh agad a chur gu feum an-dràsta fhèin.'''
+'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.
+
+Seo am mìneachadh a thug an rianaire a ghlais e: $1",
 'protectedpagewarning' => "'''Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.'''
 Chì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
+'semiprotectedpagewarning' => "'''An aire:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a dheasachadh.
+Seo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
+'cascadeprotectedwarning' => "'''Rabhadh:''' Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha cascade-protected.",
+'titleprotectedwarning' => "'''Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|còraichean sònraichte]] gus a dheasachadh.'''
+Seo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
 'templatesused' => "Tha {{PLURAL:$1|teamplaid|theamplaid||teamplaid|theamplaid|teamplaidean|teamplaid}} 'gan cleachdadh air an duilleag seo:",
 'templatesusedpreview' => "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh}} san ro-shealladh seo:",
+'templatesusedsection' => "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh|teamplaidean 'gan cleachdadh}} san earrann seo:",
 '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.',
+'sectioneditnotsupported-title' => 'Chan eil taic ri deasachadh earrannan',
+'sectioneditnotsupported-text' => 'Chan eil taic ri deasachadh earrannan air an duilleag seo.',
+'permissionserrors' => "Meareachd leis a' chead",
+'permissionserrorstext' => 'Chan eil cead agad sin a dhèanamh air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan|an adhbhair|nan adhbharan|nan adhbharan}} a leanas:',
 'permissionserrorstext-withaction' => 'Chan eil cead agad airson "$2" air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan|an adhbhair|nan adhbharan|nan adhbharan}} a leanas:',
 'recreate-moveddeleted-warn' => "'''Rabhadh: Tha thu gu bhith ath-chruthachadh duilleag a chaidh a sguabadh às roimhe.'''
 
@@ -754,14 +793,31 @@ Saoil am bu chòir dhut leantainn air adhart le deasachadh na duilleige?.
 Seo dhut loga an sguabaidh às agus a' ghluasaid mar fhiosrachadh dhut:",
 'moveddeleted-notice' => "Chaidh an duilleag seo a sguabadh às.
 Chì thu loga an sguabaidh às agus a' ghluasaid gu h-ìosal mar fhiosrachadh dhut.",
+'log-fulllog' => 'Seall an loga slàn',
+'edit-hook-aborted' => 'Sguireadh dhen deasachadh ri linn dubhan.
+Cha deach adhbhar a thoirt seachad.',
+'edit-gone-missing' => "Cha b' urrainn dhuinn an duilleag ath-nuadhachadh.
+Tha coltas gun deach a sguabadh às.",
+'edit-conflict' => 'Còmhstri deasachaidh.',
+'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.",
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''Rabhadh:''' Tha cus expensive parser function calls san duilleag seo.
+
+Bu chòir nas lugha na $2 {{PLURAL:$2|call|calls}} a bhith ann ach tha {{PLURAL:$1|$1 call|$1 calls}} ann.",
+'expensive-parserfunction-category' => 'Duilleagan le cus expensive parser function calls',
 'post-expand-template-inclusion-warning' => "'''Rabhadh:''' Tha meud na teamplaide ro mhòr.
 Cha dèid cuid dhith a ghabhail a-steach.",
 'post-expand-template-inclusion-category' => "Duilleagan far a bheil meud nan teamplaidean a' dol thairis air na tha ceadaichte",
 'post-expand-template-argument-warning' => "'''Rabhadh:''' Tha aon argamaid teamplaid air a' char as lugha air an duilleag seo aig a bheil meud leudachaidh ro mhòr.
 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]]',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Cha ghabh an cunntas a chruthachadh',
 
 # History pages
 'viewpagelogs' => 'Seall logaichean na duilleige seo',
@@ -782,16 +838,31 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 'history-show-deleted' => 'Na chaidh sguabadh às a-mhàin',
 'histfirst' => 'As sine',
 'histlast' => 'As ùire',
+'historyempty' => '(falamh)',
 
 # Revision feed
+'history-feed-title' => 'Eachdraidh nam mùthaidhean',
+'history-feed-description' => 'Eachdraidh nam mùthaidhean airson na duilleige seo air an uici',
 'history-feed-item-nocomment' => '$1 $2',
+'history-feed-empty' => "Chan eil an duilleag a dh'iarr thu ann.
+Dh'fhaoidte gun deach a sguabadh às an uici no gun deach ainm ùr a chur air.
+Feuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uici]]",
 
 # Revision deletion
+'rev-deleted-comment' => '(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)',
+'rev-deleted-user' => '(chaidh an t-ainm-cleachdaiche a thoirt air falbh)',
+'rev-deleted-event' => '(chaidh gnìomh an loga a thoirt air falbh)',
 'rev-delundel' => 'seall/falaich',
+'rev-showdeleted' => 'seall',
+'revdelete-hide-user' => 'Falaich ainm-cleachdaiche/seòladh IP an deasaiche',
 'revdel-restore' => 'mùth follaiseachd',
 'revdel-restore-deleted' => 'mùthaidhean a chaidh a sguabadh às',
 'revdel-restore-visible' => 'mùthaidhean faicsinneach',
 
+# History merging
+'mergehistory-from' => 'An duilleag thùsail:',
+'mergehistory-reason' => 'Adhbhar:',
+
 # Merge log
 'revertmerge' => 'Dì-aontaich',
 
@@ -837,8 +908,7 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 'search-interwiki-caption' => 'Pròiseactan co-cheangailte',
 'search-interwiki-default' => 'Toraidhean $1:',
 'search-interwiki-more' => '(barrachd)',
-'search-mwsuggest-enabled' => 'le molaidhean',
-'search-mwsuggest-disabled' => 'gun mholaidhean',
+'search-relatedarticle' => 'Co-cheangailte',
 'searchrelated' => 'co-cheangailte',
 'searchall' => 'a h-uile',
 'showingresults' => "A' nochdadh suas gu $1 {{PLURAL:$1|toradh|thoradh|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le #'''$2'''.",
@@ -853,6 +923,9 @@ Feuch ri ''all:'' a chuir air beulaibh an iarrtais agad gus rannsachadh a dhèan
 'powersearch-redir' => 'Seall ath-sheòlaidhean',
 'powersearch-field' => 'Lorg',
 
+# Quickbar
+'qbsettings-none' => 'Chan eil gin',
+
 # Preferences page
 'preferences' => 'Roghainnean',
 'mypreferences' => 'Mo roghainnean',
@@ -860,22 +933,59 @@ Feuch ri ''all:'' a chuir air beulaibh an iarrtais agad gus rannsachadh a dhèan
 'prefs-skin' => 'Bian',
 'skin-preview' => 'Ro-shealladh',
 'prefs-beta' => 'Feartan Beta',
+'prefs-datetime' => 'Ceann-là is àm',
 'prefs-labs' => 'Feartan nan deuchainn-lannan',
 'prefs-personal' => "Pròifil a' chleachdaiche",
+'prefs-rc' => 'Mùthaidhean ùra',
+'prefs-watchlist' => 'An clàr-faire',
+'prefs-resetpass' => 'Atharraich am facal-faire',
+'prefs-changeemail' => 'Atharraich am post-d',
+'prefs-setemail' => 'Suidhich seòladh puist-d',
+'prefs-email' => "Roghainnean a' phuist-d",
+'prefs-rendering' => 'Coltas',
 'saveprefs' => 'Sàbhail',
 'resetprefs' => 'Falamhaich atharrachaidhean nach deach a shàbhaladh fhathast',
+'restoreprefs' => 'Aisig na roghainnean bunaiteach uile',
+'prefs-editing' => "A' deasachadh",
+'prefs-edit-boxsize' => 'Meud uinneag an deasachaidh.',
 'rows' => 'Sreathan',
 'columns' => 'Colbhan',
+'searchresultshead' => 'Lorg',
+'stub-threshold-disabled' => 'À comas',
 'savedprefs' => 'Tha na roghainnean agad air an sàbhaladh.',
+'timezonelegend' => 'Roinn-tìde:',
+'localtime' => 'An t-àm ionadail:',
+'servertime' => 'Àm an fhrithealaichte:',
+'timezoneregion-africa' => 'Afraga',
+'timezoneregion-america' => 'Aimeireaga',
+'timezoneregion-antarctica' => 'An Antartaig',
+'timezoneregion-arctic' => 'An Arctaig',
+'timezoneregion-asia' => 'Àisia',
+'timezoneregion-atlantic' => 'An Cuan Siar',
+'timezoneregion-australia' => 'Astràilia',
+'timezoneregion-europe' => 'An Roinn-Eòrpa',
+'timezoneregion-indian' => 'An Cuan Innseanach',
+'timezoneregion-pacific' => 'An Cuan Sèimh',
 'default' => 'an roghainn bhunaiteach',
+'prefs-custom-css' => 'CSS gnàthaichte',
 'youremail' => 'Post-dealain:',
 'username' => 'Ainm-cleachdaiche:',
 'yourrealname' => "An dearbh ainm a th' ort:",
 'yourlanguage' => 'Cànan:',
 'yournick' => 'Earr-sgrìobhadh ùr:',
+'yourgender' => 'Gnè:',
+'gender-unknown' => 'Gun innse',
+'gender-male' => 'Fireann',
+'gender-female' => 'Boireann',
+'email' => 'Post-d:',
 'prefs-help-email' => "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
 'prefs-help-email-others' => "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air an duilleag agad.
 Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
+'prefs-advancedediting' => 'Roghainnean adhartach',
+'prefs-advancedrc' => 'Roghainnean adhartach',
+'prefs-advancedrendering' => 'Roghainnean adhartach',
+'prefs-advancedsearchoptions' => 'Roghainnean adhartach',
+'prefs-advancedwatchlist' => 'Roghainnean adhartach',
 
 # User rights
 'userrights-changeable-col' => 'Buidhnean as urrainn dhut atharrachadh',
@@ -883,10 +993,17 @@ Chan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.
 # Groups
 'group-sysop' => 'Rianadairean',
 
+'group-user-member' => '{{GENDER:$1|cleachdaiche}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|rianaire}}',
+'group-bureaucrat-member' => '{{GENDER:$1|biùrocrat}}',
+
+'grouppage-user' => '{{ns:project}}:Cleachdaichean',
 'grouppage-sysop' => '{{ns:project}}:Rianadairean',
 
 # 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',
@@ -935,9 +1052,11 @@ Tha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''tr
 
 # Upload
 'upload' => 'Luchdaich suas faidhle',
+'uploadbtn' => 'Luchdaich suas faidhle',
 'uploadlogpage' => 'Loga an luchdaidh suas',
 'filename' => 'Ainm-faidhle',
 'filedesc' => 'Gearr-chunntas',
+'fileuploadsummary' => 'Gearr-chunntas:',
 'filestatus' => 'Cor dlighe-sgrìobhaidh:',
 'ignorewarning' => 'Leig seachad an rabhadh agus sàbhail am faidhle co-dhiù',
 'badfilename' => 'Ainm ìomhaigh air atharrachadh ri "$1".',
@@ -1413,4 +1532,7 @@ Bidh an fheadhainn eile falaichte a ghnàth.
 # Special:Tags
 'tag-filter' => 'Criathrag [[Special:Tags|Tag]]:',
 
+# Search suggestions
+'searchsuggest-containing' => 'anns a bheil...',
+
 );
index 734e8a0..d994775 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Alma
+ * @author Dferg
  * @author Elisardojm
  * @author Gallaecio
  * @author Gustronico
@@ -163,60 +164,60 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCIÓN', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SENÍNDICE__', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__SENGALERÍA__', '__SEMGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '___SENCABECEIRA__', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMEDOMESACTUAL', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'ABREVIATURADOMESACTUAL', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DÍAACTUAL', 'DIAATUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DÍAACTUAL2', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODÍAACTUAL', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANOACTUAL', 'ANOATUAL', 'CURRENTYEAR' ),
-       'currenthour'             => array( '1', 'HORAACTUAL', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'ABREVIATURADOMESLOCAL', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DÍALOCAL2', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODÍALOCAL', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NÚMERODEPÁXINAS', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NÚMERODEARTIGOS', 'NUMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NÚMERODEFICHEIROS', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'namespace'               => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'NOMEDASUBPÁXINA', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       'img_manualthumb'         => array( '1', 'miniatura=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dereita', 'direita', 'right' ),
-       'img_left'                => array( '1', 'esquerda', 'left' ),
-       'img_none'                => array( '1', 'ningún', 'nenhum', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_page'                => array( '1', 'páxina=$1', 'páxina $1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'bordo', 'borda', 'border' ),
-       'grammar'                 => array( '0', 'GRAMÁTICA:', 'GRAMMAR:' ),
-       'displaytitle'            => array( '1', 'AMOSAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LIGAZÓNDANOVASECCIÓN__', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
-       'language'                => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'tag'                     => array( '0', 'etiqueta', 'tag' ),
-       'hiddencat'               => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#REDIRECCIÓN', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SENÍNDICE__', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SENGALERÍA__', '__SEMGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '___SENCABECEIRA__', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMEDOMESACTUAL', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'ABREVIATURADOMESACTUAL', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DÍAACTUAL', 'DIAATUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DÍAACTUAL2', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODÍAACTUAL', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANOACTUAL', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenthour'               => array( '1', 'HORAACTUAL', 'HORAATUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'ABREVIATURADOMESLOCAL', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DÍALOCAL2', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODÍALOCAL', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NÚMERODEPÁXINAS', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NÚMERODEARTIGOS', 'NUMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NÚMERODEFICHEIROS', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'NOMEDASUBPÁXINA', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dereita', 'direita', 'right' ),
+       'img_left'                  => array( '1', 'esquerda', 'left' ),
+       'img_none'                  => array( '1', 'ningún', 'nenhum', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'páxina=$1', 'páxina $1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'bordo', 'borda', 'border' ),
+       'grammar'                   => array( '0', 'GRAMÁTICA:', 'GRAMMAR:' ),
+       'displaytitle'              => array( '1', 'AMOSAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LIGAZÓNDANOVASECCIÓN__', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'tag'                       => array( '0', 'etiqueta', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -380,7 +381,7 @@ $messages = array(
 'vector-action-protect' => 'Protexer',
 'vector-action-undelete' => 'Restaurar',
 'vector-action-unprotect' => 'Cambiar a protección',
-'vector-simplesearch-preference' => 'Activar as suxestións de procura melloradas (soamente na aparencia Vector)',
+'vector-simplesearch-preference' => 'Activar a barra de procuras simplificada (soamente na aparencia Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver o historial',
@@ -593,7 +594,7 @@ Pode conter un ou máis caracteres dos que non se poden empregar nos títulos.',
 'querypage-no-updates' => 'Neste momento están desactivadas as actualizacións nesta páxina. O seu contido non se modificará.',
 'wrong_wfQuery_params' => 'Parámetros incorrectos para wfQuery()<br />
 Función: $1<br />
-Dúbida: $2',
+Pescuda: $2',
 'viewsource' => 'Ver o código fonte',
 'viewsource-title' => 'Ver o código fonte de "$1"',
 'actionthrottled' => 'Acción limitada',
@@ -602,10 +603,11 @@ Inténteo de novo nuns minutos.",
 'protectedpagetext' => 'Esta páxina foi protexida para evitar a edición.',
 '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.',
+'protectedinterface' => 'Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.
+Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.',
 'editinginterface' => "'''Aviso:''' Está editando unha páxina usada para fornecer o texto da interface do software.
-Os cambios nesta páxina afectarán á aparencia da interface para os outros usuarios.
-Para realizar traducións, considere usar [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
+Os cambios nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.
+Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
 'sqlhidden' => '(Procura SQL agochada)',
 'cascadeprotected' => 'Esta páxina foi protexida fronte á edición debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a "protección en serie" activada:
 $2',
@@ -631,7 +633,7 @@ O administrador que bloqueou o repositorio achegou este motivo: "$3".',
 # Login and logout pages
 'logouttext' => "'''Agora está fóra do sistema.'''
 
-Pode continuar usando {{SITENAME}} de xeito anónimo, ou pode [[Special:UserLogin|acceder de novo]] co mesmo nome de usuario ou con outro.
+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.
@@ -899,8 +901,7 @@ Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar a páxina]</span>.',
 'noarticletext-nopermission' => 'Actualmente non hai ningún texto nesta páxina.
-Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas
-ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>.',
+Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>, pero non ten os permisos necesarios para crear esta páxina.',
 'missing-revision' => 'A revisión nº$1 da páxina chamada "{{PAGENAME}}" non existe.
 
 A miúdo, isto está provocado por seguir unha ligazón de historial obsoleta cara a unha páxina que foi borrada.
@@ -1168,8 +1169,10 @@ Non ten acceso a el.',
 Por favor, comprobe os rexistros.',
 'revdelete-only-restricted' => 'Erro ao agochar o elemento con data do $1 ás $2: Non pode eliminar elementos da vista dos administradores sen tamén seleccionar algunha das outras opcións de visibilidade.',
 'revdelete-reason-dropdown' => '* Motivos frecuentes para borrar
-** Violación dos dereitos de autor
-** Información persoal inapropiada',
+** Violación dos dereitos de autoría
+** Comentario inapropiado ou información persoal
+** Nome de usuario inapropiado
+** Información potencialmente difamatoria',
 'revdelete-otherreason' => 'Outro motivo:',
 'revdelete-reasonotherlist' => 'Outro motivo',
 'revdelete-edit-reasonlist' => 'Editar os motivos de borrado',
@@ -1266,8 +1269,6 @@ O [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrad
 'search-interwiki-caption' => 'Proxectos irmáns',
 'search-interwiki-default' => 'Resultados en $1:',
 'search-interwiki-more' => '(máis)',
-'search-mwsuggest-enabled' => 'con suxestións',
-'search-mwsuggest-disabled' => 'sen suxestións',
 'search-relatedarticle' => 'Relacionado',
 'mwsuggest-disable' => 'Deshabilitar as suxestións AJAX',
 'searcheverything-enable' => 'Procurar en todos os espazos de nomes',
@@ -1366,7 +1367,7 @@ Velaquí un valor xerado ao chou que pode usar: $1',
 'timezoneregion-indian' => 'Océano Índico',
 'timezoneregion-pacific' => 'Océano Pacífico',
 'allowemail' => 'Admitir mensaxes de correo electrónico doutros usuarios',
-'prefs-searchoptions' => 'Opcións de procura',
+'prefs-searchoptions' => 'Procura',
 'prefs-namespaces' => 'Espazos de nomes',
 'defaultns' => 'Se non, procurar nestes espazos de nomes:',
 'default' => 'predeterminado',
@@ -1384,7 +1385,7 @@ Este cambio non se poderá desfacer.',
 'prefs-memberingroups' => 'Membro {{PLURAL:$1|do grupo|dos grupos}}:',
 'prefs-registration' => 'Data e hora de rexistro:',
 'yourrealname' => 'Nome real:',
-'yourlanguage' => 'Lingua da interface:',
+'yourlanguage' => 'Lingua:',
 'yourvariant' => 'Variante de lingua para os contidos:',
 'prefs-help-variant' => 'A variante ou ortografía preferida na que mostrar o contido das páxinas deste wiki.',
 'yournick' => 'Sinatura:',
@@ -1628,7 +1629,7 @@ As páxinas da súa [[Special:Watchlist|lista de vixilancia]] aparecen en '''neg
 'uploadnologin' => 'Non accedeu ao sistema',
 'uploadnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] para poder cargar ficheiros.',
 'upload_directory_missing' => 'Falta o directorio de carga ($1) e non pode ser creado polo servidor da páxina web.',
-'upload_directory_read_only' => 'Non se pode escribir no directorio de subida ($1) do servidor web.',
+'upload_directory_read_only' => 'O servidor web non pode escribir no directorio de carga ($1).',
 'uploaderror' => 'Erro ao cargar',
 'upload-recreate-warning' => "'''Atención: Borrouse ou trasladouse un ficheiro con ese nome.'''
 
@@ -1686,7 +1687,7 @@ Por favor, cambie o nome do ficheiro e intente cargalo de novo.',
 Isto pode deberse a un erro ortográfico no seu nome.
 Por favor, verifique se realmente quere cargar este ficheiro.',
 'windows-nonascii-filename' => 'Este wiki non soporta os nomes de ficheiros con caracteres especiais.',
-'fileexists' => 'Xa existe un ficheiro con ese nome. Por favor, comprobe <strong>[[:$1]]</strong> se non está seguro de querer cambialo.
+'fileexists' => 'Xa existe un ficheiro con ese nome. Por favor, comprobe "<strong>[[:$1]]</strong>" se non está seguro de querer cambialo.
 [[$1|thumb]]',
 'filepageexists' => 'A páxina de descrición deste ficheiro xa foi creada en <strong>[[:$1]]</strong>, pero polo de agora non existe ningún ficheiro con este nome.
 O resumo que escribiu non aparecerá na páxina de descrición.
@@ -1797,7 +1798,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-internal' => 'Houbo un erro descoñecido no sistema de almacenamento "$1".',
 'backend-fail-contenttype' => 'Non se puido determinar o tipo de contido do ficheiro a almacenar en "$1".',
 'backend-fail-batchsize' => 'O sistema de almacenamento recibiu un feixe de $1 {{PLURAL:$1|operación|operacións}} de ficheiro; o límite está en $2 {{PLURAL:$2|operación|operacións}}.',
-'backend-fail-usable' => 'Non se puido escribir o ficheiro "$1" debido a que os permisos son insuficientes ou faltan os directorios/contenedores.',
+'backend-fail-usable' => 'Non se puido ler ou escribir o ficheiro "$1" debido a que os permisos son insuficientes ou faltan os directorios/contenedores.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Non se pode conectar coa base de datos do rexistro do sistema de almacenamento "$1".',
@@ -2645,7 +2646,7 @@ O motivo do bloqueo de $1 é: "$2"',
 'blocklogpage' => 'Rexistro de bloqueos',
 'blocklog-showlog' => 'Este usuario xa foi bloqueado con anterioridade. Velaquí está o rexistro de bloqueos por se quere consultalo:',
 'blocklog-showsuppresslog' => 'Este usuario xa foi bloqueado e agochado con anterioridade. Velaquí está o rexistro de supresións por se quere consultalo:',
-'blocklogentry' => 'bloqueou a "[[$1]]" cun tempo de duración de $2 $3',
+'blocklogentry' => 'bloqueou a [[$1]] $3 cun tempo de duración de $2',
 'reblock-logentry' => 'cambiou as configuracións do bloqueo de "[[$1]]" cunha caducidade de $2 $3',
 'blocklogtext' => 'Este é o rexistro das accións de bloqueo e desbloqueo de usuarios.
 Non se listan os enderezos IP bloqueados automaticamente.
@@ -2908,7 +2909,6 @@ Gárdeo no seu disco duro e cárgueo aquí.',
 
 # JavaScriptTest
 'javascripttest' => 'Proba de JavaScript',
-'javascripttest-disabled' => 'Esta función está desactivada neste wiki.',
 'javascripttest-title' => 'Executando probas de $1',
 'javascripttest-pagetext-noframework' => 'Esta páxina está reservada para executar probas do JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Descoñécese a infraestrutura dixital "$1" de probas.',
@@ -3073,10 +3073,10 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de edicións recentes (durante os últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recentes',
-'pageinfo-restriction' => 'Protección da páxina (<code>$1</code>)',
 '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-toolboxlink' => 'Información da páxina',
 
 # Skin names
 'skinname-standard' => 'Clásica',
@@ -3662,6 +3662,7 @@ O código de confirmación caduca o $6 ás $7.',
 # Scary transclusion
 'scarytranscludedisabled' => '[A transclusión interwiki está desactivada]',
 'scarytranscludefailed' => '[Fallou a busca do modelo "$1"]',
+'scarytranscludefailed-httpstatus' => '[Fallou a busca do modelo "$1": HTTP $2]',
 'scarytranscludetoolong' => '[O enderezo URL é demasiado longo]',
 
 # Delete conflict
@@ -3939,6 +3940,10 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'feedback-bugcheck' => 'Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].',
 'feedback-bugnew' => 'Comprobeino. Informar deste novo erro',
 
+# Search suggestions
+'searchsuggest-search' => 'Procurar',
+'searchsuggest-containing' => 'que conteña...',
+
 # API errors
 'api-error-badaccess-groups' => 'Non ten os permisos necesarios para cargar ficheiros neste wiki.',
 'api-error-badtoken' => 'Erro interno: Pase incorrecto.',
index 14353d3..511a535 100644 (file)
@@ -16,53 +16,53 @@ $fallback = 'fa';
 
 $messages = array(
 'moredotdotdot' => 'ویشتر...',
-'mypage'        => 'می هنه‌شر',
-'mytalk'        => 'می گب',
-'anontalk'      => 'اَ آی.پیˇ گب',
+'mypage' => 'می هنه‌شر',
+'mytalk' => 'می گب',
+'anontalk' => 'اَ آی.پیˇ گب',
 
 # Cologne Blue skin
 'qbfind' => 'یاتن',
 'qbedit' => 'دچین واچین',
 
-'returnto'         => 'واگرد به $1.',
-'search'           => 'واموج',
-'searchbutton'     => 'واموج',
-'go'               => 'بوشو',
-'searcharticle'    => 'بوشو',
-'history_short'    => 'تارئخ',
+'returnto' => 'واگرد به $1.',
+'search' => 'واموج',
+'searchbutton' => 'واموج',
+'go' => 'بوشو',
+'searcharticle' => 'بوشو',
+'history_short' => 'تارئخ',
 'printableversion' => 'پرینتی نوسخه',
-'permalink'        => 'مؤنسنی پیوند',
-'edit'             => 'دچین واچین',
-'editthispage'     => 'اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.',
+'permalink' => 'مؤنسنی پیوند',
+'edit' => 'دچین واچین',
+'editthispage' => 'اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.',
 'create-this-page' => 'اَ هنه‌شره (صفحه‌یه) چاکون.',
-'deletethispage'   => 'اَ هنه‌شره پاکأ کون.',
-'newpage'          => 'تازه هنه‌شر (تازه صفحه)',
+'deletethispage' => 'اَ هنه‌شره پاکأ کون.',
+'newpage' => 'تازه هنه‌شر (تازه صفحه)',
 'talkpagelinktext' => 'گب',
-'talk'             => 'گب',
-'toolbox'          => 'ابزار جیگا',
-'jumpto'           => 'واز بکون به:',
+'talk' => 'گب',
+'toolbox' => 'ابزار جیگا',
+'jumpto' => 'واز بکون به:',
 'jumptonavigation' => 'گردسن',
-'jumptosearch'     => 'واموج',
+'jumptosearch' => 'واموج',
 
 # 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).
-'currentevents'        => 'تازه چیؤن',
-'mainpage'             => 'گت صفحه',
+'currentevents' => 'تازه چیؤن',
+'mainpage' => 'گت صفحه',
 'mainpage-description' => 'گت صفحه',
-'portal'               => 'امه جیگا',
-'privacy'              => 'رازبداری',
+'portal' => 'امه جیگا',
+'privacy' => 'رازبداری',
 
 'editsection' => 'دچین‌واچین',
-'editold'     => 'دچین‌واچین',
+'editold' => 'دچین‌واچین',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'وانیویس (مقاله)',
-'nstab-user'     => 'کاربری هنه‌شر',
+'nstab-main' => 'وانیویس (مقاله)',
+'nstab-user' => 'کاربری هنه‌شر',
 'nstab-category' => 'رج',
 
 # Search results
-'searchresults'       => 'واموج‌دموجˇ نتایج',
+'searchresults' => 'واموج‌دموجˇ نتایج',
 'searchresults-title' => 'واموج‌دموجˇ نتایج، «$1»ˇ واسی',
-'searchsubtitle'      => "شمه '''[[:$1]]''' ره واموتید ([[Special:Prefixindex/$1|هنه‌شرانی (صفحه‌هایی) کی «$1» همره سرأ گیفته بیدی (شوروع بیدی).]]{{int:pipe-separator}}
+'searchsubtitle' => "شمه '''[[:$1]]''' ره واموتید ([[Special:Prefixindex/$1|هنه‌شرانی (صفحه‌هایی) کی «$1» همره سرأ گیفته بیدی (شوروع بیدی).]]{{int:pipe-separator}}
 [[Special:WhatLinksHere/$1|او هنه‌شرانی (صفحه‌هایی) کی به «$1» خال (لینک) بدأیید]])",
 
 # Special:AllPages
@@ -77,7 +77,7 @@ $messages = array(
 'blocklink' => 'دَوَسته ببه',
 
 # Tooltip help for the actions
-'tooltip-ca-edit'    => 'شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.',
+'tooltip-ca-edit' => 'شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.',
 'tooltip-ca-history' => 'اَ هنه‌شر (صفحه)ˇ قدیمی نسخه‌یان',
 
 );
index 5733ff5..06af738 100644 (file)
@@ -36,151 +36,151 @@ $namespaceGenderAliases = array();
 
 $messages = array(
 # User preference toggles
-'tog-underline'       => 'Haiguy joajuha',
-'tog-justify'         => 'embojoja haipyvo',
-'tog-hideminor'       => 'Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»',
+'tog-underline' => 'Haiguy joajuha',
+'tog-justify' => 'embojoja haipyvo',
+'tog-hideminor' => 'Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»',
 'tog-extendwatchlist' => 'Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape',
-'tog-usenewrc'        => "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
-'tog-numberheadings'  => 'Mbopapapy ijehegui myakãha',
-'tog-showtoolbar'     => 'Ehechauka ñemyatyrõ renda',
+'tog-usenewrc' => "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
+'tog-numberheadings' => 'Mbopapapy ijehegui myakãha',
+'tog-showtoolbar' => 'Ehechauka ñemyatyrõ renda',
 
 'underline-always' => 'Akói',
-'underline-never'  => "Araka'eve",
+'underline-never' => "Araka'eve",
 
 # Dates
-'sunday'        => 'arateĩ',
-'monday'        => 'arakői',
-'tuesday'       => 'araapy',
-'wednesday'     => 'ararundy',
-'thursday'      => 'arapo',
-'friday'        => 'arapoteĩ',
-'saturday'      => 'arapokői',
-'sun'           => 'arateĩ',
-'mon'           => 'arakõi',
-'tue'           => 'araapy',
-'wed'           => 'ararundy',
-'thu'           => 'arapo',
-'fri'           => 'arapoteĩ',
-'january'       => 'jasyteĩ',
-'february'      => 'jasykői',
-'march'         => 'jasyapy',
-'april'         => 'jasyrundy',
-'may_long'      => 'jasypo',
-'june'          => 'jasypoteĩ',
-'july'          => 'jasypokői',
-'august'        => 'jasypoapy',
-'september'     => 'jasyporundy',
-'october'       => 'jasypa',
-'november'      => 'jasypateĩ',
-'december'      => 'jasypakői',
-'january-gen'   => 'jasyteĩ',
-'february-gen'  => 'jasykõi',
-'march-gen'     => 'jasyapy',
-'april-gen'     => 'jasyrundy',
-'may-gen'       => 'jasypo',
-'june-gen'      => 'jasypoteĩ',
-'july-gen'      => 'jasypokõi',
-'august-gen'    => 'jasypoapy',
+'sunday' => 'arateĩ',
+'monday' => 'arakői',
+'tuesday' => 'araapy',
+'wednesday' => 'ararundy',
+'thursday' => 'arapo',
+'friday' => 'arapoteĩ',
+'saturday' => 'arapokői',
+'sun' => 'arateĩ',
+'mon' => 'arakõi',
+'tue' => 'araapy',
+'wed' => 'ararundy',
+'thu' => 'arapo',
+'fri' => 'arapoteĩ',
+'january' => 'jasyteĩ',
+'february' => 'jasykői',
+'march' => 'jasyapy',
+'april' => 'jasyrundy',
+'may_long' => 'jasypo',
+'june' => 'jasypoteĩ',
+'july' => 'jasypokői',
+'august' => 'jasypoapy',
+'september' => 'jasyporundy',
+'october' => 'jasypa',
+'november' => 'jasypateĩ',
+'december' => 'jasypakői',
+'january-gen' => 'jasyteĩ',
+'february-gen' => 'jasykõi',
+'march-gen' => 'jasyapy',
+'april-gen' => 'jasyrundy',
+'may-gen' => 'jasypo',
+'june-gen' => 'jasypoteĩ',
+'july-gen' => 'jasypokõi',
+'august-gen' => 'jasypoapy',
 'september-gen' => 'jasyporundy',
-'october-gen'   => 'jasypa',
-'november-gen'  => 'jasypateĩ',
-'december-gen'  => 'jasypakõi',
-'jan'           => 'jasyteĩ',
-'feb'           => 'jasykõi',
-'mar'           => 'jasyapy',
-'apr'           => 'jasyrundy',
-'may'           => 'jasypo',
-'jun'           => 'jasypoteĩ',
-'jul'           => 'jasypokõi',
-'aug'           => 'jasypoapy',
-'sep'           => 'jasyporundy',
-'oct'           => 'jasypa',
-'nov'           => 'jasypateĩ',
-'dec'           => 'jasypakõi',
+'october-gen' => 'jasypa',
+'november-gen' => 'jasypateĩ',
+'december-gen' => 'jasypakõi',
+'jan' => 'jasyteĩ',
+'feb' => 'jasykõi',
+'mar' => 'jasyapy',
+'apr' => 'jasyrundy',
+'may' => 'jasypo',
+'jun' => 'jasypoteĩ',
+'jul' => 'jasypokõi',
+'aug' => 'jasypoapy',
+'sep' => 'jasyporundy',
+'oct' => 'jasypa',
+'nov' => 'jasypateĩ',
+'dec' => 'jasypakõi',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Ñemohenda|Ñemohendakuéra}}',
 
-'about'      => 'Rehegua',
-'article'    => 'Kuatiahai',
-'newwindow'  => "(Ojepe'a peteĩ ovetã pyahu)",
-'cancel'     => 'Mbotove',
-'mypage'     => 'Che kuatiarogue',
-'mytalk'     => 'Che myangekõi',
+'about' => 'Rehegua',
+'article' => 'Kuatiahai',
+'newwindow' => "(Ojepe'a peteĩ ovetã pyahu)",
+'cancel' => 'Mbotove',
+'mypage' => 'Che kuatiarogue',
+'mytalk' => 'Che myangekõi',
 'navigation' => 'Kundaharã',
 
 # Cologne Blue skin
-'qbfind'         => 'Heka',
-'qbedit'         => 'Jehaijey',
+'qbfind' => 'Heka',
+'qbedit' => 'Jehaijey',
 'qbspecialpages' => 'Kuatiarogue hekochĩchĩva',
 
-'tagline'          => '{{SITENAME}}megua',
-'help'             => 'Pytyvõhára',
-'search'           => 'Heka',
-'searchbutton'     => 'Heka',
-'go'               => 'Ha',
-'searcharticle'    => 'Ha',
-'history'          => 'Tembiasakue',
-'history_short'    => 'Tembiasakue',
+'tagline' => '{{SITENAME}}megua',
+'help' => 'Pytyvõhára',
+'search' => 'Heka',
+'searchbutton' => 'Heka',
+'go' => 'Ha',
+'searcharticle' => 'Ha',
+'history' => 'Tembiasakue',
+'history_short' => 'Tembiasakue',
 'printableversion' => 'Osẽma haguãicha',
-'edit'             => 'Jehaijey',
-'delete'           => "Mboje'o",
-'undelete_short'   => 'Restaurar $1 ediciones',
-'newpage'          => 'Pyahu kuatia',
+'edit' => 'Jehaijey',
+'delete' => "Mboje'o",
+'undelete_short' => 'Restaurar $1 ediciones',
+'newpage' => 'Pyahu kuatia',
 'talkpagelinktext' => "ñe'ẽ",
-'specialpage'      => "Kuatiarogue mba'echĩchĩ",
-'personaltools'    => 'Tapicha rembipuru',
-'postcomment'      => "Emoĩ ne remimo'ã",
-'talk'             => 'Myangekõi',
-'views'            => 'Techakuéra',
-'toolbox'          => 'Tembiporu',
-'mediawikipage'    => 'Hecha kuatiarogue marandu',
-'viewtalkpage'     => 'Hecha myangekõi',
-'otherlanguages'   => "Ambue ñe'ẽ",
-'redirectedfrom'   => '(Oñembohapejeýva $1)',
-'lastmodifiedat'   => 'Ko kuatiarogue oñemoambuejeýkuri: $2, $1.',
-'viewcount'        => 'Esta página ha sido visitada $1 veces.',
-'jumpto'           => 'Kundaharãme jeho',
+'specialpage' => "Kuatiarogue mba'echĩchĩ",
+'personaltools' => 'Tapicha rembipuru',
+'postcomment' => "Emoĩ ne remimo'ã",
+'talk' => 'Myangekõi',
+'views' => 'Techakuéra',
+'toolbox' => 'Tembiporu',
+'mediawikipage' => 'Hecha kuatiarogue marandu',
+'viewtalkpage' => 'Hecha myangekõi',
+'otherlanguages' => "Ambue ñe'ẽ",
+'redirectedfrom' => '(Oñembohapejeýva $1)',
+'lastmodifiedat' => 'Ko kuatiarogue oñemoambuejeýkuri: $2, $1.',
+'viewcount' => 'Esta página ha sido visitada $1 veces.',
+'jumpto' => 'Kundaharãme jeho',
 'jumptonavigation' => 'kundaharã',
-'jumptosearch'     => 'Jeheka',
+'jumptosearch' => 'Jeheka',
 
 # 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'            => 'Ári {{SITENAME}}',
-'aboutpage'            => 'Project:Rehegua',
-'copyright'            => "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
-'currentevents'        => 'Ag̃agua',
-'disclaimers'          => 'Marandu leiguigua',
-'edithelp'             => 'Jehairã ñepytyvõ',
-'mainpage'             => 'Ape',
+'aboutsite' => 'Ári {{SITENAME}}',
+'aboutpage' => 'Project:Rehegua',
+'copyright' => "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
+'currentevents' => 'Ag̃agua',
+'disclaimers' => 'Marandu leiguigua',
+'edithelp' => 'Jehairã ñepytyvõ',
+'mainpage' => 'Ape',
 'mainpage-description' => 'Ape',
-'portal'               => 'Tekohapegua',
-'privacy'              => 'Polítika marandu ñeñangareko rehegua',
-'privacypage'          => 'Project:Polítika marandu ñeñangareko rehegua',
+'portal' => 'Tekohapegua',
+'privacy' => 'Polítika marandu ñeñangareko rehegua',
+'privacypage' => 'Project:Polítika marandu ñeñangareko rehegua',
 
-'newmessageslink'         => 'marandu pyahu',
-'newmessagesdifflink'     => 'Joavy oĩva mokõive jehai paha apytépe',
+'newmessageslink' => 'marandu pyahu',
+'newmessagesdifflink' => 'Joavy oĩva mokõive jehai paha apytépe',
 'youhavenewmessagesmulti' => 'Reguereko marandu pyahu $1',
-'editsection'             => 'jehaijey',
-'editsection-brackets'    => '($1)',
-'editold'                 => 'jehaijey',
-'editsectionhint'         => 'Jehaijey vore: $1',
-'toc'                     => "Tembikuaa'aty rechaukaha",
-'showtoc'                 => 'hechauka',
-'hidetoc'                 => 'toñemi',
-'restorelink'             => '$1 ediciones borradas',
-'red-link-title'          => '$1 (ndaipóri ko togue)',
+'editsection' => 'jehaijey',
+'editsection-brackets' => '($1)',
+'editold' => 'jehaijey',
+'editsectionhint' => 'Jehaijey vore: $1',
+'toc' => "Tembikuaa'aty rechaukaha",
+'showtoc' => 'hechauka',
+'hidetoc' => 'toñemi',
+'restorelink' => '$1 ediciones borradas',
+'red-link-title' => '$1 (ndaipóri ko togue)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Kuatiahai',
-'nstab-user'      => 'Puruhára',
-'nstab-media'     => 'Media rogue',
-'nstab-special'   => "Mba'echĩchĩ",
-'nstab-project'   => "Mba'e apopyrã rogue",
-'nstab-image'     => 'Ñongatupy',
+'nstab-main' => 'Kuatiahai',
+'nstab-user' => 'Puruhára',
+'nstab-media' => 'Media rogue',
+'nstab-special' => "Mba'echĩchĩ",
+'nstab-project' => "Mba'e apopyrã rogue",
+'nstab-image' => 'Ñongatupy',
 'nstab-mediawiki' => 'Marandu',
-'nstab-template'  => 'Tembiecharã',
-'nstab-help'      => 'Pytyvõ',
-'nstab-category'  => 'Ñemohenda',
+'nstab-template' => 'Tembiecharã',
+'nstab-help' => 'Pytyvõ',
+'nstab-category' => 'Ñemohenda',
 
 # Main script and global functions
 'nosuchaction' => 'Upe tembiapo ndaipóri',
@@ -189,145 +189,144 @@ $messages = array(
 'ns-specialprotected' => 'Las páginas en el espacio de nombres Especial no se pueden editar.',
 
 # Login and logout pages
-'yourname'                => 'Hero',
-'yourpassword'            => 'Ne remiñemi',
-'yourpasswordagain'       => 'Repita ne remiñemi',
-'remembermypassword'      => "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'login'                   => 'Terañemboguapy/Ke',
+'yourname' => 'Hero',
+'yourpassword' => 'Ne remiñemi',
+'yourpasswordagain' => 'Repita ne remiñemi',
+'remembermypassword' => "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'login' => 'Terañemboguapy/Ke',
 'nav-login-createaccount' => 'Terañemboguapy/Ke',
-'userlogin'               => 'Terañemboguapy/Ke',
-'logout'                  => 'Sẽ',
-'userlogout'              => 'Sẽ',
-'nologin'                 => "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
-'nologinlink'             => 'Téra ñemohenda',
-'loginsuccesstitle'       => 'Remoñepyrũ hekopete ne rembiapo',
-'nosuchusershort'         => 'No hay un usuario con el nombre "$1". Compruebe que lo ha escrito correctamente.',
-'mailmypassword'          => "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
-'loginlanguagelabel'      => "Ñe'ẽ: $1",
+'userlogin' => 'Terañemboguapy/Ke',
+'logout' => 'Sẽ',
+'userlogout' => 'Sẽ',
+'nologin' => "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
+'nologinlink' => 'Téra ñemohenda',
+'loginsuccesstitle' => 'Remoñepyrũ hekopete ne rembiapo',
+'nosuchusershort' => 'No hay un usuario con el nombre "$1". Compruebe que lo ha escrito correctamente.',
+'mailmypassword' => "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
+'loginlanguagelabel' => "Ñe'ẽ: $1",
 
 # Edit page toolbar
-'bold_sample'   => 'Haipyre oñemohũvéva',
-'bold_tip'      => 'Haipyre oñemohũvéva',
+'bold_sample' => 'Haipyre oñemohũvéva',
+'bold_tip' => 'Haipyre oñemohũvéva',
 'italic_sample' => 'Haipyre ikarẽva',
-'italic_tip'    => 'Haipyre ikarẽva',
-'link_tip'      => 'Joaju hyepyguávandi',
-'extlink_tip'   => 'Joaju okapeguávandi (recuerde añadir el prefijo http://)',
-'headline_tip'  => 'Teraete mokõiha',
-'nowiki_tip'    => "Viki jehaireko ñembo'yke",
-'image_tip'     => "Ta'ãnga moĩngepyréva",
-'media_tip'     => "Joaju jehai'aty multimediaguándi",
-'sig_tip'       => 'Teraguapy, arange, aravo',
-'hr_tip'        => 'Haipuku oñenóva (eipurúke tekotevẽ javénte)',
+'italic_tip' => 'Haipyre ikarẽva',
+'link_tip' => 'Joaju hyepyguávandi',
+'extlink_tip' => 'Joaju okapeguávandi (recuerde añadir el prefijo http://)',
+'headline_tip' => 'Teraete mokõiha',
+'nowiki_tip' => "Viki jehaireko ñembo'yke",
+'image_tip' => "Ta'ãnga moĩngepyréva",
+'media_tip' => "Joaju jehai'aty multimediaguándi",
+'sig_tip' => 'Teraguapy, arange, aravo',
+'hr_tip' => 'Haipuku oñenóva (eipurúke tekotevẽ javénte)',
 
 # Edit pages
-'summary'               => 'Jehaimombyky:',
-'subject'               => "Mba'ekuaarã/teraete:",
-'minoredit'             => "Kóva ha'e peteĩ jehai mbyky",
-'watchthis'             => 'Toñeñangareko ko tembiapóre',
-'savearticle'           => 'Hai',
-'showpreview'           => 'Tojechauka jehai ñemboguapy mboyve',
-'showdiff'              => 'Tojechauka ñemoambue',
-'missingsummary'        => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
-'subject-preview'       => "Previsualización del mba'ekuaarã/teraete:",
-'newarticletext'        => "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.
+'summary' => 'Jehaimombyky:',
+'subject' => "Mba'ekuaarã/teraete:",
+'minoredit' => "Kóva ha'e peteĩ jehai mbyky",
+'watchthis' => 'Toñeñangareko ko tembiapóre',
+'savearticle' => 'Hai',
+'showpreview' => 'Tojechauka jehai ñemboguapy mboyve',
+'showdiff' => 'Tojechauka ñemoambue',
+'missingsummary' => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
+'subject-preview' => "Previsualización del mba'ekuaarã/teraete:",
+'newarticletext' => "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.
 Nde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai.
 Reikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [[{{MediaWiki:Helppage}}|kuatiarogue mboyveguápe]].",
 'userinvalidcssjstitle' => "'''Aviso:''' No existe la piel \"\$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de  Usuario:Foo/Vector.css.",
-'editing'               => 'Ojehaihína $1',
-'editingsection'        => 'Ojehaihína $1 (vore)',
-'editingcomment'        => 'Ojehaihína $1 (comentario)',
-'yourtext'              => "Mba'ehaipyre",
+'editing' => 'Ojehaihína $1',
+'editingsection' => 'Ojehaihína $1 (vore)',
+'editingcomment' => 'Ojehaihína $1 (comentario)',
+'yourtext' => "Mba'ehaipyre",
 
 # History pages
-'cur'         => "ko'ag̃agua",
-'last'        => 'ipaha',
+'cur' => "ko'ag̃agua",
+'last' => 'ipaha',
 'historysize' => '($1 bytes)',
 
 # Revision deletion
-'rev-delundel'       => 'hechauka/toñemi',
+'rev-delundel' => 'hechauka/toñemi',
 'logdelete-selected' => "'''Seleccionados $1 eventos de registro:'''",
 
 # Diffs
-'difference' => "(Mba'épe ojaovy oñemyatyrõva'ekue)",
-'lineno'     => 'Jehai $1:',
-'editundo'   => 'embyai',
+'lineno' => 'Jehai $1:',
+'editundo' => 'embyai',
 'diff-multi' => '($1 ediciones intermedias no se muestran.)',
 
 # Search results
-'searchresults'     => 'Ojejuhúva jeheka',
-'searchsubtitle'    => "Nde reporandúkuri: '''[[:$1]]-re'''",
-'prevn'             => '{{PLURAL:$1|$1}} mboyvegua',
-'viewprevnext'      => 'Hecha ($1 {{int:pipe-separator}} $2) ($3).',
-'showingresults'    => "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
+'searchresults' => 'Ojejuhúva jeheka',
+'searchsubtitle' => "Nde reporandúkuri: '''[[:$1]]-re'''",
+'prevn' => '{{PLURAL:$1|$1}} mboyvegua',
+'viewprevnext' => 'Hecha ($1 {{int:pipe-separator}} $2) ($3).',
+'showingresults' => "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
 'showingresultsnum' => "Abajo se muestran los '''$3''' resultados empezando por el nº '''$2'''.",
-'powersearch'       => 'Jeheka',
+'powersearch' => 'Jeheka',
 
 # Preferences page
-'preferences'       => 'Mbohoryha',
-'mypreferences'     => 'Che mbohoryha',
-'prefs-rc'          => 'Oñemoambue pyahúva',
+'preferences' => 'Mbohoryha',
+'mypreferences' => 'Che mbohoryha',
+'prefs-rc' => 'Oñemoambue pyahúva',
 'searchresultshead' => 'Jeheka',
-'youremail'         => "Ñe'ẽveve",
-'yourlanguage'      => "Ñe'ẽ:",
-'email'             => 'Pareha eleytróniko',
+'youremail' => "Ñe'ẽveve",
+'yourlanguage' => "Ñe'ẽ:",
+'email' => 'Pareha eleytróniko',
 
 # User rights
-'userrights-lookup-user'   => 'Configurar grupos de usuarios',
+'userrights-lookup-user' => 'Configurar grupos de usuarios',
 'userrights-user-editname' => 'Ehaimi peteĩ téra puruháragua:',
-'editusergroup'            => 'Modificar grupos de usuarios',
-'editinguser'              => "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+'editusergroup' => 'Modificar grupos de usuarios',
+'editinguser' => "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
 'userrights-editusergroup' => 'Modificar grupos de usuarios',
-'saveusergroups'           => 'Guardar grupos de usuarios',
-'userrights-groupsmember'  => 'Pehengue:',
-'userrights-reason'        => 'Motivo para el cambio:',
+'saveusergroups' => 'Guardar grupos de usuarios',
+'userrights-groupsmember' => 'Pehengue:',
+'userrights-reason' => 'Motivo para el cambio:',
 
 # Groups
 'group-all' => '(opaite)',
 
 # Recent changes
-'nchanges'          => '$1 ñemoambue',
-'recentchanges'     => 'Oñemoambue pyahúva',
-'rcnote'            => "Iguýpe oĩ umi {{PLURAL:$1|'''1'''|$1}} oñemoambue pyahúva ko ara{{PLURAL:$2|'''1'''|$2}}ndýpe, hekopyahúva $5, $4.",
-'rclistfrom'        => 'Tojehechauka oñemoambue pyahúva $1 guive',
-'rcshowhideminor'   => '$1 jehaijey michĩva',
-'rcshowhideliu'     => '$1 puruhára ohejáva teraguapy',
-'rcshowhideanons'   => "$1 puruhára ojekuaa'ỹva",
-'rcshowhidemine'    => '$1 che jehaijey',
-'rclinks'           => "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
-'hide'              => 'toñemi',
-'show'              => 'hechauka',
+'nchanges' => '$1 ñemoambue',
+'recentchanges' => 'Oñemoambue pyahúva',
+'rcnote' => "Iguýpe oĩ umi {{PLURAL:$1|'''1'''|$1}} oñemoambue pyahúva ko ara{{PLURAL:$2|'''1'''|$2}}ndýpe, hekopyahúva $5, $4.",
+'rclistfrom' => 'Tojehechauka oñemoambue pyahúva $1 guive',
+'rcshowhideminor' => '$1 jehaijey michĩva',
+'rcshowhideliu' => '$1 puruhára ohejáva teraguapy',
+'rcshowhideanons' => "$1 puruhára ojekuaa'ỹva",
+'rcshowhidemine' => '$1 che jehaijey',
+'rclinks' => "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
+'hide' => 'toñemi',
+'show' => 'hechauka',
 'newsectionsummary' => 'Pyahuvore: /* $1 */',
 
 # Recent changes linked
-'recentchangeslinked-title'   => 'Ñemoambue $1 rehegua',
+'recentchangeslinked-title' => 'Ñemoambue $1 rehegua',
 'recentchangeslinked-summary' => "Ko kuatiarogue hekochĩchĩvape oñembohysýi umi ñemoambue ipyahúva ko'ã kuatiarogue ojoajúvape. Kuatiarogue oĩva tapykueho rysýipe oĩ '''haipyre oñemohũvape'''.",
 
 # Upload
-'upload'     => "Tojehupi jehai'aty",
+'upload' => "Tojehupi jehai'aty",
 'uploadtext' => "Eipuru pe tembipuru oĩva iguýpe ehupi hag̃ua jehai'aty, rehecha térã reheka hag̃ua ta'ãnga ojehupipyrémava eike jehai'aty jehupipyre rysýipe, umi ihupipyréva ha oñemboguémava avei oñemboguapy [[Special:Log/upload|jehai'aty jehupipyrépe]].
 Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.png|texto alternativo]]</nowiki>''' o
 '''<nowiki>[[</nowiki>Media<nowiki>:Archivo.ogg]]</nowiki>''' ojoaju hag̃ua hekopete pe jehai'atýre.",
-'filename'   => "Téra jehai'aty",
+'filename' => "Téra jehai'aty",
 
 # Special:ListFiles
-'listfiles'      => "Ta'ãnga rysýi",
+'listfiles' => "Ta'ãnga rysýi",
 'listfiles_user' => 'Puruhára',
 
 # File description page
-'file-anchor-link'  => 'Ñongatupy',
-'filehist-revert'   => 'embojevy',
-'filehist-current'  => "ko'ag̃agua",
+'file-anchor-link' => 'Ñongatupy',
+'filehist-revert' => 'embojevy',
+'filehist-current' => "ko'ag̃agua",
 'filehist-datetime' => 'Ára/Aravo',
-'filehist-user'     => 'Puruhára',
-'filehist-comment'  => 'Jehaimombyky',
-'imagelinks'        => 'Joajukuéra',
+'filehist-user' => 'Puruhára',
+'filehist-comment' => 'Jehaimombyky',
+'imagelinks' => 'Joajukuéra',
 
 # File reversion
 'filerevert' => 'Embojevy $1',
 
 # File deletion
-'filedelete-legend'  => "Mboje'o jehai'aty",
+'filedelete-legend' => "Mboje'o jehai'aty",
 'filedelete-success' => "'''$1''' oñembogue'akue",
 
 # MIME search
@@ -348,13 +347,13 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 # Statistics
 'statistics' => 'Papyrekokuaa',
 
-'disambiguations'     => 'Kuatiarogue mohesakãporãha',
+'disambiguations' => 'Kuatiarogue mohesakãporãha',
 'disambiguationspage' => 'Template:Disambig',
 
 'doubleredirects' => "Ñembohapejey jo'apyre",
 
-'brokenredirects'        => "Ñembohapejey hekopegua'ỹva",
-'brokenredirects-edit'   => 'jehaijey',
+'brokenredirects' => "Ñembohapejey hekopegua'ỹva",
+'brokenredirects-edit' => 'jehaijey',
 'brokenredirects-delete' => "mboje'o",
 
 'withoutinterwiki' => 'Kuatiarogue ndorekóiva interwiki',
@@ -362,38 +361,38 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 'fewestrevisions' => "Kuatiahai sa'ive ijehaijeýva",
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 bytes',
-'ncategories'             => '$1 ñemohendakuéra',
-'nlinks'                  => '$1 joaju',
-'nmembers'                => '$1 kuatiahai',
-'nrevisions'              => '$1 revisiones',
-'nviews'                  => '$1 vistas',
-'lonelypages'             => "Kuatiarogue ityre'ỹva",
-'uncategorizedpages'      => "Kuatiarogue oñemohenda'ỹva",
+'nbytes' => '$1 bytes',
+'ncategories' => '$1 ñemohendakuéra',
+'nlinks' => '$1 joaju',
+'nmembers' => '$1 kuatiahai',
+'nrevisions' => '$1 revisiones',
+'nviews' => '$1 vistas',
+'lonelypages' => "Kuatiarogue ityre'ỹva",
+'uncategorizedpages' => "Kuatiarogue oñemohenda'ỹva",
 'uncategorizedcategories' => 'Ñemohenda noñemohendáiva',
-'uncategorizedimages'     => "Ta'ãnga ne'ĩrã oñemohendáva",
-'uncategorizedtemplates'  => 'Tembiecharã noñemohendáiva',
-'unusedcategories'        => "Ñemohenda ojepuru'ỹva",
-'unusedimages'            => "Ta'ãnga ndojepurúiva",
-'wantedcategories'        => 'Ñemohenda oñekotevẽva',
-'wantedpages'             => 'Kuatiarogue oñekotevẽva',
-'mostlinked'              => 'Kuatiahai ojoaju hetavéva',
-'mostlinkedcategories'    => 'Ñemohenda ojoaju hetavéva',
-'mostlinkedtemplates'     => 'Tembiecharã ojoaju hetavéva',
-'mostcategories'          => 'Kuatiarogue iñemohenda hetavéva',
-'mostimages'              => "Ta'ãnga ojepuruvéva",
-'mostrevisions'           => 'Kuatiahai hetave ijehaijeýva',
-'prefixindex'             => 'Kuatiarogue henondepyguáva',
-'shortpages'              => 'Kuatiarogue mbykýva',
-'longpages'               => 'Kuatiarogue ipukúva',
-'deadendpages'            => "Kuatiarogue ñesẽ'ỹva",
-'protectedpages'          => 'Kuatiarogue oñeñangarekóva',
-'listusers'               => 'Puruhára rysýi',
-'newpages'                => 'Kuatiarogue ipyahúva',
-'newpages-username'       => 'Hero',
-'ancientpages'            => "Kuatiahai hi'arevéva",
-'move'                    => 'Guerova',
-'movethispage'            => 'Guerova kuatiarogue',
+'uncategorizedimages' => "Ta'ãnga ne'ĩrã oñemohendáva",
+'uncategorizedtemplates' => 'Tembiecharã noñemohendáiva',
+'unusedcategories' => "Ñemohenda ojepuru'ỹva",
+'unusedimages' => "Ta'ãnga ndojepurúiva",
+'wantedcategories' => 'Ñemohenda oñekotevẽva',
+'wantedpages' => 'Kuatiarogue oñekotevẽva',
+'mostlinked' => 'Kuatiahai ojoaju hetavéva',
+'mostlinkedcategories' => 'Ñemohenda ojoaju hetavéva',
+'mostlinkedtemplates' => 'Tembiecharã ojoaju hetavéva',
+'mostcategories' => 'Kuatiarogue iñemohenda hetavéva',
+'mostimages' => "Ta'ãnga ojepuruvéva",
+'mostrevisions' => 'Kuatiahai hetave ijehaijeýva',
+'prefixindex' => 'Kuatiarogue henondepyguáva',
+'shortpages' => 'Kuatiarogue mbykýva',
+'longpages' => 'Kuatiarogue ipukúva',
+'deadendpages' => "Kuatiarogue ñesẽ'ỹva",
+'protectedpages' => 'Kuatiarogue oñeñangarekóva',
+'listusers' => 'Puruhára rysýi',
+'newpages' => 'Kuatiarogue ipyahúva',
+'newpages-username' => 'Hero',
+'ancientpages' => "Kuatiahai hi'arevéva",
+'move' => 'Guerova',
+'movethispage' => 'Guerova kuatiarogue',
 
 # Book sources
 'booksources' => "Heñóiva kuatiañe'ẽme",
@@ -402,18 +401,18 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 'log' => 'Ñemboguapypyre',
 
 # Special:AllPages
-'allpages'          => 'Opaite kuatiarogue',
-'alphaindexline'    => '$1 $2 peve',
-'nextpage'          => 'Kuatia rogue upeigua($1)',
-'prevpage'          => 'Kuatia rogue mboyvegua ($1)',
-'allpagesfrom'      => 'Ehechauka kuatia rogue oñepyrũva:   -pe',
-'allpagesto'        => 'Ehechauka kuatia rogue opáva:  -pe',
-'allarticles'       => 'Opa kuatia rogue',
-'allinnamespace'    => "Opa kuatia rogue (pa'ũ $1)",
+'allpages' => 'Opaite kuatiarogue',
+'alphaindexline' => '$1 $2 peve',
+'nextpage' => 'Kuatia rogue upeigua($1)',
+'prevpage' => 'Kuatia rogue mboyvegua ($1)',
+'allpagesfrom' => 'Ehechauka kuatia rogue oñepyrũva:   -pe',
+'allpagesto' => 'Ehechauka kuatia rogue opáva:  -pe',
+'allarticles' => 'Opa kuatia rogue',
+'allinnamespace' => "Opa kuatia rogue (pa'ũ $1)",
 'allnotinnamespace' => 'Opaite kuatiarogue (fuera del espacio $1)',
-'allpagesprev'      => 'Mboyvegua',
-'allpagesnext'      => 'Upeigua',
-'allpagessubmit'    => 'Hechauka',
+'allpagesprev' => 'Mboyvegua',
+'allpagesnext' => 'Upeigua',
+'allpagessubmit' => 'Hechauka',
 
 # Special:Categories
 'categories' => 'Ñemohendakuéra',
@@ -422,67 +421,67 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 'listusers-submit' => 'Hechauka',
 
 # E-mail user
-'emailuser'    => "Tojeguerahauka ñe'ẽveve ko puruhárape",
-'emailpage'    => 'Pareha eleytrónico',
+'emailuser' => "Tojeguerahauka ñe'ẽveve ko puruhárape",
+'emailpage' => 'Pareha eleytrónico',
 'emailmessage' => 'Marandu',
 
 # Watchlist
-'watchlist'   => 'Tapykueho rysýi',
+'watchlist' => 'Tapykueho rysýi',
 'mywatchlist' => 'Tapykueho rysýi',
-'watch'       => 'Ñangareko',
+'watch' => 'Ñangareko',
 
 # Delete
-'dellogpage'  => 'Ñemboguepyre ñonagatupy',
+'dellogpage' => 'Ñemboguepyre ñonagatupy',
 'deletionlog' => 'ñemboguepyre ñonagatupy',
 
 # Rollback
 'rollback_short' => 'Embojevy',
-'rollbacklink'   => 'Embojevy',
+'rollbacklink' => 'Embojevy',
 
 # Protect
 'prot_1movedto2' => '[[$1]] oñembohasa [[$2]]-pe',
-'protect-text'   => "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
+'protect-text' => "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
 
 # Undelete
-'undeletedrevisions'       => '$1 ediciones restauradas',
+'undeletedrevisions' => '$1 ediciones restauradas',
 'undeletedrevisions-files' => '$1 ediciones y $2 archivos restaurados',
-'undeletedfiles'           => '$1 archivos restaurados',
-'undelete-search-submit'   => 'Heka',
+'undeletedfiles' => '$1 archivos restaurados',
+'undelete-search-submit' => 'Heka',
 
 # Namespace form on various pages
-'namespace'      => 'Téra rendagua:',
-'invert'         => "Toñembo'ovývo mba'eporavopyre",
+'namespace' => 'Téra rendagua:',
+'invert' => "Toñembo'ovývo mba'eporavopyre",
 'blanknamespace' => '(Tenondeguáva)',
 
 # Contributions
 'contributions' => "Puruhára mba'emoĩmbyre",
-'mycontris'     => "Che mba'emoĩmbyre",
+'mycontris' => "Che mba'emoĩmbyre",
 
 'sp-contributions-search' => "Heka mba'emoĩmbyre",
 'sp-contributions-submit' => 'Heka',
 
 # What links here
-'whatlinkshere'       => "Oñembojoajukuaáva ko'ápe",
+'whatlinkshere' => "Oñembojoajukuaáva ko'ápe",
 'whatlinkshere-title' => 'Kuatiarogue ojoajúva "$1" rehe',
-'whatlinkshere-page'  => 'Kuatiarogue:',
-'linkshere'           => "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
-'whatlinkshere-prev'  => 'mboyvegua $1',
-'whatlinkshere-next'  => 'upeigua $1',
+'whatlinkshere-page' => 'Kuatiarogue:',
+'linkshere' => "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
+'whatlinkshere-prev' => 'mboyvegua $1',
+'whatlinkshere-next' => 'upeigua $1',
 'whatlinkshere-links' => '← joajukuéra',
 
 # Block/unblock
-'blockip'            => 'Ejoko puruhára',
-'ipblocklist'        => 'IP mbohape rysýi imbotypyréva',
+'blockip' => 'Ejoko puruhára',
+'ipblocklist' => 'IP mbohape rysýi imbotypyréva',
 'ipblocklist-submit' => 'Heka',
-'blocklink'          => 'ejoko',
-'contribslink'       => "mba'emoĩmbyre",
-'blocklogtext'       => 'Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.',
+'blocklink' => 'ejoko',
+'contribslink' => "mba'emoĩmbyre",
+'blocklogtext' => 'Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.',
 
 # Move page
-'movearticle'     => 'Guerova kuatiarogue',
-'move-watch'      => 'Toñeñangareko ko tembiapóre',
-'movepagebtn'     => 'Guerova kuatiarogue',
-'revertmove'      => 'embojevy',
+'movearticle' => 'Guerova kuatiarogue',
+'move-watch' => 'Toñeñangareko ko tembiapóre',
+'movepagebtn' => 'Guerova kuatiarogue',
+'revertmove' => 'embojevy',
 'delete_and_move' => "Mboje'o ha guerova",
 
 # Export
@@ -495,55 +494,55 @@ Reomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:
 'import-revision-count' => '$1 revisiones',
 
 # Import log
-'import-logentry-upload-detail'    => '$1 revisiones',
+'import-logentry-upload-detail' => '$1 revisiones',
 'import-logentry-interwiki-detail' => '$1 revisiones desde $2',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'    => 'Che puruhárakuatia',
-'tooltip-pt-mytalk'      => 'Che kuatiarogue myangekõi',
+'tooltip-pt-userpage' => 'Che puruhárakuatia',
+'tooltip-pt-mytalk' => 'Che kuatiarogue myangekõi',
 'tooltip-pt-preferences' => 'Che mbohoryha',
-'tooltip-pt-mycontris'   => "Tysỹi che mba'emoĩmbyre",
-'tooltip-ca-move'        => 'Guerova kuatiarogue',
-'tooltip-p-logo'         => 'Ape',
-'tooltip-n-mainpage'     => 'Eho ijapépe',
+'tooltip-pt-mycontris' => "Tysỹi che mba'emoĩmbyre",
+'tooltip-ca-move' => 'Guerova kuatiarogue',
+'tooltip-p-logo' => 'Ape',
+'tooltip-n-mainpage' => 'Eho ijapépe',
 
 # Spam protection
 'spamprotectiontitle' => 'Filtro de protección contra spam',
-'spamprotectiontext'  => 'La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.',
+'spamprotectiontext' => 'La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.',
 'spamprotectionmatch' => "El siguiente texto es el que activó nuestro filtro ''anti-spam'' (contra la publicidad no solicitada): $1",
-'spambot_username'    => 'Limpieza de spam de MediaWiki',
-'spam_reverting'      => 'Revirtiendo a la última versión que no contenga enlaces a $1',
-'spam_blanking'       => 'Todas las revisiones contienen enlaces a $1, blanqueando',
+'spambot_username' => 'Limpieza de spam de MediaWiki',
+'spam_reverting' => 'Revirtiendo a la última versión que no contenga enlaces a $1',
+'spam_blanking' => 'Todas las revisiones contienen enlaces a $1, blanqueando',
 
 # Media information
 'file-info' => "tamaño de jehai'aty: $1; tipo MIME: $2",
 
 # Special:NewFiles
 'newimages' => "Ta'ãnga pyahu renda",
-'ilsubmit'  => 'Jeheka',
+'ilsubmit' => 'Jeheka',
 
 # 'all' in various places, this might be different for inflected languages
 'namespacesall' => 'opaite',
-'monthsall'     => 'opaite',
+'monthsall' => 'opaite',
 
 # Auto-summaries
 'autosumm-new' => 'Kuatiarogue ipyahúva: $1',
 
 # Watchlist editor
-'watchlistedit-numitems'      => 'Tu lista de seguimiento tiene $1 páginas, excluyendo las páginas de discusión.',
-'watchlistedit-normal-title'  => 'Moambue tapykueho rysýi',
+'watchlistedit-numitems' => 'Tu lista de seguimiento tiene $1 páginas, excluyendo las páginas de discusión.',
+'watchlistedit-normal-title' => 'Moambue tapykueho rysýi',
 'watchlistedit-normal-submit' => "Mboje'o kuatiarogue",
-'watchlistedit-normal-done'   => '$1 páginas han sido borradas de tu lista de seguimiento:',
-'watchlistedit-raw-titles'    => 'Kuatiarogue:',
-'watchlistedit-raw-added'     => 'Se han añadido $1 páginas:',
-'watchlistedit-raw-removed'   => '$1 páginas han sido borradas:',
+'watchlistedit-normal-done' => '$1 páginas han sido borradas de tu lista de seguimiento:',
+'watchlistedit-raw-titles' => 'Kuatiarogue:',
+'watchlistedit-raw-added' => 'Se han añadido $1 páginas:',
+'watchlistedit-raw-removed' => '$1 páginas han sido borradas:',
 
 # Special:Version
 'version' => "Mba'ereko",
 
 # Special:FilePath
-'filepath'        => 'Ruta de archivo',
-'filepath-page'   => 'Archivo:',
+'filepath' => 'Ruta de archivo',
+'filepath-page' => 'Archivo:',
 'filepath-submit' => 'Ruta',
 
 # Special:SpecialPages
index a81a230..ea1c5b5 100644 (file)
  * @author Zylbath
  */
 
+$namespaceNames = array(
+       NS_USER             => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐍃',
+       NS_USER_TALK        => '𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_PROJECT_TALK     => '𐌸𐌹𐍃_$1_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_FILE             => '𐍆𐌴𐌹𐌻𐌰',
+       NS_FILE_TALK        => '𐍆𐌴𐌹𐌻𐌹𐌽𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_TEMPLATE         => '𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃',
+       NS_TEMPLATE_TALK    => '𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐌰𐌹𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_HELP             => '𐌷𐌹𐌻𐍀𐌰',
+       NS_HELP_TALK        => '𐌷𐌹𐌻𐍀𐍉𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+       NS_CATEGORY         => '𐌷𐌰𐌽𐍃𐌰',
+       NS_CATEGORY_TALK    => '𐌷𐌰𐌽𐍃𐍉𐍃_𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰',
+);
+
+$specialPageAliases = array(
+       'Allpages'                  => array( '𐌰𐌻𐌻𐍃𐍃𐌴𐌹𐌳𐍉𐌽𐍃' ),
+       'Recentchanges'             => array( '𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃' ),
+);
+
 $messages = array(
 'underline-always' => 'Sinteino',
 'underline-never'  => 'Niu',
index 868dd32..758f19e 100644 (file)
@@ -413,7 +413,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Νῦν γὰρ ἀποσυνδεδεμένος εἰ.'''
 
-Ἔξεστί σοι χρῆσθαι τῷ {{SITENAME}} ἀνωνύμως, ἢ ἔξεστί σοι [[Special:UserLogin|συνδεῖσθαι πάλιν]] ὡς ὁ αὐτὸς ἢ ὡς ἄλλος χρώμενος.
+Ἔξεστί σοι χρῆσθαι τῷ {{SITENAME}} ἀνωνύμως, ἢ ἔξεστί σοι <span class='plainlinks'>[$1 συνδεῖσθαι πάλιν]</span> ὡς ὁ αὐτὸς ἢ ὡς ἄλλος χρώμενος.
 Δέλτοι τινὲς δέ, ἐνδεχομένως, δειχθήσονται ὡς ἂν ἀκμὴν συνδεδεμένος ᾖς, μέχρι ὅτε καθαίρῃς τὴν λανθάνουσαν μνήμην τοῦ προγράμματος πλοηγήσεώς σου.",
 'welcomecreation' => '== Ὡς εὖ παρέστης, $1! ==
 
@@ -823,8 +823,6 @@ $1",
 'search-interwiki-caption' => 'Ἀδελφὰ σχέδια',
 'search-interwiki-default' => '$1 ἀποτελέσματα:',
 'search-interwiki-more' => '(πλείω)',
-'search-mwsuggest-enabled' => "μεθ'ὑποδείξεων",
-'search-mwsuggest-disabled' => 'οὐκ αἵτινες ὑποδείξεις',
 'search-relatedarticle' => 'Σχετικά',
 'mwsuggest-disable' => 'Μὴ ἐνεργαὶ αἱ ὑποδείξεις AJAX',
 'searcheverything-enable' => 'Ζήτησις ἐν πᾶσι τοῖς ὀνοματοχώροις',
@@ -2717,4 +2715,8 @@ $5
 # Feedback
 'feedback-cancel' => 'Ἀκυροῦν',
 
+# Search suggestions
+'searchsuggest-search' => 'Ζητεῖν',
+'searchsuggest-containing' => 'περιέχον...',
+
 );
index 3644766..2dac933 100644 (file)
@@ -127,7 +127,7 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'displaytitle'            => array( '1', 'SYTETITEL', 'SEITENTITEL', 'DISPLAYTITLE' ),
+       'displaytitle'              => array( '1', 'SYTETITEL', 'SEITENTITEL', 'DISPLAYTITLE' ),
 );
 
 $linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
@@ -140,7 +140,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände',
 'tog-newpageshidepatrolled' => 'Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke',
 'tog-extendwatchlist' => 'Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte',
-'tog-usenewrc' => 'Erwytereti «letschti Änderige» (brucht JavaScript)',
+'tog-usenewrc' => 'Sytebezogeni Gruppierig bi dr «letschte Änderige» un uf dr Beobachtigslischte  (brucht JavaScript)',
 'tog-numberheadings' => 'Überschrifte outomatisch numeriere',
 'tog-showtoolbar' => 'Editier-Wärchzüüg aazeige',
 'tog-editondblclick' => 'Syte ändere mit Doppelklick i d Syte (JavaScript)',
@@ -148,17 +148,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick (Javascript)',
 'tog-showtoc' => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte',
 'tog-rememberpassword' => 'Mit däm Browser duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
-'tog-watchcreations' => 'Sälber gmachti Sytene beobachte',
-'tog-watchdefault' => 'Vo dir nöi gmachti oder verändereti Syte beobachte',
-'tog-watchmoves' => 'Sälber verschobeni Sytene beobachte',
-'tog-watchdeletion' => 'Sälber glöschti Sytene beobachte',
+'tog-watchcreations' => 'Sälber gmachti Sytene un uffegladeni Dateie automatisch  beobachte',
+'tog-watchdefault' => 'Sälber gändereti Syte un Dateie automatisch beobachte',
+'tog-watchmoves' => 'Sälber verschobeni Sytene un Dateie automatisch beobachte',
+'tog-watchdeletion' => 'Sälber gleschti Sytene un Dateie automatisch beobachte',
 'tog-minordefault' => 'Alli dyni Änderigen als «chlyni Änderige» markiere',
 'tog-previewontop' => 'Vorschou vor em Editierfänschter aazeige',
 'tog-previewonfirst' => 'Vorschou aazeige bim erschten Editiere',
 'tog-nocache' => 'Syte-Cache vum Browser deaktiviere',
-'tog-enotifwatchlistpages' => 'Benachrichtigungsmails by Änderigen a Wiki-Syte',
+'tog-enotifwatchlistpages' => 'Schick mer e Mail, wänn e Syte oder e Datei gänderet wird, wun i beobachte due',
 'tog-enotifusertalkpages' => 'Benachrichtigungsmails bi Änderigen a dyne Benutzersyte',
-'tog-enotifminoredits' => 'Benachrichtigungsmail ou bi chlyne Sytenänderige',
+'tog-enotifminoredits' => 'Au bi chlaine Änderige an Syte oder Dateie ne Mail schicke',
 'tog-enotifrevealaddr' => 'Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt',
 'tog-shownumberswatching' => 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
 'tog-oldsig' => 'Vorschau vu dr Unterschrift:',
@@ -291,7 +291,7 @@ $messages = array(
 'vector-action-protect' => 'Schitze',
 'vector-action-undelete' => 'Widerhärstelle',
 'vector-action-unprotect' => 'Syteschutz ändere',
-'vector-simplesearch-preference' => 'Erwytereti Suechvorschleg aktiviere (nume Vector)',
+'vector-simplesearch-preference' => 'Vereifachti Suechvorschleg aktiviere (nume Vector)',
 'vector-view-create' => 'Aalege',
 'vector-view-edit' => 'Bearbeite',
 'vector-view-history' => 'Versionsgschicht',
@@ -398,6 +398,10 @@ Di maximal Wartezyt fir e Lock isch umme',
 'youhavenewmessages' => 'Du hesch $1 ($2).',
 'newmessageslink' => 'nöji Nachrichte',
 'newmessagesdifflink' => 'Unterschid',
+'youhavenewmessagesfromusers' => 'Du hesch $1 vu {{PLURAL:$3|eme andere Benutzer|$3 Benutzer}} ($2).',
+'youhavenewmessagesmanyusers' => 'Du hesch $1 vu vil Benutzer ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|e neji Nochricht|neji Nochrichte}}',
+'newmessagesdifflinkplural' => 'letschti {{PLURAL:$1|Änderig|Änderige}}',
 'youhavenewmessagesmulti' => 'Si hen neui Nochrichte: $1',
 'editsection' => 'ändere',
 'editold' => 'Ändre',
@@ -452,9 +456,9 @@ Alli verfiegbare Spezialsyte sin in dr [[Special:SpecialPages|Lischt vu Spezials
 'dberrortext' => 'S isch e Datebankfähler ufträtte.
 Dr Grund cha ne e Programmierfähler syy.
 Di letscht Datebankabfrog isch
-<blockquote><tt>$1</tt></blockquote>
-us dr Funktion „<tt>$2</tt>“ gsi.
-D Datebank het dr Fähler „<tt>$3: $4</tt>“ gmäldet.',
+<blockquote><code>$1</code></blockquote>
+us dr Funktion „<code>$2</code>“ gsi.
+D Datebank het dr Fähler „<samp>$3: $4</samp>“ gmäldet.',
 'dberrortextcl' => 'S het e Syntaxfähler gee in dr Abfrog vu dr Datebank.
 Di letscht Datebankabfrog isch
 „$1“
@@ -489,6 +493,7 @@ Wänn s des nit isch, hesch villicht e Fähler in dr Software gfunde. Bitte mäl
 'badarticleerror' => 'D Aktion konn uf denne Artikel nit ongwendet werre.',
 'cannotdelete' => 'D Syte oder d Datei „$1“ cha nit glescht wäre. Si isch villicht scho vu eber anderem glescht wore.',
 'cannotdelete-title' => 'Syte „$1“ cha nit glescht wäre',
+'delete-hook-aborted' => 'D Leschig isch ohni Erchlärung dur e Schnittstell abbroche wore.',
 'badtitle' => 'Ugültiger Titel',
 'badtitletext' => 'Dr Titel vu dr agforderte Syte isch nit giltig gsi, leer, oder e nit giltig Sprochgleich vun eme andre Wiki.',
 'perfcached' => 'Die Informatione chemme us em Zwischespycher un sin derwyl villicht nit aktuäll. Maximal {{PLURAL:$1|ei Ergebnis isch|$1 Ergebnis sin}} im Cache verfiegbar.',
@@ -505,7 +510,7 @@ Abfrog: $2',
 'viewsourcetext' => 'Quelltext vo dere Syte:',
 'viewyourtext' => "Du chasch dr Quälltext vu '''Dyre Bearbeitig''' vu däre Syte aaluege un kopiere:",
 'protectedinterface' => 'In däre Syte het s Text fir s Sproch-Interface vu dr Software un si isch gsperrt, zum Missbruch z verhindre.',
-'editinginterface' => "'''Obacht:''' Du bisch e Syten am Verändere, wu zum User.Interface ghert. Wänn Du die Syte veränderesch, no änderet sich s User-Interface au fir di andere Benutzer. Fir Ibersetzige lueg bitte, eb Du doodefir s [//translatewiki.net/wiki/Main_Page?setlang=gsw Translatewiki] witt bruuche, s MediaWiki-Lokalisierigsprojäkt.",
+'editinginterface' => "'''Obacht:''' Du bisch e Syten am Verändere, wu zum User.Interface ghert. Wänn Du die Syte veränderesch, no änderet sich s User-Interface au fir di andere Benutzer vu däm Wiki. Fir Ibersetzige lueg bitte, eb Du doodefir s [//translatewiki.net/wiki/Main_Page?setlang=gsw Translatewiki] witt bruuche, s MediaWiki-Lokalisierigsprojäkt.",
 'sqlhidden' => '(SQL-Abfrog verschteckt)',
 'cascadeprotected' => 'Die Syte isch fir s Bearbeite gsperrt. Si isch yybunde in {{PLURAL:$1|die Syte, wu do chunnt|die Syte, wu do chemme}} , wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:
 $2',
@@ -520,6 +525,8 @@ Die Sperri isch dur [[User:$1|$1]] yygrichtet wore mit dr Begrindig ''„$2“''
 Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3“.',
 'invalidtitle-knownnamespace' => 'Nit-gültige Titel mit Namensruum „$2“ un Text „$3“',
 'invalidtitle-unknownnamespace' => 'Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“',
+'exception-nologin' => 'Nit aagmäldet',
+'exception-nologin-text' => 'Fir die Syte oder Aktion muesch aagmäldet syy.',
 
 # Virus scanner
 'virus-badscanner' => "Fählerhafti Konfiguration: Virescanner, wu nid bekannt isch: ''$1''",
@@ -529,7 +536,7 @@ Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3
 # Login and logout pages
 'logouttext' => "'''Du bisch jetz abgmäldet.'''
 
-Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di [[Special:UserLogin|wider aamälde]] mit em glyche oder eme andere Benutzername.
+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!==
@@ -541,9 +548,10 @@ Vergiss nid, dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] aazpasse.',
 'remembermypassword' => 'Uf däm Computer duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
 'securelogin-stick-https' => 'Noch em Aamälde mit HTTPS verbunde blybe',
 'yourdomainname' => 'Dyyni Domäne',
+'password-change-forbidden' => 'Du chasch uf däm Wiki kei Passwerter ändere.',
 'externaldberror' => 'Entwäder s lit e Fähler bi dr externe Authentifizierung vor, oder Du derfsch Dyy extern Benutzerkonto nid aktualisiere.',
 'login' => 'Aamälde',
-'nav-login-createaccount' => 'Aamälde / Konto aaleege',
+'nav-login-createaccount' => 'Aamälde / Konto aalege',
 'loginprompt' => '<small>Für di bir {{SITENAME}} aazmälde, muesch Cookies erloube!</small>',
 'userlogin' => 'Aamälde/Konto aalege',
 'userloginnocreate' => 'Aamälde',
@@ -711,7 +719,7 @@ Temporär Passwort: $2',
 'hr_tip' => 'Horizontali Linie (sparsam verwende)',
 
 # Edit pages
-'summary' => 'Zämefassig:',
+'summary' => 'Zämmefassig:',
 'subject' => 'Beträff:',
 'minoredit' => 'Numen es birebitzeli gänderet',
 'watchthis' => 'Dä Artikel beobachte',
@@ -778,17 +786,20 @@ Wänn do nid hesch welle aane goh, no druck in Dyynem Browser uf '''Zruck'''.",
 oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Syte bearbeite]</span>.',
 'noarticletext-nopermission' => 'In däre Syte het s zur Zyt no kei Text.
 Du chasch dää Titel uf andre Syte [[Special:Search/{{PAGENAME}}|sueche]]
-oder <span class="plainlinks">in dr zuegherige [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbiecher sueche].</span>',
+oder <span class="plainlinks">in dr zuegherige [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbiecher sueche].</span> Du derfsch aber die Syte nit aalege.',
+'missing-revision' => 'D Version $1 vu dr Syte mit Name „{{PAGENAME}}“ git s nit.
+
+Dää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.
+Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.',
 'userpage-userdoesnotexist' => 'S Benutzerkonto „<nowiki>$1</nowiki>“ git s nit. Bitte prief, eb Du die Syte wirkli wit aalege/bearbeite.',
 'userpage-userdoesnotexist-view' => 'S Benutzerkonto „$1“ isch nit registriert.',
 'blocked-notice-logextract' => 'Dää Benutzer isch zur Zyt gsperrt.
 As Information chunnt do ne aktuälle Uuszug us em Benutzersperr-Logbuech:',
-'clearyourcache' => "'''Hinweis:''' Noch em Spycheremuesch no dr Browser-Zwischespycher lääre go d Änderige sää.
+'clearyourcache' => "'''Hiiwys:''' Noch em Spycheremuesch no dr Browser-Zwischespycher lääre go d Änderige sää.
 * '''Firefox/ Safari:''' ''Umschaltig'' drucken un glychzytig ''Aktualisiere'' aaklicken oder entwäder ''Strg+F5'' oder ''Strg+R'' (''Befehlstaste-R'' uf em Mac) drucke
 * '''Google Chrome:''' ''Umschaltig+Strg+R'' (''Befählstaschte-R'' uf em Mac) drucke
 * '''Internet Explorer:''' ''Strg+F5'' drucken oder ''Strg'' drucken un glychzytig ''Aktualisiere'' aaklicke
-* '''Opera:''' ''Extra → Internetspure lesche … → Individuäll Uuswahl → Dr komplett Cache lesche''
-* '''Konqueror:''' ''Aktualisiere'' aaklicken oder ''F5'' drucke",
+* '''Opera:''' ''Extra → Internetspure lesche … → Individuäll Uuswahl → Dr komplett Cache lesche''",
 'usercssyoucanpreview' => "'''Tipp:''' Nimm dr „{{int:showpreview}}”-Chnopf, zum Dyy nej CSS vor em Spichere z teschte.",
 'userjsyoucanpreview' => "'''Tipp:''' „Nimm dr {{int:showpreview}}”-Chnopf, zum Dyy nej JS vor em Spichere z teschte.",
 'usercsspreview' => "== Vorschau vu Dyynem Benutzer-CSS. ==
@@ -904,6 +915,7 @@ S {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.',
 'expansion-depth-exceeded-warning' => 'Die Syte het d Expansionsdiefi überschritte.',
 'parser-unstrip-loop-warning' => 'Zirkelbezug festgstellt',
 'parser-unstrip-recursion-limit' => 'Rekursionsgränz bim Ufflöse überschritte ($1)',
+'converter-manual-rule-error' => 'Bi dr manuälle Sprochkonvertierigsregle isch e Fähler entdeckt wore.',
 
 # "Undo" feature
 'undo-success' => 'Zum die Änderig ruckgängig z mache, kontrollier bitte d Bearbeitig in dr Verglichsaasicht un druck derno uf „Syte spichere“.',
@@ -1036,7 +1048,8 @@ Bitte prief d Logbiecher.',
 'revdelete-only-restricted' => 'Fähler bim Uusblände vum Byytrag vum $2, $1: Du chasch kei Yyträg vor Adminischtratore unterdrucke, ohni ass Du au eini vu dr andere Unterdruckigsoptione uusgwehlt hesch.',
 'revdelete-reason-dropdown' => '*Gängigi Leschgrind
 **Urheberrächtsverletzig
-**Falschi Information iber Persone',
+**Falschi Information iber Persone
+**Informatione, wu villicht anderi belaidige',
 'revdelete-otherreason' => 'Andere/Zuesätzlige Grund:',
 'revdelete-reasonotherlist' => 'Andere Grund',
 'revdelete-edit-reasonlist' => 'Leschgrind bearbeite',
@@ -1087,6 +1100,10 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.',
 'editundo' => 'rückgängig',
 'diff-multi' => '({{PLURAL:$1|Ei Version|$1 Versione}} vu {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt, wird|wu derzwische lige, wäre}} nit aazeigt)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ei Version|$1 Versione}} vu meh {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt un nit aazeigt wird|wu derzwische lige un nit aazeigt wäre}})',
+'difference-missing-revision' => '{{PLURAL:$2|Ei Version|$2 Versione}} vui däre Unterschidsaazeig ($1) {{PLURAL:$2|isch|sin}} nit gfunde wore.
+
+Dää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.
+Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.',
 
 # Search results
 'searchresults' => 'Suech-Ergäbnis',
@@ -1129,8 +1146,6 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.',
 'search-interwiki-caption' => 'Schweschterprojäkt',
 'search-interwiki-default' => '$1 Ergebniss:',
 'search-interwiki-more' => '(meh)',
-'search-mwsuggest-enabled' => 'mit Vorschleg',
-'search-mwsuggest-disabled' => 'kei Vorschleg',
 'search-relatedarticle' => 'Verwandti',
 'mwsuggest-disable' => 'Vorschleg per Ajax deaktiviere',
 'searcheverything-enable' => 'In alle Namensryym sueche',
@@ -1350,6 +1365,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'right-writeapi' => 'D writeAPI verwände',
 'right-delete' => 'Syte lesche',
 'right-bigdelete' => 'Syte lesche mit grosse Versionsgschichte',
+'right-deletelogentry' => 'Einzelni Logbuech-Yytreg lesche un widerhärstelle',
 'right-deleterevision' => 'Lesche un Widerherstelle vu einzelne Versione',
 'right-deletedhistory' => 'Gleschti Versione in der Versionsgschicht aaluege, ohni dr zuegherig Text',
 'right-deletedtext' => 'Gleschti Text un Versionsunterschid zwische gleschte Versionen aaluege',
@@ -1363,7 +1379,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'right-ipblock-exempt' => 'Uusnahm vu IP-Sperrine, Autoblock und Rangesperre',
 'right-proxyunbannable' => 'Uusnahm vu automatische Proxysperrine',
 'right-unblockself' => 'Sich sälber entsperre',
-'right-protect' => 'Syteschutzstatus ändere',
+'right-protect' => 'Syteschutzstatus änderen un gschitzti Syte bearbeite',
 'right-editprotected' => 'Gschitzti Syte bearbeite (ohni Kaskadeschutz)',
 'right-editinterface' => 'Benutzerinterface bearbeite',
 'right-editusercssjs' => 'Bearbeite vu CSS- und JS-Dateie vu andere Benutzer',
@@ -1635,7 +1651,7 @@ Wänn s Problem alno uftritt, informier e [[Special:ListUsers/sysop|Ammann]].',
 'backend-fail-internal' => 'Im Spycher-Backend „$1“ isch e nit bekannte Fähler ufträtte.',
 'backend-fail-contenttype' => 'Dr Inhaltstyp vu dr Datei, wu im Pfad „$1“ gspycheret soll wäre, het nit chenne bstimmt wäre.',
 'backend-fail-batchsize' => 'E Bygiverarbeitigsdatei, wu s {{PLURAL:$1|ei Operation|$1 Operatione}} din het, isch an s Spycher-Backend gschickt wore. D Gränz lyt aber bi {{PLURAL:$2|eire Operation|$2 Operatione}}.',
-'backend-fail-usable' => 'D Datei $1 het nit chönne gspyycheret werde, entweder wyl kei Verzeichniss vorhande isch oder wyl kei Berächtigung hesch.',
+'backend-fail-usable' => 'D Datei „$1“ het nit chönne abgruefe oder gspyycheret werde, entweder wyl kei Verzeichniss vorhande isch oder wyl kei Berächtigung hesch.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'S het kei Verbindig chenne härgstellt würe zue dr Journaldatebank vum Spycher-Backend „$1“.',
@@ -1650,6 +1666,7 @@ Wänn s Problem alno uftritt, informier e [[Special:ListUsers/sysop|Ammann]].',
 'lockmanager-fail-releaselock' => 'D Sperri fir „$1“ het nit chenne frejgee wäre.',
 'lockmanager-fail-db-bucket' => 'Mit em Sammelabruef $1 hän nit gnue Verbindige zue Sperrdatebanke chenne härgstellt wäre.',
 'lockmanager-fail-db-release' => 'D Sperrine uf dr Datebank $1 hän nit chenne frejgee wäre.',
+'lockmanager-fail-svr-acquire' => 'D Sperrine uf em Server $1 hän nit chenne abgruefe wäre.',
 'lockmanager-fail-svr-release' => 'D Sperrine uf em Server $1 hän nit chenne frejgee wäre.',
 
 # ZipDirectoryReader
@@ -1763,6 +1780,7 @@ Villicht witt d Bschryybig uf dr dertige [$2 Dateibschryybigssyte] bearbeite.',
 'uploadnewversion-linktext' => 'E nöui Version vo dere Datei ufelade',
 'shared-repo-from' => 'vu $1',
 'shared-repo' => 'eme gmeinsame Repositorium',
+'upload-disallowed-here' => 'Leider chasch des Bild nit iberschryybe.',
 
 # File reversion
 'filerevert' => 'Zrucksetze vu „$1“',
@@ -1843,7 +1861,9 @@ Iberprief anderi Link zue dr Vorlage, voreb Du die leschesch.',
 
 'disambiguations' => 'Syte, wu uf Begriffsklärigssyte verlinke',
 'disambiguationspage' => 'Template:Begriffsklärig',
-'disambiguations-text' => 'Die Syte verwyyse uf e Begriffsklärigs-Syte. Sie sotte aber besser uf d Syte verwyyse, wu eigetli gmeint sin.<br />E Syte wird as Begriffsklärigs-Syte behandlet, wänn [[MediaWiki:Disambiguationspage]] uf si verwyyst.<br />Link us Namensryym wäre do nit ufglischtet.',
+'disambiguations-text' => 'Die Syte verwyyse uf e Begriffsklärigs-Syte. Sie sotte aber besser uf d Syte verwyyse, wu eigetli gmeint sin.
+
+E Syte wird as Begriffsklärigs-Syte behandlet, wänn [[MediaWiki:Disambiguationspage]] uf si verwyyst.',
 
 'doubleredirects' => 'Doppleti Wyterleitige (Redirects)',
 'doubleredirectstext' => 'Die Lischt zeigt Wyterleitige, wu uf anderi Wyterleitige verwyyse.
@@ -1868,6 +1888,7 @@ In jedere Zyylete het s Link zue dr erschte un dr zwote Wyterleitig un s Ziil vu
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|Kategori|Kategorie}}',
+'ninterwikis' => '{{PLURAL:$1|Ei Interwikilink|$1 Interwikilink}}',
 'nlinks' => '$1 {{PLURAL:$1|Link|Links}}',
 'nmembers' => '$1 {{PLURAL:$1|Syte|Sytene}}',
 'nrevisions' => '$1 {{PLURAL:$1|Revision|Revisione}}',
@@ -1896,6 +1917,7 @@ In jedere Zyylete het s Link zue dr erschte un dr zwote Wyterleitig un s Ziil vu
 'mostlinkedtemplates' => 'Am meischten yybouti Vorlage',
 'mostcategories' => 'Sytene mit de meischte Kategorië',
 'mostimages' => 'Am meischte verlinkti Dateie',
+'mostinterwikis' => 'Syte mit de meischte Interwikilink',
 'mostrevisions' => 'Syte mit de meischte Bearbeitige',
 'prefixindex' => 'Alli Syte (mit Präfix)',
 'prefixindex-namespace' => 'Alli Syte mit Präfix (Nameruum $1)',
@@ -1949,6 +1971,7 @@ Bitte gib Acht, ass anderi Netzsyte die Datei mit ere diräkte URL chenne verlin
 D Aazeig cha dur d Uuswahl vun eme Protokoll, eme Benutzername oder eme Sytename yygschränkt wäre (Acht gee uf d Gross- un Chleischrybig).',
 'logempty' => 'Kei Yyträg gfunde, wu passe.',
 'log-title-wildcard' => 'Titel fangt aa mit',
+'showhideselectedlogentries' => 'Uusgwehlti Logbuechyytreg aazeige/verstecke',
 
 # Special:AllPages
 'allpages' => 'alli Sytene',
@@ -2038,6 +2061,8 @@ Zuesätzligi Informatione iber einzelni Rächt git s [[{{MediaWiki:Listgrouprigh
 'mailnologin' => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä',
 'mailnologintext' => 'Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.',
 'emailuser' => 'Es Mail schrybe',
+'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.',
@@ -2179,6 +2204,8 @@ Im $2 het s e Lischt vu dr letschte Leschige.',
 'rollback' => 'Zrucksetze vu dr Änderige',
 'rollback_short' => 'Zrucksetze',
 'rollbacklink' => 'Zrüggsetze',
+'rollbacklinkcount' => '{{PLURAL:$1|Ei Version|$1 Versione}} zrucksetze',
+'rollbacklinkcount-morethan' => 'Meh wie {{PLURAL:$1|ei Version|$1 Versione}} zrucksetze',
 'rollbackfailed' => 'S Zrucksetze het nit funktioniert',
 'cantrollback' => 'D Änderig cha nit zruckgsetzt wäre, wel s keini friejere Autore git.',
 'alreadyrolled' => 'Cha d Änderig uf [[:$1]] wu vu [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) gmacht wore sin, zruckneh, wel e andere Benutzer in dr Zwischenzyt s scho zruckgsetzt het oder suscht ebis an däre Syte gänderet het.
@@ -2645,6 +2672,7 @@ Alli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] pr
 'import-interwiki-templates' => 'Mit allene Vorlage',
 'import-interwiki-submit' => 'Import',
 'import-interwiki-namespace' => 'Ziilnamensruum:',
+'import-interwiki-rootpage' => 'Ziilstammsyte (optional):',
 'import-upload-filename' => 'Dateiname:',
 'import-comment' => 'Grund:',
 'importtext' => 'Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.
@@ -2677,6 +2705,9 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'import-error-interwiki' => 'D Syte „$1“ isch nit importiert wore, wel dr Name vun ere fir externi Link (Interwiki) reserviert isch.',
 'import-error-special' => 'D Syte „$1“ isch nit importiert wore, wel si zuen eme bsundere Namensruum ghert, wu kei Syte megli sin.',
 'import-error-invalid' => 'Syte „$1“ isch nit importiert wore, wel dr Name vun ere nit giltig isch.',
+'import-options-wrong' => 'Falschi {{PLURAL:$2|Option|Optione}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Dää Stammsytename isch nit giltig.',
+'import-rootpage-nosubpage' => 'Im Namensruum „$1“ vu dr Stammsyte sin kei Untersyte erlaubt.',
 
 # Import log
 'importlogpage' => 'Import-Logbuech',
@@ -2688,7 +2719,6 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-Tescht',
-'javascripttest-disabled' => 'Die Funktion isch in däm Wiki nit aktiviert wore.',
 'javascripttest-title' => '$1-Tescht wäre durgfiert',
 'javascripttest-pagetext-noframework' => 'Die Syte isch reserviert fir JavaSkript-Tescht.',
 'javascripttest-pagetext-unknownframework' => 'Nit bekannt Framework „$1“.',
@@ -2788,14 +2818,38 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 'spambot_username' => 'MediaWiki Spam-Syyferig',
 'spam_reverting' => 'Letschti Version ohni Links zue $1 widerhärgstellt.',
 'spam_blanking' => 'In allene Versione het s Links zue $1 gha, sufer gmacht.',
+'spam_deleting' => 'Alli Versione mit eme Link zue $1 sin glescht woret.',
 
 # Info page
 'pageinfo-title' => 'Informatione zue „$1“',
-'pageinfo-header-edits' => 'Bearbeitunge',
+'pageinfo-header-basic' => 'Basisinformatione',
+'pageinfo-header-edits' => 'Bearbeitige',
+'pageinfo-header-restrictions' => 'Syteschutz',
+'pageinfo-header-properties' => 'Syteneigeschafte',
+'pageinfo-display-title' => 'Aazeigtitel',
+'pageinfo-default-sort' => 'Standardsortierkriterium',
+'pageinfo-length' => 'Sytelengi (in Byte)',
+'pageinfo-article-id' => 'Syten-ID',
+'pageinfo-robot-policy' => 'Suechmaschinestatus',
+'pageinfo-robot-index' => 'Indizierbar',
+'pageinfo-robot-noindex' => 'Nit indizierbar',
 'pageinfo-views' => 'Aazahl Sytenufruef',
 'pageinfo-watchers' => 'Aazahl vu Beobachter',
+'pageinfo-redirects-name' => 'Wyterleitige zue däre Syte',
+'pageinfo-subpages-name' => 'Untersyte vu däre Syte',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|Wyterleitig|Wyterleitige}}; $3 {{PLURAL:$3|anderi Syte}})',
+'pageinfo-firstuser' => 'Aagleit vu',
+'pageinfo-firsttime' => 'Aagleit am',
+'pageinfo-lastuser' => 'Letschte Bearbeiter',
+'pageinfo-lasttime' => 'Datum vu dr letschte Bearbeitig',
 'pageinfo-edits' => 'Aazahl Bearbeitige',
 'pageinfo-authors' => 'Aazahl vu unterschidlige Autore',
+'pageinfo-recent-edits' => 'Aazahl vu dr letschte Bearbeitige (innerhalb vu $1)',
+'pageinfo-recent-authors' => 'Aazahl vu unterschidlige Autore',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magischs Wort|Magischi Werter}} ($1)',
+'pageinfo-hidden-categories' => 'Versteckti {{PLURAL:$1|Kategori|Kategorie}} ($1)',
+'pageinfo-templates' => 'Yybundeni {{PLURAL:$1|Vorlag|Vorlage}} ($1)',
+'pageinfo-toolboxlink' => 'Informatione zue dr Syte',
 
 # Patrolling
 'markaspatrolleddiff' => 'Als patrulyrt markyre',
@@ -2838,6 +2892,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 Pixel, Dateigreßi: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Syte| Syte}}',
 'file-nohires' => 'Kei höcheri Uflösig verfüegbar.',
 'svg-long-desc' => 'SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3',
+'svg-long-desc-animated' => 'Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3',
 'show-big-image' => 'Originalgrößi',
 'show-big-image-preview' => 'Greßi vu däre Vorschau: $1.',
 'show-big-image-other' => 'Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.',
@@ -2847,6 +2902,8 @@ $1',
 'file-info-png-looped' => 'Ändlosschlupf',
 'file-info-png-repeat' => 'het $1 {{PLURAL:$1|Mol|Mol}} gspilt',
 'file-info-png-frames' => '$1 {{PLURAL:$1|Ramme|Ramme}}',
+'file-no-thumb-animation' => "'''Hiiwyys: Wäge tächnische Bschränkige wäre Vorschaubilder vu däre Datei nit animiert.'''",
+'file-no-thumb-animation-gif' => "'''Hiiwyys: Wäge tächnische Bschränkige wäre Vorschaubilder vu hochuufgleste GIF-Dateien wie däre nit animiert.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallery vo noie Bilder',
@@ -3362,6 +3419,7 @@ Dää Bstetigungscode isch giltig bis am $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-Yybindig isch deaktiviert]',
 'scarytranscludefailed' => '[Vorlage-Yybindig fir $1 isch gescheitert]',
+'scarytranscludefailed-httpstatus' => '[Vorlagenabruef fählgschlaa fir $1: HTTP  $2]',
 'scarytranscludetoolong' => '[URL isch z lang]',
 
 # Delete conflict
@@ -3506,7 +3564,7 @@ Di aagfrogt Datei wird diräkt dargstellt bzw. mit dr verchnipfte Aawändig gsta
 * <span class="mw-specialpagecached">Gecachti Spezialsyte (dr Inhalt ist villicht veraltet.)</span>',
 'specialpages-group-maintenance' => 'Wartigslischte',
 'specialpages-group-other' => 'Andri Spezialsyte',
-'specialpages-group-login' => 'Aamälde',
+'specialpages-group-login' => 'Aamälde/Konto aalege',
 'specialpages-group-changes' => 'D letschte Änderige un Logbüecher',
 'specialpages-group-media' => 'Medie',
 'specialpages-group-users' => 'Benutzer un Rächt',
@@ -3629,6 +3687,10 @@ Sunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit D
 'feedback-bugcheck' => 'Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.',
 'feedback-bugnew' => 'Ich haa s iberprieft. Dr nej Fähler mälde.',
 
+# Search suggestions
+'searchsuggest-search' => 'Suechi',
+'searchsuggest-containing' => 'din het s …',
+
 # API errors
 'api-error-badaccess-groups' => 'Du derfsch keini Dateie in des Wiki uffelade.',
 'api-error-badtoken' => 'Intärne Fähler: Dr Token isch fählerhaft.',
@@ -3640,10 +3702,12 @@ Sunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit D
 'api-error-empty-file' => 'D Datei, wu Du uffeglade hesch, isch läär.',
 'api-error-emptypage' => 'S isch nit erlaubt, neji lääri Syte aazlege.',
 'api-error-fetchfileerror' => 'Intärne Fähler: Bim Abruefe vu dr Datei isch e Fähler ufträtte.',
+'api-error-fileexists-forbidden' => 'S git scho ne Datei mit Name „$1“, si cha nit iberschryybe wäre.',
+'api-error-fileexists-shared-forbidden' => 'S git scho ne Datei mit Name „$1“ im gmeinsame Dateirepositorium, si cha wäge däm nit iberschrybe wäre.',
 'api-error-file-too-large' => 'D Datei, wu Du ibertrait hesch, isch z groß.',
 'api-error-filename-tooshort' => 'Dr Dateiname isch z churz.',
 'api-error-filetype-banned' => 'Dää Dateityp isch gsperrt.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|isch e Dateiformat, wu nit erlaubt isch|sin Dateitype, wu nit erlaubt sin}}.  Erlaubt {{PLURAL:$3|isch s Dateiformat|sin d Dateiformat}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|isch e Dateiformat, wu nit erlaubt isch|sin Dateitype, wu nit erlaubt sin}}. Erlaubt {{PLURAL:$3|isch s Dateiformat|sin d Dateiformat}} $2.',
 'api-error-filetype-missing' => 'D Datei het kei Dateinameerwyterig.',
 'api-error-hookaborted' => 'D Änderig, wu Du versuecht hesch, isch wäg eme Erwyterigs-Hooks abbroche wore.',
 'api-error-http' => 'Intärne Fähler: S het kei Verbindig zum Server chenne härgstellt wäre.',
index ab1b0be..e416c8c 100644 (file)
@@ -229,7 +229,7 @@ $messages = array(
 'july' => 'જુલાઇ',
 'august' => 'ઓગસ્ટ',
 'september' => 'સપ્ટેમ્બર',
-'october' => 'ઓકટોબર',
+'october' => 'àª\93àª\95à«\8dàª\9fà«\8bબર',
 'november' => 'નવેમ્બર',
 'december' => 'ડિસેમ્બર',
 'january-gen' => 'જાન્યુઆરી',
@@ -241,7 +241,7 @@ $messages = array(
 'july-gen' => 'જુલાઇ',
 'august-gen' => 'ઓગસ્ટ',
 'september-gen' => 'સપ્ટેમ્બર',
-'october-gen' => 'ઓકટોબર',
+'october-gen' => 'àª\93àª\95à«\8dàª\9fà«\8bબર',
 'november-gen' => 'નવેમ્બર',
 'december-gen' => 'ડિસેમ્બર',
 'jan' => 'જાન્યુ',
@@ -473,11 +473,11 @@ $1',
 'error' => 'ત્રુટિ',
 'databaseerror' => 'ડેટાબેઝ ત્રુટિ',
 'dberrortext' => 'માહિતીસંચ ને અપાયેલ શોધના સૂત્રમાં ચૂક છે.
-àª\86 àª¸à«\8bફà«\8dàª\9fવà«\87રમાàª\82 àª®àª¾àª\82 àª¨àª¾àª¨à«\80  àª¤à«\8dરà«\81àª\9fિ (bug) àª¨à«\87 àª²à«\80ધà«\87 àª¹à«\8bàª\87 àª¶àª\95à«\87.
-માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
-<blockquote><tt>$1</tt></blockquote>
-આ ફંકશન થકી  "<tt>$2</tt>".
-માહિતà«\80સàª\82àª\9aà«\87 àª\86પà«\87લ àª\9aà«\82àª\95નà«\81àª\82 àªµàª¿àªµàª°àª£ "<tt>$3: $4</tt>".',
+આ સોફ્ટવેરમાં નાની  ત્રુટિ (bug) ને લીધે હોઇ શકે.
+માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
+<blockquote><code>$1</code></blockquote>
+આ ફંકશન થકી  "<code>$2</code>".
+માહિતà«\80સàª\82àª\9aયà«\87 àª\86પà«\87લ àª\9aà«\82àª\95નà«\81àª\82 àªµàª¿àªµàª°àª£ "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'માહિતીસંચ ને અપાયેલ શોધના સૂત્રમાં ચૂક છે.
 માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
 "$1"
@@ -544,7 +544,10 @@ $2',
 'ns-specialprotected' => 'ખાસ પાનાંમાં ફેરફાર ન થઇ શકે.',
 'titleprotected' => 'આ મથાળું (વિષય) [[User:$1|$1]] બનાવવા માટે સુરક્ષિત કરવામાં આવ્યો છે.
 આ માટેનું કારણ છે-- "\'\'$2\'\'".',
+'invalidtitle-knownnamespace' => 'નામસ્થળ "$2" અને લખાણ "$3" સાથે અમાન્ય મથાળું',
+'invalidtitle-unknownnamespace' => 'અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ "$2" વાળું અમાન્ય મથાળું',
 'exception-nologin' => 'પ્રવેશ કરેલ નથી',
+'exception-nologin-text' => 'આ પાનું કે ક્રિયા માટે આ વિકિ પર લોગઈન થવું જરૂરી છે.',
 
 # Virus scanner
 'virus-badscanner' => "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
@@ -554,7 +557,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''તમે (લોગ આઉટ કરીને) બહાર નિકળી ચુક્યા છો.'''
 
-તમે અનામી તરીકે {{SITENAME}} વાપરવાનું ચાલુ રાખી શકો છો, કે પછી તેના તે જ કે અલગ સભ્ય તરીકે [[Special:UserLogin|ફરી પ્રવેશ]] કરી શકો છો.
+તમે અનામી તરીકે {{SITENAME}} વાપરવાનું ચાલુ રાખી શકો છો, કે પછી તેના તે જ કે અલગ સભ્ય તરીકે <span class='plainlinks'>[$1 ફરી પ્રવેશ]</span> કરી શકો છો.
 ધ્યાન રાખો કે જ્યાં સુધી તમે તમારા બ્રાઉઝરનો  કૅશ સાફ નહીં કરો ત્યાં સુધી કેટલાક પાનાં તમે પ્રવેશી ચુક્યા છો તેમ બતાવશે.",
 'welcomecreation' => '== તમારૂં સ્વાગત છે $1! ==
 તમારૂં ખાતું બની ગયું છે.
@@ -642,8 +645,8 @@ Please log in again after you receive it.
 નિમ્નલિખિત વિશેષતાઓમાંથી કોઇ માટે ઇ-મેઇલ મોકલવામાં આવશે નહીં.',
 'noemailprefs' => "આ વિશેષતાઓ કાર્ય કરી શકે તે માટે 'તમારી પસંદ'માં ઇ-મેઇલ સરનામું દર્શાવો.",
 'emailconfirmlink' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો',
-'invalidemailaddress' => 'àª\86 àª\88-મà«\87લ àª\85યà«\8bàª\97à«\8dય àª®àª¾àª³àª\96à«\81àª\82 àª§àª°àª¾àªµà«\8dહà«\87 àª\9bà«\87  àª®àª¾àª\9fà«\87 àª¸à«\8dવà«\80àª\95ારà«\80 àª¶àª\95ાશà«\87 àª¨àª¹à«\80àª\82
-કૃપયા યોગ્ય માળખામાં ઇ-મેલ લખો',
+'invalidemailaddress' => 'àª\86 àª\88-મà«\87લ àª\85યà«\8bàª\97à«\8dય àª®àª¾àª³àª\96à«\81àª\82 àª§àª°àª¾àªµà«\87 àª\9bà«\87 àª®àª¾àª\9fà«\87 àª¸à«\8dવà«\80àª\95ારà«\80 àª¶àª\95ાશà«\87 àª¨àª¹à«\80àª\82.
+કૃપયા યોગ્ય માળખામાં ઇ-મેલ લખો અથવા આ ખાનું ખાલી કરો.',
 'cannotchangeemail' => 'એકાઉન્ટ ઈ મેલ એડ્રસ આ વીકી પર નહિ બદલી શકાય.',
 'emaildisabled' => 'આ સાઇટ ઇ-મેલ્સ મોકલી શકતી નથી.',
 'accountcreated' => 'ખાતું ખોલવામાં આવ્યું છે',
@@ -828,8 +831,7 @@ $2
 *'''ફાયરફોક્સ / સફારી:''' ''શીફ્ટ'' દબાવેલી રાખીને ''રિલોડ'' પર ક્લિક કરો, અથવા તો ''Ctrl-F5'' કે ''Ctrl-R'' દબાવો (મેક પર ''⌘-R'')
 *'''ગુગલ ક્રોમ:''' ''Ctrl-Shift-R'' દબાવો (મેક પર ''⌘-Shift-R'')
 *'''ઈન્ટરનેટ એક્સપ્લોરર:''' ''Ctrl'' દબાવેલી રાખીને ''રિફ્રેશ'' પર ક્લિક કરો, અથવા ''Ctrl-F5'' દબાવો
-*'''કોન્કરર:''' ''રિલોડ'' પર ક્લિક કરો અથવા ''F5'' દબાવો
-*'''ઓપેરા:''' ''સાધનો → પસંદગીઓ''માં જઈને કૅશ સાફ કારો",
+*'''ઓપેરા:''' ''સાધનો → પસંદગીઓ''માં જઈને કૅશ સાફ કરો",
 'usercssyoucanpreview' => "'''ટીપ:''' તમારા નવા CSSને સાચવતા પહેલા  \"{{int:showpreview}}\" બટન વાપરી ચકાસણી કરો.",
 'userjsyoucanpreview' => "'''ટીપ:''' Use the તમારી નવી JavaScript ને સાચવતા પહેલા   \"{{int:showpreview}}\" બટન વાપરી ચકાસો.",
 'usercsspreview' => "'''યાદ રહે કે તમે તમારા સભ્ય CSS નું અવલોકન કરો છે.'''
@@ -862,7 +864,7 @@ $2
 જ્યારે તમે વેબ આધારિત  અજ્ઞાત પ્રોક્સી વાપરતા હોવ ત્યારે આવું બની શકે છે.",
 'edit_form_incomplete' => "'''ફેરફાર પત્રનો અમુક ભાગ સર્વર સુધી ન પહોંચ્યો; ખાત્રી કરો કે તમે કરેલા ફેરફાર બરાબર છે અને ફરી પ્રયત્ન કરો.'''",
 'editing' => '$1નો ફેરફાર કરી રહ્યા છે',
-'creating' => '$1 àª¬àª¨àª¾àªµà«\87 àª\9bà«\87',
+'creating' => '$1 àª¬àª¨àª¾àªµà«\80 àª°àª¹à«\8dયા àª\9bà«\8b',
 'editingsection' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
 'editingcomment' => '$1 (પરિચ્છેદ)નો ફેરફાર કરી રહ્યા છો',
 'editconflict' => 'ફેરફારમાં વિસંગતતા: $1',
@@ -975,7 +977,7 @@ $3 દ્વારા અપાયેલ કારણ છે ''$2''",
 'last' => 'છેલ્લું',
 'page_first' => 'પહેલું',
 'page_last' => 'છેલ્લું',
-'histlegend' => "વિવિધ àªªàª¸àª\82દàª\97à«\80:સરàª\96ામણà«\80 àª®àª¾àª\9fà«\87 àª¸à«\81ધારà«\87લà«\80 àª\86વà«\83તિàª\93ના àª°à«\87ડિયà«\8b àª\96ાનાàª\93 àªªàª¸àª\82દ àª\95રà«\8b àª\85નà«\87 àª\8fનà«\8dàª\9fર àª®àª¾àª°à«\8b àª\85થવા àª¨à«\80àª\9aà«\87 àª\86વેલું બટન દબાવો.<br />
+'histlegend' => "વિવિધ àªªàª¸àª\82દàª\97à«\80:સરàª\96ામણà«\80 àª®àª¾àª\9fà«\87 àª¸à«\81ધારà«\87લà«\80 àª\86વà«\83તિàª\93ના àª°à«\87ડિયà«\8b àª\96ાનાàª\93 àªªàª¸àª\82દ àª\95રà«\8b àª\85નà«\87 àª\8fનà«\8dàª\9fર àª¦àª¬àª¾àªµà«\8b àª\85થવા àª¨à«\80àª\9aà«\87 àª\86પેલું બટન દબાવો.<br />
 સમજૂતી:'''({{int:cur}})''' = વર્તમાન અને સુધારેલી આવૃતિનો તફાવત, '''({{int:last}})''' = પૂર્વવર્તી ફેરફારનો તફાવત, '''{{int:minoreditletter}}''' = નાનો ફેરફાર.",
 'history-fieldset-title' => 'ઇતિહાસ ઉખેળો',
 'history-show-deleted' => 'માત્ર હટાવાયેલા',
@@ -1081,7 +1083,8 @@ $1",
 'revdelete-only-restricted' => '$2 તારીખ, $1 વાગ્યાની વસ્તુ સંતાડવામાં ત્રુટિ : અન્ય દ્રશ્ય વિકલ્પ પસંદ કર્યા સિવાય તમે પ્રતિબંધને પ્રબંધકથી દેખતા બચાવી ન શકો.',
 'revdelete-reason-dropdown' => '* હટાવવાનાં સામાન્ય કારણો 
 ** પ્રકાશનાધિકાર ભંગ
-** અયોગ્ય અંગત માહિતી 
+** અયોગ્ય ટિપ્પણી કે અંગત માહિતી 
+** અયોગ્ય સભ્યનામ
 ** સંભવતઃ બદનક્ષી કરનારું લખાણ',
 'revdelete-otherreason' => 'અન્ય/વધારાનું કારણ:',
 'revdelete-reasonotherlist' => 'અન્ય કારણ',
@@ -1177,8 +1180,6 @@ $1",
 'search-interwiki-caption' => 'બંધુ પ્રકલ્પ',
 'search-interwiki-default' => '$1 પરીણામો:',
 'search-interwiki-more' => '(વધુ)',
-'search-mwsuggest-enabled' => 'સુઝાવ સહિત',
-'search-mwsuggest-disabled' => 'સુઝાવ વિના',
 'search-relatedarticle' => 'શોધ સંબંધિત',
 'mwsuggest-disable' => 'AJAX સુઝાવો નિષ્ક્રીય કરો',
 'searcheverything-enable' => 'નામસ્થળોમાં શોધો:',
@@ -1360,7 +1361,7 @@ HTML નાકું ચકાસો',
 # Groups
 'group' => 'સમુહ',
 'group-user' => 'સભ્ય',
-'group-autoconfirmed' => 'સ્વયં ચલિત પરવાનગી મેળવેલ સભ્યો',
+'group-autoconfirmed' => 'સ્વયંચલિત માન્ય સભ્યો',
 'group-bot' => 'બૉટો',
 'group-sysop' => 'સાઇસૉપ/પ્રબંધકો',
 'group-bureaucrat' => 'રાજનૈતિકો',
@@ -1375,7 +1376,7 @@ HTML નાકું ચકાસો',
 'group-suppress-member' => '{{GENDER:$1|દુર્લક્ષ}}',
 
 'grouppage-user' => '{{ns:project}}:સભ્યો',
-'grouppage-autoconfirmed' => '{{ns:project}}:સà«\8dવà«\8dયàª\82àª\9aલિત àª¬àª¹àª¾àª²  સભ્યો',
+'grouppage-autoconfirmed' => '{{ns:project}}:સà«\8dવયàª\82àª\9aલિત àª®àª¾àª¨à«\8dય સભ્યો',
 'grouppage-bot' => '{{ns:project}}:બૉટો',
 'grouppage-sysop' => '{{ns:project}}:પ્રબંધકો',
 'grouppage-bureaucrat' => '{{ns:project}}: રાજનૈતિક',
@@ -1506,7 +1507,7 @@ HTML નાકું ચકાસો',
 'rcshowhidepatr' => ' $1 ચોકીયાત ફેરફારો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
-'diff' => 'તફાવત',
+'diff' => 'ભà«\87દ',
 'hist' => 'ઇતિહાસ',
 'hide' => 'છુપાવો',
 'show' => 'બતાવો',
@@ -2082,8 +2083,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 
 # Special:ListGroupRights
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
-'listgrouprights-summary' => 'નà«\80àª\9aà«\87 àª\86 àªµàª¿àª\95િ àªªàª° àªªàª°àª¿àª­àª¾àª·àª¿àª¤ àª¸àª­à«\8dય àª\9cà«\82થનà«\80 àª¯àª¾àª¦àª¿ àª\86પà«\80 àª\9bà«\87 àª\85નà«\87 àª¤à«\87મના àª¹àª\95à«\8dàª\95à«\8b àªªàª£ àª\86પà«\87લા છે.
-નà«\80àª\9cà«\80 àª¹àª\95à«\8dàª\95à«\8b àª®àª¾àª\9fà«\87 [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] àª®àª¾àª¹àª¿àª¤à«\80.',
+'listgrouprights-summary' => 'નà«\80àª\9aà«\87 àª\86 àªµàª¿àª\95િ àªªàª° àªµà«\8dયાàª\96à«\8dયાયિત àª¸àª­à«\8dય àª\9cà«\82થà«\8bનà«\80 àª¯àª¾àª¦à«\80, àª¤à«\87મનà«\80 àª¸àª¾àª¥à«\87 àª¸àª\82àª\95ળાયà«\87લા àª¹àª\95à«\8dàª\95à«\8b àª¸àª¾àª¥à«\87 àª\86પà«\80 છે.
+વà«\8dયàª\95à«\8dતિàª\97ત àª¹àª\95à«\8dàª\95à«\8b àª®àª¾àª\9fà«\87 [[{{MediaWiki:Listgrouprights-helppage}}|વધારાનà«\80 àª®àª¾àª¹àª¿àª¤à«\80]].',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">અધિકાર અપાયા</span>
 * <span class="listgrouprights-revoked">અધિકાર હટાવાયા</span>',
 'listgrouprights-group' => 'જૂથ',
@@ -2222,7 +2223,7 @@ $UNWATCHURL
 'delete-legend' => 'રદ કરો',
 'historywarning' => "'''ચેતવણી:''' જે પાનું તમે હટાવવા જઇ રહ્યાં છો તેને આશરે $1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}નો ઇતિહાસ છે:",
 'confirmdeletetext' => 'આપ આ પાનું તેના ઇતિહાસ (બધાજ પૂર્વ  ફેરફારો) સાથે હટાવી રહ્યાં છો.
-àª\95à«\83પા àª\95રà«\80 àª®àª\82àª\9cà«\82રà«\80 àª\86પà«\8b àª\95à«\87, àª\86પ àª\86મ àª\95રવા àª\9aાહà«\8b àª\9bà«\8b, àª\86પ àª\86ના àª¸àª°àª¾-નરસા àªªàª°àª¿àª£àª¾àª®à«\8bથà«\80 àªµàª¾àª\95à«\87ફ àª\9bà«\8b, àª\85નà«\87 àª\86પ àª\86 àª\95à«\83ત્ય [[{{MediaWiki:Policy-url}}|નીતિ]]ને અનુરૂપ જ કરી રહ્યાં છો.',
+àª\95à«\83પા àª\95રà«\80 àª\96ાતà«\8dરà«\80 àª\95રà«\8b àª\95à«\87 àª\86પ àª\86મ àª\95રવા àª\87àª\9aà«\8dàª\9bà«\8b àª\9bà«\8b, àª\86પ àª\86ના àª¸àª¾àª°àª¾-નરસા àªªàª°àª¿àª£àª¾àª®à«\8bથà«\80 àªµàª¾àª\95à«\87ફ àª\9bà«\8b, àª\85નà«\87 àª\86પ àª\86 àª\95ાર્ય [[{{MediaWiki:Policy-url}}|નીતિ]]ને અનુરૂપ જ કરી રહ્યાં છો.',
 'actioncomplete' => 'કામ પૂર્ણ',
 'actionfailed' => 'કાર્ય અસફળ',
 'deletedtext' => '"$1" દૂર કરવામાં આવ્યું છે.
@@ -2252,7 +2253,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 'rollback' => 'ફેરફારો ઉલટાવો',
 'rollback_short' => 'ઉલટાવો',
 'rollbacklink' => 'પાછું વાળો',
-'rollbacklinkcount' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં વધુ પાછાં લાવો',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|ફેરફાર પાછો વાળો|ફેરફારો પાછા વાળો}}',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં ઓછું પાછું લાવો',
 'rollbackfailed' => 'ઉલટાવવું નિષ્ફળ',
 'cantrollback' => 'આ ફેરફારો ઉલટાવી નહી શકાય
@@ -2343,7 +2344,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 
 # Undelete
 'undelete' => 'ભૂંસાડેલા પાના બતાવો',
-'undeletepage' => 'હàª\9fાવà«\87લ àªªàª¾àª¨àª¾ àª\9cà«\81àª\93 àª\85નà«\87 àªªà«\81àª\82રà«\8dàª\9cà«\80વà«\80ત કરો',
+'undeletepage' => 'હàª\9fાવà«\87લ àªªàª¾àª¨àª¾ àª\9cà«\81àª\93 àª\85નà«\87 àªªà«\81નરà«\8dàª\9cà«\80વિત કરો',
 'undeletepagetitle' => "'''નીચે [[:$1|$1]] ના ભૂંસાડેલ સંપાદનો છે.'''.",
 'viewdeletedpage' => 'ભૂંસેલા પાના બતાવો',
 'undeletepagetext' => 'નીચેના {{PLURAL:$1|પાનું હટાવી દેવાયું છે |$1 પાના હટાવી દેવાયા છે}} તે હજી પ્રાચીન દસ્તવેજમાં છે અને પુનઃસ્થાપિત કરી શકાશે.
@@ -2362,7 +2363,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'undelete-revision' => '$1 ( $4 તારીખે , $5 વાગ્યા)  સુધી કરેલા ફેરફારો  $3 દ્વારા હટાવાયા:',
 'undeleterevision-missing' => 'અવૈધ કે ગાયબ પુનરાવર્તન.
 તમારી કડી ખરાબ હશે અથવા ઇતિહાસમાંથી તે માહિતી હટાવાઇ હશે.',
-'undelete-nodiff' => 'àª\95à«\8bàª\87 àªªà«\8dરાàª\9aà«\80ન àª¸àª\82પદનà«\8b àª¨àª¥à«\80 àª®àª³à«\8dયાàª\82',
+'undelete-nodiff' => 'àª\95à«\8bàª\87 àªªà«\8dરાàª\9aà«\80ન àª¸àª\82પાદનà«\8b àª¨àª¥à«\80 àª®àª³à«\8dયાàª\82.',
 'undeletebtn' => 'પાછું વાળો',
 'undeletelink' => 'જુઓ/પાછુ વાળો',
 'undeleteviewlink' => 'જુઓ',
@@ -2372,8 +2373,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'undeletedrevisions' => '{{PLURAL:$1|૧ સંપાદન|$1 સંપાદનો}} પુન સ્થાપિત કરાયા',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 ફેરફાર|$1 ફેરફારો}} અને {{PLURAL:$2|1 ફાઈલા|$2 ફાઈલો}} પુનઃસ્થાપિત',
 'undeletedfiles' => '{{PLURAL:$1|1 ફાઇલ|$1 ફાઇલો}} પુનઃસ્થાપિત',
-'cannotundelete' => 'પà«\81નàª\83àª\9cà«\80વિત àª\95રવાનà«\81àª\82 àª\95ારà«\8dય àª\85સફળ 
-કોઇકે  આ પાનાને પહેલેથી પુનઃજીવિત કર્યું હોઇ શકે.',
+'cannotundelete' => 'પà«\81નરà«\8dàª\9cà«\80વિત àª\95રવાનà«\81àª\82 àª\95ારà«\8dય àª\85સફળ; 
+કોઇકે આ પાનાને પહેલેથી પુનર્જીવિત કર્યું હોઈ શકે.',
 'undeletedpage' => "'''$1 પુનઃસ્થાપિત કરાયા'''
 
 તાજેતરમાં હટાવેલા કે પુનઃસ્થાપિત થયેલા ફેરફારની નોંધ નો સંદર્ભ અહીં ઉપ્લબ્ધ [[Special:Log/delete|deletion log]].",
@@ -2456,22 +2457,22 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'blockip' => 'સભ્ય પર પ્રતિબંધ મુકો',
 'blockip-title' => 'સભ્ય પર પ્રતિબંધ મુકો',
 'blockip-legend' => 'સભ્ય પર પ્રતિબંધ મુકો',
-'blockiptext' => 'àª\95à«\8bàª\87 àª\9aà«\8bàª\95à«\8dàª\95સ IP àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\95à«\87 àª¸àª­à«\8dય  àª¨àª¾  લેખન યોગદાન પર પ્રતિબંધ મુકવા નીચેનું ફોર્મ વાપરો.
-તેનો ઉપયોગ માત્ર ભાંગફોડિયા પ્રવૃત્તિઓને રોકવા અને  [[{{MediaWiki:Policy-url}}|policy]] અનુસાર જ હોવી જોઇએ.
-àª\95ારણનà«\81àª\82 àª\96ાનà«\81àª\82 àª\85વશà«\8dય àª«àª°àª¶à«\8b (દા.ત. àª\85મà«\81àª\95 àª­àª¾àª\82àª\97ફà«\8bડ àª\95રાયà«\87લ àªªàª¾àª¨à«\81àª\82)',
+'blockiptext' => 'àª\95à«\8bàª\88 àª\9aà«\8bàª\95à«\8dàª\95સ IP àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\95à«\87 àª¸àª­à«\8dયના લેખન યોગદાન પર પ્રતિબંધ મુકવા નીચેનું ફોર્મ વાપરો.
+તેનો ઉપયોગ માત્ર ભાંગફોડિયા પ્રવૃત્તિઓને રોકવા અને  [[{{MediaWiki:Policy-url}}|નીતિ]] અનુસાર જ હોવો જોઈએ.
+àª\95ારણનà«\81àª\82 àª\96ાનà«\81àª\82 àª\85વશà«\8dય àª­àª°àª¶à«\8b (દા.ત. àª\85મà«\81àª\95 àª­àª¾àª\82àª\97ફà«\8bડ àª\95રાયà«\87લા àªªàª¾àª¨àª¾àª¨à«\8b àª¸àª\82દરà«\8dભ).',
 'ipadressorusername' => 'IP સરનામું અથવા સભ્યનામ:',
 'ipbexpiry' => 'સમાપ્તિ:',
 'ipbreason' => 'કારણ:',
 'ipbreasonotherlist' => 'અન્ય કારણ',
 'ipbreason-dropdown' => '*સામાન્ય પ્રતિબંધ કારણો
-** ખોટી  માહિતી ઉમેરાઇ  
+** ખોટી માહિતી ઉમેરાઈ  
 ** પાનામાંથી માહિતી ભૂંસી નાંખી
 ** અનાવશ્યક બાહ્ય કડીઓ ઉમેરી 
 ** પાનામાં મૂર્ખામીભરી/અર્થહીન માહિતી ઉમેરી
-**  ત્રાસદાયક વર્તન 
-** ઘણા ખાતાઓનું સાથે શોષણ 
+** ત્રાસદાયક વર્તન 
+** ઘણા ખાતાઓ અને દુરુપયોગ
 ** અસ્વીકાર્ય સભ્ય નામ
-**આત્યંતિક ભાંગફોડ',
+** આત્યંતિક ભાંગફોડ',
 'ipb-hardblock' => 'અટકાવો આ IP સરનામું માંથી ફેરફાર વપરાશકર્તાઓ માં લૉગ',
 'ipbcreateaccount' => 'ખાતા ખોલવા પર પ્રતિબંધ',
 'ipbemailban' => 'સભ્યના ઇ-મેલ મોકલવા પર પ્રતિબંધ મૂકો',
@@ -2810,7 +2811,6 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 
 # JavaScriptTest
 'javascripttest' => 'જાવા સ્ક્રીપ્ટ પરીક્ષણ',
-'javascripttest-disabled' => 'આ સૂત્ર (ફંકશન) આ વિકિ પર કાર્યરત કરાયેલું નથી.',
 'javascripttest-title' => '$1 પરીક્ષણ જારી',
 'javascripttest-pagetext-noframework' => 'આ પાનું જાવા સ્ક્રીપ્ટ ચલાવવા આરક્ષિત છે.',
 'javascripttest-pagetext-unknownframework' => 'અજાણ ચકાસણી ફ્રેમવર્ક "$1".',
@@ -2915,11 +2915,11 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 
 # Info page
 'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
-'pageinfo-header-edits' => 'àª\95રà«\87લા àª«à«\87રફાર',
+'pageinfo-header-edits' => 'àª\87તિહાસ àª¸àª\82પાદન',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
-'pageinfo-watchers' => 'નીરીક્ષકોની સંખ્યા',
-'pageinfo-edits' => 'સંપાદનોની સંખ્યા',
-'pageinfo-authors' => 'ક્ષેત્રના લેખકોની સંખ્યા',
+'pageinfo-watchers' => 'પાના àª¨à«\80રà«\80àª\95à«\8dષàª\95à«\8bનà«\80 àª¸àª\82àª\96à«\8dયા',
+'pageinfo-edits' => 'àª\95à«\81લ àª¸àª\82પાદનà«\8bનà«\80 àª¸àª\82àª\96à«\8dયા',
+'pageinfo-authors' => 'àª\95à«\8dષà«\87તà«\8dરના àª²à«\87àª\96àª\95à«\8bનà«\80 àª\95à«\81લ àª¸àª\82àª\96à«\8dયા',
 
 # Patrolling
 'markaspatrolleddiff' => 'નિરીક્ષીત અંકિત કરો',
@@ -3630,7 +3630,7 @@ $5
 * <span class="mw-specialpagerestricted">ખાસ પાનાં પ્રતિબંધિત.</span>',
 'specialpages-group-maintenance' => 'સમારકામ અહેવાલ',
 'specialpages-group-other' => 'અન્ય ખાસ પાનાઓ',
-'specialpages-group-login' => 'પà«\8dરવà«\87શ / àª¨à«\8bàª\82ધણà«\80 àª\95રો',
+'specialpages-group-login' => 'પà«\8dરવà«\87શ / àª\96ાતà«\81 àª¬àª¨àª¾àªµો',
 'specialpages-group-changes' => 'હાલના ફેરફારો અને લોગ',
 'specialpages-group-media' => 'મિડિયા રિપોર્ટ અને ચડાવેલી ફાઇલ',
 'specialpages-group-users' => 'સભ્યો અને અધિકારો',
@@ -3754,6 +3754,10 @@ $5
 'feedback-bugcheck' => 'સરસ! જરા જોઈ લેશો કે આ  પહેલેથી જ હાજર [$1 known bugs] નથીને?',
 'feedback-bugnew' => 'મેં તપાસ્યું.  નવી ત્રુટીની જાણ કરો.',
 
+# Search suggestions
+'searchsuggest-search' => 'શોધો',
+'searchsuggest-containing' => 'ધરાવતી...',
+
 # API errors
 'api-error-badaccess-groups' => 'આ વિકિ પર ફાઈલ ચઢાવવાની પરવાનગી તમને નથી.',
 'api-error-badtoken' => 'આંતરીક ત્રુટી: ખરાબ ટોકન',
index c7fbd44..bbdab38 100644 (file)
@@ -586,8 +586,6 @@ Ogher: '''({{int:cur}})''' = anchaslyssyn rish y lhieggan t'ayn nish,
 'search-interwiki-caption' => 'Shuyr-haleeghyn',
 'search-interwiki-default' => '{{PLURAL:$1|$1 eiyrtys|$1 eiyrtys|$1 eiyrtys|$1 eiyrtyssyn}}:',
 'search-interwiki-more' => '(ny smoo)',
-'search-mwsuggest-enabled' => 'lesh coyrle',
-'search-mwsuggest-disabled' => 'gyn coyrle',
 'search-relatedarticle' => 'Bentyn rish',
 'mwsuggest-disable' => 'Lhiettal coyrle AJAX',
 'searchrelated' => 'bentyn rish',
@@ -1477,4 +1475,8 @@ Bee adsyn elley follit dy seyr-obbragh.<br />
 # Special:Tags
 'tags-edit' => 'reaghey',
 
+# Search suggestions
+'searchsuggest-search' => 'Ronsaghey',
+'searchsuggest-containing' => 'goaill stiagh...',
+
 );
index d9ffb7e..02ae94e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Hausa (هَوُسَ)
+/** Hausa (Hausa)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -351,8 +351,6 @@ Fasali: '''({{int:cur}})''' = bambanci da zubi na yanzu, '''({{int:last}})''' =
 'search-interwiki-caption' => 'Shire-shire masu dangantaka',
 'search-interwiki-default' => 'Sakamakon $1:',
 'search-interwiki-more' => '(ƙari)',
-'search-mwsuggest-enabled' => 'Tare da shawarwari',
-'search-mwsuggest-disabled' => 'Banda shawarwari',
 'searchall' => 'duka',
 'nonefound' => "'''Hattara''': Galibi wasu sararen suna ƙalilan kawai ake nemowa.
 Ku gwada tare da amfani da \"all:\" don bincikar duka shafunan (har da shafunan muhawara, mulaye, d.s.), ko kuma ku yi amfani da sararin sunan da kuke so.",
index de9ed56..1984c01 100644 (file)
@@ -624,8 +624,6 @@ Tông-tsûng pûn $3 fûng-só ke ngièn-yîn he ''$2''",
 'search-interwiki-caption' => 'Chí-moi kie-va̍k',
 'search-interwiki-default' => '$1 kiet-kó:',
 'search-interwiki-more' => '(kien-tô)',
-'search-mwsuggest-enabled' => 'yù kien-ngi',
-'search-mwsuggest-disabled' => 'mò kien-ngi',
 'showingresults' => "Ha-mien hién-sṳ chhiùng thi-'''$2'''-thiàu khôi-sṳ́ ke '''$1'''-thiàu kiet-kó:",
 'showingresultsnum' => "Ha-mien hién-sṳ chhiùng thi-'''$2'''-thiàu khôi-sṳ́ ke '''$3'''-thiàu kiet-kó:",
 'nonefound' => '<strong>Chu-yi:</strong> Sṳt-phai ke sêu-chhà vông-vông he chhut-yì chhṳ-thù sêu-chhà chû-yì "ke" fe̍t-chá "lâu" chṳ̂-lui ke sòng-kien-sṳ só yîn-hí.',
index 3776098..d086a2d 100644 (file)
@@ -63,27 +63,27 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'KĒIAMAHINA', 'KEIAMAHINA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'KĒIAINOAMAHINA', 'KEIAINOAMAHINA', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'KĒIALĀ', 'KEIALA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'KĒIALĀ2', 'KEIALA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'KĒIAINOALĀ', 'KEIAINOALA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'KĒIAMAKAHIKI', 'KEIAMAKAHIKI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KĒIAMANAWA', 'KEIAMANAWA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KĒIAHOLA', 'KEIAHOLA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'HELUʻAOʻAO', 'HELUAOAO', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'HELUMEA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'HELUWAIHONA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'HELUMEAHOʻOHANA', 'HELUMEAHOOHANA', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'HELULOLI', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'INOAʻAOʻAO', 'INOAAOAO', 'PAGENAME' ),
-       'img_right'               => array( '1', 'ʻākau', 'ākau', 'akau', 'right' ),
-       'img_left'                => array( '1', 'hema', 'left' ),
-       'img_none'                => array( '1', 'ʻaʻohe', 'aohe', 'none' ),
-       'img_link'                => array( '1', 'loulou=$1', 'link=$1' ),
-       'currentweek'             => array( '1', 'KĒIAPULE', 'KEIAPULE', 'CURRENTWEEK' ),
-       'language'                => array( '0', '#ʻŌLELO', '#ŌLELO', '#OLELO', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'HELUKAHU', 'NUMBEROFADMINS' ),
+       'currentmonth'              => array( '1', 'KĒIAMAHINA', 'KEIAMAHINA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'KĒIAINOAMAHINA', 'KEIAINOAMAHINA', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'KĒIALĀ', 'KEIALA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'KĒIALĀ2', 'KEIALA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'KĒIAINOALĀ', 'KEIAINOALA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'KĒIAMAKAHIKI', 'KEIAMAKAHIKI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KĒIAMANAWA', 'KEIAMANAWA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KĒIAHOLA', 'KEIAHOLA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'HELUʻAOʻAO', 'HELUAOAO', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'HELUMEA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'HELUWAIHONA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'HELUMEAHOʻOHANA', 'HELUMEAHOOHANA', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'HELULOLI', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'INOAʻAOʻAO', 'INOAAOAO', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'ʻākau', 'ākau', 'akau', 'right' ),
+       'img_left'                  => array( '1', 'hema', 'left' ),
+       'img_none'                  => array( '1', 'ʻaʻohe', 'aohe', 'none' ),
+       'img_link'                  => array( '1', 'loulou=$1', 'link=$1' ),
+       'currentweek'               => array( '1', 'KĒIAPULE', 'KEIAPULE', 'CURRENTWEEK' ),
+       'language'                  => array( '0', '#ʻŌLELO', '#ŌLELO', '#OLELO', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'HELUKAHU', 'NUMBEROFADMINS' ),
 );
 
 $messages = array(
@@ -473,8 +473,6 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'search-section' => '(māhele $1)',
 'search-suggest' => 'ʻO kēia paha kou manaʻo: $1',
 'search-interwiki-caption' => 'Nā pāhana ʻē aʻe',
-'search-mwsuggest-enabled' => 'me nā manaʻo kōkua',
-'search-mwsuggest-disabled' => 'ʻaʻohe manaʻo kōkua',
 'searchall' => 'apau',
 'powersearch' => 'Hulina kūlana kiʻekiʻe',
 'powersearch-legend' => 'Hulina kūlana kiʻekiʻe',
index d13d169..f640749 100644 (file)
@@ -10,6 +10,7 @@
  * @author Agbad
  * @author Amire80
  * @author Drorsnir
+ * @author Hoo
  * @author Ijon
  * @author Ofekalef
  * @author Ofrahod
@@ -67,158 +68,158 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#הפניה', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ללא_גלריה__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__חייב_תוכן_עניינים__', '__חייב_תוכן__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__ללא_כותרת__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'חודש נוכחי', 'חודש נוכחי 2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'חודש נוכחי 1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'שם חודש נוכחי', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'שם חודש נוכחי קניין', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'קיצור חודש נוכחי', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'יום נוכחי', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'יום נוכחי 2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'שם יום נוכחי', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'שנה נוכחית', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'שעה נוכחית', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'שעות נוכחיות', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'חודש מקומי', 'חודש מקומי 2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'חודש מקומי 1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'שם חודש מקומי', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'שם חודש מקומי קניין', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'קיצור חודש מקומי', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'יום מקומי', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'יום מקומי 2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'שם יום מקומי', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'שנה מקומית', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'שעה מקומית', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'שעות מקומיות', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'מספר ערכים', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'מספר קבצים', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'מספר משתמשים', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'מספר עריכות', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'מספר צפיות', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'שם הדף', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'שם הדף מקודד', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'מרחב השם', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'מרחב השם מקודד', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'מרחב השיחה', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'מרחב השיחה מקודד', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'מרחב הנושא', 'מרחב הערכים', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'מרחב הנושא מקודד', 'מרחב הערכים מקודד', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'שם הדף המלא', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'שם הדף המלא מקודד', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'שם דף המשנה', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'שם דף המשנה מקודד', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'שם דף הבסיס', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'שם דף הבסיס מקודד', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'שם דף השיחה', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'שם דף השיחה מקודד', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'שם דף הנושא', 'שם הערך', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'שם דף הנושא מקודד', 'שם הערך מקודד', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'הכללה:', 'MSG:' ),
-       'subst'                   => array( '0', 'ס:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'ס בטוח:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'הכללת מקור', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'ממוזער', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ימין', 'right' ),
-       'img_left'                => array( '1', 'שמאל', 'left' ),
-       'img_none'                => array( '1', 'ללא', 'none' ),
-       'img_width'               => array( '1', '$1 פיקסלים', '$1px' ),
-       'img_center'              => array( '1', 'מרכז', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ממוסגר', 'מסגרת', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'לא ממוסגר', 'ללא מסגרת', 'frameless' ),
-       'img_page'                => array( '1', 'דף=$1', 'דף $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'ימין למעלה', 'ימין למעלה=$1', 'ימין למעלה $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'גבולות', 'גבול', 'border' ),
-       'img_baseline'            => array( '1', 'שורת הבסיס', 'baseline' ),
-       'img_sub'                 => array( '1', 'תחתי', 'sub' ),
-       'img_super'               => array( '1', 'עילי', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'למעלה', 'top' ),
-       'img_text_top'            => array( '1', 'בראש הטקסט', 'text-top' ),
-       'img_middle'              => array( '1', 'באמצע', 'middle' ),
-       'img_bottom'              => array( '1', 'למטה', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'בתחתית הטקסט', 'text-bottom' ),
-       'img_link'                => array( '1', 'קישור=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'טקסט=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'הודעה:', 'INT:' ),
-       'sitename'                => array( '1', 'שם האתר', 'SITENAME' ),
-       'ns'                      => array( '0', 'מרחב שם:', 'NS:' ),
-       'nse'                     => array( '0', 'מרחב שם מקודד:', 'NSE:' ),
-       'localurl'                => array( '0', 'כתובת יחסית:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'כתובת יחסית מקודד:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'נתיב הדפים', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'כתובת השרת', 'שרת', 'SERVER' ),
-       'servername'              => array( '0', 'שם השרת', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'נתיב הקבצים', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'נתיב הסגנון', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'דקדוק:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'מגדר:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__ללא_המרת_כותרת__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ללא_המרת_תוכן__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'שבוע נוכחי', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'מספר יום נוכחי', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'שבוע מקומי', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'מספר יום מקומי', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'מזהה גרסה', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'יום גרסה', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'יום גרסה 2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'חודש גרסה', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'חודש גרסה 1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'שנת גרסה', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'זמן גרסה', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'כותב גרסה', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'רבים:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'כתובת מלאה:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'כתובת מלאה מקודד:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'כתובת קנונית:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'כתובת קנונית מקודד:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'אות ראשונה קטנה:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'אות ראשונה גדולה:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'אותיות קטנות:', 'LC:' ),
-       'uc'                      => array( '0', 'אותיות גדולות:', 'UC:' ),
-       'raw'                     => array( '0', 'ללא עיבוד:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'כותרת תצוגה', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'ללא פסיק', 'R' ),
-       'newsectionlink'          => array( '1', '__יצירת_הערה__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__ללא_יצירת_הערה__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'גרסה נוכחית', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'נתיב מקודד:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'עוגן מקודד:', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'זמן נוכחי', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'זמן מקומי', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'סימן כיווניות', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#שפה:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'שפת תוכן', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'דפים במרחב השם:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'מספר מפעילים', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'עיצוב מספר', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ריפוד משמאל', 'PADLEFT' ),
-       'padright'                => array( '0', 'ריפוד מימין', 'PADRIGHT' ),
-       'special'                 => array( '0', 'מיוחד', 'special' ),
-       'defaultsort'             => array( '1', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'נתיב לקובץ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'תגית', 'tag' ),
-       'hiddencat'               => array( '1', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'דפים בקטגוריה', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'גודל דף', 'PAGESIZE' ),
-       'index'                   => array( '1', '__לחיפוש__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__לא_לחיפוש__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'מספר בקבוצה', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__הפניה_קבועה__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'רמת הגנה', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'עיצוב תאריך', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'נתיב', 'PATH' ),
-       'url_wiki'                => array( '0', 'ויקי', 'WIKI' ),
-       'url_query'               => array( '0', 'שאילתה', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'ללא שגיאה', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'ללא החלפה', 'noreplace' ),
+       'redirect'                  => array( '0', '#הפניה', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ללא_גלריה__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__חייב_תוכן_עניינים__', '__חייב_תוכן__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ללא_עריכה__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__ללא_כותרת__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'חודש נוכחי', 'חודש נוכחי 2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'חודש נוכחי 1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'שם חודש נוכחי', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'שם חודש נוכחי קניין', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'קיצור חודש נוכחי', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'יום נוכחי', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'יום נוכחי 2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'שם יום נוכחי', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'שנה נוכחית', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'שעה נוכחית', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'שעות נוכחיות', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'חודש מקומי', 'חודש מקומי 2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'חודש מקומי 1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'שם חודש מקומי', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'שם חודש מקומי קניין', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'קיצור חודש מקומי', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'יום מקומי', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'יום מקומי 2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'שם יום מקומי', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'שנה מקומית', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'שעה מקומית', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'שעות מקומיות', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'מספר ערכים', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'מספר קבצים', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'מספר משתמשים', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'מספר עריכות', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'מספר צפיות', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'שם הדף', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'שם הדף מקודד', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'מרחב השם', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'מרחב השם מקודד', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'מרחב השיחה', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'מרחב השיחה מקודד', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'מרחב הנושא', 'מרחב הערכים', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'מרחב הנושא מקודד', 'מרחב הערכים מקודד', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'שם הדף המלא', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'שם הדף המלא מקודד', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'שם דף המשנה', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'שם דף המשנה מקודד', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'שם דף הבסיס', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'שם דף הבסיס מקודד', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'שם דף השיחה', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'שם דף השיחה מקודד', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'שם דף הנושא', 'שם הערך', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'שם דף הנושא מקודד', 'שם הערך מקודד', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'הכללה:', 'MSG:' ),
+       'subst'                     => array( '0', 'ס:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'ס בטוח:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'הכללת מקור', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'ממוזער', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ימין', 'right' ),
+       'img_left'                  => array( '1', 'שמאל', 'left' ),
+       'img_none'                  => array( '1', 'ללא', 'none' ),
+       'img_width'                 => array( '1', '$1 פיקסלים', '$1px' ),
+       'img_center'                => array( '1', 'מרכז', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ממוסגר', 'מסגרת', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'לא ממוסגר', 'ללא מסגרת', 'frameless' ),
+       'img_page'                  => array( '1', 'דף=$1', 'דף $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'ימין למעלה', 'ימין למעלה=$1', 'ימין למעלה $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'גבולות', 'גבול', 'border' ),
+       'img_baseline'              => array( '1', 'שורת הבסיס', 'baseline' ),
+       'img_sub'                   => array( '1', 'תחתי', 'sub' ),
+       'img_super'                 => array( '1', 'עילי', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'למעלה', 'top' ),
+       'img_text_top'              => array( '1', 'בראש הטקסט', 'text-top' ),
+       'img_middle'                => array( '1', 'באמצע', 'middle' ),
+       'img_bottom'                => array( '1', 'למטה', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'בתחתית הטקסט', 'text-bottom' ),
+       'img_link'                  => array( '1', 'קישור=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'טקסט=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'הודעה:', 'INT:' ),
+       'sitename'                  => array( '1', 'שם האתר', 'SITENAME' ),
+       'ns'                        => array( '0', 'מרחב שם:', 'NS:' ),
+       'nse'                       => array( '0', 'מרחב שם מקודד:', 'NSE:' ),
+       'localurl'                  => array( '0', 'כתובת יחסית:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'כתובת יחסית מקודד:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'נתיב הדפים', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'כתובת השרת', 'שרת', 'SERVER' ),
+       'servername'                => array( '0', 'שם השרת', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'נתיב הקבצים', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'נתיב הסגנון', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'דקדוק:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'מגדר:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__ללא_המרת_כותרת__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ללא_המרת_תוכן__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'שבוע נוכחי', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'מספר יום נוכחי', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'שבוע מקומי', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'מספר יום מקומי', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'מזהה גרסה', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'יום גרסה', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'יום גרסה 2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'חודש גרסה', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'חודש גרסה 1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'שנת גרסה', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'זמן גרסה', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'כותב גרסה', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'רבים:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'כתובת מלאה:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'כתובת מלאה מקודד:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'כתובת קנונית:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'כתובת קנונית מקודד:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'אות ראשונה קטנה:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'אות ראשונה גדולה:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'אותיות קטנות:', 'LC:' ),
+       'uc'                        => array( '0', 'אותיות גדולות:', 'UC:' ),
+       'raw'                       => array( '0', 'ללא עיבוד:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'כותרת תצוגה', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'ללא פסיק', 'R' ),
+       'newsectionlink'            => array( '1', '__יצירת_הערה__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__ללא_יצירת_הערה__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'גרסה נוכחית', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'נתיב מקודד:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'עוגן מקודד:', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'זמן נוכחי', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'זמן מקומי', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'סימן כיווניות', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#שפה:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'שפת תוכן', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'דפים במרחב השם:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'מספר מפעילים', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'עיצוב מספר', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ריפוד משמאל', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ריפוד מימין', 'PADRIGHT' ),
+       'special'                   => array( '0', 'מיוחד', 'special' ),
+       'defaultsort'               => array( '1', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'נתיב לקובץ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'תגית', 'tag' ),
+       'hiddencat'                 => array( '1', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'דפים בקטגוריה', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'גודל דף', 'PAGESIZE' ),
+       'index'                     => array( '1', '__לחיפוש__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__לא_לחיפוש__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'מספר בקבוצה', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__הפניה_קבועה__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'רמת הגנה', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'עיצוב תאריך', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'נתיב', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ויקי', 'WIKI' ),
+       'url_query'                 => array( '0', 'שאילתה', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'ללא שגיאה', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'ללא החלפה', 'noreplace' ),
 );
 
 $specialPageAliases = array(
@@ -366,7 +367,7 @@ $messages = array(
 'tog-editsection' => 'עריכת פסקאות באמצעות קישורי [עריכה]',
 'tog-editsectiononrightclick' => 'עריכת פסקאות על ידי לחיצה ימנית על כותרות הפסקאות (דרוש JavaScript)',
 'tog-showtoc' => 'הצגת תוכן עניינים (עבור דפים עם יותר מ־3 כותרות)',
-'tog-rememberpassword' => 'שמירת הכניסה שלי בדפדפן זה ({{PLURAL:$1|ליום אחד|ל־$1 ימים|ליומיים}} לכל היותר)',
+'tog-rememberpassword' => 'שמירת הכניסה שלי בדפדפן זה ({{PLURAL:$1|ליום אחד|ליומיים|ל־$1 ימים}} לכל היותר)',
 'tog-watchcreations' => 'מעקב אחרי דפים שיצרתי וקבצים שהעליתי',
 'tog-watchdefault' => 'מעקב אחרי דפים וקבצים שערכתי',
 'tog-watchmoves' => 'מעקב אחרי דפים וקבצים שהעברתי',
@@ -510,7 +511,7 @@ $messages = array(
 'vector-action-protect' => 'הגנה',
 'vector-action-undelete' => 'ביטול מחיקה',
 'vector-action-unprotect' => 'שינוי הגנה',
-'vector-simplesearch-preference' => '×\94פע×\9cת ×\94צע×\95ת ×\94×\97×\99פ×\95ש ×\94×\9eש×\95פר×\95ת (בעיצוב וקטור בלבד)',
+'vector-simplesearch-preference' => '×\94פע×\9cת ×¡×¨×\92×\9c ×\97×\99פ×\95ש ×\9eפ×\95ש×\98 (בעיצוב וקטור בלבד)',
 'vector-view-create' => 'יצירה',
 'vector-view-edit' => 'עריכה',
 'vector-view-history' => 'הצגת היסטוריה',
@@ -570,7 +571,7 @@ $messages = array(
 'redirectedfrom' => '(הופנה מהדף $1)',
 'redirectpagesub' => 'דף הפניה',
 'lastmodifiedat' => 'שונה לאחרונה ב־$2, $1.',
-'viewcount' => 'דף זה נצפה {{PLURAL:$1|פעם אחת|$1 פעמים|פעמיים}}.',
+'viewcount' => 'דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.',
 'protectedpage' => 'דף מוגן',
 'jumpto' => 'קפיצה אל:',
 'jumptonavigation' => 'ניווט',
@@ -733,10 +734,11 @@ $1',
 'protectedpagetext' => 'דף זה מוגן ולא ניתן לערוך אותו.',
 'viewsourcetext' => 'באפשרותכם לצפות בטקסט המקור של הדף ולהעתיקו:',
 'viewyourtext' => "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
-'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה, ומוגן כדי למנוע השחתות.',
+'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.
+כדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.',
 'editinginterface' => "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.
-שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים.
\9cתר×\92×\95×\9e×\99×\9d, ×\90× ×\90 ×©×§×\9c×\95 ×\9c×\94שת×\9eש ×\91Ö¾[//translatewiki.net/wiki/Main_Page?setlang=he translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
+שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.
\9b×\93×\99 ×\9c×\94×\95ס×\99×£ ×\90×\95 ×\9cשנ×\95ת ×ª×¨×\92×\95×\9e×\99×\9d ×\91×\9b×\9c ×\90תר×\99 ×\94×\95×\95×\99ק×\99, ×\90× ×\90 ×\94שת×\9eש×\95 ×\91Ö¾[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
 'sqlhidden' => '(שאילתת ה־SQL מוסתרת)',
 'cascadeprotected' => 'דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:
 $2',
@@ -762,7 +764,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''יצאתם זה עתה מהחשבון.'''
 
-באפשרותכם להמשיך ולעשות שימוש ב{{grammar:תחילית|{{SITENAME}}}} באופן אנונימי, או [[Special:UserLogin|לשוב ולהיכנס לאתר]] עם שם משתמש זהה או אחר.
+באפשרותכם להמשיך ולעשות שימוש ב{{grammar:תחילית|{{SITENAME}}}} באופן אנונימי, או <span class='plainlinks'>[$1 לשוב ולהיכנס לאתר]</span> עם שם משתמש זהה או אחר.
 שימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.",
 'welcomecreation' => '== ברוך בואך, $1! ==
 חשבונך נוצר.
@@ -770,7 +772,7 @@ $2',
 'yourname' => 'שם משתמש:',
 'yourpassword' => 'סיסמה:',
 'yourpasswordagain' => 'הקש סיסמה שנית:',
-'remembermypassword' => 'שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|־$1 ימים|יומיים}} לכל היותר)',
+'remembermypassword' => 'שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|יומיים|־$1 ימים}} לכל היותר)',
 'securelogin-stick-https' => 'המשך שימוש ב־HTTPS אחרי הכניסה',
 'yourdomainname' => 'המתחם שלך:',
 'password-change-forbidden' => 'אינכם יכולים לשנות סיסמאות באתר זה.',
@@ -824,9 +826,9 @@ $2',
 'mailmypassword' => 'שלחו לי סיסמה חדשה',
 'passwordremindertitle' => 'סיסמה זמנית חדשה מ{{grammar:תחילית|{{SITENAME}}}}',
 'passwordremindertext' => 'מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש סיסמה
-חדשה לכניסה לחשבון ב{{grammar:תחילית|{{SITENAME}}}} ($4). נוצרה סיסמה זמנית למשתמש "$2",
+חדשה לכניסה לחשבון ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). נוצרה סיסמה זמנית למשתמש "$2",
 וסיסמה זו היא "$3". אם זו הייתה כוונתכם, תוכלו כעת להיכנס לחשבון ולבחור סיסמה חדשה.
-הסיסמה הזמנית שלכם תפקע תוך {{PLURAL:$5|יום אחד|$5 ימים|יומיים}}.
+הסיסמה הזמנית שלכם תפקע תוך {{PLURAL:$5|יום אחד|יומיים|$5 ימים}}.
 
 עליכם להיכנס לאתר ולשנות את סיסמתכם בהקדם האפשרי. אם מישהו אחר ביקש סיסמה חדשה זו או אם נזכרתם בסיסמתכם
 ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמתכם הישנה.',
@@ -837,8 +839,8 @@ $2',
 'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
 'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת.
 לפני שדברי דוא"ל אחרים יישלחו לחשבון הזה, יהיה עליך לפעול לפי ההוראות בדוא"ל, כדי לאשר שהחשבון אכן שייך לך.',
-'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב{{PLURAL:$1|שעה האחרונה|־$1 השעות האחרונות|שעתיים האחרונות}}.
-כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|$1 שעות|שעתיים}}.',
+'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
+כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
 'mailerror' => 'שגיאה בשליחת דואר: $1',
 'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.
 לפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.',
@@ -904,17 +906,17 @@ $2',
 
 $2
 
-{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|$5 ימים|יומיים}}.
+{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.
 עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
 המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
 הישנה.',
-'passwordreset-emailtext-user' => 'המשתמש $1 ב{{grammar:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
-החשבון שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
+'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
+החשבון שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
 שייכים לכתובת הדואר האלקטרוני הזו:
 
 $2
 
-{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|$5 ימים|יומיים}}.
+{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.
 עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
 המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
 הישנה.',
@@ -1023,7 +1025,8 @@ $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>,
+אך אינכם מורשים ליצור את הדף.',
 'missing-revision' => 'גרסה #$1 של הדף "{{PAGENAME}}" אינה קיימת.
 
 זה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.
@@ -1286,7 +1289,8 @@ $1",
 'revdelete-only-restricted' => 'שגיאה בהסתרת הפריט מתאריך $2, $1: אין באפשרותכם להסתיר פרטים מצפיית מפעילי מערכת בלי לבחור גם באחת מאפשרויות ההסתרה האחרות.',
 'revdelete-reason-dropdown' => '* סיבות מחיקה נפוצות
 ** הפרת זכויות יוצרים
-** חשיפת מידע אישי
+** תקציר עריכה או מידע אישי לא הולמים
+** שם משתמש לא הולם
 ** מידע שעלול להיות לשון הרע',
 'revdelete-otherreason' => 'סיבה אחרת/נוספת:',
 'revdelete-reasonotherlist' => 'סיבה אחרת',
@@ -1386,8 +1390,6 @@ $1",
 'search-interwiki-caption' => 'מיזמי אחות',
 'search-interwiki-default' => 'תוצאות ב{{GRAMMAR:תחילית|$1}}:',
 'search-interwiki-more' => '(עוד)',
-'search-mwsuggest-enabled' => 'עם הצעות',
-'search-mwsuggest-disabled' => 'ללא הצעות',
 'search-relatedarticle' => 'קשור',
 'mwsuggest-disable' => 'ביטול הצעות AJAX',
 'searcheverything-enable' => 'חיפוש בכל מרחבי השם',
@@ -1438,7 +1440,7 @@ $1",
 'prefs-rc' => 'שינויים אחרונים',
 'prefs-watchlist' => 'רשימת המעקב',
 'prefs-watchlist-days' => 'מספר הימים המרבי שיוצגו ברשימת המעקב:',
-'prefs-watchlist-days-max' => 'לכל היותר {{PLURAL:$1|יום אחד|$1 ימים|יומיים}}',
+'prefs-watchlist-days-max' => 'לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}',
 'prefs-watchlist-edits' => 'מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:',
 'prefs-watchlist-edits-max' => 'לכל היותר 1000',
 'prefs-watchlist-token' => 'אסימון לרשימת המעקב:',
@@ -1460,7 +1462,7 @@ $1",
 'stub-threshold' => 'סף לעיצוב <a href="#" class="stub">קישורים</a> לקצרמרים (בתים):',
 'stub-threshold-disabled' => 'מבוטל',
 'recentchangesdays' => 'מספר הימים שיוצגו בדף השינויים האחרונים:',
-'recentchangesdays-max' => 'לכל היותר {{PLURAL:$1|יום אחד|$1 ימים}}',
+'recentchangesdays-max' => 'לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}',
 'recentchangescount' => 'מספר העריכות שיוצגו כברירת מחדל:',
 'prefs-help-recentchangescount' => 'כולל שינויים אחרונים, היסטוריית הדף ויומנים.',
 'prefs-help-watchlist-token' => 'מילוי השדה הזה במפתח סודי ייצור הזנת RSS עבור רשימת המעקב שלכם.
@@ -1485,7 +1487,7 @@ $1",
 'timezoneregion-indian' => 'האוקיינוס ההודי',
 'timezoneregion-pacific' => 'האוקיינוס השקט',
 'allowemail' => 'קבלת דוא"ל ממשתמשים אחרים',
-'prefs-searchoptions' => '×\90פשר×\95×\99×\95ת ×\97×\99פ×\95ש',
+'prefs-searchoptions' => 'חיפוש',
 'prefs-namespaces' => 'מרחבי שם',
 'defaultns' => 'אחרת, החיפוש יתבצע במרחבי השם הבאים:',
 'default' => 'ברירת מחדל',
@@ -1705,7 +1707,7 @@ $1",
 'recentchanges-label-minor' => 'זוהי עריכה משנית',
 'recentchanges-label-bot' => 'עריכה זו בוצעה על ידי בוט',
 'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה',
-'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ב־$2 הימים האחרונים|ביומיים האחרונים}}, עד $5, $4:",
+'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ביומיים האחרונים|ב־$2 הימים האחרונים}}, עד $5, $4:",
 'rcnotefrom' => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
 'rclistfrom' => 'הצגת שינויים חדשים החל מ־$1',
 'rcshowhideminor' => '$1 שינויים משניים',
@@ -1916,7 +1918,7 @@ $1',
 'backend-fail-internal' => 'אירעה שגיאה בלתי־ידועה במאגר אחסון הקבצים הפנימי "$1".',
 'backend-fail-contenttype' => 'לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־"$1".',
 'backend-fail-batchsize' => 'למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.',
-'backend-fail-usable' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.',
+'backend-fail-usable' => 'קר×\99×\90ת ×\90×\95 ×\9bת×\99×\91ת ×\94ק×\95×\91×¥ "$1" לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
@@ -2126,7 +2128,7 @@ $1',
 'statistics-views-peredit' => 'מספר הצפיות לעריכה',
 'statistics-users' => 'ה[[Special:ListUsers|משתמשים]] הרשומים',
 'statistics-users-active' => 'המשתמשים הפעילים',
-'statistics-users-active-desc' => 'משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ב־$1 הימים האחרונים|ביומיים האחרונים}}',
+'statistics-users-active-desc' => 'משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}',
 'statistics-mostpopular' => 'הדפים הנצפים ביותר',
 
 'disambiguations' => 'דפים שמקשרים לדפי פירושונים',
@@ -2301,8 +2303,8 @@ $1',
 
 # Special:ActiveUsers
 'activeusers' => 'רשימת משתמשים פעילים',
-'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ב־$1 הימים האחרונים|ביומיים האחרונים}}.',
-'activeusers-count' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}} ב{{PLURAL:$3|יום האחרון|־$3 הימים האחרונים|יומיים האחרונים}}',
+'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.',
+'activeusers-count' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}',
 'activeusers-from' => 'הצגת משתמשים החל מ:',
 'activeusers-hidebots' => 'הסתרת בוטים',
 'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
@@ -2396,7 +2398,7 @@ $1',
 'watchmethod-list' => 'בודק את העריכות האחרונות בדפים שברשימת המעקב',
 'watchlistcontains' => 'רשימת המעקב כוללת {{PLURAL:$1|דף אחד|$1 דפים}}.',
 'iteminvalidname' => 'בעיה עם $1, שם שגוי…',
-'wlnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|ב־'''$2''' השעות האחרונות|בשעתיים האחרונות}}, עד $4, $3.",
+'wlnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־'''$2''' השעות האחרונות}}, עד $4, $3.",
 'wlshowlast' => '(הצגת $1 שעות אחרונות | $2 ימים אחרונים | $3)',
 'watchlist-options' => 'אפשרויות ברשימת המעקב',
 
@@ -3023,7 +3025,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'בדיקת JavaScript',
-'javascripttest-disabled' => 'תכונה זו לא הופעלה באתר הוויקי הזה.',
 'javascripttest-title' => 'הרצת בדיקות $1',
 'javascripttest-pagetext-noframework' => 'דף זה שמור להרצת בדיקות JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'סביבת הבדיקות "$1" אינה ידועה.',
@@ -3188,10 +3189,10 @@ $1',
 'pageinfo-authors' => 'המספר הכולל של כותבים שונים',
 'pageinfo-recent-edits' => 'מספר העריכות לאחרונה ($1)',
 'pageinfo-recent-authors' => 'מספר הכותבים הייחודיים לאחרונה',
-'pageinfo-restriction' => 'הגנה על הדף (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|מילת קסם|מילות קסם}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות}} ($1)',
+'pageinfo-toolboxlink' => 'מידע על הדף',
 
 # Skin names
 'skinname-standard' => 'קלאסי',
@@ -3254,7 +3255,7 @@ $1',
 'file-info-gif-looped' => 'בלולאה',
 'file-info-gif-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}',
 'file-info-png-looped' => 'בלולאה',
-'file-info-png-repeat' => '×\94×\95צ×\92 {{PLURAL:$1|פע×\9d ×\90×\97ת|$1 ×¤×¢×\9e×\99×\9d|פע×\9e×\99ים}}',
+'file-info-png-repeat' => '×\9e×\95צ×\92 {{PLURAL:$1|פע×\9d ×\90×\97ת|פע×\9e×\99×\99×\9d|$1 ×¤×¢×\9eים}}',
 'file-info-png-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}',
 'file-no-thumb-animation' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.'''",
 'file-no-thumb-animation-gif' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''",
@@ -3274,8 +3275,8 @@ $1',
 # 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 ימים|יומיים}}',
+'hours' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
+'days' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
 'ago' => 'לפני $1',
 
 # Bad image list
@@ -3767,7 +3768,8 @@ $5
 
 # Scary transclusion
 'scarytranscludedisabled' => '[הכללת דפים בין אתרים מבוטלת]',
-'scarytranscludefailed' => '[הכללת התבנית נכשלה בגלל $1]',
+'scarytranscludefailed' => '[אחזור התבנית נכשל עבור $1]',
+'scarytranscludefailed-httpstatus' => '[הכללת התבנית נכשלה עבור $1&rlm;: HTTP $2]',
 'scarytranscludetoolong' => '[כתובת ה־URL ארוכה מדי]',
 
 # Delete conflict
@@ -3946,7 +3948,7 @@ $5
 'version-version' => '(גרסה $1)',
 'version-license' => 'רישיון',
 'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[//www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS אחרים]',
+'version-poweredby-others' => 'אחרים',
 'version-license-info' => "מדיה־ויקי היא תוכנה חופשית; באפשרותכם להפיץ אותה מחדש ו/או לשנות אותה לפי תנאי הרישיון הציבורי הכללי של גנו המפורסם על ידי המוסד לתוכנה חופשית: גרסה 2 של רישיון זה, או (לפי בחירתכם) כל גרסה מאוחרת יותר.
 
 מדיה־ויקי מופצת בתקווה שהיא תהיה שימושית, אך '''ללא כל הבטחה לאחריות'''; אפילו לא אחריות משתמעת של '''יכולת להיסחר''' או '''התאמה למטרה מסוימת'''. ראו את הרישיון הציבורי הכללי של גנו לפרטים נוספים.
@@ -4107,6 +4109,10 @@ $5
 'feedback-bugcheck' => 'מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].',
 'feedback-bugnew' => 'בדקתי. נא לדווח כבאג חדש',
 
+# Search suggestions
+'searchsuggest-search' => 'חיפוש',
+'searchsuggest-containing' => 'כולל...',
+
 # API errors
 'api-error-badaccess-groups' => 'אינכם מורשים להעלות קבצים לאתר הוויקי הזה.',
 'api-error-badtoken' => 'שגיאה פנימית: אסימון רע.',
@@ -4151,12 +4157,12 @@ $5
 # 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-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 אלפי שנים|אלפיים שנה}}',
+'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
+'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
 
 );
index 3e3ecf9..c06a669 100644 (file)
@@ -442,6 +442,10 @@ $1',
 'youhavenewmessages' => 'आपके लिए $1 है। ($2)',
 'newmessageslink' => 'नए सन्देश',
 'newmessagesdifflink' => 'पिछला बदलाव',
+'youhavenewmessagesfromusers' => 'आपके लिये {{PLURAL:$3|एक अन्य सदस्य का सन्देश है|$3 अन्य सदस्यों के सन्देश हैं}}। ($2)',
+'youhavenewmessagesmanyusers' => 'आपके लिये $1 हैं। ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|एक नया सन्देश|नये सन्देश}}',
+'newmessagesdifflinkplural' => 'अंतिम {{PLURAL:$1|परिवर्तन}}',
 'youhavenewmessagesmulti' => '$1 पर आपके लिए नया संदेश है',
 'editsection' => 'सम्पादन',
 'editold' => 'सम्पादन',
@@ -567,6 +571,7 @@ $2',
 इसके लिये निम्न कारण दिया गया है: "\'\'$2\'\'"',
 'invalidtitle-knownnamespace' => '"$2" नामस्थान और "$3" नाम वाला गलत शीर्षक',
 'invalidtitle-unknownnamespace' => 'अज्ञात नामस्थान संख्या $1 और नाम "$2" वाला गलत शीर्षक',
+'exception-nologin' => 'लॉग इन नहीं किया है',
 
 # Virus scanner
 'virus-badscanner' => "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
@@ -576,7 +581,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''अब आपका सत्रांत हो चुका है।'''
 
-आप बेनामी हो के {{SITENAME}} का प्रयोग जारी रख सकते हैं, या उसी या किसी और सदस्य के तौर पर [[Special:UserLogin|फिर से सत्रारंभ]] कर सकते हैं।
+आप बेनामी हो के {{SITENAME}} का प्रयोग जारी रख सकते हैं, या उसी या किसी और सदस्य के तौर पर <span class='plainlinks'>[$1 फिर से सत्रारंभ]</span> कर सकते हैं।
 ध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आपका सत्र अभी भी चल रहा हो।",
 'welcomecreation' => '== आपका स्वागत है, $1 ! ==
 आपका खाता बनाया जा चुका है। अपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] परिवर्तित करना न भूलिएगा।',
@@ -586,6 +591,7 @@ $2',
 'remembermypassword' => 'इस ब्राउज़र पर मेरा लॉगिन याद रखें (अधिकतम $1 {{PLURAL:$1|दिन|दिनों}} के लिए)',
 'securelogin-stick-https' => 'प्रवेश के बाद HTTPS से जुड़े रहें',
 'yourdomainname' => 'आपका डोमेन:',
+'password-change-forbidden' => 'आप इस विकि पर कूटशब्द नहीं बदल सकते हैं।',
 'externaldberror' => 'या तो प्रमाणिकरण डाटाबेस में त्रुटि हुई है या फिर आपको अपना बाह्य खाता अपडेट करने की अनुमति नहीं है।',
 'login' => 'लॉग इन',
 'nav-login-createaccount' => 'सत्रारंभ / खाता खोलें',
@@ -1191,8 +1197,6 @@ $1",
 'search-interwiki-caption' => 'अन्य प्रकल्प',
 'search-interwiki-default' => '$1 के परिणाम:',
 'search-interwiki-more' => '(और)',
-'search-mwsuggest-enabled' => 'सुझाव सहित',
-'search-mwsuggest-disabled' => 'सुझाव नहीं',
 'search-relatedarticle' => 'सम्बंधित',
 'mwsuggest-disable' => 'AJAX सुझाव बंद करें',
 'searcheverything-enable' => 'सभी नामस्थानों में खोजें',
@@ -3803,6 +3807,9 @@ $5
 'feedback-bugcheck' => 'शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।',
 'feedback-bugnew' => 'मैं जाँच कीया। एक नया बग रिपोर्ट करें',
 
+# Search suggestions
+'searchsuggest-search' => 'खोज',
+
 # API errors
 'api-error-badaccess-groups' => 'आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.',
 'api-error-badtoken' => 'आंतरिक त्रुटि: बुरी टोकन।',
index 6205132..5e89a2f 100644 (file)
  * @author Thakurji
  */
 
+$namespaceNames = array(
+       NS_MEDIA            => 'saadhan',
+       NS_SPECIAL          => 'khaas',
+       NS_TALK             => 'baat',
+       NS_USER             => 'sadasya',
+       NS_USER_TALK        => 'sadasya_ke_baat',
+       NS_PROJECT_TALK     => '$1_baat',
+       NS_FILE             => 'file',
+       NS_FILE_TALK        => 'file_ke_baat',
+       NS_MEDIAWIKI_TALK   => 'Mediawiki_ke_baat',
+       NS_TEMPLATE_TALK    => 'Template_ke_baat',
+       NS_HELP             => 'madat',
+       NS_HELP_TALK        => 'madat_ke_baat',
+       NS_CATEGORY         => 'vibhag',
+       NS_CATEGORY_TALK    => 'voibhag_ke_baat',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Jorr ke niche line khicho:',
@@ -419,7 +436,7 @@ Jon administrator iske lock karis hae, koi kaaran nai diis hae: "$3"',
 # Login and logout pages
 'logouttext' => "'''Aap abhi logged out hai.'''
 
-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 [[Special:UserLogin|log in kare sakta hai]].
+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.
@@ -1039,8 +1056,6 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset
 'search-interwiki-caption' => 'Saathe ke project',
 'search-interwiki-default' => '$1 ke result:',
 'search-interwiki-more' => '(aur)',
-'search-mwsuggest-enabled' => 'bichar ke saathe',
-'search-mwsuggest-disabled' => 'koi bichar nai hae',
 'search-relatedarticle' => 'sambandh rakkhe hai',
 'mwsuggest-disable' => 'AJAX sughao ke beasar karo',
 'searcheverything-enable' => 'Sab namespaces me khojo',
@@ -3010,4 +3025,7 @@ Wahii line pe aur koi jorr exception consider karaa jai i.e. jahaan pe panna sak
 'revdelete-unrestricted' => 'sysops se hatawa gae rukawat',
 'newuserlog-byemail' => 'password ke e-mail se bheja gais hai',
 
+# Search suggestions
+'searchsuggest-search' => 'Khojo',
+
 );
index 9da7764..983d30b 100644 (file)
@@ -24,7 +24,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Taguon ang mga nabantayan nga na islan na nga bag-o lang gin obra',
 'tog-newpageshidepatrolled' => 'Taguon ang mga nabantayan  nga pahina sa bag-ong lista sang mga pahina',
 'tog-extendwatchlist' => 'Palaparon ang watchlist para makita ang tanan nga mga na-islan, indi lang man sa pinaka bag-o',
-'tog-usenewrc' => 'Gamiton ang ginpanami nga bag-o lang gid nga na-islan (nagakilanlan JavaScript)',
+'tog-usenewrc' => 'Grupohon ang mga pagbag-o kada panid sa bag-o lang gid na ilisan kag sa ginabantayan (nagakilanlan sang JavaScript)',
 'tog-numberheadings' => 'Auto-numero heading',
 'tog-showtoolbar' => 'Ipakita ang edit toolbar (nagakilanlan JavaScript)',
 'tog-editondblclick' => 'Islan ang pahina kung i-doble klik mo (nagakilanlan JavaScript)',
@@ -32,17 +32,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Sugtan ang pag-ilis sang seksyon paagi sa pagtum-ok sang natoo sa mouse sa titulo sang seksyon (nagakinahanglan sang JavaScript)',
 'tog-showtoc' => 'Ipakita ang sinulatan sang nagabug-os (para sang mga panid nga may yara sang masobra sa 3 nga pangolohan)',
 'tog-rememberpassword' => 'Dumdumon ang akon password sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
-'tog-watchcreations' => 'Idugang ang mga panid nga akon pagahimoon sa akon ginabantayan',
-'tog-watchdefault' => 'Idugang ang mga panid nga akon gina-ilisan sa akon ginabantayan',
-'tog-watchmoves' => 'Idugang ang mga panid nga akon pagasaylohon sa akon ginabantayan',
-'tog-watchdeletion' => 'Idugang ang mga panid nga akon pagadulaon sa akon ginabantayan',
+'tog-watchcreations' => 'Magdugang sang mga panid nga akon buhaton kag mga hilera nga akon igapasaka sa akon mga ginabantayan',
+'tog-watchdefault' => 'Idugang ang mga panid kag hilera nga akon ginbag-o sa akon mga ginabantayan',
+'tog-watchmoves' => 'Idugang ang mga panid kag hilera nga akon ginsaylo sa akon mga ginabantayan',
+'tog-watchdeletion' => 'Idugang ang mga panid kag hilera nga akon dulaon sa akon mga ginabantayan',
 'tog-minordefault' => 'Markahan dayon ang tanan nga diyutay nga pag-ilis',
 'tog-previewontop' => 'Ipakita ang preview bag-o ang kahon sang pag-ilis',
 'tog-previewonfirst' => 'Ipakita ang preview sa pinaka-una nga pag-ilis',
 'tog-nocache' => 'Untaton ang kina-iya sang brawser nga magtago sang panid',
-'tog-enotifwatchlistpages' => 'Padal-i ako sang e-mail kon ang panid nga akon ginabantayan paga-ilisan',
+'tog-enotifwatchlistpages' => 'Padal-i ako sang e-mail kon ang panid kag hilera nga akon ginabantayan paga-ilisan',
 'tog-enotifusertalkpages' => 'Padal-i ako sang e-mail kon paga-ilisan ang akon panid sang pag-hisayranay',
-'tog-enotifminoredits' => 'Padal-i man ako sang e-mail kon may diyutay nga pag-ilis sa akon mga panid',
+'tog-enotifminoredits' => 'Padal-i man ako sang e-mail kon may diyutay nga pag-ilis sa akon mga panid kag hilera',
 'tog-enotifrevealaddr' => 'Ipakita ang akon e-mail adres sa mga e-mail nga nagapahibalo',
 'tog-shownumberswatching' => 'Ipakita ang numero sang mga nagalantaw nga manug-gamit',
 'tog-oldsig' => 'Nagapabilin nga pirma:',
@@ -281,6 +281,10 @@ Lantawa ang [[Special:Version|panid sang mga bersiyon]].',
 'youhavenewmessages' => 'Ikaw may $1 ($2).',
 'newmessageslink' => 'mga bag-ong mensahe',
 'newmessagesdifflink' => 'nagligad nga ginbag-o',
+'youhavenewmessagesfromusers' => 'May yara ka sang $1 halin sa {{PLURAL:$3|lain nga manuggamit|$3 mga manuggamit}} ($2).',
+'youhavenewmessagesmanyusers' => 'May yara ka sang $1 halin sa madamo nga manuggamit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}',
+'newmessagesdifflinkplural' => 'pinaka-ulihi nga {{PLURAL:$1|pagbag-o|mga pagbag-o}}',
 'youhavenewmessagesmulti' => 'May mga bag-ong mensahe ka sa $1',
 'editsection' => 'ilisan',
 'editold' => 'ilisan',
@@ -333,11 +337,11 @@ May lista sang mga nagaka-igo nga mga espesyal nga mga panid sa [[Special:Specia
 'error' => 'Sala/Eror',
 'databaseerror' => 'May sala sa database',
 'dberrortext' => 'May sala sa syntax sang pagpangita sa database.
-Ini nagakahulogan nga basi may sapat-sapat sa software.
-Ang pinaka-ulihe nga pamilit sa pagpangita sa database amo ang:
-<blockquote><tt>$1</tt></blockquote>
-nga halin sa buluhaton nga "<tt>$2</tt>".
-Ang database nagbalik sang sala/eror nga "<tt>$3: $4</tt>".',
+Ini nagakahulogan nga basi may sapat-sapat/bug sa software.
+Ang pinaka-ulihe nga pagtilaw sa pagpangita sa database amo ang:
+<blockquote><code>$1</code></blockquote>
+nga halin sa buluhaton nga "<code>$2</code>".
+Ang database nagbalik sang sala/eror nga "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'May sala sa syntax sang pagpangita sa database.
 Ang pinaka-ulihe nga pamilit sa pagpangita sa database amo ang:
 "$1"
@@ -373,22 +377,27 @@ Palihog isugid sa [[Special:ListUsers/sysop|administrador]], kag i-lista ang iya
 'badarticleerror' => 'Ang ini nga hulag indi pwede mabuhat sa sini nga panid.',
 'cannotdelete' => 'Ang panid ukon hilera nga "$1" indi mahimo nga pagapanason.
 Mahimo nga napanas na ini sang iban.',
+'cannotdelete-title' => 'Indi mahimo nga dulaon ang panid nga "$1"',
+'delete-hook-aborted' => 'Ang pag-ilis gin-untat sang taga.
+Wala ini naghatag sang ano man nga eksplenasyon.',
 'badtitle' => 'Malain nga titulo',
 'badtitletext' => 'Ang ginapangayo mo nga titulo ka pahina ay sala, blangko, ukon indi ensakto ang pagtabid sang inter-lengwahe o inter-wiki na titulo.
 Siguro may-ara ini sang isa ukon madamo nga karakter nga indi ginabaton kag ginagamit sa titulo.',
-'perfcached' => 'Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. May maksimum nga {{PLURAL:$1|isa ka resulta nga|$1 mga resulta nga}} ara sa nakatago nga datos.',
+'perfcachedts' => 'Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. May maksimum nga {{PLURAL:$4|isa ka resulta nga|$4 mga resulta nga}} ara sa nakatago nga datos.',
 'querypage-no-updates' => 'Ang mga pagbag-o sa sini nga panid karon ginpa-untat.
 Ang datos nga yari diri indi pagliwaton.',
 'wrong_wfQuery_params' => 'Indi insakto nga mga parametro sa wfQuery()<br />
 Kapuslanan: $1<br />
 Pagpamangkot: $2',
 'viewsource' => 'Lantawon ang ginhalinan',
+'viewsource-title' => 'Lantawon ang ginhalinan sang $1',
 'actionthrottled' => 'Ang paghulag ginpunggan',
 'actionthrottledtext' => 'Bilang pagpangontra sa span, ginalimitahan ka sa pagbuhat sang sini nga paghulag sa tuman ka damo nga beses sa malip-ot nga tinion, kag naglapaw ka na sa sini nga patakaran.
 Palihog tilawan mo liwat pagkatapos sang malip-ot nga tinion.',
 'protectedpagetext' => 'Ang ini nga panid ginpangapinan agod to mapunggan ang pag-ilis sini.',
 'viewsourcetext' => 'Mahimo mo nga makita kag makopya ang ginhalinan sang sini nga panid:',
+'viewyourtext' => "Mahimo mo nga makita kag makopya ang ginhalinan sang '''imo mga pagbag-o''' sa sini nga panid:",
 'protectedinterface' => 'Ang ini nga panid nagahatag sang mga teksto sang interface para sa software, kag ginapangapinan agod indi maabuso.',
 'editinginterface' => "'''Pahibalo:''' Naga-ilis ka sang panid nga ginagamit sa paghatag sang mga teksto sang interface para sa software.
 Ang mga pagbag-o sang sini nga panid maga-apekto sa hitsura sang interface sang panid sang manug-gamit sang iban.
@@ -402,6 +411,13 @@ $2',
 'ns-specialprotected' => 'Ang mga espesyal nga panid indi mahimo nga paga-ilisan.',
 'titleprotected' => 'Ang ini nga titulo ginpangapinan batok sa pagbuhat ni [[User:$1|$1]].
 Ang iya rason amo ang "\'\'$2\'\'".',
+'filereadonlyerror' => 'Indi mahimo nga ma-ilisan ang hilera nga "$1" tungod kay ang gintaguan sang mga hilera nga "$2" ara sa estado nga mahimo lang mabasa.
+
+Ang administrador nga nag-kandado sini naghatag sang paathag nga: "$3".',
+'invalidtitle-knownnamespace' => 'Sala ang titulo sang may ngalanligwa nga "$2" kag taksto nga "$3"',
+'invalidtitle-unknownnamespace' => 'Sala nga titulo nga may wala mahibaluan nga ngalanligwa nga numero nga $1 kag teksto nga "$2"',
+'exception-nologin' => 'Wala naka-sulod',
+'exception-nologin-text' => 'Ang ini nga panid ukon tikang nagakinahanglan nga ikaw nakasulod/log-in sa sini nga wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Malain nga konpigurasyon: wala makilal-an nga manuglantaw sang virus: ''$1''",
@@ -411,7 +427,7 @@ Ang iya rason amo ang "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Naka-guha ka na.'''
 
-Makapadayon ka sa gihapon sa paggamit sang {{SITENAME}} nga indi makilal-an, ukon mahimo ka man [[Special:UserLogin|magsulod liwat]] bilang amo sa gihapon ukon lain nga nga manug-gamit.
+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.
@@ -422,6 +438,7 @@ Indi pagkalimti ang pag-ilis sang imo mga [[Special:Preferences|{{SITENAME}} pag
 'remembermypassword' => 'Dumdumon ang akon pagsulod sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
 'securelogin-stick-https' => 'Magpabilin nga nakatakod sa HTTPS pagkatapos magsulod',
 'yourdomainname' => 'Imo dominyo',
+'password-change-forbidden' => 'Indi ka mahimo nga makailis sang pasword sa sini nga wiki.',
 'externaldberror' => 'Mahimo nga may ara sang sala sa pagpamatood sang database ukon wala ka sa lugar nga magbag-o sang imo pang-guha nga akawnt.',
 'login' => 'Mag sulod',
 'nav-login-createaccount' => 'Magsulod / maghimo account',
@@ -501,6 +518,7 @@ Wala pa sang e-mail nga ipadala diri para sa bisan ano sa masunod nga mga katung
 'invalidemailaddress' => 'Ang e-mail adres indi mabaton tungod kay nagagwa nga sala ang iya plastar.
 Palihog butang sang ginplastar sing maayo nga adres ukon panason nal lang ang lugar.',
 'cannotchangeemail' => 'Ang mga e-mail adres indi mahimo nga ilisan sa sini nga wiki.',
+'emaildisabled' => 'Ang ini nga lugar indi makapadala sang mga e-mail.',
 'accountcreated' => 'Nahimo na ang akawnt',
 'accountcreatedtext' => 'Ang akawnt sang manug-gamit nga $1 nahimo na.',
 'createaccount-title' => 'Pagbuhat sang akawnt para sa {{SITENAME}}',
@@ -682,17 +700,20 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} islan ini nga pahina]</span>.',
 'noarticletext-nopermission' => 'Wala subong sang teksto ang ini nga panid.
 Pwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga panid]] sa iban man nga panid,
 ukon <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs]</span>.',
+'missing-revision' => 'Ang ini nga pag-ilis nga #$1 sang panid nga ginhinanglan nga "{{PAGENAME}}" wala naga-eksister.
+
+Ini kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang hisayranay sa isa ka panid nga gindula na.
+Ang mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 'userpage-userdoesnotexist' => 'Ang akawnt sang manuggamit nga "<nowiki>$1</nowiki>" wala pa marehistro.
 Palihog tsek kon luyag mo nga himuon/ilisan ang ini nga panid.',
 'userpage-userdoesnotexist-view' => 'Ang akawnt sang manuggamit nga "$1" wala pa marehistro.',
 'blocked-notice-logextract' => 'Ang ini nga manuggamit ginapunggan karon.
 Ang pinaka-ulihi nga log sa pagpuggong yara sa idalom para mahibaluan nimo:',
 'clearyourcache' => "'''Tandaan:''' Pagkatapos nga tiponon, mahimo nga kinahanglan mo pa nga i-baipas ang cache sang imo brawser agod makita ang mga pagbag-o.
-* '''Firefox / Safari:''' pinduton sing madugay ang ''Shift'' samtang ginapitik ang ''Reload'', ukon pinduton ang ''Ctrl-F5'' ukon ''Ctrl-R'' (''Command-R'' sa Mac)
-* '''Google Chrome:''' pinduton ang ''Ctrl-Shift-R'' (''Command-Shift-R'' sa Mac)
+* '''Firefox / Safari:''' pinduton sing madugay ang ''Shift'' samtang ginapitik ang ''Reload'', ukon pinduton ang ''Ctrl-F5'' ukon ''Ctrl-R'' (''-R'' sa Mac)
+* '''Google Chrome:''' pinduton ang ''Ctrl-Shift-R'' (''-Shift-R'' sa Mac)
 * '''Internet Explorer:''' pinduton sing madugay ang ''Ctrl'' samtang ginapitik ''Refresh'', ukon pinduton ang ''Ctrl-F5''
-* '''Konqueror:''' pitikon ang ''Reload'' ukon pinduton ang ''F5''
-* '''Opera:''' hawanon ang  cache sa ''Tools → Preferences''",
+* '''Opera:''' Tan-awon ang  cache sa ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Pagbulig:''' Gamiton ang \"{{int:showpreview}}\" nga tulom-ukon agod matilawan ang imo bag-o nga CSS bag-o magtipon.",
 'userjsyoucanpreview' => "'''Pagbulig:''' Gamiton ang \"{{int:showpreview}}\" nga tulom-ukon agod matilawan ang imo bag-o nga JavaScript bag-o magtipon.",
 'usercsspreview' => "'''Tandai nga ginalantaw mo pa lang ang imo CSS sang manuggamit.'''
@@ -709,6 +730,7 @@ Sa mga pahungod nga mga panid nga .css and .js magamit sang titulo nga may gagma
 'note' => "'''Pansinon:'''",
 'previewnote' => "'''Tandaan nga prebyu lamang ini.'''
 Wala pa nabutang ang imo nga ginbag-o!",
+'continue-editing' => 'Padayunon ang pagbag-o',
 'previewconflict' => 'Ang ini nga paglantaw nagapakita sang mga teksto nga yara sa may ibabaw ayon nga amo man ang magagwa kon luyag mo na ini nga pagatiponon.',
 'session_fail_preview' => "'''Nagapangayo kami sang pasaylo! Indi namon ma-proseso ang imo pag-ilis tungod sa pagkadula sang datos sang sesyon.'''
 Palihog tilawi liwat.
@@ -724,6 +746,7 @@ Ang pag-ilis wala ginbaton agod to nga malikawan ang kalainan sang mga teksto sa
 Ini nagakatabo kon kaisa kon nagagamit ka sang nakabase sa web nga serbisyo proxy nga madamo sing lusot.",
 'edit_form_incomplete' => "'''Ang iban nga bahin sang formas sa pag-ilis wala nakalab-ot sa serber; palihog verificar kon ang imo pag-ilis santo man sa gihapon kag tilawi liwat.'''",
 'editing' => 'Gina-islan $1',
+'creating' => 'Ginabuhat ang $1',
 'editingsection' => 'Gina-Islan $1 (seksiyon)',
 'editingcomment' => 'Gina-islan ang $1 (bag-o nga bahin)',
 'editconflict' => 'May pagpamatok sa pag-ilis: $1',
@@ -747,7 +770,7 @@ Naga promisa ka man sa amon nga ikaw mismo ang nagsulat sina, o ginkopya mo ini
 Kon indi mo luyag nga ang imo sinulatan paga-ilisan nga wala sin kaluoy, ginapangabay nga indi mo ina diri pag-ipasa.<br />
 Ikam man nagasumpa sa amon karon nga ikaw mismo ang nagsulat sini, ukon ginkopya mo ini sa pampubliko nga domain ukon kaparehas nga libre nga ginkuhaan (palihog lantaw sang $1 sa mga detalye).
 '''Indi magpadala sang mga na kapirayt nga mga inubrahan nga wala sing lisensya!'''",
-'longpageerror' => "'''Eror: Ang teksto nga imo ginpasa may kalabaon nga $1, nga mas malaba pa sang ginpasugtan nga labing malaba nga $2.'''
+'longpageerror' => "'''Eror: Ang teksto nga imo ginpasa may kalabaon nga {{PLURAL:$1|isa ka kilobayt|$1 ka mga kilobayt}}, nga mas malaba pa sang ginpasugtan nga labing malaba nga {{PLURAL:$2|isa ka kilobayt|$2 ka mga kilobayt}}.'''
 Indi ini matipon.",
 'readonlywarning' => "'''Phibalo: Ang database ginkandaduhan para sa pagpabilin, gani indi ka mahimo nga magtipon sang imo mga pag-ilis subong.'''
 Mahimo nga maluyagon ikaw nga mag-utod-kag-tapik sang teksto sa isa kag hilera sang teksto kag ini pagatipon mo sa lain nga tinion.
@@ -790,6 +813,7 @@ Ini nagapakita nga gindula na.',
 'edit-no-change' => 'Ang imo pag-ilis ginpabayaan lamang, kay wala sang pagbag-o nga natabo sa teksto.',
 'edit-already-exists' => 'Indi mahimo ang bag-o nga panid.
 Naga-eksister na ini.',
+'defaultmessagetext' => 'Teksto sang mensahe nga wala pa ma-ilisan',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Pahibalo:''' Ang ini nga panid may yara sang madamo nga mahal nga pagtawag sang kapusalanan parser.
@@ -805,6 +829,13 @@ Ang ini nga pagbinaisay wala na gin-upod pa.",
 'parser-template-loop-warning' => 'Ang natiktikan nga pagpukot: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Ang ginalimitahan nga rekursyon sang templeyt nalab-ot na ($1)',
 'language-converter-depth-warning' => 'Ang ginalimitahan nga kadalumon sa pag-ilis sang hambalanon nalab-ot na ($1)',
+'node-count-exceeded-category' => 'Mga panid kon diin ang pag-isip sang node nagsobra',
+'node-count-exceeded-warning' => 'Ang panid nagsobra na sa pag-isip sang node',
+'expansion-depth-exceeded-category' => 'Mga panid kon diin ang kadalumon sang pagpalapad nagsobra na',
+'expansion-depth-exceeded-warning' => 'Ang panid nagsobra na sa kadalumon sang pagpalapad',
+'parser-unstrip-loop-warning' => 'May loop nga unstrip nga nakita',
+'parser-unstrip-recursion-limit' => 'Naglapaw ka na sa ginapasugtan nga pagliwat-liwat ($1)',
+'converter-manual-rule-error' => 'May sala nga nakita sa mano-mano nga pagsulunsan sa pagbadbad sang lenggwahe',
 
 # "Undo" feature
 'undo-success' => 'Ang pag-ilis indi mahuman.
@@ -943,6 +974,7 @@ Palihog sekyar sang mga logs.',
 'revdelete-reason-dropdown' => '*Masami nga rason sang pagdula
 ** Paglapas sang kinamatarong-kontra-pagkopya
 ** Indi nagakadapat nga impormasyon pangkaugalingon
+** Indi nagakadapat nga gamit-pangalan
 ** Mahimo nagapangguba-kinamatarong nga impormasyon',
 'revdelete-otherreason' => 'Iban/dugang nga rason:',
 'revdelete-reasonotherlist' => 'Iban nga rason',
@@ -952,7 +984,7 @@ Palihog sekyar sang mga logs.',
 # Suppression log
 'suppressionlog' => 'Log sang pagkakas',
 'suppressionlogtext' => 'Sa idalom isa ka lista sang mga gindula kag pagpugong nga naga-dala sang mga unod nga gintago halin sa mga administrador.
-Lantawa ang [[Special:BlockList|lista sang mga ginpunggan nga IP]] para sa lista sang mga naga-eksister nga pagdula kag pagpugong.',
+Lantawa ang [[Special:BlockList|lista sang mga ginpunggan]] para sa lista sang mga naga-eksister nga pagdula kag pagpugong.',
 
 # History merging
 'mergehistory' => 'Isugpon ang mga kasaysayan sang panid',
@@ -986,7 +1018,9 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 'mergelogpagetext' => 'Sa dalom isa ka lista sang mga pinaka-ulihe nga pagsugpon sang isa ka kasaysayan sang panid sa isa pa gid.',
 
 # Diffs
-'history-title' => 'Rebisyon sang historya sa "$1"',
+'history-title' => 'Rebisyon sang hisayranay sa "$1"',
+'difference-title' => 'Kinalain sang mga pagbag-o sa "$1"',
+'difference-title-multipage' => 'Kinalain sang mga panid nga "$1" kag "$2"',
 'difference-multipage' => '(Kinala-in sang mga panid)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'I-kompara ang pinilian nga mga rebisyon',
@@ -994,6 +1028,10 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 'editundo' => 'bawi-on ang pag ilis',
 'diff-multi' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang {{PLURAL:$2|isa ka manuggamit|$2 ka mga manuggamit}} nga wala ginpakita)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang masobra $2 ka {{PLURAL:$2|manuggamit|mga manuggamit}} nga wala ginpakita)',
+'difference-missing-revision' => 'May {{PLURAL:$2|isa ka pagbag-o|$2 ka mga pagbag-o}} san sini nga kinalain ($1) ang wala makita.
+
+Ini kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang isa ka panid nga gindula na.
+Ang mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 
 # Search results
 'searchresults' => 'Resulta sang Pagpangita',
@@ -1036,8 +1074,6 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 'search-interwiki-caption' => 'Mga Utod proyekto',
 'search-interwiki-default' => '$1 mga resulta:',
 'search-interwiki-more' => '(damu)',
-'search-mwsuggest-enabled' => 'may suhestiyon',
-'search-mwsuggest-disabled' => 'wala suhestiyon',
 'search-relatedarticle' => 'Konektado',
 'mwsuggest-disable' => 'Untaton ang mga suhestiyon sang AJAX',
 'searcheverything-enable' => 'Pangitaon sa tanan nga espasyo sang pangalan',
@@ -1084,11 +1120,12 @@ Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga m
 'prefs-beta' => 'Mga kaupod sang Beta',
 'prefs-datetime' => 'Petsa kag oras',
 'prefs-labs' => 'Mga kaupod sang Labs',
+'prefs-user-pages' => 'Mga panid sang manuggamit',
 'prefs-personal' => 'Profayl sang manuggamit',
 'prefs-rc' => 'Mga Bag-o nga Inislan',
 'prefs-watchlist' => 'Lista sang mga ginabantayan',
 'prefs-watchlist-days' => 'Mga adlaw nga ipakita sa lista sang ginabantayan:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'Indi magtaas sa $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
 'prefs-watchlist-edits' => 'Ang pinakataas nga beses sang pag-ilis nga ipakita sa ginpalawig nga lista sang ginabantayan:',
 'prefs-watchlist-edits-max' => 'Pinakataas nga numero: 1000',
 'prefs-watchlist-token' => 'Token sang lista sang ginabantayan:',
@@ -1168,6 +1205,11 @@ Ini indi dapat nga magsobra sa $1 {{PLURAL:$1|ka karakter|ka mga karakter}} ang
 'gender-female' => 'Babayi',
 'prefs-help-gender' => '',
 'email' => 'E-mail',
+'prefs-help-realname' => 'Ang matood-tood nga pangalan mahimo nga indi gamiton.
+Kon imo ini luyag nga ihatag, ini gamiton sa paghatag sing pagkilala sa imo nga gin-ubra.',
+'prefs-help-email' => 'Ang adres sang e-mail mahimo nga indi ihatag, apang kinahanglan ini sa pagliwat sang paswod, kon matabo nga imo ini malipatan.',
+'prefs-help-email-others' => 'Mahimo mo man pilion nga ma-kontak ka sang iban paagi sa e-mail paagi sa isa ka link sa imo manuggamit ukon gina-hisayranay nga panid.
+Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'prefs-help-email-required' => 'Kinahanglan ang imo e-mail',
 'prefs-signature' => 'pirma',
 
index d1766d1..e30bec1 100644 (file)
@@ -151,132 +151,132 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZUREĐIVANJAODLOMAKA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTAČNIMJESECIMEGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTAČNIMJESECKRAT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MJESNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MJESNIMJESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'MJESNIMJESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MJESNIMJESECIMEGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MJESNIMJESECKRAT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'MJESNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'MJESNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'MJESNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'MJESNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'MJESNOVRIJEME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'MJESNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJSURADNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHSURADNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'IMESTRANICE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'IMESTRANICEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RAZGOVORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PROSTORSTRANICE', 'IMPSTRANICE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PROSTORSTRANICEE', 'IMPSTRANICEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMEPODSTRANICEE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEOSNOVNESTRANICE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMEOSNOVNESTRANICEE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMERAZGOVORASTRANICE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMERAZGOVORASTRANICEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMEGLAVNESTRANICE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMEGLAVNESTRANICEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'subst'                   => array( '0', 'ZAMJENA:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'minijatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'left' ),
-       'img_none'                => array( '1', 'ništa', 'none' ),
-       'img_center'              => array( '1', 'središte', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezokvira', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'obrub', 'border' ),
-       'img_baseline'            => array( '1', 'osnovnacrta', 'baseline' ),
-       'img_sub'                 => array( '1', 'potpis', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'natpis', 'eks', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'tekst-vrh', 'text-top' ),
-       'img_middle'              => array( '1', 'pola', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dno', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMEPROJEKTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IMP:', 'NS:' ),
-       'localurl'                => array( '0', 'MJESNIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'MJESNIURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'IMESERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'PUTANJASKRIPTE', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__BEZPRETVARANJANASLOVA__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZPRETVARANJASADRŽAJA__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTAČNITJEDAN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTAČNIDANTJEDNA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MJESNITJEDAN', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'MJESNIDANTJEDNA', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDIZMJENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DANIZMJENE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DANIZMJENE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MJESECIZMJENE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'GODINAIZMJENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VREMENSKAOZNAKAIZMJENE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNIURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNIURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'MSPRVO:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'VSPRVO:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MS:', 'LC:' ),
-       'uc'                      => array( '0', 'VS:', 'UC:' ),
-       'raw'                     => array( '0', 'NEOBRAĐENO:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'POKAŽINASLOV', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'NEO', 'R' ),
-       'newsectionlink'          => array( '1', '__NOVIODLOMAKPOVEZNICA__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'TRENUTAČNAIZMJENA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODIRANJE:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'SIDROKODIRANJE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'MJESNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JEZIKPROJEKTA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRANICEPOPROSTORU:', 'STRANICEUIMP', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'OBLIKBROJA', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'POSTAVALIJEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'POSTAVADESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'defaultsort'             => array( '1', 'GLAVNIRASPORED:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'PUTANJADATOTEKE:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICEPOKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIČINASTRANICE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__KAZALO__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZKAZALA__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__NEPOMIČNOPREUSMJERAVANJE__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZUREĐIVANJAODLOMAKA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTAČNIMJESECIMEGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTAČNIMJESECKRAT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MJESNIMJESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MJESNIMJESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'MJESNIMJESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MJESNIMJESECIMEGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MJESNIMJESECKRAT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'MJESNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'MJESNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'MJESNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'MJESNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'MJESNOVRIJEME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'MJESNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJSURADNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHSURADNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'IMESTRANICE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'IMESTRANICEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RAZGOVORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PROSTORSTRANICE', 'IMPSTRANICE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PROSTORSTRANICEE', 'IMPSTRANICEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMEPODSTRANICEE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEOSNOVNESTRANICE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMEOSNOVNESTRANICEE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMERAZGOVORASTRANICE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMERAZGOVORASTRANICEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMEGLAVNESTRANICE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMEGLAVNESTRANICEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subst'                     => array( '0', 'ZAMJENA:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'minijatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'left' ),
+       'img_none'                  => array( '1', 'ništa', 'none' ),
+       'img_center'                => array( '1', 'središte', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezokvira', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'obrub', 'border' ),
+       'img_baseline'              => array( '1', 'osnovnacrta', 'baseline' ),
+       'img_sub'                   => array( '1', 'potpis', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'natpis', 'eks', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'tekst-vrh', 'text-top' ),
+       'img_middle'                => array( '1', 'pola', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dno', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMEPROJEKTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IMP:', 'NS:' ),
+       'localurl'                  => array( '0', 'MJESNIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'MJESNIURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'IMESERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'PUTANJASKRIPTE', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__BEZPRETVARANJANASLOVA__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZPRETVARANJASADRŽAJA__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTAČNITJEDAN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTAČNIDANTJEDNA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MJESNITJEDAN', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'MJESNIDANTJEDNA', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDIZMJENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DANIZMJENE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DANIZMJENE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MJESECIZMJENE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'GODINAIZMJENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VREMENSKAOZNAKAIZMJENE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNIURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNIURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'MSPRVO:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'VSPRVO:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MS:', 'LC:' ),
+       'uc'                        => array( '0', 'VS:', 'UC:' ),
+       'raw'                       => array( '0', 'NEOBRAĐENO:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'POKAŽINASLOV', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'NEO', 'R' ),
+       'newsectionlink'            => array( '1', '__NOVIODLOMAKPOVEZNICA__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'TRENUTAČNAIZMJENA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODIRANJE:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'SIDROKODIRANJE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MJESNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JEZIKPROJEKTA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRANICEPOPROSTORU:', 'STRANICEUIMP', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'OBLIKBROJA', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'POSTAVALIJEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'POSTAVADESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'defaultsort'               => array( '1', 'GLAVNIRASPORED:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'PUTANJADATOTEKE:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICEPOKATEGORIJI', 'STRANICEUKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIČINASTRANICE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__KAZALO__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZKAZALA__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__NEPOMIČNOPREUSMJERAVANJE__', '__STATICREDIRECT__' ),
 );
 
 $datePreferences = array(
@@ -481,7 +481,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Inačice',
 
-'errorpagetitle' => 'Pogreška',
+'errorpagetitle' => 'Pogrješka',
 'returnto' => 'Vrati se na $1.',
 'tagline' => 'Izvor: {{SITENAME}}',
 'help' => 'Pomoć',
@@ -711,7 +711,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Odjavili ste se.'''
 
-Možete nastaviti s korištenjem {{SITENAME}} neprijavljeni, ili se možete ponovo [[Special:UserLogin|prijaviti]] pod istim ili drugim imenom.
+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.
@@ -781,7 +781,7 @@ koristiti staru lozinku.',
 Prije nego što pošaljemo daljnje poruke, molimo Vas da otvorite e-mail i slijedite u njemu sadržana uputstva kako biste potvrdili da je e-mail adresa zaista Vaša.',
 'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu lozinke, u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.
 Da bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu lozinke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.',
-'mailerror' => 'Pogreška pri slanju e-maila: $1',
+'mailerror' => 'Pogrješka pri slanju e-pošte: $1',
 'acct_creation_throttle_hit' => 'Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjem danu, što je najveći dopušteni broj u tom vremenskom razdoblju.
 Zbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradničke račune.',
 'emailauthenticated' => 'Vaša e-mail adresa je ovjerena $2 u $3.',
@@ -1019,7 +1019,8 @@ ove stranice. Ako je sačuvate, sve će promjene učinjene nakon ove inačice bi
 Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom.
 '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
 'copyrightwarning2' => "Molimo uočite da svi suradnici mogu mijenjati sve doprinose na {{SITENAME}}. Ako ne želite da se Vaše pisanje nemilosrdno uređuje, nemojte ga slati ovdje.<br /> Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom (vidi $1 za detalje). '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
-'longpageerror' => "'''GREŠKA: Tekst koji ste unijeli dug je $1 kilobajta, što je više od maksimalnih $2 kilobajta. Nije ga moguće snimiti.'''",
+'longpageerror' => "'''Pogrješka: Tekst koji ste unijeli dug je {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je više od maksimalno {{PLURAL:$2|jednog kilobajta|$2 kilobajta}}.'''
+Nije ga moguće snimiti.",
 'readonlywarning' => "'''UPOZORENJE: Baza podataka je zaključana zbog održavanja, pa trenutačno ne možete sačuvati svoje
 promjene. Najbolje je da kopirate i zaljepite tekst u tekstualnu datoteku te je snimite za kasnije.'''
 
@@ -1076,6 +1077,13 @@ Neki predlošci neće biti uključeni.',
 'parser-template-loop-warning' => 'Otkrivena petlja predloška: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Dubina rekurzije predloška je izvan granice ($1)',
 'language-converter-depth-warning' => 'Prekoračena granica dubine jezičnog pretvarača ($1)',
+'node-count-exceeded-category' => 'Stranice s previše čvorova',
+'node-count-exceeded-warning' => 'Ova stranica ima previše čvorova',
+'expansion-depth-exceeded-category' => 'Stranice s prevelikom dubinom proširenja',
+'expansion-depth-exceeded-warning' => 'Na ovoj stranici dubina proširenja je prevelika',
+'parser-unstrip-loop-warning' => 'Nedopuštena petlja',
+'parser-unstrip-recursion-limit' => 'Dosegnuto je ograničenje rekurzije ($1)',
+'converter-manual-rule-error' => 'Pronađena je pogrješka u pravilu ručnog prijevoda',
 
 # "Undo" feature
 'undo-success' => 'Izmjena je uklonjena (tekst u okviru ispod ne sadrži zadnju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).',
@@ -1196,16 +1204,16 @@ $1",
 'revdel-restore-visible' => 'vidljive izmjene',
 'pagehist' => 'Povijest stranice',
 'deletedhist' => 'Obrisana povijest',
-'revdelete-hide-current' => 'Greška u skrivanju stavke datirane $2, $1: ovo je trenutačna inačica. Ne može biti skrivena.',
-'revdelete-show-no-access' => 'Greška u prikazivanju stavke od $2, $1: ova stavka je označena kao "ograničeno".
+'revdelete-hide-current' => 'Pogrješka u skrivanju stavke datirane $2, $1: ovo je trenutačna inačica. Ne može biti skrivena.',
+'revdelete-show-no-access' => 'Pogrješka u prikazivanju stavke od $2, $1: ova stavka označena je kao "ograničeno".
 Nemate pristup do nje.',
-'revdelete-modify-no-access' => 'Greška pri izmjeni stavke od $2, $1: ova stavka je označena kao "ograničeno".
+'revdelete-modify-no-access' => 'Pogrješka pri izmjeni stavke od $2, $1: ova je stavka označena kao "ograničeno".
 Nemate pristup do nje.',
-'revdelete-modify-missing' => 'Greška pri izmjeni izmjene broj $1: nedostaje u bazi!',
+'revdelete-modify-missing' => 'Pogrješka pri izmjeni izmjene broj $1: nedostaje u bazi!',
 'revdelete-no-change' => "'''Upozorenje:''' stavka od $2, $1 već ima tražene postavke vidljivosti.",
-'revdelete-concurrent-change' => 'Greška pri izmjeni stavke od $2, $1: izgleda da je njen status promijenio netko drugi dok ste ju pokušavali mijenjati.
+'revdelete-concurrent-change' => 'Pogrješka pri izmjeni stavke od $2, $1: izgleda da je njen status promijenio netko drugi dok ste ju pokušavali mijenjati.
 Provjerite evidencije.',
-'revdelete-only-restricted' => 'Greš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-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',
@@ -1252,7 +1260,7 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 
 # Diffs
 'history-title' => 'Povijest izmjena stranice "$1"',
-'difference-title' => '$1: Razlika između inačica',
+'difference-title' => 'Razlika između inačica stranice $1',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Redak $1:',
 'compareselectedversions' => 'Usporedi odabrane inačice',
@@ -1302,8 +1310,6 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 'search-interwiki-caption' => 'Sestrinski projekti',
 'search-interwiki-default' => '$1 rezultati:',
 'search-interwiki-more' => '(više)',
-'search-mwsuggest-enabled' => 's prijedlozima',
-'search-mwsuggest-disabled' => 'nema prijedloga',
 'search-relatedarticle' => 'Povezano',
 'mwsuggest-disable' => 'Isključi AJAX prijedloge',
 'searcheverything-enable' => 'Traži u svim imenskim prostorima',
@@ -1779,6 +1785,12 @@ Ako se problem ponovi, javite to [[Special:ListUsers/sysop|administratoru]].',
 'backend-fail-backup' => 'Izrada sigurnosne kopije datoteke "$1" nije uspjela.',
 'backend-fail-notexists' => 'Datoteka $1 ne postoji.',
 'backend-fail-hashes' => '"Hash" indeksi datoteka za usporedbu nisu nađeni.',
+'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-opentemp' => 'Ne mogu otvoriti privremenu datoteku.',
+'backend-fail-writetemp' => 'Ne mogu pisati u privremenu datoteku.',
+'backend-fail-closetemp' => 'Ne mogu zatvoriti privremenu datoteku.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Došlo je do pogreške pri otvaranju datoteke za ZIP provjeru.',
@@ -1821,9 +1833,9 @@ Za optimalnu sigurnost, img_auth.php je onemogućena.',
 'http-invalid-url' => 'Nevaljan URL: $1',
 'http-invalid-scheme' => 'URL-ovi s prefiksom "$1" nisu podržani.',
 'http-request-error' => 'HTTP zahtjev nije uspio zbog nepoznate pogreške.',
-'http-read-error' => 'Greška pri čitanju HTTP.',
+'http-read-error' => 'Pogrješka pri čitanju HTTP.',
 'http-timed-out' => 'HTTP zahtjev je istekao.',
-'http-curl-error' => 'Greška pri otvaranju URL-a: $1',
+'http-curl-error' => 'Pogrješka pri otvaranju URL-a: $1',
 'http-host-unreachable' => 'URL nije dostupan.',
 'http-bad-status' => 'Došlo je do problema tijekom HTTP zahtjeva: $1 $2',
 
@@ -1874,7 +1886,7 @@ Kad je filtriran po korisniku, popis prikazuje samo one datoteke čiju posljednj
 'imagelinks' => 'Upotreba datoteke',
 'linkstoimage' => '{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedećih stranice povezuju}} na ovu datoteku:',
 'linkstoimage-more' => 'Više od $1 {{PLURAL:$1|stranice povezuje|stranica povezuje}} na ovu datoteku.
-Slijedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.
+Sljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.
 [[Special:WhatLinksHere/$2|Ovdje se nalazi]] potpuni popis.',
 'nolinkstoimage' => 'Nijedna stranica ne povezuje na ovu sliku.',
 'morelinkstoimage' => 'Pogledaj [[Special:WhatLinksHere/$1|više poveznica]] za ovu datoteku.',
@@ -2029,7 +2041,7 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 'shortpages' => 'Kratke stranice',
 'longpages' => 'Duge stranice',
 'deadendpages' => 'Slijepe ulice',
-'deadendpagestext' => 'Slijedeće stranice nemaju poveznice na druge stranice na ovom wikiju ({{SITENAME}}).',
+'deadendpagestext' => 'Sljedeće stranice nemaju poveznice na druge stranice na ovom wikiju ({{SITENAME}}).',
 'protectedpages' => 'Zaštićene stranice',
 'protectedpages-indef' => 'Samo neograničene zaštite',
 'protectedpages-cascade' => 'Samo prenosiva zaštita',
@@ -2076,6 +2088,7 @@ Molimo obratite pozornost da druge web stranice mogu povezivati sliku izravnim U
 Možete suziti prikaz odabirući tip evidencije, suradničko ime ili stranicu u upitu.',
 'logempty' => 'Nema pronađenih stavki.',
 'log-title-wildcard' => 'Traži stranice koje počinju s navedenim izrazom',
+'showhideselectedlogentries' => 'Otkrij/sakrij odabrane evidencije',
 
 # Special:AllPages
 'allpages' => 'Sve stranice',
@@ -2491,7 +2504,7 @@ Posljednja stavka evidencije blokiranja navedena je niže kao napomena:',
 'istemplate' => 'kao predložak',
 'isimage' => 'poveznica na datoteku',
 'whatlinkshere-prev' => '{{PLURAL:$1|prethodna|prethodne|prethodnih}} $1',
-'whatlinkshere-next' => '{{PLURAL:$1|slijedeća|slijedeće|slijedećih}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|sljedeća|sljedeće|sljedećih}} $1',
 'whatlinkshere-links' => '← poveznice',
 'whatlinkshere-hideredirs' => '$1 preusmjeravanja',
 'whatlinkshere-hidetrans' => '$1 transkluzije',
@@ -2611,7 +2624,7 @@ Za popis trenutačnih zabrana i blokiranja vidi [[Special:BlockList|popis blokir
 'ipb-needreblock' => '$1 je već blokiran. Želite promijeniti postavke blokiranja?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Ostalo blokiranje|Ostala blokiranja}}',
 'unblock-hideuser' => 'Ne možete deblokirati ovog suradnika, jer je njegovo suradničko ime skriveno.',
-'ipb_cant_unblock' => 'Pogreška: blok ID $1 nije nađen. Moguće je da je suradnik već odblokiran.',
+'ipb_cant_unblock' => 'Pogrješka: blok ID $1 nije nađen. Moguće je da je suradnik već odblokiran.',
 'ipb_blocked_as_range' => 'Pogreška: IP adresa $1 nije blokirana direktno te stoga ne može biti odblokirana. Blokirana je kao dio opsega $2, koji može biti odblokiran.',
 'ip_range_invalid' => 'Raspon IP adresa nije valjan.',
 'ip_range_toolarge' => 'Opsezi blokiranja veći od /$1 nisu dozvoljeni.',
@@ -2842,6 +2855,9 @@ Snimite je na svoje računalo i postavite je ovdje.',
 'import-logentry-interwiki' => 'transwiki uvezeno $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2',
 
+# JavaScriptTest
+'javascripttest' => 'Testiranje JavaScripta',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Moja suradnička stranica',
 'tooltip-pt-anonuserpage' => 'Suradnička stranica za IP adresu pod kojom uređujete',
@@ -2958,6 +2974,10 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj pratitelja stranice',
+'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-authors' => 'Broj različitih autora',
 
@@ -3560,7 +3580,7 @@ Potvrdite namjeru vraćanja ovog članka.",
 
 # Multipage image navigation
 'imgmultipageprev' => '← prethodna slika',
-'imgmultipagenext' => 'slijedeća slika →',
+'imgmultipagenext' => 'sljedeća slika →',
 'imgmultigo' => 'Kreni!',
 'imgmultigoto' => 'Idi na stranicu $1',
 
@@ -3711,6 +3731,9 @@ Trebali ste primiti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju GNU opće javne lic
 'version-software' => 'Instalirani softver',
 'version-software-product' => 'Proizvod',
 'version-software-version' => 'Verzija',
+'version-entrypoints' => 'URL adresa instalacije',
+'version-entrypoints-header-entrypoint' => 'Početna adresa',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Putanja datoteke',
@@ -3803,7 +3826,7 @@ Slike se na taj način prikazuju u punoj rezoluciji, a drugi tipovi datoteka se
 'htmlform-float-invalid' => 'Vrijednost koju ste naveli nije broj.',
 'htmlform-int-toolow' => 'Vrijednost koju ste naveli je ispod minimuma od $1',
 'htmlform-int-toohigh' => 'Vrijednost koju ste naveli je iznad maksimuma od $1',
-'htmlform-required' => 'Ova vrijednost je potrebna',
+'htmlform-required' => 'Ova je vrijednost potrebna',
 'htmlform-submit' => 'Pošalji',
 'htmlform-reset' => 'Poništi izmjene',
 'htmlform-selectorother-other' => 'Drugi',
@@ -3860,11 +3883,15 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 'feedback-bugcheck' => 'Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom "bugu"].',
 'feedback-bugnew' => 'Provjereno. Prijavi novi "bug"',
 
+# Search suggestions
+'searchsuggest-search' => 'Traži',
+'searchsuggest-containing' => 'sadrži....',
+
 # API errors
 'api-error-badaccess-groups' => 'Nemate ovlasti za postavljanje datoteka na ovu wiki.',
-'api-error-badtoken' => "''Token'' koji smo koristili za vašu identifikaciju na ovaj poslužitelj nije bio ispravan.",
-'api-error-copyuploaddisabled' => 'Postavljanja datoteka kopiranjem su onemogućena.',
-'api-error-duplicate' => 'Već postoji jedna datoteka na ovoj wiki s istim sadržajem',
+'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-empty-file' => 'Datoteka koju ste poslali je prazna.',
 'api-error-fetchfileerror' => 'Pojavio se neki problem pri dobivanju podataka o datoteci.',
 'api-error-file-too-large' => 'Datoteka koju ste poslali bila je prevelika.',
index ad6d519..a775eef 100644 (file)
@@ -310,7 +310,7 @@ $messages = array(
 'vector-action-protect' => 'škitać',
 'vector-action-undelete' => 'Wobnowić',
 'vector-action-unprotect' => 'Škit wotstronić',
-'vector-simplesearch-preference' => 'Polěpšene pytanske namjety zmóžnić (jenož šat Vector)',
+'vector-simplesearch-preference' => 'Zjednorjenu pytansku lajstu zmóžnić (jenož drasta Vector)',
 'vector-view-create' => 'Wutworić',
 'vector-view-edit' => 'Wobdźěłać',
 'vector-view-history' => 'Stawizny',
@@ -529,8 +529,9 @@ Wotprašenje: $2',
 'protectedpagetext' => 'Strona je přećiwo wobdźěłowanju š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 a je škitana, zo by so znjewužiwanje zadźěwało.',
-'editinginterface' => "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow. Hlej za přełožki [//translatewiki.net/wiki/Main_Page?setlang=hsb translatewiki.net], projekt lokalizacije MediaWiki.",
+'protectedinterface' => 'Tuta strona wobsahuje tekst za wužiwarski powjerch softwary na tutym wikiju a je škitana, zo by so znjewužiwanje zadźěwało.
+Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.',
+'editinginterface' => "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju. Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
 'sqlhidden' => '(SQL wotprašenje schowane)',
 'cascadeprotected' => 'Tuta strona je za wobdźěłowanje zawrjena, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacymaj stronomaj|slědowacych stronach|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrejž stej|kotrež su|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitanej|škitane|škitane}}:
 $2',
@@ -556,7 +557,7 @@ Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
 # Login and logout pages
 'logouttext' => "'''{{GENDER:|Sy|Sy}} nětko {{GENDER:|wotzjewjeny|wotzjewjena}}.'''
 
-Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom [[Special:UserLogin|zaso přizjewić]].
+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! ==
 
@@ -790,7 +791,7 @@ Hesło za tute nowe konto da so na stronje ''[[Special:ChangePassword|hesło zm
 'anontalkpagetext' => "---- ''To je diskusijna strona za anonymneho wužiwarja, kiž hišće konto wutworił njeje abo je njewužiwa. Dyrbimy tohodla numerisku IP-adresu wužiwać, zo bychmy jeho/ju identifikowali. Tajka IP-adresa hodźi so wot wjacorych wužiwarjow zhromadnje wužiwać. Jeli sy anonymny wužiwar a měniš, zo buchu irelewantne komentary k tebi pósłane, [[Special:UserLogin/signup|wutwor prošu konto]] abo [[Special:UserLogin|přizjew so]], zo by přichodnu šmjatańcu z anonymnymi wužiwarjemi wobešoł.''",
 'noarticletext' => 'Tuchwilu tuta strona žadyn tekst njewobsahuje. Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony na druhich stronach pytać]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wotpowědne protokole pytać] abo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tutu stronu wobdźěłać]</span>.',
 'noarticletext-nopermission' => 'Tuchwilu žadyn tekst na tutej stronje njeje.
-Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony]] na druhich stronach pytać abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pytaj wotpowědne protokole]</span>.',
+Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony]] na druhich stronach pytać abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pytaj wotpowědne protokole]</span>, ale nimaš prawo, strou wutworić.',
 'missing-revision' => 'Wersija #$1 strony z mjenom "{{PAGENAME}}" njeeksistuje.
 
 Přičina je zwjetša zestarjeny wotkaz w stawiznach k stronje, kotraž je so zhašała.
@@ -1048,7 +1049,9 @@ Prošu přepruwuj protokole.',
 'revdelete-only-restricted' => 'Zmylk při chowanju zapiska wot $2, $1; njemóžeš zapiski před wočemi administratorow potłóčić, bjez toho zo wuběraš tež jednu z druhich widźomnosćowych opcijow.',
 'revdelete-reason-dropdown' => '*Zwučene přičiny za wušmórnjenje
 ** Přeńdźenje awtorskeho prawa
-** Njepřihódne wosobinske informacije',
+** Njepřihódne komentary abo wosobinske informacije
+** Njepřihódne wužiwarske mjeno
+** Potencielnje ranjace informacije',
 'revdelete-otherreason' => 'Druha/přidatna přičina:',
 'revdelete-reasonotherlist' => 'Druha přičina',
 'revdelete-edit-reasonlist' => 'Přičiny za wušmórnjenje wobdźěłać',
@@ -1145,8 +1148,6 @@ Podrobnosće móžeš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'search-interwiki-caption' => 'Sotrowske projekty',
 'search-interwiki-default' => '$1 wuslědki:',
 'search-interwiki-more' => '(dalše)',
-'search-mwsuggest-enabled' => 'z namjetami',
-'search-mwsuggest-disabled' => 'žane namjety',
 'search-relatedarticle' => 'Přiwuzne',
 'mwsuggest-disable' => 'Namjety AJAX znjemóžnić',
 'searcheverything-enable' => 'We wšěch mjenowych rumach pytać',
@@ -1243,7 +1244,7 @@ Tu je připadnje wupłodźena hódnota, kotruž móžeš wužiwać: $1',
 'timezoneregion-indian' => 'Indiski ocean',
 'timezoneregion-pacific' => 'Pacifiski ocean',
 'allowemail' => 'Mejlki wot druhich wužiwarjow přijimować',
-'prefs-searchoptions' => 'Pytanske opcije',
+'prefs-searchoptions' => 'Pytać',
 'prefs-namespaces' => 'Mjenowe rumy',
 'defaultns' => 'Hewak w tutych mjenowych rumach pytać:',
 'default' => 'standard',
@@ -1409,7 +1410,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 # User rights log
 'rightslog' => 'Protokol zrjadowanja wužiwarskich prawow',
 'rightslogtext' => 'To je protokol změnow wužiwarskich prawow.',
-'rightslogentry' => 'skupinowe čłonstwo za $1 z $2 na $3 změnjene',
+'rightslogentry' => 'změni skupinske čłonstwo za $1 z $2 do $3',
 'rightslogentry-autopromote' => 'je so awtomatisce wot $2 do $3 změnił',
 'rightsnone' => '(ničo)',
 
@@ -1666,7 +1667,7 @@ $1',
 'backend-fail-internal' => 'W składowanskim backendźe "$1" je njeznaty zmylk wustupił.',
 'backend-fail-contenttype' => 'Wobsahowy typ dataje, kotraž ma so na "$1" składować, njeda so zwěsćić.',
 'backend-fail-batchsize' => 'Staplowa dataja, kotraž {{PLURAL:$1|jednu operaciju|$1 operaciji|$1 operacije|$1 operacijow}} wobsahuje,  je so  na składowanski backend pósłała; limit je $2 {{PLURAL:$2|operaciju|operaciji|operacije|operacijow}} .',
-'backend-fail-usable' => 'Dataja $1 njeda so njedosahacych prawow  dla abo falowacych zapisow dla pisać.',
+'backend-fail-usable' => 'Dataja "$1" njeda so njedosahacych prawow  abo falowacych zapisow dla ani čitać ani pisać.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Njeje žadyn zwisk ze žurnalowej datowej banku za składowanski backend "$1" móžno.',
@@ -2733,7 +2734,6 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptowy test',
-'javascripttest-disabled' => 'Tuta funkcija njeje na tutym wikiju zmóžnjena.',
 'javascripttest-title' => 'Testy $1 so přewjedu',
 'javascripttest-pagetext-noframework' => 'Tuta strona je za přewjedźenje javascriptowych testow přewostajena.',
 'javascripttest-pagetext-unknownframework' => 'Njeznaty wobłuk "$1".',
@@ -2870,10 +2870,10 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-authors' => 'Cyłkowna ličba rozdźělnych awtorow',
 'pageinfo-recent-edits' => 'Ličba najnowšich změnow (za zańdźenych $1)',
 'pageinfo-recent-authors' => 'Najnowša ličba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Škit strony (<code>$1</code>)',
 '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-toolboxlink' => 'Informacije wo stronje',
 
 # Skin names
 'skinname-standard' => 'Klasiski',
@@ -3442,6 +3442,7 @@ Tutón wobkrućenski kod spadnje $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Zapřijeće mjezyrěčnych wotkazow je znjemóžnjene]',
 'scarytranscludefailed' => '[Zapřijimanje předłohi za $1 je so njeporadźiło]',
+'scarytranscludefailed-httpstatus' => '[Wotwołanje předłohi za $1 je so njeporadźiło: HTTP $2]',
 'scarytranscludetoolong' => '[URL je předołhi]',
 
 # Delete conflict
@@ -3718,6 +3719,10 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'feedback-bugcheck' => 'Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.',
 'feedback-bugnew' => 'Sym to skontrolował. Nowy zmylk zdźělić',
 
+# Search suggestions
+'searchsuggest-search' => 'Pytać',
+'searchsuggest-containing' => 'wobsahuje...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nimaš prawo dataje do tutoho wikija nahrać.',
 'api-error-badtoken' => 'Nutřkowny zmylk: Wopačny token.',
index a2a5394..65845fe 100644 (file)
@@ -525,7 +525,7 @@ Rezon li bay yo se « ''$2'' ».",
 # Login and logout pages
 'logouttext' => "'''Ou dekonekte kounye a.'''
 
-Ou mèt kontinye itilize {{SITENAME}} san ou pa idantifye, oubyen ou ka [[Special:UserLogin|rekonekte]] w ankò ak menm non an oubyen yon lòt.
+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 ! ==
 
@@ -905,8 +905,6 @@ Lejand : ({{MediaWiki:Cur}}) = diferans ak vèsyon kounye a, ({{MediaWiki:Last}}
 'search-interwiki-caption' => 'Pwojè frè, ki ansanm oubyen ki ap deplwaye ansanm',
 'search-interwiki-default' => 'Rezilta yo pou $1 :',
 'search-interwiki-more' => '(plis)',
-'search-mwsuggest-enabled' => 'ak sijesyon, kèk lide',
-'search-mwsuggest-disabled' => 'san lide, san endikasyon',
 'nonefound' => "'''Remak''' : sèl kèk espas non chache nan sityasyon nòmal.
 Eseye mete prefiks ''all:'' devan tèm rechèche ou an pou chache nan tout kontni a (sa conprann paj diskisyon yo, modèl yo, etc.) oubyen itilize espas non ou ta renmen pou prefiks.",
 'powersearch' => 'Fouye fon',
index 551f971..4efc521 100644 (file)
@@ -185,128 +185,128 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ÁTIRÁNYÍTÁS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NINCSTARTALOMJEGYZÉK__', '__NINCSTJ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NINCSGALÉRIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__LEGYENTARTALOMJEGYZÉK__', '__LEGYENTJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TARTALOMJEGYZÉK__', '__TJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NINCSSZERKESZTÉS__', '__NINCSSZERK__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'HÓNAP', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HÓNAP1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HÓNAPNEVE', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'HÓNAPRÖVID', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'MAINAP', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'MAINAP2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'MAINAPNEVE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ÉV', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'IDŐ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ÓRA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'HELYIHÓNAP', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'HELYIHÓNAP1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'HELYIHÓNAPNÉV', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'HELYIHÓNAPRÖVIDÍTÉS', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'HELYINAP', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'HELYINAP2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'HELYINAPNEVE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'HELYIÉV', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HELYIIDŐ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HELYIÓRA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'OLDALAKSZÁMA', 'LAPOKSZÁMA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'SZÓCIKKEKSZÁMA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FÁJLOKSZÁMA', 'KÉPEKSZÁMA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'SZERKESZTŐKSZÁMA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTÍVSZERKESZTŐKSZÁMA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'SZERKESZTÉSEKSZÁMA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'MEGTEKINTÉSEKSZÁMA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'OLDALNEVE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'OLDALNEVEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NÉVTERE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NÉVTEREE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'VITATERE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'VITATEREE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SZÓCIKKNÉVTERE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SZÓCIKKNÉVTEREE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'LAPTELJESNEVE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'LAPTELJESNEVEE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALLAPNEVE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALLAPNEVEE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ALAPLAPNEVE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ALAPLAPNEVEE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'VITALAPNEVE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'VITALAPNEVEE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'SZÓCIKKNEVE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'SZÓCIKKNEVEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ÜZENET:', 'ÜZ:', 'MSG:' ),
-       'subst'                   => array( '0', 'BEILLESZT:', 'BEMÁSOL:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'bélyegkép=$1', 'bélyeg=$1', 'miniatűr=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'jobb', 'jobbra', 'right' ),
-       'img_left'                => array( '1', 'bal', 'balra', 'left' ),
-       'img_none'                => array( '1', 'semmi', 'none' ),
-       'img_center'              => array( '1', 'közép', 'középre', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'keretezett', 'keretes', 'keretben', 'kerettel', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'keretnélküli', 'frameless' ),
-       'img_page'                => array( '1', 'oldal=$1', 'oldal $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'fennjobbra', 'fennjobbra=$1', 'fennjobbra $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'keret', 'border' ),
-       'img_baseline'            => array( '1', 'alapvonal', 'baseline' ),
-       'img_sub'                 => array( '1', 'ai', 'alsóindex', 'sub' ),
-       'img_super'               => array( '1', 'fi', 'felsőindex', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'fenn', 'fent', 'top' ),
-       'img_text_top'            => array( '1', 'szöveg-fenn', 'szöveg-fent', 'text-top' ),
-       'img_middle'              => array( '1', 'vközépen', 'vközépre', 'middle' ),
-       'img_bottom'              => array( '1', 'lenn', 'lent', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'szöveg-lenn', 'szöveg-lent', 'text-bottom' ),
-       'sitename'                => array( '1', 'WIKINEVE', 'SITENAME' ),
-       'ns'                      => array( '0', 'NÉVTÉR:', 'NS:' ),
-       'localurl'                => array( '0', 'HELYIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'HELYIURLE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SZERVER', 'KISZOLGÁLÓ', 'SERVER' ),
-       'servername'              => array( '0', 'SZERVERNEVE', 'KISZOLGÁLÓNEVE', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'NYELVTAN:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'HÉT', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HÉTNAPJA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'HELYIHÉT', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'HELYIHÉTNAPJA', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VÁLTOZATAZON', 'VÁLTOZATAZONOSÍTÓ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VÁLTOZATNAPJA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VÁLTOZATNAPJA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VÁLTOZATHÓNAPJA', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'VÁLTOZATÉVE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VÁLTOZATIDŐBÉLYEG', 'VÁLTOZATIDEJE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VÁLTOZATSZERKESZTŐJE', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'TÖBBESSZÁM:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TELJESURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TELJESURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KISKEZDŐ:', 'KISKEZDŐBETŰ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'NAGYKEZDŐ:', 'NAGYKEZDŐBETŰ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KISBETŰ:', 'KISBETŰK:', 'KB:', 'KISBETŰS:', 'LC:' ),
-       'uc'                      => array( '0', 'NAGYBETŰ:', 'NAGYBETŰK', 'NB:', 'NAGYBETŰS:', 'UC:' ),
-       'displaytitle'            => array( '1', 'MEGJELENÍTENDŐCÍM', 'CÍM', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__ÚJSZAKASZHIV__', '__ÚJSZAKASZLINK__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__NINCSÚJSZAKASZHIV__', '__NINCSÚJSZAKASZLINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'JELENLEGIVÁLTOZAT', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKÓDOLVA:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'HORGONYKÓDOLVA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'IDŐBÉLYEG', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'HELYIIDŐBÉLYEG', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'IRÁNYJELZŐ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#NYELV:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'TARTALOMNYELVE', 'TARTNYELVE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'OLDALAKNÉVTÉRBEN:', 'OLDALAKNBEN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ADMINOKSZÁMA', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMÁZOTTSZÁM', 'SZÁMFORMÁZÁS', 'SZÁMFORM', 'FORMATNUM' ),
-       'special'                 => array( '0', 'speciális', 'special' ),
-       'defaultsort'             => array( '1', 'RENDEZÉS:', 'KULCS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ELÉRÉSIÚT:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__REJTETTKAT__', '__REJTETTKATEGÓRIA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'LAPOKAKATEGÓRIÁBAN', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'LAPMÉRET', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__NINCSINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'CSOPORTTAGOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ÁLLANDÓÁTIRÁNYÍTÁS__', '__STATIKUSÁTIRÁNYÍTÁS__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'VÉDELMISZINT', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'dátumformázás', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ÁTIRÁNYÍTÁS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NINCSTARTALOMJEGYZÉK__', '__NINCSTJ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NINCSGALÉRIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__LEGYENTARTALOMJEGYZÉK__', '__LEGYENTJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TARTALOMJEGYZÉK__', '__TJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NINCSSZERKESZTÉS__', '__NINCSSZERK__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'HÓNAP', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HÓNAP1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HÓNAPNEVE', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'HÓNAPRÖVID', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'MAINAP', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'MAINAP2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'MAINAPNEVE', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ÉV', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'IDŐ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ÓRA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'HELYIHÓNAP', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'HELYIHÓNAP1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'HELYIHÓNAPNÉV', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'HELYIHÓNAPRÖVIDÍTÉS', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'HELYINAP', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'HELYINAP2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'HELYINAPNEVE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'HELYIÉV', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HELYIIDŐ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HELYIÓRA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'OLDALAKSZÁMA', 'LAPOKSZÁMA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'SZÓCIKKEKSZÁMA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FÁJLOKSZÁMA', 'KÉPEKSZÁMA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'SZERKESZTŐKSZÁMA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTÍVSZERKESZTŐKSZÁMA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'SZERKESZTÉSEKSZÁMA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'MEGTEKINTÉSEKSZÁMA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'OLDALNEVE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'OLDALNEVEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NÉVTERE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NÉVTEREE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'VITATERE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'VITATEREE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SZÓCIKKNÉVTERE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SZÓCIKKNÉVTEREE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'LAPTELJESNEVE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'LAPTELJESNEVEE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALLAPNEVE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALLAPNEVEE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ALAPLAPNEVE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ALAPLAPNEVEE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'VITALAPNEVE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'VITALAPNEVEE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'SZÓCIKKNEVE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'SZÓCIKKNEVEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ÜZENET:', 'ÜZ:', 'MSG:' ),
+       'subst'                     => array( '0', 'BEILLESZT:', 'BEMÁSOL:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'bélyegkép=$1', 'bélyeg=$1', 'miniatűr=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'jobb', 'jobbra', 'right' ),
+       'img_left'                  => array( '1', 'bal', 'balra', 'left' ),
+       'img_none'                  => array( '1', 'semmi', 'none' ),
+       'img_center'                => array( '1', 'közép', 'középre', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'keretezett', 'keretes', 'keretben', 'kerettel', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'keretnélküli', 'frameless' ),
+       'img_page'                  => array( '1', 'oldal=$1', 'oldal $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'fennjobbra', 'fennjobbra=$1', 'fennjobbra $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'keret', 'border' ),
+       'img_baseline'              => array( '1', 'alapvonal', 'baseline' ),
+       'img_sub'                   => array( '1', 'ai', 'alsóindex', 'sub' ),
+       'img_super'                 => array( '1', 'fi', 'felsőindex', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'fenn', 'fent', 'top' ),
+       'img_text_top'              => array( '1', 'szöveg-fenn', 'szöveg-fent', 'text-top' ),
+       'img_middle'                => array( '1', 'vközépen', 'vközépre', 'middle' ),
+       'img_bottom'                => array( '1', 'lenn', 'lent', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'szöveg-lenn', 'szöveg-lent', 'text-bottom' ),
+       'sitename'                  => array( '1', 'WIKINEVE', 'SITENAME' ),
+       'ns'                        => array( '0', 'NÉVTÉR:', 'NS:' ),
+       'localurl'                  => array( '0', 'HELYIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'HELYIURLE:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SZERVER', 'KISZOLGÁLÓ', 'SERVER' ),
+       'servername'                => array( '0', 'SZERVERNEVE', 'KISZOLGÁLÓNEVE', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'NYELVTAN:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'HÉT', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HÉTNAPJA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'HELYIHÉT', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'HELYIHÉTNAPJA', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VÁLTOZATAZON', 'VÁLTOZATAZONOSÍTÓ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VÁLTOZATNAPJA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VÁLTOZATNAPJA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VÁLTOZATHÓNAPJA', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'VÁLTOZATÉVE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VÁLTOZATIDŐBÉLYEG', 'VÁLTOZATIDEJE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VÁLTOZATSZERKESZTŐJE', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'TÖBBESSZÁM:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TELJESURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TELJESURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KISKEZDŐ:', 'KISKEZDŐBETŰ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'NAGYKEZDŐ:', 'NAGYKEZDŐBETŰ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KISBETŰ:', 'KISBETŰK:', 'KB:', 'KISBETŰS:', 'LC:' ),
+       'uc'                        => array( '0', 'NAGYBETŰ:', 'NAGYBETŰK', 'NB:', 'NAGYBETŰS:', 'UC:' ),
+       'displaytitle'              => array( '1', 'MEGJELENÍTENDŐCÍM', 'CÍM', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ÚJSZAKASZHIV__', '__ÚJSZAKASZLINK__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NINCSÚJSZAKASZHIV__', '__NINCSÚJSZAKASZLINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'JELENLEGIVÁLTOZAT', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKÓDOLVA:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'HORGONYKÓDOLVA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'IDŐBÉLYEG', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'HELYIIDŐBÉLYEG', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'IRÁNYJELZŐ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#NYELV:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'TARTALOMNYELVE', 'TARTNYELVE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'OLDALAKNÉVTÉRBEN:', 'OLDALAKNBEN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ADMINOKSZÁMA', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMÁZOTTSZÁM', 'SZÁMFORMÁZÁS', 'SZÁMFORM', 'FORMATNUM' ),
+       'special'                   => array( '0', 'speciális', 'special' ),
+       'defaultsort'               => array( '1', 'RENDEZÉS:', 'KULCS:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ELÉRÉSIÚT:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__REJTETTKAT__', '__REJTETTKATEGÓRIA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'LAPOKAKATEGÓRIÁBAN', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'LAPMÉRET', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__NINCSINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'CSOPORTTAGOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ÁLLANDÓÁTIRÁNYÍTÁS__', '__STATIKUSÁTIRÁNYÍTÁS__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'VÉDELMISZINT', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'dátumformázás', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-záéíóúöüőűÁÉÍÓÚÖÜŐŰ]+)(.*)$/sDu';
@@ -382,7 +382,7 @@ $messages = array(
 'tue' => 'kedd',
 'wed' => 'sze',
 'thu' => 'csü',
-'fri' => 'pé',
+'fri' => 'pén',
 'sat' => 'szo',
 'january' => 'január',
 'february' => 'február',
@@ -573,12 +573,12 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
 
 'ok' => 'OK',
 'retrievedfrom' => 'A lap eredeti címe: „$1”',
-'youhavenewmessages' => 'Új üzenet vár $1! (Az üzenetet $2.)',
-'newmessageslink' => 'a vitalapodon',
-'newmessagesdifflink' => 'külön is megtekintheted',
+'youhavenewmessages' => '$1 a vitalapodon! ($2 külön is megtekintheted.)',
+'newmessageslink' => 'új üzenet vár',
+'newmessagesdifflink' => 'az utolsó üzenetet',
 'youhavenewmessagesmanyusers' => '$1ed van több szerkesztőtől ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|egy|$1}} új üzenet',
-'newmessagesdifflinkplural' => 'utolsó {{PLURAL:$1|egy|$1}} változtatás',
+'newmessageslinkplural' => '{{PLURAL:$1|Új üzenet vár|Új üzenetek várnak}}',
+'newmessagesdifflinkplural' => 'Az utolsó {{PLURAL:$1|változtatást|változtatásokat}}',
 'youhavenewmessagesmulti' => 'Új üzenetet vár a(z) $1 wikin',
 'editsection' => 'szerkesztés',
 'editold' => 'szerkesztés',
@@ -633,9 +633,9 @@ Az érvényes speciális lapok listáját a [[Special:SpecialPages|{{int:special
 'databaseerror' => 'Adatbázishiba',
 'dberrortext' => 'Szintaktikai hiba található az adatbázis-lekérdezésben.
 Ezt szoftverhiba okozhatta.
-Az utolsó adatbázis-lekérdezés a(z) „<tt>$2</tt>” függvényből történt, és a következő volt:
-<blockquote><tt>$1</tt></blockquote>
-Az adatbázis ezzel a hibával tért vissza: „<tt>$3: $4</tt>”.',
+Az utolsó adatbázis-lekérdezés a(z) „<code>$2</code>” függvényből történt, és a következő volt:
+<blockquote><code>$1</code></blockquote>
+Az adatbázis ezzel a hibával tért vissza: „<samp>$3: $4</samp>”.',
 'dberrortextcl' => 'Szintaktikai hiba található az adatbázis-lekérdezésben.
 Az utolsó adatbázis-lekérdezés a(z) „$2” függvényből történt, és a következő volt:
 „$1”
@@ -687,7 +687,7 @@ Lekérdezés: $2',
 '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.',
-'editinginterface' => "'''Vigyázat:''' egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz más szerkesztők számára is. Fordításra inkább használd a MediaWiki fordítására indított kezdeményezést, a [//translatewiki.net/wiki/Main_Page?setlang=hu translatewiki.net-et].",
+'editinginterface' => "'''Vigyázat:''' egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot. Fordításra inkább használd a MediaWiki fordítására indított kezdeményezést, a [//translatewiki.net/wiki/Main_Page?setlang=hu translatewiki.net-et].",
 'sqlhidden' => '(rejtett SQL lekérdezés)',
 'cascadeprotected' => 'Ez a lap szerkesztés elleni védelemmel lett ellátva, mert a következő {{PLURAL:$1|lapon|lapokon}} be van kapcsolva a „kaszkádolt” védelem:
 $2',
@@ -713,7 +713,7 @@ A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
 # Login and logout pages
 'logouttext' => "'''Sikeresen kijelentkeztél.'''
 
-Folytathatod névtelenül  a(z) {{SITENAME}} használatát, vagy [[Special:UserLogin|ismét bejelentkezhetsz]] ugyanezzel, vagy egy másik névvel.
+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.
@@ -978,7 +978,6 @@ A blokkolási napló legutóbbi ide vonatkozó bejegyzése a következő:',
 '''Firefox / Safari:''' tartsd lenyomva a Shift gombot és kattints a ''Frissítés'' gombra a címsorban, vagy használd a ''Ctrl–F5'' vagy ''Ctrl–R'' billentyűkombinációt (Mac-en ''Command–R'');
 '''Google Chrome:''' használd a ''Ctrl–Shift–R'' billentyűkombinációt (Mac-en ''Command–Shift–R'');
 '''Internet Explorer:''' tartsd nyomva a ''Ctrl''-t, és kattints a ''Frissítés'' gombra, vagy nyomj ''Ctrl–F5''-öt;
-'''Konqueror: '''kattints a ''Frissítés'' gombra vagy nyomj ''F5''-öt;
 '''Opera:''' ürítsd ki a gyorsítótárat a ''Beállítások / Haladó / Előzmények→Törlés most'' gombbal, majd frissítsd az oldalt.",
 'usercssyoucanpreview' => "'''Tipp:''' mentés előtt használd az „{{int:showpreview}}” gombot az új CSS-ed teszteléséhez.",
 'userjsyoucanpreview' => "'''Tipp:''' mentés előtt használd az „{{int:showpreview}}” gombot az új JavaScipted teszteléséhez.",
@@ -1219,7 +1218,8 @@ Ellenőrizd a naplókat.',
 'revdelete-only-restricted' => 'Hiba a(z) $1 $2 időbélyegű elem elrejtésekor: nem rejthetsz el az adminisztrátorok elől elemeket anélkül, hogy ne választanál ki egy másik elrejtési beállítást.',
 'revdelete-reason-dropdown' => '*Általános törlési okok
 ** Jogsértő tartalom
-** Kényes személyes információk',
+** Kényes személyes információk
+** Potenciális becsületsértő információk',
 'revdelete-otherreason' => 'Más/további ok:',
 'revdelete-reasonotherlist' => 'Más ok',
 'revdelete-edit-reasonlist' => 'Törlési okok szerkesztése',
@@ -1311,8 +1311,6 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 'search-interwiki-caption' => 'Társlapok',
 'search-interwiki-default' => '$1 találat',
 'search-interwiki-more' => '(több)',
-'search-mwsuggest-enabled' => 'javaslatokkal',
-'search-mwsuggest-disabled' => 'javaslatok nélkül',
 'search-relatedarticle' => 'Kapcsolódó',
 'mwsuggest-disable' => 'AJAX-alapú keresési javaslatok letiltása',
 'searcheverything-enable' => 'Keresés az összes névtérben',
@@ -2784,7 +2782,7 @@ Kérlek, válassz egy másik nevet.',
 
 Az átnevezés céljaként megadott „[[:$1]]” szócikk már létezik.  Ha az átnevezést végre akarod hajtani, ezt a lapot törölni kell.  Valóban ezt szeretnéd?',
 'delete_and_move_confirm' => 'Igen, töröld a lapot',
-'delete_and_move_reason' => 'Törölve, hogy legyen hely átmozgatni [[$1]] lapot.',
+'delete_and_move_reason' => 'átnevezendő lap célneve felszabadítva „[[$1]]” számára',
 'selfmove' => 'A cikk jelenlegi címe megegyezik azzal, amire át szeretnéd mozgatni. Egy szócikket saját magára mozgatni nem lehet.',
 'immobile-source-namespace' => 'A(z) „$1” névtér lapjai nem nevezhetőek át',
 'immobile-target-namespace' => 'A(z) „$1” névtérbe nem mozgathatsz át lapokat',
@@ -2917,7 +2915,6 @@ Mentsd el a számítógépedre, majd töltsd fel ide.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript tesztelés',
-'javascripttest-disabled' => 'Ez a funkció nincs engedélyezve ebben a wikiben.',
 'javascripttest-title' => '$1 tesztek futtatása',
 'javascripttest-pagetext-noframework' => 'Ez az oldal JavaStript tesztek futtatására van fenntartva.',
 'javascripttest-pagetext-unknownframework' => 'Ismeretlen teszt keretrendszer: $1.',
@@ -3056,11 +3053,11 @@ 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-header-edits' => 'Szerkesztések',
+'pageinfo-header-edits' => 'Szerkesztések története',
 'pageinfo-views' => 'Megtekintések száma',
 'pageinfo-watchers' => 'Figyelők száma',
-'pageinfo-edits' => 'Szerkesztések száma',
-'pageinfo-authors' => 'Egyedi szerkesztők száma',
+'pageinfo-edits' => 'Szerkesztések teljes száma',
+'pageinfo-authors' => 'Egyedi szerkesztők teljes száma',
 
 # Skin names
 'skinname-standard' => 'Klasszikus',
@@ -3882,8 +3879,8 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'revdelete-unrestricted' => 'felfedett az adminisztrátoroknak',
 'logentry-move-move' => '$1 átnevezte a(z) $3 lapot a következő névre: $4',
 'logentry-move-move-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül',
-'logentry-move-move_redir' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítással',
-'logentry-move-move_redir-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül',
+'logentry-move-move_redir' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva',
+'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',
@@ -3907,6 +3904,10 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'feedback-bugcheck' => 'Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].',
 'feedback-bugnew' => 'Ellenőriztem. Új hiba jelentése',
 
+# Search suggestions
+'searchsuggest-search' => 'Keresés',
+'searchsuggest-containing' => 'tartalmazza…',
+
 # API errors
 'api-error-badaccess-groups' => 'Nincs jogod fájlokat feltölteni erre a wikire.',
 'api-error-badtoken' => 'Belső hiba: hibás token.',
index 15107a3..0a44971 100644 (file)
@@ -92,109 +92,109 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ՎԵՐԱՀՂՈՒՄ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ԱՌԱՆՑ_ԲՈՎ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ԱՌԱՆՑ_ՍՐԱՀԻ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ՍՏԻՊԵԼ_ԲՈՎ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ԲՈՎ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ԱՌԱՆՑ_ԲԱԺՆԻ_ԽՄԲԱԳՐՄԱՆ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄԻՍԸ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐԸ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐԸ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐՎԱ_ԱՆՈՒՆԸ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԻՆ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԸ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԸ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄԻՍԸ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐԸ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐԸ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐՎԱ_ԱՆՈՒՆԸ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ՏԵՂԱԿԱՆ_ՏԱՐԻՆ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԸ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԸ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ԷՋԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ՖԱՅԼԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ՄԱՍՆԱԿԻՑՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFUSERS' ),
-       'pagename'                => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ARTICLESPACE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ՀՈՂՈՐԴ՝', 'MSG:' ),
-       'msgnw'                   => array( '0', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'մինի', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'մինի=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'աջից', 'right' ),
-       'img_left'                => array( '1', 'ձախից', 'left' ),
-       'img_none'                => array( '1', 'առանց', 'none' ),
-       'img_width'               => array( '1', '$1փքս', '$1px' ),
-       'img_center'              => array( '1', 'կենտրոն', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'շրջափակել', 'framed', 'enframed', 'frame' ),
-       'img_page'                => array( '1', 'էջը=$1', 'էջ $1', 'page=$1', 'page $1' ),
-       'int'                     => array( '0', 'ՆԵՐՔ՝', 'INT:' ),
-       'sitename'                => array( '1', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ԱՏ՝', 'NS:' ),
-       'localurl'                => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ՝', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ_2՝', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ՍԵՐՎԵՐԸ', 'SERVER' ),
-       'servername'              => array( '0', 'ՍԵՐՎԵՐԻ_ԱՆՈՒՆԸ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ՍՔՐԻՊՏԻ_ՃԱՆԱՊԱՐՀԸ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ՀՈԼՈՎ՛', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__ԱՌԱՆՑ_ՎԵՐՆԱԳՐԻ_ՓՈՓՈԽՄԱՆ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ԱՌԱՆՑ_ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ՓՈՓՈԽՄԱՆ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹԸ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹՎԱ_ՕՐԸ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԸ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԱ_ՕՐԸ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՀԱՄԱՐԸ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ԱՄԻՍԸ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՏԱՐԻՆ', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'ՀՈԳՆԱԿԻ՝', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ՝', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ_2՝', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ՓՈՔՐԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ՄԵԾԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ՓՈՔՐԱՏԱՌ՝', 'LC:' ),
-       'uc'                      => array( '0', 'ՄԵԾԱՏԱՌ՝', 'UC:' ),
-       'displaytitle'            => array( '1', 'ՑՈՒՅՑ_ՏԱԼ_ՎԵՐՆԱԳԻՐԸ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Չ', 'R' ),
-       'newsectionlink'          => array( '1', '__ՀՂՈՒՄ_ՆՈՐ_ԲԱԺՆԻ_ՎՐԱ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԲԵՐԱԿԸ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ՄՇԱԿՎԱԾ_ՀԱՍՑԵ՛', 'URLENCODE:' ),
-       'currenttimestamp'        => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'ՆԱՄԱԿԻ_ՈՒՂՂՈՒԹՅՈՒՆԸ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ԼԵԶՈՒ՝', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ԼԵԶՈՒՆ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ԷՋԵՐ_ԱՆՎԱՆԱՏԱՐԱԾՔՈՒՄ՝', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ԱԴՄԻՆՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ՁԵՎԵԼ_ԹԻՎԸ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ԼՐԱՑՆԵԼ_ՁԱԽԻՑ', 'PADLEFT' ),
-       'padright'                => array( '0', 'ԼՐԱՑՆԵԼ_ԱՋԻՑ', 'PADRIGHT' ),
-       'special'                 => array( '0', 'սպասարկող', 'special' ),
-       'defaultsort'             => array( '1', 'ԼՌՈՒԹՅԱՄԲ_ԴԱՍԱՎՈՐՈՒՄ՝', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'redirect'                  => array( '0', '#ՎԵՐԱՀՂՈՒՄ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ԱՌԱՆՑ_ԲՈՎ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ԱՌԱՆՑ_ՍՐԱՀԻ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ՍՏԻՊԵԼ_ԲՈՎ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ԲՈՎ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ԱՌԱՆՑ_ԲԱԺՆԻ_ԽՄԲԱԳՐՄԱՆ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄԻՍԸ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐԸ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐԸ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ԸՆԹԱՑԻՔ_ՕՐՎԱ_ԱՆՈՒՆԸ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԻՆ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԸ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԸ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄԻՍԸ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐԸ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐԸ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ՏԵՂԱԿԱՆ_ՕՐՎԱ_ԱՆՈՒՆԸ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ՏԵՂԱԿԱՆ_ՏԱՐԻՆ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԸ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԸ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ԷՋԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ՖԱՅԼԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ՄԱՍՆԱԿԻՑՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFUSERS' ),
+       'pagename'                  => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ԷՋԻ_ԱՆՈՒՆԸ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ԱՆՎԱՆԱՏԱՐԱԾՔ_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ARTICLESPACE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ՀՈՂՈՐԴ՝', 'MSG:' ),
+       'msgnw'                     => array( '0', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'մինի', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'մինի=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'աջից', 'right' ),
+       'img_left'                  => array( '1', 'ձախից', 'left' ),
+       'img_none'                  => array( '1', 'առանց', 'none' ),
+       'img_width'                 => array( '1', '$1փքս', '$1px' ),
+       'img_center'                => array( '1', 'կենտրոն', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'շրջափակել', 'framed', 'enframed', 'frame' ),
+       'img_page'                  => array( '1', 'էջը=$1', 'էջ $1', 'page=$1', 'page $1' ),
+       'int'                       => array( '0', 'ՆԵՐՔ՝', 'INT:' ),
+       'sitename'                  => array( '1', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ԱՏ՝', 'NS:' ),
+       'localurl'                  => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ՝', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ_2՝', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'ՍԵՐՎԵՐԸ', 'SERVER' ),
+       'servername'                => array( '0', 'ՍԵՐՎԵՐԻ_ԱՆՈՒՆԸ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ՍՔՐԻՊՏԻ_ՃԱՆԱՊԱՐՀԸ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ՀՈԼՈՎ՛', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__ԱՌԱՆՑ_ՎԵՐՆԱԳՐԻ_ՓՈՓՈԽՄԱՆ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ԱՌԱՆՑ_ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ՓՈՓՈԽՄԱՆ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹԸ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹՎԱ_ՕՐԸ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԸ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԱ_ՕՐԸ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՀԱՄԱՐԸ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ԱՄԻՍԸ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ՏԱՐԲԵՐԱԿԻ_ՏԱՐԻՆ', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'ՀՈԳՆԱԿԻ՝', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ՝', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ԼՐԻՎ_ՀԱՍՑԵՆ_2՝', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ՓՈՔՐԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ՄԵԾԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ՓՈՔՐԱՏԱՌ՝', 'LC:' ),
+       'uc'                        => array( '0', 'ՄԵԾԱՏԱՌ՝', 'UC:' ),
+       'displaytitle'              => array( '1', 'ՑՈՒՅՑ_ՏԱԼ_ՎԵՐՆԱԳԻՐԸ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Չ', 'R' ),
+       'newsectionlink'            => array( '1', '__ՀՂՈՒՄ_ՆՈՐ_ԲԱԺՆԻ_ՎՐԱ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ԸՆԹԱՑԻՔ_ՏԱՐԲԵՐԱԿԸ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ՄՇԱԿՎԱԾ_ՀԱՍՑԵ՛', 'URLENCODE:' ),
+       'currenttimestamp'          => array( '1', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'ՆԱՄԱԿԻ_ՈՒՂՂՈՒԹՅՈՒՆԸ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ԼԵԶՈՒ՝', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ԼԵԶՈՒՆ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ԷՋԵՐ_ԱՆՎԱՆԱՏԱՐԱԾՔՈՒՄ՝', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ԱԴՄԻՆՆԵՐԻ_ՔԱՆԱԿԸ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ՁԵՎԵԼ_ԹԻՎԸ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ԼՐԱՑՆԵԼ_ՁԱԽԻՑ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ԼՐԱՑՆԵԼ_ԱՋԻՑ', 'PADRIGHT' ),
+       'special'                   => array( '0', 'սպասարկող', 'special' ),
+       'defaultsort'               => array( '1', 'ԼՌՈՒԹՅԱՄԲ_ԴԱՍԱՎՈՐՈՒՄ՝', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
 );
 
 $specialPageAliases = array(
@@ -533,6 +533,8 @@ $1',
 'youhavenewmessages' => 'Դուք ունեք $1 ($2)։',
 'newmessageslink' => 'նոր ուղերձներ',
 'newmessagesdifflink' => 'վերջին փոփոխությունը',
+'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|նոր հաղորդագրություններ}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|փոփոխում|փոփոխումներ}}',
 'youhavenewmessagesmulti' => 'Դուք նոր ուղերձներ եք ստացել $1 վրա',
 'editsection' => 'խմբագրել',
 'editold' => 'խմբագրել',
@@ -660,7 +662,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Դուք դուրս եկաք համակարգից։'''
 
-Դուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ [[Special:UserLogin|կրկին մուտք գործել համակարգ]] նույն կամ մեկ այլ մասնակցի անվամբ։ Ի նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
+Դուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ <span class='plainlinks'>[$1 կրկին մուտք գործել համակարգ]</span> նույն կամ մեկ այլ մասնակցի անվամբ։ Ի նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
 'welcomecreation' => '== Բարի՛ գալուստ, $1 ==
 Ձեր հաշիվը ստեղծված է։
 Չմոռանաք անձնավորել ձեր [[Special:Preferences|նախընտրությունները]]։',
@@ -1097,8 +1099,6 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'search-interwiki-caption' => 'Կից նախագծեր',
 'search-interwiki-default' => '$1 արդյունք.',
 'search-interwiki-more' => '(էլի)',
-'search-mwsuggest-enabled' => 'առաջարկներով',
-'search-mwsuggest-disabled' => 'առանց առաջարկների',
 'search-relatedarticle' => 'Հարակից',
 'mwsuggest-disable' => 'Անջատել AJAX հուշումներ',
 'searcheverything-enable' => 'Որոնել բոլոր անվանատարածքներում',
@@ -2572,4 +2572,7 @@ $3
 'logentry-newusers-create' => '$1 մասնակիցը ստեղծեց նոր հաշիվ',
 'logentry-newusers-create2' => '$1 Ստեղծեց նոր հաշիվ $3',
 
+# Search suggestions
+'searchsuggest-search' => 'Որոնել',
+
 );
index 804005e..903e2f0 100644 (file)
@@ -523,10 +523,10 @@ Per favor reprova post alcun minutas.',
 'protectedpagetext' => 'Iste pagina ha essite protegite contra modificationes.',
 'viewsourcetext' => 'Tu pote vider e copiar le codice-fonte de iste pagina:',
 'viewyourtext' => "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
-'protectedinterface' => 'Iste pagina contine texto pro le interfacie del software, e es protegite pro impedir le abuso.',
+'protectedinterface' => 'Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.',
 'editinginterface' => "'''Attention:''' Le texto de iste pagina face parte del interfacie pro le software.
-Omne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores.
-Pro traductiones, per favor considera usar [//translatewiki.net/wiki/Main_Page?setlang=ia translatewiki.net], le projecto pro localisar MediaWiki.",
+Omne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.
+Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
 'sqlhidden' => '(Consulta SQL non monstrate)',
 'cascadeprotected' => 'Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option "cascada":
 $2',
@@ -552,7 +552,7 @@ Le administrator qui lo blocava offereva iste explication: "$3".',
 # Login and logout pages
 'logouttext' => "'''Tu ha claudite le session.'''
 
-Tu pote continuar a usar {{SITENAME}} anonymemente, o tu pote [[Special:UserLogin|aperir un nove session]] con le mesme nomine de usator o con un altere.
+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.
@@ -1199,8 +1199,6 @@ Detalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'search-interwiki-caption' => 'Projectos fratres',
 'search-interwiki-default' => 'Resultatos de $1:',
 'search-interwiki-more' => '(plus)',
-'search-mwsuggest-enabled' => 'con suggestiones',
-'search-mwsuggest-disabled' => 'sin suggestiones',
 'search-relatedarticle' => 'Connexe',
 'mwsuggest-disable' => 'Disactivar suggestiones via AJAX',
 'searcheverything-enable' => 'Cercar in tote le spatios de nomines',
@@ -2866,7 +2864,6 @@ Salveguarda lo in tu computator e incarga lo hic.',
 
 # JavaScriptTest
 'javascripttest' => 'Test de JavaScript',
-'javascripttest-disabled' => 'Iste function non ha essite activate in iste wiki.',
 'javascripttest-title' => 'Execution de $1 tests',
 'javascripttest-pagetext-noframework' => 'Iste pagina es reservate pro le execution de tests de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Structura de test "$1" incognite.',
@@ -3023,7 +3020,6 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-authors' => 'Numero total de autores distincte',
 'pageinfo-recent-edits' => 'Numero de modificationes recente (intra le ultime $1)',
 'pageinfo-recent-authors' => 'Numero de autores distincte recente',
-'pageinfo-restriction' => 'Protection del pagina (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola|Parolas}} magic ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria|Categorias}} celate ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Patrono|Patronos}} transcludite ($1)',
@@ -3090,6 +3086,8 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'file-info-png-looped' => 'repetente',
 'file-info-png-repeat' => 'repetite $1 {{PLURAL:$1|vice|vices}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|photogramma|photogrammas}}',
+'file-no-thumb-animation' => "'''Note: A causa de limitationes technic, le miniaturas de iste file non essera animate.'''",
+'file-no-thumb-animation-gif' => "'''Nota: A causa de limitationes technic, le miniaturas de imagines GIF in alte resolution como iste non essera animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria de nove files',
@@ -3883,6 +3881,10 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'feedback-bugcheck' => 'Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].',
 'feedback-bugnew' => 'Si, io lo ha verificate; reportar un nove falta',
 
+# Search suggestions
+'searchsuggest-search' => 'Cercar',
+'searchsuggest-containing' => 'continente...',
+
 # API errors
 'api-error-badaccess-groups' => 'Tu non ha le permission de incargar files in iste wiki.',
 'api-error-badtoken' => 'Error interne: indicio invalide.',
index 73ed0c0..9ee48f4 100644 (file)
@@ -74,144 +74,144 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ALIH', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__TANPADAFTARISI__', '__NIRDASI__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__TANPAGALERI__', '__NIRGAL__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__PAKSADAFTARISI__', '__PAKSADASI__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__DAFTARISI__', '__DASI__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TANPASUNTINGANBAGIAN__', '__NIRSUBA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__TANPAKEPALA__', '__NIRLA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'BULANKINI', 'BULANKINI2', 'BUKIN', 'BUKIN2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'BULANKINI1', 'BUKIN1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMABULANKINI', 'NAMBUKIN', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NAMAJENDERBULANKINI', 'NAMJENBUKIN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NAMASINGKATBULANKINI', 'BULANINISINGKAT', 'NAMSINGBUKIN', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HARIKINI', 'HARKIN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HARIKINI2', 'HARKIN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMAHARIKINI', 'NAMHARKIN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAHUNKINI', 'TAKIN', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'WAKTUKINI', 'WAKIN', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JAMKINI', 'JAKIN', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'BULANLOKAL', 'BULANLOKAL2', 'BULOK', 'BULOK2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'BULANLOKAL1', 'BULOK1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NAMABULANLOKAL', 'NAMBULOK', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NAMAJENDERBULANLOKAL', 'NAMJENBULOK', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'NAMASINGKATBULANLOKAL', 'NAMSINGBULOK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'HARILOKAL', 'HALOK', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'HARILOKAL2', 'HALOK2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NAMAHARILOKAL', 'NAMHALOK', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'TAHUNLOKAL', 'TALOK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'WAKTULOKAL', 'WALOK', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'JAMLOKAL', 'JALOK', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'JUMLAHHALAMAN', 'JUMMAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'JUMLAHARTIKEL', 'JUMKEL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'JUMLAHBERKAS', 'JUMKAS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'JUMLAHPENGGUNA', 'JUMPENG', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'JUMLAHPENGGUNAAKTIF', 'JUMPENGTIF', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'JUMLAHSUNTINGAN', 'JUMTING', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'JUMLAHTAMPILAN', 'JUMTAM', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NAMAHALAMAN', 'NAMMAN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMAHALAMANE', 'NAMMANE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'RUANGNAMA', 'RUNAM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'RUANGNAMAE', 'RUNAME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RUANGBICARA', 'RUBIR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RUANGBICARAE', 'RUBIRE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'RUANGUTAMA', 'RUANGARTIKEL', 'RUTAMA', 'RUTIKEL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'RUANGUTAMAE', 'RUANGARTIKELE', 'RUTAMAE', 'RUKELE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NAMAHALAMANLENGKAP', 'NAMALENGKAPHALAMAN', 'NAMMANKAP', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'AMAHALAMANLENGKAPE', 'NAMALENGKAPHALAMANE', 'NAMMANKAPE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NAMASUBHALAMAN', 'NAMAUPAHALAMAN', 'NAMUMAN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NAMASUBHALAMANE', 'NAMAUPAHALAMANE', 'NAMUMANE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NAMAHALAMANDASAR', 'NAMADASARHALAMAN', 'NAMMANSAR', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NAMAHALAMANDASARE', 'NAMADASARHALAMANE', 'NAMMANSARE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NAMAHALAMANBICARA', 'NAMMANBIR', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NAMAHALAMANBICARAE', 'NAMMANBIRE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NAMAHALAMANUTAMA', 'NAMAHALAMANARTIKEL', 'NAMMANTAMA', 'NAMMANTIKEL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NAMAHALAMANUTAMAE', 'NAMAHALAMANARTIKELE', 'NAMMANTAMAE', 'NAMMANTIKELE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'PSN:', 'PESAN:', 'MSG:' ),
-       'subst'                   => array( '0', 'GNT:', 'GANTI:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'TPL:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ka', 'kanan', 'right' ),
-       'img_left'                => array( '1', 'ki', 'kiri', 'left' ),
-       'img_none'                => array( '1', 'nir', 'tanpa', 'none' ),
-       'img_center'              => array( '1', 'pus', 'pusat', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'nirbing', 'tanpabingkai', 'frameless' ),
-       'img_page'                => array( '1', 'hal=$1', 'halaman=$1', 'hal $1', 'halaman $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'lurus', 'lurus=$1', 'lurus $1', 'tegak', 'tegak=$1', 'tegak $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'tepi', 'batas', 'border' ),
-       'img_baseline'            => array( '1', 'gada', 'garis_dasar', 'baseline' ),
-       'img_sub'                 => array( '1', 'upa', 'sub' ),
-       'img_top'                 => array( '1', 'atas', 'top' ),
-       'img_text_top'            => array( '1', 'atek', 'atas-teks', 'text-top' ),
-       'img_middle'              => array( '1', 'tengah', 'middle' ),
-       'img_bottom'              => array( '1', 'bawah', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'batek', 'bawah-teks', 'text-bottom' ),
-       'img_link'                => array( '1', 'pra=$1', 'pranala=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'al=$1', 'alternatif=$1', 'alt=$1' ),
-       'sitename'                => array( '1', 'NAMASITUS', 'NAMSIT', 'SITENAME' ),
-       'ns'                      => array( '0', 'RN:', 'RUNAM:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOKAL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOKALE', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'PELADEN', 'SERVER' ),
-       'servername'              => array( '0', 'NAMAPELADEN', 'NAMASERVER', 'NAMPEL', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'LOKASISKRIP', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'TATABAHASA', 'TASA', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'JANTINA', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__TANPAKONVERSIJUDUL__', '__NIRKODUL__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__TANPAKONVERSIISI__', '__NIRKOSI__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'MINGGUKINI', 'MIKIN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HARIDALAMMINGGU', 'HADAMI', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'MINGGULOKAL', 'MIKAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'HARIDALAMMINGGULOKAL', 'HADAMIKAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVISI', 'IREV', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'HARIREVISI', 'HAREV', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'HARIREVISI2', 'HAREV2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'BULANREVISI', 'BUREV', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'BULANREVISI1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'TAHUNREVISI', 'TAREV', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STEMPELWAKTUREVISI', 'REKAMWAKTUREVISI', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'PENGGUNAREVISI', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'JAMAK:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLLENGKAP:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLLENGKAPE', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'AKC:', 'AWALKECIL:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ABS:', 'AWALBESAR:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KC:', 'KECIL:', 'HURUFKECIL:', 'LC:' ),
-       'uc'                      => array( '0', 'BS:', 'BESAR:', 'HURUFBESAR:', 'UC:' ),
-       'raw'                     => array( '0', 'MENTAH:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'JUDULTAMPILAN', 'JUTAM', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'M', 'R' ),
-       'newsectionlink'          => array( '1', '__PRANALABAGIANBARU__', '__PRABABA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_TANPAPRANALABAGIANBARU__', '__NIRPRABABA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIKINI', 'VERKIN', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'KODEURL:', 'KODU:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'KODEJANGKAR', 'KOJANG', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'STEMPELWAKTUKINI', 'STEMWAKIN', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STEMPELWAKTULOKAL', 'STEMWAKAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARKAARAH', 'MARRAH', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#BAHASA:', '#BHS:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'BAHASAISI', 'BHSISI', 'BASI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'HALAMANDIRUANGNAMA:', 'HALDIRN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'JUMLAHADMIN', 'JUMLAHPENGURUS', 'JUMAD', 'JURUS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATANGKA', 'FORANG', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ISIKIRI', 'IKI', 'PADLEFT' ),
-       'padright'                => array( '0', 'ISIKANAN', 'IKA', 'PADRIGHT' ),
-       'special'                 => array( '0', 'istimewa', 'spesial', 'special' ),
-       'defaultsort'             => array( '1', 'URUTANBAKU:', 'UBUR:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'LOKASIBERKAS:', 'LOBER:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'kata_kunci', 'takun', 'tag' ),
-       'hiddencat'               => array( '1', '__KATEGORITERSEMBUNYI__', '__KATSEM__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'HALAMANDIKATEGORI', 'HALDIKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'BESARHALAMAN', 'BESMAN', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__TANPAINDEKS__', '__NIRDEKS__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'JUMLAHDIKELOMPOK', 'JULDIPOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__PENGALIHANSTATIK__', '__PENGALIHANSTATIS__', '__PETIK__', '__PETIS__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'TINGKATPERLINDUNGAN', 'TIPER', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formattanggal', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ALIH', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__TANPADAFTARISI__', '__NIRDASI__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__TANPAGALERI__', '__NIRGAL__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__PAKSADAFTARISI__', '__PAKSADASI__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__DAFTARISI__', '__DASI__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TANPASUNTINGANBAGIAN__', '__NIRSUBA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__TANPAKEPALA__', '__NIRLA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'BULANKINI', 'BULANKINI2', 'BUKIN', 'BUKIN2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'BULANKINI1', 'BUKIN1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMABULANKINI', 'NAMBUKIN', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NAMAJENDERBULANKINI', 'NAMJENBUKIN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NAMASINGKATBULANKINI', 'BULANINISINGKAT', 'NAMSINGBUKIN', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HARIKINI', 'HARKIN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HARIKINI2', 'HARKIN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMAHARIKINI', 'NAMHARKIN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAHUNKINI', 'TAKIN', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'WAKTUKINI', 'WAKIN', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JAMKINI', 'JAKIN', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'BULANLOKAL', 'BULANLOKAL2', 'BULOK', 'BULOK2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'BULANLOKAL1', 'BULOK1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NAMABULANLOKAL', 'NAMBULOK', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NAMAJENDERBULANLOKAL', 'NAMJENBULOK', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'NAMASINGKATBULANLOKAL', 'NAMSINGBULOK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'HARILOKAL', 'HALOK', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'HARILOKAL2', 'HALOK2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NAMAHARILOKAL', 'NAMHALOK', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'TAHUNLOKAL', 'TALOK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'WAKTULOKAL', 'WALOK', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'JAMLOKAL', 'JALOK', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'JUMLAHHALAMAN', 'JUMMAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'JUMLAHARTIKEL', 'JUMKEL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'JUMLAHBERKAS', 'JUMKAS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'JUMLAHPENGGUNA', 'JUMPENG', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'JUMLAHPENGGUNAAKTIF', 'JUMPENGTIF', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'JUMLAHSUNTINGAN', 'JUMTING', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'JUMLAHTAMPILAN', 'JUMTAM', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NAMAHALAMAN', 'NAMMAN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMAHALAMANE', 'NAMMANE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'RUANGNAMA', 'RUNAM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'RUANGNAMAE', 'RUNAME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RUANGBICARA', 'RUBIR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RUANGBICARAE', 'RUBIRE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'RUANGUTAMA', 'RUANGARTIKEL', 'RUTAMA', 'RUTIKEL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'RUANGUTAMAE', 'RUANGARTIKELE', 'RUTAMAE', 'RUKELE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NAMAHALAMANLENGKAP', 'NAMALENGKAPHALAMAN', 'NAMMANKAP', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'AMAHALAMANLENGKAPE', 'NAMALENGKAPHALAMANE', 'NAMMANKAPE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NAMASUBHALAMAN', 'NAMAUPAHALAMAN', 'NAMUMAN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NAMASUBHALAMANE', 'NAMAUPAHALAMANE', 'NAMUMANE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NAMAHALAMANDASAR', 'NAMADASARHALAMAN', 'NAMMANSAR', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NAMAHALAMANDASARE', 'NAMADASARHALAMANE', 'NAMMANSARE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NAMAHALAMANBICARA', 'NAMMANBIR', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NAMAHALAMANBICARAE', 'NAMMANBIRE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NAMAHALAMANUTAMA', 'NAMAHALAMANARTIKEL', 'NAMMANTAMA', 'NAMMANTIKEL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NAMAHALAMANUTAMAE', 'NAMAHALAMANARTIKELE', 'NAMMANTAMAE', 'NAMMANTIKELE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'PSN:', 'PESAN:', 'MSG:' ),
+       'subst'                     => array( '0', 'GNT:', 'GANTI:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'TPL:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ka', 'kanan', 'right' ),
+       'img_left'                  => array( '1', 'ki', 'kiri', 'left' ),
+       'img_none'                  => array( '1', 'nir', 'tanpa', 'none' ),
+       'img_center'                => array( '1', 'pus', 'pusat', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'nirbing', 'tanpabingkai', 'frameless' ),
+       'img_page'                  => array( '1', 'hal=$1', 'halaman=$1', 'hal $1', 'halaman $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'lurus', 'lurus=$1', 'lurus $1', 'tegak', 'tegak=$1', 'tegak $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'tepi', 'batas', 'border' ),
+       'img_baseline'              => array( '1', 'gada', 'garis_dasar', 'baseline' ),
+       'img_sub'                   => array( '1', 'upa', 'sub' ),
+       'img_top'                   => array( '1', 'atas', 'top' ),
+       'img_text_top'              => array( '1', 'atek', 'atas-teks', 'text-top' ),
+       'img_middle'                => array( '1', 'tengah', 'middle' ),
+       'img_bottom'                => array( '1', 'bawah', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'batek', 'bawah-teks', 'text-bottom' ),
+       'img_link'                  => array( '1', 'pra=$1', 'pranala=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'al=$1', 'alternatif=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'NAMASITUS', 'NAMSIT', 'SITENAME' ),
+       'ns'                        => array( '0', 'RN:', 'RUNAM:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOKAL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOKALE', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'PELADEN', 'SERVER' ),
+       'servername'                => array( '0', 'NAMAPELADEN', 'NAMASERVER', 'NAMPEL', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'LOKASISKRIP', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'TATABAHASA', 'TASA', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'JANTINA', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__TANPAKONVERSIJUDUL__', '__NIRKODUL__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__TANPAKONVERSIISI__', '__NIRKOSI__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'MINGGUKINI', 'MIKIN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HARIDALAMMINGGU', 'HADAMI', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'MINGGULOKAL', 'MIKAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'HARIDALAMMINGGULOKAL', 'HADAMIKAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVISI', 'IREV', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'HARIREVISI', 'HAREV', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'HARIREVISI2', 'HAREV2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'BULANREVISI', 'BUREV', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'BULANREVISI1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'TAHUNREVISI', 'TAREV', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STEMPELWAKTUREVISI', 'REKAMWAKTUREVISI', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'PENGGUNAREVISI', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'JAMAK:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLLENGKAP:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLLENGKAPE', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'AKC:', 'AWALKECIL:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ABS:', 'AWALBESAR:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KC:', 'KECIL:', 'HURUFKECIL:', 'LC:' ),
+       'uc'                        => array( '0', 'BS:', 'BESAR:', 'HURUFBESAR:', 'UC:' ),
+       'raw'                       => array( '0', 'MENTAH:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'JUDULTAMPILAN', 'JUTAM', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'M', 'R' ),
+       'newsectionlink'            => array( '1', '__PRANALABAGIANBARU__', '__PRABABA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '_TANPAPRANALABAGIANBARU__', '__NIRPRABABA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIKINI', 'VERKIN', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'KODEURL:', 'KODU:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'KODEJANGKAR', 'KOJANG', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'STEMPELWAKTUKINI', 'STEMWAKIN', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STEMPELWAKTULOKAL', 'STEMWAKAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARKAARAH', 'MARRAH', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#BAHASA:', '#BHS:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'BAHASAISI', 'BHSISI', 'BASI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'HALAMANDIRUANGNAMA:', 'HALDIRN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'JUMLAHADMIN', 'JUMLAHPENGURUS', 'JUMAD', 'JURUS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATANGKA', 'FORANG', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ISIKIRI', 'IKI', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ISIKANAN', 'IKA', 'PADRIGHT' ),
+       'special'                   => array( '0', 'istimewa', 'spesial', 'special' ),
+       'defaultsort'               => array( '1', 'URUTANBAKU:', 'UBUR:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'LOKASIBERKAS:', 'LOBER:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'kata_kunci', 'takun', 'tag' ),
+       'hiddencat'                 => array( '1', '__KATEGORITERSEMBUNYI__', '__KATSEM__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'HALAMANDIKATEGORI', 'HALDIKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'BESARHALAMAN', 'BESMAN', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__TANPAINDEKS__', '__NIRDEKS__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'JUMLAHDIKELOMPOK', 'JULDIPOK', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__PENGALIHANSTATIK__', '__PENGALIHANSTATIS__', '__PETIK__', '__PETIS__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'TINGKATPERLINDUNGAN', 'TIPER', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formattanggal', 'formatdate', 'dateformat' ),
 );
 
 $specialPageAliases = array(
@@ -600,6 +600,10 @@ $1',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
 'newmessageslink' => 'pesan baru',
 'newmessagesdifflink' => 'perubahan terakhir',
+'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3||}}pengguna lain ($2).',
+'youhavenewmessagesmanyusers' => 'Anda memiliki $1 dari pengguna lain ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1||}}pesan baru',
+'newmessagesdifflinkplural' => '{{PLURAL:$1||}}perubahan terakhir',
 'youhavenewmessagesmulti' => 'Anda mendapat beberapa pesan baru pada $1',
 'editsection' => 'sunting',
 'editold' => 'sunting',
@@ -731,7 +735,7 @@ Administrator yang terkunci menawarkan penjelasan ini: " $3 ".',
 # Login and logout pages
 'logouttext' => "'''Anda telah keluar log dari sistem.'''
 
-Anda dapat terus menggunakan {{SITENAME}} secara anonim, atau Anda dapat [[Special:UserLogin|masuk log lagi]] sebagai pengguna yang sama atau pengguna yang lain.
+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! ==
 
@@ -1336,8 +1340,6 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'search-interwiki-caption' => 'Proyek lain',
 'search-interwiki-default' => 'Hasil $1:',
 'search-interwiki-more' => '(selanjutnya)',
-'search-mwsuggest-enabled' => 'dengan saran',
-'search-mwsuggest-disabled' => 'tidak ada saran',
 'search-relatedarticle' => 'Berkaitan',
 'mwsuggest-disable' => 'Non-aktifkan saran AJAX',
 'searcheverything-enable' => 'Cari di semua ruang nama',
@@ -2005,7 +2007,7 @@ Mungkin Anda ingin menyunting keterangan pada [$2 halaman deskripsi berkas] di s
 
 # MIME search
 'mimesearch' => 'Pencarian MIME',
-'mimesearch-summary' => 'Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME nya. Masukkan: contenttype/subtype, misalnya <code>image/jpeg</code>.',
+'mimesearch-summary' => 'Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME-nya. Masukkan: contenttype/subtype, misalnya <code>image/jpeg</code>.',
 'mimetype' => 'Tipe MIME:',
 'download' => 'unduh',
 
@@ -2915,7 +2917,6 @@ Simpan ke komputer Anda dan unggah ke sini.',
 
 # JavaScriptTest
 'javascripttest' => 'Pengujian JavaScript',
-'javascripttest-disabled' => 'Fungsi ini belum diaktifkan di wiki ini.',
 'javascripttest-title' => '$1 pengujian sedang berjalan',
 'javascripttest-pagetext-noframework' => 'Halaman ini disediakan untuk pengujian JavaScript yang sedang berjalan.',
 'javascripttest-pagetext-unknownframework' => 'Pengujian kerangka kerja "$1" tidak diketahui',
@@ -3935,6 +3936,10 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'feedback-bugcheck' => 'Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].',
 'feedback-bugnew' => 'Saya telah memeriksa. Laporkan bug baru',
 
+# Search suggestions
+'searchsuggest-search' => 'Cari',
+'searchsuggest-containing' => 'isian ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Anda tidak diizinkan mengunggah berkas ke wiki ini.',
 'api-error-badtoken' => 'Kesalahan internal: token buruk.',
index ec2cba0..91bc84a 100644 (file)
@@ -422,7 +422,7 @@ Li motive dat es "\'\'$2\'\'".',
 
 # Login and logout pages
 'logouttext' => "'''Vu ha terminat vor session.'''
-Vu posse continuar usar {{SITENAME}} anonimimen, o vu posse [[Special:UserLogin|aperter un session denov]] quam li sam usator o quam un diferent usator.
+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. 
index 282d871..b1a8e09 100644 (file)
@@ -61,16 +61,16 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#KÚFÙ', '#REDIRECT' ),
-       'fullpagename'            => array( '1', 'ÁHÀNÍLÉNKÈIHÜ', 'FULLPAGENAME' ),
-       'msg'                     => array( '0', 'OZI:', 'MSG:' ),
-       'img_right'               => array( '1', 'áká_ịkẹngạ', 'right' ),
-       'img_left'                => array( '1', 'áká_èkpè', 'left' ),
-       'img_top'                 => array( '1', 'élú', 'top' ),
-       'img_middle'              => array( '1', 'ẹtítì', 'middle' ),
-       'img_text_bottom'         => array( '1', 'okpúrù-ede', 'text-bottom' ),
-       'displaytitle'            => array( '1', 'ZIÍSHÍ', 'DISPLAYTITLE' ),
-       'pagesize'                => array( '1', 'ÀSÁIHÜ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#KÚFÙ', '#REDIRECT' ),
+       'fullpagename'              => array( '1', 'ÁHÀNÍLÉNKÈIHÜ', 'FULLPAGENAME' ),
+       'msg'                       => array( '0', 'OZI:', 'MSG:' ),
+       'img_right'                 => array( '1', 'áká_ịkẹngạ', 'right' ),
+       'img_left'                  => array( '1', 'áká_èkpè', 'left' ),
+       'img_top'                   => array( '1', 'élú', 'top' ),
+       'img_middle'                => array( '1', 'ẹtítì', 'middle' ),
+       'img_text_bottom'           => array( '1', 'okpúrù-ede', 'text-bottom' ),
+       'displaytitle'              => array( '1', 'ZIÍSHÍ', 'DISPLAYTITLE' ),
+       'pagesize'                  => array( '1', 'ÀSÁIHÜ', 'PAGESIZE' ),
 );
 
 $messages = array(
@@ -439,7 +439,7 @@ Maka ikuwaria na asụsụ nke ozor, biko chetu I ji [//translatewiki.net/wiki/M
 # Login and logout pages
 'logouttext' => "'''I fwuóla ubwá.'''
 
-I nwèríkí jíwá {{SITENAME}} na nke ẹnwéghi áhà, mànà Í nwèríkí [[Special:UserLogin|bátá òzọr]] na áhà Í shị fwüo ma áhà ozọr.
+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.
@@ -732,8 +732,6 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})''
 'search-interwiki-caption' => 'Orürü nwanne nwanyị',
 'search-interwiki-default' => '$1 nke ziri:',
 'search-interwiki-more' => '(dikarírí)',
-'search-mwsuggest-enabled' => 'ma okwu',
-'search-mwsuggest-disabled' => 'adighi okwu',
 'search-relatedarticle' => 'Nwanne',
 'searcheverything-enable' => 'Chọwa na ébé nílé',
 'searchrelated' => 'nke kọlu',
@@ -1684,4 +1682,7 @@ Nke ozor gí zonari na áká onwe ha.
 'htmlform-reset' => 'Emekwàlà gbanwere',
 'htmlform-selectorother-other' => 'Nke ozor',
 
+# Search suggestions
+'searchsuggest-search' => 'Chọwa',
+
 );
index d916747..8cea6d0 100644 (file)
@@ -14,228 +14,227 @@ $messages = array(
 'tog-rememberpassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})',
 
 # Dates
-'sunday'        => 'ᓴᓇᑦᑕᐃᓕ',
-'monday'        => 'ᓇᒡᒐᔭᖅ',
-'wednesday'     => 'ᐱᖓᔪᐊ',
-'friday'        => 'ᐸᒐᐃᑖᒃ',
-'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'    => 'ᐊᐅᒍᔅ',
+'sunday' => 'ᓴᓇᑦᑕᐃᓕ',
+'monday' => 'ᓇᒡᒐᔭᖅ',
+'wednesday' => 'ᐱᖓᔪᐊ',
+'friday' => 'ᐸᒐᐃᑖᒃ',
+'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'           => 'ᑎᓯᒻ',
-
-'about'         => 'ᒥᒃᓵᓂ',
-'article'       => 'ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ',
-'newwindow'     => '(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)',
-'cancel'        => 'ᐃᓂᖅᑎᐹ',
+'october-gen' => 'ᐅᒃᑐᐳᕆ',
+'november-gen' => 'ᓄᕕᒻᐳᕆ',
+'december-gen' => 'ᑎᓯᒻᐳᕆ',
+'jan' => 'ᔭᓐᓄ',
+'feb' => 'ᕕᐳᐊ',
+'mar' => 'ᓇᑦᓯ',
+'apr' => 'ᐊᐃᐳ',
+'may' => 'ᒪᐃ',
+'jun' => 'ᔪᓂ',
+'jul' => 'ᔪᓚᐃ',
+'aug' => 'ᐊᐅᒍ',
+'sep' => 'ᓯᑎᒻ',
+'oct' => 'ᐅᒃᑐ',
+'nov' => 'ᓄᕕ',
+'dec' => 'ᑎᓯᒻ',
+
+'about' => 'ᒥᒃᓵᓂ',
+'article' => 'ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ',
+'newwindow' => '(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)',
+'cancel' => 'ᐃᓂᖅᑎᐹ',
 'moredotdotdot' => 'ᐱᓪᓗᐊᕆᕚ...',
-'mypage'        => 'ᐊᒥ ᒪᑉᐱᑕᖅ',
-'mytalk'        => 'ᐊᓪᓚᖁᑎᒃᑲ',
-'navigation'    => 'ᒥᐊᓂᕆᕚ',
-'and'           => '&#32;ᐊᒻᒪ',
+'mypage' => 'ᐊᒥ ᒪᑉᐱᑕᖅ',
+'mytalk' => 'ᐊᓪᓚᖁᑎᒃᑲ',
+'navigation' => 'ᒥᐊᓂᕆᕚ',
+'and' => '&#32;ᐊᒻᒪ',
 
 # Cologne Blue skin
-'qbedit'         => 'ᓱᖁᓯᖅᐹ',
+'qbedit' => 'ᓱᖁᓯᖅᐹ',
 'qbspecialpages' => 'ᐱᔨ ᒪᑉᐱᑕᖅ',
 
-'errorpagetitle'    => 'ᑕᒻᒪᓇᖅᑐᖅ',
-'help'              => 'ᖃᔭᓕᑉᐹ',
-'search'            => 'ᐃᕚᖅᐳᖅ',
-'searchbutton'      => 'ᐃᕚᖅᐳᖅ',
-'go'                => 'ᐊᐃᕗᖅ',
-'searcharticle'     => 'ᐊᐃᕗᖅ',
-'history_short'     => 'ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ',
-'edit'              => 'ᓱᖁᓯᖅᐹ',
-'editthispage'      => 'ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ',
-'delete'            => 'ᓂᐸᖅᑎᐹ',
-'protect'           => 'ᓴᐳᒻᒥᕚ',
-'unprotect'         => 'ᐃᖅ ᓴᐳᒻᒥᕚ',
+'errorpagetitle' => 'ᑕᒻᒪᓇᖅᑐᖅ',
+'help' => 'ᖃᔭᓕᑉᐹ',
+'search' => 'ᐃᕚᖅᐳᖅ',
+'searchbutton' => 'ᐃᕚᖅᐳᖅ',
+'go' => 'ᐊᐃᕗᖅ',
+'searcharticle' => 'ᐊᐃᕗᖅ',
+'history_short' => 'ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ',
+'edit' => 'ᓱᖁᓯᖅᐹ',
+'editthispage' => 'ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ',
+'delete' => 'ᓂᐸᖅᑎᐹ',
+'protect' => 'ᓴᐳᒻᒥᕚ',
+'unprotect' => 'ᐃᖅ ᓴᐳᒻᒥᕚ',
 'unprotectthispage' => 'ᐃᖅ ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ',
-'newpage'           => 'ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ',
-'talkpagelinktext'  => 'ᐅᖃᓕᒪᔪᖅ',
-'specialpage'       => 'ᐱᔨ ᒪᑉᐱᑕᖅ',
-'articlepage'       => 'ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ',
-'talk'              => 'ᐅᖃᓕᒪᔪᖅ',
-'toolbox'           => 'ᓴᓇᕐᖁᑎᖃᐅᑎ',
-'otherlanguages'    => 'ᑭᓪᓗᒧᑦ ᐅᐃᑭ',
-'redirectedfrom'    => '(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)',
-'redirectpagesub'   => 'ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ',
-'jumptonavigation'  => 'ᒥᐊᓂᕆᕚ',
-'jumptosearch'      => 'ᐃᕚᖅᐳᖅ',
+'newpage' => 'ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ',
+'talkpagelinktext' => 'ᐅᖃᓕᒪᔪᖅ',
+'specialpage' => 'ᐱᔨ ᒪᑉᐱᑕᖅ',
+'articlepage' => 'ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ',
+'talk' => 'ᐅᖃᓕᒪᔪᖅ',
+'toolbox' => 'ᓴᓇᕐᖁᑎᖃᐅᑎ',
+'otherlanguages' => 'ᑭᓪᓗᒧᑦ ᐅᐃᑭ',
+'redirectedfrom' => '(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)',
+'redirectpagesub' => 'ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ',
+'jumptonavigation' => 'ᒥᐊᓂᕆᕚ',
+'jumptosearch' => 'ᐃᕚᖅᐳᖅ',
 
 # 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:ᒥᒃᓵᓂ',
-'currentevents'        => 'ᐱᒋᕗᖅ ᐱᐅᓯᖅ',
-'currentevents-url'    => 'Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ',
-'edithelp'             => 'ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ',
-'edithelppage'         => 'Help:ᐃᑯᕐᕆᐹ',
-'mainpage'             => 'ᐊᒥᖅ',
+'aboutsite' => 'ᒥᒃᓵᓂ {{SITENAME}}',
+'aboutpage' => 'Project:ᒥᒃᓵᓂ',
+'currentevents' => 'ᐱᒋᕗᖅ ᐱᐅᓯᖅ',
+'currentevents-url' => 'Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ',
+'edithelp' => 'ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ',
+'edithelppage' => 'Help:ᐃᑯᕐᕆᐹ',
+'mainpage' => 'ᐊᒥᖅ',
 'mainpage-description' => 'ᐊᒥᖅ',
-'portal'               => 'ᖃᒡᒋᖅ',
-'portal-url'           => 'Project:ᖃᒡᒋᖅ',
-'privacy'              => 'ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ',
-'privacypage'          => 'Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ',
+'portal' => 'ᖃᒡᒋᖅ',
+'portal-url' => 'Project:ᖃᒡᒋᖅ',
+'privacy' => 'ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ',
+'privacypage' => 'Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ',
 
-'youhavenewmessages'  => 'ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).',
-'newmessageslink'     => 'ᐱᒋᕗᖅ ᑭᒡᒐᐹ',
+'youhavenewmessages' => 'ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).',
+'newmessageslink' => 'ᐱᒋᕗᖅ ᑭᒡᒐᐹ',
 'newmessagesdifflink' => 'ᐊᓐᓂᑐᔪᖅ ᐊᓯᐊᙳᑐᖅ',
-'editsection'         => 'ᓱᖁᓯᖅᐹ ᐃᓚ',
-'editold'             => 'ᓱᖁᓯᖅᐹ',
-'editsectionhint'     => 'ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1',
-'showtoc'             => 'ᐊᓚᒃᑲᑎᖅᐹ',
-'hidetoc'             => 'ᐃᔨᖅᐳᖅ',
-'site-rss-feed'       => '$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ',
-'site-atom-feed'      => '$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ',
-'page-rss-feed'       => '"$1" ᕐᔅᔅ ᒥᐊᓂᕆᕚ',
-'page-atom-feed'      => '"$1" ᐊᑐᒻ ᒥᐊᓂᕆᕚ',
+'editsection' => 'ᓱᖁᓯᖅᐹ ᐃᓚ',
+'editold' => 'ᓱᖁᓯᖅᐹ',
+'editsectionhint' => 'ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1',
+'showtoc' => 'ᐊᓚᒃᑲᑎᖅᐹ',
+'hidetoc' => 'ᐃᔨᖅᐳᖅ',
+'site-rss-feed' => '$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ',
+'site-atom-feed' => '$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ',
+'page-rss-feed' => '"$1" ᕐᔅᔅ ᒥᐊᓂᕆᕚ',
+'page-atom-feed' => '"$1" ᐊᑐᒻ ᒥᐊᓂᕆᕚ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'ᒪᑉᐱᑕᖅ',
-'nstab-user'      => 'ᐃᓄᒃ ᒪᑉᐱᑕᖅ',
-'nstab-special'   => 'ᐱᔨ',
-'nstab-project'   => 'ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ',
-'nstab-image'     => 'ᐊᒋᐅᑦ',
+'nstab-main' => 'ᒪᑉᐱᑕᖅ',
+'nstab-user' => 'ᐃᓄᒃ ᒪᑉᐱᑕᖅ',
+'nstab-special' => 'ᐱᔨ',
+'nstab-project' => 'ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ',
+'nstab-image' => 'ᐊᒋᐅᑦ',
 'nstab-mediawiki' => 'ᑭᒡᒐᐹ',
-'nstab-template'  => 'ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ',
-'nstab-category'  => 'ᓄᐊᑉᐳᑦ',
+'nstab-template' => 'ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ',
+'nstab-category' => 'ᓄᐊᑉᐳᑦ',
 
 # General errors
-'badtitle'         => 'ᐊᔪᖅᑐᖅ ᐊᑎᖅ',
+'badtitle' => 'ᐊᔪᖅᑐᖅ ᐊᑎᖅ',
 'editinginterface' => "'''ᐃᓂᖅᑎᕈᑎ—''' ᐋᕼᐊ ᓱᖁᓯᖅᐹ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐄᔭᑦᓴᖅ ᖃᕋᓴᐅᔭᖅ ᑕᖅᓴᓕᖅᐹ ᐃᑭᐊᖅ ᐊᕿᑦᑐᖅ ᖃᕆᑕᐅᔭᐅᑉ ᑎᑎᕋᕐᕕᖓ. ᐊᓯᐊᙳᑐᖅ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐃᓄᒃᑎᑐᑦ ᐅᐃᑭᐱᑎᐊ ᐊᓪᓚᖑᖅᑐᐊᖅ ᓇᑭᒪᖅᐳᖅ ᖃᑕᙳᑎ.",
 
 # Login and logout pages
-'welcomecreation'    => "== ᐊᕆᐅᙵᐃᐹ, $1! ==
+'welcomecreation' => "== ᐊᕆᐅᙵᐃᐹ, $1! ==
 ᐱᒋᕗᖅ ᖃᑕᙳᑎ ᐅᐃᑭᐱᑎᐊ ᑮᓇᐅᔭᖁᑎᖃᕐᕕᒃ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ. ᐃᖅᑑ ᓱᖁᓯᖅᐹ {{SITENAME}} ᐃᓐᓂᐊᑐᖅ «''ᓂᐱ ᐊᒥ''»",
-'yourname'           => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ',
-'yourpassword'       => 'ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ',
-'yourpasswordagain'  => 'ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ',
+'yourname' => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ',
+'yourpassword' => 'ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ',
+'yourpasswordagain' => 'ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ',
 'remembermypassword' => 'ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'ᐊᑯᓐᓇᐳᖅ',
-'loginprompt'        => 'ᐱᒋᐊᓕᒃ ᐃᒪᑐᐊᖅ ᖃᕆᑕᐅᔭᖅ ᖂᑮᔅ(Cookies) ᐱᕐᖄᑎ ᐊᑯᓐᓇᐳᖅ ᐅᐃᑭᐱᑎᐊ.',
-'userlogin'          => 'ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ',
-'logout'             => 'ᐊᓂᕝᕕᒃ',
-'userlogout'         => 'ᐊᓂᕝᕕᒃ',
-'nologin'            => "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
-'nologinlink'        => 'ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ',
-'gotaccountlink'     => 'ᐊᑯᓐᓇᐳᖅ',
-'mailmypassword'     => 'ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
+'login' => 'ᐊᑯᓐᓇᐳᖅ',
+'loginprompt' => 'ᐱᒋᐊᓕᒃ ᐃᒪᑐᐊᖅ ᖃᕆᑕᐅᔭᖅ ᖂᑮᔅ(Cookies) ᐱᕐᖄᑎ ᐊᑯᓐᓇᐳᖅ ᐅᐃᑭᐱᑎᐊ.',
+'userlogin' => 'ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ',
+'logout' => 'ᐊᓂᕝᕕᒃ',
+'userlogout' => 'ᐊᓂᕝᕕᒃ',
+'nologin' => "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
+'nologinlink' => 'ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ',
+'gotaccountlink' => 'ᐊᑯᓐᓇᐳᖅ',
+'mailmypassword' => 'ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
 
 # Edit page toolbar
 'bold_sample' => 'ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ',
-'bold_tip'    => 'ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ',
+'bold_tip' => 'ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ',
 
 # Edit pages
-'summary'         => 'ᓱᕕᑦ:',
-'minoredit'       => 'ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ',
-'watchthis'       => 'ᐅᕝᕙ',
-'savearticle'     => 'ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ',
-'preview'         => 'ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ',
-'showpreview'     => 'ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ',
-'showdiff'        => 'ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ',
+'summary' => 'ᓱᕕᑦ:',
+'minoredit' => 'ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ',
+'watchthis' => 'ᐅᕝᕙ',
+'savearticle' => 'ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ',
+'preview' => 'ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ',
+'showpreview' => 'ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ',
+'showdiff' => 'ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ',
 'summary-preview' => 'ᓱᕕᑦ:',
-'blockedtitle'    => 'ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ',
-'loginreqlink'    => 'ᐊᑯᓐᓇᐳᖅ',
-'newarticle'      => '(ᐱᒋᕗᖅ)',
-'editing'         => 'ᐊᓯᐊᙳᑐᖅ $1',
-'editingsection'  => 'ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)',
-'editingcomment'  => 'ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)',
-'editconflict'    => 'ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1',
+'blockedtitle' => 'ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ',
+'loginreqlink' => 'ᐊᑯᓐᓇᐳᖅ',
+'newarticle' => '(ᐱᒋᕗᖅ)',
+'editing' => 'ᐊᓯᐊᙳᑐᖅ $1',
+'editingsection' => 'ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)',
+'editingcomment' => 'ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)',
+'editconflict' => 'ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1',
 
 # History pages
-'currentrev'          => 'ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
-'previousrevision'    => '←ᐅᑐᖃᖅ  ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
-'nextrevision'        => 'ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→',
+'currentrev' => 'ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
+'previousrevision' => '←ᐅᑐᖃᖅ  ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
+'nextrevision' => 'ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→',
 'currentrevisionlink' => 'ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
-'next'                => 'ᑕᒡᒐ',
-'last'                => 'ᐊᓐᓂᑐᔪᖅ',
+'next' => 'ᑕᒡᒐ',
+'last' => 'ᐊᓐᓂᑐᔪᖅ',
 
 # Revision feed
-'history-feed-title'       => 'ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ',
+'history-feed-title' => 'ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ',
 'history-feed-description' => 'ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ ᐃᑭᐊᖅ ᐅᐃᑭ',
 
 # Diffs
 'history-title' => 'ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ "$1"',
-'difference'    => '(ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ)',
-'lineno'        => 'ᑐᑭᖅᓯᖅ $1:',
-'editundo'      => 'ᐃᐱᐅᑦᔮᐹ',
-'diff-multi'    => '({{PLURAL:$1|ᐊᑕᐅᓯᖅ ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|$1 ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐊᔪᖅᑐᖅ ᐅᕝᕙ.)',
+'lineno' => 'ᑐᑭᖅᓯᖅ $1:',
+'editundo' => 'ᐃᐱᐅᑦᔮᐹ',
+'diff-multi' => '({{PLURAL:$1|ᐊᑕᐅᓯᖅ ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|$1 ᑭᒻᒥᐅᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐊᔪᖅᑐᖅ ᐅᕝᕙ.)',
 
 # Search results
-'nextn'       => 'ᑕᒡᒐ {{PLURAL:$1|$1}}',
+'nextn' => 'ᑕᒡᒐ {{PLURAL:$1|$1}}',
 'powersearch' => 'ᕿᓐᓇᕆᒃᓴᕐᓂᖅ',
 
 # Preferences page
-'mypreferences'     => 'ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ',
-'prefs-rc'          => 'ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ',
+'mypreferences' => 'ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ',
+'prefs-rc' => 'ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ',
 'searchresultshead' => 'ᐃᕚᖅᐳᖅ',
-'youremail'         => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:',
-'username'          => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:',
-'yourrealname'      => 'ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:',
-'email'             => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
-'prefs-help-email'  => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ',
+'youremail' => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:',
+'username' => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:',
+'yourrealname' => 'ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:',
+'email' => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
+'prefs-help-email' => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ',
 
 # User rights
 'editinguser' => "ᓱᖁᓯᖅᐹ ᖃᑕᙳᑎ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
 
 # Recent changes
-'recentchanges'   => 'ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ',
-'hide'            => 'ᐃᔨᖅᐳᖅ',
-'show'            => 'ᐊᓚᒃᑲᑎᖅᐹ',
+'recentchanges' => 'ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ',
+'hide' => 'ᐃᔨᖅᐳᖅ',
+'show' => 'ᐊᓚᒃᑲᑎᖅᐹ',
 'minoreditletter' => 'ᐅ',
-'newpageletter'   => 'ᐱ',
-'boteditletter'   => 'ᑉ',
+'newpageletter' => 'ᐱ',
+'boteditletter' => 'ᑉ',
 
 # Recent changes linked
-'recentchangeslinked'          => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
-'recentchangeslinked-feed'     => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
-'recentchangeslinked-toolbox'  => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
+'recentchangeslinked' => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
+'recentchangeslinked-feed' => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
+'recentchangeslinked-toolbox' => 'ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ',
 'recentchangeslinked-noresult' => '0 ᐊᓯᐊᙳᑐᖅ ᐃᑦᓯᕕᒻᒥᐅᓯᖅᐹ ᒪᑉᐱᑕᖅ ᑕᑯᕙᓪᓚᑐᖅ ᓱᓪᓗᒃ ᑕᒪᑐᒪᓂ ᑐᒥᑯ',
 
 # Upload
-'upload'            => 'ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ',
-'uploadbtn'         => 'ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ',
-'filedesc'          => 'ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ',
+'upload' => 'ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ',
+'uploadbtn' => 'ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ',
+'filedesc' => 'ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ',
 'fileuploadsummary' => 'ᓱᕕᑦ:',
-'watchthisupload'   => 'ᐅᕝᕙ',
+'watchthisupload' => 'ᐅᕝᕙ',
 
 # File description page
 'file-anchor-link' => 'ᐊᒋᐅᑦ',
@@ -250,57 +249,57 @@ $messages = array(
 'randomredirect' => 'ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ',
 
 # Statistics
-'statistics'              => 'ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ',
+'statistics' => 'ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ',
 'statistics-header-users' => 'ᖃᑕᙳᑎ ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ',
 
 'doubleredirects' => 'ᑕᐱᕐᖃᓕᒃ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ',
 
-'brokenredirects'        => 'ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ',
-'brokenredirects-edit'   => 'ᓱᖁᓯᖅᐹ',
+'brokenredirects' => 'ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ',
+'brokenredirects-edit' => 'ᓱᖁᓯᖅᐹ',
 'brokenredirects-delete' => 'ᓂᐸᖅᑎᐹ',
 
 # Miscellaneous special pages
-'listusers'         => 'ᖃᑕᙳᑎ ᓂᐱ',
+'listusers' => 'ᖃᑕᙳᑎ ᓂᐱ',
 'newpages-username' => 'ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:',
-'ancientpages'      => 'ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ',
-'move'              => 'ᐅᐊᔪᖅ',
+'ancientpages' => 'ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ',
+'move' => 'ᐅᐊᔪᖅ',
 
 # Book sources
 'booksources-go' => 'ᐊᐃᕗᖅ',
 
 # Special:AllPages
-'allpages'       => 'ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ',
-'nextpage'       => 'ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)',
-'allpagesprev'   => 'ᑐᓄᓪᓕᐹᖅ',
-'allpagesnext'   => 'ᑕᒡᒐ',
+'allpages' => 'ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ',
+'nextpage' => 'ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)',
+'allpagesprev' => 'ᑐᓄᓪᓕᐹᖅ',
+'allpagesnext' => 'ᑕᒡᒐ',
 'allpagessubmit' => 'ᐊᐃᕗᖅ',
 
 # Special:Categories
 'categories' => 'ᓄᐊᑉᐳᑦ',
 
 # E-mail user
-'emailuser'    => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ',
-'emailfrom'    => 'ᓇᑭᑦ',
+'emailuser' => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ',
+'emailfrom' => 'ᓇᑭᑦ',
 'emailmessage' => 'ᑭᒡᒐᐹ',
-'emailsend'    => 'ᕿᐅᑦᓴᕕᒋᕚ',
+'emailsend' => 'ᕿᐅᑦᓴᕕᒋᕚ',
 
 # Watchlist
-'watchlist'     => 'ᐅᕝᕙ ᒪᑉᐱᑕᖅ',
-'mywatchlist'   => 'ᓂᐱ ᐊᒥ',
-'watch'         => 'ᐅᕝᕙ',
+'watchlist' => 'ᐅᕝᕙ ᒪᑉᐱᑕᖅ',
+'mywatchlist' => 'ᓂᐱ ᐊᒥ',
+'watch' => 'ᐅᕝᕙ',
 'watchthispage' => 'ᐅᕝᕙ',
-'unwatch'       => 'ᐃᖅ ᐅᕝᕙ',
+'unwatch' => 'ᐃᖅ ᐅᕝᕙ',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} ᖃᑕᙳᑎ',
-'created'                      => 'ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ',
+'created' => 'ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ',
 
 # Delete
-'dellogpage'  => 'ᓂᐸᖅ ᓂᐱ',
+'dellogpage' => 'ᓂᐸᖅ ᓂᐱ',
 'deletionlog' => 'ᓂᐸᖅ ᓂᐱ',
 
 # Protect
-'prot_1movedto2'      => '[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]',
-'protect-legend'      => 'ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ',
+'prot_1movedto2' => '[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]',
+'protect-legend' => 'ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ',
 'protect-level-sysop' => 'ᓯᕐᓚᒃ ᑎᑎᕋᖅᓯᒪᔪᓂᒃ ᑐᖅᑯᖅᑎᕆᔨ',
 
 # Restrictions (nouns)
@@ -315,49 +314,49 @@ $messages = array(
 # Contributions
 'mycontris' => 'ᑕᓕᐊᖅ',
 
-'sp-contributions-talk'   => 'ᐅᖃᓕᒪᔪᖅ',
+'sp-contributions-talk' => 'ᐅᖃᓕᒪᔪᖅ',
 'sp-contributions-submit' => 'ᐃᕚᖅᐳᖅ',
 
 # What links here
 'whatlinkshere' => 'ᐅᖅᓯᖅ ᒪᐅᖓ',
-'isredirect'    => 'ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ',
+'isredirect' => 'ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ',
 
 # Block/unblock
-'blockip'                  => 'ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ',
-'badipaddress'             => 'ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ',
-'blockipsuccesssub'        => 'ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ',
-'ipblocklist-submit'       => 'ᐃᕚᖅᐳᖅ',
-'anononlyblock'            => 'ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ',
-'blocklink'                => 'ᐃᖅ',
-'contribslink'             => 'ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ',
-'blocklogpage'             => 'ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ',
+'blockip' => 'ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ',
+'badipaddress' => 'ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ',
+'blockipsuccesssub' => 'ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ',
+'ipblocklist-submit' => 'ᐃᕚᖅᐳᖅ',
+'anononlyblock' => 'ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ',
+'blocklink' => 'ᐃᖅ',
+'contribslink' => 'ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ',
+'blocklogpage' => 'ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ',
 'block-log-flags-anononly' => 'ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᐋᖅᑭᒃᓱᐃᔨ ᑭᓯᐊᓂ',
 'block-log-flags-nocreate' => 'ᑮᓇᐅᔭᖃᕐᕕᒃ ᐃᓄᐃᕈᑎᕚ ᐃᓂᖅᑎᐹ ᐱᒋᕗᖅ',
-'block-log-flags-noemail'  => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
+'block-log-flags-noemail' => 'ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ',
 
 # Move page
 'move-page-legend' => 'ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ',
-'movearticle'      => 'ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ',
-'movedto'          => 'ᐅᐊᔪᖅ',
-'movelogpage'      => 'ᐅᐊᔪᖅ ᓂᐱ',
-'movereason'       => 'ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:',
-'delete_and_move'  => 'ᓂᐸᖅᑎᐹ  ᐊᒻᒪ ᐅᐊᔪᖅ',
+'movearticle' => 'ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ',
+'movedto' => 'ᐅᐊᔪᖅ',
+'movelogpage' => 'ᐅᐊᔪᖅ ᓂᐱ',
+'movereason' => 'ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:',
+'delete_and_move' => 'ᓂᐸᖅᑎᐹ  ᐊᒻᒪ ᐅᐊᔪᖅ',
 
 # Namespace 8 related
 'allmessagesname' => 'ᐊᑎᖅ',
 
 # Import log
-'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐃᑭᐊᖅ $2',
 
 # Tooltip help for the actions
-'tooltip-pt-mytalk'               => 'ᐊᓪᓚᖁᑎᒃᑲ',
-'tooltip-pt-preferences'          => 'ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ',
-'tooltip-pt-logout'               => 'ᐊᓂᕝᕕᒃ',
-'tooltip-ca-protect'              => 'ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ',
-'tooltip-search'                  => 'ᐃᕚᖅᐳᖅ {{SITENAME}}',
-'tooltip-minoredit'               => 'ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ',
-'tooltip-diff'                    => 'ᓱᕐᕋᐹ ᖃᑕᙳᑎ',
+'tooltip-pt-mytalk' => 'ᐊᓪᓚᖁᑎᒃᑲ',
+'tooltip-pt-preferences' => 'ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ',
+'tooltip-pt-logout' => 'ᐊᓂᕝᕕᒃ',
+'tooltip-ca-protect' => 'ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ',
+'tooltip-search' => 'ᐃᕚᖅᐳᖅ {{SITENAME}}',
+'tooltip-minoredit' => 'ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ',
+'tooltip-diff' => 'ᓱᕐᕋᐹ ᖃᑕᙳᑎ',
 'tooltip-compareselectedversions' => 'ᐅᕝᕙ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᒪᕐᕉᒃ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ',
 
 # Attribution
@@ -368,25 +367,25 @@ $messages = array(
 
 # Browsing diffs
 'previousdiff' => '← ᑐᓄᓪᓕᐹᖅ ᐊᓯᐊᙳᑐᖅ',
-'nextdiff'     => 'ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →',
+'nextdiff' => 'ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →',
 
 # Special:NewFiles
 'ilsubmit' => 'ᐃᕚᖅᐳᖅ',
-'bydate'   => 'ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ',
+'bydate' => 'ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ',
 
 # Variants for Inuktitut language
 'variantname-ike-cans' => 'ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ',
 'variantname-ike-latn' => 'ilisautik',
-'variantname-iu'       => 'disable',
+'variantname-iu' => 'disable',
 
 # EXIF tags
-'exif-imagelength'         => 'ᖁᑦᓯᖕᓂᖅ',
-'exif-imagedescription'    => 'ᐃᓄᙳᐊᖅ ᐊᑎᖅ',
-'exif-colorspace'          => 'ᒥᖑᐊᕈᑎᒥᑎᖅᐹ',
-'exif-datetimeoriginal'    => 'ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ',
-'exif-datetimedigitized'   => 'ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ',
+'exif-imagelength' => 'ᖁᑦᓯᖕᓂᖅ',
+'exif-imagedescription' => 'ᐃᓄᙳᐊᖅ ᐊᑎᖅ',
+'exif-colorspace' => 'ᒥᖑᐊᕈᑎᒥᑎᖅᐹ',
+'exif-datetimeoriginal' => 'ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ',
+'exif-datetimedigitized' => 'ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ',
 'exif-exposuretime-format' => '$1 ᐊᐃᑉᐸᖅ ($2)',
-'exif-brightnessvalue'     => 'ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ',
+'exif-brightnessvalue' => 'ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ',
 
 # 'all' in various places, this might be different for inflected languages
 'monthsall' => 'ᓱᓇᒥᑦᑐᖅ',
@@ -397,14 +396,14 @@ $messages = array(
 # Multipage image navigation
 'imgmultipageprev' => '← ᑐᓄᓪᓕᐹᖅ  ᒪᑉᐱᑕᖅ',
 'imgmultipagenext' => 'ᑕᒡᒐ ᒪᑉᐱᑕᖅ →',
-'imgmultigo'       => 'ᐊᐃᕗᖅ!',
+'imgmultigo' => 'ᐊᐃᕗᖅ!',
 
 # Table pager
 'table_pager_limit_submit' => 'ᐊᐃᕗᖅ',
 
 # Auto-summaries
 'autoredircomment' => 'ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ [[$1]]',
-'autosumm-new'     => 'ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1',
+'autosumm-new' => 'ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1',
 
 # Special:SpecialPages
 'specialpages' => 'ᐱᔨ ᒪᑉᐱᑕᖅ',
index 3265c55..4325b71 100644 (file)
@@ -14,49 +14,49 @@ $messages = array(
 'tog-rememberpassword' => 'Iqtuu uikipitia atiq qakugiq atuinnasivuq uvalumaq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})',
 
 # Dates
-'sunday'       => 'sanattaili',
-'monday'       => 'naggajaq',
-'wednesday'    => 'pingajua',
-'friday'       => 'pagaitaak',
-'sun'          => 'sana',
-'mon'          => 'nag',
-'wed'          => 'pinga',
-'january'      => 'januari',
-'february'     => 'vipuari',
-'march'        => 'maarsi',
-'april'        => 'aipuril',
-'may_long'     => 'mai',
-'june'         => 'juni',
-'july'         => 'julai',
-'august'       => 'augus',
-'october'      => 'uktupuri',
-'november'     => 'nuvimpuri',
-'december'     => 'tisimpuri',
-'january-gen'  => 'januari',
+'sunday' => 'sanattaili',
+'monday' => 'naggajaq',
+'wednesday' => 'pingajua',
+'friday' => 'pagaitaak',
+'sun' => 'sana',
+'mon' => 'nag',
+'wed' => 'pinga',
+'january' => 'januari',
+'february' => 'vipuari',
+'march' => 'maarsi',
+'april' => 'aipuril',
+'may_long' => 'mai',
+'june' => 'juni',
+'july' => 'julai',
+'august' => 'augus',
+'october' => 'uktupuri',
+'november' => 'nuvimpuri',
+'december' => 'tisimpuri',
+'january-gen' => 'januari',
 'february-gen' => 'vipuari',
-'march-gen'    => 'maarsi',
-'april-gen'    => 'aipuril',
-'may-gen'      => 'mai',
-'june-gen'     => 'juni',
-'july-gen'     => 'julai',
-'august-gen'   => 'augus',
-'october-gen'  => 'uktupuri',
+'march-gen' => 'maarsi',
+'april-gen' => 'aipuril',
+'may-gen' => 'mai',
+'june-gen' => 'juni',
+'july-gen' => 'julai',
+'august-gen' => 'augus',
+'october-gen' => 'uktupuri',
 'november-gen' => 'nuvimpuri',
 'december-gen' => 'tisimpuri',
-'apr'          => 'aipu',
-'may'          => 'mai',
-'aug'          => 'augu',
-'nov'          => 'nuvi',
-
-'about'         => 'miksaani',
-'article'       => 'ilulik mappitaq',
-'newwindow'     => '(uittuq qarasaujaq ikiaq pigivuq igalaaq)',
-'cancel'        => 'iniqtipaa',
+'apr' => 'aipu',
+'may' => 'mai',
+'aug' => 'augu',
+'nov' => 'nuvi',
+
+'about' => 'miksaani',
+'article' => 'ilulik mappitaq',
+'newwindow' => '(uittuq qarasaujaq ikiaq pigivuq igalaaq)',
+'cancel' => 'iniqtipaa',
 'moredotdotdot' => 'pilluarivaa...',
-'mypage'        => 'ami mappitaq',
-'mytalk'        => 'atlarqutikka',
-'navigation'    => 'mianirivaa',
-'and'           => '&#32;amma',
+'mypage' => 'ami mappitaq',
+'mytalk' => 'atlarqutikka',
+'navigation' => 'mianirivaa',
+'and' => '&#32;amma',
 
 # Cologne Blue skin
 'qbspecialpages' => 'piji mappitaq',
@@ -64,135 +64,134 @@ $messages = array(
 # Vector skin
 'vector-view-edit' => 'Suqusiqpaa',
 
-'help'              => 'qajalippaa',
-'search'            => 'ivaaqpuq',
-'searchbutton'      => 'ivaaqpuq',
-'go'                => 'aivuq',
-'searcharticle'     => 'aivuk',
-'history_short'     => 'mappitaq kingunittinni',
-'edit'              => 'Suqusiqpaa',
-'editthispage'      => 'suqusiqpaa mappitaq',
-'delete'            => 'nipaqtipaa',
-'protect'           => 'sapummivaa',
-'unprotect'         => 'iq sapummivaa',
+'help' => 'qajalippaa',
+'search' => 'ivaaqpuq',
+'searchbutton' => 'ivaaqpuq',
+'go' => 'aivuq',
+'searcharticle' => 'aivuk',
+'history_short' => 'mappitaq kingunittinni',
+'edit' => 'Suqusiqpaa',
+'editthispage' => 'suqusiqpaa mappitaq',
+'delete' => 'nipaqtipaa',
+'protect' => 'sapummivaa',
+'unprotect' => 'iq sapummivaa',
 'unprotectthispage' => 'iq sapummivaa mappitaq',
-'newpage'           => 'pigivuk mappitaq',
-'specialpage'       => 'piji mappitaq',
-'articlepage'       => 'ilulik mappitaq uvva',
-'talk'              => 'uqalimajuq',
-'toolbox'           => 'sanarqutiqauti',
-'otherlanguages'    => 'killumut uiki',
-'redirectedfrom'    => '(qaningani kamagijaq aasit nakit $1)',
-'redirectpagesub'   => 'aningani kamagijaq aasit nakit mappitaq',
-'jumptonavigation'  => 'mianirivaa',
-'jumptosearch'      => 'ivaaqpuq',
+'newpage' => 'pigivuk mappitaq',
+'specialpage' => 'piji mappitaq',
+'articlepage' => 'ilulik mappitaq uvva',
+'talk' => 'uqalimajuq',
+'toolbox' => 'sanarqutiqauti',
+'otherlanguages' => 'killumut uiki',
+'redirectedfrom' => '(qaningani kamagijaq aasit nakit $1)',
+'redirectpagesub' => 'aningani kamagijaq aasit nakit mappitaq',
+'jumptonavigation' => 'mianirivaa',
+'jumptosearch' => 'ivaaqpuq',
 
 # 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'            => 'miksaani {{SITENAME}}',
-'aboutpage'            => 'Project:miksaani',
-'currentevents'        => 'pigivuq piusiq',
-'currentevents-url'    => 'Project:pigivuq piusiq',
-'edithelp'             => 'ikurripaa suqusiqpaa',
-'edithelppage'         => 'Help:suqusiqpaa',
-'mainpage'             => 'amiq',
+'aboutsite' => 'miksaani {{SITENAME}}',
+'aboutpage' => 'Project:miksaani',
+'currentevents' => 'pigivuq piusiq',
+'currentevents-url' => 'Project:pigivuq piusiq',
+'edithelp' => 'ikurripaa suqusiqpaa',
+'edithelppage' => 'Help:suqusiqpaa',
+'mainpage' => 'amiq',
 'mainpage-description' => 'amiq',
-'portal'               => 'qaggiq',
-'portal-url'           => 'Project:qaggiq',
-'privacy'              => 'namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq',
-'privacypage'          => 'Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq',
+'portal' => 'qaggiq',
+'portal-url' => 'Project:qaggiq',
+'privacy' => 'namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq',
+'privacypage' => 'Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq',
 
-'youhavenewmessages'  => 'ilissu pigivaa $1 ($2).',
-'newmessageslink'     => 'pigivuk kiggapaa',
+'youhavenewmessages' => 'ilissu pigivaa $1 ($2).',
+'newmessageslink' => 'pigivuk kiggapaa',
 'newmessagesdifflink' => 'annitujuq asiaNngutuq',
-'editsection'         => 'suqusiqpaa',
-'editold'             => 'suqusiqpaa',
-'editlink'            => 'suqusiqpaa',
-'editsectionhint'     => 'suqusiqpaa ilangiutititsiguti: $1',
-'site-rss-feed'       => '$1 rss mianirivaa',
-'site-atom-feed'      => '$1 atum mianirivaa',
-'page-rss-feed'       => '"$1" rss mianirivaa',
-'page-atom-feed'      => '"$1" atum mianirivaa',
+'editsection' => 'suqusiqpaa',
+'editold' => 'suqusiqpaa',
+'editlink' => 'suqusiqpaa',
+'editsectionhint' => 'suqusiqpaa ilangiutititsiguti: $1',
+'site-rss-feed' => '$1 rss mianirivaa',
+'site-atom-feed' => '$1 atum mianirivaa',
+'page-rss-feed' => '"$1" rss mianirivaa',
+'page-atom-feed' => '"$1" atum mianirivaa',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'mappitaq',
-'nstab-user'      => 'inuk mappitaq',
-'nstab-special'   => 'piji',
-'nstab-project'   => 'piliriaksait pivalliajjutiksanut miqitaq',
+'nstab-main' => 'mappitaq',
+'nstab-user' => 'inuk mappitaq',
+'nstab-special' => 'piji',
+'nstab-project' => 'piliriaksait pivalliajjutiksanut miqitaq',
 'nstab-mediawiki' => 'kiggapaa',
-'nstab-template'  => 'mianirivaa-qijuqut',
-'nstab-category'  => 'nuapput',
+'nstab-template' => 'mianirivaa-qijuqut',
+'nstab-category' => 'nuapput',
 
 # General errors
-'badtitle'         => 'ajuqtuq atiq',
+'badtitle' => 'ajuqtuq atiq',
 'editinginterface' => "'''iniqtiruti—''' aaha suqusiqpaa iqiak mappitaq atuinnasivuq iijatsaq qarasaujaq taqsaliqpaa ikiaq aqittuq qaritaujaup titirarvinga. asiaNngutuq ikiaq mappitaq inuktitut uikipitia allanguqtuaq nakimaqpuq qatannguti.",
 
 # Login and logout pages
-'welcomecreation'    => "== ariunngaipaa, $1! ==
+'welcomecreation' => "== ariunngaipaa, $1! ==
 pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiqpa{{SITENAME}} inniatuq—«''nipi ami''»",
-'yourname'           => 'uikipitia atiq',
-'yourpassword'       => 'uikipitia palanngasauti',
-'yourpasswordagain'  => 'tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti',
+'yourname' => 'uikipitia atiq',
+'yourpassword' => 'uikipitia palanngasauti',
+'yourpasswordagain' => 'tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti',
 'remembermypassword' => 'iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'akunnapuq',
-'loginprompt'        => 'pigialik imatuaq qaritaujaq quukiis (Cookies) pirqaati akunnapuq {{SITENAME}}.',
-'userlogin'          => 'akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik',
-'logout'             => 'anivvik',
-'userlogout'         => 'anivvik',
-'nologin'            => "ajuinnaaq inuquti? '''$1'''.",
-'nologinlink'        => 'pirqaapaa kiinaujakkuvingmi tuqkuqsivik',
-'mailmypassword'     => 'qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga',
+'login' => 'akunnapuq',
+'loginprompt' => 'pigialik imatuaq qaritaujaq quukiis (Cookies) pirqaati akunnapuq {{SITENAME}}.',
+'userlogin' => 'akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik',
+'logout' => 'anivvik',
+'userlogout' => 'anivvik',
+'nologin' => "ajuinnaaq inuquti? '''$1'''.",
+'nologinlink' => 'pirqaapaa kiinaujakkuvingmi tuqkuqsivik',
+'mailmypassword' => 'qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga',
 
 # Edit page toolbar
 'bold_sample' => 'ijjujug taqsaliqpaa',
-'bold_tip'    => 'ijjujug taqsaliqpaa',
+'bold_tip' => 'ijjujug taqsaliqpaa',
 
 # Edit pages
-'summary'         => 'suvit:',
-'minoredit'       => 'ukiukiluaq asianngutuq',
-'watchthis'       => 'uvva',
-'savearticle'     => 'uqausillaringgita titiraqtauninggil',
-'preview'         => 'uvva qangasaanguliqtuq',
-'showpreview'     => 'surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit',
-'showdiff'        => 'alakkatippaa asianngutuq',
+'summary' => 'suvit:',
+'minoredit' => 'ukiukiluaq asianngutuq',
+'watchthis' => 'uvva',
+'savearticle' => 'uqausillaringgita titiraqtauninggil',
+'preview' => 'uvva qangasaanguliqtuq',
+'showpreview' => 'surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit',
+'showdiff' => 'alakkatippaa asianngutuq',
 'summary-preview' => 'suvit preview:',
-'blockedtitle'    => 'aaqqiksuiji uminngasisijuq',
-'loginreqlink'    => 'akunnapuq',
-'newarticle'      => '(pigivuk)',
-'editingsection'  => 'suqusiqpaa $1 (ilangiutititsiguti)',
-'editingcomment'  => 'suqusiqpaa $1 (ujjirijaq)',
-'editconflict'    => 'suqusiqpaa akaunngiliurutiniq: $1',
+'blockedtitle' => 'aaqqiksuiji uminngasisijuq',
+'loginreqlink' => 'akunnapuq',
+'newarticle' => '(pigivuk)',
+'editingsection' => 'suqusiqpaa $1 (ilangiutititsiguti)',
+'editingcomment' => 'suqusiqpaa $1 (ujjirijaq)',
+'editconflict' => 'suqusiqpaa akaunngiliurutiniq: $1',
 
 # History pages
-'currentrev'          => 'maanna titiraqtaugiarngarut',
-'previousrevision'    => '←utuqaq titiraqtaugiarngarut',
-'nextrevision'        => 'pilluarivaa pigivuk revision titiraqtaugiarngarut→',
+'currentrev' => 'maanna titiraqtaugiarngarut',
+'previousrevision' => '←utuqaq titiraqtaugiarngarut',
+'nextrevision' => 'pilluarivaa pigivuk revision titiraqtaugiarngarut→',
 'currentrevisionlink' => 'maanna titiraqtaugiarngarut',
-'next'                => 'tagga',
+'next' => 'tagga',
 
 # Revision feed
-'history-feed-title'       => 'titiraqtaugiarngarut mappitaq kingunittinni',
+'history-feed-title' => 'titiraqtaugiarngarut mappitaq kingunittinni',
 'history-feed-description' => 'titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki',
 
 # Diffs
 'history-title' => 'titiraqtaugiarngarut mappitaq kingunittinni "$1"',
-'difference'    => '(asiaNngutuq mappitaq akunninganni titiraqtaugiarngarut)',
-'lineno'        => 'tukiqsiq $1:',
-'editundo'      => 'ipiutjaapaa',
-'diff-multi'    => '({{PLURAL:$1|atausiq kimmiuvuq titiraqtaugiarngarut|$1 kimmiuvuq titiraqtaugiarngarut}} ajuqtuq uvva.)',
+'lineno' => 'tukiqsiq $1:',
+'editundo' => 'ipiutjaapaa',
+'diff-multi' => '({{PLURAL:$1|atausiq kimmiuvuq titiraqtaugiarngarut|$1 kimmiuvuq titiraqtaugiarngarut}} ajuqtuq uvva.)',
 
 # Search results
-'nextn'       => 'tagga {{PLURAL:$1|$1}}',
+'nextn' => 'tagga {{PLURAL:$1|$1}}',
 'powersearch' => 'ivaaqpuq',
 
 # Preferences page
-'mypreferences'     => 'mi pikkumaniqpaaq',
-'prefs-rc'          => 'pigivuq asianngutuq',
+'mypreferences' => 'mi pikkumaniqpaaq',
+'prefs-rc' => 'pigivuq asianngutuq',
 'searchresultshead' => 'ivaaqpuq',
-'youremail'         => 'kigutiup sitiniqpaanga:',
-'username'          => 'uikipitia atiq:',
-'yourrealname'      => 'inullarik atiq:',
-'email'             => 'kigutiup sitiniqpaanga',
-'prefs-help-email'  => 'kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq',
+'youremail' => 'kigutiup sitiniqpaanga:',
+'username' => 'uikipitia atiq:',
+'yourrealname' => 'inullarik atiq:',
+'email' => 'kigutiup sitiniqpaanga',
+'prefs-help-email' => 'kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq',
 
 # User rights
 'editinguser' => "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
@@ -201,17 +200,17 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq
 'recentchanges' => 'pigivuq asianngutuq',
 
 # Recent changes linked
-'recentchangeslinked'          => 'asiaNngutuq mitsaasijuq',
-'recentchangeslinked-feed'     => 'asiaNngutuq mitsaasijuq',
-'recentchangeslinked-toolbox'  => 'asiaNngutuq mitsaasijuq',
+'recentchangeslinked' => 'asiaNngutuq mitsaasijuq',
+'recentchangeslinked-feed' => 'asiaNngutuq mitsaasijuq',
+'recentchangeslinked-toolbox' => 'asiaNngutuq mitsaasijuq',
 'recentchangeslinked-noresult' => '0 asiaNngutuq itsivimmiusiqpaa mappitaq takuvallatuq sulluk tamatumani tumiku',
 
 # Upload
-'upload'            => 'mappipaa nalinaijatit',
-'uploadbtn'         => 'mappipaa nalunaijautit',
-'filedesc'          => 'piliriaksat pivigjuanguningit',
+'upload' => 'mappipaa nalinaijatit',
+'uploadbtn' => 'mappipaa nalunaijautit',
+'filedesc' => 'piliriaksat pivigjuanguningit',
 'fileuploadsummary' => 'suvit:',
-'watchthisupload'   => 'uvva',
+'watchthisupload' => 'uvva',
 
 # List redirects
 'listredirects' => 'nipi qaningani kamagijaq aasit nakit',
@@ -223,56 +222,56 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq
 'randomredirect' => 'nakituinnaq qaujisarniq qaningani kamagijaq aasit nakit',
 
 # Statistics
-'statistics'              => 'kisitsisillgurlugitpasissitissat',
+'statistics' => 'kisitsisillgurlugitpasissitissat',
 'statistics-header-users' => 'qatannguti kisitsisillgurlugitpasissitissat',
 
 'doubleredirects' => 'tapirqilik qaningani kamagijaq aasit nakit',
 
-'brokenredirects'        => 'napivaa qaningani kamagijaq aasit nakit',
-'brokenredirects-edit'   => 'suqusiqpaa',
+'brokenredirects' => 'napivaa qaningani kamagijaq aasit nakit',
+'brokenredirects-edit' => 'suqusiqpaa',
 'brokenredirects-delete' => 'nipaqtipaa',
 
 # Miscellaneous special pages
-'listusers'         => 'qatannguti nipi',
+'listusers' => 'qatannguti nipi',
 'newpages-username' => 'uikipitia atiq:',
-'ancientpages'      => 'utuqaq ittusaq mappitaq',
-'move'              => 'uajuq',
+'ancientpages' => 'utuqaq ittusaq mappitaq',
+'move' => 'uajuq',
 
 # Book sources
 'booksources-go' => 'aivuq',
 
 # Special:AllPages
-'allpages'       => 'sunamittuq mappitaq',
-'nextpage'       => 'tagga mappitaq ($1)',
-'allpagesprev'   => 'tunullipaaq',
-'allpagesnext'   => 'tagga',
+'allpages' => 'sunamittuq mappitaq',
+'nextpage' => 'tagga mappitaq ($1)',
+'allpagesprev' => 'tunullipaaq',
+'allpagesnext' => 'tagga',
 'allpagessubmit' => 'aivuk',
 
 # Special:Categories
 'categories' => 'nuapput',
 
 # E-mail user
-'emailfrom'    => 'nakit',
+'emailfrom' => 'nakit',
 'emailmessage' => 'kiggapaa',
-'emailsend'    => 'qiutsavigivaa',
+'emailsend' => 'qiutsavigivaa',
 
 # Watchlist
-'watchlist'     => 'uvva mappitaq',
-'mywatchlist'   => 'nipi ami',
-'watch'         => 'uvva',
+'watchlist' => 'uvva mappitaq',
+'mywatchlist' => 'nipi ami',
+'watch' => 'uvva',
 'watchthispage' => 'uvva',
-'unwatch'       => 'iq uvva',
+'unwatch' => 'iq uvva',
 
 'enotif_impersonal_salutation' => '{{SITENAME}} qatannguti',
-'created'                      => 'mappitaq anivuq',
+'created' => 'mappitaq anivuq',
 
 # Delete
-'dellogpage'  => 'nipaq nipi',
+'dellogpage' => 'nipaq nipi',
 'deletionlog' => 'nipaq nipi',
 
 # Protect
-'prot_1movedto2'      => '[[$1]] surramajuq [[$2]]',
-'protect-legend'      => 'patimmivaa sapummivaa',
+'prot_1movedto2' => '[[$1]] surramajuq [[$2]]',
+'protect-legend' => 'patimmivaa sapummivaa',
 'protect-level-sysop' => 'sirlak titiraqsimajunik tuqquqtiriji',
 
 # Restrictions (nouns)
@@ -292,40 +291,40 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq
 
 # What links here
 'whatlinkshere' => 'uqsiq maungu',
-'isredirect'    => 'tapitariik uqsaq mappitaq',
+'isredirect' => 'tapitariik uqsaq mappitaq',
 
 # Block/unblock
-'blockip'                  => 'iq aaqqiksuiji',
-'badipaddress'             => 'illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq',
-'blockipsuccesssub'        => 'uminngasisijuq naajuq',
-'ipblocklist-submit'       => 'ivaaqpuq',
-'anononlyblock'            => 'sirlak ilisarnanngitittuq',
-'blocklink'                => 'iq',
-'contribslink'             => 'qatannguti suqusiqpaa',
-'blocklogpage'             => 'uminngasisijuq/iq titiqqaqutit tuqquqsimajait',
+'blockip' => 'iq aaqqiksuiji',
+'badipaddress' => 'illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq',
+'blockipsuccesssub' => 'uminngasisijuq naajuq',
+'ipblocklist-submit' => 'ivaaqpuq',
+'anononlyblock' => 'sirlak ilisarnanngitittuq',
+'blocklink' => 'iq',
+'contribslink' => 'qatannguti suqusiqpaa',
+'blocklogpage' => 'uminngasisijuq/iq titiqqaqutit tuqquqsimajait',
 'block-log-flags-anononly' => 'ilisarnanngitittuq aaqqiksuiji kisiani',
 'block-log-flags-nocreate' => 'kiinaujaqarvik inuirutivaa iniqtipaa pigivuq',
-'block-log-flags-noemail'  => 'kigutiup sitiniqpaanga uminngasisijuq',
+'block-log-flags-noemail' => 'kigutiup sitiniqpaanga uminngasisijuq',
 
 # Move page
 'move-page-legend' => 'uajuq mappitaq',
-'movearticle'      => 'uajuq mappitaq',
-'movedto'          => 'uajuq',
-'movelogpage'      => 'uajuq nipi',
-'delete_and_move'  => 'nipaqtipaa amma uajuq',
+'movearticle' => 'uajuq mappitaq',
+'movedto' => 'uajuq',
+'movelogpage' => 'uajuq nipi',
+'delete_and_move' => 'nipaqtipaa amma uajuq',
 
 # Namespace 8 related
 'allmessagesname' => 'atiq',
 
 # Import log
-'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}} ikiaq $2',
 
 # Tooltip help for the actions
-'tooltip-ca-protect'              => 'sapummivaa mappitaq',
-'tooltip-search'                  => 'ivaaqpuq {{SITENAME}}',
-'tooltip-minoredit'               => 'tuapaq asiaNngutuq',
-'tooltip-diff'                    => 'surrapaa qatannguti',
+'tooltip-ca-protect' => 'sapummivaa mappitaq',
+'tooltip-search' => 'ivaaqpuq {{SITENAME}}',
+'tooltip-minoredit' => 'tuapaq asiaNngutuq',
+'tooltip-diff' => 'surrapaa qatannguti',
 'tooltip-compareselectedversions' => 'uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut',
 
 # Attribution
@@ -336,25 +335,25 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq
 
 # Browsing diffs
 'previousdiff' => '← tunullipaaq asiaNngutuq',
-'nextdiff'     => 'tagga asiaNngutuq mappitaq →',
+'nextdiff' => 'tagga asiaNngutuq mappitaq →',
 
 # Special:NewFiles
 'ilsubmit' => 'ivaaqpuq',
-'bydate'   => 'pitaaruttuq inuulirvik',
+'bydate' => 'pitaaruttuq inuulirvik',
 
 # Variants for Inuktitut language
 'variantname-ike-cans' => 'ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ',
 'variantname-ike-latn' => 'ilisautik',
-'variantname-iu'       => 'disable',
+'variantname-iu' => 'disable',
 
 # EXIF tags
-'exif-imagelength'         => 'qutsingniq',
-'exif-imagedescription'    => 'inunnguaq atiq',
-'exif-colorspace'          => 'minguarutimitiqpaa',
-'exif-datetimeoriginal'    => 'qatsipaa amma tikiuti sarqipaa isuillingaitjapaa',
-'exif-datetimedigitized'   => 'qatsipaa amma tikiuti sarqipaa qarasaujaq',
+'exif-imagelength' => 'qutsingniq',
+'exif-imagedescription' => 'inunnguaq atiq',
+'exif-colorspace' => 'minguarutimitiqpaa',
+'exif-datetimeoriginal' => 'qatsipaa amma tikiuti sarqipaa isuillingaitjapaa',
+'exif-datetimedigitized' => 'qatsipaa amma tikiuti sarqipaa qarasaujaq',
 'exif-exposuretime-format' => '$1 aippaq ($2)',
-'exif-brightnessvalue'     => 'qaummapaa akkiutaq',
+'exif-brightnessvalue' => 'qaummapaa akkiutaq',
 
 # 'all' in various places, this might be different for inflected languages
 'monthsall' => 'sunamittuq',
@@ -365,14 +364,14 @@ pigivuq qatannguti uikipitia kiinaujaqutiqarvik isuillingaitjapaa. iqtuu suqusiq
 # Multipage image navigation
 'imgmultipageprev' => '← tunullipaaq mappitaq',
 'imgmultipagenext' => 'tagga mappitaq →',
-'imgmultigo'       => 'aivuq!',
+'imgmultigo' => 'aivuq!',
 
 # Table pager
 'table_pager_limit_submit' => 'aivuk',
 
 # Auto-summaries
 'autoredircomment' => 'qaningani kamagijaq aasit nakit [[$1]]',
-'autosumm-new'     => 'pigivuq mappitaq: $1',
+'autosumm-new' => 'pigivuq mappitaq: $1',
 
 # Special:SpecialPages
 'specialpages' => 'piji mappitaq',
index abbcd8c..38142e0 100644 (file)
@@ -38,45 +38,45 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Pinag-ugisan ti silpo:',
 'tog-justify' => 'Limpiaen dagiti parapo',
-'tog-hideminor' => 'Ilemmeng dagiti bassit a panagbaliw kadagiti naudi a panagisukat',
+'tog-hideminor' => 'Ilemmeng dagiti bassit a panagbaliw kadagiti naudi a sinuk-sukatan',
 'tog-hidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos kadagiti naudi a sinuk-sukatan',
-'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid idiay baro a listaan ti panid',
+'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid manipud ti baro a listaan ti panid',
 'tog-extendwatchlist' => 'Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, tapno saan laeng a dagiti nabiit',
-'tog-usenewrc' => 'Dagiti grupo panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
+'tog-usenewrc' => 'Dagiti grupo panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
 'tog-numberheadings' => 'Automatiko a pabilangan dagiti paulo',
 'tog-showtoolbar' => 'Ipakita ti ramit ti panag-urnos (masapul ti JavaScript)',
 'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagtakla (masapul ti JavaScript)',
-'tog-editsection' => 'Pakabaelan ti panag-urnos iti paset babaen kadagiti [urnosen] a  panilpo',
-'tog-editsectiononrightclick' => 'Ikkan ti pakabaelan ti paset  a panag-urnos no agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
-'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga addan ti ad-adu ngem dagiti 3 a paulo)',
-'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kaadu nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
+'tog-editsection' => 'Pakabaelan ti paset a panag-urnos babaen kadagiti [urnosen] a  panilpo',
+'tog-editsectiononrightclick' => 'Pakabaelan ti paset  a panag-urnos babaen ti agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
+'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga adda ti ad-adu ngem dagiti 3 a paulo)',
+'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kapaut nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
 'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles  nga inpanko idiay listaan ti bambantayak',
 'tog-watchdefault' => 'Agnayon kadagiti panid ken papeles nga inurnosko idiay listaan ti bambantayak',
 'tog-watchmoves' => 'Agnayon kadagiti panid ken papeles nga inyalisko idiay listaan ti bambantayak',
 'tog-watchdeletion' => 'Agnayon kadagiti panid ken papeles nga inikkatko idiay listaan ti bambantayak',
 'tog-minordefault' => 'Markaan amin nga  inurnos a kas sigud a bassit',
 'tog-previewontop' => 'Ipakita ti panag-padas sakbay ti kahon ti inurnos',
-'tog-previewonfirst' => 'Ipakita ti na-ipadas iti umuna nga inurnos',
-'tog-nocache' => 'Ibaldado ti pagcache ti pabasabasam iti daytoy a panid',
+'tog-previewonfirst' => 'Ipakita ti pinadas iti umuna a panag-urnos',
+'tog-nocache' => 'Ibaldado ti panagilemmeng ti pabasabasa ti panid',
 'tog-enotifwatchlistpages' => 'E-suratannak no mabaliwan ti panid wenno papeles idiay listaan dagiti bambantayak',
-'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti panidko a tungtongan ti agar-aramat',
+'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti tungtungan a panidko',
 'tog-enotifminoredits' => 'E-suratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles',
-'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-surat ko kadagiti pammalagip ti  e-surat',
-'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbambantay nga agar-aramat',
+'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-suratko kadagiti panagipakaaammo nga  e-surat',
+'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbuybuya nga agar-aramat',
 'tog-oldsig' => 'Ti adda a pirma:',
 'tog-fancysig' => 'Tratuen ti pirma a kas wikitext (nga awan ti automatiko a panagsilpo)',
-'tog-externaleditor' => 'Isigud ti panag-usar iti ruar a pnag-urnos (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a pinakaikabil idiay komputer mo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
-'tog-externaldiff' => 'Isigud ti panag-usar iti ruar a  sabali (para dagiti eksperto laeng, masapul ti nagruna a kasasaad a pinakaikabil idiay komputer mo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
-'tog-showjumplinks' => 'Ikkan ti pakabaelan  a  "mapan iti"  agpalaka a sumrek kadagiti panagsilpo',
-'tog-uselivepreview' => 'Usaren ti panag-padas tattan (masapul ti JavaScript) (suuten laeng)',
+'tog-externaleditor' => 'Isigud ti panag-usar iti ruar a pnag-urnos (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
+'tog-externaldiff' => 'Isigud ti panag-usar iti ruar a  sabali (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
+'tog-showjumplinks' => 'Pakabaelan  a  "lumaktaw kadagiti"  naipalaka a pagserkan a silpo',
+'tog-uselivepreview' => 'Usaren ti agdama a panagpadas  (masapul ti JavaScript) (eksperimento)',
 'tog-forceeditsummary' => 'Pakaammuannak no sumrek ti blanko a pakabuklan ti panag-urnos',
-'tog-watchlisthideown' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnosko',
-'tog-watchlisthidebots' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti bot',
-'tog-watchlisthideminor' => 'Ilemmeng idiay listaan ti bambantayan dagiti bassit nga  inurnos',
-'tog-watchlisthideliu' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti nakastrek nga agar-aramat',
-'tog-watchlisthideanons' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti di am-ammo nga agar-aramat',
-'tog-watchlisthidepatrolled' => 'Ilemmeng idiay listaan ti bambantayan dagiti napatruliaan nga inurnos',
-'tog-ccmeonemails' => 'Patulodandak iti kopia kadagiti e-surat nga ipatulodko kadagiti sabsabali nga agar-aramat',
+'tog-watchlisthideown' => 'Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan',
+'tog-watchlisthidebots' => 'Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan',
+'tog-watchlisthideminor' => 'Ilemmeng dagiti bassit nga inurnos manipud ti listaan ti bambantayan',
+'tog-watchlisthideliu' => 'Ilemmeng dagiti inurnos ti nakasterk nga agar-aramat manipud ti listaan ti bambantayan',
+'tog-watchlisthideanons' => 'Ilemmeng dagiti inurnos ti di am-ammo nga agar-aramat manipud ti  listaan ti bambantayan',
+'tog-watchlisthidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos manipud ti listaan ti bambantayan',
+'tog-ccmeonemails' => 'Patulodandak kadagiti kopia ti e-surat nga ipatulodko kadagiti sabsabali nga agar-aramat',
 'tog-diffonly' => 'Saan nga iparang ti linaon ti panid dita baba dagiti pagiddiatan',
 'tog-showhiddencats' => 'Ipakita dagiti nailemmeng a kategoria',
 'tog-norollbackdiff' => 'Laksiden ti paggiddiatan kalpasan ti panagaramid ti panagi-subli',
@@ -145,19 +145,19 @@ $messages = array(
 'dec' => 'Dis',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategoria|Dagiti kategoria}}',
-'category_header' => 'Dagiti panid ti kategoria  "$1"',
+'pagecategories' => '{{PLURAL:$1|Kategoria|Katkategoria}}',
+'category_header' => 'Dagiti panid nga adda iti kategoria  "$1"',
 'subcategories' => 'Dagiti apo ti kategoria',
-'category-media-header' => 'Dagiti midia ti kategoria  "$1"',
+'category-media-header' => 'Dagiti midia nga adda iti kategoria  "$1"',
 'category-empty' => "''Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.''",
 'hidden-categories' => '{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}',
-'hidden-category-category' => 'Dagiti nailemmeng a kategoria',
-'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
-'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
-'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad nga {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
-'category-article-count-limited' => 'Ti sumaganad nga {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
-'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad nga {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
-'category-file-count-limited' => 'Ti sumaganad nga {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
+'hidden-category-category' => 'Nailemmeng a katkategoria',
+'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
+'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
+'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad  {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
+'category-article-count-limited' => 'Ti sumaganad {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
+'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad  {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
+'category-file-count-limited' => 'Ti sumaganad  {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
 'listingcontinuesabbrev' => 'tuloy.',
 'index-category' => 'Dagiti naipasurutan a panid',
 'noindex-category' => 'Dagiti saan a pagsurutan a panid',
@@ -169,8 +169,8 @@ $messages = array(
 'cancel' => 'Ukasen',
 'moredotdotdot' => 'Adu pay...',
 'mypage' => 'Panidko',
-'mytalk' => 'Pakitungtongak',
-'anontalk' => 'Tungtongan iti daytoy a pagtaengan ti IP',
+'mytalk' => 'Pakitungtungak',
+'anontalk' => 'Tungtungan para iti daytoy a pagtaengan ti IP',
 'navigation' => 'Pagdaliasatan',
 'and' => '&#32;ken',
 
@@ -191,8 +191,8 @@ $messages = array(
 'vector-action-move' => 'Iyalis',
 'vector-action-protect' => 'Salakniban',
 'vector-action-undelete' => 'Isubli ti inikkat',
-'vector-action-unprotect' => 'Sukatan ti panag-salaknib',
-'vector-simplesearch-preference' => 'Ikkan ti pakabaelan ti napasayaat a singasing ti panagbiruk (Kudil a Vector laeng)',
+'vector-action-unprotect' => 'Sukatan ti salaknib',
+'vector-simplesearch-preference' => 'Pakabaelan ti napalaka a baras ti panagbiruk (Kudil a Vector laeng)',
 'vector-view-create' => 'Agaramid',
 'vector-view-edit' => 'Urnosen',
 'vector-view-history' => 'Kitaen ti pakasaritaan',
@@ -228,16 +228,16 @@ $messages = array(
 'protect' => 'Salakniban',
 'protect_change' => 'sukatan',
 'protectthispage' => 'Salakniban daytoy a panid',
-'unprotect' => 'Sukatan ti panag-salaknib',
+'unprotect' => 'Sukatan ti salaknib',
 'unprotectthispage' => 'Sukatan ti salaknib daytoy a panid',
 'newpage' => 'Baro a panid',
-'talkpage' => 'Pagtungtongan daytoy a panid',
-'talkpagelinktext' => 'Makipatang',
+'talkpage' => 'Pagtungtungan daytoy a panid',
+'talkpagelinktext' => 'Tungtungan',
 'specialpage' => 'Espesial a panid',
 'personaltools' => 'Bukod a ram-ramit',
 'postcomment' => 'Baro a paset',
 'articlepage' => 'Kitaen ti naglaon a panid',
-'talk' => 'Pagtungtongan',
+'talk' => 'Pagtungtungan',
 'views' => 'Dagiti pangkitaan',
 'toolbox' => 'Ramramit',
 'userpage' => 'Kitaen ti panid ti agar-aramat',
@@ -248,13 +248,13 @@ $messages = array(
 'viewhelppage' => 'Kitaen ti panid ti tulong',
 'categorypage' => 'Kitaen ti panid ti kategoria',
 'viewtalkpage' => 'Kitaen ti pagtungtungan',
-'otherlanguages' => 'Dagiti sabali a pagsasao',
+'otherlanguages' => 'Kadagiti sabali a pagsasao',
 'redirectedfrom' => '(Naibaw-ing manipud idiay $1)',
 'redirectpagesub' => 'Baw-ing a panid',
-'lastmodifiedat' => 'Naudi a nabaliwan daytoy a panid idi $1, ti oras nga $2.',
+'lastmodifiedat' => 'Daytoy a panid ket  naudi a nabaliwan idi $1, ti oras nga $2.',
 'viewcount' => 'Naserrekan daytoy a panid iti {{PLURAL:$1|naminsan|$1 a daras}}.',
 'protectedpage' => 'Nasalakniban a panid',
-'jumpto' => 'Mapan idiay:',
+'jumpto' => 'Lumaktaw idiay:',
 'jumptonavigation' => 'pagdaliasatan',
 'jumptosearch' => 'biruken',
 'view-pool-error' => 'Pasensian, dagiti servers ket nadagsenan unay tattan.
@@ -273,7 +273,7 @@ $1',
 'copyrightpage' => '{{ns:project}}:Dagiti Karbengan-Panagipablaak',
 'currentevents' => 'Agdama a paspasamak',
 'currentevents-url' => 'Project:Agdama a paspasamak',
-'disclaimers' => 'Dagiti karbengan ken rebbeng',
+'disclaimers' => 'Dagiti renunsia',
 'disclaimerpage' => 'Project:Sapasap ti karbengan ken rebbeng',
 'edithelp' => 'Tulong ti panag-urnos',
 'edithelppage' => 'Help:Panag-urnos',
@@ -298,6 +298,10 @@ $1',
 'youhavenewmessages' => 'Addaanka ti $1 ($2).',
 'newmessageslink' => 'dagiti baro a mensahe',
 'newmessagesdifflink' => 'naudi a sinukatan',
+'youhavenewmessagesfromusers' => 'Adda $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|$3 kadagiti sabsabali nga agar-aramat}} ($2).',
+'youhavenewmessagesmanyusers' => 'Adda $1 manipud kadagiti adu nga agar-aramat ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|baro a mensahem|dagiti baro a mensahem}}',
+'newmessagesdifflinkplural' => 'kinaudi {{PLURAL:$1|a sinukatan|a sinuksukatan}}',
 'youhavenewmessagesmulti' => 'Adda dagiti baro a mensahem iti $1',
 'editsection' => 'urnosen',
 'editold' => 'urnosen',
@@ -308,21 +312,21 @@ $1',
 'toc' => 'Dagiti linaon',
 'showtoc' => 'ipakita',
 'hidetoc' => 'ilemmeng',
-'collapsible-collapse' => 'Marba',
+'collapsible-collapse' => 'Rebbaen',
 'collapsible-expand' => 'Palawaen',
 'thisisdeleted' => 'Kitaen wenno isubli ti $1?',
 'viewdeleted' => 'Kitaen ti $1?',
 'restorelink' => '{{PLURAL:$1|ti maysa a naikkat a naurnos|dagiti $1 a naikkat a naurnos}}',
 'feedlinks' => 'Pakan:',
-'feed-invalid' => 'Saan a mabalin a kita ti maalala a pakan.',
-'feed-unavailable' => 'Awan dagiti pakan a sindikasion',
+'feed-invalid' => 'Saan a mabalin a kita ti maala a pakan.',
+'feed-unavailable' => 'Awan dagiti magun-od a sindikasion ti pakan',
 'site-rss-feed' => '$1 Pakan ti RSS',
 'site-atom-feed' => '$1 Pakan ti Atom',
 'page-rss-feed' => '"$1" Pakan ti RSS',
 'page-atom-feed' => 'Pakan nga Atom ti "$1"',
 'red-link-title' => '$1 (awan ti panid)',
-'sort-descending' => 'Ilasin mo nga agpababa',
-'sort-ascending' => 'Ilasin mo nga agpangato',
+'sort-descending' => 'Ilasin nga agpababa',
+'sort-ascending' => 'Ilasin nga agpangato',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Panid',
@@ -342,51 +346,51 @@ $1',
 Baka madi ti naimakiniliam nga URL, wenno sinurotmo ti saan nga agpayso a panilpo.
 Baka daytoy ket "kiteb" ti "software" nga ususaren babaen ti {{SITENAME}}.',
 'nosuchspecialpage' => 'Awan ti kasta nga espesial a panid',
-'nospecialpagetext' => '<strong>Nagkiddaw ka ti imbalido nga espesial a panid.</strong>
+'nospecialpagetext' => '<strong>Nagkiddawka ti imbalido nga espesial a panid.</strong>
 
 Masarakan ti listaan dagiti umisu nga espesial a pampanid iti [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Biddut',
 'databaseerror' => 'Biddut iti database',
-'dberrortext' => 'Adda biddut ti database ti  gramatika na a panagsapul.
+'dberrortext' => 'Adda napasamak a biddut ti nakaibatayan ti datos a panagsapul ti gramatika.
 Adda ngata  kiteb iti software.
-Ti kinaudia a panagpadas ti panagsapul ti database ket:
-<blockquote><tt>$1</tt></blockquote>
-naggapu ti uneg ti pamay-an "<tt>$2</tt>".
-Ti database ket nangipatulod ti biddut "<tt>$3: $4</tt>".',
+Ti kinaudi a panagpadas ti panagsapul ti nakaibatayan ti datos ket:
+<blockquote><code>$1</code></blockquote>
+naggapu ti uneg ti pamay-an "<code>$2</code>".
+Ti nakaibatayan ti datos ket nangipatulod ti biddut "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Adda biddut ti database ti  gramatika a panagsapul.
 Ti kinaudi a panagsapul ti database ket:
 "$1"
 naggapu ti uneg ti opisio "$2".
 Ti database ket nangipatulod ti biddut "$3: $4".',
-'laggedslavemode' => 'Ballaag: Mabalin a ti panid ket awan ti nagyan na kadagiti naudi a panagpabaro.',
+'laggedslavemode' => 'Ballaag: Mabalin a ti panid ket saan nga aglaon kadagiti naudi a panagpabaro.',
 'readonly' => 'Nakandadoan ti database',
-'enterlockreason' => 'Mangipan ti rason no apay nga ikandado, agraman no kaano a maluktan ti kandado',
-'readonlytext' => 'Ti database ket naikandado iti baro a panagikabil ken panagbaliw, gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
+'enterlockreason' => 'Agikabil ti maysa a rason para iti kandado, agraman ti karkulo no kaano a malukatan ti kandado',
+'readonlytext' => 'Ti database ket agdama a naikandado kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
 
-Ti administrador a nagkandado ket daytoy ti palawag na: $1',
-'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a nabirukanna kuman, ti napanaganan ti "$1" $2.
+Ti administrador a nangkandado ket nangited ti daytoy a palawag: $1',
+'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a mabirukanna kuma, a napanaganan ti "$1" $2.
 
 Dayoty ket gapu babaen ti sumaganad a baak a paggiddiatan wenno panilpo ti pakasaritaan ti maysa panid a dati a naikkat.
 
 No saan a kasta, baka nakasarak ti kiteb ti "software".
 
-Panngaasi nga  ibagam kadagiti [[Special:ListUsers/sysop|administrador]], isurat mo ti pakaammo dayta URL.',
+Panngaasi nga  ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isurat mo ti pakaammo dayta URL.',
 'missingarticle-rev' => '(binaliwan#: $1)',
 'missingarticle-diff' => '(Sabali: $1, $2)',
-'readonly_lag' => 'Automatiko a narikpan ti database kabayatan a dagiti tagabu a database servers ket kumamakam iti agturay',
+'readonly_lag' => 'Automatiko a narikpan ti database kabayatan a dagiti tagabu a database server ket kumamakam iti agturay',
 'internalerror' => 'Akin-uneg a biddut',
 'internalerror_info' => 'Akin-uneg a biddut: $1',
 'fileappenderrorread' => 'Saan a mabasa ti "$1" idi agpanayon.',
 'fileappenderror' => 'Saan a manayonan ti "$1" iti  "$2".',
 'filecopyerror' => 'Saan a makopia ti papeles $1 iti $2.',
-'filerenameerror' => 'Saan a managanan ti papeles "$1" iti "$2".',
+'filerenameerror' => 'Saan a managanan manen ti papeles "$1" iti "$2".',
 'filedeleteerror' => 'Saan a maikkat ti papeles  "$1".',
 'directorycreateerror' => 'Saan a maaramid ti direktorio  "$1".',
-'filenotfound' => 'Saan a masarakan ti papeles  "$1".',
+'filenotfound' => 'Saan a mabirukan ti papeles  "$1".',
 'fileexistserror' => 'Di mabalin a maisurat ti papeles  "$1": Adda kastan a papeles',
-'unexpected' => 'Di mapakpakadaaan a kuwenta: "$1"="$2".',
+'unexpected' => 'Di mapakpakadaaan a pateg: "$1"="$2".',
 'formerror' => 'Biddut: saan a maited ti nakabuklan.',
 'badarticleerror' => 'Saan a matungpal daytoy nga aramid iti daytoy a panid.',
 'cannotdelete' => 'Ti panid wenno ti papeles "$1" ket saan a maikkat.
@@ -397,25 +401,26 @@ Awan ti intedna a palawag.',
 'badtitle' => 'Madi a titulo',
 'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno maysa a saan nga husto a naisilpo a titulo nga inter-lengguahe wenno inter-wiki a titulo.
 Adda ngata nagyan a maysa wenno ad-adu pay a kababalin a saan a mausar iti titulo.',
-'perfcached' => 'Ti sumaganad a data ket naka-cached ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagant|dagiti $1 a nagbanagan}} ket magun-od idiay cache.',
-'perfcachedts' => 'Ti sumaganad a data ket naka-cached, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay cache.',
+'perfcached' => 'Ti sumaganad a datos ket naidulin ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagan|dagiti $1 a nagbanagan}} ket magun-od idiay nagidulinan.',
+'perfcachedts' => 'Ti sumaganad a datos ket naidulin, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay pagidulinan.',
 'querypage-no-updates' => 'Dagiti panangpabaro iti daytoy a panid ket agdama a nabaldado. 
-Saan a mipasaradiwa ita dagiti data ditoy.',
+Saan a mipasaradiwa ita dagiti datos ditoy.',
 'wrong_wfQuery_params' => 'Kamali a parametro iti wfQuery()<br />
 Pamay-an: $1<br />
 Panagsapul: $2',
 'viewsource' => 'Kitaen ti taudan',
-'viewsource-title' => 'Kitaen ti taudan iti $1',
+'viewsource-title' => 'Kitaen ti taudan para iti $1',
 '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.',
 '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, ken nasalakniban tapno mapawilan ti panag-abuso.',
+'protectedinterface' => 'Daytoy a panid ket mangited ti testo nga interface para iti software iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.
+Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.',
 'editinginterface' => "'''Ballaag:''' Ururnosem ti maysa a panid a maar-aramat a mangted iti testo ti interface para iti software.
-Dagiti panagsukat iti daytoy a panid ket maarigan ti langa ti agaramat nga interface dagiti sabali nga agar-aramat.
-Para kadagiti panagipatarus, pangngaasim a padasen ti agaramat ti [//translatewiki.net/wiki/Main_Page?setlang=ilo translatewiki.net], ti gandat a panagipatarus ti MediaWiki.",
+Dagiti panagsukat iti daytoy a panid ket maarigan ti langa ti panagaramat nga interface dagiti sabali nga agar-aramat iti daytoy a wiki.
+Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki..",
 'sqlhidden' => '(nakalemmeng ti biniruk a SQL )',
 'cascadeprotected' => 'Daytoy a panid ket nasalakniban para iti panag-urnos, ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban nga adda ti napili nga "agsariap"  :
 $2',
@@ -425,7 +430,7 @@ $2',
 'ns-specialprotected' => 'Saan a mabalin nga urnosen dagiti espesial a panid.',
 'titleprotected' => "Daytoy a titulo ket nasalakniban manipud ti panakapartuat babaen ni [[User:$1|$1]].
 Ti naited a rason ket ''$2''.",
-'filereadonlyerror' => 'Di nabaliwan ti papales "$1" gapu ket ti repositorio ti papeles "$2" ket basaen laeng a moda.
+'filereadonlyerror' => 'Di nabaliwan ti papeles "$1" gapu ket ti repositorio ti papeles "$2" ket basaen laeng a moda.
 
 Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Imbalido a titulo nga adda ti nagan ti lugar "$2" ken testo "$3"',
@@ -441,8 +446,8 @@ Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'"
 # Login and logout pages
 'logouttext' => "'''Nakaruarkan.'''
 
-Mabalinmo nga ituloy ti agusar iti {{SITENAME}} a di am-ammo, wenno [[Special:UserLogin|sumrek ka manen]] iti sigud wenno sabali nga agar-aramat.
-Laglagipem a sumagmamano a pampanid ti mabalin a nakaparang latta a kasla nakaserrek ka pay laeng, agingga na nga dalusam ti \"cache\" ti panagbasabasam.",
+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]].',
@@ -450,8 +455,9 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'yourpassword' => 'Kontrasenias:',
 'yourpasswordagain' => 'Uliten ti kontrasenias:',
 'remembermypassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kapaut iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})',
-'securelogin-stick-https' => 'Agyan ka a nakasilpo iti HTTPS no nakastrekka',
+'securelogin-stick-https' => 'Agyanka a nakasilpo iti HTTPS kalpasan no nakastrekka',
 'yourdomainname' => 'Ti bukodmo a pagturayan:',
+'password-change-forbidden' => 'Saanmo a mabalin ti mangbaliw kadagiti kontrasenias iti daytoy a wiki.',
 'externaldberror' => 'Adda biddut idi ti panakapasingked ti database wenno saanmo a mabalin ti agpabaro ti bukodmo a ruar a pakabilangan.',
 'login' => 'Sumrek',
 'nav-login-createaccount' => 'Sumrek / agaramid ti pakabilangan',
@@ -469,37 +475,41 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'userlogin-resetlink' => 'Nalipatam dagiti salaysay ti pagserrek mo?',
 'createaccountmail' => 'Babaen ti e-surat',
 'createaccountreason' => 'Rason:',
-'badretype' => 'Saan nga agparis dagiti impanmo a kontrasenias.',
-'userexists' => 'Maus-usaren ti nagan a kayat mo.
-Pangngaasim ta agpilika ti sabali a nagan.',
+'badretype' => 'Saan nga agpada dagiti impanmo a kontrasenias.',
+'userexists' => 'Maus-usaren ti nagan a kayatmo.
+Pangngaasi nga agpilika ti sabali a nagan.',
 'loginerror' => 'Biddut ti sumrek',
 'createaccounterror' => 'Saan a makaaramid ti pakabilangan: $1',
-'nocookiesnew' => 'Naaramid ti pakabilangan daytoy agaramat, ngem saanka a nakastrek.
-{{SITENAME}} ket agususar kadagiti "galietas" para iserrek ti agaramat.
-Nabaldado dagiti galietas mo.
-Pangngaasi ta pakabaelam ida,  ken sumrek ka nga agusar ti baro a nagan ken kontrasenias.',
-'nocookieslogin' => 'Ti {{SITENAME}} ket agus-usar  kadagiti galietas tapno makastrek dagiti agar-aramat.
-Nabaldado dagiti galietas mo.
+'nocookiesnew' => 'Naaramid ti pakabilangan ti agar-aramat, ngem saanka a nakastrek.
+Ti {{SITENAME}} ket agususar kadagiti "galietas" tapno maiserrek dagiti agaramat.
+Nabaldado dagiti galietam.
+Pangngaasi a pakabaelam ida,  ken sumrekka nga agusar ti baro a nagan ken kontrasenias.',
+'nocookieslogin' => 'Ti {{SITENAME}} ket agus-usar  kadagiti galietas tapno maiserrek dagiti agar-aramat.
+Nabaldado dagiti galietam.
 Pangngaasi a pakabaelam ida ken padasem manen ti sumrek.',
-'nocookiesfornew' => 'Ti pakabilangan ti agar-aramat ket saan a naaramid, saan mi a masingkedan ti naggapuan na.
-Usarem dagita galietas mo, ipadas mo manen daytoy a panid.',
+'nocookiesfornew' => 'Ti pakabilangan ti agar-aramat ket saan a naaramid, saanmi a mapasingkedan ti taudanna.
+Siguraduem a napakabaelan dagita galietam, ikargam manen daytoy a panid ken padasem manen.',
 'noname' => 'Saanmo a nainaganan ti agpayso a nagan ti agar-aramat.',
 'loginsuccesstitle' => 'Balligi ti panagserrek',
 'loginsuccess' => "'''Nakastrekkan iti {{SITENAME}} a kas ni \"\$1\".'''",
 'nosuchuser' => 'Awan ti agar-aramat nga agnagan iti "$1". 
 
-Kitaem ti panangiletra, wenno [[Special:UserLogin/signup|agaramid ka ti baro a pakabilangan]].',
-'nosuchusershort' => 'Awan ti agar-aramat nga addaan iti nagan a "$1".
+Dagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.
+
+Kitaem ti panangiletra, wenno [[Special:UserLogin/signup|agaramidka ti baro a pakabilangan]].',
+'nosuchusershort' => 'Awan ti agar-aramat nga agnagan ti "$1".
 Kitaem ti panangiletra.',
 'nouserspecified' => 'Nasken nga agikabilka ti nagan ti agar-aramat.',
 'login-userblocked' => 'Naserraan daytoy nga agar-aramat. Maiparit ti sumrek.',
-'wrongpassword' => 'Biddut (wenno awan) ti kontrasenias nga ikabil mo. Padasem koma manen, apo.',
-'wrongpasswordempty' => 'Blanko ti impanmo a kontrasenias. Padasem koma manen apo.',
-'passwordtooshort' => 'Ti kontrasenias ket nasken nga adda  {{PLURAL:$1|iti 1 a karakter|kadagiti $1 a karakter}}.',
-'password-name-match' => 'Masapul a saan nga agpadpada ti  nagan mo nga agar-aramat ken kontrasenias',
-'password-login-forbidden' => 'Maiparit daytoy ususarem a nagan ti agar-aramat ken kontrasenias.',
+'wrongpassword' => 'Saan nga husto  ti kontrasenias a naikabil. 
+Pangngaasi a padasem manen.',
+'wrongpasswordempty' => 'Blanko ti naikabil  a kontrasenias. 
+Pangngaasi a padasem manen.',
+'passwordtooshort' => 'Ti kontrasenias ket nasken a saan a basbasit ngem  {{PLURAL:$1|1 a karakter| $1 a karkarakter}}.',
+'password-name-match' => 'Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.',
+'password-login-forbidden' => 'Ti panag-usar ti daytoy a nagan ket kontrasenias ket naiparit..',
 'mailmypassword' => 'E-surat ti baro a kontrasenias',
-'passwordremindertitle' => 'Baro a saan nga agnayon a kontrasenias para idiay  {{SITENAME}}',
+'passwordremindertitle' => 'Baro a temporario a kontrasenias para iti  {{SITENAME}}',
 'passwordremindertext' => 'Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw ti baro
 a kontrasenias para iti {{SITENAME}} ($4). Ti saan nga agnayon a kontrasenias ti agususar
 "$2" ket naaramiden ken naidisso iti "$3". No kastan ti kinayatmo,
@@ -507,74 +517,75 @@ masapul a sumrek ka ta agpili ka ti baro a kontrasenias.
 Ti temporario a bukodmo a kontrasenias ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 
 No sabali ti nagkiddaw, wenno no malagipmo pay ti kontrasenias mo ket dimon kayat a suktan daytoy, mabalin a dimo lattan ikaskaso daytoy a mensahe ket itultuloymo latta nga usaren ti daan a kontrasenias.',
-'noemail' => 'Awan ti nagtaengan ti e-surat  a nairehistro iti agar-aramat a ni "$1".',
+'noemail' => 'Awan ti i e-surat a pagtaengan a nairehistro para  iti agar-aramat a ni "$1".',
 'noemailcreate' => 'Mangtedka to pudno nga e-surat a pagtaengam',
-'passwordsent' => 'Naipatulod ti baro a kontrasenias iti e-surat a pagtaengan a nairehistro ken "$1".
+'passwordsent' => 'Naipatulod ti baro a kontrasenias iti e-surat a pagtaengan a nairehistro kenni "$1".
 Sumrekka koma manen kalpasan a maawatmo daytoy a baro a kontrasenias.',
-'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan iti panagurnos, isu nga saan a mabalin nga agusar ti panagala ti kontrasenias nga opisio tapno mapawilan ti panag-abuso.',
+'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, ken isu a saan a mabalin nga agusar ti panagala ti kontrasenias a pamay-an tapno mapawilan ti panag-abuso.',
 'eauthentsent' => 'Naipatuloden ti pammasingked nga e-surat iti naited nga e-surat a pagtaengan.
 Sakbay nga ania man nga e-surat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti e-surat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
 'throttled-mailpassword' => 'Ti palagip ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
 Tapno maipawilan ti panag-abuso, maysa laeng a palagip ti kontrasenias ti maipatulod ti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
-'mailerror' => 'Biddut iti panagipatulod iti surat: $1',
-'acct_creation_throttle_hit' => 'Dagiti bisita daytoy wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} ti maysa nga aldaw, dagita laeng ti mabalin a mausar.
-Ti nagbanaganna, dagitoy bisita nga agususar ti IP a pagtaengan ket saan a makaaramid ti pakabilangan tatta.',
+'mailerror' => 'Biddut iti panagipatulod ti surat: $1',
+'acct_creation_throttle_hit' => 'Dagiti sumarungkar ti daytoy a wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.
+A kas ti nagbanagan, dagiti agsarsarummgkar nga agususar ti IP a pagtaengan ket agdama a saanda a mabalin a makaaramid kadagiti pakabilangan.',
 'emailauthenticated' => 'Napasingkedan ti e-surat a pagtaengan idi $2 ti oras nga $3.',
 'emailnotauthenticated' => 'Saan pay a napasingkedan ti e-surat mo.
-Awan ti e-surat nga ipatulod para dagitoy a langa.',
+Awan ti e-surat a naipatulod para kadagiti sumaganad a langa.',
 'noemailprefs' => 'Ipanaganan ti e-surat a pagtaengan tapno agbalin dagitoy a langa.',
 'emailconfirmlink' => 'Pasingkedam ti e-surat a pagtaengam',
-'invalidemailaddress' => 'Ti e-surat a pagtaengam ket saan a maawat, ket kasla addaan ti saan a napudno a nakabuklan.
+'invalidemailaddress' => 'Ti e-surat a pagtaengam ket saan a maawat ngamin ket kasla adda ti saan a napudno a nakabuklan.
 Pangngaasi nga ikkam ti nasayaat  a  nakabuklan a pagtaengan wenno ikkatem amin dagiti naikabil mo.',
 'cannotchangeemail' => 'Dagiti pakabilangan nga e-surat a pagtaengan ket saan a mabaliwan ditoy a wiki.',
 'emaildisabled' => 'Daytoy a pagsaaadan ket saan a makaipatuod kadagiti e-surat.',
 'accountcreated' => 'Naaramiden ti pakabilangan',
-'accountcreatedtext' => 'Naaramiden ti pakabilangan a pagaramat ni $1.',
+'accountcreatedtext' => 'Ti pakabilangan ti agar-aramat para iti  $1 ket naaramiden.',
 'createaccount-title' => 'Panagaramid iti pakabilangan para iti {{SITENAME}}',
-'createaccount-text' => 'Adda nagaramid ti pakabilangan iti e-surat a pagtaengam idiay {{SITENAME}} ($4) nagnagan a "$2", a ti kontrasenias a "$3".
-
-Saan mo nga ikaskaso daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.',
-'usernamehasherror' => 'Dagiti nagan ti agar-aramat ke saan nga ikkan dagiti "hash" a kababalin',
-'login-throttled' => 'Adu unay ti panagpadas mo a sumrek.
-Pangaasim ta aguray ka sakbay nga agipadas manen.',
-'login-abort-generic' => 'Madi ti panakastrekmo - Napasardeng',
+'createaccount-text' => 'Adda nagaramid ti pakabilangan para iti e-surat a pagtaengam idiay {{SITENAME}} ($4) nga agnagan  ti "$2", iti kontrasenias a "$3".
+Nasken a sumrekka ken sukatam ti kontraseniasmo tattan.
+
+Mabalinmo ti saan a mangikaskaso ti daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.',
+'usernamehasherror' => 'Ti nagan ti agar-aramat ket nasken a saan nga aglaon kadagiti "hash" a karakter',
+'login-throttled' => 'Adu unay ti panagpadasmo a sumrek.
+Pangaasi nga agurayka sakbay nga agipadas manen.',
+'login-abort-generic' => 'Napaay ti panagserrekmo - Napasardeng',
 'loginlanguagelabel' => 'Pagsasao: $1',
-'suspicious-userlogout' => 'Madi ti kiniddawmo a rummuar, ngamin ket kasla inpatulod ti nadadael a "panagbasabasa" wenno "caching proxy".',
+'suspicious-userlogout' => 'Naiparit ti panagkiddawmo a rummuar  ngamin ket kasla inpatulod ti nadadael a "panagbasabasa" wenno "caching proxy".',
 
 # E-mail sending
-'php-mail-error-unknown' => 'Di am-ammo a biddut ti kukua ti PHP a surat () nga opisio.',
-'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan na.',
+'php-mail-error-unknown' => 'Di am-ammo a biddut iti surat ti PHP  () a pamay-an.',
+'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan.',
 
 # Change password dialog
 'resetpass' => 'Sukatan ti kontrasenias',
-'resetpass_announce' => 'Simrek ka nga nagusar iti saan nga agnayon nga e-surat a kodigo.
-Tapno malpas ka a makastrek, mangikabil ka ti baro a kontrasenias ditoy:',
+'resetpass_announce' => 'Simrekka a nagus-usar ti temporario a kodigo ti e-surat.
+Tapno malpaska a makastrek, nasken a mangikabilka ti baro a kontrasenias ditoy:',
 'resetpass_header' => 'Sukatan ti kontrasenias ti pakabilangan',
 'oldpassword' => 'Daan a kontrasenias:',
 'newpassword' => 'Baro a kontrasenias:',
-'retypenew' => 'Isurat manen ti baro a kontrasenias:',
+'retypenew' => 'Imakinilya manen ti baro a kontrasenias:',
 'resetpass_submit' => 'Ikabil ti kontrasenias ken sumrek',
 'resetpass_success' => 'Nagballigi a nabaliwan ti kontrasenias mo! 
 </br>
 Iserrek kan...',
 'resetpass_forbidden' => 'Saan a masukatan dagiti kontrasenias',
-'resetpass-no-info' => 'Masapul a nakastrekka tapno dagus ka a makapan iti panid .',
+'resetpass-no-info' => 'Masapul a nakastrekka tapno dagus a makapan ti daytoy a panid .',
 'resetpass-submit-loggedin' => 'Sukatan ti kontrasenias',
 'resetpass-submit-cancel' => 'Ukasen',
-'resetpass-wrong-oldpass' => 'Imbalido ti saan nga agnayon wenno agdama a kontrasenias.
-Baka mabalin a nasukatam metten ti kontrasenias mo wenno nagkiddaw ka ti saan nga agnayon a kontrasenias.',
-'resetpass-temp-password' => 'Saan nga agnayon a kontrasenias:',
+'resetpass-wrong-oldpass' => 'Imbalido ti temporario wenno agdama a kontrasenias.
+Mabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a temporario a kontrasenias.',
+'resetpass-temp-password' => 'Temporario a kontrasenias:',
 
 # Special:PasswordReset
 'passwordreset' => 'Ipasubli ti kontrasenias',
-'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodan ka ti e-surat a palagipan kadagiti dsalaysay ti pakabilangam.',
+'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodanka ti e-surat a paglagipan kadagiti salaysay ti pakabilangam.',
 'passwordreset-legend' => 'Ipasubli ti kontrasenias',
-'passwordreset-disabled' => 'Naikkat dagiti pagisubli iti kontrasenias daytoy a wiki.',
-'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a bukel ti datos dita baba}}',
+'passwordreset-disabled' => 'Nabaldado dagiti panagisubli ti kontrasenias iti daytoy a wiki.',
+'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a piraso ti datos dita baba}}',
 'passwordreset-username' => 'Nagan ti agar-aramat:',
 'passwordreset-domain' => 'Pagturayan:',
-'passwordreset-capture' => 'Kayatmo a kitaen ti nagbanagan ti e-surat?',
-'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda saan nga agnayon a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
+'passwordreset-capture' => 'Kitaem ti nagbanagan ti e-surat?',
+'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
 'passwordreset-email' => 'E-surat a pagtaengan:',
 'passwordreset-emailtitle' => 'Salaysay ti pakabilangan iti {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti palagip para
@@ -583,7 +594,7 @@ nakairaman iti daytoy nga e-surat a pagtaengan:
 
 $2
 
-{{PLURAL:$3|Daytoy a saan nga agnayon a kontrasenias|Dagitoy a saan nga agnayon a kontrasenias}} ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
+{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
 agtuloy ka nga agusar ti daan a kontrasenias.',
@@ -593,41 +604,41 @@ nakairaman iti daytoy nga e-surat a pagtaengan:
 
 $2
 
-{{PLURAL:$3|Daytoy a saan nga agnayon a kontrasenias|Dagitoy a saan nga agnayon a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
+{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
 agtuloy kan nga agusar ti daan a kontrasenias mo.',
 'passwordreset-emailelement' => 'Nagan ti agar-aramat: $1
-Saan nga agnayon a kontrasenias: $2',
+Temporario a kontrasenias: $2',
 'passwordreset-emailsent' => 'Maipatuloden ti e-surat a palagip.',
 'passwordreset-emailsent-capture' => 'Naipatulod ti palagip nga e-surat, a napaikita dita baba.',
-'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem madi a napaitulod ti agar-aramat: $1',
+'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Sukatan ti e-surat a pagtaengan',
 'changeemail-header' => 'Sukatan ti e-surat a pagtaengan ti pakabilangan',
 'changeemail-text' => 'Lippasem daytoy a kabuklan ti panagsukat ti e-surat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.',
-'changeemail-no-info' => 'Masapul a nakastrekka tapno dagus ka a makapan ditoy a panid.',
+'changeemail-no-info' => 'Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.',
 'changeemail-oldemail' => 'Agdama nga E-surat a pagtaengam:',
-'changeemail-newemail' => 'Baro nga e-surat a pagtaengam:',
+'changeemail-newemail' => 'Baro nga e-surat a pagtaengan:',
 'changeemail-none' => '(awan)',
 'changeemail-submit' => 'Sukatan ti e-surat',
 'changeemail-cancel' => 'Ukasen',
 
 # Edit page toolbar
-'bold_sample' => 'Napuskol a teksto',
-'bold_tip' => 'Napuskol a teksto',
-'italic_sample' => 'Nakairig a teksto',
-'italic_tip' => 'Nakairig a teksto',
+'bold_sample' => 'Napuskol a testo',
+'bold_tip' => 'Napuskol a testo',
+'italic_sample' => 'Nakairig a testo',
+'italic_tip' => 'Nakairig a testo',
 'link_sample' => 'Titulo ti panilpo',
 'link_tip' => 'Akin-uneg a panilpo',
 'extlink_sample' => 'http://www.example.com titulo ti panilpo',
-'extlink_tip' => 'Akinruar a panilpo (laglagipen ti http:// a prefix)',
+'extlink_tip' => 'Akin-ruar a panilpo (laglagipen ti http:// a pasaruno)',
 'headline_sample' => 'Testo ti paulo',
-'headline_tip' => 'Maika-2 a lessaad ti paulo',
-'nowiki_sample' => 'Isengngat ti saan a nabuklan a testo ditoy',
-'nowiki_tip' => 'Saan nga ikaskaso ti panagbuklan a wiki',
-'image_tip' => 'Naibinggas a papeles',
+'headline_tip' => 'Maika-2 nga agasmang ti paulo',
+'nowiki_sample' => 'Isengngat ti saan a naporma a testo ditoy',
+'nowiki_tip' => 'Saan nga ikaskaso ti panakaporma ti wiki',
+'image_tip' => 'Naisengngat a papeles',
 'media_tip' => 'Panilpo ti papeles',
 'sig_tip' => 'Ti pirmam nga adda ti oras ken petsa',
 'hr_tip' => 'Pakuros a linia (manmano laeng nga aramaten)',
@@ -635,7 +646,7 @@ Saan nga agnayon a kontrasenias: $2',
 # Edit pages
 'summary' => 'Pakabuklan:',
 'subject' => 'Suheto/paulo:',
-'minoredit' => 'Bassit a panag-urnos laeng daytoy',
+'minoredit' => 'Daytoy ket bassit a panag-urnos',
 'watchthis' => 'Bantayan daytoy a panid',
 'savearticle' => 'Idulin ti panid',
 'preview' => 'Naipadas',
@@ -644,12 +655,12 @@ Saan nga agnayon a kontrasenias: $2',
 'showdiff' => 'Ipakita dagiti sinukatan',
 'anoneditwarning' => "'''Ballaag:''' Saanka a nakastrek.
 Mairehistro ti IP a pagtaengam iti pakasaritaan ti panagurnos iti daytoy a panid.",
-'anonpreviewwarning' => '" Saanka a nakastrek. No idulin mo mairehistro ti IP a pagtaengam kadagitoy pakasaritaan ti panagurnos ti panid."',
-'missingsummary' => "'''Palagip:''' Saanka a nangipan iti pakabuklan ti panag-urnos mo.
-No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnos mo nga awan ti pakabuklan na.",
-'missingcommenttext' => 'Pangngaasim a mangipanka iti komentario dita baba.',
-'missingcommentheader' => "'''Palagip:''' Saanka a nangipan iti suheto/paulo para iti daytoy a komentario.
-No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnormo nga awan ti pakabuklanna.",
+'anonpreviewwarning' => '" Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a  pakasaritaan ti panagurnos iti daytoy a panid."',
+'missingsummary' => "'''Palagip:''' Saanka a nakaited iti pakabuklan ti panag-urnos.
+No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
+'missingcommenttext' => 'Pangngaasi nga agikabil ti komentario dita baba.',
+'missingcommentheader' => "'''Palagip:''' Saanka a nakaited  iti suheto/paulo para iti daytoy a komentario.
+No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
 'summary-preview' => 'Naipadas a  pakabuklan:',
 'subject-preview' => 'Suheto/naipadas a paulo:',
 'blockedtitle' => 'Naseraan ti agar-aramat',
@@ -660,7 +671,7 @@ Ti rason ket ''$2''.
 
 * Rugi ti panangserra: $8
 * Panagpaso ti panangserra: $6
-* Ti kuma serraan na: $7
+* Ti kuma serraan na: $7
 
 Mabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panag-serra.
 Dimo mabalin nga aramaten ti ramit nga e-suratan daytoy nga agar-aramat malaksid no adda napudno nga e-surat a pagtaengan a naipan iti  [[Special:Preferences|pakabilangan ti kaykayatmo]] ken no saanka a naparitan nga agaramat iti daytoy.
@@ -682,15 +693,15 @@ naserraan ti panag-usar na.
 Ti tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.
 Pangaasi nga iramanmo amin dagiti salaysay ti amin a panagsaludsodmo.',
 'blockednoreason' => 'awan ti naited a rason',
-'whitelistedittext' => 'Nasken ti $1 tapno makaurnos kadagiti panid.',
-'confirmedittext' => 'Masapul a pasingkedam ti e-surat sakbay a makaurnos ka kadagiti panid.
+'whitelistedittext' => 'Nasken ti $1 tapno maurnosmo dagitoy a panid.',
+'confirmedittext' => 'Masapul a pasingkedam ti e-surat sakbay a makaurnos kadagitoy a panid.
 Pangngaasim nga ikabil ken ipapudnom ti e-suratmo idiay [[Special:Preferences|kaykayat dagiti agar-aramat ]].',
-'nosuchsectiontitle' => 'Saan a mabirukan ti kasta a paset',
-'nosuchsectiontext' => 'Pinadasmo nga inurnos ti maysa a paset nga awan pay.
-Naiyalis ngatan wenno naikkat idi kitkitaen dayta a panid.',
+'nosuchsectiontitle' => 'Saan a mabirukan ti paset',
+'nosuchsectiontext' => 'Pinadasmo nga inurnos ti awan a paset.
+Mabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.',
 'loginreqtitle' => 'Masapul ti sumrek',
 'loginreqlink' => 'sumrek',
-'loginreqpagetext' => 'Nasken a $1 ka tapno makakitaka iti sabsabali a pampanid.',
+'loginreqpagetext' => 'Nasken a $1 ka tapno makakitaka kadagiti sabsabali a pampanid.',
 'accmailtitle' => 'Naipatuloden ti kontrasenias.',
 'accmailtext' => "Ti kontrasenias para ken ni [[User talk:$1|$1]] ket naipatuloden ken ni $2.
 
@@ -698,30 +709,31 @@ Ti kontrasenias ti baro a pakabilangan ket masukatan idiay ''[[Special:ChangePas
 'newarticle' => '(Baro)',
 'newarticletext' => "Nasurotmo ti maysa a panilpo ti panid a saan pay a napartuat. 
 Tapno mapartuat daytoy a panid, rugiamon ti agikur-it wenno agisurat iti pagsuratan a kahon dita baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti ad-adu pay a pakaammo). 
-No addaka ditoy babaen ti biddut, itaklam ti '''agsubli'''a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
-'anontalkpagetext' => "----''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saan na nga us-usaren.
+No addaka ditoy babaen ti biddut, itaklam ti '''agsubli''' a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
+'anontalkpagetext' => "----''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saanna nga us-usaren.
 Dakami ket agusar kami ti numero nga IP a pagtaengan ti panangilasin dagiti lalaki/babai.
 Ti kastoy nga IP a pagtaengan ket us-usaren a bingayan ti adu pay a sabsabali nga agar-aramat.
 No sika ket maysa a di am-ammo nga agar-aramat ken dagiti awan ti kapategan a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agaramid ka ti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] 
-tapno maawanan ti pinakaulaw kadagiti sabali a di am-ammo nga agar-aramat.",
+tapno maawanan ti panakaulaw kadagiti sabali a di am-ammo nga agar-aramat.",
 'noarticletext' => 'Awan ti agdama a testo  daytoy a panid.
 Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]] kadagiti sabsabali a pampanid,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbirukka],
 wenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid].',
-'noarticletext-nopermission' => 'Awan pay ti  nagyan na daytoy a panid.
-Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]] iti sabsabali a pampanid,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbirukka],
-wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk ka kadagiti maikabagian a listaan]</span>.',
+'noarticletext-nopermission' => 'Awan ti agdama  a linaon daytoy a panid.
+Mabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti dadduma a panid, wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat ti daytoy a panid.',
+'missing-revision' => 'Ti panagbalbaliw ti #$1 tipanid a nanaganan ti "{{PAGENAME}}" ket awan.
+
+Daytoy ket kadawyan a gapuanan babaen ti samaganad a panilpo ti baak a pakasaritaan iti maysa a panid a naikkaten.
+Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 'userpage-userdoesnotexist' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro. 
 Pangngaasi a kitaem no kayatmo ti agaramid/urnosen daytoy a panid.',
-'userpage-userdoesnotexist-view' => 'Ti pakabilangan ni agar-aramat "$1" ket saan a nakarehistro.',
+'userpage-userdoesnotexist-view' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro.',
 'blocked-notice-logextract' => 'Agdama a naserraan daytoy nga agar-aramat.
 Ti naudi a listaan ti panaka-serra ket adda dita baba tapno mausar a reperensia:',
-'clearyourcache' => "'''Pakaammo:''' No nalpas ka nga agidulin, kuma ket masapul nga ipalabas ti cahe ti pinagbasabasam tapno makita dagiti sinukatam.
+'clearyourcache' => "'''Pakaammo:''' No nalpaskan nga agiduldulin, kuma ket masapul nga ipalabas ti cahe ti pinagbasabasam tapno makita dagiti sinukatam.
 * '''Firefox / Safari:''' Tenglen ti ''Sukatan'' bayat nga agtakla ti ''Ikarga manen'', wenno itakla ti ''Ctrl-F5'' wenno''Ctrl-R'' (''⌘-R'' Mac)
 * '''Google Chrome:''' Itakla ti ''Ctrl-Shift-R'' (''⌘-Shift-R'' iti Mac)
 * '''Internet Explorer:''' Tenglen ti ''Ctrl'' bayat nga agtakla ti ''Ipasaradiwa'', wenno itakla ti ''Ctrl-F5''
-* '''Konqueror:''' Itakla ti ''Ikarga manen'' wenno itakla ti ''F5''
 * '''Opera:''' Dalusan ti cache iti ''Ramramit → Kakaykayatan''",
 'usercssyoucanpreview' => "'''Paammo:''' Usaren ti \"{{int:showpreview}}\" buton ti panagsubok ti baro a CSS sakbay nga idulinmo.",
 'userjsyoucanpreview' => "'''Paammo:''' Usaren ti \"{{int:showpreview}}\" buton ti panagsubok ti baro a JavaScript sakbay nga idulinmo.",
@@ -734,7 +746,7 @@ Ti naudi a listaan ti panaka-serra ket adda dita baba tapno mausar a reperensia:
 'sitejspreview' => "'''Laglagipem nga ipadpadasmo laeng ti kodigo daytoy a JavaScript.'''
 '''Saan pay nga naidulin!'''",
 'userinvalidcssjstitle' => "'''Ballaag:''' Awan ti kudil a \"\$1\".
-Annawid a .css ken .js dagiti titulo ket agususar ti napababa a letra, a kas dagiti {{ns:user}}:Foo/vector.css saan ket a {{ns:user}}:Foo/Vector.css.",
+Annawid a .css ken .js dagiti titulo ket agususar ti babassit a letra, a kas dagiti {{ns:user}}:Foo/vector.css saan ket a {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Napabaro)',
 'note' => "'''Paammo:'''",
 'previewnote' => "'''Laglagipem a daytoy ket panagipadas laeng.'''
@@ -750,7 +762,7 @@ No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek ka m
 
 '''No daytoy ket pudno a panag-urnos, pangngaasi a padasem manen.'''
 No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
-'token_suffix_mismatch' => "'''Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna ti kuldit ti kababalin idiay pinagpudno ti panag-urnos.'''
+'token_suffix_mismatch' => "'''Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna ti kuldit ti kababalin idiay panagpudno ti panag-urnos.'''
 Ti panag-urnos ket saan a naawat tapno mapawilan ti panakadadael ti testo ti panid.
 Mapasamak daytoy no agus-usarka ti saan a nasayaat a naibasta ti sapot a diamammo a proxy a panagserbi.",
 'edit_form_incomplete' => "'''Adda dagiti paset ti panag-urnos a kabuklan a saan a nakadanon dita server; kitkitaen nga dagiti panag-urnosmo ket saan a naikkatan ken padasem manen.'''",
@@ -766,35 +778,35 @@ Ipatipon mo dagiti sinukatam idiay lugar ti testo.
 '''Iti laeng''' testo dita ngato a lugar ti testo ti maidulin no pesselem ti \"{{int:savearticle}}\".",
 'yourtext' => 'Ti testom',
 'storedversion' => 'Bersion a naidulin',
-'nonunicodebrowser' => "'''Ballaag: Ti  pabasabasam ket saan a kasla unicode .'''
-Adda sabali a mausar tapno makaurnos ka kadagiti panid: Ti saan nga-ASCII a kababalin ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
+'nonunicodebrowser' => "'''Ballaag: Ti  pabasabasam ket saan a naikeddeng ti Unicode .'''
+Adda sabali a mausar tapno makaurnoska kadagiti panid: Ti saan nga-ASCII a kababalin ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
 'editingold' => "'''Ballag: Ururnosem ti daan a panag-baliw iti daytoy a panid.'''
 No idulinmo, mapukaw amin a sinukatam iti daytoy a panag-baliw.",
 'yourdiff' => 'Dagiti nagdudumaan',
-'copyrightwarning' => "Laglagipenyo koma, apo, nga amin a parawad iti {{SITENAME}} ket maibilang a nairuar iti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). 
+'copyrightwarning' => "Laglagipenyo koma, apo, nga amin a maiparawad iti {{SITENAME}} ket maibilang a mairuar babaen ti $2 (kitaen ti $1 para kadagiti salaysay). 
 No dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.<br />
-Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo ngem iti maysa a nawaya a pagturayan ti publiko wenno pumadmad a libre a pagtaudan.
- '''Saan a mangipan iti addaan a karbengan ti pinagpablaak nga obra no awan ti  pammalubos!'''",
-'copyrightwarning2' => "Pangngaasiyo, apo, a laglagipen nga amin a parawad iti {{SITENAME}} ket mabalin a maurnos, masuktan, wenno ikkaten dagiti sabali pay nga agar-aramat.
+Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a nawaya a nagtaudan.
+ '''Saan a mangited ti adda karbenganna a panagipablaak nga obra no awan ti  pammalubos!'''",
+'copyrightwarning2' => "Pangngaasiyo, apo, a laglagipen nga amin a maiparawad iti {{SITENAME}} ket mabalin a maurnos, masuktan, wenno ikkaten dagiti sabali pay nga agar-aramat.
 No dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.<br />
-Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladam ngem iti maysa a nawaya a pagturayan ti publiko wenno pumadmad a libre a pagtaudan (kitaen ti $1 para iti salaysay).
-'''Saan a mangipan iti addaan ti karbengan ti pinagpablaak nga obra no awan ti  pammalubos!'''",
+Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a nawaya a pagtaudan (kitaen ti $1 para iti salaysay).
+'''Saan a mangipan iti adda ti karbenganna a panagpablaak nga obra no awan ti  pammalubos!'''",
 'longpageerror' => "'''Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kil-kilobyte}} a katiddog, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kil-kilobyte}}.'''
 Isu ti gapuna a saan a maidulin.",
-'readonlywarning' => "'''Ballaag: Narikepan ti database tapno masimpaan, saan mo a mabalin nga idulin dagita inurnosmo tattan.'''
+'readonlywarning' => "'''Ballaag: Narikepan ti database para iti panagtaripatu, saanmo a mabalin nga idulin dagita inurnosmo tattan.'''
 No kayatmo i \"cut-n-paste\" mo dagiti testo iti testo a papeles ken idulinmo no madamdama.
 
 Ti administrador a nangrikep ket saan a nangted ti palawag: \$1",
-'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaurnos ditoy.'''
+'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga adda ti gundaway nga administrador ti makaurnos ditoy.'''
 Ti nakaudi a naikabil a listaan ket adda dita baba tapno usaren a  reperensia:",
 'semiprotectedpagewarning' => "'''Pakaammo:'''Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.
 Ti naudi a naikabil a listaan ket adda dita baba tapno usaren a reperensia:",
-'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga addaan ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a sariap a nasalakniban
+'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga adda ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a nasalakniban ti sariap
 {{PLURAL:$1|a panid|a pampanid}}:",
-'titleprotectedwarning' => "'''Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan a karbengan ]] ket nasken ti agpartuat iti daytoy.'''
+'titleprotectedwarning' => "'''Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan a karbengan ]] ket nasken ti makapartuat iti daytoy.'''
 Ti kinaudi a naikabil iti listaan ket naikabil dita baba tapno usaren a reperensia:",
 'templatesused' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panid:',
-'templatesusedpreview' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a nausar iti daytoy a panagpadas:',
+'templatesusedpreview' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panagpadas:',
 'templatesusedsection' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a paset:',
 'template-protected' => '(nasalakniban)',
 'template-semiprotected' => '(nasalakniban-bassit)',
@@ -811,29 +823,29 @@ Mabalinmo ti agsubli ken urnosen ti adda a panid, wenno [[Special:UserLogin|sumr
 'recreate-moveddeleted-warn' => "'''Ballaag: Agparpartuatka manen ti naikkat idi a panid'''
 
 Nasken a siguraduem no maikanatad nga ituloymo nga urnosen daytoy a panid.
-Ti panaka-ikkat ken panka-iyalis a listaan para iti daytoy  a panid ket adda ditoy a pakakitaan:",
+Ti panaka-ikkat ken panaka-iyalis a listaan para iti daytoy  a panid ket adda ditoy a pakakitaan:",
 'moveddeleted-notice' => 'Naikkaten daytoy a panid.
 Ti listaan a panaka-ikkat ken panaka-iyalis ti panid ket naikabil dita baba tapno usaren a reperensia.',
-'log-fulllog' => 'Kitaem amin dagita listaan',
+'log-fulllog' => 'Kitaem ti napno a listaan',
 'edit-hook-aborted' => 'Ti panag-urnos ket napasardeng ti kawit.
 Awan ti intedna a palawag.',
 'edit-gone-missing' => 'Saan a mapabaro daytoy a panid.
 Kasla met naikkaten.',
 'edit-conflict' => 'Adda kasinnungat ti panag-urnos.',
-'edit-no-change' => 'Ti inurnos mo ket saan a naikaskaso, ngamin ket awan ti nasukatan a testo.',
+'edit-no-change' => 'Ti inurnosmo ket saan a naikaskaso, ngamin ket awan ti nasukatan a testo.',
 'edit-already-exists' => 'Saan a makaaramid ti baro a panid.
 Adda met daytoyen.',
-'defaultmessagetext' => 'Naisigud a testo ti mensahe',
+'defaultmessagetext' => 'Kasisigud a testo ti mensahe',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser nga opisio a pinagtawtawag.
+'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an  a panagtawtawag.
 
 Adda kuman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
-'expensive-parserfunction-category' => 'Dagiti panid nga adda ti adu unay a nangina a parser nga opisio a panagtawtawag',
-'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti naikabil a plantilia.
-Addan to dagiti plantilia a saan a maikabil.",
-'post-expand-template-inclusion-category' => 'Dagiti pampanid nga ayan dagiti nagsobra ti rukod dagiti naikabil a plantilia',
-'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket adda nagyanna a maysa a panagpalawag a plantilia a dakkel unay ti panagpadakkel na.
+'expensive-parserfunction-category' => 'Dagiti panid nga adda ti adu unay a nangina a parser a pamay-an a panagtawtawag',
+'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti nairaman a kadakkel ti plantilia.
+Adda dagiti plantilia a saanto a mairaman.",
+'post-expand-template-inclusion-category' => 'Pampanid nga ayan ti plantilia a  nagsobra ti kadakkel ti rukod a nairaman',
+'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panagpalawag a plantilia a dakkel unay ti panagpadakkel na.
 Dagitoy a panagpalawag  ket naikkaten.",
 'post-expand-template-argument-category' => 'Dagiti panid a naglaon ti naikkat a plantilia kadagiti kasinnungat',
 'parser-template-loop-warning' => 'Adda nasarakan a silo ti plantilia: [[$1]]',
@@ -845,19 +857,20 @@ Dagitoy a panagpalawag  ket naikkaten.",
 'expansion-depth-exceeded-warning' => 'Ti panid ket nasurokanna ti kauneg ti panagpadakkel',
 'parser-unstrip-loop-warning' => 'Adda  nakita a di-naukisan a silo',
 'parser-unstrip-recursion-limit' => 'Ti di-naukisan a panagsumro manen a patingga ket nasurokan ($1)',
+'converter-manual-rule-error' => 'Adda biddut a naduktalan idiay manual nga alagaden ti panagbalbaliw ti pagsasao',
 
 # "Undo" feature
 'undo-success' => 'Ti panag-urnos ket saan a maisubli.
 Pangngaasi a kitaen ti pagipadaan dita baba tapno maamuan no agpaypayso ti kayatmo nga aramiden, ken idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.',
 'undo-failure' => 'Ti inurnos ket saan a maipasubli ta adda dagiti nakisinnungat a patingnga a naurnos.',
 'undo-norev' => 'Saan a maibabawi ti naurnos ngamin ket awan met daytoy wenno mabalin a naikkat.',
-'undo-summary' => 'Ibabawi ti binaliwan $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Makipatang]])',
+'undo-summary' => 'Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Madi a maaramid ti pakabilangan',
-'cantcreateaccount-text' => "Ti agaramid iti pakabilangan manipud itoy nga IP a pagtaengan ('''$1''') ket sinerraan ni [[User:$3|$3]].
+'cantcreateaccounttitle' => 'Saan a makaaramid ti pakabilangan',
+'cantcreateaccount-text' => "Ti panagaramid ti pakabilangan manipud itoy nga IP a pagtaengan ('''$1''') ket sinerraan babaen ni [[User:$3|$3]].
 
-Ti inted a rason ni $3 ket ''$2''",
+Ti inted a rason babaen ni $3 ket ''$2''",
 
 # History pages
 'viewpagelogs' => 'Kitaen dagiti listaan para iti daytoy a panid',
@@ -868,7 +881,7 @@ Ti inted a rason ni $3 ket ''$2''",
 'revision-info' => 'Panangbaliw manipud idi $1 babaen ni $2',
 'previousrevision' => '←Daan a panangbalbaliw',
 'nextrevision' => 'Nabarbaro a panangbalbaliw→',
-'currentrevisionlink' => 'kitaen ti agdama a panangbaliw',
+'currentrevisionlink' => 'Kinaudi a binaliwan',
 'cur' => 'agdama',
 'next' => 'sumaruno',
 'last' => 'naudi',
@@ -880,16 +893,16 @@ Sarita: '''({{int:cur}})''' = naggidiatan ti kinaudi a panagbaliw, '''({{int:las
 'history-show-deleted' => 'Naikkat laeng',
 'histfirst' => 'Kaunaan',
 'histlast' => 'Kaudian',
-'historysize' => '({{PLURAL:$1|1 a byte|$1 a bytes}})',
+'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(blanko)',
 
 # Revision feed
 'history-feed-title' => 'Pakasaritaan ti panagbalbaliw',
 'history-feed-description' => 'Pakasaritaan ti panagbalbaliw para iti daytoy a panid ditoy a wiki',
 'history-feed-item-nocomment' => '$1 iti $2',
-'history-feed-empty' => 'Awan ti kiniddaw a panid..
-Baka naikkaten ditoy a wiki, wenno nanaganan.
-Padasem ti [[Special:Search|agbiruk ditoy a wiki]] kadagiti mapaay a baro a panid.',
+'history-feed-empty' => 'Awan ti kiniddaw a panid.
+Mabalin a naikkat manipud ti daytoy a wiki, wenno nanaganan manen.
+Padasem ti [[Special:Search|agbiruk ditoy a wiki]] para kadagiti maitutop a baro a panid.',
 
 # Revision deletion
 'rev-deleted-comment' => '(naikkat ti pakabuklan ti inurnos)',
@@ -903,7 +916,7 @@ Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FU
 Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
 'rev-suppressed-text-unhide' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].
-Mabalin mo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
+Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
 'rev-deleted-text-view' => "Ti panakabaliw daytoy a panid ket '''naikkaten'''.
 Mabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].",
 'rev-suppressed-text-view' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
@@ -923,73 +936,75 @@ Mabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idia
 Mabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].",
 'rev-delundel' => 'ipakita/ilemmeng',
 'rev-showdeleted' => 'ipakita',
-'revisiondelete' => 'Naikkat/isubli dagiti naikkat a panagbaliw',
+'revisiondelete' => 'Ikkaten/isubli dagiti naikkat a panagbaliw',
 'revdelete-nooldid-title' => 'Imbalido ti napuntaan a panagbaliw',
-'revdelete-nooldid-text' => 'Baka saanmo nga imbaga ti pagpuntaan ti panagbaliw  (dagiti panagbaliwan) ti panagaramid daytoy,
+'revdelete-nooldid-text' => 'Mabalin a saanmo nga imbaga ti pagpuntaan ti panagbaliw  (dagiti panagbaliwan) ti panagaramid daytoy,
 awan ti naibaga a panagbaliw, wenno padpadasem nga ilemlemmeng ti agdama a panagbaliw.',
 'revdelete-nologtype-title' => 'Awan ti naited a kita ti listaan',
 'revdelete-nologtype-text' => 'Saanmo nga nainaganan ti kita a listaan ti agtungpal daytoy nga aramid.',
 'revdelete-nologid-title' => 'Imbalido a panangikabil dita listaan',
 'revdelete-nologid-text' => 'Saanmo a nainaganan ti puntaan ti listaan a paspasamak ti agaramid daytoy a pagusar wenno ti nainaganan nga inkabil ket saan nga adda idiay.',
-'revdelete-no-file' => 'Awan dayta ti nainaganan a papeles.',
-'revdelete-show-file-confirm' => 'Segurado a kayatmo ti mangkita ti naikkat a baliwan ti papeles "<nowiki>$1</nowiki>" a naggapu idi $2 ti oras nga $3?',
+'revdelete-no-file' => 'Awan dayta nainaganan a papeles.',
+'revdelete-show-file-confirm' => 'Sigurado kadi a kayatmo ti mangkita ti naikkat a baliwan ti papeles "<nowiki>$1</nowiki>" a naggapu idi $2 ti oras nga $3?',
 'revdelete-show-file-submit' => 'Wen',
 'revdelete-selected' => "'''{{PLURAL:$2|Napili a nabaliwan|Dagiti napili a nabaliwan}} iti [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ti napili a listaan ti napasamak|Dagiti napili a listaan ti napasamak}}:'''",
 'revdelete-text' => "'''Dagiti naikkat a binaliwan ken dagiti napasamak ket agparang idiay panid ti pakasaritaan ken dagiti listaan, ngem addaan dagiti paset ti nagyanda a saan a maserrekan ti publiko.'''
-Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalin da a serrekan ti nailemmeng a nagyan ken isubli ti panakaikkat da manen idiay dati nga interface, ngem saan no adda dagiti nainayon a naikabil a panagparit.",
+Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalinda a serrekan ti nailemmeng a nagyan ken isubli ti panakaikkatda manen idiay dati nga interface, ngem saan no adda dagiti nainayon a naikabil a panagparit.",
 'revdelete-confirm' => 'Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ket araramidem daytoy a segun iti [[{{MediaWiki:Policy-url}}|ti annuroten]].',
-'revdelete-suppress-text' => "Ti pinagdepdep ket usaren '''laeng''' kadagiti sumaganad;
-* Makapataud a dakes a pakaammo
+'revdelete-suppress-text' => "Ti panagdepdep ket usaren '''laeng''' kadagiti sumaganad a kaso;
+* Adda panakabalinna a dakes a pakaammo
 * Di maiparbeng a  kabukbukodan a pakaammo
 * : ''dagiti pagtaengan ken numero ti telepono, numero ti sosial a seguridad, ken dadduma pay.''",
-'revdelete-legend' => 'Iplastar dagiti panagiparit ti panagkita',
+'revdelete-legend' => 'Ikabil dagiti panagiparit ti panagkita',
 'revdelete-hide-text' => 'Ilemmeng ti testo ti binaliwan',
 'revdelete-hide-image' => 'Ilemmeng ti linaon ti papeles',
 'revdelete-hide-name' => 'Ilemmeng ti aramid ken puntaan',
 'revdelete-hide-comment' => 'Ilemmeng ti pakabulan ti inurnos',
 'revdelete-hide-user' => 'Ilemmeng ti nagan ti agar-amat/ti IP a pagtaengan',
 'revdelete-hide-restricted' => 'Depdepen ti datos a naggapu kadagiti administrador ken dagiti sabsabali',
-'revdelete-radio-same' => 'saan a sukatan',
+'revdelete-radio-same' => '(saan a sukatan)',
 'revdelete-radio-set' => 'Wen',
 'revdelete-radio-unset' => 'Saan',
-'revdelete-suppress' => 'Depdepen ti data a naggapu kadagiti administrador ken dagiti sabsabali',
+'revdelete-suppress' => 'Depdepen ti datos manipud kadagiti administrador ken dagiti sabsabali',
 'revdelete-unsuppress' => 'Ikkaten dagiti pannakaiparit kadagiti naisubli a binaliwan',
 'revdelete-log' => 'Rason:',
-'revdelete-submit' => 'Ipakat ti napili {{PLURAL:$1|a panagbalbaliw|a dagiti panagbalbaliw}}',
+'revdelete-submit' => 'Ipakat  {{PLURAL:$1|ti napili a panagbalbaliw|dagiti napili a panagbalbaliw}}',
 'revdelete-success' => "'''Balligi ti panagpabaro ti pinakakita ti pinagbaliwan.'''",
 'revdelete-failure' => "'''Saan a napabaro ti pinakakita ti pinagbaliwan.'''
 $1",
 'logdelete-success' => "'''Balligi ti panagikabil ti listaan ti panagkita.'''",
 'logdelete-failure' => "'''Napaay ti panagikabil ti listaan ti panagkita:'''
 $1",
-'revdel-restore' => 'Sukatan ti panagkita',
-'revdel-restore-deleted' => 'naikkat a binaliwan',
-'revdel-restore-visible' => 'makita a binaliwan',
+'revdel-restore' => 'sukatan ti panagkita',
+'revdel-restore-deleted' => 'dagiti naikkat a binaliwan',
+'revdel-restore-visible' => 'dagiti makita a binaliwan',
 'pagehist' => 'Pakasaritaan ti panid',
 'deletedhist' => 'Naikkat a pakasaritaan',
 'revdelete-hide-current' => 'Biddut ti panakailemmeng ti banag a napetsado a $2, $1: Daytoy ti kinaudi a panagbaliw
-Saan a mailemmeng.',
+Saan a mabalin a mailemmeng.',
 'revdelete-show-no-access' => 'Biddut ti panagpakita ti banag a petsado a $2, $1: Daytoy ket namarkaan a "nakedngan".
-Saan mo a mabalin a serrekan.',
+Saanmo a mabalin a serrekan.',
 'revdelete-modify-no-access' => 'Biddut ti panagpabaro ti banag a petsado a $2, $1: Daytoy ket namarkaan a "nakedngan".
-Saan mo a mabalin a serrekan.',
+Saanmo a mabalin a serrekan.',
 'revdelete-modify-missing' => 'Biddut ti panagpabaro daytoy ID $1: Saan a nasarakan idiay database!',
-'revdelete-no-change' => "'''Biddut:''' Daytoy a banag a petsado a  $2, $1 ket addaan ti kiniddaw kadagiti pakakita a kasasaad.",
-'revdelete-concurrent-change' => 'Biddut ti panagpabaro daytoy a banag a petsado a $2, $1: Ti panakaikabil na ket mabalin a nasuktanen ti sabsabli idi pinadas mo a pinabaro.',
-'revdelete-only-restricted' => 'Biddut ti panagilemmeng daytoy banag a petsado a $2, $1: Saan mo a maidepdep dagita iti panagkita dagiti adminitrador no saan mo a pilian ti maysa kadagiti pinagpili ti panagkita.',
-'revdelete-reason-dropdown' => '*Dagiti kadawyan a panagikkat
-** Panaglabsing ti karbengan ti panagipablaak
-** Saan a maibagay ti kabukbukodan a pakaammo
-** Makapataud ti dakes a pakaammo',
-'revdelete-otherreason' => 'Sabali/dadduma a rason:',
+'revdelete-no-change' => "'''Ballaag:''' Daytoy a banag a napetsado ti  $2, $1 ket addaan ti kiniddaw kadagiti panakakita a kasasaad.",
+'revdelete-concurrent-change' => 'Biddut ti panagpabaro daytoy a banag a napetsado ti  $2, $1: Ti panakaikabilna ket mabalin a nasuktanen ti sabsabli idi pinada mo a pinabaro.
+Pangngaasi a kitaen dagiti listaan.',
+'revdelete-only-restricted' => 'Biddut ti panagilemmeng daytoy banag a napetsado ti $2, $1: Saanmo a maidepdep dagita iti panagkita dagiti adminitrador no saanmo a pilian ti maysa kadagiti pinagpili ti panagkita.',
+'revdelete-reason-dropdown' => '*Dagiti kadawyan a rason ti panagikkat
+** Panaglabsing ti karbengan ti kopia
+** Di maiparbeng a komentario wenno kabukbukodan a pakaammo
+** Di maiparbeng a nagan ti agar-aramat
+** Adda pannakabalinna a pammadpadakes a pakaammo',
+'revdelete-otherreason' => 'Sabali/maipatinayon a rason:',
 'revdelete-reasonotherlist' => 'Sabali a rason',
-'revdelete-edit-reasonlist' => 'Urnosen ti rason ti panagikkat',
+'revdelete-edit-reasonlist' => 'Urnosen dagiti rason ti panagikkat',
 'revdelete-offender' => 'Nangsukat a mannurat:',
 
 # Suppression log
 'suppressionlog' => 'Listaan ti nadepdepan',
-'suppressionlogtext' => 'Dita baba ket addaan dagiti listaan ti pinagikkat ken npanagserra a nairaman dagiti linaon a nailemmeng manipud kadagiti administrador.
+'suppressionlogtext' => 'Dita baba ket addaan dagiti listaan ti pinagikkat ken panagserra a nairaman dagiti linaon a nailemmeng manipud kadagiti administrador.
 Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagiti agdama nga operasional a panagparit ken panagserra.',
 
 # History merging
@@ -999,13 +1014,13 @@ Masapul a sigaraduem a daytoy a panagsukat ket agsustento ti panakaituloy ti pak
 'mergehistory-box' => 'Pagtiponen dagiti nasukatan iti dua a pampanid:',
 'mergehistory-from' => 'Taudan ti panid:',
 'mergehistory-into' => 'Pangipanan a panid:',
-'mergehistory-list' => 'Mabalin nga itipon ti pakasaritaan ti inurnos',
+'mergehistory-list' => 'Mabalin nga itipon a pakasaritaan ti inurnos',
 'mergehistory-merge' => 'Dagiti sumaganad a panagbaliw iti [[:$1]] ket mabalin nga itipon iti [[:$2]].
 Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid idiay ken sakbay ti nainagan nga oras.',
 'mergehistory-go' => 'Ipakita dagiti mabalin a maitipon a panag-urnos',
 'mergehistory-submit' => 'Pagtitiponen dagiti binalbaliwan',
-'mergehistory-empty' => 'Awan dagiti mabalin nga itipon.',
-'mergehistory-success' => '$3 {{PLURAL:$3|a binaliwan|dagiti binaliwan}} ti [[:$1]] balligi ti pinagtipon idiay [[:$2]].',
+'mergehistory-empty' => 'Awan dagiti mabalin nga itipon ti panagbalbaliw.',
+'mergehistory-success' => '$3 {{PLURAL:$3|a binaliwan|dagiti binaliwan}} ti [[:$1]] balligi ti panagitipon idiay [[:$2]].',
 'mergehistory-fail' => 'Saan a nakaaramid ti panagtipon ti pakasaritaan, pangngaasi ta kitaen ti panid ken parametro ti oras.',
 'mergehistory-no-source' => 'Awan ti taudan ti panid a $1.',
 'mergehistory-no-destination' => 'Awan ti papanan ti panid a $1.',
@@ -1032,19 +1047,23 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'showhideselectedversions' => 'Ipakita/ilemmeng dagiti napili a nabaliwan',
 'editundo' => 'ibabawi',
 'diff-multi' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtennga a panangbalbaliw}} babaen {{PLURAL:$2|ti agararamat|dagiti $2 nga agararamat}} ti saan a naipakita)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} a saan a naipakita)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} ti saan a naipakita)',
+'difference-missing-revision' => '{{PLURAL:$2|Maysa a panagbalbaliw|$2 kadagiti panagbalbaliw}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.
+
+Daytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a panilpo tipaggiddiatan ti maysa a panid a naikkaten.
+Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 
 # Search results
 'searchresults' => 'Dagiti nagbanagan ti panagbiruk',
-'searchresults-title' => 'Dagiti nabirukan a nagbanagan ti "$1"',
-'searchresulttext' => 'Ti adu pay a pakaammo ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => 'Nagbiruk ka  para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
-'searchsubtitleinvalid' => "Nagbiruk ka para  iti '''$1'''",
+'searchresults-title' => 'Dagiti nabirukan a nagbanagan para iti "$1"',
+'searchresulttext' => 'Para iti adu pay a pakaammo a maipanggep ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => 'Nagbirukka  para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
+'searchsubtitleinvalid' => "Nagbirukka para  iti '''$1'''",
 'toomanymatches' => 'Adu unay ti napasubli  nga agpapada, pangngaasi a padasem ti sabali a panagsapul',
 'titlematches' => 'Dagiti kapadpada a titulo ti panid',
 'notitlematches' => 'Awan dagiti kapadpada a titulo ti panid',
 'textmatches' => 'Dagiti agpapada a testo ti panid',
-'notextmatches' => 'Awan dagiti kapadpada a teksto ti panid',
+'notextmatches' => 'Awan dagiti kapadpada a testo ti panid',
 'prevn' => 'napalabas {{PLURAL:$1|$1}}',
 'nextn' => 'sumaruno {{PLURAL:$1|$1}}',
 'prevn-title' => 'Napalabas a $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}',
@@ -1068,22 +1087,20 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'searchprofile-advanced-tooltip' => 'Agbiruk ka kadagiti naiduma a "nagan ti lugar"',
 'search-result-size' => '$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})',
 'search-result-category-size' => '{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 nga apo ti kategoria|dagiti $2  nga apo ti kategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})',
-'search-result-score' => 'Kapategan: $1%',
+'search-result-score' => 'Kaitutopan: $1%',
 'search-redirect' => '(ibaw-ing ti $1)',
 'search-section' => '(paset $1)',
 'search-suggest' => 'Daytoy kadi: $1',
 'search-interwiki-caption' => 'Dagiti kakabsat a gandat',
 'search-interwiki-default' => '$1 dagiti nagbanagan:',
 'search-interwiki-more' => '(adu pay)',
-'search-mwsuggest-enabled' => 'addaan ti singasing',
-'search-mwsuggest-disabled' => 'awanan ti singasing',
 'search-relatedarticle' => 'Mainaig',
-'mwsuggest-disable' => 'Pagsardengen dagiti AJAX a naibagbaga',
+'mwsuggest-disable' => 'Pagsardengen dagiti AJAX a naisingasing',
 'searcheverything-enable' => 'Agbirukka kadagiti amin a nagan ti lugar',
 'searchrelated' => 'mainaig',
 'searchall' => 'amin',
 'showingresults' => "Maiparang iti baba ti agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
-'showingresultsnum' => "Makita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
+'showingresultsnum' => "Maipakpakita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Nagbanagan a '''$1''' iti '''$3'''|Dagiti Nagbanagan a '''$1 - $2''' iti '''$3'''}} para iti '''$4'''",
 'nonefound' => "'''Palagip'': Adda laeng bassit dagita nagan ti lugar a masigud a biruken.
 Padasem a  pasarunuan ti panagbiruk mo ti ''all:'' tapno birukem amin a nagyan (mairaman ti kapatangan a pampanid, dagiti plantilia, ken dadduma pay), wenno usarem nga ipasaruno ti kayatmo a nagan ti lugar.",
@@ -1127,7 +1144,7 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-personal' => 'Bariweswes ti agar-aramat',
 'prefs-rc' => 'Kinaudi a binalbaliwan',
 'prefs-watchlist' => 'Listaan ti bambantayan',
-'prefs-watchlist-days' => 'Manu nga aldaw nga agparang ti listaan iti 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-edits' => 'Kaadu a bilang ti ipakita kadagiti sinukatan iti napadakkel a bambantayan:',
 'prefs-watchlist-edits-max' => 'Kaadu a bilang: 1000',
@@ -1147,20 +1164,20 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'columns' => 'Tuk-tukol:',
 'searchresultshead' => 'Biruken',
 'resultsperpage' => 'Nabirukan ti tunggal maysa a panid:',
-'stub-threshold' => 'Pangruggian ti <a href="#" class="stub">pungol a panilpo</a>pinagbukel (bytes):',
+'stub-threshold' => 'Pangruggian ti <a href="#" class="stub">pungol a panilpo</a>panagporma (dagiti byte):',
 'stub-threshold-disabled' => 'Nabaldado',
-'recentchangesdays' => 'Mano nga aldaw nga ipakita dagiti kinaudi a binalbaliwan:',
+'recentchangesdays' => 'Alaldaw nga ipakita dagiti kinaudi a binalbaliwan:',
 'recentchangesdays-max' => 'Kabayag nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
 'recentchangescount' => 'Dagiti bilang dagiti naurnos a kinasigud a maiparang:',
 'prefs-help-recentchangescount' => 'Nairaman dagiti kinaudian a baliwan, dagiti pakasaritaan ti panid, ken dagiti listaan.',
 'prefs-help-watchlist-token' => 'No ikkam daytoy pagikabilan ti sekreto a tulbek, agaramid ti pakan a RSS para ti binambantayam.
-No adda makaammo daytoy a tulbek ditoy a pagikabilan ket mabalin da a basaen ti binambantayam, masapul nga agpili ka ti kuwenta a seguridad.
+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 kuwenta a mausarmo: $1',
+Adda ditoy ti pugto a pateg a mausarmo: $1',
 'savedprefs' => 'Naidulin dagitoy kaykayatmon.',
 'timezonelegend' => 'Sona ti oras:',
 'localtime' => 'Lokal nga oras:',
-'timezoneuseserverdefault' => 'Usaren ti wiki a kinasigud ($1)',
+'timezoneuseserverdefault' => 'Usaren ti wiki a kasisigud ($1)',
 'timezoneuseoffset' => 'Sabsabali (inaganan ti tangdan)',
 'timezoneoffset' => 'Tangda¹:',
 'servertime' => 'Oras ti server:',
@@ -1176,10 +1193,10 @@ Adda ditoy ti pugto a kuwenta a mausarmo: $1',
 'timezoneregion-indian' => 'Taaw Indiano',
 'timezoneregion-pacific' => 'Taaw Pasipiko',
 'allowemail' => 'Pakabaelam ti e-surat a naggapu kadagiti sabali nga agar-aramat',
-'prefs-searchoptions' => 'Pagpilian ti agbiruk',
+'prefs-searchoptions' => 'Biruken',
 'prefs-namespaces' => 'Nagan ti luglugar',
-'defaultns' => 'Wenno no saan agbiruk ka kadagitoy a nagan ti luglugar:',
-'default' => 'kinasigud',
+'defaultns' => 'Wenno saan agbirukka kadagitoy a nagan ti luglugar:',
+'default' => 'kasisigud',
 'prefs-files' => 'Dagiti papeles',
 'prefs-custom-css' => 'Naiduma a CSS',
 'prefs-custom-js' => 'Naiduma a JavaScript',
@@ -1221,11 +1238,11 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'prefs-signature' => 'Pirma',
 'prefs-dateformat' => 'Kita ti petsa',
 'prefs-timeoffset' => 'Tangda ti oras',
-'prefs-advancedediting' => 'Dagiti nangato a pagpilian',
-'prefs-advancedrc' => 'Dagiti nangato a pagpilian',
-'prefs-advancedrendering' => 'Dagiti nangato a pagpilian',
-'prefs-advancedsearchoptions' => 'Dagiti nangato a pagpilian',
-'prefs-advancedwatchlist' => 'Dagiti nangato a pagpilian',
+'prefs-advancedediting' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedrc' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedrendering' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedsearchoptions' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedwatchlist' => 'Dagiti napasayaat a pagpilian',
 'prefs-displayrc' => 'Ipakita dagiti pagpilian',
 'prefs-displaysearchoptions' => 'Ipakita dagiti pagpilian',
 'prefs-displaywatchlist' => 'Ipakita dagiti pagpilian',
@@ -1251,7 +1268,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 * A * ti kunana ket saan mo a maikkat ti bunggoy no nainayonmon, wenno pagbalittaden.',
 'userrights-reason' => 'Rason:',
 'userrights-no-interwiki' => 'Awan ti pammalubosmo nga agbaliw ti karbengan ti agar-aramat kadagiti sabali a wiki.',
-'userrights-nodatabase' => 'Awan ti database a $1 wenno baka saan a lokal.',
+'userrights-nodatabase' => 'Awan ti database a $1 wenno saan a lokal.',
 'userrights-nologin' => 'Masapul a [[Special:UserLogin|sumrekka]] nga adda pakabilangan nga administrador ti magted kadagiti karbengan ti agar-aramat.',
 'userrights-notallowed' => 'Awan ti pammalubos ti pakabilangam a mangted iti kakaberngan ti agar-aramat.',
 'userrights-changeable-col' => 'Dagiti bunggoy a mabalinmo a baliwan',
@@ -1261,29 +1278,29 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'group' => 'Bunggoy:',
 'group-user' => 'Dagiti agar-aramat',
 'group-autoconfirmed' => 'Dagiti automatiko a napasingkedan nga agar-aramat',
-'group-bot' => 'Dagiti bots',
+'group-bot' => 'Dagiti bot',
 'group-sysop' => 'Dagiti administrador',
 'group-bureaucrat' => 'Dagiti burokrata',
 'group-suppress' => 'Pakapansin',
 'group-all' => '(amin)',
 
 'group-user-member' => '{{GENDER:$1|agar-aramat}}',
-'group-autoconfirmed-member' => 'automatiko a napasingkedan nga agar-aramat',
-'group-bot-member' => 'bot',
-'group-sysop-member' => 'administrador',
-'group-bureaucrat-member' => 'burokrata',
-'group-suppress-member' => 'pagpansin',
+'group-autoconfirmed-member' => '{{GENDER:$1|automatiko a napasingkedan nga agar-aramat}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|administrador}}',
+'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
+'group-suppress-member' => '{{GENDER:$1|pagpansin}}',
 
 'grouppage-user' => '{{ns:project}}:Dagiti agar-aramat',
 'grouppage-autoconfirmed' => '{{ns:project}}:Dagiti automatiko a napasingkedan nga agar-aramat',
-'grouppage-bot' => '{{ns:project}}:Dagiti bots',
+'grouppage-bot' => '{{ns:project}}:Dagiti bot',
 'grouppage-sysop' => '{{ns:project}}:Dagiti administrador',
 'grouppage-bureaucrat' => '{{ns:project}}:Dagiti burokrata',
 'grouppage-suppress' => '{{ns:project}}:Pagpansin',
 
 # Rights
 'right-read' => 'Basaen dagiti panid',
-'right-edit' => 'Agurnos kadagiti pampanid',
+'right-edit' => 'Agurnos kadagiti panid',
 'right-createpage' => 'Agaramid kadagiti panid (saan a pagtutungtongan a pampanid)',
 'right-createtalk' => 'Agaramid ti pagtungtungan a pampanid',
 'right-createaccount' => 'Agaramid kadagiti baro a pakabilangan ti agar-aramat',
@@ -1296,22 +1313,23 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-upload' => 'Agipan ti papeles',
 'right-reupload' => 'Suratam manen dagiti adda a papeles',
 'right-reupload-own' => 'Pasuratam manen dagiti addaan ti pinag-ipan mo a papeles',
-'right-reupload-shared' => 'Paawanen dagiti papeles idiay pagbingayan ti nakaikabilan ti media a lokal',
+'right-reupload-shared' => 'Paawanen dagiti papeles idiay pagbingayan ti nakaikabilan ti midia a lokal',
 'right-upload_by_url' => 'Pag-ipan ti papeles a naggapu ti URL',
-'right-purge' => 'Pasariwaam ti cache ti pagsaadan a ti panid ket awan ti pasingkedan na.',
+'right-purge' => 'Purgaen ti pagidulinan ti pagsaadan a ti panid nga awan ti panagpasingked',
 'right-autoconfirmed' => 'Urnosen dagiti nasalakniban-bassit a panid',
-'right-bot' => 'Matrato a kas automatiko a panagaramid',
+'right-bot' => 'Matrato a kas automatiko a pamay-an',
 'right-nominornewtalk' => 'Nga awanan ti bassit a panagurnos dagiti tungtungan a panid ti mangkalbit dagiti agpakabil ti baro a mensahe',
-'right-apihighlimits' => 'Agusar ti nangatngato a patingga kadagiti pinagsapul ti API.',
+'right-apihighlimits' => 'Agusar ti nangatngato a patingga kadagiti panagsapul ti API.',
 'right-writeapi' => 'Panagusar ti panagsurat nga API',
 'right-delete' => 'Ikkaten dagiti panid',
 'right-bigdelete' => 'Ikkaten dagiti panid nga adda dagiti dakkel a pakasaritaanna',
-'right-deleterevision' => 'Ikkaten ken ipasubli dagiti nainagan a pinagbaliwan ti panid',
+'right-deletelogentry' => 'Ikkaten ken isubli ti panagikkat dagiti naisangsangayan a naikabil ti listaan',
+'right-deleterevision' => 'Ikkaten ken ipasubli dagiti nainagan a panagbaliw ti panid',
 'right-deletedhistory' => 'Kitaen dagiti naikabil a pakasaritaan, nga awan kaniada kadagiti nairaman a testo',
 'right-deletedtext' => 'Kitaen dagiti naikkat a testo ken dagiti nasukatan a nagbaetan dagiti binaliwan',
 'right-browsearchive' => 'Biruken dagiti naikkat a panid',
 'right-undelete' => 'Isubli ti naikkat a panid',
-'right-suppressrevision' => 'Kitaen ken ipasubli dagiti binaliwan a nailemmeng kadagiti administrador',
+'right-suppressrevision' => 'Kitaen ken ipasubli dagiti binaliwan a nailemmeng manipud kadagiti administrador',
 'right-suppressionlog' => 'Kitaen dagita pribado a listaan',
 'right-block' => 'Serraan dagiti sabali nga agar-aramat manipud iti panag-urnos',
 'right-blockemail' => 'Serraan dagiti agar-aramat nga agpatulod manipud ti e-surat',
@@ -1344,20 +1362,20 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 
 # User rights log
 'rightslog' => 'Listaan dagiti karbengan ti agar-aramat',
-'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agararamat.',
+'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agar-aramat.',
 'rightslogentry' => 'sinukatan ti panagkameng iti bunggoy ti $1 manipud $2 iti $3',
-'rightslogentry-autopromote' => 'na automatiko a naipangato a naggapo iti $2 idiay $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' => 'basaem datoy a panid',
-'action-edit' => 'agurnos iti datoy a panid',
+'action-read' => 'basaen datoy a panid',
+'action-edit' => 'urnosen datoy a panid',
 'action-createpage' => 'agpartuat kadagiti panid',
 'action-createtalk' => 'agaramid kadagiti pagtungtungan a panid',
 'action-createaccount' => 'agpartuat ti pakabilangan daytoy nga agar-aramat',
 'action-minoredit' => 'markaam a bassit nga urnos daytoy',
 'action-move' => 'iyalis daytoy a panid',
-'action-move-subpages' => 'iyalis daytoy a panid, ken dagiti apo na a panid',
+'action-move-subpages' => 'iyalis daytoy a panid, ken dagiti apona a panid',
 'action-move-rootuserpages' => 'iyalis dagiti ramut a panid ti agar-aramat',
 'action-movefile' => 'iyalis daytoy a papeles',
 'action-upload' => 'ipapan daytoy a papeles',
@@ -1400,7 +1418,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'rcnotefrom' => "Makita dita baba dagiti sinukatan manipud idi '''$2''' (agingga iti '''$1''' ti naipakita).",
 'rclistfrom' => 'Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $1',
 'rcshowhideminor' => '$1 dagiti bassit a panag-urnos',
-'rcshowhidebots' => '$1 dagiti bots',
+'rcshowhidebots' => '$1 dagiti bot',
 'rcshowhideliu' => '$1 dagiti nakastrek nga agar-aramat',
 'rcshowhideanons' => '$1 dagiti di am-ammo nga agar-aramat',
 'rcshowhidepatr' => '$1 dagiti napatrulian a panag-urnos',
@@ -1436,7 +1454,7 @@ Dagiti panid iti [[Special:Watchlist|listaan ti bambantayam]] ket '''napuskol'''
 # Upload
 'upload' => 'Mangipan iti papeles',
 'uploadbtn' => 'Mangipan iti papeles',
-'reuploaddesc' => 'Ukasen ti pag-ipan ken absubli idiay kabuklan ti pag-ipan',
+'reuploaddesc' => 'Ukasen ti pag-ipan ken agsubli idiay kabuklan ti pag-ipan',
 'upload-tryagain' => 'Ited ti napabaro a panagipalawag ti papeles',
 'uploadnologin' => 'Saan a nakastrek',
 'uploadnologintext' => 'Masapul a [[Special:UserLogin|nakaserrekka]] tapno makaipanka iti papeles.',
@@ -1480,7 +1498,7 @@ Pangngaasi ta naganan manen ti papeles ken padasen manen nga ipapan.',
 'filetype-unwanted-type' => "'''\".\$1\"''' ti saan a mapalubusan a kita ti papeles.
 Ti mapalubusan  {{PLURAL:\$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} \$2.",
 'filetype-banned-type' => 'Ti \'\'\'".$1"\'\'\' {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}.
-Ti mapalubusan{{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
+Ti mapalubusan {{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
 'filetype-missing' => 'Daytoy a papeles ket awan ti kita na a (kasla ".jpg").',
 'empty-file' => 'Ti papeles nga intedmo ket awan ti nagyan na.',
 'file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
@@ -1502,7 +1520,7 @@ Pangngaasi ta kitaem no kayatmo latta nga ipapan daytoy a papeles.',
 'windows-nonascii-filename' => 'Daytoy a wiki ket saanna a tapayaen dagiti nagan ti papeles nga adda ti kangrunaan a kababalin',
 'fileexists' => 'Adda ti papeles nga agnagan ti kastoy, pangngaasi a kitaemti  <strong>[[:$1]]</strong> no saanka a sigurado a mangsukat.
 [[$1|thumb]]',
-'filepageexists' => 'Ti panangipalpalawag a panid ti daytoy a papeles ket naaramiden idiay <strong>[[:$1]]</strong>, mgem awan ti agnagan ti katoy a papeles.
+'filepageexists' => 'Ti panangipalpalawag a panid ti daytoy a papeles ket naaramiden idiay <strong>[[:$1]]</strong>, ngem awan ti agnagan ti katoy a papeles.
 Ti pakabuklan nga inkabilmo ket saan nga agparang idiay panid ti panangipalpalawag.
 Tapno ti pakabuklan ket agparang idiay, masapul  a baliwam idiay.
 [[$1|thumb]]',
@@ -1581,7 +1599,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-backup' => 'Saan a maidulin ti papeles $1.',
 'backend-fail-notexists' => 'Ti papeles a $1 ket awanen.',
 'backend-fail-hashes' => 'Saan a maala dagiti papeles a hash tapno maipada.',
-'backend-fail-notsame' => 'Addaan ti saan a kapada tipapeles idiay $1.',
+'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-alreadyexists' => 'Ti papeles $1 ket addan.',
@@ -1593,14 +1611,18 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-closetemp' => 'Saan a marikpan ti temporario a papeles.',
 'backend-fail-read' => 'Saan a mabasa ti papeles $1.',
 'backend-fail-create' => 'Saan a masuratan ti papeles $1.',
-'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gapu ta dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a bytes}}.',
+'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gapu ta dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a byte}}.',
 'backend-fail-readonly' => 'Ti pagidulinan a kalikudan ti "$1" ket agdama a mabasa laeng. Ti rason a naited idi ket: "$2"',
 'backend-fail-synced' => 'Ti papeles "$1" ket bangking ti kasasaad na  iti kinauneg a pagidulinan ti kalikudan',
 'backend-fail-connect' => 'Saan a makaikapet idiay pagidulinan a kalikudan  "$1".',
 'backend-fail-internal' => 'Adda di amammo a biddut ti napasamak idiay pagidulinan a kalikudan "$1".',
 'backend-fail-contenttype' => 'Saan a maammoan ti kita ti linaon ti papeles nga idulin idiay "$1".',
 'backend-fail-batchsize' => 'Nagited ti nagipenpenan ti bunggoy iti $1 a papeles {{PLURAL:$1|nga aramid|nga ar-aramid}}; ti patingga ket $2 {{PLURAL:$2|nga aramid|nga ar-aramid}}.',
-'backend-fail-usable' => 'Saan a masuratan ti papeles $1 gapu ta awan ti makaanay a pammalubos wenno awan dagiti direktorio/pangikabilan.',
+'backend-fail-usable' => 'Saan a mabasa wenno masuratan ti papeles $1 gaputa awan ti makaanay a pammalubos wenno awan dagiti direktorio/pangikabilan.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Saan a maikapet idiay warnakan a database para iti likudan a pagipenpenan "$1".',
+'filejournal-fail-dbquery' => 'Saan a makapabaro idiay warnakan a database para iti likudan a pagipenpenan "$1".',
 
 # Lock manager
 'lockmanager-notlocked' => 'Saan a malukatan ti "$1"; saan a nakandaduan.',
@@ -1630,7 +1652,7 @@ Saan a matutup ti pinagkita ti seguridad na.',
 'uploadstash-badtoken' => 'Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talek mo ti panag-urnos ket nagpaso. Padasem manen.',
 'uploadstash-errclear' => 'Ti panagdalus kadagiti papeles ket napaay.',
 'uploadstash-refresh' => 'Pasadiwaam dagiti listaan ti papeles',
-'invalid-chunk-offset' => 'Imbalido ti maysa a supli',
+'invalid-chunk-offset' => 'Imbalido ti maysa a tangdan',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'naiparit ti iseserrek',
@@ -1658,16 +1680,16 @@ Para iti kangatuan a talinaay, nabaldado ti img_auth.php.',
 'http-timed-out' => 'Nagsardeng ti panagtulod ti HTTP.',
 'http-curl-error' => 'Biddut ti panagala ti URL: $1',
 'http-host-unreachable' => 'Di madanon ti URL',
-'http-bad-status' => 'Adda pakirut iti agdama a pinagtulod ti HTTP: $1 $2',
+'http-bad-status' => 'Adda pakirut idi las-ud ti panagkiddaw ti HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Di madanon ti URL',
 'upload-curl-error6-text' => 'Ti URL a naited ket saan a madanon.
 Pangngaasi ta kitaem manen no husto ti URL ken adda dayta a pagsaadan.',
 'upload-curl-error28' => 'Nagsardeng ti panag-ipan',
-'upload-curl-error28-text' => 'Ti pagsaadan ket nabayag unay nga simmungbat.
-Pangngaasi ti kitaen no naipatakder ti pagsaadan, aguray no madamdama ket padasem manen.
-Baka kayatmo a padasen no saan da a makumikom.',
+'upload-curl-error28-text' => 'Ti pagsaadan ket nabayag unay a simmungbat.
+Pangngaasi a kitaen no naipatakder ti pagsaadan, aguray no madamdama ket padasem manen.
+Baka kayatmo a padasen no saan a makumikom nga oras.',
 
 'license' => 'Lisensia:',
 'license-header' => 'Lisensia',
@@ -1688,7 +1710,7 @@ No sagaten ti agar-aramat, dagiti laeng papeles a pinag-ipan ti agar-aramat ti k
 'listfiles_user' => 'Agar-aramat',
 'listfiles_size' => 'Kadakkel',
 'listfiles_description' => 'Panagipalpalawag',
-'listfiles_count' => 'Dagiti Bersion',
+'listfiles_count' => 'Dagiti bersion',
 
 # File description page
 'file-anchor-link' => 'Papeles',
@@ -1726,10 +1748,11 @@ Baka kayatmo nga urnosen ti bukodna a deskripsion idiay [$2 deskripsion ti papel
 'sharedupload-desc-create' => 'Daytoy a papeles ket naggapu manipud idiay  $1  ken mabalin a mausar babaen dagiti sabali a gandat.
 Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti papeles a panid].',
 'filepage-nofile' => 'Awan ti agnagan ti kasta a papeles.',
-'filepage-nofile-link' => 'Awan ti agnagan ti kastoy a papeles, ngem mabalin mo ti [$1 mangipan].',
+'filepage-nofile-link' => 'Awan ti agnagan ti kastoy a papeles, ngem mabalinmo ti [$1 mangipan].',
 'uploadnewversion-linktext' => 'Mangipan ti kabarbaro a bersion iti daytoy a papeles',
 'shared-repo-from' => 'Naggapo iti $1',
 'shared-repo' => 'iti pagbingbingayan a nagikabilan',
+'upload-disallowed-here' => 'Daksanggasat a saanmo a mabalin a suratan manen daytoy nga imahen.',
 
 # File reversion
 'filerevert' => 'Isubli ti $1',
@@ -1739,32 +1762,32 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
 'filerevert-defaultcomment' => 'Naisubli ti bersion manipud idi $2, $1',
 'filerevert-submit' => 'Isubli',
 'filerevert-success' => "Ti '''[[Media:$1|$1]]''' ket naipasubli idiay [$4 bersion ti oras ken petsa $3, $2].",
-'filerevert-badversion' => 'Awan ti napalubos a lokal a bersion daytoy a papeles nga adda naikkan dayta nga oras ken petsa.',
+'filerevert-badversion' => 'Awan ti dati a lokal a bersion daytoy a papeles a naited ti dayta nga oras ken petsa.',
 
 # File deletion
 'filedelete' => 'Ikkaten ti $1',
-'filedelete-legend' => 'ikkaten ti papeles',
+'filedelete-legend' => 'Ikkaten ti papeles',
 'filedelete-intro' => "Mangrugrugika nga agikkat ti '''[[Media:$1|$1]]''' ken mairaman amin a pakasaritaanna.",
-'filedelete-intro-old' => "Ikikatem ti bersion iti '''[[Media:$1|$1]]''' manipud idi [$4 $3, $2].",
+'filedelete-intro-old' => "Ikikkatem ti bersion iti '''[[Media:$1|$1]]''' manipud idi [$4 $3, $2].",
 'filedelete-comment' => 'Rason:',
 'filedelete-submit' => 'Ikkaten',
 'filedelete-success' => "Naikkaten ti '''$1'''.",
 'filedelete-success-old' => "Ti bersion iti '''[[Media:$1|$1]]''' manipud idi $3, $2 ket naikkaten.",
 'filedelete-nofile' => "awan ti '''$1''' .",
 'filedelete-nofile-old' => "Awan ti nailebbeng a bersion ti '''$1''' nga addaan ti naited a kakitkita na.",
-'filedelete-otherreason' => 'Sabali/nayon a rason:',
+'filedelete-otherreason' => 'Sabali/maipatinayon a rason:',
 'filedelete-reason-otherlist' => 'Sabali a rason',
 'filedelete-reason-dropdown' => '*Kadawyan a rasrason ti pannakaikkat
 ** Panagsalungasing iti karbengan ti panagkopia
 ** Nadoble a papeles',
-'filedelete-edit-reasonlist' => 'Unosen ti rason ti panagikkat',
-'filedelete-maintenance' => 'Saan nga agnayon a naibaldado ti pinagikkat ken pinagisubli dagiti papeles iti dagdama a pinagsimpa.',
+'filedelete-edit-reasonlist' => 'Urnosen dagiti rason ti panagikkat',
+'filedelete-maintenance' => 'Ti panagikkat ken panagisubli kadagiti papaeles ket nabaldado iti las-ud ti panagtartaripatu.',
 'filedelete-maintenance-title' => 'Saan a maikkat daytoy a papeles',
 
 # MIME search
 'mimesearch' => 'Pagbiruk ti MIME',
-'mimesearch-summary' => 'Daytoy a panid ket pakabaelan na ti panagsagat ti papeles iti kita da a MIME.
-Ikabil: kita ti nagyan/apo a kita, e.g. <code>image/jpeg</code>.',
+'mimesearch-summary' => 'Daytoy a panid ket pakabaelanna ti panagsagat ti papeles iti MIME a kitada.
+Ikabil: kita ti nagyan/apo a kita, a kas ti <code>image/jpeg</code>.',
 'mimetype' => 'Kita ti MIME:',
 'download' => 'Ikarga nga agpababa',
 
@@ -1799,21 +1822,21 @@ Laglagipem ti agkita kadagiti sabsabali a panilpo ti plantilia sakbay nga ikkate
 'statistics-pages' => 'Pampanid',
 'statistics-pages-desc' => 'Dagiti amin a panid ti wiki, a mairaman dagiti tungtungan a panid, dagiti baw-ing, ken dadduma pay',
 'statistics-files' => 'Ti naipapan a papeles',
-'statistics-edits' => 'Dagit naurnos a panid manipud idi nairugi ti {{SITENAME}}',
-'statistics-edits-average' => 'Pagtengngaan nga urnos tungal maysa a panid',
+'statistics-edits' => 'Dagiti naurnos a panid manipud idi nairugi ti {{SITENAME}}',
+'statistics-edits-average' => 'Pagtengngaan nga urnos ti tunggal maysa a panid',
 'statistics-views-total' => 'Dagiti dagup ti panagkita',
 'statistics-views-total-desc' => 'Saan a naikabil ti panagkita dagiti awan a panid ken dagiti espesial a panid',
-'statistics-views-peredit' => 'Mano a panagkita tunggal maysa nga urnos',
+'statistics-views-peredit' => 'Mano a panagkita ti tunggal maysa nga urnos',
 'statistics-users' => 'Dagiti nakarehistro nga [[Special:ListUsers|agar-aramat]]',
 'statistics-users-active' => 'Dagiti nasiglat nga agar-aramat',
-'statistics-users-active-desc' => 'Dagiti agar-aramat a nagtungpal iti aramid idi napalubos nga {{PLURAL:$1|aldaw|$1 al-aldaw}}',
+'statistics-users-active-desc' => 'Dagiti agar-aramat a nagtungpal ti aramid ti napalabas nga {{PLURAL:$1|aldaw|$1 nga al-aldaw}}',
 'statistics-mostpopular' => 'Kaaduan a nabuya a pampanid',
 
 'disambiguations' => 'Dagiti panid a nakasilpo kadagiti panangilawlawag',
 'disambiguationspage' => 'Template:Panangilawlawag',
-'disambiguations-text' => "Dagiti sumaganad a panid ket nakasilpo iti '''panangilawlawag a panid'''.
-Ngem agpasilpo da kuma ti husto a topiko.<br />
-Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo idiay [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Dagiti sumaganad a panid ket aglaon ti saan a basbasit ngem maysa a panilpo iti '''panangilawlawag a panid'''.
+Dagitoy ket embes a nasken a maisilpoda kadagiti maitutop a panid.<br />
+Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo manipud idiay [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dagiti namindua a naibaw-ing',
 'doubleredirectstext' => 'Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.
@@ -1837,8 +1860,9 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'fewestrevisions' => 'Dagiti panid nga adda kadagiti kabassitan a panangbalbaliw',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|a byte|kadagiti byte}}',
+'nbytes' => '$1 {{PLURAL:$1| byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|a kategoria|kadagiti kategoria}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|dagiti interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|a panilpo|kadagiti panilpo}}',
 'nmembers' => '$1 {{PLURAL:$1|a kameng|kadagiti kameng}}',
 'nrevisions' => '$1 {{PLURAL:$1|a panagbalbaliw|kadagiti panagbalbaliw}}',
@@ -1860,13 +1884,14 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'wantedpages-badtitle' => 'Saan nga umisu a titulo idiay naikabil a pagbanagan: $1',
 'wantedfiles' => 'Dagiti makidkiddaw a papeles',
 'wantedfiletext-cat' => 'Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to. A maipanayon pay, dagiti pampanid nga agisengngat kadagiti papeles nga awan ket nailista idiay [[:$1]].',
-'wantedfiletext-nocat' => '    Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to.',
+'wantedfiletext-nocat' => 'Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to.',
 'wantedtemplates' => 'Dagiti makidkiddaw a plantilia',
 'mostlinked' => 'Dagiti panid a kaaduan iti nakasilpo',
 'mostlinkedcategories' => 'Dagiti kategoria a kaaduan iti nakasilpo',
 'mostlinkedtemplates' => 'Dagiti plantilia a kaaduan iti nakasilpo',
 'mostcategories' => 'Dagiti panid a kaaduan kadagiti kategoria',
 'mostimages' => 'Dagiti papeles a kaaduan iti nakasilpo',
+'mostinterwikis' => 'Dagiti panid a kaaduan kadagiti interwiki',
 'mostrevisions' => 'Dagiti artikulo a kaaduan ti pannakabalbaliwna',
 'prefixindex' => 'Dagiti amin a panid nga adda ti pasaruno na',
 'prefixindex-namespace' => 'Amin a panid nga addaan ti pasaruno ($1 nagan ti luglugar)',
@@ -1909,7 +1934,7 @@ Pangngaasi a laglagipen a dagiti sabali a sapot ti pagsaadan  ket makasilpoda ti
 'booksources-search-legend' => 'Agsapul kadagiti nagtaudan ti liblibro',
 'booksources-go' => 'Inkan',
 'booksources-text' => 'Dita baba ket listaan dagiti panilpo ti sabsali a lugar nga aglaklako ti liblibro, ken baka adda pay adu a pakaammo da kadagiti liblibro a kitkitaem:',
-'booksources-invalid-isbn' => 'Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti pinagtulad kadagiti naggappuanna a taudan.',
+'booksources-invalid-isbn' => 'Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad kadagiti naggappuanna a taudan.',
 
 # Special:Log
 'specialloguserlabel' => 'Ti nagtungpal:',
@@ -1929,7 +1954,7 @@ Mapabassit mo ti pinagpakita no piliam ti kita ti listaan, ti nagan ti gar-arama
 'prevpage' => 'Napalabas a panid ($1)',
 'allpagesfrom' => 'Ipakita dagiti panid a mangrugi iti:',
 'allpagesto' => 'Ipakita dagiti panid a nalpasan iti:',
-'allarticles' => 'Amin nga artikulo',
+'allarticles' => 'Amin a pampanid',
 'allinnamespace' => 'Amin a pampanid ($1 nagan ti lugar)',
 'allnotinnamespace' => 'Amin a pampanid (awan iti $1 nagan ti lugar)',
 'allpagesprev' => 'Napalabas',
@@ -1981,7 +2006,7 @@ Natapayaen a protokol: <code>$1</code> (saanmo nga inayon dagitoy iti panagbiruk
 'activeusers-intro' => 'Daytoy ti listaan dagiti agar-aramat nga adda inararamidda kadagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga alaldaw}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|nga inurnos|kadagiti inurnos}} idi kalpasan ti  {{PLURAL:$3|nga aldaw|$3 nga alaldaw}}',
 'activeusers-from' => 'Iparang dagiti agar-aramat a mangrugi iti:',
-'activeusers-hidebots' => 'Ilemmeng dagiti bots',
+'activeusers-hidebots' => 'Ilemmeng dagiti bot',
 'activeusers-hidesysops' => 'Ilemmeng dagiti administrador',
 'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 
@@ -2012,6 +2037,8 @@ Adda pay ngata [[{{MediaWiki:Listgrouprights-helppage}}|adu pay a pakaammo]] a m
 'mailnologin' => 'Awan ti pagipatulodan a pagtaengan',
 'mailnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga e-surat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti e-surat kadagiti sabsabali nga agar-aramat.',
 'emailuser' => 'E-suratan daytoy nga agar-aramat',
+'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.
 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.',
@@ -2087,7 +2114,7 @@ Mailistanto ditoy dagiti pinagsukat daytoy a panid iti masakbayan agraman ti kan
 'created' => 'naaramid',
 'enotif_subject' => 'Ti {{SITENAME}} a panid a $PAGETITLE ket $CHANGEDORCREATED ni $PAGEEDITOR',
 '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 pinagsukat.',
+'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,
 
@@ -2123,10 +2150,10 @@ Ti makunkunam ken no masapulmo pay ti tulong:
 # Delete
 'deletepage' => 'Ikkaten ti panid',
 'confirm' => 'Pasingkedan',
-'excontent' => "ti linaon ket: '$1'",
-'excontentauthor' => 'ti linaonna ket: "$1" (ken ti laeng nakaaramid ket ni "[[Special:Contributions/$2|$2]]")',
-'exbeforeblank' => 'ti linaon sakbay a nablanko ket: "$1"',
-'exblank' => 'blanko ti panid',
+'excontent' => "ti linaon idi ket: '$1'",
+'excontentauthor' => 'ti linaonna idi ket: "$1" (ken ti laeng nakaaramid idi ket ni "[[Special:Contributions/$2|$2]]")',
+'exbeforeblank' => 'ti linaon sakbay idi nablanko ket: "$1"',
+'exblank' => 'blanko idi ti panid',
 'delete-confirm' => 'Ikkaten ti "$1"',
 'delete-legend' => 'Ikkaten',
 'historywarning' => "'''Ballaag: ''' Ti panid a kayatmo nga ikkaten ket adda pakasaritaanna ti agarup a $1 {{PLURAL:$1|a binaliwan|kadagiti binaliwan}}:",
@@ -2141,9 +2168,9 @@ Kitaen ti $2 para iti panakrehistro dagiti naudi a naikkat.',
 'deletionlog' => 'listaan ti panagikkat',
 'reverted' => 'Naisubli iti immuna a panagbalbaliw',
 'deletecomment' => 'Rason:',
-'deleteotherreason' => 'Sabali/dadduma pay a rason:',
+'deleteotherreason' => 'Sabali/maipatinayon a rason:',
 'deletereasonotherlist' => 'Sabali a rason',
-'deletereason-dropdown' => '*Kadawyan a gapgapu dagiti pannakaikkat
+'deletereason-dropdown' => '*Kadawyan a rasrason ti panagikkat
 ** Kiddaw ti mannurat
 ** Panaglabsing iti karbengan ti panagipablaak
 ** Bandalismo',
@@ -2158,18 +2185,20 @@ agal-aluad ka a mangrugi.',
 'rollback' => 'Isubli dagiti panag-urnos',
 'rollback_short' => 'Isubli',
 'rollbacklink' => 'isubli',
+'rollbacklinkcount' => 'agisubli ti $1 {{PLURAL:$1|nga inurnos|nga inururnos}}',
+'rollbacklinkcount-morethan' => 'agisubli ti ad-adu ngem $1 {{PLURAL:$1|nga inurnos|nga inururnos}}',
 'rollbackfailed' => 'Napaay ti panangisubli',
 'cantrollback' => 'Saan a maisubli ti panagurnos;
 ti naudi a nakaaramid ket iti laeng nagsurat daytoy a panid..',
-'alreadyrolled' => 'Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] ni [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
+'alreadyrolled' => 'Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] babaen ni [[User:$2|$2]] ([[User talk:$2|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
 adda sabali a naurnos wenno nagipasubli ti panid.
 
-Ti kinaudi a panagurnos daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
-'editcomment' => "Ti panagurnos a pakabuklan ket: \"''\$1''\".",
-'revertpage' => 'Insubli ti panagurnos ni [[Special:Contributions/$2|$2]] ([[User talk:$2|pagtutungtongan]]), naisubli ti kinaudi a panagbaliw ni [[User:$1|$1]]',
-'revertpage-nouser' => 'Naisubli ti panagurnos ni (naikkat ti nagan ti agar-aramat) ti kinaudi a panagbaliw ni [[User:$1|$1]]',
-'rollback-success' => 'Naibabawi dagiti panag-urnos ni $1;
-naisubli manen ti naudi a panagbaliw ni $2.',
+Ti kinaudi a panagurnos ti daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+'editcomment' => "Ti panagurnos a pakabuklan idi ket: \"''\$1''\".",
+'revertpage' => 'Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
+'revertpage-nouser' => 'Naisubli ti panagurnos babaen ni (naikkat ti nagan ti agar-aramat) ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
+'rollback-success' => 'Naibabawi dagiti panag-urnos babaen ni $1;
+naisubli manen ti naudi a panagbaliw babaen ni $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Napaay ti gimong',
@@ -2182,11 +2211,11 @@ Agsubli ka ti naggapuam a panid, ikargam ti panid ken padasem manen.',
 'protectlogtext' => 'Dita baba ket adda listaan dagiti sinukatan a salaknib ti panid.
 Kitaen ti [[Special:ProtectedPages|listaan kadagiti nasalakniban a panid]] ti listaan kadagiti agdama a panagpataray a panagsalaknib ti panid.',
 'protectedarticle' => 'nasalakniban ti "[[$1]]"',
-'modifiedarticleprotection' => 'nasukatan ti lessaad ti salaknib para iti "[[$1]]"',
+'modifiedarticleprotection' => 'nasukatan ti agpang ti salaknib para iti "[[$1]]"',
 'unprotectedarticle' => 'naikkat ti salaknib ti "[[$1]]"',
 'movedarticleprotection' => 'iyalis ti kasasaad ti salaknib manipud iti "[[$2]]" idiay "[[$1]]"',
-'protect-title' => 'Sukatan ti lessaad ti salaknib para iti "$1"',
-'protect-title-notallowed' => 'Kitaen ti lessaad ti salaknib ti "$1"',
+'protect-title' => 'Sukatan ti agpang ti salaknib para iti "$1"',
+'protect-title-notallowed' => 'Kitaen ti agpang ti salaknib ti "$1"',
 'prot_1movedto2' => '[[$1]] naiyalis iti [[$2]]',
 'protect-badnamespace-title' => 'Saan a mabalin a salakniban a nagan ti lugar',
 'protect-badnamespace-text' => 'Dagiti panid ditoy  a nagan ti lugar ket saan a mabalin a masalakniban.',
@@ -2205,7 +2234,7 @@ Adda ditoy kadagiti agdama a kasasaad ti panid '''$1''':",
 Dagitoy dagiti agdama a kasasaad ti panid a '''$1''':",
 'protect-cascadeon' => 'Daytoy a panid ket agdama a  nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} ti sipapakat a salaknib ti amin-amin.
 Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignayen ti salaknib nga amin-amin.',
-'protect-default' => 'Mabalin amin nga agar-aramat',
+'protect-default' => 'Palubosan amin nga agar-aramat',
 'protect-fallback' => 'Masapul ti "$1" a pammalubos',
 'protect-level-autoconfirmed' => 'Serraan dagiti baro ken saan a nakarehistro nga agar-aramat',
 'protect-level-sysop' => 'Dagiti administrador laeng',
@@ -2214,13 +2243,13 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 'protect-expiring-local' => 'agpaso $1',
 'protect-expiry-indefinite' => "inggana't inggana",
 'protect-cascade' => 'Salakniban dagiti pampanid a nairaman iti daytoy a panid (babaen ti sariap a salaknib)',
-'protect-cantedit' => 'Saanmo a masuktan ti lessaad ti salaknib iti daytoy a panid, gapu ta awan ti pammalubosmo nga agurnos iti daytoy.',
+'protect-cantedit' => 'Saanmo a masuktan ti agpang ti salaknib iti daytoy a panid, gapu ta awan ti pammalubosmo nga agurnos iti daytoy.',
 'protect-othertime' => 'Sabali nga oras:',
 'protect-othertime-op' => 'sabali nga oras',
 'protect-existing-expiry' => 'Ti adda a panagpaso ti oras: $3, $2',
-'protect-otherreason' => 'Sabali/dadduma a rason:',
+'protect-otherreason' => 'Sabali/maipatinayon a rason:',
 'protect-otherreason-op' => 'Sabali a rason',
-'protect-dropdown' => '*Kadawyan a rason ti panagsalaknib
+'protect-dropdown' => '*Kadawyan a rasrason ti panagsalaknib
 ** Adu unay a bandalismo
 ** Adu unay a panagspam
 ** Saan a produktibo ti kasinnungat a panag-urnos
@@ -2228,7 +2257,7 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 'protect-edit-reasonlist' => 'Urnosen dagiti rason ti salaknib',
 'protect-expiry-options' => '1 nga oras:1 hour,1 nga aldaw:1 day,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite',
 'restriction-type' => 'Pammalubos:',
-'restriction-level' => 'Lessaad ti pannakaiparit:',
+'restriction-level' => 'Agpang ti pannakaiparit:',
 'minimum-size' => 'Kinababa a kadakkel:',
 'maximum-size' => 'Kinangato a kadakkel:',
 'pagesize' => '(bytes)',
@@ -2242,30 +2271,30 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 # Restriction levels
 'restriction-level-sysop' => 'napno a nasalakniban',
 'restriction-level-autoconfirmed' => 'nasalakniban bassit',
-'restriction-level-all' => 'ania man a lessaad',
+'restriction-level-all' => 'aniaman nga agpang',
 
 # Undelete
 'undelete' => 'Kitaen dagiti naikkat a pampanid',
 'undeletepage' => 'Kitaen ken isubli dagiti naikkat a panid',
-'undeletepagetitle' => "'''TI sumaganad ket buklen dagiti naikkat a panagbaliw ti [[:$1|$1]]'''.",
+'undeletepagetitle' => "'''TI sumaganad ket buklen dagiti naikkat a panagbaliw ni [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Kitaen dagiti naikkat a pampanid',
 'undeletepagetext' => 'Ti sumaganad a {{PLURAL:$1|panid ket naikkaten ngem|$1 pampanid ket naikkaten ngem}} adda pay naarkibo ken mabalin pay a maipasubli .
 Ti arkibo ket mabalin a sagpaminsan a madalusan.',
 'undelete-fieldset-title' => 'Ipasubli dagiti pinagbaliwan',
 'undeleteextrahelp' => "Ti panagisubli dagiti amin a pakasaritaan ti panid, ibatim a saan nga nakur-itan dagita kahon ken agtakla ti '''''{{int:undeletebtn}}'''''.
 Ti agaramid ti napilian a pagisubli, ikur-it dagita napilim kadagiti kahon ti kayatmo nga ipasubli, ken agtakla ti '''''{{int:undeletebtn}}'''''.",
-'undeleterevisions' => '$1 {{PLURAL:$1|a pinagbaliwan|kadagiti pinagbaliwan}} ti nailebben',
+'undeleterevisions' => '$1 {{PLURAL:$1|a binalbaliwan|kadagiti binalbaliwan}} ti nailebben',
 'undeletehistory' => 'No ipasublim daytoy a panid, amin dagiti pinagbaliwan ket maipasubli idiay pakasaritaan.
 Ket no adda baro a panid a kanagnagan na a naaramid ti napalabas a pinagikkat, dagiti naipasubli a pinagbaliwan ket agparang idiay napalabas a pakasaritaan.',
 'undeleterevdel' => 'Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti pinagbaliwan ti papeles ket maikkatan ti bassit.
-Iti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a pinagbaliwan.',
+Iti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a binalbaliwan.',
 'undeletehistorynoadmin' => 'Daytoy a panid ket naikkaten.
-Ti rason ti panagikkat ket naipakita ti pinakabuklan dita baba, ken dagita dsalaysay ti agar-aramat a nagpabaliw ditoy a panid sakbay a naikkat.
+Ti rason ti panagikkat ket naipakita ti pakabuklan dita baba, ken dagita dsalaysay ti agar-aramat a nagpabaliw ditoy a panid sakbay a naikkat.
 Ti husto a testo ti nabaliwan a panagbaliw ket adda kadagiti administrador laeng.',
 'undelete-revision' => 'Naikkat ti binaliwan a $1 (manipud idi $4, idi $5) babaen ni $3:',
 'undeleterevision-missing' => 'Imbalido wenno napukaw a panagbaliw.
 Addaan ka ngata ti madi a panilpo, wenno ti panagbaliw ket naipasubli wenno naikkat manipud idiay nailebbeng.',
-'undelete-nodiff' => 'Awan ti nasarakan a kallabes a binaliwan.',
+'undelete-nodiff' => 'Awan ti nasarakan kadagiti dati a nabalbaliwan.',
 'undeletebtn' => 'Isubli',
 'undeletelink' => 'kitaen/isubli',
 'undeleteviewlink' => 'kitaen',
@@ -2348,10 +2377,10 @@ Ti naudi a listaan ti panakaserra ket adda dita baba ta usaren a reperensia:',
 'whatlinkshere-prev' => '{{PLURAL:$1|kallabes|kallabes $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|sumaruno|sumaruno $1}}',
 'whatlinkshere-links' => '← silsilpo',
-'whatlinkshere-hideredirs' => '$1 a panangibaw-ing',
-'whatlinkshere-hidetrans' => '$1 a mairamraman',
-'whatlinkshere-hidelinks' => '$1 a pampanilpo',
-'whatlinkshere-hideimages' => '$1 a pampanilpo ti imahen',
+'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-filters' => 'Dagiti sagat',
 
 # Block/unblock
@@ -2374,7 +2403,7 @@ Ikkan ti nainaganan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid
 ** Agikabil ti spam a silpo iti ruar
 ** Agikabil ti minamaag/saan a maawatan a pampanid
 ** Nabutbuteng a panagkukua /agriribok
-** Ab-abuso kadagiti sabsabali a pakabilangan
+** Agab-abuso kadagiti sabsabali a pakabilangan
 ** Saan a maawat a nagan ti agar-aramat',
 'ipb-hardblock' => 'Iparit kadagiti nakastrek nga agar-aramat ti agpabaliw iti naggapo ditoy nga IP a pagtaengan',
 'ipbcreateaccount' => 'Pawilan ti panagpartuat iti pakabilangan',
@@ -2402,7 +2431,7 @@ Kitaen ti [[Special:BlockList|listaan ti lapden nga IP ]] tapno marepaso dagiti
 'ipb-blocklist' => 'Kitaen dagiti adda a serra',
 'ipb-blocklist-contribs' => 'Dagiti naaramidan ni $1',
 'unblockip' => 'Lukatan ti serra ti agar-aramat',
-'unblockiptext' => 'Usaren ti kinabuklan dita baba ti pinagisubli ti pinagserrek nga agsurat ti napalubos a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.',
+'unblockiptext' => 'Usaren ti kinabuklan dita baba ti pinagisubli ti pinagserrek nga agsurat ti napalabas a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.',
 'ipusubmit' => 'Ikkaten daytoy a serra',
 'unblocked' => 'Naikkat ti panakaserra ni [[User:$1|$1]]',
 'unblocked-range' => '$1 naikkaten ti serra na',
@@ -2559,7 +2588,7 @@ Pangngaasim a mangpilika iti sabali a nagan.',
 'talkexists' => "'''Sibaballigi a naiyalis ti panid, nupay kasta saan a maiyalis ti panid ti tungtongan gapu ta addan panid-tungtongan iti baro a titulo.
 Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
 'movedto' => 'naiyalis iti',
-'movetalk' => 'Iyalis ti mainaig a panid ti tungtongan',
+'movetalk' => 'Iyalis ti mainaig a panid ti tungtungan',
 'move-subpages' => 'Iyalis dagiti apo ti panid (aginggana ti $1)',
 'move-talk-subpages' => 'Iyalis dagiti apo ti panid iti tungtungan ti panid (aginggana ti $1)',
 'movepage-page-exists' => 'Ti panid ti $1 ket addan ken saan a mautomatiko a suratan manen.',
@@ -2569,7 +2598,7 @@ Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
 'movelogpage' => 'Listaan ti naiyalis',
 'movelogpagetext' => 'Adda dita baba ti listaan dagiti naiyalis a pampanid.',
 'movesubpage' => '{{PLURAL:$1|Apo ti panid|Dagiti apo ti panid}}',
-'movesubpagetext' => 'Daytoy a panid ket adda $1 {{PLURAL:$1|apo ti panid|dagiti apo ti panid}} a naipakita dita baba..',
+'movesubpagetext' => 'Daytoy a panid ket adda $1 {{PLURAL:$1|apo ti panid|dagiti apo ti panid}} a naipakita dita baba.',
 'movenosubpage' => 'Daytoy a panid ket awan ti apo na a panid.',
 'movereason' => 'Rason:',
 'revertmove' => 'isubli',
@@ -2577,7 +2606,7 @@ Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
 'delete_and_move_text' => '== Masapul nga ikkaten ==
 Ti pangipanan ti panid ket "[[:$1]]" addan.
 Kayatmo nga ikkaten  tapno makaiyalis ka?',
-'delete_and_move_confirm' => 'Wen, ikkatenen ti panid',
+'delete_and_move_confirm' => 'Wen, ikkaten ti panid',
 'delete_and_move_reason' => 'Naikkat tapno mawayaan ti panaka-iyalis idiay "[[$1]]"',
 'selfmove' => 'Ti titulo ti taudan ken ti pangipanan ket agpadpada;
 saanmo a maiyalis ti panid ti isu met laeng a panid.',
@@ -2597,22 +2626,22 @@ Ti kinaudi a naikabil ti listaan ket adda dita baba tapno mausar a reperensia:",
 'semiprotectedpagemovewarning' => "'''Pakaammo:''' Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaiyalis daytoy.
 Ti kinaudi a naikabil ti listaan ket adda iti baba tapno mausar a reperensia:",
 'move-over-sharedrepo' => '== Addaan ti papeles ==
-[[:$1]] addaan idiay pagbingayan a nagikabilan. Ti panagiyalis ti papeles iti titulo nga itoy ket paawanen na ti pagbingayan a papeles.',
+[[:$1]] addaan idiay pagbingayan a nagikabilan. Ti panagiyalis ti papeles iti titulo nga itoy ket paawanenna ti pagbingayan a papeles.',
 'file-exists-sharedrepo' => 'Ti napilim a nagan ti papeles ket naususaren idiay pagbingayan a pagikabilan.
 Pangngaasi nga agpilika ti sabali a nagan.',
 
 # Export
-'export' => 'Agipan dagiti panid',
+'export' => 'Agipan kadagiti panid',
 'exporttext' => 'Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.
 Daytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].
 
-Ti pinagipan ti panid, ikabil ti titulo dita kahon ti teksto dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a pinagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a pinagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a pinagurnos.
+Ti pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.
 
 No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid "[[{{MediaWiki:Mainpage}}]]".',
 'exportall' => 'Ipan amin a pampanid',
 'exportcuronly' => 'Iraman laeng ti kinaudi a panagbaliw, saan a ti napno a pakasaritaan',
 'exportnohistory' => "----
-'''Palagip:''' Ti pagipapan dagiti punno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti pinakalaing ti pinagandar a rason.",
+'''Palagip:''' Ti pagipapan dagiti punno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti panakalaing ti panagandar a rason.",
 'exportlistauthors' => 'Iraman ti amin a listaan kadagiti nagaramid iti tunggal a maysa a panid',
 'export-submit' => 'Agipan',
 'export-addcattext' => 'Agnayon kadagiti panid a naggapu idiay kategoria:',
@@ -2620,8 +2649,8 @@ No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Spec
 'export-addnstext' => 'Nayunan dagiti panid a naggapu idiay nagan ti lugar:',
 'export-addns' => 'Inayon',
 'export-download' => 'Idulin a kas papeles',
-'export-templates' => 'Ikabil dagiti plantilia',
-'export-pagelinks' => 'Ikkam dagiti nakasilpo a panid iti  kauneg a:',
+'export-templates' => 'Mangiraman kadagiti plantilia',
+'export-pagelinks' => 'Mangiraman kadagiti nakasilpo a panid iti  kauneg ti:',
 
 # Namespace 8 related
 'allmessages' => 'Dagiti mensahe ti sistema',
@@ -2629,10 +2658,10 @@ No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Spec
 'allmessagesdefault' => 'Kasisigud a testo ti mensahe',
 'allmessagescurrent' => 'Agdama a testo ti mensahe',
 'allmessagestext' => 'Daytoy ti listaan dagiti mensahe ti sistema a magun-od idiay MediaWiki a nagan ti lugar.
-Pangngaasi a bisitaeen ti [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
+Pangngaasi a bisitaen ti [//www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
 'allmessagesnotsupportedDB' => "Saan a mausar daytoy a panid ngamin ket ti '''\$wgUseDatabaseMessages''' ket nabaldado.",
 'allmessages-filter-legend' => 'Sagat',
-'allmessages-filter' => 'Sagaten ti naiduma a estado:',
+'allmessages-filter' => 'Sagaten babaen ti naipaduma nga estado:',
 'allmessages-filter-unmodified' => 'Saan a nabaliwan',
 'allmessages-filter-all' => 'Amin',
 'allmessages-filter-modified' => 'Napabaro',
@@ -2651,20 +2680,21 @@ Pangngaasi a bisitaeen ti [//www.mediawiki.org/wiki/Localisation MediaWiki Local
 'thumbnail_invalid_params' => 'Imbalido a parametro ti imahen',
 'thumbnail_dest_directory' => 'Saan a nakaaramid ti pangipanan a direktoria.',
 'thumbnail_image-type' => 'Daytoy a kita ti imahen ket saan a nasuportaran.',
-'thumbnail_gd-library' => 'Saan a kompleto a GD bibliotika a pinakaaramid: Awan ti opisio $1',
+'thumbnail_gd-library' => 'Saan a kompleto a GD biblioteka a panakaaramid: Awan ti opisio $1',
 'thumbnail_image-missing' => 'Daytoy a papeles ket  kasla napukaw: $1',
 
 # Special:Import
-'import' => 'Agala dagiti panid',
+'import' => 'Agala kadagiti panid',
 'importinterwiki' => 'Agala ti transwiki',
 'import-interwiki-text' => 'Agpili ka ti wiki ken titulo ti panid nga alaem.
 Dagit panagbaliw a petsa ken dagiti nagan ti mannurat ket maipreserba.
 Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pinagala]].',
 'import-interwiki-source' => 'Taudan ti wiki/panid:',
 'import-interwiki-history' => 'Kopiaen amin dagiti bersion ti pakasaritaan daytoy a panid',
-'import-interwiki-templates' => 'Ikabil amin dagiti plantilia',
+'import-interwiki-templates' => 'Iraman amin dagiti plantilia',
 'import-interwiki-submit' => 'Agala',
 'import-interwiki-namespace' => 'Pangipanan ti nagan ti lugar:',
+'import-interwiki-rootpage' => 'Papanan a ramut ti panid (mapili):',
 'import-upload-filename' => 'Nagan ti papeles:',
 'import-comment' => 'Komentario:',
 'importtext' => 'Pangngaasi nga ipanmo ti papeles a naggapu iti nagtaudan a wiki nga agusar ti [[Special:Export|agipan]].',
@@ -2676,7 +2706,7 @@ Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pi
 'importunknownsource' => 'Di amammo a kita ti taudan ti innala',
 'importcantopen' => 'Saan a maluktan ti innala a papeles',
 'importbadinterwiki' => 'Saan a nasayaat a panilpo nga interwiki',
-'importnotext' => 'Awanan linaon wenno awanan testo',
+'importnotext' => 'Awan linaon wenno awan ti testo',
 'importsuccess' => 'Nalpasen ti pinagala!',
 'importhistoryconflict' => 'Adda kasinnungat a pinagbaliw ti pakasaritaan (baka naala daytoy a panid idi)',
 'importnosources' => 'Awan ti innala a taudan ti transwiki ti naipalawag ken ti dagus a pakasaritaan ti pinag-ipan ket nabaldado.',
@@ -2692,14 +2722,17 @@ Awan ti saan nga agnayon a polder.',
 'import-nonewrevisions' => 'Amin a panagbalbaliw ket dati a naala.',
 'xml-error-string' => '$1 iti linia $2, tukol $3 (byte $4): $5',
 'import-upload' => 'Ipan ti XML data',
-'import-token-mismatch' => 'Napukaw ti gimong ti data.
-Pangngaasi ta padasem manen.',
+'import-token-mismatch' => 'Napukaw ti gimong ti datos.
+Pangngaasi a padasem manen.',
 'import-invalid-interwiki' => 'Saan a makaala dita naited a wiki.',
-'import-error-edit' => 'Ti panid ti "$1" ket saan a naala ngamin ket saan mo a mabalin nga urnosen.',
-'import-error-create' => 'Ti panid ti "$1" ket saan a naala ngamin ket saan mo a mabalin nga aramiden.',
+'import-error-edit' => 'Ti panid ti "$1" ket saan a naala ngamin ket saanmo a mabalin nga urnosen.',
+'import-error-create' => 'Ti panid ti "$1" ket saan a naala ngamin ket saanmo a mabalin nga aramiden.',
 'import-error-interwiki' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket nailasin para iti ruar a panagsilpo (interwiki).',
 'import-error-special' => 'Ti panid ti "$1" ket saan a naala ngamin ket bukod ti  espesial a nagan a lugar a saan nga agpalubos ti pampanid.',
 'import-error-invalid' => 'Ti panid ti "$1" ket saan a naala ngamin ket ti nagan ket imbalido.',
+'import-options-wrong' => 'Saan nga husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ti naited a ramut ti panid ket imbalido a titulo.',
+'import-rootpage-nosubpage' => 'Ti nagan ti lugar ti "$1" iti ramut ti panid ket saan amangpalubos kadagiti apo ti panid.',
 
 # Import log
 'importlogpage' => 'Alaen ti listaan',
@@ -2711,7 +2744,6 @@ Pangngaasi ta padasem manen.',
 
 # JavaScriptTest
 'javascripttest' => 'Subsubokan ti JavaScript',
-'javascripttest-disabled' => 'Daytoy a pamay-an ket saan pay a napakabaelan iti daytoy a wiki.',
 'javascripttest-title' => 'Agpatpataray ti $1 a subsubokan',
 'javascripttest-pagetext-noframework' => 'Daytoy a panid ket nailasin para iti panagpataray ti subsubokan a JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Di amamo a pagsubsubokan a tabas "$1".',
@@ -2723,15 +2755,15 @@ Pangngaasi ta padasem manen.',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Daytoy ti panid mo',
 'tooltip-pt-anonuserpage' => 'Ti panid ti agar-aramat daytoy nga IP a pagtaengan nga urnosem a  kasla',
-'tooltip-pt-mytalk' => 'Pakitungtongam a panid',
-'tooltip-pt-anontalk' => 'Pakitungtungan ti pinagurnos a naggapu ditoy nga IP a pagtaengan',
+'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-logout' => 'Rummuar',
-'tooltip-ca-talk' => 'Pagtutungtongan a maipapan ti linaon ti panid',
+'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',
 'tooltip-ca-addsection' => 'Mangirugi ti baro a paset',
 'tooltip-ca-viewsource' => 'Nasalakniban daytoy a panid.
@@ -2740,13 +2772,13 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-ca-protect' => 'Salakniban daytoy a panid',
 'tooltip-ca-unprotect' => 'Sukatan ti salaknib daytoy a panid',
 'tooltip-ca-delete' => 'Ikkaten daytoy a panid',
-'tooltip-ca-undelete' => 'Isubli dagiti inurnos a panid sakbay a naikkat.',
+'tooltip-ca-undelete' => 'Isubli dagiti inurnos ti daytoy a panid sakbay idi naikkat',
 'tooltip-ca-move' => 'Iyalis daytoy a panid',
 'tooltip-ca-watch' => 'Inayon daytoy a panid kadagiti bambantayam',
 'tooltip-ca-unwatch' => 'Ikkatem daytoy a panid kadagiti bambantayam',
 'tooltip-search' => 'Biruken idiay {{SITENAME}}',
 'tooltip-search-go' => 'Inka idiay panid nga adda kastoy a naganna no adda',
-'tooltip-search-fulltext' => 'Birukem dagiti panid daytoy a testo',
+'tooltip-search-fulltext' => 'Biruken dagiti panid para iti daytoy a testo',
 'tooltip-p-logo' => 'Sarungkaran ti umuna a panid',
 'tooltip-n-mainpage' => 'Sarungkaran ti umuna a panid',
 'tooltip-n-mainpage-description' => 'Sarungkaran ti umuna a panid',
@@ -2758,13 +2790,13 @@ Mabalinmo a kitaen ti taudanna.',
 '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',
-'tooltip-feed-atom' => 'Atom a pakan para itoy a panid',
+'tooltip-feed-atom' => 'Atom a pakan para iti daytoy a panid',
 'tooltip-t-contributions' => 'Kitaen ti listaan dagiti naaramidan daytoy nga agar-aramat',
 'tooltip-t-emailuser' => 'Patulodan ti e-surat daytoy nga agar-aramat',
 'tooltip-t-upload' => 'Agipan iti papeles',
 'tooltip-t-specialpages' => 'Listaan ti amin nga espesial a pampanid',
 'tooltip-t-print' => 'Maimaldit a bersion ti panid',
-'tooltip-t-permalink' => 'Permanente a silpo idiay binaliwan daytoy a panid',
+'tooltip-t-permalink' => 'Agnanayon a silpo ti daytoy a panagbaliw ti panid',
 'tooltip-ca-nstab-main' => 'Kitaen ti naglaon a panid',
 'tooltip-ca-nstab-user' => 'Kitaen ti panid ti agar-aramat',
 'tooltip-ca-nstab-media' => 'Kitaen ti panid ti midia',
@@ -2777,9 +2809,9 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-ca-nstab-category' => 'Kitaen ti panid ti kategoria',
 'tooltip-minoredit' => 'Markaan daytoy a kas bassit a panag-urnos',
 'tooltip-save' => 'Idulin dagiti sinukatam',
-'tooltip-preview' => 'Ipadas dagiti sinukatam, pangngaasimnga usarem daytoy sakbay nga idulinmo ti panid!',
+'tooltip-preview' => 'Ipadas dagiti sinukatam, pangngaasim nga usarem daytoy sakbay nga idulinmo ti panid!',
 'tooltip-diff' => 'Ipakita no ania dagiti sinukatan nga inaramidmo iti testo',
-'tooltip-compareselectedversions' => 'Kitaen ti naggidiatan dagiti dua a napili a bersion daytoy a panid.',
+'tooltip-compareselectedversions' => 'Kitaen ti naggidiatan dagiti dua a napili a bersion ti daytoy a panid.',
 'tooltip-watch' => 'Inayon daytoy a panid idiay listaan dagiti bambantayam',
 'tooltip-watchlistedit-normal-submit' => 'Ikkaten dagiti titulo',
 'tooltip-watchlistedit-raw-submit' => 'Pabaruen ti listaan ti bambantayan',
@@ -2817,11 +2849,34 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 
 # Info page
 'pageinfo-title' => 'Pakaammo para iti "$1"',
-'pageinfo-header-edits' => 'Dagiti inurnos',
+'pageinfo-header-basic' => 'Kangrunaan a pakaammuan',
+'pageinfo-header-edits' => 'Pakasaritaan ti inurnos',
+'pageinfo-header-restrictions' => 'Panagsalaknib ti panid',
+'pageinfo-header-properties' => 'Tagtagikua ti panid',
+'pageinfo-display-title' => 'Iparang ti titulo',
+'pageinfo-default-sort' => 'Kasisigud a kangrunaan a panagilasin',
+'pageinfo-length' => 'Kaatiddog ti panid (kadagiti byte)',
+'pageinfo-article-id' => 'ID ti panid',
+'pageinfo-robot-policy' => 'Kasasaad ti panagbiruk a makina',
+'pageinfo-robot-index' => 'Mabalin a maipasurotan',
+'pageinfo-robot-noindex' => 'Saan a mabalin a maipasurotan',
 'pageinfo-views' => 'Bilang dagiti panagkita',
-'pageinfo-watchers' => 'Bilang dagiti agbuybuya',
-'pageinfo-edits' => 'Bilang dagiti inurnos:',
-'pageinfo-authors' => 'Ti bilang dagiti sabsabali a mannurat',
+'pageinfo-watchers' => 'Bilang dagiti agbuybuya ti panid',
+'pageinfo-redirects-name' => 'Maibaw-ing ti daytoy a panid',
+'pageinfo-subpages-name' => 'Apo dagiti panid ti daytoy a panid',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|baw-ing|bawbaw-ing}}; $3 {{PLURAL:$3|saan a baw-ing|saan a bawbaw-ing}})',
+'pageinfo-firstuser' => 'Nagpartuat ti panid',
+'pageinfo-firsttime' => 'Petsa a panakapartuat ti panid',
+'pageinfo-lastuser' => 'Kinaudi a nagurnos',
+'pageinfo-lasttime' => 'Petsa ti kinaudi a panag-urnos',
+'pageinfo-edits' => 'Dagup a bilang dagiti inurnos',
+'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayn a mannurat',
+'pageinfo-recent-edits' => 'Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)',
+'pageinfo-recent-authors' => 'Itay nabiit a bilang dagiti naisangsangayan a mannurat',
+'pageinfo-magic-words' => 'Salamangka  {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
+'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
+'pageinfo-templates' => 'Nailak-am  {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
+'pageinfo-toolboxlink' => 'Pakaammo ti panid',
 
 # Patrolling
 'markaspatrolleddiff' => 'Markaan a kas napatruliaan',
@@ -2865,6 +2920,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-info-size-pages' => '$1 × $2 dagiti piksel, kadakkel ti papeles: $3, kita ti MIME: $4, $5 {{PLURAL:$5|panid|pampanid}}',
 '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',
 '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.',
@@ -2874,6 +2930,8 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'file-info-png-looped' => 'nasiluan',
 'file-info-png-repeat' => 'pinaayayam ti $1 {{PLURAL:$1|a beses|a beses}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|a kuadro| kadagiti kuadro}}',
+'file-no-thumb-animation' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti daytoy a papeles ket saanto a maanimado.'''",
+'file-no-thumb-animation-gif' => "'''Paammo: Gapu kadagiti teknikal a panakaipatingga, dagiti bassit a ladawan ti nangato a resolusion dagiti  GIF nga imahen a kas daytoy ket saanto a maanimado.'''",
 
 # Special:NewFiles
 'newimages' => 'Galeria dagiti kabarbaro a papeles',
@@ -2881,7 +2939,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'newimages-summary' => 'Daytoy nga espesial a panid ket ipakitana ti kinaudi a pinag-ipan kadagiti papeles.',
 'newimages-legend' => 'Sagat',
 'newimages-label' => 'Nagan ti papeles (wenno paset na) :',
-'showhidebots' => '($1 bots)',
+'showhidebots' => '($1 dagiti bot)',
 'noimages' => 'Awan ti makita.',
 'ilsubmit' => 'Biruken',
 'bydate' => 'babaen ti petsa',
@@ -3000,9 +3058,9 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-gaincontrol' => 'Scene control',
 'exif-contrast' => 'Contrast',
 'exif-saturation' => 'Saturation',
-'exif-sharpness' => 'Sharpness',
+'exif-sharpness' => 'Kalawag',
 'exif-subjectdistancerange' => 'Nasakup a kaadayo ti suheto',
-'exif-imageuniqueid' => 'Unique image ID',
+'exif-imageuniqueid' => 'Naisangsangayan nga ID ti imahen',
 'exif-gpsversionid' => 'Etiketa a bersion ti GPS',
 'exif-gpslatituderef' => 'Amianan wenno Abagatan a Latitude',
 'exif-gpslatitude' => 'Latitude',
@@ -3010,11 +3068,11 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-gpslongitude' => 'Longitude',
 'exif-gpsaltituderef' => 'Reperensia ti kangato',
 'exif-gpsaltitude' => 'Kangato',
-'exif-gpstimestamp' => 'GPS time (atomic clock)',
-'exif-gpssatellites' => 'Dagiti satellites a naaramat iti measurement',
+'exif-gpstimestamp' => 'GPS nga oras (atomiko a pagurasan)',
+'exif-gpssatellites' => 'Dagiti satelite a naaramat para iti panagrukod',
 'exif-gpsstatus' => 'Receiver status',
 'exif-gpsmeasuremode' => 'Panagrukod a moda',
-'exif-gpsdop' => 'Measurement precision',
+'exif-gpsdop' => 'Kasayaat ti panagrukod',
 'exif-gpsspeedref' => 'Speed unit',
 'exif-gpsspeed' => 'Kapaspas ti GPS receiver',
 'exif-gpstrackref' => 'Reperensia iti direksion ti panaggunay',
@@ -3049,7 +3107,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-citydest' => 'Naipakita a siudad',
 'exif-sublocationdest' => 'Sabali pay a lokasion ti siudad a naipakita',
 'exif-objectname' => 'Pandek a titulo',
-'exif-specialinstructions' => 'Kangrunaan a pinagipalpalawag',
+'exif-specialinstructions' => 'Kangrunaan a panagipalpalawag',
 'exif-headline' => 'Paulo',
 'exif-credit' => 'Pammadayaw/Nangted',
 'exif-source' => 'Taudan',
@@ -3068,7 +3126,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-datetimeexpires' => 'Saan nga usaren ti kallabes nga',
 'exif-datetimereleased' => 'Nakairuar idi',
 'exif-originaltransmissionref' => 'Kinasigud a pinagipatulod iti kodigo ti papanan',
-'exif-identifier' => 'Pinaglasin',
+'exif-identifier' => 'Panagilasin',
 'exif-lens' => 'Lente nga inusar',
 'exif-serialnumber' => 'Agsasaruno a numero ti kamera',
 'exif-cameraownername' => 'Akinkukua ti kamera',
@@ -3087,7 +3145,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-attributionurl' => 'No usaren manen daytoy nga obra, pangngaasi nga agisilpo idiay',
 'exif-preferredattributionname' => 'No usaren manen daytoy nga obra, pangngaasi a padayawen ni',
 'exif-pngfilecomment' => 'Komentario ti PNG a papeles',
-'exif-disclaimer' => 'Dagiti karbengan ken rebbeng',
+'exif-disclaimer' => 'Renunsia',
 'exif-contentwarning' => 'Ballaag ti nagyan',
 'exif-giffilecomment' => 'Komentario ti GIF a papeles',
 'exif-intellectualgenre' => 'Kita ti banag',
@@ -3273,7 +3331,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-dc-contributor' => 'Dagiti nakaaramid',
 'exif-dc-date' => 'Petsa (dagiti petsa)',
 'exif-dc-publisher' => 'Nangipablaak',
-'exif-dc-relation' => 'Minaig a midia',
+'exif-dc-relation' => 'Mainaig a midia',
 'exif-dc-rights' => 'Dagiti Kaberngan',
 'exif-dc-source' => 'Taudan ti midia',
 'exif-dc-type' => 'Kita ti midia',
@@ -3328,7 +3386,7 @@ no kadamdama ka a nangaramid ti pakabilangam, aguray ka pay ti mano a minutos a
 'confirmemail_sent' => 'Naipatuloden ti pammasingked nga e-surat.',
 'confirmemail_oncreate' => 'Ti pakasingkedan a kodigo ket naipatulod dita e-surat a pagtaengam.
 Daytoy a kodigo ket saan a masapul ti sumrek, ngem masapulmo nga ited sakbay ka nga agpabalin kadagiti e-surat a langa ti wiki.',
-'confirmemail_sendfailed' => 'Ti {{SITENAME}} ket saan a makaipatulod ti pammasingke a surat.
+'confirmemail_sendfailed' => 'Ti {{SITENAME}} ket saan a makaipatulod ti pammasingked a surat.
 Pangngaasi a kitaem ti e-surat a pagtaengam para kadagiti imbalido a karakter.
 
 Insubli ti nangisurat: $1',
@@ -3354,11 +3412,11 @@ ta pasardengem ti pinakasingkedan ti e-surat a  pagtaengam:
 $5
 
 Daytoy a pammasingked a kodigo ket agpaso iti $4.',
-'confirmemail_body_changed' => 'Addaan, baka sika, ti naggapu ti IP a apagtaengam $1,
+'confirmemail_body_changed' => 'Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,
 ket nangsukat ti e-surat a pagtaengan ti pakabilangan "$2" iti daytoy a pagtaengan idiay {{SITENAME}}
 
 Tapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti 
-pinagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
+panagpabalin ti e-surat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:
 
 $3
 
@@ -3498,9 +3556,9 @@ 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-license-info' => 'Ti MediaWiki ket nawaya a software; maiwaras mo 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.
+'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 addaan 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.
+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.
 
 Naka-awat ka kuman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a  Publiko a Lisensia] a nairaman iti daytoy a programa; no saan, agsurat ka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem idiay online].',
 'version-software' => 'Naikabil a software',
@@ -3515,7 +3573,7 @@ Naka-awat ka kuman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 'filepath-page' => 'Papeles:',
 'filepath-submit' => 'Inkan',
 'filepath-summary' => 'Daytoy nga espesial a panid ket agisubli ti kompleto a dalan ti papeles.
-Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti papeles ket mangrugi da a idiay nakairamanan da a programa.',
+Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti papeles ket dagus a mangrugida idiay nakairamananda a programa.',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Agbiruk kadagiti duplikado a papeles',
@@ -3536,7 +3594,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 * <span class="mw-specialpagecached">Cached nga espesial a pampanid (baka nagpaso).</span>',
 'specialpages-group-maintenance' => 'Dagiti pagsimpa a padamag',
 'specialpages-group-other' => 'Sabsabali pay nga espesial a pampanid',
-'specialpages-group-login' => 'Sumrek / agrehistro',
+'specialpages-group-login' => 'Sumrek / agaramid ti pakabilangan',
 'specialpages-group-changes' => 'Kaudian a sinukatan ken listaan',
 'specialpages-group-media' => 'Dagiti padamag ti media ken panag-ipan',
 'specialpages-group-users' => 'Dagiti agar-aramat ken karkarbengan',
@@ -3566,7 +3624,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'tag-filter' => '[[Special:Tags|Ti etiketa]] a sagat:',
 'tag-filter-submit' => 'Sagat',
 'tags-title' => 'Dagiti etiketa',
-'tags-intro' => 'Daytoy a panid ket ilista na dagiti etiketa nga usaren ti software nga agmarka ti panag-urnos, ken dagiti kayat da a saoen.',
+'tags-intro' => 'Daytoy a panid ket ilistana dagiti etiketa nga usaren ti software nga agmarka ti panag-urnos, ken dagiti kayatda a saoen.',
 'tags-tag' => 'Nagan ti etiketa',
 'tags-display-header' => 'Tabas dagiti listaan ti panagsukat',
 'tags-description-header' => 'Napno a panangipalpalawag iti kayatna a saoen.',
@@ -3660,6 +3718,10 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'feedback-bugcheck' => 'Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga amammo a kitkiteb].',
 'feedback-bugnew' => 'Kinitak. Ireporta ti baro a kiteb',
 
+# Search suggestions
+'searchsuggest-search' => 'Biruken',
+'searchsuggest-containing' => 'naglaon ti...',
+
 # API errors
 'api-error-badaccess-groups' => 'Saan mo a mabalin ti agipan kadagiti papeles iti daytoy a wiki.',
 'api-error-badtoken' => 'Kinauneg a biddut: Dakes a tandaan.',
@@ -3676,7 +3738,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
 'api-error-filename-tooshort' => 'Ti nagan daytoy a papeles ket bassit unay.',
 'api-error-filetype-banned' => 'Ti kita daytoy a papeles ket maiparit.',
-'api-error-filetype-banned-type' => 'Ti $1 {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}. Ti mapalubusan{{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
+'api-error-filetype-banned-type' => 'Ti $1 {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}. Ti mapalubusan {{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
 'api-error-filetype-missing' => 'Ti papeles ket agkurang ti pagpa-atiddog.',
 'api-error-hookaborted' => 'Ti panagbabaro a pinadasmo ket napasardeng iti pangpa-atiddog a kawit.',
 'api-error-http' => 'Kinauneg a biddut: Saan a makaikabit idiay server.',
@@ -3697,7 +3759,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-unknown-code' => 'Di amamo a biddut: "$1"',
 'api-error-unknown-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak idi inpadas mo ti agipan ti papeles mo.',
 'api-error-unknown-warning' => 'Di am-ammo a ballaag: $1',
-'api-error-unknownerror' => 'Di amamo a biddut: "$1".',
+'api-error-unknownerror' => 'Di am-ammo a biddut: "$1".',
 'api-error-uploaddisabled' => 'Nabaldado ti mangipapan iti daytoy a wiki.',
 'api-error-verification-error' => 'Dakes ngata daytoy a papeles, wenno addaan ti madi a pagpa-atiddog.',
 
index 9720672..395b33c 100644 (file)
@@ -18,51 +18,55 @@ $fallback = 'ru';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Ӏинкаш белгалде:',
-'tog-justify' => 'Яздам оагӀува шоралца хьанийсъе',
-'tog-hideminor' => 'ЗӀамига хувцамаш керда дӀахувцама дагаршкахь къайлаяккха',
-'tog-hidepatrolled' => 'Керда хувцама дагарчеча дӀанийсъя хувцамаш къайлаяккха',
-'tog-newpageshidepatrolled' => 'Ð\9aеÑ\80да Ð¾Ð°Ð³Ó\80Ñ\83вни Ð´Ð°Ð³Ð°Ñ\80Ñ\87еÑ\87а Ð´Ó\80анийÑ\81Ñ\8aÑ\8f Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÑ\8aайлаÑ\8fккха',
-'tog-extendwatchlist' => 'Шеръя теркама дагарче, массайола хувцамаш чулоацаш',
-'tog-usenewrc' => 'ТоаÑ\8f ÐºÐµÑ\80да Ñ\85Ñ\83вÑ\86ама Ð´Ð°Ð³Ð°Ñ\80Ñ\88каÑ\80а Ð¿Ð°Ð¹Ð´Ð° Ñ\8dÑ\86а (JavaScript Ñ\8dÑ\88а)',
-'tog-numberheadings' => 'Ð\9aеÑ\80Ñ\82еÑ\80а-деÑ\88а Ñ\82аÑ\8cÑ\80аÑ\85Ñ\8c Ñ\88ий Ð»Ð¾Ó\80амаÑ\86а Ð¾Ñ\82Ñ\82айе',
-'tog-showtoolbar' => 'Ð\93Ó\80алаÑ\82нийcдаÑ\80а Ñ\8eкÑ\8aе Ð»Ð°ÐºÑ\85еÑ\80а Ð³Ó\80иÑ\80Ñ\81ий Ð³Ð°Ñ\80Ñ\82акÑ\85 Ñ\85Ñ\8cаÑ\85окха (JavaScript)',
-'tog-editondblclick' => 'Шозза цлицкацa oагӀув хувца (JavaScript)',
-'tog-editsection' => 'ХӀара дакъа "хувца" яха Ӏинк хьахокха',
-'tog-editsectiononrightclick' => 'Декъам хувца кертмугӀа аьтта цлицка я (JavaScript)',
+'tog-justify' => 'Яздам оагӀува шоралца хьанийсде',
+'tog-hideminor' => 'ЗӀамига хувцамаш керда хувцаман дагарленашках къайлаяккха',
+'tog-hidepatrolled' => 'Керда хувцаман дагарленач дӀанийсаяь хувцамаш къайладаккха',
+'tog-newpageshidepatrolled' => 'Ð\9aеÑ\80да Ð¾Ð°Ð³Ó\80Ñ\83вна Ð´Ð°Ð³Ð°Ñ\80ленаÑ\87 Ð´Ó\80анийÑ\81аÑ\8fÑ\8c Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÑ\8aайладаккха',
+'tog-extendwatchlist' => 'Шераяь теркама дагарле, массадола хувцамаш чулоацаш',
+'tog-usenewrc' => 'Ð\9aеÑ\80да Ñ\85Ñ\83вÑ\86ами Ñ\82еÑ\80кама Ð´Ð°Ð³Ð°Ñ\80леи Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\82оабÑ\8aе (JavaScript)',
+'tog-numberheadings' => 'Ð\9aоÑ\80Ñ\82аленаÑ\88Ñ\82 Ð°Ð»Ð°Ð½Ð·Ð° Ñ\82аÑ\8cÑ\80аÑ\85Ñ\8cал Ð´е',
+'tog-showtoolbar' => 'Ð\93Ó\80алаÑ\82нийcдаÑ\80а Ñ\8eкÑ\8aе Ð»Ð°ÐºÑ\85еÑ\80а Ð³Ó\80оÑ\80Ñ\81ан Ð³Ð°Ñ\80Ñ\82акÑ\85 Ñ\85Ñ\8cаÑ\85Ñ\8cокха (JavaScript)',
+'tog-editondblclick' => 'Шозза Ñ\86лиÑ\86акаÑ\86a oагÓ\80Ñ\83в Ñ\85Ñ\83вÑ\86а (JavaScript)',
+'tog-editsection' => 'ХӀара дакъа "хувца" яха Ӏинк хьахьокха',
+'tog-editsectiononrightclick' => 'Ð\94екÑ\8aам Ñ\85Ñ\83вÑ\86а ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80а Ð°Ñ\8cÑ\82Ñ\82а Ñ\86лиÑ\86ака Ñ\8f (JavaScript)',
 'tog-showtoc' => 'Кортанче хьокха (кхьаннена дукхагӀа кертмугӀанаш йoлa оагӀувна)',
-'tog-rememberpassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац',
-'tog-watchcreations' => 'Аз яь йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchdefault' => 'Аз хийца йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchmoves' => 'Аз цӀи хийца йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchdeletion' => 'Аз дӀаяккха йола оагӀувнаш теркама дагарчеча чуяккха',
+'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-fancysig' => 'Ший кулга яздара вики-хоамбаккхам (ший лоӀаме Ӏинка йоацаш)',
-'tog-externaleditor' => 'Арена гӀалатнийсдарца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
-'tog-externaldiff' => 'Арена бӀасакхосса болхоагӀувца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
+'tog-enotifwatchlistpages' => 'ОагӀувний хувцамахи теркама дагарленахи лаьца, д-хоамнец хоам бе',
+'tog-enotifusertalkpages' => 'Са дувцама оагӀув тӀа хувцамаш хилача, д-хоамнец хоам бе',
+'tog-enotifminoredits' => 'Геттара зӀамига хувцамаш хилача, д-хоамнец хоам бе',
+'tog-enotifrevealaddr' => 'ЗӀы хоамаш тӀа са хоамни моттиг хьахьокха',
+'tog-shownumberswatching' => 'Ший теркама дагарленгах оагӀув чулаьца бола дакъалаьцархой таьрах хьахьокха',
+'tog-oldsig' => 'Дола кулгайоазув:',
+'tog-fancysig' => 'Ший кулга яздара массахоамбаккхам (ший лоӀаме Ӏинка йоацаш)',
+'tog-externaleditor' => 'Арена гӀалатнийсдарца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархIара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
+'tog-externaldiff' => 'Арена бӀасакхосса болхоагӀувца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархIара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
 'tog-showjumplinks' => '"Дехьадала" яха новкъостала Ӏинк хьахьокха',
 'tog-uselivepreview' => 'Сиха бӀарахьажар (JavaScript) (Экспериментально)',
-'tog-forceeditsummary' => 'Хоам Ð±Ðµ, Ñ\85Ñ\83вÑ\86амий Ð»Ð¾Ð°Ñ\86ам Ð±ÐµÐ»Ð³Ð°Ð» Ð´Ð°Ñ\8c Ð´ÐµÑ\86и',
+'tog-forceeditsummary' => 'Хоам Ð±Ðµ, Ñ\85Ñ\83вÑ\86амий Ð»Ð¾Ð°Ñ\86ам Ð±ÐµÐ»Ð³Ð°Ð» Ð´Ð°Ñ\8c Ð´ÐµÑ\86е',
 'tog-watchlisthideown' => 'Са хувцамаш теркама дагарчера къайладаккха',
 'tog-watchlisthidebots' => 'БӀатий хувцамаш теркама дагарчера къайладаккха',
 'tog-watchlisthideminor' => 'Са зӀамига хувцамаш теркама дагарчера къайладаккха',
-'tog-watchlisthideliu' => 'Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяккха',
-'tog-watchlisthideanons' => 'ЦӀи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяккха',
-'tog-watchlisthidepatrolled' => 'Теркама дагарчера дӀанийсъя хувцамаш къайлаяккха',
-'tog-ccmeonemails' => 'Ð\90з Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88оа Ð´Ð°Ñ\85Ñ\82а ÐºÐ°Ñ\8cÑ\85аÑ\82аÑ\88 Ñ\81а Ð´-Ñ\84оÑ\88Ñ\82а тӀа хьатӀадайта',
-'tog-diffonly' => 'Диста къал йоалаж йола оагӀувна дакъа ма хьокха',
-'tog-showhiddencats' => 'Къайла цатегаш хьахьокха',
+'tog-watchlisthideliu' => 'Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяьккха',
+'tog-watchlisthideanons' => 'ЦӀи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяьккха',
+'tog-watchlisthidepatrolled' => 'Теркама дагарчера дӀанийсъя хувцамаш къайлаяьккха',
+'tog-ccmeonemails' => 'Ð\90з Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88оа Ð´Ð°Ñ\85Ñ\82а ÐºÐ°Ñ\8cÑ\85аÑ\82аÑ\88 Ñ\81а Ð´-Ñ\85оамни тӀа хьатӀадайта',
+'tog-diffonly' => 'Диста кIал йоалаж йола оагӀувна дакъа ма хьокха',
+'tog-showhiddencats' => 'Къайла катагаш хьахьокха',
 
 'underline-always' => 'Массаза',
 'underline-never' => 'ЦӀаккха',
-'underline-default' => 'МазбӀарглокхарий оттамаш хайрамбе',
+'underline-default' => 'МазабӀарглокхарий оттамаш хайрамбе',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'ТIеракуц хувца',
 
 # Dates
 'sunday' => 'КӀиранди',
@@ -117,33 +121,34 @@ $messages = array(
 'dec' => 'Чант.',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|ЦаÑ\82ег|ЦаÑ\82егаш}}',
-'category_header' => '"$1" Ð¦Ð°Ñ\82егÑ\87Ñ\83 оагӀувнаш',
-'subcategories' => 'Чурацатегаш',
-'category-media-header' => '"$1" Ð¦Ð°Ñ\82егÑ\87Ñ\83 паьлаш',
-'category-empty' => "''Укх цатегчоа цхьаккха оагӀувнаш е паьлаш яц.''",
-'hidden-categories' => '{{PLURAL:$1|Къайла цатег|Къайла цатегаш}}',
-'hidden-category-category' => 'Къайла цатегаш',
-'category-subcat-count' => '{{PLURAL:$2|Йола цатег тӀехьара бухцатег чулоаца.|{{PLURAL:$1|$1 бухцатег хьахьекха я|$1 бухцатегаш хьахьекха я}} $2 йолачара.}}',
-'category-subcat-count-limited' => 'Укх цатегий {{PLURAL:$1|$1 кӀалцатег|$1 кӀалцатегаш}}.',
+'pagecategories' => '{{PLURAL:$1|Ð\9aаÑ\82аг|Ð\9aаÑ\82агаш}}',
+'category_header' => '"$1" Ð\9aаÑ\82агаÑ\87аÑ\80 оагӀувнаш',
+'subcategories' => 'Чуракатагаш',
+'category-media-header' => '"$1" Ð\9aаÑ\82агаÑ\87аÑ\80 паьлаш',
+'category-empty' => "''Укх катагчоа цхьаккха оагӀувнаш е паьлаш яц.''",
+'hidden-categories' => '{{PLURAL:$1|Къайла катаг|Къайла катагаш}}',
+'hidden-category-category' => 'Къайла катагаш',
+'category-subcat-count' => '{{PLURAL:$2|Йола катаг тӀехьара бухкатаг чулоаца.|{{PLURAL:$1|$1 бухкатаг хьахьекха я|$1 бухкатагаш хьахьекха я}} $2 йолачара.}}',
+'category-subcat-count-limited' => 'Укх катагий {{PLURAL:$1|$1 кӀалкатаг|$1 кӀалкатагаш}}.',
 'category-article-count' => '{{PLURAL:$2|Йола цатег цхьа оагӀув мара чулоацац.|{{PLURAL:$1|$1 оагӀув хьахекха я|$1 оагӀувнаш хьахекха я}} укх цатега $2 йолачарах.}}',
-'category-article-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 оагӀув|$1 оагӀувнаш|}}.',
+'category-article-count-limited' => 'Укх катагач {{PLURAL:$1|$1 оагӀув|$1 оагӀувнаш|}}.',
 'category-file-count' => '{{PLURAL:$2|Укх цатего ца паьла мара чулоацац.|{{PLURAL:$1|$1 паьла хьахьекха я|$1 паьлаш хьахьекха я}} укх цатегий $2 долачаьрахь.}}',
-'category-file-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 паьл|$1 паьлаш}}.',
-'listingcontinuesabbrev' => 'дӀахьо',
-'noindex-category' => 'Моттигза оагӀувнаш',
+'category-file-count-limited' => 'Укх катагач {{PLURAL:$1|$1 паьл|$1 паьлаш}}.',
+'listingcontinuesabbrev' => 'дӀахо',
+'index-category' => 'ДIахьожаман оагӀувнаш',
+'noindex-category' => 'ДIахьожаманза оагӀувнаш',
 'broken-file-category' => 'Болхбеш йоаца паьла Ӏинкашца оагӀувнаш',
 
 'about' => 'Лоацам',
 'article' => 'Йоазув',
 'newwindow' => '(керда кора)',
-'cancel' => 'Юхавал',
+'cancel' => 'Юхавалa/ялa',
 'moredotdotdot' => 'ДӀахо',
 'mypage' => 'Са оагӀув',
 'mytalk' => 'Са дувцама оагӀув',
 'anontalk' => 'Укх IP-моттига дувцам',
-'navigation' => 'Ð\9dикÑ\8aÑ\82аÑ\85каÑ\80',
-'and' => '&#32;кха',
+'navigation' => 'Ð\9dикÑ\8aÑ\82оÑ\85каÑ\80г',
+'and' => '&#32;кхы',
 
 # Cologne Blue skin
 'qbfind' => 'Лахар',
@@ -163,37 +168,37 @@ $messages = array(
 'vector-action-protect' => 'Лораде',
 'vector-action-undelete' => 'Юхаоттаде',
 'vector-action-unprotect' => 'Лорам хувца',
-'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяккха (Vector skin only)',
-'vector-view-create' => 'Кхоллам',
-'vector-view-edit' => 'Хувцар',
+'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяьккха (Vector skin only)',
+'vector-view-create' => 'Кхолларле',
+'vector-view-edit' => 'Хувцам',
 'vector-view-history' => 'Искар',
-'vector-view-view' => 'Дешам',
+'vector-view-view' => 'Дешар',
 'vector-view-viewsource' => 'Зембакхама бӀаргтассам',
-'actions' => 'Дулархам',
+'actions' => 'ДулархIамаш',
 'namespaces' => 'ЦӀерий аренаш',
-'variants' => 'Дошаламаш',
+'variants' => 'Доштайпарленаш',
 
 'errorpagetitle' => 'ГӀалат',
-'returnto' => '$1 оагӀув тӀа юхавалар',
+'returnto' => '$1 оагӀув тӀа юхавалар/ялар',
 'tagline' => 'Кечал укхазара я {{SITENAME}}',
-'help' => 'Ð\9dовкÑ\8a\81Ñ\82ал',
-'search' => 'ТоÑ\85кам',
+'help' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам',
+'search' => 'Ð\9bаÑ\85аp',
 'searchbutton' => 'Хьалаха',
 'go' => 'Дехьавала',
 'searcharticle' => 'Дехьавала',
 'history' => 'искар',
 'history_short' => 'Искар',
-'updatedmarker' => 'Со Ñ\85анаÑ\87а Ð´ÐµÐ½Ñ\86а Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\85иннaй',
-'printableversion' => 'Ð\9aаÑ\8cÑ\85аÑ\82и Ð·Ð°Ñ\80ба Ð±Ó\80аÑ\81а',
+'updatedmarker' => 'Со Ñ\85анаÑ\87а Ð´ÐµÐ½Ñ\86а Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\85иннaд',
+'printableversion' => 'Ð\9aаÑ\8cÑ\85аÑ\82заÑ\80бане Ð´Ð¾Ñ\80жам',
 'permalink' => 'Даим латта Ӏинк',
 'print' => 'Каьхат арадаккха',
-'view' => 'БӀаргтассар',
+'view' => 'БӀаргтассам',
 'edit' => 'Хувца',
 'create' => 'Хьаде',
 'editthispage' => 'Ер оагӀув хувца',
 'create-this-page' => 'Ep oагӀув хьае',
-'delete' => 'ДӀадакха',
-'deletethispage' => 'Ер оагӀув дӀаяккха',
+'delete' => 'ДӀадаккха',
+'deletethispage' => 'Ер оагӀув дӀаяьккха',
 'undelete_short' => 'Меттаоттае {{PLURAL:$1|хувцам|$1 хувцамаш}}',
 'viewdeleted_short' => 'БӀаргтасса {{PLURAL:$1|дӀадаьккха хувцам тӀа|$1 дӀадаьккха хувцамаш тӀа}}',
 'protect' => 'Лораде',
@@ -205,54 +210,55 @@ $messages = array(
 'talkpage' => 'Укх оагӀув тӀа дувцам бе',
 'talkpagelinktext' => 'дувцам',
 'specialpage' => 'ГӀулакха оагӀув',
-'personaltools' => 'Са Ð³Ó\80ирсаш',
+'personaltools' => 'Са Ð³Ó\80орсаш',
 'postcomment' => 'Керда декъам',
 'articlepage' => 'Йоазув тӀа бӀаргтасса',
 'talk' => 'Дувцам',
-'views' => 'БӀаргтассараш',
-'toolbox' => 'Ð\93Ó\80ирсаш',
+'views' => 'БӀаргтассамаш',
+'toolbox' => 'Ð\93Ó\80орсаш',
 'userpage' => 'Дакъалаьцачунна оагӀуве бӀаргтасса',
 'projectpage' => 'Хьахьоадайтама оагӀуве бӀаргтасса',
 'imagepage' => 'Паьла оагӀув тӀа бӀаргтасса',
-'mediawikipage' => 'Xоама оагӀув хьахокха',
-'templatepage' => 'ЧӀабла оагӀув тӀа бӀаргтасса',
-'viewhelppage' => 'Ð\93Ó\80о Ð´еха',
-'categorypage' => 'ЦаÑ\82ега оагӀув тӀа бӀаргтасса',
+'mediawikipage' => 'Xоаман оагӀув хьахьокха',
+'templatepage' => 'ЧÓ\80абала Ð¾Ð°Ð³Ó\80Ñ\83в Ñ\82Ó\80а Ð±Ó\80аÑ\80гÑ\82аÑ\81Ñ\81а',
+'viewhelppage' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам Ð±еха',
+'categorypage' => 'Ð\9aаÑ\82ага оагӀув тӀа бӀаргтасса',
 'viewtalkpage' => 'Дувцамага бӀаргтасса',
 'otherlanguages' => 'Кхыча меттал',
 'redirectedfrom' => '($1 тӀера хьадейта да)',
 'redirectpagesub' => 'ДӀа-хьа дайта оагӀув',
 'lastmodifiedat' => 'Укх оагӀув тӀехьара  хувцам: $2, $1.',
-'viewcount' => 'Укх оагӀув тӀа бӀаргтасса хиннад {{PLURAL:$1|цкъа|$1 шозза}}.',
+'viewcount' => 'Укх оагӀув тӀа бӀаргтасса хиннад {{PLURAL:$1|цхьазза|$1 шозза}}.',
 'protectedpage' => 'Лорама оагӀув',
-'jumpto' => 'Укхаза дехьавала:',
-'jumptonavigation' => 'никÑ\8aÑ\82аÑ\85каÑ\80',
+'jumpto' => 'Укхаза дехьавала/яла:',
+'jumptonavigation' => 'никÑ\8aÑ\82оÑ\85каÑ\80г',
 'jumptosearch' => 'леха',
+'pool-timeout' => 'ЧIегатохара сабаран ха чакхаяьннай',
 '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 чулоацамаца такхоачаш да.',
+'copyright' => '$1 чулоацамаца тIакхоачаш да.',
 'copyrightpage' => '{{ns:project}}:Яздаьчунна бокъо',
 'currentevents' => 'ХӀанзара хоамаш',
 'currentevents-url' => 'Project:ХӀанзара хоамаш',
 'disclaimers' => 'Бокъонах юхавалаp',
 'disclaimerpage' => 'Project:Бокъонах юхавалаp',
-'edithelp' => 'Ð¥Ñ\83вÑ\86ама Ð½Ð¾Ð²ÐºÑ\8aоÑ\81Ñ\82ал',
-'edithelppage' => 'Help:ГӀалатнийсдара новкъoстал',
+'edithelp' => 'Ð¥Ñ\83вÑ\86ама ÐºÑ\83Ñ\86Ñ\82оÑ\85кам',
+'edithelppage' => 'Help:ГӀалатнийсдар',
 'helppage' => 'Help:Чулоацам',
 'mainpage' => 'Кертера оагӀув',
 'mainpage-description' => 'Кертера оагӀув',
 'policy-url' => 'Project:Бокъонаш',
-'portal' => 'Гулламхой ков',
-'portal-url' => 'Project:Гулламхой ков',
+'portal' => 'Гулламков',
+'portal-url' => 'Project:Гулламков',
 'privacy' => 'Паьлбокъо',
 'privacypage' => 'Project:Паьлбокъо',
 
 'badaccess' => 'Чуваларa гӀалат',
-'badaccess-group0' => 'Оаш хьадийха дулархам шунна де йийшяц.',
+'badaccess-group0' => 'Оаш хьадийха дулархIам шун де йишяц.',
 'badaccess-groups' => 'Дахта кхоачашдар {{PLURAL:$2|тоабачара|тоабашкара}} $1 дакъалаьцархой мара де бокъо яц.',
 
 'versionrequired' => '$1 MediaWiki доржам эша',
@@ -266,18 +272,18 @@ $messages = array(
 'youhavenewmessagesmulti' => 'Оаш $1чу керда хоамаш дӀайийцад',
 'editsection' => 'хувца',
 'editold' => 'хувца',
-'viewsourceold' => 'xÑ\8cадоагÓ\80а ÐºÑ\8aайладоагÓ\80а тӀа бӀаргтасса',
+'viewsourceold' => 'xÑ\8cайоагÓ\80а ÐºÑ\8aайлоÑ\80г тӀа бӀаргтасса',
 'editlink' => 'хувца',
-'viewsourcelink' => 'xÑ\8cадоагÓ\80а ÐºÑ\8aайладоагÓ\80а тӀа бӀаргтасса',
+'viewsourcelink' => 'xÑ\8cайоагÓ\80а ÐºÑ\8aайлоÑ\80г тӀа бӀаргтасса',
 'editsectionhint' => 'Декъам хувца: $1',
 'toc' => 'Чулоацам',
-'showtoc' => 'хьахокха',
+'showtoc' => 'хьахьокха',
 'hidetoc' => 'къайладаккха',
 'collapsible-collapse' => 'чудерзаде',
 'collapsible-expand' => 'хьадоаржаде',
 'thisisdeleted' => '$1 бӀаргтасса е юхаметтаоттаде?',
 'viewdeleted' => '$1 бӀаргтасса?',
-'restorelink' => '{{PLURAL:$1|дӀаяккха хувцам|$1 дӀаяккха хувцамаш}}',
+'restorelink' => '{{PLURAL:$1|дӀаяьккха хувцам|$1 дӀаяьккха хувцамаш}}',
 'feedlinks' => 'Цу тайпара:',
 'site-rss-feed' => '$1 RSS мугӀ',
 'site-atom-feed' => '$1 Atom мугӀ',
@@ -290,121 +296,132 @@ $messages = array(
 'nstab-user' => 'Дакъалаьцархо',
 'nstab-media' => 'Медифаг',
 'nstab-special' => 'ГӀулакха оагӀув',
-'nstab-project' => 'Хьахьоадайтамахь лаьца',
+'nstab-project' => 'Хьахоадайтамах лаьца',
 'nstab-image' => 'Паьл',
 'nstab-mediawiki' => 'Хоам',
-'nstab-template' => 'Ð\9aÑ\83Ñ\86кеп',
-'nstab-help' => 'Ð\9dовкÑ\8a\81Ñ\82ал',
-'nstab-category' => 'ЦаÑ\82ег',
+'nstab-template' => 'ЧIабал',
+'nstab-help' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам',
+'nstab-category' => 'Ð\9aаÑ\82аг',
 
 # Main script and global functions
-'nosuchaction' => 'Цу тайпара дулархам бац',
-'nosuchspecialpage' => 'Изза мо гӀооагӀув яц',
+'nosuchaction' => 'Цу тайпара дулархIам бац',
+'nosuchspecialpage' => 'Ð\98зза Ð¼Ð¾ Ð³Ó\80он Ð¾Ð°Ð³Ó\80Ñ\83в Ñ\8fÑ\86',
 
 # General errors
 'error' => 'ГӀалат',
 'missing-article' => 'Кораде дезаш хинна оагӀувни яздам корадаьдац «$1» $2.
 
-Из мо гӀалат нийсалуш хула, саг тишъенна Ӏинкаца, д|адаькха дола оагӀувни хувца искара тӀа чувала гӀиртача.
+Из мо гӀалат нийсалуш хула, саг тишъенна Ӏинкаца, д|адаьккха дола оагӀувни хувца искара тӀа чувала гӀертача.
 
\9dаггаÑ\85Ñ\8c Ñ\81анна Ð¸Ð· Ð¸Ñ\88Ñ\82Ñ\82а Ð´ÐµÑ\86e, Ñ\88оана Ð³Ó\80ирса Ӏалаш деча гӀалат кораяь хила мега.
\9dаггаÑ\85Ñ\8c Ñ\81анна Ð¸Ð· Ð¸Ñ\88Ñ\82Ñ\82а Ð´ÐµÑ\86e, Ñ\88оана Ð³Ó\80орса Ӏалаш деча гӀалат кораяь хила мега.
 Дехар да, [[Special:ListUsers/sysop|мазакулгалхочоа]] хоам бе, URL хьахьокхаш.',
 'missingarticle-rev' => '(бӀаргоагӀув № $1)',
 'internalerror' => 'Чура гӀалат',
 'internalerror_info' => 'Чура гӀалат: $1',
+'cannotdelete-title' => 'ОагIув дIаяккха йиш яц "$1"',
 'badtitle' => 'Мегаш йоаца цӀи',
-'badtitletext' => 'Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е вIикъaюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.',
-'viewsource' => 'Тахкам',
+'badtitletext' => 'Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е массаюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.',
+'viewsource' => 'БIаргтассам',
+'actionthrottled' => 'Сихален овзамал',
+'protectedpagetext' => 'Хувцаман белхаш долаш ер оагIув къайла я.',
+
+# Virus scanner
+'virus-unknownscanner' => 'довзашдоаца мазаундохьалург:',
 
 # Login and logout pages
 'yourname' => 'Дакъалаьцархочунна цӀи:',
-'yourpassword' => 'КъайладоагӀа:',
-'yourpasswordagain' => 'КъайладоагӀа юха Ӏоязаде:',
+'yourpassword' => 'КъайладIоагӀа:',
+'yourpasswordagain' => 'КъайладIоагӀа юха Ӏоязаде:',
 'remembermypassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац',
 'yourdomainname' => 'Шун цӀеноагӀув:',
 'login' => 'Чувала/яла',
-'nav-login-createaccount' => 'ЦӀи яькха/Ший oагӀув ела',
-'loginprompt' => 'УкÑ\85 Ð±Ð¾Ð»Ñ\85aоагÓ\80Ñ\83ваца доттагӀал лаца, шун "cookies" йийла хьалдеза.',
-'userlogin' => 'ЦӀи яькха/ОагӀув ела',
+'nav-login-createaccount' => 'ЦӀи яьккха/Ший oагӀув ела',
+'loginprompt' => 'УкÑ\85 Ð±ÐµÐ»Ñ\85аÑ\86Ñ\85Ñ\8cоагIоца доттагӀал лаца, шун "cookies" йийла хьалдеза.',
+'userlogin' => 'ЦӀи яьккха/ОагӀув ела',
 'userloginnocreate' => 'Чувала/яла',
 'logout' => 'Аравала/яла',
 'userlogout' => 'Аравала/яла',
 'notloggedin' => 'Оаш шоай цӀи хьааьннадац',
-'nologin' => "ТеÑ\80кама Ð¹Ð¾Ð°Ð·Ñ\83в Ñ\8fц? '''$1'''.",
-'nologinlink' => 'Ð\9bаÑ\80Ñ\85ама Ð¹Ð¾Ð°Ð·Ñ\83в Ð´Ðµ',
+'nologin' => "Ð\9bеламе Ð´IаÑ\8fздаÑ\80 Ð´Ð°ц? '''$1'''.",
+'nologinlink' => 'Ð\9bеламе Ð´IаÑ\8fздаÑ\80 ÐºÑ\85олла',
 'createaccount' => 'Керда дакъалаьцархо кхолла',
 'gotaccount' => "Укхаза дӀаязабенна дий шо? '''$1'''.",
 'gotaccountlink' => 'Чувала/яла',
-'userlogin-resetlink' => 'ЧÑ\83вала/Ñ\8fла Ñ\86Ó\80еи Ð´Ð¾Ð°Ð³Ó\80еи дийцаденнадий?',
-'createaccountmail' => 'Ð\94\84оÑ\88Ñ\82аÑ\86а',
+'userlogin-resetlink' => 'ЧÑ\83вала/Ñ\8fла Ñ\86Ó\80ии Ð´IоагÓ\80аи дийцаденнадий?',
+'createaccountmail' => 'Ð\9aÑ\8aайладIоагIа Ð´-Ñ\85оамнеÑ\86 Ñ\85Ñ\8cадайÑ\82а',
 'createaccountreason' => 'Бахьан:',
-'mailmypassword' => 'Керда къайладоагӀа хьаэца',
+'badretype' => 'Оаша яьккха дIоагIий цIераш шоайл таралуш яц.',
+'loginerror' => 'Дакъалаьцархочун цIи нийса яц',
+'mailmypassword' => 'Керда къайладIоагӀа хьаэца',
+'mailerror' => 'Хоам дIабохьийташ гIалат даьннад: $1',
+'emailconfirmlink' => 'Доаржален хоамни хьожадорг дIачIоагIаде',
 'loginlanguagelabel' => 'Мотт: $1',
 
 # Change password dialog
-'oldpassword' => 'Къаьна къайладоагӀ:',
-'newpassword' => 'Керда къайладоагӀ:',
-'retypenew' => 'Керда къайладоагӀа юха Ӏоязаде:',
-'resetpass-submit-loggedin' => 'КъайладогӀа дӀахувца',
+'resetpass' => 'КъайладIоагIа дIахувцар',
+'oldpassword' => 'Къаьна къайладIоагӀа:',
+'newpassword' => 'Керда къайладIоагӀа:',
+'retypenew' => 'Керда къайладIоагӀа юха Ӏоязаде:',
+'resetpass-submit-loggedin' => 'КъайладIоагӀа дӀахувца',
 'resetpass-submit-cancel' => 'Юхавал/ялa',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Дакъалаьцархочунна цӀи:',
-'passwordreset-email' => 'Ð\94\84оÑ\88Ñ\82а моттиг:',
+'passwordreset-email' => 'Ð\94\85оамни моттиг:',
 
 # Edit page toolbar
 'bold_sample' => 'Сома яздам',
 'bold_tip' => 'Сома яздам',
 'italic_sample' => 'Кулга яздам',
 'italic_tip' => 'Кулга яздам',
-'link_sample' => 'Ó\80инка ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80',
+'link_sample' => 'Ó\80инка ÐºÐ¾Ñ\80Ñ\82але',
 'link_tip' => 'ЧураӀинк',
-'extlink_sample' => 'Ó\80инка ÐºÐµÑ\80Ñ\82доÑ\88 http://www.example.com',
-'extlink_tip' => 'Арена Ӏинка (http:// тамагӀахь дийца ма ле)',
-'headline_sample' => 'KертмугӀa яздама',
-'headline_tip' => '2-гÓ\80а ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80a Ð»Ð°Ð³Ó\80а',
+'extlink_sample' => 'Ó\80инка ÐºÐ¾Ñ\80Ñ\82але http://www.example.com',
+'extlink_tip' => 'Арен Ӏинка (http:// тамагӀах дийца ма ле)',
+'headline_sample' => 'Кортален яздам',
+'headline_tip' => '2-гÓ\80а Ð»Ð°Ð³Ó\80аÑ\80лен ÐºÐ¾Ñ\80Ñ\82але',
 'nowiki_sample' => 'Укхаза кийчаде дезаш доаца яздам оттаде',
-'nowiki_tip' => 'Ð\92|икÑ\8aa-бÓ\80аÑ\81оÑ\82Ñ\82амаÑ\85Ñ\8c Ñ\82еÑ\80кам Ð¼Ð° Ð±Ðµ',
-'image_tip' => 'Чуяькха паьла',
+'nowiki_tip' => 'Ð\9cаÑ\81Ñ\81а-бÑ\83Ñ\81Ñ\82амлоÑ\80г Ñ\82еÑ\80камза Ð´Ð¸Ñ\82а',
+'image_tip' => 'Чуяьккха паьла',
 'media_tip' => 'Паьла Ӏинк',
 'sig_tip' => 'Шун кулгаяздар а, хӀанзара ха а',
 'hr_tip' => 'Мухала мугӀ (могаш тайпара к|еззига хайраде)',
 
 # Edit pages
 'summary' => 'Хувцамий белгалдер',
-'subject' => 'Ð\91Ó\80агал/кеÑ\80Ñ\82мÑ\83гÓ\80:',
+'subject' => 'Ð\91Ó\80агал/коÑ\80Ñ\82але:',
 'minoredit' => 'ЗӀамига хувцам',
 'watchthis' => 'Укх оагӀува теркам бе',
-'savearticle' => 'ОагӀув хьаязде',
+'savearticle' => 'ОагӀув хьаязъе',
 'preview' => 'Хьалхе бӀаргтассар',
-'showpreview' => 'Хьалхе бӀаргтaссар',
+'showpreview' => 'Хьалхе бӀаргтaссам',
 'showlivepreview' => 'Сиха бӀаргтассар',
 'showdiff' => 'Даь хувцамаш',
-'anoneditwarning' => 'Ð\97ем Ñ\85ила! Ð¨Ð¾ ÐºÑ\85Ñ\8b Ñ\87Ñ\83даÑ\8cннадаÑ\86. Ð¨Ñ\83н IP-моÑ\82Ñ\82иг Ñ\83кÑ\85 Ñ\85ийÑ\86а Ð¾Ð°Ð³Ó\80Ñ\83в Ð¸Ñ\81каÑ\80еÑ\87Ñ\83 Ð´Ó\80аÑ\8fздаÑ\8c Ñ\85Ñ\83Ñ\80гÑ\8aе.',
+'anoneditwarning' => 'Ð\97ем Ñ\85ила! Ð¨Ð¾ ÐºÑ\85Ñ\8b Ñ\87Ñ\83даÑ\8cннадаÑ\86. Ð¨Ñ\83н IP-моÑ\82Ñ\82иг Ñ\83кÑ\85 Ñ\85ийÑ\86а Ð¾Ð°Ð³Ó\80Ñ\83в Ð¸Ñ\81каÑ\80еÑ\87Ñ\83 Ð´Ó\80аÑ\8fздаÑ\8c Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f.',
 'summary-preview' => 'Лоацам ба:',
-'subject-preview' => 'Кортяздам:',
+'subject-preview' => 'Кортале хургья:',
 'blockedtitle' => 'Дакъалаьцархо чӀега бела ва/я',
 'blockednoreason' => 'бахьан доацаш да',
 'loginreqlink' => 'чувала/яла',
 'loginreqpagetext' => 'Кхыйола оагӀувнашка хьожаргдолаш, оаш $1 де деза.',
-'accmailtitle' => 'КъайладоагӀ дӀадахатад',
+'accmailtitle' => 'КъайладIоагӀа дӀадахьийтад',
 'newarticle' => '(Kерда)',
 'newarticletext' => 'Шо йоаца оагӀув тӀа Ӏинкаца дехьадаьннад.
 Из хьае, кӀалхагӀа доала корачу яздам очуязаде (кхета хала дале [[{{MediaWiki:Helppage}}|новкъостала оагӀув тӀа]] бӀаргтасса).
 Цаховш укхаза нийсадена дале, юхавала/яла яха тоӀобама тӀа пӀелга тоӀобе.',
-'noarticletext' => "У Ñ\81аÑ\85Ñ\8cаÑ\82е укх оагӀув тӀа яздам доацаш да.
+'noarticletext' => "Ð¥Iанз укх оагӀув тӀа яздам доацаш да.
 [[Special:Search/{{PAGENAME}}|цу тайпара цӀи дувцам кораде]] кхыдола йоазувашках йийша я шун, вешта
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола таптарий йоазув карае], е
 '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув ела]'''</span>.",
-'noarticletext-nopermission' => 'УкÑ\85 Ñ\81аÑ\85Ñ\8cаÑ\82е укх оагӀув тӀа яздам дац.
-Шун йийшая, кхыдола йоазувнашкахь [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].</span>',
+'noarticletext-nopermission' => 'Ð¥Iанз укх оагӀув тӀа яздам дац.
+Шун йиш я, кхыдола йоазувнашках [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].</span>',
 'note' => "'''ХӀамоалар:'''",
 'previewnote' => "'''Хьалхе б|аргтассам мара бац.'''
-Яздам кха яздаь дац!",
+Яздам кхы яздаь дац!",
 'editing' => 'ГӀалатнийсдар: $1',
 'editingsection' => 'ГIалатнийсдар $1 (оагӀувдакъа)',
 'editingcomment' => 'ГӀалатнийсдар $1 (керда декъам)',
-'editconflict' => 'Ð\93Ó\80алаÑ\82нийÑ\81даÑ\80а ÐºÑ\85овсам: $1',
+'editconflict' => 'Ð\93Ó\80алаÑ\82нийÑ\81даÑ\80а ÐºÑ\8aовсам: $1',
 'yourtext' => 'Хьа яздам',
 'copyrightwarning' => "Теркам бе, $2 ($1 хьажа) бокъонаца лорадеш, тӀахьежама кӀала уллаш, оаш мел чуяккхаш дола хоамаш, яздамаш долга.
 Наггахь санна шоай яздамаш пурам доацаш мала волашву саго хувца е кхы дола моттиге яздердолаш, безам беци, укхаз Ӏочуцаяздеча, дикаьгӀа да.<br />
@@ -412,23 +429,23 @@ $messages = array(
 '''Яздархой бокъоца лорадеш дола хӀамаш, цара пурам доацаш, Ӏочумаязаде!'''",
 'templatesused' => 'Укх бӀаргоагӀувни оагӀув тӀа лелаяь {{PLURAL:$1|Куцкеп|Куцкепаш}}:',
 'templatesusedpreview' => 'Хьалхе бӀаргтассама оагӀув тӀа леладеш дола {{PLURAL:$1|Куцкеп|Куцкепаш}}:',
-'template-protected' => ' (лорам лаьца бa)',
+'template-protected' => '(лорам лаьца)',
 'template-semiprotected' => '(дакъа-лорам)',
 'hiddencategories' => 'Ер оагӀув укх {{PLURAL:$1|къайла цатегаца|къайла цатегашца}} дакъа лоаца:',
 'permissionserrorstext-withaction' => '$2 де бокъо яц {{PLURAL:$1|из бахьан долаш|из бахьанаш долаш}}:',
-'recreate-moveddeleted-warn' => "'''Зем бе! Шо хьалххе дайоаккхаш хина оагӀув хьае гӀарта.'''
+'recreate-moveddeleted-warn' => "'''Зем бе! Шо хьалххе дIайоаккхаш хинна оагӀув хьае гӀерта.'''
 
 Хьажа, бокъонцахь езаш йолга.
-КӀалхагIа укх оагӀуви дӀадаккхамeи цӀи хувцамeи тептараш хьекха да.",
-'moveddeleted-notice' => 'Ер оагӀув дӀаяккха хиннай.
+КӀалхагIа укх оагӀуви дӀадаккхами цӀи хувцами тептараш хьекха да.",
+'moveddeleted-notice' => 'Ер оагӀув дӀаяьккха хиннай.
 Новкъостала, кӀалха дӀадаккхама а хувцама а тептарашкера нийсама йоазувнаш хьахьекха я.',
 'log-fulllog' => 'Деррига таптара бӀаргтасса',
-'edit-conflict' => 'Ð¥Ñ\83вÑ\86амий ÐºÑ\85овсам.',
+'edit-conflict' => 'Ð¥Ñ\83вÑ\86амий ÐºÑ\8aовсам.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => 'Зембакхам: дагара куцкепаш чулоаца дустам геттара доккха да.
-Цхьадола куцкепаш чулоацалургдац.',
-'post-expand-template-inclusion-category' => 'Чулоаца куцкепий мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш',
+'post-expand-template-inclusion-warning' => 'Зембаккхам: жамIан чIабалаш чулоаца дустам геттара доккха да.
+Цхьадола чIабалаш чулоацалургдац.',
+'post-expand-template-inclusion-category' => 'Чулоаца чIабала мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш',
 'post-expand-template-argument-warning' => 'Зем бе! Ер оагӀув цаӀ куцкепа |аьлдош мара чулоацац, юхадастара сел доккха дустам йолаш.
 Цу тайпара |аьлдешаш ӀокӀаладаькха да.',
 'post-expand-template-argument-category' => 'Куцкепий теркамза |аьлдешаш чулоаца оагӀувнаш',
@@ -439,7 +456,7 @@ $messages = array(
 'revisionasof' => '$1 доржам',
 'revision-info' => '$1; $2 хувцам',
 'previousrevision' => '← Xьалхйоаг|араш',
-'nextrevision' => 'TӀадоагӀа →',
+'nextrevision' => 'ТIехьайоагIараш →',
 'currentrevisionlink' => 'Дола доржам',
 'cur' => 'хӀанз.',
 'next' => 'тӀехь.',
@@ -448,9 +465,10 @@ $messages = array(
 'page_last' => 'тӀехьара',
 'histlegend' => "Кхетам: (хӀанз.) = хӀанза йолачунна бӀаргоагӀувни хьакъоастам ба; (хьалх.) = хьалха хинначунна бӀаргоагӀувни хьакъоастам ба; '''зӀ''' = зӀамига хьахувцам ба.",
 'history-fieldset-title' => 'Искара бӀаргтасса',
-'history-show-deleted' => 'ДӀадаькхараш мара',
+'history-show-deleted' => 'ДӀадаьккхараш мара',
 'histfirst' => 'къаьнараш',
 'histlast' => 'ха яннараш',
+'historyempty' => '(даьсса)',
 
 # Revision feed
 'history-feed-title' => 'Хувцамий искар',
@@ -458,54 +476,55 @@ $messages = array(
 'history-feed-item-nocomment' => '$1гӀара $2гӀачу',
 
 # Revision deletion
-'rev-delundel' => 'хьахьокха/къайлаяькха',
-'rev-showdeleted' => 'хьахокха',
+'rev-delundel' => 'хьахьокха/къайлаяьккха',
+'rev-showdeleted' => 'хьахьокха',
 'revdelete-show-file-submit' => 'XӀаа',
 'revdelete-radio-set' => 'XӀаа',
 'revdelete-radio-unset' => 'A',
 'revdelete-log' => 'Бахьан',
-'revdel-restore' => 'Ð\91Ó\80аÑ\81анÑ\87е хувца',
-'revdel-restore-deleted' => 'дӀадаькха доржамаш',
+'revdel-restore' => 'Ð\9aÑ\83Ñ\81Ñ\82гойÑ\82ам хувца',
+'revdel-restore-deleted' => 'дӀадаьккха доржамаш',
 'revdel-restore-visible' => 'бӀаргагушдола доржамаш',
 'pagehist' => 'ОагӀува искар',
-'deletedhist' => 'ДӀадакхамий искар',
+'deletedhist' => 'ДӀадаккхамий искар',
+'revdelete-reasonotherlist' => 'Кхыдола бахьан',
 
 # History merging
 'mergehistory-list' => 'ВIашагIатоха хувцамий искар',
 'mergehistory-go' => 'ВIашагIатоха хувцамаш хьахьокха',
 'mergehistory-submit' => 'Хувцамаш вIашагIатоха',
-'mergehistory-empty' => 'Ð\92IаÑ\88агIаÑ\82оÑ\85аÑ\80а Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÐ¾Ñ\80аÑ\8fÑ\8fÑ\86',
+'mergehistory-empty' => 'Ð\92IаÑ\88агIаÑ\82оÑ\85аÑ\80а Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÐ¾Ñ\80аÑ\8fÑ\8c Ñ\8fÑ\86.',
 'mergehistory-reason' => 'Бахьан:',
 
 # Merge log
-'revertmerge' => ' Декъа',
+'revertmerge' => 'Декъа',
 
 # Diffs
-'history-title' => '"$1" хувцамий искар',
+'history-title' => '"$1" — хувцамий искар',
 'lineno' => 'МугI $1:',
 'compareselectedversions' => 'Хьаржа доржамаша тарона тIа хьажа',
 'editundo' => 'юхавала/яла',
 'diff-multi' => '({{PLURAL:$1|$1 юкъара доржам хьахьекха дац|$1 юкъара доржамаш хьахьекха дац}} {{PLURAL:$2|$2 дакъалаьцархочунна|$2 дакъалаьцархоший}})',
 
 # Search results
-'searchresults' => 'ТаÑ\85кама Ð³IÑ\83лакÑ\85хилар',
-'searchresults-title' => '"$1" Ñ\82ахка',
-'searchresulttext' => 'Ð¥Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ð¾Ð°Ð³IÑ\83внаÑ\88 Ñ\82Iа Ñ\82аÑ\85камаÑ\85Ñ\8c лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.',
-'searchsubtitle' => 'Хоаттамахь лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерахь ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерахь Iинкаш еж йола]])',
+'searchresults' => 'ТоÑ\85кама Ð³IÑ\83лакÑ\85ахилар',
+'searchresults-title' => '"$1" Ñ\82охка',
+'searchresulttext' => 'Ð¥Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ð¾Ð°Ð³IÑ\83внаÑ\88 Ñ\82Iа Ñ\82оÑ\85камаÑ\85 лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.',
+'searchsubtitle' => 'Хоаттамах лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерах ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерах Iинкаш еш йола]])',
 'searchsubtitleinvalid' => "'''$1''' хаттара",
 'notitlematches' => 'ОагIувни цIераш вIашагIа кхеташ яц',
-'notextmatches' => 'ОагIувнаша ядамий вIашагIакхетараш дац',
+'notextmatches' => 'Ð\9eагIÑ\83внаÑ\88а Ñ\8fздамий Ð²IаÑ\88агIакÑ\85еÑ\82аÑ\80аÑ\88 Ð´Ð°Ñ\86',
 'prevn' => '{{PLURAL:$1|хьалхйоаг|ар $1|хьалхйоаг|араш $1|хьалхйоаг|араш $1}}',
 'nextn' => '{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}',
 'prevn-title' => '{{PLURAL:$1|$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}',
 'nextn-title' => '{{PLURAL:$1|$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}',
 'shown-title' => 'Укх оагIувни $1 {{PLURAL:$1|йоазув|йоазувнаш}} хьахьокха',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) хьажа',
-'searchmenu-exists' => "'''УкÑ\85 Ð²IикÑ\8aa-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ñ\87Ñ\83 ер оаг|ув \"[[:\$1]]\" я'''",
-'searchmenu-new' => "'''УкÑ\85 \"[[:\$1]]\" Ð²|икÑ\8aa-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82амÑ\87оÑ\85 Ð¾Ð°Ð³IÑ\83в Ð´е!'''",
+'searchmenu-exists' => "'''УкÑ\85 Ð¼Ð°Ñ\81Ñ\81а-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82амаÑ\87 ер оаг|ув \"[[:\$1]]\" я'''",
+'searchmenu-new' => "'''УкÑ\85 \"[[:\$1]]\" Ð¼Ð°Ñ\81Ñ\81а-Ñ\85Ñ\8cаÑ\85оадайÑ\82амаÑ\87 Ð¾Ð°Ð³IÑ\83в Ñ\85Ñ\8cае!'''",
 'searchhelp-url' => 'Help:Чулоацам',
-'searchprofile-articles' => 'Ð\9bаÑ\80доагIувнаш',
-'searchprofile-project' => 'Дагарчеи хьахьоадайтамеи оагIувнаш',
+'searchprofile-articles' => 'Ð\93омлен оагIувнаш',
+'searchprofile-project' => 'Дагарлеи хьахоадайтами оагIувнаш',
 'searchprofile-images' => 'Медифаг',
 'searchprofile-everything' => 'Массана',
 'searchprofile-advanced' => 'Шера я',
@@ -513,17 +532,16 @@ $messages = array(
 'searchprofile-project-tooltip' => '$1чу лахар',
 'searchprofile-images-tooltip' => 'Паьлий лахар',
 'searchprofile-everything-tooltip' => 'Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)',
-'searchprofile-advanced-tooltip' => 'Iочуязьяь цIераренашках лаха',
+'searchprofile-advanced-tooltip' => 'Iочуязаяь цIераренашках лаха',
 'search-result-size' => ' $1 ({{PLURAL:$2|1 дош|$2 дешаш}})',
 'search-result-category-size' => '{{PLURAL:$1|$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|$3 паьла|$3 паьлий|$3 паьлий}})',
-'search-redirect' => '($1 дехьачуяькхар)',
+'search-redirect' => '($1 дехьачуяьккхар)',
 'search-section' => ' (дакъа $1)',
 'search-suggest' => 'Iа лохар из хила мега: $1',
-'search-interwiki-caption' => 'Гаргалона хьахьоадайтамаш',
+'search-interwiki-caption' => 'Гаргалон хьахьоадайтамаш',
 'search-interwiki-default' => '$1 толамчаш:',
 'search-interwiki-more' => '(кха)',
-'search-mwsuggest-enabled' => ' Хьехамашца',
-'search-mwsuggest-disabled' => ' Хьехамаш боацаш',
+'search-relatedarticle' => 'шоайл дола',
 'searchrelated' => 'гаргара',
 'searchall' => 'деррига',
 'showingresultsheader' => "{{PLURAL:$5|'''$1''' толамче укх '''$3''' долачарах|'''$1 — $2''' толамчаш укх '''$3''' долачарах}} '''$4'''а",
@@ -545,42 +563,42 @@ $messages = array(
 'preferences' => 'Оттамаш',
 'mypreferences' => 'Оттамаш',
 'prefsnologin' => 'Шо чудаьнна дац',
-'changepassword' => 'КъайладоaгIа дIахувцар',
+'changepassword' => 'КъайладIоaгIа дIахувцар',
 'prefs-skin' => 'БIагала куц',
 'skin-preview' => 'Хьажа',
-'prefs-datetime' => 'ТаÑ\8cÑ\80аÑ\85Ñ\8cеи Ñ\81аÑ\85Ñ\8cаÑ\82еи',
+'prefs-datetime' => 'ТаÑ\8cÑ\80аÑ\85Ñ\8cи Ñ\81аÑ\85Ñ\8cаÑ\82и',
 'prefs-personal' => 'Хьа хьай далам',
 'prefs-rc' => 'Керда хувцамаш',
 'prefs-watchlist' => 'Теркама дагарче',
 'prefs-watchlist-days' => 'Ден дукхал',
-'prefs-resetpass' => 'КъайладогIа хувца',
+'prefs-resetpass' => 'КъайладIоагIа хувца',
 'prefs-rendering' => 'ТIера бIаса',
 'saveprefs' => 'Дита',
 'prefs-editing' => 'ГIалатнийсдар',
 'searchresultshead' => 'Лахаp',
 'timezonelegend' => 'Сахьати юкъ:',
 'localtime' => 'Вола/Йола моттиги ха:',
-'timezoneregion-africa' => 'Эприк',
+'timezoneregion-africa' => 'Ð\90Ñ\8cприк',
 'timezoneregion-america' => 'Iаьмрик',
 'timezoneregion-antarctica' => 'Энтарцит',
 'timezoneregion-arctic' => 'Эрцит',
 'timezoneregion-asia' => 'Iаьзик',
-'timezoneregion-atlantic' => 'IаÑ\82ланÑ\82иÑ\86форд',
+'timezoneregion-atlantic' => 'IаÑ\8cÑ\82ланÑ\82а форд',
 'timezoneregion-australia' => 'Устралик',
 'timezoneregion-europe' => 'Аьроп',
 'timezoneregion-indian' => 'ХIинда форд',
 'timezoneregion-pacific' => 'Тийна форд',
-'prefs-searchoptions' => 'Тахкама оттамаш',
+'prefs-searchoptions' => 'Тохкама оттамаш',
 'prefs-files' => 'Паьлаш',
-'youremail' => 'Ð\94\84оÑ\88Ñ\82:',
+'youremail' => 'Ð\94\85оамни:',
 'username' => 'Дакъалаьцархочунна цIи:',
 'yourrealname' => 'Шун цIи:',
 'yourlanguage' => 'Мотт:',
 'gender-male' => 'МаIа',
 'gender-female' => 'Кхал',
-'email' => 'Ð\94\84оÑ\88Ñ\82',
-'prefs-help-email' => 'Ð\94\84оÑ\88Ñ\82ий Ð¼Ð¾Ñ\82Ñ\82иг Ð°Ð»Ð° Ñ\8dÑ\88аÑ\88 Ð´Ð°Ñ\86, Ð°Ð¼Ð¼Ð° Ð½Ð¾Ð²ÐºÐ° Ð´Ð°Ñ\86а, Ð½Ð°Ð³Ð³Ð°Ñ\85 Ñ\81анна ÐºÑ\8aайладоагIа Ñ\88оан дийцалой, цу тIа хьатIадайтаргда.',
-'prefs-help-email-others' => 'Ð\9aÑ\85Ñ\8bбола Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88а Ñ\88оаÑ\86а Ð±Ñ\83взам Ñ\8f Ð¹Ð¸Ð¹Ñ\88Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f Ñ\88Ñ\83н Ð¾Ð°Ð³IÑ\83ва Ñ\82Iа Ð³Iолла, Ð´-Ñ\84оÑ\88Ñ\82 хьаела ца езаш.',
+'email' => 'Ð\94\85оамни',
+'prefs-help-email' => 'Ð\94\85оамни Ð¼Ð¾Ñ\82Ñ\82иг Ð°Ð»Ð° Ñ\8dÑ\88аÑ\88 Ð´Ð°Ñ\86, Ð°Ð¼Ð¼Ð° Ð½Ð¾Ð²ÐºÑ\8aа Ð´Ð°Ñ\86а, Ð½Ð°Ð³Ð³Ð°Ñ\85Ñ\8c Ñ\81анна ÐºÑ\8aайладIоагIа Ñ\88оана дийцалой, цу тIа хьатIадайтаргда.',
+'prefs-help-email-others' => 'Ð\9aÑ\85Ñ\8bбола Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88а Ñ\88оаÑ\86а Ð±Ñ\83взам Ñ\8f Ð¹Ð¸Ð¹Ñ\88Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f Ñ\88Ñ\83н Ð¾Ð°Ð³IÑ\83ва Ñ\82Iа Ð³Iолла, Ð´-Ñ\85оамни хьаела ца езаш.',
 'prefs-signature' => 'Кулгяздар',
 
 # User rights
@@ -627,47 +645,50 @@ $messages = array(
 'recentchanges' => 'Керда хувцамаш',
 'recentchanges-legend' => 'Керда хувцамий оттамаш',
 'recentchanges-summary' => 'КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.',
-'recentchanges-feed-description' => 'УкÑ\85 Ð»Ð°Ñ\80амÑ\86а Ñ\82IеÑ\85Ñ\8cаÑ\80а Ð²Ð¸ÐºÐ¸хувцамашт теркам бе.',
+'recentchanges-feed-description' => 'УкÑ\85 Ð»Ð°Ñ\80амÑ\86а Ñ\82IеÑ\85Ñ\8cаÑ\80а Ð¼Ð°Ñ\81Ñ\81ахувцамашт теркам бе.',
 'recentchanges-label-newpage' => 'Укх хувцамаца керда оагIув даь хиннад',
 'recentchanges-label-minor' => 'ЗIамига хувцам я',
 'recentchanges-label-bot' => 'Ер хувцам бIатаца яь е',
-'recentchanges-label-unpatrolled' => 'Ер хувцам ший моттиге кхы дIадехьаяькхаяц.',
+'recentchanges-label-unpatrolled' => 'Ер хувцам ший моттиге кхы дIадехьаяьккхаяц.',
 'rcnote' => "{{PLURAL:$1|Тlехьара '''$1''' хувцам|Тlехьара '''$1''' хувцамаш}} дола '''$2''' {{PLURAL:$2|ден|деношкахь}}, укх сахьате $5 $4.",
 'rcnotefrom' => 'КIалхагIа хувцамаш хьахьекха я <strong>$2</strong> денза (<strong>$1</strong> кхачалца).',
 'rclistfrom' => '$1 тIара хувцамаш хьахьокха',
 'rcshowhideminor' => 'зIамига хувцамаш $1',
 'rcshowhidebots' => '$1 шабелхалой',
 'rcshowhideliu' => 'Чубаьнначара дакъалаьцархочий $1',
-'rcshowhideanons' => 'цIияькханза дакъалаьцархой $1',
+'rcshowhideanons' => 'цIияьккханза дакъалаьцархой $1',
 'rcshowhidepatr' => '$1 теркам даь хувцамаш',
 'rcshowhidemine' => '$1 сай хувцамаш',
 'rclinks' => '$2 динах<br />$3 $1 хинна тIехьара хувцамаш хьахьокха',
 'diff' => 'кхы.',
 'hist' => 'искар',
-'hide' => 'Къайлдакха',
+'hide' => 'Къайлдаккха',
 'show' => 'Хьахьокха',
 'minoreditletter' => 'м',
 'newpageletter' => 'Н',
 'boteditletter' => 'б',
+'rc_categories_any' => 'МоллагIа а',
 'rc-enhanced-expand' => 'Ма дарра чулоацамаш хьахьокха (JavaScriptаца)',
-'rc-enhanced-hide' => 'Ма дарра чулоацамаш къайладакха',
+'rc-enhanced-hide' => 'Ма дарра чулоацамаш къайладаккха',
 
 # Recent changes linked
-'recentchangeslinked' => 'Гаргалона хувцамаш',
-'recentchangeslinked-toolbox' => 'Гаргалона хувцамаш',
+'recentchangeslinked' => 'Гаргалон хувцамаш',
+'recentchangeslinked-feed' => 'Гаргалон хувцамаш',
+'recentchangeslinked-toolbox' => 'Гаргалон хувцамаш',
 'recentchangeslinked-title' => '$1ца хьалаьца хувцамаш',
 'recentchangeslinked-noresult' => 'Укх заманашка гаргарон оагIувнаш тIа хувцамаш хиннаяц.',
-'recentchangeslinked-summary' => "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарче я.
-[[Special:Watchlist|Шун теркама дагаршках]] чуйоагIа оагIувнаш '''белгалъяь я'''.",
+'recentchangeslinked-summary' => "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарле я.
+[[Special:Watchlist|Шун теркама дагарленашках]] чуйоагIа оагIувнаш '''белгалаяь я'''.",
 'recentchangeslinked-page' => 'ОагIува цIи',
 'recentchangeslinked-to' => 'ОагIувнаш тIа хувцамаш хьахьокха, хьахьекха йола оагIув тIа Iинкаш еш йола.',
 
 # Upload
-'upload' => 'Паьл чуяькха',
-'uploadlogpage' => 'Чуяккхамий тептар',
+'upload' => 'Паьл чуяьккха',
+'uploadbtn' => 'Паьл чуяьккха',
+'uploadlogpage' => 'Чуяьккхамий тептар',
 'filedesc' => 'Лоаца лоацам',
 'fileuploadsummary' => 'Лоаца лоацам:',
-'uploadedimage' => '"[[$1]]" чуяккхай',
+'uploadedimage' => '"[[$1]]" чуяьккхай',
 
 'license' => 'ЦIийяздар',
 'license-header' => 'ЦIийяздар',
@@ -685,8 +706,8 @@ $messages = array(
 # File description page
 'file-anchor-link' => 'Паьл',
 'filehist' => 'Паьла искар',
-'filehist-help' => 'Хьалхе паьла мишта хиннай хьожаpгволаш/хьожаpгйолаш, дентаьрах/сахьата тIа пIелга тIообе.',
-'filehist-revert' => 'юхаяккха',
+'filehist-help' => 'Хьалхе паьла мишта хиннай хьожаpгволаш/йолаш, дентаьрах/сахьата тIа пIелга тIообе.',
+'filehist-revert' => 'юхаяьккха',
 'filehist-current' => 'xIанзара',
 'filehist-datetime' => 'Дентаьрах/Ха',
 'filehist-thumb' => 'ЗIамигасуртанче',
@@ -698,11 +719,11 @@ $messages = array(
 'filehist-missing' => 'Паьла йоацаш я',
 'imagelinks' => 'Паьлий пайда эца',
 'linkstoimage' => '{{PLURAL:$1|ТIехьайоагIа $1 оагIув Iинк ду|ТIехьайоагIа $1 оагIувнаш Iинкаш ду}} укх паьла тIа:',
-'nolinkstoimage' => 'Йола паьлат  Iинк ю оагIувнаш дац',
+'nolinkstoimage' => 'Йола паьла тIа  Iинк ю оагIувнаш дац',
 'sharedupload' => 'Ер паьла $1чера я, кхыча хьахьоадайтамча хьахайраде йийшайолаш я.',
 'sharedupload-desc-here' => 'Ер паьл $1чара я, кхыдола хьахьоадайтамача хайрамбе йийш йолаш да.
 Цун [$2 лоацама оагIувца] лоаца маIандар кIалхагIа латта.',
-'uploadnewversion-linktext' => 'Укх паьлий керда бIаса чуяккха',
+'uploadnewversion-linktext' => 'Укх паьлий керда бIаса чуяьккха',
 
 # File reversion
 'filerevert-comment' => 'Бахьан:',
@@ -713,7 +734,7 @@ $messages = array(
 'filedelete-reason-otherlist' => 'Кхыдола бахьан',
 
 # MIME search
-'download' => 'хьачуяккха',
+'download' => 'хьачуяьккха',
 
 # Unwatched pages
 'unwatchedpages' => 'Теркамза оагIувнаш',
@@ -730,7 +751,7 @@ $messages = array(
 'brokenredirects-edit' => 'хувца',
 'brokenredirects-delete' => 'дIадаккха',
 
-'withoutinterwiki-submit' => 'Хьахокха',
+'withoutinterwiki-submit' => 'Хьахьокха',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|бIат|бIаташ}}',
@@ -747,7 +768,7 @@ $messages = array(
 
 # Book sources
 'booksources' => 'Китабий гIувам',
-'booksources-search-legend' => 'Ð\9aиÑ\82аба Ð»Ð¾Ð°Ñ\86а Ð¼Ð°IандаÑ\80а Ñ\82ахкам',
+'booksources-search-legend' => 'Ð\9aиÑ\82аба Ð»Ð¾Ð°Ñ\86а Ð¼Ð°IандаÑ\80а Ñ\82охкам',
 'booksources-go' => 'Лаха',
 
 # Special:Log
@@ -777,20 +798,20 @@ $messages = array(
 'listgrouprights-members' => '(тоабий дагарче)',
 
 # E-mail user
-'emailuser' => 'Ð\94акÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\87оа Ð´-Ñ\84оÑ\88Ñ\82:',
+'emailuser' => 'Ð\94акÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\87оа Ð´-Ñ\85оамни:',
 
 # Watchlist
 'watchlist' => 'Теркама дагарче',
-'mywatchlist' => 'Теркама дагарче',
+'mywatchlist' => 'Теркама дагарле',
 'watchlistfor2' => '$1 $2 царна',
 'addedwatchtext' => '"[[:$1]]" оагIув, шун [[Special:Watchlist|теркама дагаршкахь]] чуяккха я. 
 Техьара мел йола укх оагIувни хувцамаш цу дагаршкахь хоам беш хургья. Вешта [[Special:RecentChanges|керда хувцама дагаршкаехь]] сома къоалмаца хьакъоастлуш хургья.',
 'removedwatchtext' => '"[[:$1]]" оагIув, шун [[Special:Watchlist|теркама дарагчера]] дIаяккха хиннай.',
-'watch' => 'Тaхкам бе',
+'watch' => 'Тохкам бе',
 'watchthispage' => 'Укх оагIува теркам бе',
 'unwatch' => 'Лора ма де',
-'watchlist-details' => 'Шун теркама дагарченгахь йола  $1 {{PLURAL:$1|оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархаш.',
-'wlshowlast' => 'Тlехьара $1 сахьаташ $2 денош $3 хьахокха',
+'watchlist-details' => 'Шун теркама дагарченгахь йола  $1 {{PLURAL:$1|оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.',
+'wlshowlast' => 'Тlехьара $1 сахьаташ $2 денош $3 хьахьокха',
 'watchlist-options' => 'Зем баккха дагарена хувцамаш',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -798,39 +819,39 @@ $messages = array(
 'unwatching' => 'Тохкам беча оагIув тIера дIадаккха',
 
 # Delete
-'deletepage' => 'ОагIув дIаяккха',
+'deletepage' => 'ОагIув дIаяьккха',
 'confirmdeletetext' => 'Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий искар долама ковчера. 
 Дехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.',
-'actioncomplete' => 'Дулархам баьб',
+'actioncomplete' => 'ДулархIам баьб',
 'actionfailed' => 'Оттам даьдац',
-'deletedtext' => '"$1" дIаяккха хиннай.
+'deletedtext' => '"$1" дIаяьккха хиннай.
 ТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.',
-'dellogpage' => 'ДIадакхара тептар',
+'dellogpage' => 'ДIадаккхара тептар',
 'deletecomment' => 'Бахьан:',
 'deleteotherreason' => 'Кхыдола бахьан/тIатохар:',
 'deletereasonotherlist' => 'Кхыдола бахьан',
 
 # Rollback
-'rollbacklink' => 'юхаяькха',
+'rollbacklink' => 'юхаяьккха',
 
 # Protect
 'protectlogpage' => 'Лорама тептар',
 'protectedarticle' => '"[[$1]]" оагIув лорам деж я',
-'modifiedarticleprotection' => '"[[$1]]" оагIувни лорама лагIа хувцаеннай',
+'modifiedarticleprotection' => '"[[$1]]" оагIувни лорама лагIа хувцаяьннай',
 'protectcomment' => 'Бахьан:',
 'protectexpiry' => 'Кхоачалуш латта:',
-'protect_expiry_invalid' => 'Чаккхабоала лорама харца ха',
-'protect_expiry_old' => 'Чаккхайоала ха - яха зама я.',
+'protect_expiry_invalid' => 'Чакхабоала лорама харца ха',
+'protect_expiry_old' => 'Чакхайоала ха - яха зама я.',
 'protect-text' => "'''$1''' укхаз шоана шоай оагIув лорамлагIа хувца a бIаргтасса a йийш хургья.",
-'protect-locked-access' => "Шун лархама йоазуви нидза кхоачаш бац оагIувни лорама лагIа хувца. '''$1''' оагIувни дIаоттамаш:",
+'protect-locked-access' => "Шун лархIама йоазуви нидза кхоачаш бац оагIувни лорама лагIа хувца. '''$1''' оагIувни дIаоттамаш:",
 'protect-cascadeon' => '{{PLURAL:$1|КIалхахь хьагойташ йола оагIувчу|КIалхахь хьагойташ йола оагIувнашчу}} ер оагIув чуяккха халарахь, лорам Iоттая я, хурхала лорам Iоттая я. Укх оагIувни лорама лагIа хувца йийш йолаш я, амма хурхала лорам хувцлургдац.',
 'protect-default' => 'Лорамза',
 'protect-fallback' => '"$1" пурам эша',
 'protect-level-autoconfirmed' => 'Керда а, дакъалаьцабоацачаьрахь а лораде',
 'protect-level-sysop' => 'Мазакулгалхо мара чувала бокъо яц',
 'protect-summary-cascade' => 'хурхала',
-'protect-expiring' => 'чаккхайоала',
-'protect-cascade' => 'Укх оагIувче чуяккха оагIуваш лорае (хурхала лорам)',
+'protect-expiring' => 'чакхайоала $1 (UTC)',
+'protect-cascade' => 'Укх оагIувач чуяьккха оагIуваш лорае (хурхала лорам)',
 'protect-cantedit' => 'Шун укх оагIувни лорама лагIа хувца мегаш дац, гIалатнийсдара шун бокъо йоацандаь.',
 'restriction-type' => 'Бокъонаш:',
 'restriction-level' => 'Чувоала лагIа:',
@@ -847,7 +868,7 @@ $messages = array(
 
 # Namespace form on various pages
 'namespace' => 'ЦIерий аренаш',
-'invert' => 'Харжар юхадакха',
+'invert' => 'Хьаржар юхадаккха',
 'blanknamespace' => '(Корта)',
 
 # Contributions
@@ -856,12 +877,12 @@ $messages = array(
 'mycontris' => 'Са къахьегам',
 'contribsub2' => '$1 ($2) баь болх',
 'uctop' => '(тIехьара)',
-'month' => 'Цхьа бутт хьалхагIа (кха хьалхагIа)',
-'year' => 'Цхьа шу хьалхагIа (кха хьалхагIа):',
+'month' => 'Цхьа бутт хьалхагIа (кхы хьалхагIа)',
+'year' => 'Цхьа шу хьалхагIа (кхы хьалхагIа):',
 
-'sp-contributions-newbies' => 'Керда даязья йоазоначера мара баь бола къахьегам ма хокха',
+'sp-contributions-newbies' => 'Керда даязья йоазоначера мара баь бола къахьегам ма хьокха',
 'sp-contributions-blocklog' => 'чIегаш',
-'sp-contributions-uploads' => 'чуяккхамаш',
+'sp-contributions-uploads' => 'чуяьккхамаш',
 'sp-contributions-logs' => 'тептараш',
 'sp-contributions-talk' => 'дувцам',
 'sp-contributions-search' => 'Къахьегама лахар',
@@ -876,13 +897,13 @@ $messages = array(
 'linkshere' => "ТIехьара оагIувнаш '''[[:$1]]''' тIа Iинкаш ю:",
 'nolinkshere' => "'''[[:$1]]''' оагIув тIа, кхыдола оагIувашкара Iинкаш йоацаш я",
 'isredirect' => 'дIа-хьа оагIув',
-'istemplate' => 'чудакхар',
+'istemplate' => 'чудаккхар',
 'isimage' => 'паьла Iинк',
 'whatlinkshere-prev' => '{{PLURAL:$1|хьалхайоагIа|хьалхайоагIараш}} $1',
 'whatlinkshere-next' => '{{PLURAL:$1|тIехьайоагIа|тIехьайоагIараш}} $1',
 'whatlinkshere-links' => '← Iинкаш',
-'whatlinkshere-hideredirs' => '$1 дIа-хьа чуяькхамаш',
-'whatlinkshere-hidetrans' => '$1 чуяькхамаш',
+'whatlinkshere-hideredirs' => '$1 дIа-хьа чуяьккхамаш',
+'whatlinkshere-hidetrans' => '$1 чуяьккхамаш',
 'whatlinkshere-hidelinks' => '$1 Iинкаш',
 'whatlinkshere-hideimages' => '$1 суртIинкаш',
 'whatlinkshere-filters' => 'ЦIенъераш',
@@ -898,7 +919,7 @@ $messages = array(
 'blocklogpage' => 'ЧIегаш тoха таптар',
 'blocklogentry' => '[[$1]] чIега белаб,  $2 $3 ха ялалца',
 'unblocklogentry' => '$1 юха яста я',
-'block-log-flags-nocreate' => 'Лархамий дагарчена цIи яккхар пурам янза я.',
+'block-log-flags-nocreate' => 'ЛархIамий дагарчена цIи яьккхар пурам янза я.',
 'blockme' => 'ЧIега бола сона',
 'proxyblocksuccess' => 'Хьадаьд.',
 
@@ -936,7 +957,7 @@ $messages = array(
 'movetalk' => 'МаIан чулоаца дувцама оагIувни цIи хувца',
 'movelogpage' => 'Хувцама тептар',
 'movereason' => 'Бахьан',
-'revertmove' => 'юхаяькха',
+'revertmove' => 'юхаяьккха',
 
 # Export
 'export' => 'ОагIувий эхфортам',
@@ -946,7 +967,7 @@ $messages = array(
 'allmessagesdefault' => 'Сатийна улла яздам',
 'allmessages-filter-all' => 'Дерригаш',
 'allmessages-language' => 'Мотт:',
-'allmessages-filter-submit' => 'Дехьавала',
+'allmessages-filter-submit' => 'Дехьавала/яла',
 
 # Thumbnails
 'thumbnail-more' => 'Хьадоккхаде',
@@ -958,20 +979,20 @@ $messages = array(
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Дакъалаьцархочунна оагIув',
 'tooltip-pt-mytalk' => 'Шун дувцамий оагIув',
-'tooltip-pt-preferences' => ' Шун оттамаш',
-'tooltip-pt-watchlist' => 'Ð\9eаÑ\88 Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\82Iа Ð±IаÑ\80глакÑ\85а Ð¾Ð°Ð³IÑ\83внаÑ\88а Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-pt-preferences' => 'Шун оттамаш',
+'tooltip-pt-watchlist' => 'Ð\9eоагIÑ\83вна Ð´Ð°Ð³Ð°Ñ\80ле, Ñ\88о Ð±IаÑ\80галокÑ\85аÑ\88 Ð¹Ð¾Ð»Ð°',
 'tooltip-pt-mycontris' => 'Шун хувцамаш',
-'tooltip-pt-login' => 'УкÑ\85аза Ñ\85Ñ\8cай Ñ\86Iи Ð°Ñ\8cле Ñ\87Ñ\83вала/Ñ\87Ñ\83Ñ\8fла Ð¹Ð¸Ð¹Ñ\88а Ñ\8f, Ð°Ð¼Ð¼Ð° Ñ\87Ñ\83Ñ\86аваÑ\8cлаÑ\87а/Ñ\87Ñ\83Ñ\86аÑ\8fлаÑ\87а Ñ\85Iамма а дац',
+'tooltip-pt-login' => 'УкÑ\85аза Ñ\85Ñ\8cай Ñ\86Iи Ð°Ñ\8cле Ñ\87Ñ\83вала/Ñ\8fла Ð¹Ð¸Ñ\88а Ñ\8f, Ð°Ð¼Ð¼Ð° Ñ\87Ñ\83Ñ\86аваÑ\8cлаÑ\87а/Ñ\8fлаÑ\87а Ñ\85Iама а дац',
 'tooltip-pt-logout' => 'Аравала/яла',
-'tooltip-ca-talk' => 'Ð\9eагIÑ\83ва Ñ\87Ñ\83лоаÑ\86амий дувцам',
-'tooltip-ca-edit' => 'Ер оагIув хувца йийшйолаш я. Дехар да, Iалаш елаьх, хьалхе бIаргтассама оагIув тIа бIаргтасса.',
+'tooltip-ca-talk' => 'Ð\9eагIÑ\83вна Ñ\87Ñ\83лоаÑ\86аме дувцам',
+'tooltip-ca-edit' => 'Ер оагIув хувца йишйолаш я. Дехар да, Iалаш елаьх, хьалхе бIаргтассама оагIув тIа бIаргтасса.',
 'tooltip-ca-addsection' => 'Керда декъам хьаде',
 'tooltip-ca-viewsource' => 'Ер оагIув хувцамах лораяь я, амма шун цунна гIувамага хьажа бокъо я.',
 'tooltip-ca-history' => 'Укх оагIувни хувцама таптар',
 'tooltip-ca-protect' => 'Eр оагIув лорае',
 'tooltip-ca-delete' => 'Ер оагIув дIаяькха',
 'tooltip-ca-move' => 'Укх оагIува цIи хувца',
-'tooltip-ca-watch' => 'Ер оагIув теркам беча каьхата тIа тIаяькха',
+'tooltip-ca-watch' => 'Ер оагIув теркам беча каьхата тIа тIаяьккха',
 'tooltip-ca-unwatch' => 'Ер оагIув теркам беча каьхата тIара дIаяькха',
 'tooltip-search' => 'Цу тайпара дош лаха {{SITENAME}}',
 'tooltip-search-go' => 'Изза мо цӀи йолаш оагӀув тӀa дехьавала',
@@ -979,27 +1000,27 @@ $messages = array(
 'tooltip-p-logo' => 'Кертера оагIув тIа дехьавала',
 'tooltip-n-mainpage' => 'Кертера оагIув тIа дехьавала',
 'tooltip-n-mainpage-description' => 'Кертера оагIув тIа дехьавала',
-'tooltip-n-portal' => 'Хьахьоадайтамахь лаьца, хьа де йийшдар, фа а мичча а йоала',
-'tooltip-n-currentevents' => 'Ð¥IанзаÑ\80а Ñ\85оамий Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-n-portal' => 'Хьахьоадайтамахь лаьца, хьа де йишдар, фу а мичча а йоала',
+'tooltip-n-currentevents' => 'Ð¥IанзаÑ\80а Ñ\85оаман Ð´Ð°Ð³Ð°Ñ\80ле',
 'tooltip-n-recentchanges' => 'ТӀехьара хувцамий дагарче',
 'tooltip-n-randompage' => 'Бе йоаца оагӀув ела',
 'tooltip-n-help' => 'Новкъостала моттиг',
-'tooltip-t-whatlinkshere' => 'Массайола оагIувий дагарче, укх оагIув тIа Iинкаш луш йола',
+'tooltip-t-whatlinkshere' => 'Массайола оагIувий дагарле, укх оагIув тIа Iинкаш луш йола',
 'tooltip-t-recentchangeslinked' => 'ОагIувнаш тIа тIехьара хувцамаш, укх оагIувнера Iинк яь йола',
 'tooltip-feed-rss' => 'Укх оагIувна RSSчу гойтар',
 'tooltip-feed-atom' => 'Укх оаг|увна Atomчу гойтар',
 'tooltip-t-contributions' => 'Укх дакъалаьцархочу хьийца йола оагIувнаш хьахьокха',
 'tooltip-t-emailuser' => 'Укх дакъалаьцархочоа зIы яхьийта',
-'tooltip-t-upload' => 'Паьлаш чуяькха',
+'tooltip-t-upload' => 'Паьлаш чуяьккха',
 'tooltip-t-specialpages' => 'ГIулакха оагIувний дагарчe',
-'tooltip-t-print' => 'УкÑ\85 Ð·Ð°Ñ\80ба Ð¾Ð°Ñ\83гIÑ\83вни Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-t-print' => 'УкÑ\85 Ð¾Ð°Ñ\83гIÑ\83вна ÐºÐ°Ñ\8cÑ\85аÑ\82заÑ\80бане Ð´Ð¾Ñ\80жам',
 'tooltip-t-permalink' => 'Укх оагIув доржама даим латта Iинк',
 'tooltip-ca-nstab-main' => 'Йоазува чулоацам',
 'tooltip-ca-nstab-user' => 'Дакъалаьцархочунна ший оагIув',
 'tooltip-ca-nstab-special' => 'Ер гIулакха оагIув я, из хувца хьо бокъо йолаш вац/яц.',
 'tooltip-ca-nstab-project' => 'Хьахьоадайтама оагIув',
 'tooltip-ca-nstab-image' => 'Паьла оагIув',
-'tooltip-ca-nstab-template' => 'Ð\9aÑ\83Ñ\86кепа оагIув',
+'tooltip-ca-nstab-template' => 'ЧIабала оагIув',
 'tooltip-ca-nstab-category' => 'Цатега оагIув',
 'tooltip-minoredit' => 'Ер хувцар башха доаца санна белгалде',
 'tooltip-save' => 'Хувцамаш кходе',
@@ -1007,8 +1028,8 @@ $messages = array(
 'tooltip-diff' => 'Яздам тIа яь йола хувцамаш хьахьокха',
 'tooltip-compareselectedversions' => 'Укх оагIувни шин доржамаш тIа юкъера хувцамаш зе.',
 'tooltip-watch' => 'Ер оагIув теркам беча каьхата тIа яькха',
-'tooltip-rollback' => 'Ð\93IалaÑ\82нийÑ\81адаÑ\80о Ñ\82IеÑ\85Ñ\8cаÑ\80а Ñ\8fÑ\8c Ð¹Ð¾Ð»Ð° Ñ\85Ñ\83вÑ\86амаÑ\88, Ð¿Iелг Ñ\82оIоби Ð´IаÑ\8fÑ\8cкха.',
-'tooltip-undo' => 'ЯÑ\8c Ñ\85Ñ\83вÑ\86ам Ð´IаÑ\8fÑ\8cкÑ\85e, Ð±IаÑ\80гаÑ\82аÑ\81Ñ\81аÑ\80 Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85а, ÐºÐ°Ñ\80а Ð´Ð°Ð»Ðµ, Ð´IаÑ\8fÑ\8cкха бахьан Iочуязаде моттигаца.',
+'tooltip-rollback' => 'Ð\93IалaÑ\82нийÑ\81адаÑ\80о Ñ\82IеÑ\85Ñ\8cаÑ\80а Ñ\8fÑ\8c Ð¹Ð¾Ð»Ð° Ñ\85Ñ\83вÑ\86амаÑ\88, Ð¿Iелг Ñ\82оIобе Ð´IаÑ\8fÑ\8cккха.',
+'tooltip-undo' => 'Ð\91аÑ\8c Ñ\85Ñ\83вÑ\86ам Ð´IабаÑ\8cккÑ\85e, Ð±IаÑ\80гаÑ\82аÑ\81Ñ\81ам Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85а, ÐºÐ°Ñ\80а Ð´Ð°Ð»Ðµ, Ð´IаÑ\8fÑ\8cккха бахьан Iочуязаде моттигаца.',
 'tooltip-summary' => 'Лоаца чулоацам Iочуязаде',
 
 # Browsing diffs
@@ -1028,14 +1049,14 @@ $messages = array(
 # Bad image list
 'bad_image_list' => 'Бустам цу тайпара хила беза:
 
\94агаÑ\80ена Ñ\85Ñ\8cаÑ\80акÑ\8aаÑ\88 Ð¼Ð°Ñ\80а Ð»Ð¾Ð°Ñ\80Ñ\85аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).
-МугIарена хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. 
-Цу мугIар тIа тIехьайоагIа Iинкаш, арадаккхар мо лоархаш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларха мега.',
\94агаÑ\80лен Ñ\85Ñ\8cаÑ\80акÑ\8aаÑ\88 Ð¼Ð°Ñ\80а Ð»Ð¾Ð°Ñ\80Ñ\85|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).
+МугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. 
+Цу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.',
 
 # Metadata
 'metadata' => 'МетахIамаш',
 'metadata-help' => 'Паьлас чулоаца, кхыдола хIамаш, таьрахьа суртдоакхаргца е тIагIолладоакхаргца чудакхаш дола. Хьаяь паьл, гIалатахь мукъадаькха хинна дале, хьахьокхаш дола сурт, деррига хIамаш чулоацаргдац.',
-'metadata-expand' => 'Кхыдола хIамаш хьахокха',
+'metadata-expand' => 'Кхыдола хIамаш хьахьокха',
 'metadata-collapse' => 'Кхыдола хIамаш къайладаккха',
 'metadata-fields' => 'Укх дагарченгахь дагaрадаь метахIамаша суртий мугIаш, сурт оагIув тIа хьахьекха хургья, чуерзaяь метахIамашийца. Вож мугIанаш ха йоалаш къайла хургья.
 * make
@@ -1055,11 +1076,11 @@ $messages = array(
 # EXIF tags
 'exif-imagewidth' => 'Шерал',
 'exif-imagelength' => 'Лакхал',
-'exif-imagedescription' => 'СÑ\83Ñ\80Ñ\82и цIи',
+'exif-imagedescription' => 'СÑ\83Ñ\80Ñ\82а цIи',
 'exif-artist' => 'Яздархо',
 'exif-colorspace' => 'Басара аре',
-'exif-pixelydimension' => 'СÑ\83Ñ\80Ñ\82и шерал',
-'exif-pixelxdimension' => 'СÑ\83Ñ\80Ñ\82и лакхал',
+'exif-pixelydimension' => 'СÑ\83Ñ\80Ñ\82а шерал',
+'exif-pixelxdimension' => 'СÑ\83Ñ\80Ñ\82а лакхал',
 'exif-writer' => 'Яздама да',
 'exif-languagecode' => 'Мотт',
 'exif-iimcategory' => 'Цатег',
@@ -1068,18 +1089,18 @@ $messages = array(
 'exif-scenecapturetype-2' => 'Сурт',
 
 'exif-iimcategory-edu' => 'Дешар',
-'exif-iimcategory-evn' => 'Арена буне',
+'exif-iimcategory-evn' => 'Арен буне',
 'exif-iimcategory-hth' => 'Могар',
 'exif-iimcategory-hum' => 'Адамий искараш',
-'exif-iimcategory-rel' => 'Ð\94инеи Ñ\82еÑ\88аÑ\80еи',
-'exif-iimcategory-sci' => 'Iилмеи ÐºÑ\83лгболÑ\85еи',
+'exif-iimcategory-rel' => 'Ð\94ини Ñ\82еÑ\88аÑ\80и',
+'exif-iimcategory-sci' => 'Iилмаи ÐºÑ\83лгболÑ\85и',
 'exif-iimcategory-soi' => 'Сагий хаттараш',
 'exif-iimcategory-spo' => 'Нидзоамал',
-'exif-iimcategory-war' => 'ТIомаÑ\88, ÐºÑ\85овÑ\81амаÑ\88еи Ð»Ð°Ñ\82Ñ\82аÑ\80аÑ\88еи',
+'exif-iimcategory-war' => 'ТIемаÑ\88, ÐºÑ\85овÑ\81амаÑ\88и Ð»Ð°Ñ\82Ñ\82аÑ\80аÑ\88и',
 'exif-iimcategory-wea' => 'Хаоттам',
 
 # External editor support
-'edit-externally' => 'Йола болхоагIувца паьла гIалатахь мукъаяькха',
+'edit-externally' => 'Йола болхоагIувца паьла гIалатах мукъаяьккха',
 'edit-externally-help' => '(ма даррачунга хьажа [//www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
 
 # 'all' in various places, this might be different for inflected languages
@@ -1092,7 +1113,7 @@ $messages = array(
 'confirm_purge_button' => 'ХIаа',
 
 # Multipage image navigation
-'imgmultigo' => 'Дехьавала!',
+'imgmultigo' => 'Дехьавала/яла!',
 'imgmultigoto' => '$1 оагIув тIа дехьавала',
 
 # Table pager
@@ -1115,7 +1136,7 @@ $messages = array(
 # Special:FilePath
 'filepath' => 'Паьлачу никъ',
 'filepath-page' => 'Паьл:',
-'filepath-submit' => 'Дехьавала',
+'filepath-submit' => 'Дехьавала/яла',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'ПаьлацIи:',
@@ -1153,11 +1174,11 @@ $messages = array(
 'compare-rev2' => '2. Доржам',
 
 # Database error messages
-'dberr-header' => 'УкÑ\85 Ð²Ð¸ÐºÐ¸Ñ\81 халонаш ловш латта',
+'dberr-header' => 'УкÑ\85 Ð¼Ð°Ñ\81Ñ\81ано халонаш ловш латта',
 
 # HTML forms
-'htmlform-submit' => 'ДIадахийта',
-'htmlform-reset' => 'Хувцамаш юхадакха',
+'htmlform-submit' => 'ДIадахьийта',
+'htmlform-reset' => 'Хувцамаш юхадаккха',
 'htmlform-selectorother-other' => 'Кхыдола',
 
 );
index 26ca3da..ca0f058 100644 (file)
@@ -409,7 +409,7 @@ nekorekta interlinguale od interwikale ligilo.',
 # Login and logout pages
 'logouttext' => "'''Vu nun esas nun ek {{SITENAME}}.'''
 
-Vu povas durar uzante {{SITENAME}} anonimale, o vu povas [[Special:UserLogin|enirar itere]] kom la sama o diferenta uzanto.
+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.
@@ -672,8 +672,6 @@ Surskriburo: '''({{int:cur}})''' = diferi kun l'aktuala versiono,
 'search-interwiki-caption' => 'Altra projekti',
 'search-interwiki-default' => 'Rezultaji di $1:',
 'search-interwiki-more' => '(plusa)',
-'search-mwsuggest-enabled' => 'kun sugestaji',
-'search-mwsuggest-disabled' => 'sen sugestaji',
 'searchall' => 'omna',
 'showingresults' => "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
 'showingresultsnum' => "Montrante infre {{PLURAL:$3|'''1''' rezulto|'''$3''' rezulti}}, qui komencas kun numero #'''$2'''.",
@@ -1556,4 +1554,8 @@ Vu darfos adjuntar kauso en la rezumo.',
 'htmlform-reset' => 'Desfacar chanji',
 'htmlform-selectorother-other' => 'Altra',
 
+# Search suggestions
+'searchsuggest-search' => 'Serchez',
+'searchsuggest-containing' => 'quan kontenas...',
+
 );
index 8ac717a..2022be9 100644 (file)
@@ -80,54 +80,54 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#tilvísun', '#TILVÍSUN', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__EMSAFN__', '__NOGALLERY__' ),
-       'currentday'              => array( '1', 'NÚDAGUR', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NÚDAGUR2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÚDAGNAFN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NÚÁR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NÚTÍMI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NÚKTÍMI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'STMÁN', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'STMÁNNAFN', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'STMÁNST', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'STDAGUR', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'STDAGUR2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'STDAGNAFN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'STÁR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'STTÍMI', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'STKTÍMI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'FJLSÍÐA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'FJLGREINA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FJLSKJALA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'FJLNOT', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'FJLBREYT', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'SÍÐUNAFN', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAFNSVÆÐI', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'SPJALLSVÆÐI', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'FULLTSÍÐUNF', 'FULLPAGENAME' ),
-       'img_manualthumb'         => array( '1', 'þumall', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'hægri', 'right' ),
-       'img_left'                => array( '1', 'vinstri', 'left' ),
-       'img_none'                => array( '1', 'engin', 'none' ),
-       'img_width'               => array( '1', '$1dp', '$1px' ),
-       'img_center'              => array( '1', 'miðja', 'center', 'centre' ),
-       'img_sub'                 => array( '1', 'undir', 'sub' ),
-       'img_super'               => array( '1', 'yfir', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'efst', 'top' ),
-       'img_bottom'              => array( '1', 'neðst', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'texti-neðst', 'text-bottom' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'server'                  => array( '0', 'VEFÞJ', 'SERVER' ),
-       'servername'              => array( '0', 'VEFÞJNF', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'MÁLFRÆÐI:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'NÚVIKA', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'STVIKA', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'FLTALA:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'HRÁ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SÝNATITIL', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#TUNGUMÁL', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'kerfissíða', 'special' ),
+       'redirect'                  => array( '0', '#tilvísun', '#TILVÍSUN', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__EMSAFN__', '__NOGALLERY__' ),
+       'currentday'                => array( '1', 'NÚDAGUR', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NÚDAGUR2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÚDAGNAFN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NÚÁR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NÚTÍMI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NÚKTÍMI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'STMÁN', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'STMÁNNAFN', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'STMÁNST', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'STDAGUR', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'STDAGUR2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'STDAGNAFN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'STÁR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'STTÍMI', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'STKTÍMI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'FJLSÍÐA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'FJLGREINA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FJLSKJALA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'FJLNOT', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'FJLBREYT', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'SÍÐUNAFN', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAFNSVÆÐI', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'SPJALLSVÆÐI', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'FULLTSÍÐUNF', 'FULLPAGENAME' ),
+       'img_manualthumb'           => array( '1', 'þumall', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'hægri', 'right' ),
+       'img_left'                  => array( '1', 'vinstri', 'left' ),
+       'img_none'                  => array( '1', 'engin', 'none' ),
+       'img_width'                 => array( '1', '$1dp', '$1px' ),
+       'img_center'                => array( '1', 'miðja', 'center', 'centre' ),
+       'img_sub'                   => array( '1', 'undir', 'sub' ),
+       'img_super'                 => array( '1', 'yfir', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'efst', 'top' ),
+       'img_bottom'                => array( '1', 'neðst', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'texti-neðst', 'text-bottom' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'server'                    => array( '0', 'VEFÞJ', 'SERVER' ),
+       'servername'                => array( '0', 'VEFÞJNF', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'MÁLFRÆÐI:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'NÚVIKA', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'STVIKA', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'FLTALA:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'HRÁ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SÝNATITIL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#TUNGUMÁL', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'kerfissíða', 'special' ),
 );
 
 $specialPageAliases = array(
@@ -148,7 +148,7 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Framlög' ),
        'CreateAccount'             => array( 'Búa_til_aðgang' ),
        'Deadendpages'              => array( 'Botnlangar' ),
-       'DeletedContributions'      => array( 'Edd_framlög' ),
+       'DeletedContributions'      => array( 'Eydd_framlög' ),
        'Disambiguations'           => array( 'Tenglar_í_aðgreiningarsíður' ),
        'DoubleRedirects'           => array( 'Tvöfaldar_tilvísanir' ),
        'EditWatchlist'             => array( 'Breyta_vaktlista' ),
@@ -200,6 +200,7 @@ $specialPageAliases = array(
        'Shortpages'                => array( 'Stuttar_síður' ),
        'Specialpages'              => array( 'Kerfissíður' ),
        'Statistics'                => array( 'Tölfræði' ),
+       'Tags'                      => array( 'Tög' ),
        'Unblock'                   => array( 'Afbönnun' ),
        'Uncategorizedcategories'   => array( 'Óflokkaðir_flokkar' ),
        'Uncategorizedimages'       => array( 'Óflokkaðar_myndir' ),
@@ -217,6 +218,7 @@ $specialPageAliases = array(
        'Userrights'                => array( 'Notandaréttindi' ),
        'Version'                   => array( 'Útgáfa' ),
        'Wantedcategories'          => array( 'Eftirsóttir_flokkar' ),
+       'Wantedfiles'               => array( 'Eftirsóttar_skrár' ),
        'Wantedpages'               => array( 'Eftirsóttar_síður' ),
        'Wantedtemplates'           => array( 'Eftirsótt_snið' ),
        'Watchlist'                 => array( 'Vaktlistinn' ),
@@ -254,7 +256,7 @@ $messages = array(
 'tog-nocache' => 'Slökkva á flýtiminni vafrans',
 'tog-enotifwatchlistpages' => 'Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínu er breytt',
 'tog-enotifusertalkpages' => 'Senda mér tölvupóst þegar notandaspjallinu mínu er breytt',
-'tog-enotifminoredits' => 'Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum',
+'tog-enotifminoredits' => 'Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum og skrám',
 'tog-enotifrevealaddr' => 'Gefa upp netfang mitt í tilkynningarpóstum',
 'tog-shownumberswatching' => 'Sýna fjölda vaktandi notenda',
 'tog-oldsig' => 'Núverandi undirskrift:',
@@ -494,6 +496,10 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'youhavenewmessages' => 'Þú hefur fengið $1 ($2).',
 'newmessageslink' => 'ný skilaboð',
 'newmessagesdifflink' => 'síðasta breyting',
+'youhavenewmessagesfromusers' => 'Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)',
+'youhavenewmessagesmanyusers' => 'Þú hefur $1 frá mörgum notendum ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ein|}} ný skilaboð',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|síðasta breyting|síðustu breytingar}} spjallsíðunnar',
 'youhavenewmessagesmulti' => 'Þín bíða ný skilaboð á $1',
 'editsection' => 'breyta',
 'editold' => 'breyta',
@@ -546,9 +552,9 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'dberrortext' => 'Málfræðivilla kom upp í gangagrnunsfyrirspurninni.
 Þetta gæti verið vegna villu í hugbúnaðinum.
 Síðasta gagnagrunnsfyrirspurnin var:
-<blockquote><tt>$1</tt></blockquote>
-úr aðgerðinni: „<tt>$2</tt>“.
-MySQL skilar villuboðanum „<tt>$3: $4</tt>“.',
+<blockquote><code>$1</code></blockquote>
+úr aðgerðinni: „<code>$2</code>".
+MySQL skilar villuboðunum „<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Málfræðivilla kom upp í gangagrnunsfyrirspurninni.
 Síðasta gagnagrunnsfyrirspurnin var:
 „$1“
@@ -601,10 +607,11 @@ Spurn: $2',
 'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar.',
 '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, og er læst til að koma í veg fyrir misnotkun.',
+'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.
+Til þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/ translatewiki.net], staðfæringaverkefni MediaWiki',
 'editinginterface' => "'''Aðvörun:''' Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.
-Breytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda.
-Fyrir þýðingar, gjörðu svo vel að nota [//translatewiki.net/wiki/Main_Page?setlang=is translatewiki.net], staðfæringverkefni MediaWiki.",
+Breytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.
+Til þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/wiki/Main_Page?setlang=is translatewiki.net], staðfæringaverkefni MediaWiki.",
 'sqlhidden' => '(SQL-fyrirspurn falin)',
 'cascadeprotected' => 'Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er innifalin í eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:
 $2',
@@ -630,7 +637,7 @@ Möppudýrið sem læsti skránni gaf þessa ástæðu: "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''Þú hefur verið skráð(ur) út.'''
 
-Þú getur haldið áfram að nota {{SITENAME}} óþekkt(ur), eða þú getur [[Special:UserLogin|skráð þig inn aftur]] sem sami eða annar notandi.
+Þú 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.
@@ -886,9 +893,11 @@ Ef þú ert óþekktur notandi og finnst að óviðkomandi athugasemdum hafa ver
 'noarticletext' => 'Enginn texti er á þessari síðu enn sem komið er.
 Þú getur [[Special:Search/{{PAGENAME}}|leitað í öðrum síðum]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám], eða [{{fullurl:{{FULLPAGENAME}}|action=edit}} breytt henni sjálfur]</span>.',
-'noarticletext-nopermission' => 'Enginn texti er á þessari síðu enn sem komið er.
-Þú getur [[Special:Search/{{PAGENAME}}|leitað í öðrum síðum]],
-eða <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám]</span>.',
+'noarticletext-nopermission' => 'Það er enginn texti á þessari síðu eins og er.
+Þú getur [[Special:Search/{{PAGENAME}}|leitað að þessum titli]] í öðrum síðum, eða <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám]</span>, en þú hefur ekki réttindi til þess að stofna þessa síðu.',
+'missing-revision' => 'Útgáfa #$1 síðunnar „{{PAGENAME}}" er ekki til.
+
+Þetta gerist oftast þegar úreld breytingarskrá tengir á síðu sem hefur verið eytt. Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].',
 'userpage-userdoesnotexist' => 'Notandaaðgangurinn „<nowiki>$1</nowiki>“ er ekki skráður.
 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.',
@@ -1200,8 +1209,6 @@ Sjáðu til þess að þessi breyting sameini breytingarskrárnar samfellt.',
 'search-interwiki-caption' => 'Systurverkefni',
 'search-interwiki-default' => '$1 útkomur:',
 'search-interwiki-more' => '(fleiri)',
-'search-mwsuggest-enabled' => 'með uppástungum',
-'search-mwsuggest-disabled' => 'engar uppástungur',
 'search-relatedarticle' => 'Tengt',
 'mwsuggest-disable' => 'Gera AJAX-uppástungur óvirkar',
 'searcheverything-enable' => 'Leita í öllum nafnrýmum',
@@ -1929,7 +1936,7 @@ Hún er tilvísun á [[$2]].',
 'fewestrevisions' => 'Greinar með fæstar breytingar',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|bæt|bæt}}',
+'nbytes' => '$1 {{PLURAL:$1|bæt|bæti}}',
 'ncategories' => '$1 {{PLURAL:$1|flokkur|flokkar}}',
 'nlinks' => '$1 {{PLURAL:$1|tengill|tenglar}}',
 'nmembers' => '$1 {{PLURAL:$1|meðlimur|meðlimir}}',
@@ -2107,7 +2114,7 @@ Studdar samskiptareglur: <code>$1</code> (ekki bæta neinum af þessum í leitin
 '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.',
 'usermailererror' => 'Póst hlutur skilaði villu:',
-'defemailsubject' => '{{SITENAME}} netfang notanda "$1"',
+'defemailsubject' => '{{SITENAME}} skilaboð frá notandanum "$1"',
 'usermaildisabled' => 'Netfang notenda er óvirkt',
 'usermaildisabledtext' => 'Þú getur ekki sent tölvupóst til annara notenda á þessum wiki',
 'noemailtitle' => 'Ekkert póstfang',
@@ -2174,41 +2181,48 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'enotif_newpagetext' => 'Þetta er ný síða.',
 'enotif_impersonal_salutation' => '{{SITENAME}}notandi',
 'changed' => 'breytt',
-'created' => 'búið til',
+'created' => 'búin til',
 'enotif_subject' => '$PAGETITLE á {{SITENAME}} hefur verið $CHANGEDORCREATED af $PAGEEDITOR',
-'enotif_lastvisited' => 'Sjá $1 fyrir allar breytingar síðan þú sóttir síðuna síðast.',
-'enotif_lastdiff' => 'Sjá $1 til að skoða þessa breytingu.',
-'enotif_anon_editor' => 'ónefndur notandi $1',
+'enotif_lastvisited' => 'Heimsóttu eftirfarandi tengil til að sjá allar breytingar síðan 
+þú heimsóttir síðuna síðast:
+  $1',
+'enotif_lastdiff' => 'Einnig getur þú heimsótt eftirfarandi tengil til að skoða þessa breytingu:
+  $1',
+'enotif_anon_editor' => 'ónefndum notanda $1',
 'enotif_body' => 'Kæri $WATCHINGUSERNAME,
 
+Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} síðunni $PAGETITLE.
+Hún hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
+$PAGEEDITOR. Breytingarágripið var:
+
+   $PAGESUMMARY
+
+Þetta er tengill á spjallsíðuna þína:
 
-Síðan $PAGETITLE á {{SITENAME}} hefur verið $CHANGEDORCREATED þann $PAGEEDITDATE eftir $PAGEEDITOR, sjá $PAGETITLE_URL fyrir núverandi útgáfu.
+   $PAGETITLE_URL
 
 $NEWPAGE
 
-Breytingarágrip notandans: $PAGESUMMARY $PAGEMINOREDIT
+Til þess að hafa samband við $PAGEEDITOR, smelltu á:
 
-Samskipta upplýsingar notandans:
-netfang: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+   $PAGEEDITOR_WIKI
 
-Engar frekari tilkynningar verða sendar nema þú heimsækir síðuna.
-Þú getur einnig endursett tilkynninga merkingar fyrir allar síður á vaktlistanum.
+Athugaðu að frekari breytingar á $PAGETITLE leiða
+ekki af sér fleiri tilkynningar fyrr en þú hefur heimsótt síðuna.
 
-                        Vingjarnlega {{SITENAME}} tilkynningar kerfið
+Kveðja,
+{{SITENAME}}
 
 --
-Til þess að breyta tilkynningum sem sendast á netfangið, smelltu á
+
+Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smelltu á:
+
 {{canonicalurl:{{#special:Preferences}}}}
 
-Til þess að breyta stillingum vaktlistans, smelltu á
-{{canonicalurl:{{#special:EditWatchlist}}}}
 
-Til þess að eyða síðunni af vaktlistanum, smelltu á
-$UNWATCHURL
+Til þess að hætta að fylgjast með $PAGETITLE, smelltu á:
 
-Svörun og frekari aðstoð:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
+$UNWATCHURL',
 
 # Delete
 'deletepage' => 'Eyða',
@@ -2701,7 +2715,7 @@ Ef síðari möguleikinn á við getur þú einnig notað tengil, til dæmis
 'allmessagesdefault' => 'Sjálfgefinn skilaboða texti',
 'allmessagescurrent' => 'Núverandi texti',
 'allmessagestext' => 'Þetta er listi yfir kerfismeldingar í Melding-nafnrýminu.
-Gjörðu svo vel og heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
+Vinsamlegast heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
 'allmessagesnotsupportedDB' => "Það er ekki hægt að nota '''{{ns:special}}:Allmessages''' því '''\$wgUseDatabaseMessages''' hefur verið gerð óvirk.",
 'allmessages-filter-legend' => 'Sía',
 'allmessages-filter' => 'Sía með breytingarstöðu:',
@@ -2779,7 +2793,6 @@ Vinsamlegast reyndu aftur.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript prófun',
-'javascripttest-disabled' => 'Þessi möguleiki hefur ekki verið virkjaður á þessum wiki.',
 'javascripttest-pagetext-skins' => 'Veldu þema sem á að keyra prófanirnar á:',
 
 # Tooltip help for the actions
@@ -2879,14 +2892,15 @@ Vinsamlegast reyndu aftur.',
 'spambot_username' => 'MediaWiki amapósts hreinsun',
 'spam_reverting' => 'Tek aftur síðustu breytingu sem inniheldur ekki tengil á $1',
 'spam_blanking' => 'Allar útgáfur innihéldu tengla á $1, tæmi síðuna',
+'spam_deleting' => 'Allar útgáfur innihéldu tengla á $1, eyði síðunni',
 
 # Info page
 'pageinfo-title' => 'Upplýsingar um $1',
-'pageinfo-header-edits' => 'Breytingar',
+'pageinfo-header-edits' => 'Breytingarskrá',
 'pageinfo-views' => 'Fjöldi innlita',
-'pageinfo-watchers' => 'Fjöldi notenda',
-'pageinfo-edits' => 'Fjöldi breytinga',
-'pageinfo-authors' => 'Fjöldi einstakra höfunda',
+'pageinfo-watchers' => 'Fjöldi notenda, sem vakta síðuna',
+'pageinfo-edits' => 'Heildarfjöldi breytinga',
+'pageinfo-authors' => 'Heildarfjöldi einstakra höfunda',
 
 # Skin names
 'skinname-standard' => 'Sígilt',
@@ -3503,6 +3517,7 @@ MediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYR
 'version-software' => 'Uppsettur hugbúnaður',
 'version-software-product' => 'Vara',
 'version-software-version' => 'Útgáfa',
+'version-entrypoints-header-url' => 'vefslóð',
 
 # Special:FilePath
 'filepath' => 'Slóð skráar',
@@ -3653,6 +3668,10 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'feedback-bugcheck' => 'Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].',
 'feedback-bugnew' => 'Ég athugaði það. Tilkynna nýja villu.',
 
+# Search suggestions
+'searchsuggest-search' => 'Leita',
+'searchsuggest-containing' => 'sem innihalda ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Þú hefur ekki leyfi til að hlaða inn skrám.',
 'api-error-badtoken' => 'Innri villa: Skemmdur tóki.',
@@ -3665,10 +3684,11 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'api-error-emptypage' => 'Stofnun nýrra, tómra síðna er óheimil.',
 'api-error-fetchfileerror' => 'Innri villa: Mistókst að sækja skránna.',
 'api-error-fileexists-forbidden' => 'Skrá með nafninu "$1" er þegar til og ekki er hægt að yfirskrifa hana.',
+'api-error-fileexists-shared-forbidden' => 'Skrá með nafninu "$1" er þegar til á miðlæga gagnaþjóninum og ekki er hægt að yfirskrifa hana.',
 'api-error-file-too-large' => 'Skráin sem þú valdir er of stór.',
 'api-error-filename-tooshort' => 'Skráarnafnið er of stutt',
 'api-error-filetype-banned' => 'Þessi gerð skráar er bönnuð.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|er ekki leifileg skráargerð|eru ekki leifilegar skráargerðir}}. {{PLURAL:$3|Leyfileg skráargerð er|Leyfilegar skráargerðir eru}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|er óleyfileg skráargerð|eru óleyfilegar skráargerðir}}. {{PLURAL:$3|Leyfð skráargerð er|Leyfðar skráargerðir eru}} $2.',
 'api-error-filetype-missing' => 'Skráin hefur enga skráarendingu.',
 'api-error-hookaborted' => 'Hætt var við breytinguna sem þú reyndir að gera með viðbót.',
 'api-error-http' => 'Innri villa: Get ekki tengst vefþjón.',
index ea44663..817262b 100644 (file)
@@ -127,7 +127,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'ContributiCancellati' ),
        'Disambiguations'           => array( 'Disambigua' ),
        'DoubleRedirects'           => array( 'RedirectDoppi' ),
-       'EditWatchlist'             => array( 'ModificaListaSeguiti' ),
+       'EditWatchlist'             => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
        'Emailuser'                 => array( 'InviaEMail' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMenoRevisioni' ),
@@ -205,59 +205,63 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'MESECORRENTE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NOMEMESECORRENTE', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMEMESECORRENTEGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MESECORRENTEABBREV', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'GIORNOCORRENTE', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'GIORNOCORRENTE2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEGIORNOCORRENTE', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNOCORRENTE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ORARIOATTUALE', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACORRENTE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESELOCALE', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NOMEMESELOCALE', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMEMESELOCALEGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MESELOCALEABBREV', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'GIORNOLOCALE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'GIORNOLOCALE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEGIORNOLOCALE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNOLOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ORARIOLOCALE', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMEROPAGINE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMEROARTICOLI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMEROFILE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMEROUTENTI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMEROUTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMEROEDIT', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMEROVISITE', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'TITOLOPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'TITOLOPAGINAE', 'PAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMESOTTOPAGINAE', 'SUBPAGENAMEE' ),
-       'subst'                   => array( '0', 'SOST:', 'SUBST:' ),
-       'img_right'               => array( '1', 'destra', 'right' ),
-       'img_left'                => array( '1', 'sinistra', 'left' ),
-       'img_none'                => array( '1', 'nessuno', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'bordo', 'border' ),
-       'sitename'                => array( '1', 'NOMESITO', 'SITENAME' ),
-       'servername'              => array( '0', 'NOMESERVER', 'SERVERNAME' ),
-       'gender'                  => array( '0', 'GENERE:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'SETTIMANACORRENTE', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'SETTIMANALOCALE', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'PLURALE:', 'PLURAL:' ),
-       'language'                => array( '0', '#LINGUA', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'speciale', 'special' ),
-       'pagesincategory'         => array( '1', 'PAGINEINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'DIMENSIONEPAGINA', 'PESOPAGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDICE__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NOINDICE__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', 'LIVELLOPROTEZIONE', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'MESEATTUALE', 'MESECORRENTE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NOMEMESEATTUALE', 'NOMEMESECORRENTE', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMEMESEATTUALEGEN', 'NOMEMESECORRENTEGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'MESEATTUALEABBREV', 'MESECORRENTEABBREV', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'GIORNOATTUALE', 'GIORNOCORRENTE', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'GIORNOATTUALE2', 'GIORNOCORRENTE2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEGIORNOATTUALE', 'NOMEGIORNOCORRENTE', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNOATTUALE', 'ANNOCORRENTE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ORARIOATTUALE', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORAATTUALE', 'ORACORRENTE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESELOCALE', 'MESELOCALE2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESELOCALE1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEMESELOCALE', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMEMESELOCALEGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MESELOCALEABBREV', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'GIORNOLOCALE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'GIORNOLOCALE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEGIORNOLOCALE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNOLOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ORARIOLOCALE', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMEROPAGINE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMEROVOCI', 'NUMEROARTICOLI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMEROFILE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMEROUTENTI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMEROUTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMEROMODIFICHE', 'NUMEROEDIT', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMEROVISITE', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'TITOLOPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'TITOLOPAGINAE', 'PAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMESOTTOPAGINAE', 'SUBPAGENAMEE' ),
+       'subst'                     => array( '0', 'SOST:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'min', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'min=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'destra', 'right' ),
+       'img_left'                  => array( '1', 'sinistra', 'left' ),
+       'img_none'                  => array( '1', 'nessuno', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'bordo', 'border' ),
+       'sitename'                  => array( '1', 'NOMESITO', 'SITENAME' ),
+       'servername'                => array( '0', 'NOMESERVER', 'SERVERNAME' ),
+       'gender'                    => array( '0', 'GENERE:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'SETTIMANACORRENTE', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'SETTIMANALOCALE', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'PLURALE:', 'PLURAL:' ),
+       'language'                  => array( '0', '#LINGUA', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'speciale', 'special' ),
+       'tag'                       => array( '0', 'etichetta', 'tag' ),
+       'pagesincategory'           => array( '1', 'PAGINEINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'DIMENSIONEPAGINA', 'PESOPAGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDICE__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NOINDICE__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', 'LIVELLOPROTEZIONE', 'PROTECTIONLEVEL' ),
 );
 
 $linkTrail = '/^([a-zàéèíîìóòúù]+)(.*)$/sDu';
@@ -421,7 +425,7 @@ $messages = array(
 'vector-action-protect' => 'Proteggi',
 'vector-action-undelete' => 'Recupera',
 'vector-action-unprotect' => 'Cambia la protezione',
-'vector-simplesearch-preference' => 'Abilita i suggerimenti di ricerca avanzata (solo per la skin Vector)',
+'vector-simplesearch-preference' => 'Abilita la barra per la ricerca semplificata (solo per la skin Vector)',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Modifica',
 'vector-view-history' => 'Visualizza cronologia',
@@ -641,9 +645,10 @@ Query: $2',
 'protectedpagetext' => 'Questa pagina è stata protetta per impedirne la modifica.',
 '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; è quindi protetta per evitare possibili abusi.",
-'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.
-Per le traduzioni, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
+'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,",
+'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)',
 'cascadeprotected' => 'Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione "ricorsiva":
 $2',
@@ -669,7 +674,7 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
 # Login and logout pages
 'logouttext' => "'''Logout effettuato.'''
 
-Si può continuare ad usare {{SITENAME}} come utente anonimo oppure [[Special:UserLogin|eseguire un nuovo accesso]], con lo stesso nome utente o un nome diverso.
+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! ==
 
@@ -688,7 +693,7 @@ L'account è stato creato correttamente. Non dimenticare di personalizzare le [[
 'userlogin' => 'Entra / registrati',
 'userloginnocreate' => 'Entra',
 'logout' => 'Esci',
-'userlogout' => 'Esci',
+'userlogout' => 'esci',
 'notloggedin' => 'Accesso non effettuato',
 'nologin' => "Non hai ancora un accesso? '''$1'''.",
 'nologinlink' => 'Registrati',
@@ -912,7 +917,7 @@ Se vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella
 Se il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante '''Indietro''' del proprio browser.",
 'anontalkpagetext' => "----''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un accesso o comunque non lo usa. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea un nuovo accesso]] o [[Special:UserLogin|entra con quello che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
 'noarticletext' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.',
-'noarticletext-nopermission' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>.',
+'noarticletext-nopermission' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.',
 'missing-revision' => 'La revisione #$1 della pagina "{{PAGENAME}}" non esiste.
 
 Questo si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.
@@ -1163,9 +1168,10 @@ $1",
 'revdelete-no-change' => "'''Attenzione:''' l'oggetto con data $1 $2 aveva già le impostazioni di visibilità richieste.",
 'revdelete-concurrent-change' => "Impossibile modificare l'oggetto con data $1 $2 in quanto il suo stato è stato modificato da un altro utente mentre se ne tentava la modifica.",
 'revdelete-only-restricted' => "Errore nel nascondere l'oggetto datato $1, $2: non è possibile nascondere gli oggetti alla vista degli amministratori senza selezionare almeno un'altra delle opzioni di rimozione.",
-'revdelete-reason-dropdown' => '*Motivazioni più comuni per la cancellazione
+'revdelete-reason-dropdown' => '* Motivazioni più comuni per la cancellazione
 ** Violazione di copyright
-** Informazioni personali inappropriate
+** Commenti o informazioni personali inappropriate
+** Nome utente inappropriato
 ** Informazione potenzialmente diffamatoria',
 'revdelete-otherreason' => 'Altra motivazione o motivazione aggiuntiva:',
 'revdelete-reasonotherlist' => 'Altra motivazione',
@@ -1263,8 +1269,6 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'search-interwiki-caption' => 'Progetti fratelli',
 'search-interwiki-default' => 'Risultati da $1:',
 'search-interwiki-more' => '(altro)',
-'search-mwsuggest-enabled' => 'con suggerimenti',
-'search-mwsuggest-disabled' => 'senza suggerimenti',
 'search-relatedarticle' => 'Risultati correlati',
 'mwsuggest-disable' => 'Disattiva suggerimenti AJAX',
 'searcheverything-enable' => 'Cerca in tutti i namespace',
@@ -1358,7 +1362,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'timezoneregion-indian' => 'Oceano Indiano',
 'timezoneregion-pacific' => 'Oceano Pacifico',
 'allowemail' => 'Abilita la ricezione di messaggi e-mail da altri utenti',
-'prefs-searchoptions' => 'Opzioni di ricerca',
+'prefs-searchoptions' => 'Ricerca',
 'prefs-namespaces' => 'Namespace',
 'defaultns' => 'In caso contrario, cerca in questi namespace:',
 'default' => 'predefinito',
@@ -1771,7 +1775,7 @@ $1',
 'backend-fail-internal' => 'Si è verificato un errore sconosciuto nel backend di memoria "$1".',
 'backend-fail-contenttype' => 'Impossibile determinare la tipologia del file da archiviare in "$1".',
 'backend-fail-batchsize' => 'Il backend di memoria ha programmato una serie di $1 {{PLURAL:$1|operazione|operazioni}} su file; il limite è di $2 {{PLURAL:$2|operazione|operazioni}}.',
-'backend-fail-usable' => 'Impossibile scrivere il file $1 a causa di autorizzazione insufficienti o directory/recipienti mancanti.',
+'backend-fail-usable' => 'Impossibile leggere o scrivere il file "$1" a causa di autorizzazione insufficienti o directory/contenitori mancanti.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossibile connettersi al database journal per l\'archiviazione back-end "$1".',
@@ -2022,7 +2026,7 @@ I redirect <del>cancellati</del> sono stati corretti.',
 'lonelypages' => 'Pagine orfane',
 'lonelypagestext' => 'Le pagine indicate di seguito sono prive di collegamenti provenienti da altre pagine di {{SITENAME}} e non sono incluse in nessuna pagina del sito.',
 'uncategorizedpages' => 'Pagine prive di categorie',
-'uncategorizedcategories' => 'Categorie non categorizzate',
+'uncategorizedcategories' => 'Categorie prive di categorie',
 'uncategorizedimages' => 'File privi di categorie',
 'uncategorizedtemplates' => 'Template privi di categorie',
 'unusedcategories' => 'Categorie vuote',
@@ -2152,7 +2156,7 @@ Protocolli supportati: <code>$1</code> (non aggiungere nessuno di questi nella t
 'listusers-blocked' => '(bloccato)',
 
 # Special:ActiveUsers
-'activeusers' => 'Lista degli utenti attivi',
+'activeusers' => 'Elenco degli utenti attivi',
 'activeusers-intro' => 'Questo è un elenco di utenti che hanno avuto qualche tipo di attività da $1 {{PLURAL:$1|giorno|giorni}} a questa parte.',
 'activeusers-count' => "$1 {{PLURAL:$1|modifica|modifiche}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
 'activeusers-from' => 'Mostra gli utenti a partire da:',
@@ -2850,7 +2854,6 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 
 # JavaScriptTest
 'javascripttest' => 'Sperimentazione JavaScript',
-'javascripttest-disabled' => 'Questa funzione non è abilitata su questo wiki.',
 'javascripttest-title' => 'In esecuzione test per $1',
 'javascripttest-pagetext-noframework' => "Questa pagina è riservata all'esecuzione di test di JavaScript.",
 'javascripttest-pagetext-unknownframework' => 'Framework di test sconosciuto "$1".',
@@ -3013,10 +3016,10 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-authors' => 'Numero totale di autori diversi',
 'pageinfo-recent-edits' => 'Numero di modifiche recenti (negli ultimi $1)',
 'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
-'pageinfo-restriction' => 'Protezione della pagina (<code>$1</code>)',
 '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-toolboxlink' => 'Informazioni sulla pagina',
 
 # Patrolling
 'markaspatrolleddiff' => 'Segna la modifica come verificata',
@@ -3595,6 +3598,7 @@ Questo codice di conferma scadrà automaticamente alle $4.',
 # Scary transclusion
 'scarytranscludedisabled' => "[L'inclusione di pagine tra siti wiki non è attiva]",
 'scarytranscludefailed' => '[Errore: Impossibile ottenere il template $1]',
+'scarytranscludefailed-httpstatus' => '[Errore: impossibile ottenere il template $1: HTTP $2]',
 'scarytranscludetoolong' => '[Errore: URL troppo lunga]',
 
 # Delete conflict
@@ -3644,7 +3648,7 @@ Per favore, conferma che desideri veramente ricreare questa pagina.",
 'size-bytes' => '$1 byte',
 
 # Live preview
-'livepreview-loading' => 'Caricamento in corso',
+'livepreview-loading' => 'Caricamento in corso...',
 'livepreview-ready' => 'Caricamento in corso… Pronto.',
 'livepreview-failed' => "Errore nella funzione Live preview.
 Usare l'anteprima standard.",
@@ -3874,6 +3878,10 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'feedback-bugcheck' => 'Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].',
 'feedback-bugnew' => 'Controllo effettuato. Segnala un nuovo bug',
 
+# Search suggestions
+'searchsuggest-search' => 'Ricerca',
+'searchsuggest-containing' => 'contenente...',
+
 # API errors
 'api-error-badaccess-groups' => 'Non sei autorizzato a caricare documenti su questa wiki.',
 'api-error-badtoken' => 'Errore interno: token errato.',
index 8dd8c40..37cf5f9 100644 (file)
@@ -119,7 +119,7 @@ $specialPageAliases = array(
        'Blankpage'                 => array( '白紙ページ' ),
        'Block'                     => array( '投稿ブロック', 'ブロック' ),
        'Blockme'                   => array( '自己ブロック' ),
-       'Booksources'               => array( '文献資料' ),
+       'Booksources'               => array( '文献資料', '書籍情報源' ),
        'BrokenRedirects'           => array( '迷子のリダイレクト', '壊れたリダイレクト' ),
        'Categories'                => array( 'カテゴリ', 'カテゴリ一覧' ),
        'ChangeEmail'               => array( 'メールアドレスの変更' ),
@@ -212,165 +212,165 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#転送', '#リダイレクト', '#転送', '#リダイレクト', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__目次非表示__', '__目次非表示__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ギャラリー非表示__', '__ギャラリー非表示__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__目次強制__', '__目次強制__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__目次__', '__目次__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__節編集非表示__', '__セクション編集非表示__', '__セクション編集非表示__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__見出し非表示__', '__見出し非表示__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', '現在の月', '協定月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', '現在の月1', '協定月1', '協定月1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', '現在の月名', '協定月名', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', '現在の月属格', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', '現在の月省略形', '省略協定月', '協定月省略', '協定月省略形', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', '現在の日', '協定日', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', '現在の日2', '協定日2', '協定日2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', '現在の曜日名', '協定曜日', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', '現在の年', '協定年', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', '現在の時刻', '協定時間', '協定時刻', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', '現在の時', '協定時', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', '地方時の月', '現地月', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', '地方時の月1', '現地月1', '現地月1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', '地方時の月名1', '現地月名', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', '地方時の月属格', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', '地方時の月省略形', '省略現地月', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', '地方時の日', '現地日', 'ローカルデイ', 'LOCALDAY' ),
-       'localday2'               => array( '1', '地方時の日2', '現地日2', '現地日2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', '地方時の曜日名', '現地曜日', 'ローカルデイネーム', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', '地方時の年', '現地年', 'ローカルイヤー', 'LOCALYEAR' ),
-       'localtime'               => array( '1', '地方時の時刻', '現地時間', 'ローカルタイム', 'LOCALTIME' ),
-       'localhour'               => array( '1', '地方時の時', '現地時', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ページ数', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', '記事数', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ファイル数', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', '利用者数', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', '活動利用者数', '有効な利用者数', '有効利用者数', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', '編集回数', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', '閲覧回数', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ページ名', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ページ名E', 'ページ名E', 'PAGENAMEE' ),
-       'namespace'               => array( '1', '名前空間', 'NAMESPACE' ),
-       'namespacee'              => array( '1', '名前空間E', '名前空間E', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'トーク空間', 'ノート空間', '会話空間', 'トークスペース', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'トーク空間E', 'トーク空間E', 'ノート空間E', '会話空間E', 'ノート空間E', '会話空間E', 'トークスペースE', 'トークスペースE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', '主空間', '標準空間', '記事空間', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', '主空間E', '標準空間E', '標準空間E', '記事空間E', '記事空間E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', '完全なページ名', 'フルページ名', '完全な記事名', '完全記事名', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', '完全なページ名E', 'フルページ名E', 'フルページ名E', '完全なページ名E', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'サブページ名', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'サブページ名E', 'サブページ名E', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', '親ページ名', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', '親ページ名E', '親ページ名E', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'トークページ名', '会話ページ名', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'トークページ名E', '会話ページ名E', '会話ページ名E', 'トークページ名E', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', '主ページ名', '記事ページ名', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', '主ページ名E', '記事ページ名E', '主ページ名E', '記事ページ名E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'メッセージ:', 'MSG:' ),
-       'subst'                   => array( '0', '展開:', '展開:', 'SUBST:' ),
-       'safesubst'               => array( '0', '安全展開:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'ウィキ無効メッセージ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'サムネイル', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', '代替画像=$1', 'サムネイル=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', '右', 'right' ),
-       'img_left'                => array( '1', '左', 'left' ),
-       'img_none'                => array( '1', 'なし', '無し', 'none' ),
-       'img_width'               => array( '1', '$1ピクセル', '$1px' ),
-       'img_center'              => array( '1', '中央', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'フレーム', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'フレームなし', 'frameless' ),
-       'img_page'                => array( '1', 'ページ=$1', 'ページ $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', '右上', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', '境界', 'ボーダー', 'border' ),
-       'img_baseline'            => array( '1', '下線', 'ベースライン', 'baseline' ),
-       'img_sub'                 => array( '1', '下付き', 'sub' ),
-       'img_super'               => array( '1', '上付き', 'super', 'sup' ),
-       'img_top'                 => array( '1', '上端', 'top' ),
-       'img_text_top'            => array( '1', '文上端', 'text-top' ),
-       'img_middle'              => array( '1', '中心', 'middle' ),
-       'img_bottom'              => array( '1', '下端', 'bottom' ),
-       'img_text_bottom'         => array( '1', '文下端', 'text-bottom' ),
-       'img_link'                => array( '1', 'リンク=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', '代替文=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'インターフェース:', 'インタ:', 'インターフェース:', 'インタ:', 'INT:' ),
-       'sitename'                => array( '1', 'サイト名', 'サイトネーム', 'SITENAME' ),
-       'ns'                      => array( '0', '名前空間:', '名前空間:', '名空:', '名空:', 'NS:' ),
-       'nse'                     => array( '0', '名前空間E:', 'NSE:' ),
-       'localurl'                => array( '0', 'ローカルURL:', 'ローカルURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ローカルURLE:', 'ローカルURLE:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', '記事パス', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'サーバー', 'サーバ', 'SERVER' ),
-       'servername'              => array( '0', 'サーバー名', 'サーバーネーム', 'サーバ名', 'サーバネーム', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'スクリプトパス', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'スタイルパス', 'STYLEPATH' ),
-       'grammar'                 => array( '0', '文法:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', '性別:', '性別:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__タイトル変換無効__', '__タイトルコンバート拒否__', '__タイトルコンバート拒否__', '__タイトル非表示__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__内容変換無効__', '__内容変換抑制__', '__内容変換抑制__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', '現在の週', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', '現在の曜日番号', 'CURRENTDOW' ),
-       'localweek'               => array( '1', '地方時の週', '現地週', 'ローカルウィーク', 'LOCALWEEK' ),
-       'localdow'                => array( '1', '地方時の曜日番号', 'LOCALDOW' ),
-       'revisionid'              => array( '1', '版のID', 'リビジョンID', '差分ID', 'リビジョンID', '差分ID', 'REVISIONID' ),
-       'revisionday'             => array( '1', '版の日', 'リビジョン日', '差分日', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', '版の日2', 'リビジョン日2', '差分日2', 'リビジョン日2', '差分日2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', '版の月', 'リビジョン月', '差分月', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', '版の月1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', '版の年', 'リビジョン年', '差分年', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', '版のタイムスタンプ', 'リビジョンタイムスタンプ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', '版の利用者', 'リビジョンユーザー', 'リビジョンユーザ', 'リビジョン利用者', '差分利用者', 'REVISIONUSER' ),
-       'plural'                  => array( '0', '複数:', '複数:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', '完全なURL:', 'フルURL:', '完全なURL:', 'フルURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', '完全なURLE:', 'フルURLE:', '完全なURLE:', 'フルURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', '先頭小文字:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', '先頭大文字:', 'UCFIRST:' ),
-       'lc'                      => array( '0', '小文字:', 'LC:' ),
-       'uc'                      => array( '0', '大文字:', 'UC:' ),
-       'raw'                     => array( '0', '生:', 'RAW:' ),
-       'displaytitle'            => array( '1', '表示タイトル:', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', '生', 'R' ),
-       'newsectionlink'          => array( '1', '__新しい節リンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__新しい節リンク非表示__', '__新しいセクションリンク非表示__', '__新しいセクションリンク非表示__', '__新セクションリンク非表示__', '__新セクションリンク非表示__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', '現在のバージョン', 'ウィキバージョン', 'MediaWikiバージョン', 'メディアウィキバージョン', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLエンコード:', 'URLエンコード:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'アンカー用エンコード', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', '現在のタイムスタンプ', '協定タイムスタンプ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', '地方時のタイムスタンプ', '現地タイムスタンプ', 'ローカルタイムスタンプ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', '方向印', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#言語:', '#言語:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', '内容言語', '記事言語', 'プロジェクト言語', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', '名前空間内ページ数', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', '管理者数', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', '数整形', 'FORMATNUM' ),
-       'padleft'                 => array( '0', '補充左', 'PADLEFT' ),
-       'padright'                => array( '0', '補充右', 'PADRIGHT' ),
-       'special'                 => array( '0', '特別', 'special' ),
-       'defaultsort'             => array( '1', 'デフォルトソート:', 'デフォルトソート:', 'デフォルトソートキー:', 'デフォルトカテゴリソート:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ファイルパス:', 'ファイルパス:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'タグ', 'tag' ),
-       'hiddencat'               => array( '1', '__カテゴリ非表示__', '__カテ非表示__', '__非表示カテ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'カテゴリ内ページ数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ページサイズ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__インデックス__', '__インデックス__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__インデックス拒否__', '__インデックス拒否__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'グループ人数', 'グループ所属人数', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__静的転送__', '__二重転送解消無効__', '__二重転送解消無効__', '__二重転送修正無効__', '__二重転送修正無効__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', '保護レベル', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', '日付整形', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'パス', 'PATH' ),
-       'url_wiki'                => array( '0', 'ウィキ', 'WIKI' ),
-       'url_query'               => array( '0', 'クエリー', 'QUERY' ),
+       'redirect'                  => array( '0', '#転送', '#リダイレクト', '#転送', '#リダイレクト', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__目次非表示__', '__目次非表示__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ギャラリー非表示__', '__ギャラリー非表示__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__目次強制__', '__目次強制__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__目次__', '__目次__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__節編集非表示__', '__セクション編集非表示__', '__セクション編集非表示__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__見出し非表示__', '__見出し非表示__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', '現在の月', '協定月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', '現在の月1', '協定月1', '協定月1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', '現在の月名', '協定月名', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', '現在の月属格', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', '現在の月省略形', '省略協定月', '協定月省略', '協定月省略形', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', '現在の日', '協定日', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', '現在の日2', '協定日2', '協定日2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', '現在の曜日名', '協定曜日', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', '現在の年', '協定年', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', '現在の時刻', '協定時間', '協定時刻', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', '現在の時', '協定時', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', '地方時の月', '現地月', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', '地方時の月1', '現地月1', '現地月1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', '地方時の月名1', '現地月名', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', '地方時の月属格', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', '地方時の月省略形', '省略現地月', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', '地方時の日', '現地日', 'ローカルデイ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', '地方時の日2', '現地日2', '現地日2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', '地方時の曜日名', '現地曜日', 'ローカルデイネーム', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', '地方時の年', '現地年', 'ローカルイヤー', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', '地方時の時刻', '現地時間', 'ローカルタイム', 'LOCALTIME' ),
+       'localhour'                 => array( '1', '地方時の時', '現地時', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ページ数', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', '記事数', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ファイル数', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', '利用者数', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', '活動利用者数', '有効な利用者数', '有効利用者数', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', '編集回数', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', '閲覧回数', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ページ名', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ページ名E', 'ページ名E', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', '名前空間', 'NAMESPACE' ),
+       'namespacee'                => array( '1', '名前空間E', '名前空間E', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'トーク空間', 'ノート空間', '会話空間', 'トークスペース', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'トーク空間E', 'トーク空間E', 'ノート空間E', '会話空間E', 'ノート空間E', '会話空間E', 'トークスペースE', 'トークスペースE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', '主空間', '標準空間', '記事空間', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', '主空間E', '標準空間E', '標準空間E', '記事空間E', '記事空間E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', '完全なページ名', 'フルページ名', '完全な記事名', '完全記事名', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', '完全なページ名E', 'フルページ名E', 'フルページ名E', '完全なページ名E', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'サブページ名', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'サブページ名E', 'サブページ名E', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', '親ページ名', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', '親ページ名E', '親ページ名E', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'トークページ名', '会話ページ名', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'トークページ名E', '会話ページ名E', '会話ページ名E', 'トークページ名E', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', '主ページ名', '記事ページ名', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', '主ページ名E', '記事ページ名E', '主ページ名E', '記事ページ名E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'メッセージ:', 'MSG:' ),
+       'subst'                     => array( '0', '展開:', '展開:', 'SUBST:' ),
+       'safesubst'                 => array( '0', '安全展開:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'ウィキ無効メッセージ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'サムネイル', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', '代替画像=$1', 'サムネイル=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', '右', 'right' ),
+       'img_left'                  => array( '1', '左', 'left' ),
+       'img_none'                  => array( '1', 'なし', '無し', 'none' ),
+       'img_width'                 => array( '1', '$1ピクセル', '$1px' ),
+       'img_center'                => array( '1', '中央', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'フレーム', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'フレームなし', 'frameless' ),
+       'img_page'                  => array( '1', 'ページ=$1', 'ページ $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', '右上', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', '境界', 'ボーダー', 'border' ),
+       'img_baseline'              => array( '1', '下線', 'ベースライン', 'baseline' ),
+       'img_sub'                   => array( '1', '下付き', 'sub' ),
+       'img_super'                 => array( '1', '上付き', 'super', 'sup' ),
+       'img_top'                   => array( '1', '上端', 'top' ),
+       'img_text_top'              => array( '1', '文上端', 'text-top' ),
+       'img_middle'                => array( '1', '中心', 'middle' ),
+       'img_bottom'                => array( '1', '下端', 'bottom' ),
+       'img_text_bottom'           => array( '1', '文下端', 'text-bottom' ),
+       'img_link'                  => array( '1', 'リンク=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', '代替文=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'インターフェース:', 'インタ:', 'インターフェース:', 'インタ:', 'INT:' ),
+       'sitename'                  => array( '1', 'サイト名', 'サイトネーム', 'SITENAME' ),
+       'ns'                        => array( '0', '名前空間:', '名前空間:', '名空:', '名空:', 'NS:' ),
+       'nse'                       => array( '0', '名前空間E:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ローカルURL:', 'ローカルURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ローカルURLE:', 'ローカルURLE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', '記事パス', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'サーバー', 'サーバ', 'SERVER' ),
+       'servername'                => array( '0', 'サーバー名', 'サーバーネーム', 'サーバ名', 'サーバネーム', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'スクリプトパス', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'スタイルパス', 'STYLEPATH' ),
+       'grammar'                   => array( '0', '文法:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', '性別:', '性別:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__タイトル変換無効__', '__タイトルコンバート拒否__', '__タイトルコンバート拒否__', '__タイトル非表示__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__内容変換無効__', '__内容変換抑制__', '__内容変換抑制__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', '現在の週', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', '現在の曜日番号', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', '地方時の週', '現地週', 'ローカルウィーク', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', '地方時の曜日番号', 'LOCALDOW' ),
+       'revisionid'                => array( '1', '版のID', 'リビジョンID', '差分ID', 'リビジョンID', '差分ID', 'REVISIONID' ),
+       'revisionday'               => array( '1', '版の日', 'リビジョン日', '差分日', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', '版の日2', 'リビジョン日2', '差分日2', 'リビジョン日2', '差分日2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', '版の月', 'リビジョン月', '差分月', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', '版の月1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', '版の年', 'リビジョン年', '差分年', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', '版のタイムスタンプ', 'リビジョンタイムスタンプ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', '版の利用者', 'リビジョンユーザー', 'リビジョンユーザ', 'リビジョン利用者', '差分利用者', 'REVISIONUSER' ),
+       'plural'                    => array( '0', '複数:', '複数:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', '完全なURL:', 'フルURL:', '完全なURL:', 'フルURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', '完全なURLE:', 'フルURLE:', '完全なURLE:', 'フルURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', '先頭小文字:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', '先頭大文字:', 'UCFIRST:' ),
+       'lc'                        => array( '0', '小文字:', 'LC:' ),
+       'uc'                        => array( '0', '大文字:', 'UC:' ),
+       'raw'                       => array( '0', '生:', 'RAW:' ),
+       'displaytitle'              => array( '1', '表示タイトル:', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', '生', 'R' ),
+       'newsectionlink'            => array( '1', '__新しい節リンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__新しいセクションリンク__', '__新セクションリンク__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__新しい節リンク非表示__', '__新しいセクションリンク非表示__', '__新しいセクションリンク非表示__', '__新セクションリンク非表示__', '__新セクションリンク非表示__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', '現在のバージョン', 'ウィキバージョン', 'MediaWikiバージョン', 'メディアウィキバージョン', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLエンコード:', 'URLエンコード:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'アンカー用エンコード', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', '現在のタイムスタンプ', '協定タイムスタンプ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', '地方時のタイムスタンプ', '現地タイムスタンプ', 'ローカルタイムスタンプ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', '方向印', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#言語:', '#言語:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', '内容言語', '記事言語', 'プロジェクト言語', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', '名前空間内ページ数', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', '管理者数', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', '数整形', 'FORMATNUM' ),
+       'padleft'                   => array( '0', '補充左', 'PADLEFT' ),
+       'padright'                  => array( '0', '補充右', 'PADRIGHT' ),
+       'special'                   => array( '0', '特別', 'special' ),
+       'defaultsort'               => array( '1', 'デフォルトソート:', 'デフォルトソート:', 'デフォルトソートキー:', 'デフォルトカテゴリソート:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ファイルパス:', 'ファイルパス:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'タグ', 'tag' ),
+       'hiddencat'                 => array( '1', '__カテゴリ非表示__', '__カテ非表示__', '__非表示カテ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'カテゴリ内ページ数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ページサイズ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__インデックス__', '__インデックス__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__インデックス拒否__', '__インデックス拒否__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'グループ人数', 'グループ所属人数', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__静的転送__', '__二重転送解消無効__', '__二重転送解消無効__', '__二重転送修正無効__', '__二重転送修正無効__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', '保護レベル', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', '日付整形', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'パス', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ウィキ', 'WIKI' ),
+       'url_query'                 => array( '0', 'クエリー', 'QUERY' ),
 );
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'リンクの下線',
+'tog-underline' => 'リンクの下線:',
 'tog-justify' => '段落に均等割り付けを設定',
 'tog-hideminor' => '最近の更新に細部の編集を表示しない',
 'tog-hidepatrolled' => '最近の更新に巡回済みの編集を表示しない',
 'tog-newpageshidepatrolled' => '新しいページの一覧に巡回済みのページを表示しない',
 'tog-extendwatchlist' => 'ウォッチリストを拡張し、最新のものだけではなくすべての変更を表示',
-'tog-usenewrc' => '最近の更新とウォッチリストで複数の変更をページごとにまとめる(JavaScriptが必要)',
+'tog-usenewrc' => '最近の更新とウォッチリストで複数の変更をページごとにまとめる (JavaScript が必要)',
 'tog-numberheadings' => '見出しに番号を自動的に振る',
 'tog-showtoolbar' => '編集用のツールバーを表示(JavaScriptが必要)',
 'tog-editondblclick' => 'ダブルクリックで編集(JavaScriptが必要)',
@@ -378,7 +378,7 @@ $messages = array(
 'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする(JavaScriptが必要)',
 'tog-showtoc' => '目次を表示(ページに見出しが4つ以上ある場合)',
 'tog-rememberpassword' => 'このブラウザーにログイン情報を記憶(最大 $1 {{PLURAL:$1|日間}})',
-'tog-watchcreations' => 'è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81¨アップロードしたファイルをウォッチリストに追加',
+'tog-watchcreations' => 'è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84アップロードしたファイルをウォッチリストに追加',
 'tog-watchdefault' => '自分が編集したページやファイルをウォッチリストに追加',
 'tog-watchmoves' => '自分が移動したページやファイルをウォッチリストに追加',
 'tog-watchdeletion' => '自分が削除したページやファイルをウォッチリストに追加',
@@ -391,8 +391,8 @@ $messages = array(
 'tog-enotifminoredits' => 'ページやファイルへの細部の編集でもメールを受け取る',
 'tog-enotifrevealaddr' => '通知メールで自分のメールアドレスを明示',
 'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
-'tog-oldsig' => '既存の署名',
-'tog-fancysig' => '署名をウィキ文として扱う(自動リンクなし)',
+'tog-oldsig' => '既存の署名:',
+'tog-fancysig' => '署名をウィキ文として扱う (自動リンクなし)',
 'tog-externaleditor' => '既定で編集に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
 'tog-externaldiff' => '差分表示に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
 'tog-showjumplinks' => '利用しやすさ向上のための「{{int:jumpto}}」リンクを有効にする',
@@ -401,8 +401,8 @@ $messages = array(
 'tog-watchlisthideown' => 'ウォッチリストに自分の編集を表示しない',
 'tog-watchlisthidebots' => 'ウォッチリストにボットによる編集を表示しない',
 'tog-watchlisthideminor' => 'ウォッチリストに細部の編集を表示しない',
-'tog-watchlisthideliu' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81®編集を表示しない',
-'tog-watchlisthideanons' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81®編集を表示しない',
+'tog-watchlisthideliu' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8b編集を表示しない',
+'tog-watchlisthideanons' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8b編集を表示しない',
 'tog-watchlisthidepatrolled' => 'ウォッチリストに巡回済みの編集を表示しない',
 'tog-ccmeonemails' => '他の利用者に送信したメールの控えを自分にも送信',
 'tog-diffonly' => '差分の下にページ内容を表示しない',
@@ -415,7 +415,7 @@ $messages = array(
 'underline-default' => 'ブラウザーの設定を使用',
 
 # Font style option in Special:Preferences
-'editfont-style' => '編集エリアのフォントスタイル:',
+'editfont-style' => '編集エリアのフォント:',
 'editfont-default' => 'ブラウザーの設定を使用',
 'editfont-monospace' => '等幅フォント',
 'editfont-sansserif' => 'Sans Serif フォント',
@@ -483,7 +483,7 @@ $messages = array(
 'hidden-category-category' => '隠しカテゴリ',
 'category-subcat-count' => '{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには $2 下位カテゴリが含まれており、そのうち以下の {{PLURAL:$1|$1 下位カテゴリ}}を表示しています。}}',
 'category-subcat-count-limited' => 'このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|&#32;$1 下位カテゴリ}}が含まれています。',
-'category-article-count' => '{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の {{PLURAL:$1|$1 ページ}}を表示しています。}}',
+'category-article-count' => '{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の $1 ページを表示しています。}}',
 'category-article-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ページ|&#32;$1 ページ}}が含まれています。',
 'category-file-count' => '{{PLURAL:$2|このカテゴリには以下のファイルのみが含まれています。|このカテゴリには $2 ファイルが含まれており、そのうち以下の {{PLURAL:$1|$1 ファイル}}を表示しています。}}',
 'category-file-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ファイル|&#32;$1 ファイル}}が含まれています。',
@@ -494,7 +494,7 @@ $messages = array(
 
 'about' => '解説',
 'article' => '本文',
-'newwindow' => '(新しいウィンドウが開きます)',
+'newwindow' => '(新しいウィンドウで開きます)',
 'cancel' => '中止',
 'moredotdotdot' => '続き...',
 'mypage' => '自分のページ',
@@ -519,9 +519,9 @@ $messages = array(
 'vector-action-delete' => '削除',
 'vector-action-move' => '移動',
 'vector-action-protect' => '保護',
-'vector-action-undelete' => '復帰',
+'vector-action-undelete' => '復å\85\83',
 'vector-action-unprotect' => '保護再設定',
-'vector-simplesearch-preference' => '検索語の提案機能を拡張(ベクター外装のみ)',
+'vector-simplesearch-preference' => '簡素化した検索バーを有効にする (ベクター外装のみ)',
 'vector-view-create' => '作成',
 'vector-view-edit' => '編集',
 'vector-view-history' => '履歴表示',
@@ -532,7 +532,7 @@ $messages = array(
 'variants' => '変種',
 
 'errorpagetitle' => 'エラー',
-'returnto' => '$1に戻る。',
+'returnto' => '$1 に戻る。',
 'tagline' => '提供:{{SITENAME}}',
 'help' => 'ヘルプ',
 'search' => '検索',
@@ -541,7 +541,7 @@ $messages = array(
 'searcharticle' => '表示',
 'history' => 'ページの履歴',
 'history_short' => '履歴',
-'updatedmarker' => '最後の訪問以降に更新されました',
+'updatedmarker' => '最終閲覧以降に変更されました',
 'printableversion' => '印刷用バージョン',
 'permalink' => 'この版への固定リンク',
 'print' => '印刷',
@@ -552,7 +552,7 @@ $messages = array(
 'create-this-page' => 'このページを作成',
 'delete' => '削除',
 'deletethispage' => 'このページを削除',
-'undelete_short' => '{{PLURAL:$1|$1 ç·¨é\9b\86}}ã\82\92復帰',
+'undelete_short' => '{{PLURAL:$1|$1 ç·¨é\9b\86}}ã\82\92復å\85\83',
 'viewdeleted_short' => '{{PLURAL:$1|削除された $1 編集}}を閲覧',
 'protect' => '保護',
 'protect_change' => '設定変更',
@@ -578,12 +578,12 @@ $messages = array(
 'categorypage' => 'カテゴリのページを表示',
 'viewtalkpage' => '議論を表示',
 'otherlanguages' => '他言語版',
-'redirectedfrom' => '($1から転送)',
-'redirectpagesub' => 'リダイレクトページ',
-'lastmodifiedat' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81\8cæ\9c\80å¾\8cã\81«æ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\81®は $1 $2 です。',
+'redirectedfrom' => '($1から転送)',
+'redirectpagesub' => '転送ページ',
+'lastmodifiedat' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®æ\9c\80çµ\82æ\9b´æ\96°æ\97¥æ\99\82は $1 $2 です。',
 'viewcount' => 'このページは {{PLURAL:$1|$1 回}}アクセスされました。',
 'protectedpage' => '保護されたページ',
-'jumpto' => '移動',
+'jumpto' => '移動:',
 'jumptonavigation' => '案内',
 'jumptosearch' => '検索',
 'view-pool-error' => '申し訳ありませんが、現在サーバーに過大な負荷がかかっています。
@@ -625,7 +625,7 @@ $1',
 
 'ok' => 'OK',
 'retrievedfrom' => '「$1」から取得',
-'youhavenewmessages' => '$1があります($2)。',
+'youhavenewmessages' => '$1があります ($2)。',
 'newmessageslink' => '新着メッセージ',
 'newmessagesdifflink' => '最終更新の差分',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|他の利用者|$3 人の利用者}}からの$1があります ($2)。',
@@ -644,9 +644,9 @@ $1',
 'hidetoc' => '非表示',
 'collapsible-collapse' => '折り畳む',
 'collapsible-expand' => '展開する',
-'thisisdeleted' => '$1ã\82\92é\96²è¦§ã\81¾ã\81\9fã\81¯å¾©å¸°しますか?',
+'thisisdeleted' => '$1ã\82\92é\96²è¦§ã\81¾ã\81\9fã\81¯å¾©å\85\83しますか?',
 'viewdeleted' => '$1を閲覧しますか?',
-'restorelink' => '{{PLURAL:$1|削除された $1 編集}}',
+'restorelink' => '{{PLURAL:$1|削除された$1編集}}',
 'feedlinks' => 'フィード:',
 'feed-invalid' => 'フィード形式の指定が正しくありません。',
 'feed-unavailable' => 'フィードの配信は利用できません',
@@ -654,9 +654,11 @@ $1',
 'site-atom-feed' => '$1のAtomフィード',
 'page-rss-feed' => '「$1」のRSSフィード',
 'page-atom-feed' => '「$1」のAtomフィード',
+'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1(存在しないページ)',
-'sort-descending' => '降順に整列',
-'sort-ascending' => '昇順に整列',
+'sort-descending' => '降順に並べ替え',
+'sort-ascending' => '昇順に並べ替え',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ページ',
@@ -683,14 +685,14 @@ URL を間違って入力したか、正しくないリンクをたどった可
 # General errors
 'error' => 'エラー',
 'databaseerror' => 'データベース エラー',
-'dberrortext' => 'データベースクエリーの構文エラーが発生しました。
+'dberrortext' => 'データベース クエリの構文エラーが発生しました。
 ソフトウェアにバグがある可能性があります。
-最後に実行を試みたクエリー:
+最後に実行を試みたクエリ:
 <blockquote><code>$1</code></blockquote>
 (関数「<code>$2</code>」内)。
 データベースはエラー「<samp>$3:$4</samp>」を返しました。',
-'dberrortextcl' => 'データベースクエリーの構文エラーが発生しました。
-最後に実行を試みたクエリー:
+'dberrortextcl' => 'データベース クエリの構文エラーが発生しました。
+最後に実行を試みたクエリ:
 「$1」
 (関数「$2」内)。
 データベースはエラー「$3:$4」を返しました',
@@ -700,14 +702,14 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'readonlytext' => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。
 
 データベースをロックした管理者による説明は以下の通りです:$1',
-'missing-article' => 'æ±\82ã\82\81ã\82\89れたページ「$1」$2 の本文がデータベース内で見つかりませんでした。
+'missing-article' => 'æ\8c\87å®\9aã\81\95れたページ「$1」$2 の本文がデータベース内で見つかりませんでした。
 
 通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。
 
 それ以外の操作でこのメッセージが表示された場合、ソフトウェアのバグである可能性があります。
-[[Special:ListUsers/sysop|管理者]]までそのURLを添えてお知らせください。',
-'missingarticle-rev' => '(版番号:$1)',
-'missingarticle-diff' => '(差分:$1、$2)',
+[[Special:ListUsers/sysop|管理者]]までその URL を添えてお知らせください。',
+'missingarticle-rev' => '(版番号: $1)',
+'missingarticle-diff' => '(差分: $1, $2)',
 'readonly_lag' => 'データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています',
 'internalerror' => '内部エラー',
 'internalerror_info' => '内部エラー:$1',
@@ -734,9 +736,9 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'perfcachedts' => '以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。',
 'querypage-no-updates' => 'ページの更新は無効になっています。
 以下のデータの更新は現在行われていません。',
-'wrong_wfQuery_params' => 'wfQuery()に正しくないパラメーターが渡されました<br />
-関数$1<br />
-クエリー:$2',
+'wrong_wfQuery_params' => 'wfQuery() のパラメーターが無効です<br />
+関数$1<br />
+クエリ$2',
 'viewsource' => 'ソースを表示',
 'viewsource-title' => '$1のソースを表示',
 'actionthrottled' => '操作が速度規制されました',
@@ -745,11 +747,12 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'protectedpagetext' => 'このページは編集できないように保護されています。',
 'viewsourcetext' => 'このページのソースの閲覧やコピーができます:',
 'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます:",
-'protectedinterface' => 'このページはソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。',
-'editinginterface' => "'''警告:'''ソフトウェアのインターフェイスの文章として使用しているページを編集しています。
-このページの変更は他の利用者のユーザーインターフェイスの外観に影響します。
-翻訳する場合、MediaWiki のローカライズプロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] の使用を検討してください。",
-'sqlhidden' => '(SQLクエリー非表示)',
+'protectedinterface' => 'このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。
+すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。',
+'editinginterface' => "'''警告:''' ソフトウェアのインターフェイスに使用されるのテキストのページを編集しています。
+このページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。
+すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+'sqlhidden' => '(SQL クエリ非表示)',
 'cascadeprotected' => 'このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:
 $2',
 'namespaceprotected' => "'''$1'''名前空間にあるページを編集する権限がありません。",
@@ -761,6 +764,8 @@ $2',
 'filereadonlyerror' => 'ファイルリポジトリ「$2」が読み取り専用の状態にあるため、ファイル「$1」を変更できません。
 
 読み取り専用に設定した管理者からの説明:「$3」',
+'invalidtitle-knownnamespace' => '名前空間名「$2」と名前「$3」の組み合わせはページ名として無効です',
+'invalidtitle-unknownnamespace' => '不明な名前空間番号 $1 と名前「$2」の組み合わせはページ名として無効です',
 'exception-nologin' => 'ログインしていません',
 'exception-nologin-text' => 'このページまたは操作には、このウィキへのログインが必要です。',
 
@@ -772,19 +777,19 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ログアウトしました。'''
 
-このまま匿名で{{SITENAME}}の使用を続行できます。同じまたは別の利用者として[[Special:UserLogin|もう一度ログイン]]することもできます。
+このまま匿名で{{SITENAME}}の使用を続行できます。同じまたは別の利用者として<span class='plainlinks'>[$1 もう一度ログイン]</span>することもできます。
 なお、ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
 'welcomecreation' => '== ようこそ、$1 さん! ==
 アカウントが作成されました。
 [[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
-'yourname' => '利用者名',
-'yourpassword' => 'パスワード',
-'yourpasswordagain' => 'パスワード再入力',
+'yourname' => '利用者名:',
+'yourpassword' => 'パスワード:',
+'yourpasswordagain' => 'パスワード再入力:',
 'remembermypassword' => 'このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})',
 'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持',
-'yourdomainname' => 'ドメイン',
+'yourdomainname' => 'ドメイン:',
 'password-change-forbidden' => 'このウィキではパスワードを変更できません。',
-'externaldberror' => '外部の認証データベースでエラーが発生したか、または外部アカウント情報の更新が許可されていません。',
+'externaldberror' => '認証データベースでエラーが発生した、または外部アカウントの更新が許可されていません。',
 'login' => 'ログイン',
 'nav-login-createaccount' => 'ログインまたはアカウント作成',
 'loginprompt' => '{{SITENAME}}にログインするにはCookieを有効にする必要があります。',
@@ -807,14 +812,15 @@ $2',
 'loginerror' => 'ログインのエラー',
 'createaccounterror' => 'アカウントを作成できませんでした: $1',
 'nocookiesnew' => '利用者アカウントは作成されましたが、ログインしていません。
-{{SITENAME}}ではログインにCookieを使用します。
\81\94使ç\94¨ã\81®ã\83\96ã\83©ã\82¦ã\82¶ã\81§ã\81¯Cookieが無効になっています。
-Cookieを有効にしてから、新しい利用者名とパスワードでログインしてください。',
+{{SITENAME}}では利用者のログインに Cookie を使用します。
\81\94使ç\94¨ã\81®ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§ã\81¯ Cookie が無効になっています。
+Cookie を有効にしてから、新しい利用者名とパスワードでログインしてください。',
 'nocookieslogin' => '{{SITENAME}}ではログインにCookieを使用します。
 Cookieを無効にしているようです。
 Cookieを有効にしてから、もう一度試してください。',
 'nocookiesfornew' => '発信元を確認できなかったため、アカウントは作成されませんでした。
 Cookieを有効にしていることを確認して、このページを再読込してもう一度試してください。',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => '利用者名を正しく指定していません。',
 'loginsuccesstitle' => 'ログイン成功',
 'loginsuccess' => "'''{{SITENAME}}に「$1」としてログインしました。'''",
@@ -834,7 +840,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'password-login-forbidden' => 'この利用者名とパスワードの使用は禁止されています。',
 'mailmypassword' => '新しいパスワードをメールで送信',
 'passwordremindertitle' => '{{SITENAME}}の仮パスワード通知',
-'passwordremindertext' => '誰か(おそらくあなた)がIPアドレス$1から{{SITENAME}}($4)のログイン用パスワードの再発行を申請しました。
+'passwordremindertext' => '誰か(おそらくあなた)がIPアドレス$1から{{SITENAME}} ($4) のログイン用パスワードの再発行を申請しました。
 利用者「$2」の仮パスワードが作成され「$3」に設定されました。
 もしあなたがこの申請をしたのであれば、ログインして新しいパスワードを決めてください。
 この仮パスワードは {{PLURAL:$5|$5 日間}}で有効期限が切れます。
@@ -886,9 +892,9 @@ Cookieを有効にしていることを確認して、このページを再読
 'resetpass_announce' => 'メールでお送りした仮パスワードでログインしました。
 ログインを完了するには、ここで新しいパスワードを設定する必要があります:',
 'resetpass_text' => '<!-- ここに文を挿入 -->',
-'resetpass_header' => 'ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92変更',
-'oldpassword' => '古いパスワード',
-'newpassword' => '新しいパスワード',
+'resetpass_header' => 'ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®変更',
+'oldpassword' => '古いパスワード:',
+'newpassword' => '新しいパスワード:',
 'retypenew' => '新しいパスワードを再入力:',
 'resetpass_submit' => '再設定してログイン',
 'resetpass_success' => 'パスワードの変更に成功しました!
@@ -899,7 +905,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'resetpass-submit-cancel' => '中止',
 'resetpass-wrong-oldpass' => '仮パスワードまたは現在のパスワードが正しくありません。
 パスワードを既に変更した、または新しい仮パスワードを依頼した可能性があります。',
-'resetpass-temp-password' => '仮パスワード',
+'resetpass-temp-password' => '仮パスワード:',
 
 # Special:PasswordReset
 'passwordreset' => 'パスワードの再設定',
@@ -907,11 +913,11 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordreset-legend' => 'パスワードの再設定',
 'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
 'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
-'passwordreset-username' => '利用者名',
-'passwordreset-domain' => 'ドメイン',
+'passwordreset-username' => '利用者名:',
+'passwordreset-domain' => 'ドメイン:',
 'passwordreset-capture' => '送信されるメールの内容を表示しますか?',
 'passwordreset-capture-help' => 'このボックスにチェックを入れると、利用者に送信されるメールの内容(仮パスワードを含む)をあなたも閲覧できます。',
-'passwordreset-email' => 'メールアドレス',
+'passwordreset-email' => 'メールアドレス:',
 'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
 'passwordreset-emailtext-ip' => 'どなたか(おそらくあなた、IP アドレス $1)が {{SITENAME}} ($4) での
 あなたのアカウントの詳細情報を送信するよう申請しました。
@@ -1006,7 +1012,7 @@ $2
 ただし、[[Special:Preferences|個人設定]]で有効なメールアドレスが登録されていない場合、またはメール送信機能の使用がブロックされている場合、「この利用者にメールを送信」の機能は使えません。
 現在ご使用中のIPアドレスは$3、このブロックIDは#$5です。
 お問い合わせの際には、上記の情報を必ず書いてください。",
-'autoblockedtext' => "ã\81\94使ç\94¨ä¸­ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81¯ã\80\81$1ã\81«ã\82\88ã\81£ã\81¦æ\8a\95稿ã\82\92ã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81«ã\82\88ã\81£ã\81¦ä½¿ç\94¨ã\81\95ã\82\8cã\81\9fã\81\9fã\82\81ã\81«自動的にブロックされています。
+'autoblockedtext' => "ã\81\93ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81¯ã\80\81$1ã\81«ã\82\88ã\82\8aã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81«ã\82\88ã\81£ã\81¦ä½¿ç\94¨ã\81\95ã\82\8cã\81\9fã\81\9fã\82\81ã\80\81自動的にブロックされています。
 理由は次の通りです。
 
 :''$2''
@@ -1015,12 +1021,12 @@ $2
 * ブロック解除予定:$6
 * 意図されているブロック対象者:$7
 
-$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのについて問い合わせることができます。
+$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。
 
 ただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、メール送信機能が使えないことに注意してください。
 
 現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。
\81\8aå\95\8fã\81\84å\90\88ã\82\8fã\81\9bã\81®é\9a\9bã\81«ã\81¯ã\80\81ã\81\93の情報を必ず書いてください。",
\81\8aå\95\8fã\81\84å\90\88ã\82\8fã\81\9bã\81®é\9a\9bã\81¯ã\80\81ä¸\8aè¨\98の情報を必ず書いてください。",
 'blockednoreason' => '理由が設定されていません',
 'whitelistedittext' => 'このページを編集するには$1する必要があります。',
 'confirmedittext' => 'ページの編集を始める前にメールアドレスの確認をする必要があります。
@@ -1036,18 +1042,23 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこの件につ
 
 この新アカウントのパスワードは、ログインした際に''[[Special:ChangePassword|パスワード変更]]''ページで変更できます。",
 'newarticle' => '(新)',
-'newarticletext' => "ã\81¾ã\81 å­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83³ã\82¯ã\82\92ã\81\9fã\81©ã\82\8aã\81¾ã\81\97ã\81\9fã\80\82
-このページを新規に作成するには、下のボックスに内容を書き込んでください(詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)
+'newarticletext' => "まだ存在しないページへのリンクをたどりました。
+このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプ ページ]]を参照してください)
 誤ってこのページにたどり着いた場合には、ブラウザーの'''戻る'''ボタンで前のページに戻ってください。",
 'anontalkpagetext' => "----''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。
 匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。
 IP アドレスは複数の利用者で共有されている場合があります。
 もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられている考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。''",
 'noarticletext' => '現在このページには内容がありません。
-他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]するか、
-[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]</span>することができます。',
-'noarticletext-nopermission' => '現在このページには内容がありません。他のページに含まれる[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、もしくは<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索]</span>することができます。',
+他のページ内で[[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-view' => '利用者アカウント「$1」は登録されていません。',
@@ -1075,7 +1086,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'previewnote' => "'''これはプレビューです。'''
 変更箇所はまだ保存されていません!",
 'continue-editing' => '編集を続行',
-'previewconflict' => 'ã\81\93ã\81®ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81¯ã\80\81ä¸\8aã\81®æ\96\87ç« ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81®æ\96\87ç« ã\82\92ä¿\9då­\98ã\81\97ã\81\9få ´å\90\88ã\81«ã\81©ã\81\86è¦\8bã\81\88ã\82\8bã\82\88ã\81\86ã\81«ã\81ªã\82\8bã\81\8bã\82\92示ã\81\99ã\82\82ã\81®です。',
+'previewconflict' => 'ã\81\93ã\82\8cã\81¯ã\80\81ä¸\8aã\81®ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81®æ\96\87ç« ã\82\92ä¿\9då­\98ã\81\97ã\81\9få ´å\90\88ã\81«ã\81©ã\81\86表示ã\81\95ã\82\8cã\82\8bã\81\8bã\82\92示ã\81\99ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼です。',
 'session_fail_preview' => "'''申し訳ありません!セッションデータが消失したため編集を処理できませんでした。'''
 もう一度やり直してください。
 それでも失敗する場合、[[Special:UserLogout|ログアウト]]してからログインし直してください。",
@@ -1142,11 +1153,11 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'sectioneditnotsupported-text' => 'このページでは節単位編集はサポートされません。',
 'permissionserrors' => '認証エラー',
 'permissionserrorstext' => 'あなたにはこの操作を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
-'permissionserrorstext-withaction' => 'あなたには「$2」を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです',
+'permissionserrorstext-withaction' => 'あなたには「$2」を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
 'recreate-moveddeleted-warn' => "'''警告:以前削除されたページを再作成しようとしています。'''
 
 このページの編集を続行するのが適切かどうかご確認ください。
\8f\82è\80\83ã\81®ã\81\9fã\82\81以ä¸\8bã\81«ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\81¨ç§»å\8b\95ã\81®è¨\98é\8c²ã\82\92表示します:",
\8f\82è\80\83ã\81¾ã\81§ã\81«ã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\81¨ç§»å\8b\95ã\81®è¨\98é\8c²ã\82\92以ä¸\8bã\81«示します:",
 'moveddeleted-notice' => 'このページは削除されています。
 参考のため、このページの削除と移動の記録を以下に表示します。',
 'log-fulllog' => '完全な記録を閲覧',
@@ -1187,7 +1198,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。',
 'undo-failure' => '中間の版での編集と競合したため、取り消せませんでした。',
 'undo-norev' => '取り消そうとした編集が存在しないか削除済みのため取り消せませんでした。',
-'undo-summary' => '[[Special:Contributions/$2|$2]]([[User talk:$2|トーク]])による第$1版を取り消し',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による版 $1 を取り消し',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'アカウントを作成できません',
@@ -1196,7 +1207,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 $3が示した理由:''$2''",
 
 # History pages
-'viewpagelogs' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81«é\96¢ã\81\99ã\82\8b記録を閲覧',
+'viewpagelogs' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®記録を閲覧',
 'nohistory' => 'このページには編集履歴がありません。',
 'currentrev' => '最新版',
 'currentrev-asof' => '$1時点における最新版',
@@ -1217,7 +1228,7 @@ $3が示した理由:''$2''",
 'histfirst' => '最古',
 'histlast' => '最新',
 'historysize' => '({{PLURAL:$1|$1バイト}})',
-'historyempty' => '(空)',
+'historyempty' => '(空)',
 
 # Revision feed
 'history-feed-title' => '変更履歴',
@@ -1229,8 +1240,8 @@ $3が示した理由:''$2''",
 
 # Revision deletion
 'rev-deleted-comment' => '(要約は除去されています)',
-'rev-deleted-user' => '(利用者名は除去されています)',
-'rev-deleted-event' => '(記録は除去されています)',
+'rev-deleted-user' => '(利用者名は除去されています)',
+'rev-deleted-event' => '(記録は除去されています)',
 'rev-deleted-user-contribs' => '[利用者名またはIPアドレスは除去されました - その編集は投稿記録で非表示にされています]',
 'rev-deleted-text-permission' => "この版は'''削除されています'''。
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
@@ -1259,21 +1270,21 @@ $3が示した理由:''$2''",
 この差分を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
 'rev-delundel' => '表示/非表示',
 'rev-showdeleted' => '表示',
-'revisiondelete' => 'ç\89\88ã\81®å\89\8aé\99¤ã\81¨å¾©å¸°',
+'revisiondelete' => 'ç\89\88ã\81®å\89\8aé\99¤ã\81¨å¾©å\85\83',
 'revdelete-nooldid-title' => '無効な対象版',
 'revdelete-nooldid-text' => 'この操作の対象となる版を指定していないか、指定した版が存在していないか、あるいは最新版を非表示しようとしています。',
 'revdelete-nologtype-title' => '記録の種類を指定していません',
 'revdelete-nologtype-text' => 'この操作を実行する記録の種類を指定していません。',
 'revdelete-nologid-title' => '無効な記録項目',
-'revdelete-nologid-text' => 'この操作の対象となる記録項目を指定していないか、あるいは指定した項目が存在しません。',
+'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' => "'''削除された版や記録はページの履歴や記録に表示され続けますが、一般の利用者はその内容にアクセスできなくなります。'''
-追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\82\82ã\81\93ã\82\8cã\81¨å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\82\92使ç\94¨ã\81\97ã\81¦é\9a ã\81\95ã\82\8cã\81\9få\86\85容ã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\97ã\81\9fã\82\8aã\80\81復å\85\83ã\81\97ã\81\9fã\82\8aできます。",
-'revdelete-confirm' => 'この操作を意図して行っていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に沿って行っていることを確認してください。',
+'logdelete-selected' => "'''{{PLURAL:$1|選択された記録項目}}:'''",
+'revdelete-text' => "'''削除された版や記録項目は引き続きページの履歴や記録に表示されますが、一般利用者はその内容の一部を取得できなくなります。'''
+追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\81¯å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\82\92使ã\81£ã\81¦é\9d\9e表示ã\81®å\86\85容ã\81®å\8f\96å¾\97ã\82\84復å\85\83ã\81\8cできます。",
+'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
 'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
 * 名誉毀損の恐れのある記述
 * 非公開個人情報
@@ -1314,7 +1325,8 @@ $1",
 'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しました:あなたが変更しようとしている間に、他の誰かが変更したようです。
 記録を確認してください。',
 'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました:他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
-'revdelete-reason-dropdown' => '*よくある削除理由
+'revdelete-reason-dropdown' => '
+*よくある削除理由
 ** 著作権侵害
 ** 名誉毀損のおそれ
 ** 非公開個人情報',
@@ -1329,7 +1341,7 @@ $1",
 現在操作できる追放とブロックの一覧については[[Special:BlockList|ブロックの一覧]]を参照してください。',
 
 # History merging
-'mergehistory' => 'ページ履歴の統合',
+'mergehistory' => 'ページ履歴の統合',
 'mergehistory-header' => 'このページでは、ある元ページの履歴を新しいページに統合できます。
 この変更を行ってもページの履歴の連続性が確実に保たれるようにしてください。',
 'mergehistory-box' => '2ページの過去の版を統合する:',
@@ -1370,6 +1382,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) が見つかりませんでした。
+
+通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 
+詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。',
 
 # Search results
 'searchresults' => '検索結果',
@@ -1387,7 +1403,7 @@ $1",
 'prevn-title' => '前の{{PLURAL:$1|$1結果}}',
 'nextn-title' => '次の{{PLURAL:$1|$1結果}}',
 'shown-title' => 'ページあたり{{PLURAL:$1|$1件の結果}}を表示',
-'viewprevnext' => '($1{{int:pipe-separator}}$2)($3)を表示',
+'viewprevnext' => '($1{{int:pipe-separator}}$2) ($3 件) を表示',
 'searchmenu-legend' => '検索オプション',
 'searchmenu-exists' => "'''このウィキには「[[:$1]]」という名前のページがあります'''",
 'searchmenu-new' => "'''このウィキでページ「[[:$1]]」を新規作成する'''",
@@ -1406,31 +1422,29 @@ $1",
 'search-result-size' => '$1({{PLURAL:$2|$2単語}})',
 'search-result-category-size' => '{{PLURAL:$1|$1件}}({{PLURAL:$2|$2下位カテゴリ}}、{{PLURAL:$3|$3ファイル}})',
 'search-result-score' => '関連度:$1%',
-'search-redirect' => '($1からのリダイレクト)',
-'search-section' => '($1の節)',
+'search-redirect' => '($1からのリダイレクト)',
+'search-section' => '($1の節)',
 'search-suggest' => 'もしかして:$1',
 'search-interwiki-caption' => '姉妹プロジェクト',
 'search-interwiki-default' => '$1の結果:',
 'search-interwiki-more' => '(続き)',
-'search-mwsuggest-enabled' => '検索候補を表示',
-'search-mwsuggest-disabled' => '検索候補を表示しない',
 'search-relatedarticle' => '関連',
 'mwsuggest-disable' => 'Ajaxによる検索候補の提示を無効にする',
 'searcheverything-enable' => 'すべての名前空間を検索',
 'searchrelated' => '関連',
 'searchall' => 'すべて',
-'showingresults' => "'''$2'''件目以降の{{PLURAL:$1|'''$1'''件の結果}}を表示しています。",
-'showingresultsnum' => "'''$2'''件目以降の{{PLURAL:$3|'''$3'''件の結果}}を表示しています。",
-'showingresultsheader' => "ã\80\8c'''$4'''ã\80\8dã\81«å¯¾ã\81\99ã\82\8b{{PLURAL:$5|'''$3'''件中ã\81®'''$1'''件ã\81®çµ\90æ\9e\9c|'''$3'''件中ã\81®'''$1'''件ç\9b®ã\81\8bã\82\89'''$2'''件ç\9b®ã\81®çµ\90æ\9e\9c}}",
+'showingresults' => "'''$2''' 件目以降の {{PLURAL:$1|'''$1''' 件の結果}}を表示しています。",
+'showingresultsnum' => "'''$2''' 件目以降の {{PLURAL:$3|'''$3''' 件の結果}}を表示しています。",
+'showingresultsheader' => "ã\80\8c'''$4'''ã\80\8dã\81®æ¤\9cç´¢çµ\90æ\9e\9c {{PLURAL:$5|'''$3''' ä»¶ä¸­ã\81® '''$1''' ä»¶ç\9b®|'''$3''' ä»¶ä¸­ã\81® '''$1''' ä»¶ç\9b®ã\81\8bã\82\89 '''$2''' ä»¶ç\9b®}}",
 'nonefound' => "'''注意''':既定では一部の名前空間のみを検索します。
 ''all:''を前に付けると、すべて(トークページやテンプレートなどを含む)を対象にできます。検索する名前空間を前に付けることもできます。",
 'search-nonefound' => '問い合わせに合致する検索結果はありませんでした。',
 'powersearch' => '高度な検索',
 'powersearch-legend' => '高度な検索',
-'powersearch-ns' => '名前空間を指定して検索',
-'powersearch-redir' => 'リダイレクトを表示',
-'powersearch-field' => '検索対象',
-'powersearch-togglelabel' => 'チェックを入れる',
+'powersearch-ns' => '名前空間を指定して検索:',
+'powersearch-redir' => '転送ページを含める',
+'powersearch-field' => '検索対象',
+'powersearch-togglelabel' => 'チェックを入れる:',
 'powersearch-toggleall' => 'すべて',
 'powersearch-togglenone' => 'すべて外す',
 'search-external' => '外部検索',
@@ -1450,7 +1464,7 @@ $1",
 # Preferences page
 'preferences' => '個人設定',
 'mypreferences' => '個人設定',
-'prefs-edits' => '編集回数',
+'prefs-edits' => '編集回数:',
 'prefsnologin' => 'ログインしていません',
 'prefsnologintext' => '個人設定を変更するためには<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ログイン]</span>する必要があります。',
 'changepassword' => 'パスワードの変更',
@@ -1464,11 +1478,11 @@ $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-watchlist-token' => 'ウォッチリストのトークン:',
 'prefs-misc' => 'その他',
 'prefs-resetpass' => 'パスワードの変更',
 'prefs-changeemail' => 'メールアドレスを変更',
@@ -1480,26 +1494,26 @@ $1",
 'restoreprefs' => '初期設定に戻す',
 'prefs-editing' => '編集',
 'prefs-edit-boxsize' => '編集ウィンドウのサイズ。',
-'rows' => '行数',
-'columns' => '列数',
+'rows' => '行数:',
+'columns' => '列数:',
 'searchresultshead' => '検索',
 'resultsperpage' => '1ページあたりの表示件数:',
 'stub-threshold' => '<a href="#" class="stub">スタブリンク</a>として表示する閾値 (バイト):',
 'stub-threshold-disabled' => '無効',
-'recentchangesdays' => '最近の更新に表示する日数',
-'recentchangesdays-max' => '(最大 $1 {{PLURAL:$1|日間}})',
-'recentchangescount' => '既定で表示する件数',
+'recentchangesdays' => '最近の更新に表示する日数:',
+'recentchangesdays-max' => '(最大 $1 {{PLURAL:$1|日|日間}})',
+'recentchangescount' => '既定で表示する件数:',
 'prefs-help-recentchangescount' => 'この設定は最近の更新、ページの履歴、および記録に適用されます。',
 'prefs-help-watchlist-token' => 'この欄に秘密鍵を入力すると、あなたのウォッチリストのRSSフィードが生成されます。
 この欄に入力されている鍵を知っている人は誰でもこのウォッチリストを閲覧できるようになるため、他人に分からない値を選んでください。
 乱数によって生成された次の値を使うこともできます:$1',
 'savedprefs' => '個人設定を保存しました。',
-'timezonelegend' => 'タイムゾーン',
-'localtime' => 'ローカルの時刻',
+'timezonelegend' => 'タイムゾーン:',
+'localtime' => 'ローカルの時刻:',
 'timezoneuseserverdefault' => 'ウィキの既定を使用 ($1)',
 'timezoneuseoffset' => 'その他(時差を指定)',
-'timezoneoffset' => '時差¹',
-'servertime' => 'サーバーの時刻',
+'timezoneoffset' => '時差¹:',
+'servertime' => 'サーバーの時刻:',
 'guesstimezone' => 'ブラウザーの設定から入力',
 'timezoneregion-africa' => 'アフリカ',
 'timezoneregion-america' => 'アメリカ',
@@ -1512,34 +1526,36 @@ $1",
 'timezoneregion-indian' => 'インド洋',
 'timezoneregion-pacific' => '太平洋',
 'allowemail' => '他の利用者からのメールを受け取る',
-'prefs-searchoptions' => '検索設定',
+'prefs-searchoptions' => '検索',
 'prefs-namespaces' => '名前空間',
-'defaultns' => 'または次の名前空間のみを検索:',
+'defaultns' => '指定した名前空間のみを検索:',
 'default' => '既定',
 'prefs-files' => 'ファイル',
 'prefs-custom-css' => 'カスタムCSS',
 'prefs-custom-js' => 'カスタムJS',
-'prefs-common-css-js' => '全外装に共通のCSSとJavaScript:',
+'prefs-common-css-js' => 'すべての外装に共通のCSSとJavaScript:',
 'prefs-reset-intro' => 'このページを使用すると、自分の個人設定をこのサイトの初期設定に戻せます。
 この操作は取り消せません。',
-'prefs-emailconfirm-label' => 'メール確認:',
+'prefs-emailconfirm-label' => 'メールアドレスの確認:',
 'prefs-textboxsize' => '編集画面の大きさ',
-'youremail' => 'メールアドレス:',
-'username' => '利用者名:',
-'uid' => '利用者ID:',
-'prefs-memberingroups' => '所属する{{PLURAL:$1|グループ}}:',
-'prefs-registration' => '登録日時:',
-'yourrealname' => '本名:',
-'yourlanguage' => '使用言語:',
-'yourvariant' => 'コンテンツ言語変種:',
+'youremail' => 'メールアドレス:',
+'username' => '利用者名:',
+'uid' => '利用者 ID:',
+'prefs-memberingroups' => '所属{{PLURAL:$1|グループ}}:',
+'prefs-memberingroups-type' => '$1',
+'prefs-registration' => '登録日時:',
+'prefs-registration-date-time' => '$1',
+'yourrealname' => '本名:',
+'yourlanguage' => '使用言語:',
+'yourvariant' => 'コンテンツ言語変種:',
 'prefs-help-variant' => 'このウィキのコンテンツに表示に使用したい言語変種または正書法。',
-'yournick' => '新しい署名',
+'yournick' => '新しい署名:',
 'prefs-help-signature' => 'トークページ上での発言には「<nowiki>~~~~</nowiki>」と付けて署名すべきです。これは自分の署名に時刻印を付けたものに変換されます。',
 'badsig' => '署名用のソースが正しくありません。
 HTMLタグを見直してください。',
 'badsiglength' => '署名が長すぎます。
 $1 {{PLURAL:$1|文字}}以下である必要があります。',
-'yourgender' => '性別',
+'yourgender' => '性別:',
 'gender-unknown' => '未指定',
 'gender-male' => '男',
 'gender-female' => '女',
@@ -1592,6 +1608,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'userrights-notallowed' => 'あなたのアカウントには利用者権限を追加または除去する権限がありません。',
 'userrights-changeable-col' => '変更できるグループ',
 'userrights-unchangeable-col' => '変更できないグループ',
+'userrights-irreversible-marker' => '$1*',
 
 # Groups
 'group' => 'グループ:',
@@ -1601,7 +1618,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'group-sysop' => '管理者',
 'group-bureaucrat' => 'ビューロクラット',
 'group-suppress' => '秘匿者',
-'group-all' => '(全員)',
+'group-all' => '(全員)',
 
 'group-user-member' => '{{GENDER:$1|登録利用者}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|自動承認された利用者}}',
@@ -1624,31 +1641,31 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-createtalk' => '議論ページを作成',
 'right-createaccount' => '新しい利用者アカウントを作成',
 'right-minoredit' => '細部の編集の印を付ける',
-'right-move' => 'ã\83\9aã\83¼ã\82¸ã\81®移動',
+'right-move' => 'ã\83\9aã\83¼ã\82¸ã\82\92移動',
 'right-move-subpages' => '下位ページを含めてページを移動',
 'right-move-rootuserpages' => '利用者ページ本体を移動',
-'right-movefile' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®移動',
-'right-suppressredirect' => 'ページの移動の際に元のページ名からのリダイレクトを作成しない',
+'right-movefile' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82\92移動',
+'right-suppressredirect' => '転送ページを作成せずにページを移動',
 'right-upload' => 'ファイルをアップロード',
 'right-reupload' => '既存のファイルに上書き',
 'right-reupload-own' => '自分自身がアップロードした既存のファイルに上書き',
-'right-reupload-shared' => 'å\85±æ\9c\89ã\83¡ã\83\87ã\82£ã\82¢ã\83ªã\83\9dã\82¸ã\83\88ã\83ªä¸\8aã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83­ã\83¼ã\82«ã\83«ã\81§ã\81®上書き',
-'right-upload_by_url' => 'URLからファイルをアップロード',
-'right-purge' => '確èª\8dã\82\92ç\9c\81ç\95¥ã\81\97ã\81¦サイトのキャッシュを破棄',
+'right-reupload-shared' => 'å\85±æ\9c\89ã\83¡ã\83\87ã\82£ã\82¢ã\83ªã\83\9dã\82¸ã\83\88ã\83ªä¸\8aã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83­ã\83¼ã\82«ã\83«ã\81§上書き',
+'right-upload_by_url' => 'URL からファイルをアップロード',
+'right-purge' => '確èª\8dã\81ªã\81\97ã\81§サイトのキャッシュを破棄',
 'right-autoconfirmed' => '半保護されたページを編集',
 'right-bot' => '自動処理と認識させる',
-'right-nominornewtalk' => 'è­°è«\96ã\83\9aã\83¼ã\82¸ã\81¸ç´°é\83¨ã\81®ç·¨é\9b\86ã\82\92ã\81\97ã\81\9fã\81¨ã\81\8dã\81«ã\80\81æ\96°ã\81\97ã\81\84ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81®ã\81\8aç\9f¥ã\82\89ã\81\9bã\82\92表示しない',
-'right-apihighlimits' => 'APIè¦\81æ±\82ã\81§ã\82\88ã\82\8aé«\98ã\81\84å\88¶é\99\90å\80¤ã\81®使用',
-'right-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\81®使用',
-'right-delete' => 'ã\83\9aã\83¼ã\82¸ã\81®削除',
+'right-nominornewtalk' => 'è­°è«\96ã\83\9aã\83¼ã\82¸ã\81®ç´°é\83¨ã\81®ç·¨é\9b\86ã\82\92ã\81\97ã\81\9fé\9a\9bã\81«ã\80\81æ\96°ç\9d\80ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81¨ã\81\97ã\81¦é\80\9aç\9f¥しない',
+'right-apihighlimits' => 'APIè¦\81æ±\82ã\81§ã\82\88ã\82\8aé«\98ã\81\84å\88¶é\99\90å\80¤ã\82\92使用',
+'right-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\82\92使用',
+'right-delete' => 'ã\83\9aã\83¼ã\82¸ã\82\92削除',
 'right-bigdelete' => '大きな履歴があるページを削除',
-'right-deletelogentry' => 'ç\89¹å®\9aã\81®è¨\98é\8c²é \85ç\9b®ã\81®å\89\8aé\99¤ã\81¨å¾©å¸°',
-'right-deleterevision' => 'ã\83\9aã\83¼ã\82¸ã\81®ç\89¹å®\9aã\81®ç\89\88ã\81®å\89\8aé\99¤ã\81¨å¾©å¸°',
+'right-deletelogentry' => 'ç\89¹å®\9aã\81®è¨\98é\8c²é \85ç\9b®ã\82\92å\89\8aé\99¤/復å\85\83',
+'right-deleterevision' => 'ã\83\9aã\83¼ã\82¸ã\81®ç\89¹å®\9aã\81®ç\89\88ã\82\92å\89\8aé\99¤/復å\85\83',
 'right-deletedhistory' => '削除された履歴項目(関連する本文を除く)を閲覧',
 'right-deletedtext' => '削除された本文と削除された版間の差分を閲覧',
 'right-browsearchive' => '削除されたページを検索',
-'right-undelete' => 'ã\83\9aã\83¼ã\82¸ã\81®å¾©å¸°',
-'right-suppressrevision' => '管ç\90\86è\80\85ã\81\8bã\82\89é\9a ã\81\95ã\82\8cã\81\9fç\89\88ã\81®ç¢ºèª\8dã\81¨復元',
+'right-undelete' => 'ã\83\9aã\83¼ã\82¸ã\82\92復å\85\83',
+'right-suppressrevision' => '管ç\90\86è\80\85ã\81\8bã\82\89é\9a ã\81\95ã\82\8cã\81\9fç\89\88ã\82\92確èª\8d/復元',
 'right-suppressionlog' => '非公開記録を閲覧',
 'right-block' => '他の利用者の編集をブロック',
 'right-blockemail' => '利用者のメール送信をブロック',
@@ -1659,22 +1676,22 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-protect' => '保護レベルを変更し、保護されたページを編集',
 'right-editprotected' => '保護ページ(カスケード保護を除く)を編集',
 'right-editinterface' => 'ユーザーインターフェイスを編集',
-'right-editusercssjs' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81®CSSã\81¨JavaScriptファイルを編集',
+'right-editusercssjs' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81®CSSã\83\95ã\82¡ã\82¤ã\83«/JavaScriptファイルを編集',
 'right-editusercss' => '他の利用者のCSSファイルを編集',
 'right-edituserjs' => '他の利用者のJavaScriptファイルを編集',
 'right-rollback' => '特定ページを最後に編集した利用者の編集を即時巻き戻し',
 'right-markbotedits' => '巻き戻しをボットの編集として扱う',
 'right-noratelimit' => '速度制限を受けない',
-'right-import' => 'ä»\96ã\81®ã\82¦ã\82£ã\82­ã\81\8bã\82\89ã\81®ã\83\9aã\83¼ã\82¸取り込み',
-'right-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81«ã\82\88ã\82\8bã\83\9aã\83¼ã\82¸取り込み',
+'right-import' => 'ä»\96ã\81®ã\82¦ã\82£ã\82­ã\81\8bã\82\89ã\83\9aã\83¼ã\82¸ã\82\92取り込み',
+'right-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\83\9aã\83¼ã\82¸ã\82\92取り込み',
 'right-patrol' => '他人の編集を巡回済みにする',
 'right-autopatrol' => '自分の編集を自動的に巡回済みにする',
 'right-patrolmarks' => '最近の更新で巡回済み印を閲覧',
 'right-unwatchedpages' => 'ウォッチされていないページ一覧を閲覧',
-'right-mergehistory' => 'ページ履歴の統合',
+'right-mergehistory' => 'ページの履歴を統合',
 'right-userrights' => '全利用者権限を編集',
 'right-userrights-interwiki' => '他のウィキの利用者の利用者権限を編集',
-'right-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ロックおよびロック解除',
+'right-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ロックおよびロック解除',
 'right-override-export-depth' => 'リンク先ページを5階層まで含めて書き出す',
 'right-sendemail' => '他の利用者にメールを送信',
 'right-passwordreset' => 'パスワード再設定メールを閲覧',
@@ -1682,46 +1699,46 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 # User rights log
 'rightslog' => '利用者権限変更記録',
 'rightslogtext' => '以下は利用者権限の変更記録です。',
-'rightslogentry' => '$1の所属グループを$2から$3へ変更しました',
-'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格',
-'rightsnone' => '(なし)',
+'rightslogentry' => '$1 の所属グループを $2 から $3 に変更しました',
+'rightslogentry-autopromote' => '$2 から $3 に自動的に昇格しました',
+'rightsnone' => '(なし)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92閲覧',
-'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92編集',
-'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\82\92作成',
-'action-createtalk' => 'トークページを作成',
-'action-createaccount' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\82\92作成',
+'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®閲覧',
+'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®編集',
+'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\81®作成',
+'action-createtalk' => '議論ページの作成',
+'action-createaccount' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®作成',
 'action-minoredit' => '細部の編集の印を付ける',
 'action-move' => 'このページの移動',
-'action-move-subpages' => 'このページと下位ページの移動',
+'action-move-subpages' => 'このページとその下位ページの移動',
 'action-move-rootuserpages' => '利用者ページ本体の移動',
 'action-movefile' => 'このファイルの移動',
-'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92アップロード',
-'action-reupload' => 'ã\81\93ã\81®æ\97¢å­\98ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«上書き',
-'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«上書き',
-'action-upload_by_url' => 'URLからこのファイルをアップロード',
-'action-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\82\92使用',
-'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92削除',
-'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\82\92削除',
-'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ­´ã\82\92表示',
+'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®アップロード',
+'action-reupload' => 'ã\81\93ã\81®æ\97¢å­\98ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®上書き',
+'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®上書き',
+'action-upload_by_url' => 'URL からのこのファイルのアップロード',
+'action-writeapi' => 'æ\9b¸ã\81\8dè¾¼ã\81¿APIã\81®使用',
+'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®削除',
+'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\81®削除',
+'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ­´ã\81®é\96²è¦§',
 'action-browsearchive' => '削除されたページの検索',
-'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92復帰',
+'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å¾©å\85\83',
 'action-suppressrevision' => '隠された版の確認と復元',
-'action-suppressionlog' => 'この非公開記録の表示',
-'action-block' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92ã\83\96ã\83­ã\83\83ã\82¯',
-'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè­·ã\83¬ã\83\99ã\83«ã\82\92変更',
-'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92即時巻き戻し',
-'action-import' => 'このページを他のウィキから取り込む',
-'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81«å\8f\96ã\82\8aè¾¼ã\82\80',
+'action-suppressionlog' => 'この非公開記録の閲覧',
+'action-block' => 'この利用者の編集ブロック',
+'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè­·ã\83¬ã\83\99ã\83«ã\81®変更',
+'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\81®即時巻き戻し',
+'action-import' => '他のウィキからのこのページの取り込み',
+'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\81®ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®å\8f\96ã\82\8aè¾¼ã\81¿',
 'action-patrol' => '他の利用者の編集を巡回済みにする',
 'action-autopatrol' => '自分の編集を巡回済みにする',
-'action-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\82\92表示',
-'action-mergehistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å±¥æ­´ã\82\92統合',
-'action-userrights' => '全利用者権限の変更',
-'action-userrights-interwiki' => '他のウィキの利用者の利用者権限変更',
-'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ロックまたはロック解除',
-'action-sendemail' => 'ã\83¡ã\83¼ã\83«ã\82\92送信',
+'action-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\81®é\96²è¦§',
+'action-mergehistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å±¥æ­´ã\81®統合',
+'action-userrights' => '全利用者権限の編集',
+'action-userrights-interwiki' => '他のウィキの利用者の利用者権限変更',
+'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ロックまたはロック解除',
+'action-sendemail' => 'ã\83¡ã\83¼ã\83«ã\81®送信',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|回の変更}}',
@@ -1742,7 +1759,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'rcshowhideanons' => '匿名利用者を$1',
 'rcshowhidepatr' => '巡回された編集を$1',
 'rcshowhidemine' => '自分の編集を$1',
-'rclinks' => '最近$2日間の更新$1件以内を表示<br />$3',
+'rclinks' => '最近 $2 日間の更新を最大 $1 件表示<br />$3',
 'diff' => '差分',
 'hist' => '履歴',
 'hide' => '非表示',
@@ -1754,6 +1771,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|$1 人の利用者}}がウォッチしています]',
 'rc_categories' => 'カテゴリを限定(「|」で区切る)',
 'rc_categories_any' => 'すべて',
+'rc-change-size' => '$1',
 'rc-change-size-new' => '変更後は $1 {{PLURAL:$1|バイト}}',
 'newsectionsummary' => '/* $1 */ 新しい節',
 'rc-enhanced-expand' => '詳細を表示(JavaScript が必要)',
@@ -1766,10 +1784,10 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'recentchangeslinked-toolbox' => '関連ページの更新状況',
 'recentchangeslinked-title' => '「$1」と関連する変更',
 'recentchangeslinked-noresult' => '指定期間中に指定ページのリンク先に変更はありませんでした。',
-'recentchangeslinked-summary' => "これはã\80\81æ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\88ã\81¾ã\81\9fã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\82«ã\83\86ã\82´ã\83ªã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bï¼\89ã\83\9aã\83¼ã\82¸ã\81¸ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\81®ä¸\80覧ã\81§ã\81\99ã\80\82
-[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81¯'''太å­\97'''ã\81«ã\81ªã\82\8aます。",
+'recentchangeslinked-summary' => "これはæ\8c\87å®\9aã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\88ã\81¾ã\81\9fã\81¯æ\8c\87å®\9aã\81\97ã\81\9fã\82«ã\83\86ã\82´ã\83ªã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bï¼\89ã\83\9aã\83¼ã\82¸ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\81®ä¸\80覧ã\81§ã\81\99ã\80\82
+[[Special:Watchlist|è\87ªå\88\86ã\81®ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81¯'''太å­\97'''ã\81§è¡¨ç¤ºã\81\95ã\82\8cます。",
 'recentchangeslinked-page' => 'ページ名:',
-'recentchangeslinked-to' => '代わりに、指定したページへのリンク元での変更を表示',
+'recentchangeslinked-to' => '指定したページの「リンク元」ページの変更を表示',
 
 # Upload
 'upload' => 'ファイルをアップロード',
@@ -1778,7 +1796,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'upload-tryagain' => '修正したファイル解説を投稿',
 'uploadnologin' => 'ログインしていません',
 'uploadnologintext' => 'ファイルをアップロードするには[[Special:UserLogin|ログイン]]する必要があります。',
-'upload_directory_missing' => 'アップロード先ディレクトリ($1)が見つからないため、ウェブサーバーによる作成ができませんでした。',
+'upload_directory_missing' => 'アップロード先ディレクトリ ($1) が見つかりませんでした。ウェブ サーバーによる作成もできませんでした。',
 'upload_directory_read_only' => 'アップロード先ディレクトリ($1)には、ウェブサーバーが書き込めません。',
 'uploaderror' => 'アップロードのエラー',
 'upload-recreate-warning' => "'''警告:その名前のファイルは、以前に削除または移動されています。'''
@@ -1791,19 +1809,19 @@ $1 {{PLURAL:$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' => '概要',
-'filereuploadsummary' => 'ファイルの変更',
-'filestatus' => '著作権情報',
-'filesource' => '出典',
+'fileuploadsummary' => '概要:',
+'filereuploadsummary' => 'ファイルの変更:',
+'filestatus' => '著作権情報:',
+'filesource' => '出典:',
 'uploadedfiles' => 'アップロードされたファイル',
 'ignorewarning' => '警告を無視してファイルを保存',
 'ignorewarnings' => '警告を無視',
@@ -1881,11 +1899,11 @@ file_uploadsの設定を確認してください。',
 'uploadjava' => 'このファイルは、Javaの.classファイルを含むZIPファイルです。
 セキュリティの制限を回避されるおそれがあるため、Javaファイルのアップロードは許可されていません。',
 'upload-source' => 'アップロード元ファイル',
-'sourcefilename' => 'アップロード元のファイル名',
-'sourceurl' => 'アップロード元のURL:',
-'destfilename' => '登録するファイル名',
-'upload-maxfilesize' => 'ファイルの最大サイズ$1',
-'upload-description' => 'ファイル説明',
+'sourcefilename' => 'アップロード元のファイル名:',
+'sourceurl' => 'アップロード元の URL:',
+'destfilename' => '登録するファイル名:',
+'upload-maxfilesize' => 'ファイルの最大サイズ$1',
+'upload-description' => 'ファイル説明',
 'upload-options' => 'アップロードのオプション',
 'watchthisupload' => 'このファイルをウォッチ',
 'filewasdeleted' => 'この名前のファイルは一度アップロードされ、その後削除されています。
@@ -1953,6 +1971,7 @@ $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」のジャーナルデータベースに接続できません。',
@@ -1967,6 +1986,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
@@ -2025,10 +2045,10 @@ URLが正しいものであり、ウェブサイトが稼働していること
 ウェブサイトが現在稼働していることを確認し、しばらく待ってからもう一度お試しください。
 混雑していない時間帯に試すことをおすすめします。',
 
-'license' => 'ライセンス',
+'license' => 'ライセンス:',
 'license-header' => 'ライセンス',
 'nolicense' => '選択なし',
-'license-nopreview' => '(プレビューはありません)',
+'license-nopreview' => '(プレビューはありません)',
 'upload_source_url' => '(有効かつ一般に公開されているURL)',
 'upload_source_file' => '(あなたのコンピューター上のファイル)',
 
@@ -2117,7 +2137,7 @@ $1での[$2 ファイル解説ページ]にある説明を編集したほうが
 ** 著作権侵害
 ** 重複ファイル',
 'filedelete-edit-reasonlist' => '削除理由を編集',
-'filedelete-maintenance' => 'ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹ä¸­ã\81®ã\81\9fã\82\81ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®å\89\8aé\99¤ã\81¨å¾©å¸°は一時的に無効化されています。',
+'filedelete-maintenance' => 'ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹ä¸­ã\81®ã\81\9fã\82\81ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®å\89\8aé\99¤ã\81¨å¾©å\85\83は一時的に無効化されています。',
 'filedelete-maintenance-title' => 'ファイルを削除できません',
 
 # MIME search
@@ -2131,7 +2151,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'unwatchedpages' => 'ウォッチされていないページ',
 
 # List redirects
-'listredirects' => 'リダイレクトの一覧',
+'listredirects' => '転送ページの一覧',
 
 # Unused templates
 'unusedtemplates' => '使われていないテンプレート',
@@ -2145,7 +2165,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 # Random redirect
 'randomredirect' => 'おまかせリダイレクト',
-'randomredirect-nopages' => '「$1」名前空間にリダイレクトはありません。',
+'randomredirect-nopages' => '「$1」名前空間に転送ページはありません。',
 
 # Statistics
 'statistics' => '統計',
@@ -2156,7 +2176,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'statistics-header-hooks' => 'その他の統計',
 'statistics-articles' => '記事数',
 'statistics-pages' => '総ページ数',
-'statistics-pages-desc' => 'ã\82¦ã\82£ã\82­å\86\85ã\81®ã\80\81ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\80\81ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81ªã\81©ã\82\92å\90«ã\82\80すべてのページです。',
+'statistics-pages-desc' => 'ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\80\81転é\80\81ã\83\9aã\83¼ã\82¸ã\81ªã\81©ã\82\92å\90«ã\82\80ã\80\81ã\82¦ã\82£ã\82­å\86\85ã\81®すべてのページです。',
 'statistics-files' => 'アップロードされたファイル数',
 'statistics-edits' => '{{SITENAME}}の開設以降の編集回数の総計',
 'statistics-edits-average' => '1ページあたりの編集回数',
@@ -2175,16 +2195,16 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 [[MediaWiki:Disambiguationspage]] にリンクがあるテンプレートを使用しているページを、曖昧さ回避ページと見なします。",
 
 'doubleredirects' => '二重転送',
-'doubleredirectstext' => 'ã\81\93ã\82\8cã\81¯ä»\96ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ä¸\80覧ã\81§す。
-各行には、最初のリダイレクト、その転送先のリダイレクト、さらにその転送先、それぞれへのリンクが表示されています。多くの場合、最終の転送先が正しい転送先であり、最初のリダイレクトは直接最後の転送先に向けるべきです。
-<del>打ち消し線</del>が入った項目は既に解決しています。',
+'doubleredirectstext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81§ã\81¯ã\80\81転é\80\81ã\83\9aã\83¼ã\82¸ã\81¸ã\81®è»¢é\80\81ã\83\9aã\83¼ã\82¸ã\82\92å\88\97æ\8c\99ã\81\97ã\81¾す。
+最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。
+<del>取り消し線</del>が入った項目は解決済みです。',
 'double-redirect-fixed-move' => '[[$1]]を移動しました。
 今後は[[$2]]に転送されます。',
 'double-redirect-fixed-maintenance' => '[[$1]]から[[$2]]への二重転送を修正します。',
 'double-redirect-fixer' => '転送修正係',
 
 'brokenredirects' => '迷子のリダイレクト',
-'brokenredirectstext' => '以ä¸\8bã\81®ã\83\9aã\83¼ã\82¸ã\81¯ã\80\81å­\98å\9c¨ã\81\97ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81§ã\81\99ï¼\9a',
+'brokenredirectstext' => '以ä¸\8bã\81¯ã\80\81å­\98å\9c¨ã\81\97ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ä¸\80覧ã\81§ã\81\99:',
 'brokenredirects-edit' => '編集',
 'brokenredirects-delete' => '削除',
 
@@ -2205,7 +2225,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'nviews' => '$1回の閲覧',
 'nimagelinks' => '$1ページで使用',
 'ntransclusions' => '$1ページで使用',
-'specialpage-empty' => '合致するものがありません。',
+'specialpage-empty' => '該当するものはありません。',
 'lonelypages' => '孤立しているページ',
 'lonelypagestext' => '以下のページは、{{SITENAME}}の他のページからリンクも参照読み込みもされていません。',
 'uncategorizedpages' => 'カテゴリ分類されていないページ',
@@ -2217,7 +2237,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'popularpages' => '人気のページ',
 'wantedcategories' => 'カテゴリページが存在しないカテゴリ',
 'wantedpages' => 'ページが存在しないリンク',
-'wantedpages-badtitle' => 'çµ\90æ\9e\9cã\81«æ­£ã\81\97ã\81\8fã\81ªã\81\84ã\83\9aã\83¼ã\82¸å\90\8dã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ï¼\9a$1',
+'wantedpages-badtitle' => 'çµ\90æ\9e\9cã\81\8cã\80\81ç\84¡å\8a¹ã\81ªã\83\9aã\83¼ã\82¸å\90\8dã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99$1',
 'wantedfiles' => 'ファイル情報ページが存在しないファイル',
 'wantedfiletext-cat' => '以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。さらに、存在しないファイルを埋め込んでいるページは[[:$1]]に列挙されます。',
 'wantedfiletext-nocat' => '以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。',
@@ -2268,31 +2288,32 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 # Book sources
 'booksources' => '書籍情報源',
 'booksources-search-legend' => '書籍情報源を検索',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => '検索',
 'booksources-text' => 'お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:',
 'booksources-invalid-isbn' => '指定したISBN番号は有効ではないようです。情報源から写し間違えていないか確認してください。',
 
 # Special:Log
 'specialloguserlabel' => '実行者:',
-'speciallogtitlelabel' => '対象(ページまたは利用者):',
+'speciallogtitlelabel' => '対象 (ページまたは利用者):',
 'log' => '記録',
 'all-logs-page' => 'すべての公開記録',
 'alllogstext' => '{{SITENAME}}の取得できる記録をまとめて表示しています。
 記録の種類、実行した利用者(大文字小文字は区別)、影響を受けたページ(大文字小文字は区別)による絞り込みができます。',
 'logempty' => '該当する記録はありません。',
 'log-title-wildcard' => 'この文字列で始まるページ名を検索',
-'showhideselectedlogentries' => '選択した記録項目を表示/非表示',
+'showhideselectedlogentries' => '選択した記録項目を表示/非表示',
 
 # Special:AllPages
 'allpages' => '全ページ',
 'alphaindexline' => '$1から$2まで',
-'nextpage' => '次のページ($1)',
-'prevpage' => '前のページ($1)',
-'allpagesfrom' => '最初に表示するページ',
-'allpagesto' => '最後に表示するページ',
+'nextpage' => '次のページ ($1)',
+'prevpage' => '前のページ ($1)',
+'allpagesfrom' => '最初に表示するページ:',
+'allpagesto' => '最後に表示するページ:',
 'allarticles' => '全ページ',
-'allinnamespace' => '全ページ($1名前空間)',
-'allnotinnamespace' => '全ページ($1名前空間を除く)',
+'allinnamespace' => '全ページ ($1名前空間)',
+'allnotinnamespace' => '全ページ ($1名前空間以外)',
 'allpagesprev' => '前へ',
 'allpagesnext' => '次へ',
 'allpagessubmit' => '表示',
@@ -2324,7 +2345,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 # Special:LinkSearch
 'linksearch' => '外部リンクの検索',
 'linksearch-pat' => '検索パターン:',
-'linksearch-ns' => '名前空間',
+'linksearch-ns' => '名前空間:',
 'linksearch-ok' => '検索',
 'linksearch-text' => '"*.wikipedia.org" のようにワイルドカードを使用できます。
 少なくとも "*.org" のようなトップレベルドメインが必要です。<br />
@@ -2361,6 +2382,8 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 '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',
 'listgrouprights-addgroup-all' => '全グループを追加可能',
@@ -2401,7 +2424,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'emailccsubject' => '$1に送信したメールの控え:$2',
 'emailsent' => 'メールを送信しました',
 'emailsenttext' => 'メールを送信しました。',
-'emailuserfooter' => 'このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能でお送りしました。',
+'emailuserfooter' => 'このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能で送信されました。',
 
 # User Messenger
 'usermessage-summary' => 'システムメッセージを残す。',
@@ -2417,7 +2440,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'watchnologintext' => 'ウォッチリストを変更するためには、[[Special:UserLogin|ログイン]]している必要があります。',
 'addwatch' => 'ウォッチリストに追加',
 'addedwatchtext' => "ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]に追加しました。
\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¨ä»\98å±\9eã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81«å¤\89æ\9b´ã\81\8cã\81\82ã\81£ã\81\9fé\9a\9bã\81«ã\81¯ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\81¾ã\81\9fã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ç\99»é\8c²ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83\9aã\83¼ã\82¸ã\81¯[[Special:RecentChanges|æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\81®ä¸\80覧]]ã\81«'''太å­\97'''ã\81§è¡¨ç¤ºã\81\95ã\82\8cã\80\81è¦\8bã\81¤ã\81\91ã\82\84ã\81\99ã\81\8fã\81ªã\82\8aます。",
\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¾ã\81\9fã\81¯ã\81\9dã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81\8cå¤\89æ\9b´ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\81¾ã\81\9fã\80\81[[Special:RecentChanges|æ\9c\80è¿\91ã\81®æ\9b´æ\96°ã\81®ä¸\80覧]]ã\81§ã\81¯'''太å­\97'''ã\81§è¡¨ç¤ºã\81\95ã\82\8cます。",
 'removewatch' => 'ウォッチリストから除去',
 'removedwatchtext' => 'ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]から除去しました。',
 'watch' => 'ウォッチ',
@@ -2429,7 +2452,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'watchnochange' => 'ウォッチリストに登録しているページで、指定期間内に編集されたものはありません。',
 'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています(トークページを除く)。',
 'wlheader-enotif' => '* メール通知が有効になっています',
-'wlheader-showupdated' => "* 最後に訪問したあとに変更されたページは、'''太字'''で表示されます",
+'wlheader-showupdated' => "* 最終訪問以降に変更されたページは、'''太字'''で表示されます",
 'watchmethod-recent' => '最近の更新内のウォッチされているページを確認中',
 'watchmethod-list' => 'ウォッチされているページ内の最近の更新を確認中',
 'watchlistcontains' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています。',
@@ -2498,9 +2521,9 @@ $UNWATCHURL
 'actioncomplete' => '操作を完了しました',
 'actionfailed' => '操作に失敗しました',
 'deletedtext' => '「$1」は削除されました。
-最近の削除に関しては、$2を参照してください。',
+最近の削除については、$2を参照してください。',
 'dellogpage' => '削除記録',
-'dellogpagetext' => '以下は、最近の削除と復帰の一覧です。',
+'dellogpagetext' => '以下は最近の削除と復元の一覧です。',
 'deletionlog' => '削除記録',
 'reverted' => '以前の版への差し戻し',
 'deletecomment' => '理由:',
@@ -2612,81 +2635,81 @@ $2による直前の版へ変更されました。',
 # Undelete
 'undelete' => '削除されたページを表示',
 'undeletepage' => '削除されたページの表示と復元',
-'undeletepagetitle' => "'''以下は[[:$1|$1]]の削除された版です'''。",
+'undeletepagetitle' => "'''以下は[[:$1|$1]]の削除された版です'''。",
 'viewdeletedpage' => '削除されたページを表示',
 'undeletepagetext' => '以下の{{PLURAL:$1|削除されたページ|&#32;$1 件の削除されたページ}}は、保存版に残っているため復元できます。
 保存版は定期的に消去される可能性があります。',
 'undelete-fieldset-title' => '削除された版の復元',
 'undeleteextrahelp' => "すべての版を復元する場合は、どのボックスにもチェックを入れていない状態で'''''{{int:undeletebtn}}'''''をクリックしてください。
\89¹å®\9aã\81®ç\89\88ã\82\92復帰ã\81\99ã\82\8bå ´å\90\88ã\81¯ã\80\81復帰する版のボックスにチェックを入れた状態で'''''{{int:undeletebtn}}'''''をクリックしてください。",
\89¹å®\9aã\81®ç\89\88ã\82\92復å\85\83ã\81\99ã\82\8bå ´å\90\88ã\81¯ã\80\81復å\85\83する版のボックスにチェックを入れた状態で'''''{{int:undeletebtn}}'''''をクリックしてください。",
 'undeleterevisions' => '保存版に$1{{PLURAL:$1|版}}あります',
-'undeletehistory' => 'ã\83\9aã\83¼ã\82¸ã\81®å¾©å¸°ã\82\92è¡\8cã\81\86ã\81¨ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ç\89\88ã\81\8c履歴ã\81«å¾©å¸°ã\81\97ます。
-削除されたあとに同じ名前で新しくページが作成されていた場合、復帰した版はそれに先行する履歴として現れます。',
-'undeleterevdel' => '復帰した結果、版指定削除されているページまたはファイルの版が最新となる場合、復帰は実行されません。
-このような場合、版指定削除されていない版が最新となるようにチェックするか、その版の版指定削除を解除する必要があります。',
+'undeletehistory' => 'ã\83\9aã\83¼ã\82¸ã\82\92復å\85\83ã\81\99ã\82\8bã\81¨ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ç\89\88ã\81\8c履歴ã\81«å¾©å\85\83ã\81\95ã\82\8cます。
+削除後に同じ名前で新しいページが作成されている場合、復元された版はそれに先行する履歴として表示されます。',
+'undeleterevdel' => '版指定削除されている版がページまたはファイルの最新版となるような復元はできません。
+この場合、版指定削除されている最新版のチェックを外すか、その版指定削除を解除する必要があります。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
 'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
-'undeleterevision-missing' => '正しくないまたは存在しない版です。
\96\93é\81\95ã\81£ã\81\9fã\83ªã\83³ã\82¯ã\82\92ã\81\9fã\81©ã\81£ã\81\9fã\81\8bã\80\81ã\81\93ã\81®ç\89\88ã\81¯æ\97¢ã\81«å¾©å¸°されたか、もしくは保存版から除去された可能性があります。',
+'undeleterevision-missing' => '無効または存在しない版です。
\96\93é\81\95ã\81£ã\81\9fã\83ªã\83³ã\82¯ã\82\92ã\81\9fã\81©ã\81£ã\81\9fã\81\8bã\80\81ã\81\93ã\81®ç\89\88ã\81¯æ\97¢ã\81«å¾©å\85\83されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
 'undeletebtn' => '復元',
 'undeletelink' => '閲覧/復元',
 'undeleteviewlink' => '閲覧',
 'undeletereset' => 'リセット',
 'undeleteinvert' => '選択を反転',
-'undeletecomment' => '理由',
+'undeletecomment' => '理由:',
 'undeletedrevisions' => '{{PLURAL:$1|$1版}}を復元しました',
 'undeletedrevisions-files' => '{{PLURAL:$1|$1版}}と{{PLURAL:$2|$2ファイル}}を復元しました',
-'undeletedfiles' => '{{PLURAL:$1|$1ã\83\95ã\82¡ã\82¤ã\83«}}ã\82\92復帰しました',
-'cannotundelete' => '復帰に失敗しました。
-ä»\96ã\81®èª°ã\81\8bã\81\8cã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92æ\97¢ã\81«å¾©å¸°した可能性があります。',
+'undeletedfiles' => '{{PLURAL:$1|$1ã\83\95ã\82¡ã\82¤ã\83«}}ã\82\92復å\85\83しました',
+'cannotundelete' => '復å\85\83に失敗しました。
+ä»\96ã\81®èª°ã\81\8bã\81\8cã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92æ\97¢ã\81«å¾©å\85\83した可能性があります。',
 'undeletedpage' => "'''$1を復元しました。'''
 
\9c\80è¿\91ã\81®å\89\8aé\99¤ã\81¨å¾©å¸°の記録については[[Special:Log/delete|削除記録]]を参照してください。",
\9c\80è¿\91ã\81®å\89\8aé\99¤ã\81¨å¾©å\85\83の記録については[[Special:Log/delete|削除記録]]を参照してください。",
 'undelete-header' => '最近削除されたページは[[Special:Log/delete|削除記録]]で確認できます。',
 'undelete-search-title' => '削除されたページの検索',
 'undelete-search-box' => '削除されたページを検索',
-'undelete-search-prefix' => '表示を開始するページ名',
+'undelete-search-prefix' => '表示を開始するページ名:',
 'undelete-search-submit' => '検索',
 'undelete-no-results' => '削除の保存版に、一致するページが見つかりませんでした。',
-'undelete-filename-mismatch' => 'ファイルの時刻印$1の版を復帰できません:ファイル名が一致しません。',
-'undelete-bad-store-key' => 'ファイルの時刻印$1の版を復帰できません:削除前にファイルが失われています。',
+'undelete-filename-mismatch' => 'ファイルの $1 時点の版を復元できません: ファイル名が一致しません。',
+'undelete-bad-store-key' => 'ファイルの $1 時点の版を復元できません: 削除前にファイルが失われています。',
 'undelete-cleanup-error' => '未使用の保存版のファイル「$1」の削除中にエラーが発生しました。',
-'undelete-missing-filearchive' => 'データベースに存在しないため、ID $1を持つファイルの保存版を復元できません。
\97¢ã\81«å¾©å¸°されている可能性があります。',
-'undelete-error' => 'ã\83\9aã\83¼ã\82¸ã\81®å¾©å¸°エラー',
-'undelete-error-short' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®å¾©å¸°ã\82¨ã\83©ã\83¼ï¼\9a$1',
-'undelete-error-long' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®å¾©å¸°ä¸­ã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a
+'undelete-missing-filearchive' => 'データベースに存在しないため、ファイルの保存版 ID $1 を復元できません。
\97¢ã\81«å¾©å\85\83されている可能性があります。',
+'undelete-error' => 'ã\83\9aã\83¼ã\82¸ã\81®å¾©å\85\83エラー',
+'undelete-error-short' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®å¾©å\85\83ã\82¨ã\83©ã\83¼: $1',
+'undelete-error-long' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®å¾©å\85\83中ã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9f:
 
 $1',
 'undelete-show-file-confirm' => '$2$3の版からファイル「<nowiki>$1</nowiki>」の削除版を本当に表示しますか?',
 'undelete-show-file-submit' => 'はい',
 
 # Namespace form on various pages
-'namespace' => '名前空間',
-'invert' => '選択したものを除く',
-'tooltip-invert' => '選択した名前空間(チェックされている場合は、関連付けられた名前空間も)のページの変更を非表示にするには、このボックスにチェックを入れる',
-'namespace_association' => '対応付けられた名前空間',
-'tooltip-namespace_association' => 'é\81¸æ\8a\9eã\81\97ã\81\9få\90\8då\89\8d空é\96\93ã\81«é\96¢é\80£ä»\98ã\81\91ã\82\89ã\82\8cã\81¦ã\81\84ã\82\8bã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81¾ã\81\9fã\81¯å¯¾è±¡の名前空間も含めるには、このボックスにチェックを入れる',
-'blanknamespace' => '(標準)',
+'namespace' => '名前空間:',
+'invert' => '名前空間の選択を反転',
+'tooltip-invert' => '選択した名前空間 (チェックを入れている場合は、関連付けられた名前空間も含む) のページの変更を非表示にするには、このボックスにチェックを入れる',
+'namespace_association' => '関連付けられた名前空間も含める',
+'tooltip-namespace_association' => 'é\81¸æ\8a\9eã\81\97ã\81\9få\90\8då\89\8d空é\96\93ã\81«é\96¢é\80£ä»\98ã\81\91ã\82\89ã\82\8cã\81\9fã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ (é\80\86ã\81«ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81®å\90\8då\89\8d空é\96\93ã\82\92é\81¸æ\8a\9eã\81\97ã\81\9få ´å\90\88ã\82\82å\90\8cæ§\98の名前空間も含めるには、このボックスにチェックを入れる',
+'blanknamespace' => '(標準)',
 
 # Contributions
 'contributions' => '利用者の投稿記録',
 'contributions-title' => '$1の投稿記録',
 'mycontris' => '自分の投稿記録',
-'contribsub2' => '利用者:$1($2)',
+'contribsub2' => '利用者: $1 ($2)',
 'nocontribs' => 'これらの条件に一致する変更は見つかりませんでした。',
-'uctop' => '(最新)',
-'month' => 'これ以前の月',
-'year' => 'これ以前の年',
+'uctop' => '(最新)',
+'month' => 'これ以前の月:',
+'year' => 'これ以前の年:',
 
-'sp-contributions-newbies' => '新しい利用者からの投稿のみ表示',
+'sp-contributions-newbies' => '新規利用者の投稿のみ表示',
 'sp-contributions-newbies-sub' => '新規利用者のみ',
 'sp-contributions-newbies-title' => '新規利用者の投稿記録',
 'sp-contributions-blocklog' => 'ブロック記録',
-'sp-contributions-deleted' => 'å\88©ç\94¨è\80\85ã\81®å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fæ\8a\95稿è¨\98é\8c²',
+'sp-contributions-deleted' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fæ\8a\95稿ã\81®ä¸\80覧',
 'sp-contributions-uploads' => 'アップロード',
 'sp-contributions-logs' => '記録',
 'sp-contributions-talk' => 'トーク',
@@ -2696,7 +2719,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'このIPアドレスは現在ブロックされています。
 参考のために最近のブロック記録項目を以下に表示します:',
 'sp-contributions-search' => '投稿の検索',
-'sp-contributions-username' => 'IPアドレスまたは利用者名',
+'sp-contributions-username' => 'IPアドレスまたは利用者名:',
 'sp-contributions-toponly' => '最新版の編集のみを表示',
 'sp-contributions-submit' => '検索',
 
@@ -2713,7 +2736,7 @@ $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',
@@ -2726,10 +2749,10 @@ $1',
 'blockip' => '利用者をブロック',
 'blockip-title' => '利用者のブロック',
 'blockip-legend' => '利用者をブロック',
-'blockiptext' => '以下のフォームを使用して、指定した利用者やIPアドレスからの書き込みアクセスをブロックできます。
-このような措置は、荒らしからの防御のためにのみ行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。
-以下にブロックの理由を具体的に書いてください(例えば、荒らされたページへの言及など)。',
-'ipadressorusername' => 'IPアドレスまたは利用者名',
+'blockiptext' => '以下のフォームを使用して、指定したIPアドレスまたは利用者からの書き込みアクセスをブロックできます。
+このような措置は、荒らしからの防御の目的のみに行われるべきで、また[[{{MediaWiki:Policy-url}}|方針]]に沿ったものであるべきです。
+以下にブロックの理由を具体的に書いてください (例えば、荒らされたページへの言及など)。',
+'ipadressorusername' => 'IPアドレスまたは利用者名:',
 'ipbexpiry' => '有効期限:',
 'ipbreason' => '理由:',
 'ipbreasonotherlist' => 'その他の理由',
@@ -2741,18 +2764,18 @@ $1',
 ** 威圧的な態度/嫌がらせ
 ** 複数アカウントの不正利用
 ** 不適切な利用者名',
-'ipb-hardblock' => 'ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81«ã\82\88ã\82\8bã\81\93ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81\8bã\82\89ã\81®ç·¨é\9b\86ã\82\92ä¸\8d許å\8f¯',
+'ipb-hardblock' => 'ã\81\93ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81\8bã\82\89ã\81®ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92ç¦\81æ­¢',
 'ipbcreateaccount' => 'アカウント作成を禁止',
-'ipbemailban' => 'メール送信を止',
-'ipbenableautoblock' => 'この利用者が最後に使用したIPアドレスと、後に編集しようとしたIPアドレスを自動的にブロック',
+'ipbemailban' => 'メール送信を止',
+'ipbenableautoblock' => 'この利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロック',
 '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' => 'ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81\8cã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bé\96\93ã\81«è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bã\81®ã\82\92ä¸\8d許å\8f¯',
+'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ã\82\92ç¦\81æ­¢',
 'ipb-change-block' => 'これらの設定で、利用者を再びブロック',
 'ipb-confirm' => 'ブロックの確認',
 'badipaddress' => '無効なIPアドレス',
@@ -2767,8 +2790,8 @@ $1',
 'ipb-blocklist' => '現在有効なブロックを表示',
 'ipb-blocklist-contribs' => '$1の投稿の一覧',
 'unblockip' => 'ブロックを解除',
-'unblockiptext' => '以ä¸\8bã\81®ã\83\95ã\82©ã\83¼ã\83 ã\81§å\88©ç\94¨è\80\85ã\81¾ã\81\9fã\81¯IPã\82¢ã\83\89ã\83¬ã\82¹ã\81®æ\8a\95稿ã\83\96ã\83­ã\83\83ã\82¯ã\82\92解除できます。',
-'ipusubmit' => 'この投稿ブロックを解除',
+'unblockiptext' => '以ä¸\8bã\81®ã\83\95ã\82©ã\83¼ã\83 ã\82\92使ç\94¨ã\81\97ã\81¦ã\80\81以å\89\8dã\83\96ã\83­ã\83\83ã\82¯ã\81\97ã\81\9fIPã\82¢ã\83\89ã\83¬ã\82¹ã\81¾ã\81\9fã\81¯å\88©ç\94¨è\80\85ã\81\8bã\82\89ã\81®æ\9b¸ã\81\8dè¾¼ã\81¿ã\82¢ã\82¯ã\82»ã\82¹ã\82\92ã\83\96ã\83­ã\83\83ã\82¯解除できます。',
+'ipusubmit' => 'このブロックを解除',
 'unblocked' => '[[User:$1|$1]]のブロックを解除しました',
 'unblocked-range' => '$1のブロックは解除されています',
 'unblocked-id' => 'ブロック$1は除去されました',
@@ -2776,12 +2799,12 @@ $1',
 'ipblocklist' => 'ブロックされている利用者',
 'ipblocklist-legend' => 'ブロックされている利用者を検索',
 'blocklist-userblocks' => 'アカウントのブロックを非表示',
-'blocklist-tempblocks' => 'æ\9c\89æ\9c\9fブロックを非表示',
-'blocklist-addressblocks' => '単一IPのブロックを非表示',
+'blocklist-tempblocks' => 'æ\9c\9fé\99\90ä»\98ã\81\8dブロックを非表示',
+'blocklist-addressblocks' => '単一 IP のブロックを非表示',
 'blocklist-rangeblocks' => '範囲ブロックを非表示',
-'blocklist-timestamp' => 'æ\99\82å\88»å\8d°',
+'blocklist-timestamp' => 'æ\97¥æ\99\82',
 'blocklist-target' => '対象',
-'blocklist-expiry' => '期限',
+'blocklist-expiry' => 'æ\9c\89å\8a¹æ\9c\9fé\99\90',
 'blocklist-by' => 'ブロックした管理者',
 'blocklist-params' => 'ブロックのパラメーター',
 'blocklist-reason' => '理由',
@@ -2790,10 +2813,10 @@ $1',
 'ipblocklist-otherblocks' => 'その他の{{PLURAL:$1|ブロック}}',
 'infiniteblock' => '無期限',
 'expiringblock' => '$1$2に解除',
-'anononlyblock' => '匿名のみ',
+'anononlyblock' => '匿名利用者のみ',
 'noautoblockblock' => '自動ブロック無効',
-'createaccountblock' => 'アカウント作成のブロック',
-'emailblock' => 'メール送信のブロック',
+'createaccountblock' => 'アカウント作成の禁止',
+'emailblock' => 'メール送信の禁止',
 'blocklist-nousertalk' => '自分のトークページの編集禁止',
 'ipblocklist-empty' => 'ブロック一覧は空です。',
 'ipblocklist-no-results' => '指定されたIPアドレスまたは利用者名はブロックされていません。',
@@ -2802,8 +2825,8 @@ $1',
 'change-blocklink' => '設定を変更',
 'contribslink' => '投稿記録',
 'emaillink' => 'メールを送信',
-'autoblocker' => "ã\81\94使ç\94¨ä¸­ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81\8cã\80\8c[[User:$1|$1]]ã\80\8dã\81«ä½¿ç\94¨ã\81\95ã\82\8cたため、自動ブロックされています。
-$1のブロックの理由は「''$2''」です。",
+'autoblocker' => "ã\81\93ã\81® IP ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ã\80\8c[[User:$1|$1]]ã\80\8dã\81\8cæ\9c\80è¿\91使ç\94¨ã\81\97たため、自動ブロックされています。
+$1 のブロックの理由は「''$2''」です。",
 'blocklogpage' => 'ブロック記録',
 'blocklog-showlog' => 'この利用者は以前にブロックされたことがあります。
 参考のため、ブロックの記録を以下に示します:',
@@ -2838,15 +2861,16 @@ $1のブロックの理由は「''$2''」です。",
 'blockme' => '自分をブロック',
 'proxyblocker' => 'プロキシブロック係',
 'proxyblocker-disabled' => 'この機能は無効になっています。',
-'proxyblockreason' => 'ã\81\94使ç\94¨ä¸­ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81¯å\85¬é\96\8bã\83\97ã\83­ã\82­ã\82·ã\81§ã\81\82ã\82\8bã\81\9fã\82\81æ\8a\95稿ブロックされています。
-使用中のインターネットサービスプロバイダー、または所属組織の技術担当者に連絡して、これが深刻なセキュリティ問題であることを伝えてください。',
+'proxyblockreason' => 'ã\81\93ã\81®IPã\82¢ã\83\89ã\83¬ã\82¹ã\81¯å\85¬é\96\8bã\83\97ã\83­ã\82­ã\82·ã\81§ã\81\82ã\82\8bã\81\9fã\82\81ブロックされています。
+ご使用中のインターネットサービスプロバイダーまたは所属組織の技術担当者に連絡して、これが深刻なセキュリティ問題であることを伝えてください。',
 'proxyblocksuccess' => '完了。',
+'sorbs' => 'DNSBL',
 'sorbsreason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。',
 'sorbs_create_account_reason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。
 アカウント作成はできません',
 'cant-block-while-blocked' => 'ブロックされている間は、他の利用者をブロックできません。',
-'cant-see-hidden-user' => '投稿ブロックしようとした利用者は、既にブロックされ隠されています。
-hideuser権限を持っていないため、この利用者のブロックを閲覧または編集できません。',
+'cant-see-hidden-user' => 'ブロックしようとしている利用者は、既にブロックされ隠されています。
+あなたには hideuser 権限がないため、この利用者のブロックの閲覧/編集はできません。',
 'ipbblocked' => '自分自身をブロックしているため、他の利用者のブロックやブロック解除はできません',
 'ipbnounblockself' => '自分自身のブロックは解除できません',
 
@@ -2887,10 +2911,10 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期しない結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
 'movepagetext-noredirectfixer' => "下のフォームを使用すると、ページ名を変更でき、そのページの履歴も変更先に移動できます。
 移動元のページは移動先への転送ページになります。
-自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
+自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
 つながるべき場所にリンクがつながるよう維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。
+移動先が既に存在する場合は、そのページが空または転送ページで、かつ過去の版を持たない場合を除いて移動'''できません'''。
 つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''警告!'''
@@ -2914,8 +2938,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'movepagebtn' => 'ページを移動',
 'pagemovedsub' => '移動に成功しました',
 'movepage-moved' => "'''「$1」は「$2」へ移動されました'''",
-'movepage-moved-redirect' => 'リダイレクトが作成されました。',
-'movepage-moved-noredirect' => 'リダイレクトは作成されませんでした。',
+'movepage-moved-redirect' => '転送ページを作成しました。',
+'movepage-moved-noredirect' => '転送ページは作成されませんでした。',
 'articleexists' => '指定された移動先には既にページが存在するか、名前が不適切です。
 別の名前を選択してください。',
 'cantmove-titleprotected' => '新しいページ名が作成保護されているため、この場所にページを移動できません',
@@ -2923,8 +2947,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 手動で統合してください。'''",
 'movedto' => '移動先:',
 'movetalk' => '付随するトークページも移動',
-'move-subpages' => '下位ページも移動($1ページまで)',
-'move-talk-subpages' => 'トークページの下位ページも移動($1個まで)',
+'move-subpages' => '下位ページも移動 ($1 件まで)',
+'move-talk-subpages' => 'トークページの下位ページも移動 ($1 件まで)',
 'movepage-page-exists' => 'ページ「$1」は既に存在するため、自動的な上書きはできませんでした。',
 'movepage-page-moved' => 'ページ「$1」は「$2」に移動しました。',
 'movepage-page-unmoved' => 'ページ「$1」は「$2」に移動できませんでした。',
@@ -2932,7 +2956,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'movelogpage' => '移動記録',
 'movelogpagetext' => '以下はすべてのページ移動の一覧です。',
 'movesubpage' => '{{PLURAL:$1|下位ページ}}',
-'movesubpagetext' => 'このページには{{PLURAL:$1|下位ページ}}が以下の $1 件あります。',
+'movesubpagetext' => 'このページには、以下の $1 {{PLURAL:$1|下位ページ}}があります。',
 'movenosubpage' => 'このページに下位ページはありません。',
 'movereason' => '理由:',
 'revertmove' => '差し戻し',
@@ -2954,7 +2978,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'imagetypemismatch' => '新しいファイルの拡張子がファイルのタイプと一致していません',
 'imageinvalidfilename' => '対象ファイル名が無効です',
 'fix-double-redirects' => 'このページへのリダイレクトがあればそのリダイレクトを修正',
-'move-leave-redirect' => '移動元にリダイレクトを作成する',
+'move-leave-redirect' => '移動元に転送ページを作成する',
 'protectedpagemovewarning' => "'''警告:'''このページは保護されているため、管理者権限を持つ利用者のみが移動できます。
 参考として以下に最後の記録を表示します:",
 'semiprotectedpagemovewarning' => "'''注意:'''このページは保護されているため、登録利用者のみが移動できます。
@@ -2995,12 +3019,12 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 MediaWiki 全般のローカライズ(地域化)に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ] や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効のため、このページを使用できません。",
 'allmessages-filter-legend' => '絞り込み',
-'allmessages-filter' => '変更状態により絞り込む',
+'allmessages-filter' => '変更状態により絞り込む:',
 'allmessages-filter-unmodified' => '変更なし',
 'allmessages-filter-all' => 'すべて',
 'allmessages-filter-modified' => '変更あり',
-'allmessages-prefix' => '名前の先頭部分で絞り込む',
-'allmessages-language' => '言語',
+'allmessages-prefix' => '名前の先頭部分で絞り込む:',
+'allmessages-language' => '言語:',
 'allmessages-filter-submit' => '表示',
 
 # Thumbnails
@@ -3055,7 +3079,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'import-parse-failure' => 'XMLの取り込み構文解析に失敗しました',
 'import-noarticle' => '取り込むページがありません!',
 'import-nonewrevisions' => 'すべての版は以前に取り込み済みです。',
-'xml-error-string' => '$1、$2行の$3文字目($4バイト目):$5',
+'xml-error-string' => '$1、$2 行の $3 文字目 ($4バイト目): $5',
 'import-upload' => 'XMLデータをアップロード',
 'import-token-mismatch' => 'セッションデータを損失しました。
 もう一度試してください。',
@@ -3079,7 +3103,6 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript をテスト中',
-'javascripttest-disabled' => 'この機能はこのウィキでは有効にされていません。',
 'javascripttest-title' => '$1 のテストの実行',
 'javascripttest-pagetext-noframework' => 'このページは JavaScript のテストを実行するために予約されています。',
 'javascripttest-pagetext-unknownframework' => '未知のテストフレームワーク「$1」。',
@@ -3145,16 +3168,16 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-ca-nstab-category' => 'カテゴリページを閲覧',
 'tooltip-minoredit' => 'この編集に細部の変更の印を付ける',
 'tooltip-save' => '変更を保存する',
-'tooltip-preview' => '変更をプレビューで確認できます。保存前に使用してください!',
-'tooltip-diff' => '文章中で変更した箇所を表示する',
+'tooltip-preview' => '変更内容をプレビューで確認できます。保存前に使用してください!',
+'tooltip-diff' => '文章への変更箇所を表示する',
 'tooltip-compareselectedversions' => '選択した2つの版の差分を表示する',
 'tooltip-watch' => 'このページをウォッチリストに追加する',
 'tooltip-watchlistedit-normal-submit' => 'ページを除去する',
 'tooltip-watchlistedit-raw-submit' => 'ウォッチリストを更新する',
 'tooltip-recreate' => '削除されていても、ページを再作成する',
 'tooltip-upload' => 'アップロードを開始する',
-'tooltip-rollback' => '「巻き戻し」はã\80\81æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9f人ã\81«ã\82\88ã\82\8bã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®è¤\87æ\95°ã\81®ç·¨é\9b\86ã\82\92\82¯ã\83ªã\83\83ã\82¯ã\81§å·®ã\81\97æ\88»ã\81\97ã\81¾ã\81\99',
-'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビューを付けて開きます。要約欄に取り消しの理由を追加できます。',
+'tooltip-rollback' => '「巻き戻し」はæ\9c\80å¾\8cã\81®ç·¨é\9b\86è\80\85ã\81«ã\82\88ã\82\8bã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®è¤\87æ\95°ã\81®ç·¨é\9b\86ã\82\92\82¯ã\83ªã\83\83ã\82¯ã\81§å·®ã\81\97æ\88»ã\81\97ã\81¾ã\81\99',
+'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビュー付きで開きます。要約欄に理由を追加できます。',
 'tooltip-preferences-save' => '設定を保存する',
 'tooltip-summary' => '短い要約を入力してください',
 
@@ -3234,6 +3257,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 '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' => 'ページ作成者',
@@ -3243,10 +3267,11 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'pageinfo-edits' => '総編集回数',
 'pageinfo-authors' => '総投稿者数',
 'pageinfo-recent-edits' => '最近の編集回数 (過去 $1)',
-'pageinfo-restriction' => 'ページ保護 (<code>$1</code>)',
+'pageinfo-recent-authors' => '最近の投稿者数',
 'pageinfo-magic-words' => 'マジック {{PLURAL:$1|ワード}} ($1)',
 'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
 'pageinfo-templates' => '参照読み込みされた{{PLURAL:$1|テンプレート}} ($1)',
+'pageinfo-toolboxlink' => 'ページ情報',
 
 # Skin names
 'skinname-standard' => 'クラシック',
@@ -3276,8 +3301,8 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'log-show-hide-patrol' => '巡回記録を$1',
 
 # Image deletion
-'deletedrevision' => '古い版$1を削除しました',
-'filedeleteerror-short' => 'ファイル削除エラー:$1',
+'deletedrevision' => '古い版 $1 を削除しました',
+'filedeleteerror-short' => 'ファイルの削除エラー: $1',
 'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました:
 
 $1',
@@ -3321,7 +3346,7 @@ $1',
 'newimages-summary' => 'この特別ページでは、最近アップロードされたファイルを表示します。',
 'newimages-legend' => '絞り込み',
 'newimages-label' => 'ファイル名(またはその一部):',
-'showhidebots' => '(ボットを$1)',
+'showhidebots' => '(ボットを$1)',
 'noimages' => '表示できるものがありません。',
 'ilsubmit' => '検索',
 'bydate' => '日付順',
@@ -3392,6 +3417,11 @@ Variants for Chinese language
 'variantname-ike-latn' => 'イヌクティトゥット語 (ラテン文字)',
 'variantname-iu' => 'イヌクティトゥット語',
 
+# Variants for Tachelhit language
+'variantname-shi-tfng' => 'シルハ語 (ティフィナグ文字)',
+'variantname-shi-latn' => 'シルハ語 (ラテン文字)',
+'variantname-shi' => 'シルハ語',
+
 # Metadata
 'metadata' => 'メタデータ',
 'metadata-help' => 'このファイルには、追加情報があります(おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)。
@@ -3450,7 +3480,7 @@ Variants for Chinese language
 'exif-compressedbitsperpixel' => '画像圧縮モード',
 'exif-pixelydimension' => '実効画像の幅',
 'exif-pixelxdimension' => '実効画像の高さ',
-'exif-usercomment' => 'ユーザコメント',
+'exif-usercomment' => 'ã\83¦ã\83¼ã\82¶ã\83¼ ã\82³ã\83¡ã\83³ã\83\88',
 'exif-relatedsoundfile' => '関連音声ファイル',
 'exif-datetimeoriginal' => '原画像データの生成日時',
 'exif-datetimedigitized' => 'デジタルデータの作成日時',
@@ -3817,10 +3847,10 @@ Variants for Chinese language
 # E-mail address confirmation
 'confirmemail' => 'メールアドレスの確認',
 'confirmemail_noemail' => '[[Special:Preferences|個人設定]]で有効なメールアドレスが指定されていません。',
-'confirmemail_text' => '{{SITENAME}}では、メール機能を利用する前にメールアドレスの確認が必要です。
-以ä¸\8bã\81®ã\83\9cã\82¿ã\83³ã\82\92æ\8a¼ã\81\99ã\81¨ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ç¢ºèª\8dã\83¡ã\83¼ã\83«ã\81\8cé\80\81ã\82\89ã\82\8cます。
\83¡ã\83¼ã\83«ã\81«ã\81¯ç¢ºèª\8dç\94¨ã\82³ã\83¼ã\83\89ã\82\92å\90«ã\82\80ã\83ªã\83³ã\82¯ã\81\8cæ\9b¸ã\81\8bã\82\8cã\81¦ã\81\84ます。
\81\9dã\81®ã\83ªã\83³ã\82¯ã\82\92ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§èª­ã\81¿è¾¼ã\82\93ã\81§ã\80\81ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81®æ­£å½\93æ\80§ã\82\92確èª\8dã\81\97てください。',
+'confirmemail_text' => '{{SITENAME}}では、メール機能を使用する前にメールアドレスの検証が必要です。
+以ä¸\8bã\81®ã\83\9cã\82¿ã\83³ã\82\92æ\8a¼ã\81\99ã\81¨ã\80\81ã\81\82ã\81ªã\81\9fã\81®ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81«ç¢ºèª\8dç\94¨ã\83¡ã\83¼ã\83«ã\82\92ã\81\8aé\80\81ã\82\8aã\81\97ます。
\81\9dã\81®ã\83¡ã\83¼ã\83«å\86\85ã\81«ã\80\81確èª\8dç\94¨ã\82³ã\83¼ã\83\89ã\82\92å\90«ã\82\80ã\83ªã\83³ã\82¯ã\81\8cã\81\82ã\82\8aます。
\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81\8cæ\9c\89å\8a¹ã\81§ã\81\82ã\82\8bã\81\93ã\81¨ã\82\92確èª\8dã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ã\81\9dã\81®ã\83ªã\83³ã\82¯ã\82\92ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81§é\96\8bã\81\84てください。',
 'confirmemail_pending' => '確認用コードをメールで既にお送りしました。
 アカウントを作成したばかりの場合は、メールが届くまでしばらくお待ちください。届かない場合は新しいコードを再度申請してください。',
 'confirmemail_send' => '確認用コードをメールで送信',
@@ -3848,7 +3878,7 @@ Variants for Chinese language
 $3
 
 もしアカウントの登録をした覚えがない場合は、
-次のURLをブラウザーで開いて、メール確認を中止してください:
+次のURLをブラウザーで開いて、メールアドレスの確認を中止してください:
 
 $5
 
@@ -3887,6 +3917,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[ウィキ間の参照読み込みは無効になっています]',
 'scarytranscludefailed' => '[$1に対してテンプレートの取得に失敗しました]',
+'scarytranscludefailed-httpstatus' => '[$1に対してテンプレートの取得に失敗しました: HTTP $2]',
 'scarytranscludetoolong' => '[URLが長すぎます]',
 
 # Delete conflict
@@ -3900,7 +3931,7 @@ $5
 # action=purge
 'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'このページのキャッシュを破棄しますか?',
-'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
+'confirm-purge-bottom' => 'ページをパージすると、キャッシュが破棄され、強制的に最新版が表示されます。',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'OK',
@@ -3909,9 +3940,9 @@ $5
 'confirm-unwatch-top' => 'このページをウォッチリストから除去しますか?',
 
 # Separators for various lists, etc.
-'semicolon-separator' => '',
+'semicolon-separator' => ';&#32;',
 'comma-separator' => '、',
-'colon-separator' => '',
+'colon-separator' => ':&#32;',
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '&#32;',
 'parentheses' => '($1)',
@@ -3930,14 +3961,14 @@ $5
 'table_pager_first' => '最初のページ',
 'table_pager_last' => '最後のページ',
 'table_pager_limit' => '1ページに$1項目を表示',
-'table_pager_limit_label' => 'ページあたりの項目数',
+'table_pager_limit_label' => 'ページあたりの項目数:',
 'table_pager_limit_submit' => '実行',
 'table_pager_empty' => '結果なし',
 
 # Auto-summaries
 'autosumm-blank' => 'ページの白紙化',
 'autosumm-replace' => '内容を「$1」で置換',
-'autoredircomment' => '[[$1]]へのリダイレクト',
+'autoredircomment' => '[[$1]]への転送ページ',
 'autosumm-new' => 'ページの作成:「$1」',
 
 # Size units
@@ -3970,11 +4001,11 @@ $5
 'watchlistedit-normal-legend' => 'ウォッチリストからページ名を除去',
 'watchlistedit-normal-explain' => 'ウォッチリストに入っているページ名を以下に表示しています。
 ページを除去するには、隣のボックスにチェックを入れて「{{int:watchlistedit-normal-submit}}」をクリックしてください。
\81¾ã\81\9fã\80\81[[Special:EditWatchlist/raw|ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\81\9dã\81®ã\81¾ã\81¾編集]]も使用できます。',
\81¾ã\81\9fã\80\81[[Special:EditWatchlist/raw|ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\83\86ã\82­ã\82¹ã\83\88ã\81§編集]]も使用できます。',
 'watchlistedit-normal-submit' => 'ページを除去',
 'watchlistedit-normal-done' => 'ウォッチリストから {{PLURAL:$1|$1 件のページ}}を削除しました:',
-'watchlistedit-raw-title' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\81\9dã\81®ã\81¾ã\81¾編集',
-'watchlistedit-raw-legend' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\81\9dã\81®ã\81¾ã\81¾編集',
+'watchlistedit-raw-title' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\83\86ã\82­ã\82¹ã\83\88ã\81§編集',
+'watchlistedit-raw-legend' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\83\86ã\82­ã\82¹ã\83\88ã\81§編集',
 'watchlistedit-raw-explain' => '以下に、ウォッチリストに含まれるページ名を列挙しています。この一覧で追加や除去ができます。
 1行に1ページ名です。
 完了したら、「{{int:Watchlistedit-raw-submit}}」をクリックしてください。
@@ -3988,7 +4019,7 @@ $5
 # Watchlist editing tools
 'watchlisttools-view' => '関連する変更を閲覧',
 'watchlisttools-edit' => 'ウォッチリストの閲覧と編集',
-'watchlisttools-raw' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\81\9dã\81®ã\81¾ã\81¾編集',
+'watchlisttools-raw' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\82\92ã\83\86ã\82­ã\82¹ã\83\88ã\81§編集',
 
 # Iranian month names
 'iranian-calendar-m1' => 'ファルヴァルディーン',
@@ -4179,9 +4210,9 @@ MediaWikiは、有用であることを期待して配布されていますが
 'htmlform-select-badoption' => '指定した値は有効な選択肢ではありません。',
 'htmlform-int-invalid' => '指定した値は整数ではありません。',
 'htmlform-float-invalid' => '指定した値は数値ではありません。',
-'htmlform-int-toolow' => '指定した値は$1の最小値未満です',
-'htmlform-int-toohigh' => '指定した値は$1の最大値を超えています',
-'htmlform-required' => 'この値は必です',
+'htmlform-int-toolow' => '指定した値は、最小値 $1 より小さい値です',
+'htmlform-int-toohigh' => '指定した値は、最大値 $1 を超えています',
+'htmlform-required' => 'この値は必です',
 'htmlform-submit' => '送信',
 'htmlform-reset' => '変更を取り消す',
 'htmlform-selectorother-other' => 'その他',
@@ -4192,13 +4223,13 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # New logging system
 'logentry-delete-delete' => '$1 がページ「$3」を削除しました',
-'logentry-delete-restore' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92復帰しました',
-'logentry-delete-event' => '$1 が$3の{{PLURAL:$5|$5件の記録項目}}の閲覧レベルを変更しました:$4',
+'logentry-delete-restore' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92復å\85\83しました',
+'logentry-delete-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを変更しました:$4',
 'logentry-delete-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを変更しました:$4',
 'logentry-delete-event-legacy' => '$1 が「$3」の記録項目の閲覧レベルを変更しました',
 'logentry-delete-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを変更しました',
 'logentry-suppress-delete' => '$1 がページ「$3」を隠蔽しました',
-'logentry-suppress-event' => '$1 が$3の{{PLURAL:$5|$5件の記録項目}}の閲覧レベルを見えない形で変更しました:$4',
+'logentry-suppress-event' => '$1 が$3の{{PLURAL:$5|記録項目$5件}}の閲覧レベルを見えない形で変更しました:$4',
 'logentry-suppress-revision' => '$1 がページ「$3」の{{PLURAL:$5|$5版}}の閲覧レベルを見えない形で変更しました:$4',
 'logentry-suppress-event-legacy' => '$1 が$3で記録項目の閲覧レベルを見えない形で変更しました',
 'logentry-suppress-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを見えない形で変更しました',
@@ -4214,8 +4245,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 '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-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 を作成しました',
@@ -4223,8 +4254,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 'newuserlog-byemail' => 'パスワードをメールでお送りしました',
 
 # Feedback
-'feedback-bugornote' => 'æ\8a\80è¡\93ç\9a\84ã\81ªå\95\8fé¡\8cã\81®è©³ç´°ã\82\92説æ\98\8eã\81ªã\81\95ã\82\8bæº\96å\82\99ã\81\8cã\81§ã\81\8dã\81¦ã\81\84ã\82\8bå ´å\90\88ã\81¯[$1 ã\83\90ã\82°ã\82\92å ±å\91\8a\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84
-そうではない場合は、下の簡易フォームを使用してください。あなたのコメントがあなたの利用者名とご使用中のブラウザー名と共に、ページ"[$3 $2]"に追加されます。',
+'feedback-bugornote' => 'æ\8a\80è¡\93ç\9a\84ã\81ªå\95\8fé¡\8cã\81®è©³ç´°ã\82\92説æ\98\8eã\81\99ã\82\8bæº\96å\82\99ã\81\8cã\81§ã\81\8dã\81¦ã\81\84ã\82\8bå ´å\90\88ã\81¯ã\80\81[$1 ã\83\90ã\82°å ±å\91\8a\82\92ã\81\8aé¡\98ã\81\84ã\81\97ã\81¾ã\81\99
+準備ができていない場合は、下の簡易フォームを使用してください。あなたのコメントと利用者名が、ページ「[$3 $2]」に追加されます。',
 'feedback-subject' => '件名:',
 'feedback-message' => 'メッセージ:',
 'feedback-cancel' => 'キャンセル',
@@ -4238,6 +4269,10 @@ MediaWikiは、有用であることを期待して配布されていますが
 'feedback-bugcheck' => 'Great! [$1 既出のバグ]に既に含まれていないかご確認ください。',
 'feedback-bugnew' => 'チェックしました。バグを報告します。',
 
+# Search suggestions
+'searchsuggest-search' => '検索',
+'searchsuggest-containing' => 'この語句を全文検索',
+
 # API errors
 'api-error-badaccess-groups' => 'このウィキへのファイルのアップロードが許可されていません。',
 'api-error-badtoken' => '内部エラー:トークンが正しくありません。',
index 00c4950..5494817 100644 (file)
@@ -403,7 +403,7 @@ Di riizn dehn gi a "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Yu nou lag out.'''
 
-Yu kiahn kantiniu yuuz {{SITENAME}} ananimosli, ar yu kiahn [[Special:UserLogin|lag iin agen]] az di siem ar az difrant yuuza.
+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.
@@ -723,8 +723,6 @@ Lejen: '''({{int:cur}})''' = difrans wid lietis rivijan, '''({{int:last}})''' =
 'search-interwiki-caption' => 'Sista prajek',
 'search-interwiki-default' => '$1 rizoltdem:',
 'search-interwiki-more' => '(muo)',
-'search-mwsuggest-enabled' => 'wid sojeshan',
-'search-mwsuggest-disabled' => 'nuo sojeshan',
 'nonefound' => "'''Nuot''': Onggl som niemspies saach bai difaalt.
 Chrai priifix yu kwieri wid ''all:'' fi saach aal kantent (inkluudn taak piej, templit, esechra), ar yuuz di dizaya niemspies fi priifix.",
 'powersearch' => 'Advans saach',
index 54cdcee..90b75d2 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author (vinny)
+ * @author Gleki
  * @author Homo logos
  * @author Inego (on jbo.wikipedia.org)
  * @author Malafaya
@@ -19,244 +20,317 @@ $messages = array(
 # User preference toggles
 'tog-justify' => 'jufmei co mulno selkuspe',
 
+'underline-always' => 'roroi',
+'underline-never' => 'noroi',
+
 # Dates
-'sunday'        => 'la zedjed.',
-'monday'        => 'la padjed.',
-'tuesday'       => 'la redjed.',
-'wednesday'     => 'la cedjed.',
-'thursday'      => 'la vodjed.',
-'friday'        => 'la mudjed.',
-'saturday'      => 'la xadjed.',
-'january'       => 'ianvari',
-'february'      => 'frebruari',
-'march'         => 'martio',
-'april'         => 'prilio',
-'may_long'      => 'madjio',
-'june'          => 'djunio',
-'july'          => 'djulio',
-'august'        => 'avgusto',
-'september'     => 'septembero',
-'october'       => 'oktobero',
-'november'      => 'novmbero',
-'december'      => 'decmbero',
-'january-gen'   => 'la pamast.',
-'february-gen'  => 'la remast.',
-'march-gen'     => 'la cimast.',
-'april-gen'     => 'la vomast.',
-'may-gen'       => 'la mumast.',
-'june-gen'      => 'la xamast.',
-'july-gen'      => 'la zemast.',
-'august-gen'    => 'la bimast.',
+'sunday' => 'la zedjed.',
+'monday' => 'la padjed.',
+'tuesday' => 'la redjed.',
+'wednesday' => 'la cedjed.',
+'thursday' => 'la vodjed.',
+'friday' => 'la mudjed.',
+'saturday' => 'la xadjed.',
+'sun' => 'la zedjed',
+'mon' => 'la padjed',
+'tue' => 'la redjed',
+'wed' => 'la cidjed',
+'thu' => 'la vodjed',
+'fri' => 'la mudjed',
+'sat' => 'la xadjed',
+'january' => 'ianvari',
+'february' => 'frebruari',
+'march' => 'martio',
+'april' => 'prilio',
+'may_long' => 'madjio',
+'june' => 'djunio',
+'july' => 'djulio',
+'august' => 'avgusto',
+'september' => 'septembero',
+'october' => 'oktobero',
+'november' => 'novmbero',
+'december' => 'decmbero',
+'january-gen' => 'la pamast.',
+'february-gen' => 'la remast.',
+'march-gen' => 'la cimast.',
+'april-gen' => 'la vomast.',
+'may-gen' => 'la mumast.',
+'june-gen' => 'la xamast.',
+'july-gen' => 'la zemast.',
+'august-gen' => 'la bimast.',
 'september-gen' => 'la somast.',
-'october-gen'   => 'la daumast.',
-'november-gen'  => 'la feimast.',
-'december-gen'  => 'la gaimast.',
-'jan'           => 'ian',
-'feb'           => 'fre',
-'mar'           => 'mar',
-'apr'           => 'pri',
-'may'           => 'mad',
-'jun'           => 'jun',
-'jul'           => 'jul',
-'aug'           => 'avg',
-'sep'           => 'sep',
-'oct'           => 'okt',
-'nov'           => 'nov',
-'dec'           => 'dec',
+'october-gen' => 'la daumast.',
+'november-gen' => 'la feimast.',
+'december-gen' => 'la gaimast.',
+'jan' => 'ian',
+'feb' => 'fre',
+'mar' => 'mar',
+'apr' => 'pri',
+'may' => 'mad',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'avg',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|klesi|klesi}}',
-'category_header'        => 'fe le kibypapri cu klesi "$1"',
-'subcategories'          => "le'a ti",
-'category-subcat-count'  => "$2 klesi cu vipsi le vi klesi .i $1 vipkle cu ni'a se jarco",
-'category-article-count' => "$2 kibypapri cu cmima le vi klesi .i $1 kibypapri cu ni'a se jarco",
-
-'mytalk'     => 'casnu mi',
+'pagecategories' => '{{PLURAL:$1|klesi|klesi}}',
+'category_header' => 'fe le kibypapri cu klesi "$1"',
+'subcategories' => "le'a ti",
+'category-subcat-count' => "$2 klesi cu vipsi le vi klesi .i $1 vipkle cu ni'a se jarco",
+'category-article-count' => "{{PLURAL:$2|pa vi ckupau ku po'o cmima lo vi klesi.| {{PLURAL:$1|lo vi ckupau|$1 vi ckupau }} ku cmima lo vi klesi, out of $2 total.}}",
+'listingcontinuesabbrev' => "co'unai",
+
+'about' => 've skicu',
+'moredotdotdot' => '.au zmadu',
+'mytalk' => 'casnu mi',
 'navigation' => 'ckupau',
 
 # Cologne Blue skin
-'qbedit'        => 'stika',
+'qbfind' => 'facki',
+'qbedit' => 'stika',
 'qbpageoptions' => 'ti ckupau',
-'faq'           => 'FAQ',
-'faqpage'       => 'Project:FAQ',
-
-'errorpagetitle'   => 'fliba',
-'tagline'          => "ra'i {{SITENAME}}",
-'help'             => 'sidju ckupau',
-'search'           => 'sisku',
-'searchbutton'     => 'sisku',
-'searcharticle'    => 'jarco',
-'history_short'    => 'galfi plivei',
+'qbmyoptions' => 'lo pe mi ckupau',
+'qbspecialpages' => 'steci ckupau',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
+
+# Vector skin
+'vector-action-addsection' => "jmina la'e se casnu",
+'vector-action-delete' => 'vimcu',
+'vector-action-move' => 'stika lo cmene',
+'vector-view-create' => 'zbasu',
+'vector-view-edit' => 'stika',
+'vector-view-history' => 'ko cpacu lo vreji citri',
+'vector-view-view' => 'tcidu',
+'vector-view-viewsource' => 'cpacu lo krasi',
+'actions' => 'nu zukte',
+'namespaces' => 'cmene canlu',
+
+'errorpagetitle' => 'fliba',
+'tagline' => "ra'i {{SITENAME}}",
+'help' => 'sidju ckupau',
+'search' => 'sisku',
+'searchbutton' => 'sisku',
+'searcharticle' => 'jarco',
+'history' => 'lo ckupau citri',
+'history_short' => 'galfi plivei',
 'printableversion' => 'plepri simsa',
-'permalink'        => "vitno terjo'e",
-'edit'             => 'stika',
-'create'           => 'ninzba',
-'delete'           => 'daspo',
-'protect'          => 'bandu',
-'protect_change'   => 'binxo',
+'permalink' => "vitno terjo'e",
+'view' => 'cpacu',
+'edit' => 'stika',
+'create' => 'ninzba',
+'editthispage' => 'stika lo vi ckupau',
+'create-this-page' => 'zbasu lo vi ckupau',
+'delete' => 'daspo',
+'deletethispage' => 'vimcu lo vi ckupau',
+'protect' => 'bandu',
+'protect_change' => 'binxo',
+'newpage' => 'lo cnino ckupau',
 'talkpagelinktext' => 'casnu',
-'specialpage'      => 'steci ckupau',
-'personaltools'    => 'Sivni tyobuobulysy',
-'talk'             => 'casnu',
-'views'            => 'Catlu',
-'toolbox'          => 'tutci',
-'otherlanguages'   => 'drata bangu',
-'lastmodifiedat'   => "le vi ckupau rore'u se galfi de'i li $2 $1",
-'jumpto'           => 'plipe tyobu:',
+'specialpage' => 'steci ckupau',
+'personaltools' => 'Sivni tyobuobulysy',
+'talk' => 'casnu',
+'views' => 'nu cpacu',
+'toolbox' => 'tutci',
+'otherlanguages' => 'drata bangu',
+'lastmodifiedat' => "le vi ckupau rore'u se galfi de'i li $2 $1",
+'jumpto' => 'plipe tyobu:',
 'jumptonavigation' => 'ckupau',
-'jumptosearch'     => 'sisku',
+'jumptosearch' => 'sisku',
 
 # 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}}',
-'aboutpage'            => "Project:sera'a",
-'copyright'            => "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
-'copyrightpage'        => "{{ns:project}}:fukyzifpo'e",
-'currentevents'        => "caca'a fasnu",
-'currentevents-url'    => "Project:caca'a fasnu",
-'disclaimers'          => "nunxusra lo za'i na fuzme",
-'disclaimerpage'       => "Project:kampu nunxusra be lo za'i na fuzme",
-'edithelp'             => 'stika nunsidju',
-'edithelppage'         => 'Help:Editing',
-'mainpage'             => 'Ralju Ckupau',
+'aboutsite' => 'About {{SITENAME}}',
+'aboutpage' => "Project:sera'a",
+'copyright' => "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
+'copyrightpage' => "{{ns:project}}:fukyzifpo'e",
+'currentevents' => "caca'a fasnu",
+'currentevents-url' => "Project:caca'a fasnu",
+'disclaimers' => "nunxusra lo za'i na fuzme",
+'disclaimerpage' => "Project:kampu nunxusra be lo za'i na fuzme",
+'edithelp' => 'stika nunsidju',
+'edithelppage' => 'Help:Editing',
+'helppage' => 'to nu sidju toi se vasru',
+'mainpage' => 'Ralju Ckupau',
 'mainpage-description' => 'ralju ckupau',
-'portal'               => 'bende ckupau',
-'portal-url'           => 'Project:bende ckupau',
-'privacy'              => "javni be sera'a lo sivni",
-'privacypage'          => "Project:i'inai zukselpla",
-
-'retrievedfrom'        => 'cpacu fi la\'o .url. "$1" .url.',
-'editsection'          => 'stika ti',
+'portal' => 'bende ckupau',
+'portal-url' => 'Project:bende ckupau',
+'privacy' => "javni be sera'a lo sivni",
+'privacypage' => "Project:i'inai zukselpla",
+
+'ok' => 'ie',
+'retrievedfrom' => 'cpacu fi la\'o .url. "$1" .url.',
+'newmessageslink' => 'loi cnino notci',
+'editsection' => 'stika ti',
 'editsection-brackets' => '[$1]',
-'editold'              => 'stika',
-'viewsourceold'        => 'catlu le mifra',
-'editlink'             => 'stika ti',
-'viewsourcelink'       => 'casnu le mifra',
-'editsectionhint'      => 'stika ti: $1',
-'toc'                  => 'ckupau pagbu',
-'showtoc'              => 'jarco',
-'hidetoc'              => 'toljarco',
-'thisisdeleted'        => 'View or restore $1?',
-'viewdeleted'          => 'View $1?',
-'restorelink'          => '{{PLURAL:$1|one deleted edit|$1 deleted edits}}',
-'feedlinks'            => 'Feed:',
-'feed-invalid'         => 'Invalid subscription feed type.',
-'feed-unavailable'     => 'Syndication feeds are not available',
-'site-rss-feed'        => '$1 RSS cidja',
-'site-atom-feed'       => '$1 Atom cidja',
-'red-link-title'       => '$1 (le vi kibypapri cu na zasti)',
+'editold' => 'stika',
+'viewsourceold' => 'catlu le mifra',
+'editlink' => 'stika ti',
+'viewsourcelink' => 'casnu le mifra',
+'editsectionhint' => 'stika ti: $1',
+'toc' => 'ckupau pagbu',
+'showtoc' => 'jarco',
+'hidetoc' => 'toljarco',
+'thisisdeleted' => 'View or restore $1?',
+'viewdeleted' => 'View $1?',
+'restorelink' => '{{PLURAL:$1|one deleted edit|$1 deleted edits}}',
+'feedlinks' => 'Feed:',
+'feed-invalid' => 'Invalid subscription feed type.',
+'feed-unavailable' => 'Syndication feeds are not available',
+'site-rss-feed' => '$1 RSS cidja',
+'site-atom-feed' => '$1 Atom cidja',
+'red-link-title' => '$1 (le vi kibypapri cu na zasti)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'kibypapri',
-'nstab-user'      => 'pilno kibypapri',
-'nstab-media'     => 'Media page',
-'nstab-special'   => 'steci kibypapri',
+'nstab-main' => 'lo ckupau',
+'nstab-user' => 'pilno kibypapri',
+'nstab-media' => 'Media page',
+'nstab-special' => 'steci ckupau',
+'nstab-project' => 'gungunma ckupau',
+'nstab-image' => 'vreji',
 'nstab-mediawiki' => 'notci',
-'nstab-category'  => 'klesi',
+'nstab-category' => 'klesi',
 
 # General errors
+'badtitle' => "na'e mapti cmene",
 'viewsource' => 'catlu le mifra',
 
 # Login and logout pages
-'login'                   => "co'a se jaspu",
+'yourname' => 'to pilno cmene toi',
+'login' => "co'a se jaspu",
 'nav-login-createaccount' => 'jaspu nerkla / vreji lo cnino pilno',
-'logout'                  => "co'u se jaspu",
-'userlogout'              => "co'u se jaspu",
-'gotaccountlink'          => "co'a se jaspu",
+'userlogin' => "co'a pilno lo jaspu / zbasu lo jaspu",
+'logout' => "co'u se jaspu",
+'userlogout' => "co'u se jaspu",
+'nologinlink' => 'zbasu lo jaspu',
+'gotaccountlink' => "co'a se jaspu",
+'loginlanguagelabel' => 'to bangu toi $1',
+
+# Special:PasswordReset
+'passwordreset-username' => 'to pilno cmene toi',
 
 # Edit page toolbar
 'extlink_sample' => 'http://www.example.com link title',
+'media_tip' => 'judri lo vreji',
 
 # Edit pages
-'minoredit'      => "ti nu na'evajni galfi",
-'watchthis'      => 'zgana ti',
-'savearticle'    => 'vreji le ckupau',
-'showpreview'    => 'troci jarco',
-'showdiff'       => 'jarco lo te frica',
-'loginreqlink'   => "co'a se jaspu",
-'previewnote'    => "'''ko morji le du'u ti seljarco o'i'''
+'summary' => 'to ve skicu toi',
+'minoredit' => "ti nu na'evajni galfi",
+'watchthis' => 'zgana ti',
+'savearticle' => 'vreji le ckupau',
+'showpreview' => 'troci jarco',
+'showdiff' => 'jarco lo te frica',
+'loginreqlink' => "co'a se jaspu",
+'newarticle' => 'to cnino toi',
+'previewnote' => "'''ko morji le du'u ti seljarco o'i'''
 .i lo do nunstika cu na pu vreji",
-'editing'        => "ca galfi la'e lu $1 li'u",
+'editing' => "ca galfi la'e lu $1 li'u",
 'editingsection' => 'ca galfi le selcmene be zoi $1 (section)',
 'editingcomment' => 'ca galfi le selcmene be zoi $1 (comment)',
 
 # History pages
 'revisionasof' => "velfarvi de'i $1",
-'cur'          => 'cab',
-'last'         => "prula'i",
-'page_first'   => 'pamoi',
-'page_last'    => 'fanmo',
+'cur' => 'cab',
+'last' => "prula'i",
+'page_first' => 'pamoi',
+'page_last' => 'fanmo',
+'history-show-deleted' => "mo'u se vimcu po'o",
+'histfirst' => 'clira traji',
+'histlast' => 'lerci traji',
 
 # Revision deletion
 'rev-delundel' => 'jarco/mipri',
 
 # Diffs
-'lineno'   => 'Linji $1',
+'lineno' => 'Linji $1',
 'editundo' => 'fatstika',
 
 # Search results
-'searchresults'             => "tu'a le se sisku",
-'searchresults-title'       => 'Sisku pruce for "$1"',
-'search-result-size'        => '$1 .i $2 valsi',
-'search-suggest'            => "xu do sisydji lu $1 li'u",
-'search-mwsuggest-enabled'  => 'kansa stidiiyobunysy',
-'search-mwsuggest-disabled' => 'no stidiiyobunysy',
+'searchresults' => "tu'a le se sisku",
+'searchresults-title' => 'Sisku pruce for "$1"',
+'searchhelp-url' => 'to nu sidju toi se vasru',
+'searchprofile-everything' => "ro co'e",
+'search-result-size' => '$1 ({{PLURAL:$2|1 valsi|$2 valsi}})',
+'search-suggest' => "xu do sisydji lu $1 li'u",
+'searchall' => "ro co'e",
 
 # Preferences page
-'preferences'       => 'zmaselnei',
-'mypreferences'     => 'zmaselnei liste',
-'prefs-editing'     => 'ca galfi',
+'preferences' => 'zmaselnei',
+'mypreferences' => 'zmaselnei liste',
+'prefs-editing' => 'ca galfi',
 'searchresultshead' => "tu'a le se sisku",
-'savedprefs'        => 'le do zmaselnei pu vreji',
+'savedprefs' => 'le do zmaselnei pu vreji',
+'yourrealname' => 'to fatci cmene toi',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'stika lo vi ckupau',
 
 # Recent changes
-'recentchanges'     => 'puzi nunstika',
-'recentchangestext' => 'liste loi nu puzi galfi la .uikis.',
-'rcshowhidebots'    => '$1 lo zmiku',
-'rcshowhideliu'     => '$1 lo samyzva',
-'diff'              => 'te frica',
-'hist'              => 'galfi plivei',
-'hide'              => 'Toljarco',
-'show'              => 'Jarco',
-'minoreditletter'   => 'm',
-'newpageletter'     => 'n',
-'boteditletter'     => 'z',
+'recentchanges' => 'puzi nunstika',
+'recentchanges-summary' => 'liste loi nu puzi galfi la .uikis.',
+'rcshowhidebots' => '$1 lo zmiku',
+'rcshowhideliu' => '$1 lo samyzva',
+'diff' => 'te frica',
+'hist' => 'galfi plivei',
+'hide' => 'Toljarco',
+'show' => 'Jarco',
+'minoreditletter' => 'm',
+'newpageletter' => 'n',
+'boteditletter' => 'z',
 
 # Recent changes linked
 'recentchangeslinked' => "srana nunga'i",
+'recentchangeslinked-page' => 'to ckupau cmene toi',
 
 # Upload
-'upload'    => 'benji lo datnyvei',
-'uploadbtn' => 'benji lo datnyvei',
+'upload' => 'benji pa vreji',
+'uploadbtn' => 'benji pa vreji',
+'filedesc' => 'to ve skicu toi',
 
 # File description page
-'filehist-current'  => 'cabna',
+'file-anchor-link' => 'vreji',
+'filehist' => 'lo vreji citri',
+'filehist-current' => 'cabna',
 'filehist-datetime' => 'detytcika',
+'filehist-user' => 'pilno',
+'filehist-comment' => 'pinka',
+'imagelinks' => 'vreji nu pilno',
 
 # Random page
 'randompage' => 'cunso ckupau',
 
 # Miscellaneous special pages
+'newpages' => 'lo cnino ckupau',
 'move' => 'stika lo cmene',
 
+# Book sources
+'booksources-go' => 'sazri',
+
 # Special:AllPages
-'allarticles'    => 'ro notci',
+'allpages' => 'ro ckupau',
+'allarticles' => 'ro notci',
 'allpagessubmit' => 'jarco',
 
 # Special:Categories
 'categories' => 'klesi',
 
 # Watchlist
-'watchlist'     => 'selzgaste',
-'mywatchlist'   => 'selzgaste',
-'watch'         => 'jundi',
+'watchlist' => 'selzgaste',
+'mywatchlist' => 'selzgaste',
+'watch' => 'jundi',
 'watchthispage' => 'zgana ti',
+'unwatch' => "de'a zgana",
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => "co'a jundi",
+'watching' => "co'a jundi",
 'unwatching' => "co'u jundi",
 
 # Delete
-'dellogpage'  => 'plivei fi loi nu daspo',
+'actioncomplete' => "mo'u pruce",
+'actionfailed' => 'fliba lo nu pruce',
+'dellogpage' => 'plivei fi loi nu daspo',
 'deletionlog' => 'plivei fi loi nu daspo',
 
 # Rollback
@@ -265,45 +339,78 @@ $messages = array(
 # Restrictions (nouns)
 'restriction-edit' => 'stika',
 
+# Undelete
+'undeleteviewlink' => 'cpacu',
+
 # Namespace form on various pages
+'namespace' => 'to cmene canlu toi',
 'blanknamespace' => '(ralju)',
 
 # Contributions
 'contributions' => 'selstika le pilno',
-'mycontris'     => 'pu selstika mi',
+'mycontris' => 'pu selstika mi',
 
-'sp-contributions-talk'   => 'casnu',
+'sp-contributions-talk' => 'casnu',
 'sp-contributions-submit' => 'sisku',
 
 # What links here
 'whatlinkshere' => 'ma jorne ti',
+'whatlinkshere-page' => 'to ckupau toi',
+'isimage' => 'judri lo vreji',
+'whatlinkshere-prev' => "{{PLURAL:$1|lidne|se lidne la'o url $1 url}}",
+'whatlinkshere-links' => 'to loi judri toi',
+'whatlinkshere-hidelinks' => "loi judri la'o .url $1 .url",
 
 # Block/unblock
-'blocklink'        => 'zunti',
+'blocklink' => 'zunti',
 'change-blocklink' => 'stika bliku',
-'contribslink'     => 'selstika',
+'contribslink' => 'selstika',
 
 # Move page
-'movedto'    => 'te muvdu',
+'movedto' => 'te muvdu',
 'revertmove' => 'xruti',
 
+# Namespace 8 related
+'allmessagesname' => 'cmene',
+
 # Tooltip help for the actions
-'tooltip-pt-watchlist'          => 'le liste be lo kibypapri poi do zgana',
-'tooltip-pt-mycontris'          => 'le liste be le do selstika',
-'tooltip-pt-logout'             => "co'u se jaspu",
-'tooltip-ca-watch'              => 'jmive le vi kibypapri le do selzgaste',
-'tooltip-search'                => 'Sisku {{SITENAME}}',
-'tooltip-search-go'             => "Litru tyobu abu kibypapri kansa tyy'y.buibusy satci cmene ibufy zasti",
-'tooltip-search-fulltext'       => "sisku do'i lei ckupau",
-'tooltip-n-mainpage'            => 'vitke le ralju ckupau',
-'tooltip-n-randompage'          => 'jarco lo cunso ckupau',
-'tooltip-n-help'                => 'sidju kibypapri',
-'tooltip-t-whatlinkshere'       => "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
+'tooltip-pt-userpage' => 'ckupau pe do poi pilno',
+'tooltip-pt-mytalk' => 'pe do nu casnu ckupau',
+'tooltip-pt-watchlist' => 'le liste be lo kibypapri poi do zgana',
+'tooltip-pt-mycontris' => 'le liste be le do selstika',
+'tooltip-pt-logout' => "co'u se jaspu",
+'tooltip-ca-delete' => 'vimcu lo vi ckupau',
+'tooltip-ca-move' => 'ko galfi lo cmene be lo vi ckupau',
+'tooltip-ca-watch' => 'jmive le vi kibypapri le do selzgaste',
+'tooltip-search' => 'Sisku {{SITENAME}}',
+'tooltip-search-go' => "Litru tyobu abu kibypapri kansa tyy'y.buibusy satci cmene ibufy zasti",
+'tooltip-search-fulltext' => "sisku do'i lei ckupau",
+'tooltip-p-logo' => 'vitke lo ralju ckupau',
+'tooltip-n-mainpage' => 'vitke lo ralju ckupau',
+'tooltip-n-mainpage-description' => 'vitke lo ralju ckupau',
+'tooltip-n-recentchanges' => "liste lo puzi nunstika vreji be bu'u lo vi uitke",
+'tooltip-n-randompage' => 'jarco lo cunso ckupau',
+'tooltip-n-help' => 'sidju kibypapri',
+'tooltip-t-whatlinkshere' => "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
 'tooltip-t-recentchangeslinked' => "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
-'tooltip-undo'                  => "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
+'tooltip-t-upload' => 'benji lo vreji',
+'tooltip-t-specialpages' => 'liste ro steci ckupau',
+'tooltip-ca-nstab-project' => 'cpacu lo gungunma ckupau',
+'tooltip-ca-nstab-image' => 'cpacu lo vreji ckupau',
+'tooltip-ca-nstab-template' => 'cpacu lo morna',
+'tooltip-save' => 'lo nu stika ku ranji gau',
+'tooltip-undo' => "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
+
+# External editor support
+'edit-externally' => "stika lo vi vreji sepi'o lo na'e diklo selsampla",
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => "ro co'e",
+'namespacesall' => "ro co'e",
+'monthsall' => "ro co'e",
 
 # Special:FilePath
-'filepath-page' => 'se datnyvei zoi',
+'filepath-page' => 'se vreji zoi',
 
 # Special:SpecialPages
 'specialpages' => 'steci ckupau',
index 62ae858..8777427 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Anggoro
  * @author Helix84
+ * @author Hoo
  * @author Kaganer
  * @author Meursault2004
  * @author NoiX180
@@ -447,7 +448,7 @@ Pangurus sing ngopèni kuwi ngawedharaké: "$3".',
 # Login and logout pages
 'logouttext' => "'''Sampéyan wis metu log'''
 
-Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa [[Special:UserLogin|mlebu log manèh]] kanthi jeneng panganggo sing padha utawa beda.
+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! ==
@@ -1022,8 +1023,6 @@ Rinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'search-interwiki-caption' => 'Proyèk-proyèk kagandhèng',
 'search-interwiki-default' => 'Pituwas $1:',
 'search-interwiki-more' => '(luwih akèh)',
-'search-mwsuggest-enabled' => 'mawa sugèsti',
-'search-mwsuggest-disabled' => 'ora ana sugèsti',
 'search-relatedarticle' => 'Kagandhèng',
 'mwsuggest-disable' => 'Patènana sugèsti AJAX',
 'searcheverything-enable' => 'Golèki ing kabèh bilik-jeneng',
@@ -2591,7 +2590,6 @@ Simpen nèng komputer Sampéyan lan unggaha nèng kéné.',
 
 # JavaScriptTest
 'javascripttest' => 'Panjajalan JavaScript',
-'javascripttest-disabled' => 'Fungsi iki durung diurubaké nèng wiki iki.',
 'javascripttest-title' => 'Nglakokaké pangujian $1',
 'javascripttest-pagetext-noframework' => 'Kaca iki disadhiyakaké kanggo nglakokaké panjajalan JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Rangka kerja panjajalan ora dingertèni "$1".',
@@ -3340,7 +3338,7 @@ Panjenengan uga bisa [[Special:EditWatchlist|nganggo éditor standar panjenengan
 'version-version' => '(Vèrsi $1)',
 'version-license' => 'Lisènsi',
 'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/KRÈDIT liyané]',
+'version-poweredby-others' => 'liyané',
 'version-software' => "''Software'' wis diinstalasi",
 'version-software-product' => 'Prodhuk',
 'version-software-version' => 'Vèrsi',
@@ -3495,6 +3493,10 @@ Utawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal
 'feedback-bugcheck' => 'Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].',
 'feedback-bugnew' => 'Aku wis mriksa. Kandakaké bug anyar',
 
+# Search suggestions
+'searchsuggest-search' => 'Golèk',
+'searchsuggest-containing' => 'ngisi...',
+
 # API errors
 'api-error-badaccess-groups' => 'Sampéyan ora dililakaké ngunggah berkas nèng wiki iki.',
 'api-error-badtoken' => 'Kasalahan njero: Token èlèk.',
index c24776a..fcf0715 100644 (file)
@@ -88,8 +88,8 @@ $specialPageAliases = array(
        'Listgrouprights'           => array( 'ჯგუფის_უფლებათა_სია' ),
        'Listredirects'             => array( 'გადამისამართებების_სია' ),
        'Listusers'                 => array( 'მომხმარებელთა_სია' ),
-       'Lonelypages'               => array( 'ობოლიგვერდები' ),
-       'Longpages'                 => array( 'გრძელიგვერდები' ),
+       'Lonelypages'               => array( 'ობოლი_გვერდები' ),
+       'Longpages'                 => array( 'გრძელი_გვერდები' ),
        'Movepage'                  => array( 'გვერდის_გადატანა' ),
        'Mycontributions'           => array( 'ჩემი_წვლილი' ),
        'Mypage'                    => array( 'ჩემი_გვერდი' ),
@@ -101,10 +101,10 @@ $specialPageAliases = array(
        'Preferences'               => array( 'კონფიგურაცია' ),
        'Protectedpages'            => array( 'დაცული_გვერდები' ),
        'Protectedtitles'           => array( 'დაცული_სათაურები' ),
-       'Randompage'                => array( 'შემთხვევით', 'შემთხვევითიგვერდი' ),
+       'Randompage'                => array( 'შემთხვევით', 'შემთხვევითი_გვერდი' ),
        'Recentchanges'             => array( 'ბოლოცვლილებები' ),
        'Search'                    => array( 'ძიება' ),
-       'Shortpages'                => array( 'მოკლეგვერდები' ),
+       'Shortpages'                => array( 'მოკლე_გვერდები' ),
        'Specialpages'              => array( 'განსაკუთრებული_გვერდები' ),
        'Statistics'                => array( 'სტატისტიკა' ),
        'Unblock'                   => array( 'ბლოკის_მოხსნა' ),
@@ -113,36 +113,54 @@ $specialPageAliases = array(
        'Uncategorizedpages'        => array( 'უკატეგორიო_გვერდები' ),
        'Uncategorizedtemplates'    => array( 'უკატეგორიო_თარგები' ),
        'Undelete'                  => array( 'აღდგენა' ),
-       'Unusedcategories'          => array( 'გამოუყკატეგორიები' ),
-       'Unusedimages'              => array( 'გამოუყსურათები' ),
+       'Unusedcategories'          => array( 'á\83\92á\83\90á\83\9bá\83\9dá\83£á\83§á\83\94á\83\9cá\83\94á\83\91á\83\94á\83\9aá\83\98\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\94á\83\91á\83\98' ),
+       'Unusedimages'              => array( 'á\83\92á\83\90á\83\9bá\83\9dá\83£á\83§á\83\94á\83\9cá\83\94á\83\91á\83\94á\83\9aá\83\98\83¡á\83£á\83 á\83\90á\83\97á\83\94á\83\91á\83\98' ),
        'Upload'                    => array( 'ატვირთვა' ),
        'Userlogin'                 => array( 'შესვლა' ),
        'Userlogout'                => array( 'გასვლა' ),
        'Userrights'                => array( 'მომხმარებელთა_უფლებები' ),
        'Version'                   => array( 'ვერსია' ),
-       'Wantedcategories'          => array( 'მოთხოვნილიკატეგორიები' ),
+       'Wantedcategories'          => array( 'მოთხოვნილი_კატეგორიები' ),
        'Wantedfiles'               => array( 'საჭირო_ფაილები' ),
        'Wantedpages'               => array( 'საჭირო_გვერდები' ),
        'Wantedtemplates'           => array( 'საჭირო_თარგები' ),
-       'Watchlist'                 => array( 'კონტროლსია' ),
-       'Withoutinterwiki'          => array( 'ინტერვიკისგარეშე' ),
+       'Watchlist'                 => array( 'á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡_á\83¡á\83\98á\83\90' ),
+       'Withoutinterwiki'          => array( 'ინტერვიკის_გარეშე' ),
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#გადამისამართება', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__უგალერეო__', '__NOGALLERY__' ),
-       'subst'                   => array( '0', 'მიდგმ:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'მარჯვნივ', 'right' ),
-       'img_left'                => array( '1', 'მარცხნივ', 'left' ),
-       'img_none'                => array( '1', 'არა', 'none' ),
-       'img_width'               => array( '1', '$1პქ', '$1px' ),
-       'img_center'              => array( '1', 'ცენტრი', 'ცენტრში', 'center', 'centre' ),
-       'img_border'              => array( '1', 'საზღვარი', 'border' ),
-       'img_top'                 => array( '1', 'ზედა', 'top' ),
-       'img_middle'              => array( '1', 'შუა', 'middle' ),
-       'img_bottom'              => array( '1', 'ქვედა', 'bottom' ),
-       'special'                 => array( '0', 'სპეციალური', 'special' ),
+       'redirect'                  => array( '0', '#გადამისამართება', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__უგალერეო__', '__NOGALLERY__' ),
+       'currentmonth'              => array( '1', 'მიმდინარე_თვე', 'მიმდინარე_თვე2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'მიმდინარე_თვე1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'მიმდინარე_თვის_სახელი', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'მიმდინარე_თვის_სახელის_აბრევიატურა', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'მიმდინარე_დღე', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'მიმდინარე_დღე2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'მიმდინარე_დღის_სახელი', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'მიმდინარე_წელი', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'მიმდინარე_დრო', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'მიმდინარე_საათი', 'CURRENTHOUR' ),
+       'pagename'                  => array( '1', 'გვერდის_სახელი', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'სახელთა_სივრცე', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'გვერდის_სრული_სახელი', 'FULLPAGENAME' ),
+       'subst'                     => array( '0', 'მიდგმ:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'მინიატიურა=$1', 'მინი=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'მარჯვნივ', 'right' ),
+       'img_left'                  => array( '1', 'მარცხნივ', 'left' ),
+       'img_none'                  => array( '1', 'არა', 'none' ),
+       'img_width'                 => array( '1', '$1პქ', '$1px' ),
+       'img_center'                => array( '1', 'ცენტრი', 'ცენტრში', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'გვერდი=$1', 'გვერდი_$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'საზღვარი', 'border' ),
+       'img_top'                   => array( '1', 'ზედა', 'top' ),
+       'img_middle'                => array( '1', 'შუა', 'middle' ),
+       'img_bottom'                => array( '1', 'ქვედა', 'bottom' ),
+       'img_link'                  => array( '1', 'ბმული=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'ალტ=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'საიტის_სახელი', 'SITENAME' ),
+       'special'                   => array( '0', 'სპეციალური', 'special' ),
 );
 
 $linkPrefixExtension = true;
@@ -276,6 +294,7 @@ $messages = array(
 'index-category' => 'გვერდების ინდექსაცია',
 'noindex-category' => 'არ არსებობს ინდექსირებული გვერდები',
 'broken-file-category' => 'გვერდები ფაილების არასწორი ბმულებით',
+'categoryviewer-pagedlinks' => '($1) ($2)',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
@@ -399,7 +418,7 @@ $1',
 'policy-url' => 'Project:პოლიტიკა',
 'portal' => 'საზოგადოების გვერდები',
 'portal-url' => 'Project:საზოგადოების გვერდები',
-'privacy' => 'á\83\90á\83\9cá\83\9dá\83\9cá\83\98á\83\9bურობის პოლიტიკა',
+'privacy' => 'á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\93á\83\94á\83\9cá\83ªá\83\98á\83\90á\83\9aურობის პოლიტიკა',
 'privacypage' => 'Project:ანონიმურობის პოლიტიკა',
 
 'badaccess' => 'ნებართვის შეცდომა',
@@ -417,6 +436,8 @@ $1',
 'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
 'newmessageslink' => 'ახალი შეტყობინებები',
 'newmessagesdifflink' => 'განსხვავება წინა ვერსიასთან',
+'youhavenewmessagesfromusers' => 'თქვენ გაქვთ $1 {{PLURAL:$3|სხვა მომხმარებლისგან|$3 მომხმარებლებისგან}} ($2).',
+'youhavenewmessagesmanyusers' => 'თქვენ გაქვთ $1 ბევრი მომხმარებლისგან ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ახალი შეტყობინება|ახალი შეტყობინება}}',
 'newmessagesdifflinkplural' => 'ბოლო {{PLURAL:$1|ცვლილება|ცვლილება}}',
 'youhavenewmessagesmulti' => 'თქვენ გაქვთ ახალი შეტყობინება $1-ზე',
@@ -533,8 +554,10 @@ $1',
 'protectedpagetext' => 'ეს გვერდი დაბლოკილია რედაქტირებისთვის.',
 'viewsourcetext' => 'თქვენ შეგიძლიათ ნახოთ ამ გვერდის საწყისი ფაილი და მისი ასლი შექმნათ:',
 'viewyourtext' => "თქვენ შეგიძლიათ იხილოთ და დააკოპიროთ  '''თქვენი რედაქტირებების''' საწყისი ტექსტი ამ გვერდზე:",
-'protectedinterface' => 'ეს გვერდი პროგრამის ინტერფეისის ნაწილია და დაცულია ვანდალიზმის აღკვეთის მიზნით.',
-'editinginterface' => "'''ყურადღება:''' თქვენ რედაქტორობთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. ამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. თარგმანისათვის უმჯობესია გამოიყენოთ [//translatewiki.net/wiki/Main_Page?setlang=ka translatewiki.net], მედიავიკის ლოკალიზაციის პროექტი.",
+'protectedinterface' => 'ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.',
+'editinginterface' => "'''ყურადღება:''' თქვენ რედაქტორობთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. 
+ამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. 
+იმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL მოთხოვნა გაუქმებულია)',
 'cascadeprotected' => 'ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის |გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი "იერარქიული":
 $2',
@@ -561,7 +584,7 @@ $2',
 'logouttext' => "'''თქვენ ამჟამად სისტემიდან გასული ხართ.'''
 
 შეგიძლიათ გამოიყენოთ {{SITENAME}} ანონიმურად, ან შეგიძლიათ
-[[Special:UserLogin|შეხვიდეთ ისევ]] როგორც იგივე ან სხვა მომხმარებელი.
+<span class='plainlinks'>[$1 შეხვიდეთ ისევ]</span> როგორც იგივე ან სხვა მომხმარებელი.
 შენიშნეთ, რომ ზოგიერთ გვერდზე შესაძლოა ისევ უჩვენებდეს რომ შესული ხართ სანამ თქვენი ბრაუზერის მეხსიერებას არ გაწმენდთ.",
 'welcomecreation' => '== მოგესალმებით, $1! ==
 თქვენი ანგარიში შექმნილია.
@@ -831,8 +854,8 @@ $2
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} მოძებნოთ შესაბამისი ჟურნალები],
 ან [{{fullurl:{{FULLPAGENAME}}|action=edit}} დაიწყოთ ამ გვერდის რედაქტირება]</span>.',
 'noarticletext-nopermission' => 'ამ დროისთვის ეს გვერდი ცარიელია.
\83¥á\83\95á\83\94á\83\9c á\83¨á\83\94á\83\92á\83\98á\83«á\83\9aá\83\98á\83\90á\83\97 [[Special:Search/{{PAGENAME}}|á\83\9bá\83\9dá\83«á\83\94á\83\91á\83\9cá\83\9dá\83\97 á\83\94á\83¡ á\83¡á\83\98á\83¢á\83§á\83\95á\83\90]] სხვა გვერდებზე,
\83\90á\83\9c <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} á\83¨á\83\94á\83¡á\83\90á\83\91á\83\90á\83\9bá\83\98á\83¡ á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\94á\83\91á\83¨á\83\98]</span>',
\83\97á\83¥á\83\95á\83\94á\83\9c á\83¨á\83\94á\83\92á\83\98á\83«á\83\9aá\83\98á\83\90á\83\97 [[Special:Search/{{PAGENAME}}|á\83\9bá\83\9dá\83«á\83\94á\83\91á\83\9cá\83\9dá\83\97 á\83\94á\83¡ á\83¡á\83\90á\83\97á\83\90á\83£á\83 á\83\98]] სხვა გვერდებზე,
\83\90á\83\9c <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} á\83\9bá\83\9dá\83«á\83\94á\83\91á\83\9cá\83\9dá\83\97 á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83¡á\83\90á\83\91á\83\90á\83\9bá\83\98á\83¡á\83\98 á\83©á\83\90á\83\9cá\83\90á\83¬á\83\94á\83 á\83\94á\83\91á\83\98].</span> á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83  á\83\92á\83\90á\83¥á\83\95á\83\97 á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83¡ á\83\9cá\83\94á\83\91á\83\90á\83 á\83\97á\83\95á\83\90.',
 'userpage-userdoesnotexist' => 'ანგარიში «<nowiki>$1</nowiki>» არ არსებობს. დარწმუნდით, რომ მართლაც გსურთ ამ ანგარიშის შექმნა ან შესწორება.Убедитесь, что вы действительно желаете создать или изменить эту страницу.',
 'userpage-userdoesnotexist-view' => 'მომხმარებელი „$1“ არ არის დარეგისტრირებული.',
 'blocked-notice-logextract' => 'ეს მომხმარებელი უკვე დაიბლოკა.
@@ -916,7 +939,7 @@ $2
 'sectioneditnotsupported-text' => 'სექციის რედაქტირება გათიშულია ამ გვერდისთვის',
 'permissionserrors' => 'ნებართვის შეცდომა',
 'permissionserrorstext' => 'თქვენ არ გაქვთ ამის გაკეთების უფლება, შემდეგი {{PLURAL:$1|მიზეზის|მიზეზების}} გამო:',
-'permissionserrorstext-withaction' => 'თქვენ არ გაქვთ ამ მოქმედების - $2 განხორციელების ნებართვა შემდეგი $1 მიზეზის გამო:',
+'permissionserrorstext-withaction' => 'თქვენ არ გაქვთ ამ მოქმედების - „$2“ განხორციელების ნებართვა შემდეგი {{PLURAL:$1|მიზეზის|მიზეზის}} გამო:',
 'recreate-moveddeleted-warn' => "'''გაფრთხილება: თქვენ ხელახლა ქმნით გვერდს, რომელიც ადრე წაიშალა.'''
 
 გთხოვთ დაფიქრდეთ, მისაღები არის თუ არა ამ გვერდის რედაქტირების გაგრძელება.
@@ -953,6 +976,7 @@ $2
 'expansion-depth-exceeded-warning' => 'გვერდზე გადამეტებულია ჩადგმების ზღვარი',
 'parser-unstrip-loop-warning' => 'აღმოჩენილია ციკლური ბმული',
 'parser-unstrip-recursion-limit' => 'გადამეტებულია რეკურსიის ზღვარი ($1)',
+'converter-manual-rule-error' => 'შეცდომა ენის ხელით გარდაქმნის წესში',
 
 # "Undo" feature
 'undo-success' => 'რედაქტირების გაუქმება შესაძლებელია. გთხოვთ შეამოწმოთ განსხვავება ქვევით, რათა დარწმუნდეთ, რომ ეს ის არის რაც თქვენ გსურთ, შემდეგ კი შეინახეთ ცვლილებები რათა დაასრულოთ რედაქტირების გაუქმება.',
@@ -1089,8 +1113,8 @@ $1",
 'revdelete-reason-dropdown' => '*წაშლის გავრცელებული მიზეზები
 ** საავტორო უფლებების დარღვევა
 ** მიუღებელი პირადი ინფორმაცია
-** á\83\9eá\83\9dá\83¢á\83\94á\83\9cá\83ªá\83\98á\83£á\83 á\83\90á\83\93 á\83¦á\83\98á\83 á\83¡á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\9aá\83\90á\83®á\83\95á\83\94á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90
-** á\83£á\83ªá\83\94á\83\9cá\83\96á\83£á\83 á\83\9d á\83¡á\83\98á\83¢á\83§á\83\95á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83ªá\83\95á\83\94á\83\9aá\83\98 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98',
+** á\83\9bá\83\98á\83£á\83¦á\83\94á\83\91á\83\94á\83\9aá\83\98 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98
+** á\83\9eá\83\9dá\83¢á\83\94á\83\9cá\83ªá\83\98á\83£á\83 á\83\90á\83\93 á\83¦á\83\98á\83 á\83¡á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\9aá\83\90á\83®á\83\95á\83\94á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90',
 'revdelete-otherreason' => 'სხვა/დამატებითი მიზეზი:',
 'revdelete-reasonotherlist' => 'სხვა მიზეზი',
 'revdelete-edit-reasonlist' => 'წაშლის მიზეზების რედაქტირება',
@@ -1122,6 +1146,7 @@ $1",
 'mergehistory-comment' => 'გადატანა[[:$1]]-ის [[:$2]]-ში: $3',
 'mergehistory-same-destination' => 'თავდაპირველი და სამიზნე გვერდები უნდა განსხვავდებოდეს.',
 'mergehistory-reason' => 'მიზეზი:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
 'mergelog' => 'გაერთიანებათა ჟურნალი',
@@ -1182,8 +1207,6 @@ $1",
 'search-interwiki-caption' => 'დობილი პროექტები',
 'search-interwiki-default' => 'შედეგები $1-დან:',
 'search-interwiki-more' => '(გაგრძელება)',
-'search-mwsuggest-enabled' => 'რჩევებით',
-'search-mwsuggest-disabled' => 'რჩევების გარეშე',
 'search-relatedarticle' => 'დაკავშირებული',
 'mwsuggest-disable' => 'გათიშეთ AJAX დახმარებები',
 'searcheverything-enable' => 'ძიება სახელთა ყველა სივრცეებში',
@@ -1694,7 +1717,7 @@ $1',
 'backend-fail-internal' => '"$1" საცავში მოხდა დაუდგენელი შეცდომა.',
 'backend-fail-contenttype' => 'ფაილის შემადგენლობის ტიპის დადგენა ვერ მოხერხდა, "$1"-ში შესანახად.',
 'backend-fail-batchsize' => 'საცავმა მიიღო {{PLURAL:$1|ფაილის ოპერაციის|ფაილების ოპერაციების}} ბლოკი $1-დან, შეზღუდვა შეადგენს $2 {{PLURAL:$1|ოპერაციას}}.',
-'backend-fail-usable' => 'Не удалось записать файлფაილი $1 ჩაწერა ვერ მოხერხდა უფლებების უკმარისობის ან საჭირო საქაღალდეების არქონის გამო.',
+'backend-fail-usable' => 'ფაილი $1 წაკითხვა ან ჩაწერა ვერ მოხერხდა უფლებების უკმარისობის ან საჭირო საქაღალდეების არქონის გამო.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა შესანახად ვერ მოხერხდა.',
@@ -1830,6 +1853,7 @@ $1',
 'shared-repo-from' => ' $1-დან',
 'shared-repo' => 'საერთო საცავიდან',
 'shared-repo-name-wikimediacommons' => 'ვიკისაწყობი',
+'upload-disallowed-here' => 'სამწუხაროდ, თქვენ არ შეგიძლიათ ამ სურათზე გადაწერა.',
 
 # File reversion
 'filerevert' => 'დააბრუნე $1',
@@ -1938,6 +1962,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 ბაიტი',
 'ncategories' => '$1 კატეგორია',
+'ninterwikis' => '$1 {{PLURAL:$1|ინტერვიკი|ინტერვიკი}}',
 'nlinks' => '$1 ბმული',
 'nmembers' => '$1 წევრი',
 'nrevisions' => '$1 რედაქტირება',
@@ -1966,6 +1991,7 @@ $1',
 'mostlinkedtemplates' => 'ყველაზე მეტი ბმულების მქონე თარგები',
 'mostcategories' => 'ყველაზე მეტი კატეგორიის მქონე სტატიები',
 'mostimages' => 'ყველაზე მეტი ბმულების მქონე ფაილები',
+'mostinterwikis' => 'ყველაზე მეტი ინტერვიკის მქონე სტატია',
 'mostrevisions' => 'ყველაზე მეტად რედაქტირებული სტატიები',
 'prefixindex' => 'ყველა გვერდი (თავსართით)',
 'prefixindex-namespace' => 'ყველა პრეფიქსიანი გვერდი ($1 სახელთა სივრცე)',
@@ -1988,7 +2014,7 @@ $1',
 'usercreated' => '{{GENDER:$3|შექმნილია}} $2-ზე $1-ში',
 'newpages' => 'ახალი გვერდები',
 'newpages-username' => 'მომხმარებლის სახელი:',
-'ancientpages' => 'á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£á\83\9aი გვერდები',
+'ancientpages' => 'á\83£á\83«á\83\95á\83\94á\83\9aá\83\94á\83¡ი გვერდები',
 'move' => 'გადატანა',
 'movethispage' => 'ამ გვერდის გადატანა',
 'unusedimagestext' => 'ეს ფაილი არ გამოიყენება არც-ერთ გვერდზე.
@@ -2000,7 +2026,7 @@ $1',
 'nopagetitle' => 'ამგვარი სამიზნე გვერდი არ არსებობს',
 'nopagetext' => 'მოცემული სამიზნო გვერდი არ არის მიითებული.',
 'pager-newer-n' => '{{PLURAL:$1|უახლესი 1|უახლესი $1}}',
-'pager-older-n' => '{{PLURAL:$1|á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£á\83\9aá\83\98 1|á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£ლი $1}}',
+'pager-older-n' => '{{PLURAL:$1|á\83£á\83¤á\83 á\83\9d á\83«á\83\95á\83\94á\83\9aá\83\98 1|á\83£á\83¤á\83 á\83\9d á\83«á\83\95á\83\94ლი $1}}',
 'suppress' => 'დამალვა',
 'querypage-disabled' => 'ეს სპეცგვერდი გამორთულია წარმადობის გასაზრდელად.',
 
@@ -2080,7 +2106,7 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'აქტიურ მომხმარებელთა სია',
 'activeusers-intro' => 'ეს არის მომხმარებელთა სია, რომელთაც აქვს წვლილი უკანასკნელი $1 {{PLURAL:$1|დღის|დღის}} განმავლობაში.',
-'activeusers-count' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\98á\83\9aá\83\94á\83\91á\83\90\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90}} {{PLURAL:$2|$3 á\83\93á\83¦á\83\94|$3 á\83\93á\83¦á\83\98á\83¡|$3 á\83\93á\83¦á\83\94á\83\94á\83\91ის}} განმავლობაში.',
+'activeusers-count' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90}} {{PLURAL:$2|$3 á\83\93á\83¦á\83\94|$3 á\83\93á\83¦ის}} განმავლობაში.',
 'activeusers-from' => 'მომხმარებელთა ჩვენება, დაწყებული:',
 'activeusers-hidebots' => 'რობოტების დამალვა',
 'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
@@ -2115,6 +2141,8 @@ $1',
 'mailnologin' => 'გამგზავნი მისამართი არ არის მითითებული.',
 'mailnologintext' => 'თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.',
 'emailuser' => 'გაუგზავნეთ იმეილი ამ მომხმარებელს',
+'emailuser-title-target' => 'ელ. ფოსტის მიწერა {{GENDER:$1|მომხმარებელთან}}',
+'emailuser-title-notarget' => 'ელ. ფოსტის გაგზავნა მომხმარებელთან',
 'emailpage' => 'ელ. ფოსტა მომხმარებელს',
 'emailpagetext' => 'თუ ამ მომხმარებელმა თავის პარამეტრებში ელ. ფოსტის მოქმედი მისამართი მიუთითა, ქვემოთ მოყვანილი ფორმის შევსებისას შეგიძლიათ მისთვის შეტყობინების გაგზავნა. ელ. ფოსტის მისამართი, რომელიც [[Special:Preferences|თქვენს პარამეტრებში]] მიუთითეთ, დაფიქსირდება „გამომგზავნის“ ველში, რათა ადრესატმა პასუხის გაცემა შეძლოს.',
 'usermailererror' => 'ელ. ფოსტა დაბრუნდა შეცდომის გამო:',
@@ -2144,6 +2172,7 @@ $1',
 # User Messenger
 'usermessage-summary' => 'სისტემური შეტყობინების დატოვება.',
 'usermessage-editor' => 'სისტემური მესენჯერი',
+'usermessage-template' => 'MediaWiki:მომხმარებლის შეტყობინება',
 
 # Watchlist
 'watchlist' => 'ჩემი კონტროლის სია',
@@ -2260,8 +2289,8 @@ $UNWATCHURL
 'rollback' => 'რცვლილებების გაუქმება',
 'rollback_short' => 'სწრაფი გაუქმება',
 'rollbacklink' => 'სწრაფი გაუქმება',
-'rollbacklinkcount' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\93á\83\90á\83\91á\83 á\83£á\83\9cება',
-'rollbacklinkcount-morethan' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\93á\83\90á\83\91á\83 á\83£á\83\9cება',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\92á\83\90á\83£á\83¥á\83\9bება',
+'rollbacklinkcount-morethan' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡}} á\83\92á\83\90á\83£á\83¥á\83\9bება',
 'rollbackfailed' => 'შეცდომა გაუქმებისას',
 'cantrollback' => 'შეუძლებელია უწინდელი რედაქციის აღდგენა; ის, ვინც უკანასკნელი ცვლილებები შეიტანა, ამ სტატიის ერთადერთი ავტორია.',
 'alreadyrolled' => 'შეუძლებელია ბოლო ცვლილების გაუქმება [[:$1]], გაკეებული [[User:$2|$2]] ([[User talk:$2|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2283,7 +2312,7 @@ $UNWATCHURL
 'protectlogpage' => 'დაცვის ისტორია',
 'protectlogtext' => 'ქვემოთ წარმოდგენილია გვერდის დაცვის დონის ცვლილებების სია. 
 იხილეთ ასევე [[Special:ProtectedPages|დაცული გვერდების სია]] ამ მომენტისთვის.',
-'protectedarticle' => 'დაცულია „[[$1]]“',
+'protectedarticle' => 'დაცულია გვერდი: „[[$1]]“',
 'modifiedarticleprotection' => 'შეცვლილია დაცვის დონე გვერდისთვის „[[$1]]“',
 'unprotectedarticle' => '„[[$1]]“-დან დაცვა მოხსნილია',
 'movedarticleprotection' => 'დაცვის პარამეტრების გადატანა გვერდიდან „[[$2]]“ გვერდზე „[[$1]]“',
@@ -2308,7 +2337,7 @@ $UNWATCHURL
 თქვენ შეგიძლიათ ამ გვერდის დაცვის დონე შეცვალოთ, თუმცა ეს კასკადურ დაცვაზე გავლენას არ იქონიებს.',
 'protect-default' => 'ყველა მომხმარებელი',
 'protect-fallback' => 'საჭიროა „$1-ის“ უფლება',
-'protect-level-autoconfirmed' => 'ახალი და არარეგისტრირებული მომხმარებლების დაბლოკვა',
+'protect-level-autoconfirmed' => 'ახალი და არარეგისტრირებული მომხმარებლებისაგან დაცვა',
 'protect-level-sysop' => 'მხოლოდ ადმინისტრატორები',
 'protect-summary-cascade' => 'იერარქიული',
 'protect-expiring' => 'ვადა გასდის: $1 (UTC)',
@@ -2323,9 +2352,9 @@ $UNWATCHURL
 'protect-otherreason-op' => 'სხვა/დამატებითი მიზეზი',
 'protect-dropdown' => '* დაცვის ტიპიური მიზეზები
 ** გადაჭარბებული ვანდალიზმი
-** სპამი
+** á\83\92á\83\90á\83\93á\83\90á\83­á\83\90á\83 á\83\91á\83\94á\83\91á\83£á\83\9aá\83\98 á\83¡á\83\9eá\83\90á\83\9bá\83\98
 ** რედაქტირებათა ომი
-** á\83\9eá\83\9dá\83\9eá\83£á\83\9aá\83\90á\83 á\83£á\83\9aá\83\98 გვერდი',
+** á\83\9bá\83\90á\83¦á\83\90á\83\9aá\83\98 á\83 á\83\98á\83¡á\83\99á\83\98á\83¡ გვერდი',
 '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' => 'უფლება',
@@ -2385,7 +2414,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' => 'შეუძლებელია ფაილის აღდგენა არქივის იდენტიფიკატორით $1, რადგანაც ის არ არის მონაცემთა ბაზაში. შესაძლებელია ფაილი უკვე აღდგენილია.',
 'undelete-error' => 'შეცდომა გვერდის აღდგენისას',
 'undelete-error-short' => 'შეცდომა ფაილის წაშლის გაუქმებაში: $1',
@@ -2394,6 +2423,7 @@ $UNWATCHURL
 $1',
 'undelete-show-file-confirm' => 'დარწმუნებული ხართ, რომ გსურთ ფაილ <nowiki>$1</nowiki>-ის წაშლილი ვერსიის ხილვა $2 $3-დან?',
 'undelete-show-file-submit' => 'ჰო',
+'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
 
 # Namespace form on various pages
 'namespace' => 'სახელთა სივრცე:',
@@ -2432,7 +2462,7 @@ $1',
 
 # What links here
 'whatlinkshere' => 'ბმული გვერდზე',
-'whatlinkshere-title' => 'გვერდები, რომლებიც შეიცავენ ბმულებს "$1"-ზე',
+'whatlinkshere-title' => 'გვერდები, რომლებიც შეიცავენ ბმულებს „$1“-ზე',
 'whatlinkshere-page' => 'გვერდი:',
 'linkshere' => "მომდევნო გვერდები შეიცავენ ბმულებს '''[[:$1]]'''-ზე:",
 'nolinkshere' => "'''[[:$1]]'''-ზე ბმული არ არის.",
@@ -2558,7 +2588,7 @@ $1',
 'ipb_expiry_invalid' => 'მოქმედების მიუღებელი პერიოდი',
 'ipb_expiry_temp' => 'ბლოკირება მომხმარებლის სახელის დამალვით უვადო უნდა იყოს',
 'ipb_hide_invalid' => 'შეუძლებელია მოხემული ანგარიშის დამალვა, სავარაუდოდ მის მიერ განხორციელებულია ძალიან ბევრი შესწორება',
-'ipb_already_blocked' => '"$1" უკვე ბლოკირებულია',
+'ipb_already_blocked' => '„$1“ უკვე ბლოკირებულია',
 'ipb-needreblock' => 'მომხმარებელი $1 უკვე დაიბლოკა. გსურთ დაბლოკვის პარამეტრების შესწორება?',
 'ipb-otherblocks-header' => 'სხვა {{PLURAL:$1|დაბლოკვა|დაბლოკვები}}',
 'unblock-hideuser' => 'თქვენ არ შეგიძლიათ მოხსნათ ბლოკი ამ მომხმარებელს, რადგან მისი მომხმარებლის სახელი დამალულია.',
@@ -2657,12 +2687,12 @@ $1',
 'delete_and_move' => 'წაშლა და გადატანა',
 'delete_and_move_text' => '==საჭიროა წაშლა==
 
-სტატია დასახელებით "[[:$1]]" უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
+სტატია დასახელებით „[[:$1]]“ უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
 'delete_and_move_confirm' => 'დიახ, წაშალეთ ეს გვერდი',
-'delete_and_move_reason' => 'წაშლილია "[[$1]]"-á\83\93á\83\90á\83\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
+'delete_and_move_reason' => 'წაშლილია â\80\9e[[$1]]-á\83\93á\83\90á\83\9câ\80\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
 'selfmove' => 'წყარო და დანიშნულების სათაურები მსგავსია; შეუძლებელია გვერდის საკუთარ თავზე გადატანა.',
-'immobile-source-namespace' => 'შეუძლებელია სახელის გადარქმევა «$1» სახელთა სივრცეში',
-'immobile-target-namespace' => 'შეუძლებელია გვერდის გადატანა «$1» სახელთა სივრცეში',
+'immobile-source-namespace' => 'შეუძლებელია სახელის გადარქმევა „$1“ სახელთა სივრცეში',
+'immobile-target-namespace' => 'შეუძლებელია გვერდის გადატანა „$1“ სახელთა სივრცეში',
 'immobile-target-namespace-iw' => 'ინტერვიკის ბმული შეუძლებელია გამოყენებული იქნას გადარქმევისთვის.',
 'immobile-source-page' => 'ამ გვეერდის გადატანა შეუძლებელია.',
 'immobile-target-page' => 'შეუძლებელია მოცემულ სახელზე გადატანა.',
@@ -2744,6 +2774,7 @@ $1',
 'import-interwiki-templates' => 'ყველა თარგის ჩართვა',
 'import-interwiki-submit' => 'იმპორტირება',
 'import-interwiki-namespace' => 'სამიზნე სახელთა სივრცე',
+'import-interwiki-rootpage' => 'ძირეული გვერდი (არასავალდებულო):',
 'import-upload-filename' => 'ფაილის სახელი:',
 'import-comment' => 'კომენტარი:',
 'importtext' => 'გთხოვთ, მოახდინოთ გვერდის ექსპორტი თავდაპირველი ვიკიდან, [[Special:Export|შესაბამისი ხელსაწყოს]] გამოყენებით. ფაილი შეინახეთ დისკზე, ხოლო შემდეგ ატვირთეთ აქ.',
@@ -2770,26 +2801,28 @@ $1',
 '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-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-rootpage-invalid' => 'ძირეული გვერდის მითითებული სახელი არასწორია.',
+'import-rootpage-nosubpage' => 'სახელტა სივრცეში მითითებულ ძირეულ გვერდში „$1“ ქვეგვერდები დაუშვებელია.',
 
 # Import log
 'importlogpage' => 'იმპორტის ჟურნალი',
 'importlogpagetext' => 'ადმინისტრატორთა მიერ გვერდების იმპორტირება  ცვლილებების ჩათვლით სხვა ვიკიდან.',
-'import-logentry-upload' => '«[[$1]]» — ფაილის იმპორტი',
+'import-logentry-upload' => '„[[$1]]“ — ფაილის იმპორტი',
 'import-logentry-upload-detail' => '$1 ცვლილება',
-'import-logentry-interwiki' => '«$1» — ტრანსვიკი იმპორტი',
+'import-logentry-interwiki' => '„$1“ — ტრანსვიკი იმპორტი',
 'import-logentry-interwiki-detail' => '$1 ცვლილება $2-დან',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-ის ტესტირება',
-'javascripttest-disabled' => 'ეს ფუნქცია ამ ვიკიში არ ჩართულა.',
 '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' => 'იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.',
@@ -2850,7 +2883,7 @@ $1',
 'tooltip-ca-nstab-help' => 'იხილეთ დახმარების გვერდი',
 'tooltip-ca-nstab-category' => 'გვერდის კატეგორიის ჩვენება',
 'tooltip-minoredit' => 'მონიშნე როგორც მცირე რედაქტირება [alt-i]',
-'tooltip-save' => 'á\83\93á\83\90á\83\90á\83\9bá\83\90á\83®á\83¡á\83\9dá\83\95á\83 á\83\94 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98',
+'tooltip-save' => 'á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90',
 'tooltip-preview' => 'წინასწარ გადახედე ცვლილებებს, გთხოვთ გამოიყენოთ ეს შენახვამდე! [alt-p]',
 'tooltip-diff' => 'ტექსტში შეტანილი ცვლილებების ჩვენება. [alt-v]',
 'tooltip-compareselectedversions' => 'იხილეთ ამ გვერდის  ორ შერჩეულ ვერსიას შორის განსხვავებები.',
@@ -2913,19 +2946,31 @@ $1',
 '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-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-restriction' => 'გვერდის დაცვა (<code>$1</code>)',
+'pageinfo-recent-edits' => 'ბოლო ცვლილებები (უკანასკნელი $1 განმავლობაში)',
+'pageinfo-recent-authors' => 'უნიკალური ავტორების უკანასკნელი რაოდენობა',
 'pageinfo-magic-words' => 'ჯადოსნური {{PLURAL:$1|სიტყვა|სიტყვა}} ($1)',
 'pageinfo-hidden-categories' => 'დამალული {{PLURAL:$1|კატეგორია|კატეგორია}} ($1)',
+'pageinfo-templates' => 'ინტეგრირებულია {{PLURAL:$1|თარგი|თარგი}} ($1)',
 
 # Skin names
 'skinname-standard' => 'კლასიკური',
@@ -2981,6 +3026,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' => 'ანიმირებული SVG ფაილი, ნომინალური $1 × $2 პიქსელი, ფაილის ზომა: $3',
 'show-big-image' => 'სრული გარჩევადობა',
 'show-big-image-preview' => 'ზომა წინასწარი გადახედვისას: $1.',
 'show-big-image-other' => 'სხვა {{PLURAL:$2|გაფართოება|გაფართოება}}: $1.',
@@ -2990,6 +3036,8 @@ $1',
 'file-info-png-looped' => 'დარგოლილი',
 'file-info-png-repeat' => 'დაკრულია $1 {{PLURAL:$1|ჯერ}}',
 'file-info-png-frames' => '$1 კადრი',
+'file-no-thumb-animation' => "'''შენიშვნა: ტექნიკური მიზეზების გამო, ამ ფაილის მინიატიურები არ იქნება ანიმირებული.'''",
+'file-no-thumb-animation-gif' => "'''შენიშვნა: ტექნიკური მიზეზების გამო, მაღალი გარჩევადობის GIF ფორმატის სურათების მსგავსი მინიატიურები არ იქნება ანიმირებული.'''",
 
 # Special:NewFiles
 'newimages' => 'ახალი ფაილების გალერეა',
@@ -3582,6 +3630,7 @@ $5
 'ellipsis' => '...',
 'percent' => '$1%',
 'parentheses' => '($1)',
+'brackets' => '[$1]',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr; წინა გვერდი',
@@ -3612,6 +3661,11 @@ $5
 'size-kilobytes' => '$1 კბ',
 'size-megabytes' => '$1 მბ',
 'size-gigabytes' => '$1 გბ',
+'size-terabytes' => '$1 ტბ',
+'size-petabytes' => '$1 პბ',
+'size-exabytes' => '$1 ებ',
+'size-zetabytes' => '$1 ზბ',
+'size-yottabytes' => '$1 იბ',
 
 # Bitrate units
 'bitrate-bits' => '$1 ბ/წმ',
@@ -3803,10 +3857,10 @@ 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',
+'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
 'logentry-delete-event-legacy' => '$1 შეცვალა ჩანაწერების ჟურნალის ხილვადობა $3-ზე',
 'logentry-delete-revision-legacy' => '$1 შეცვალა რედაქტირების კომენტარი გვერდზე $3',
 'logentry-suppress-delete' => '$1 ჩაახშო $3 გვერდი',
@@ -3822,12 +3876,12 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'revdelete-uname-unhid' => 'მომხმარებლის სახელი გახსნილია',
 'revdelete-restricted' => 'შეზღუდვა ადმინისტრატორთათვის',
 'revdelete-unrestricted' => 'ადმინისტრატორთათვის შეზღუდვები მოხსნილია',
-'logentry-move-move' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 â\86\92 $4-á\83\96á\83\94',
-'logentry-move-move-noredirect' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 $4-á\83¨á\83\98 გადამისამართების დატოვების გარეშე',
-'logentry-move-move_redir' => '$1 á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 $3 $4-á\83¨á\83\98 გადამისამართებაზე',
+'logentry-move-move' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c',
+'logentry-move-move-noredirect' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c გადამისამართების დატოვების გარეშე',
+'logentry-move-move_redir' => '$1 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 â\80\9e$3â\80\9c á\83\92á\83\90á\83\93á\83\90á\83\98á\83¢á\83\90á\83\9cá\83\90 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 â\80\9e$4â\80\9c გადამისამართებაზე',
 'logentry-move-move_redir-noredirect' => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
-'logentry-patrol-patrol' => '$1 გააკეთა გვერდი $3-ის $4 ვერსიის პატრულირება',
-'logentry-patrol-patrol-auto' => '$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 ანგარიში',
@@ -3850,6 +3904,10 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'feedback-bugcheck' => 'კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].',
 'feedback-bugnew' => 'მე შევამოწმე. ახალი შეცდომის შეტყობინება',
 
+# Search suggestions
+'searchsuggest-search' => 'ძიება',
+'searchsuggest-containing' => 'შეიცავს...',
+
 # API errors
 'api-error-badaccess-groups' => 'თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.',
 'api-error-badtoken' => 'შიდა შეცდომა: ცუდი ტოკენი.',
index 1425327..6e8a6d4 100644 (file)
@@ -511,7 +511,7 @@ Keltirilgen sebep: ''$2''.",
 'logouttext' => "'''Siz endi sayttan shıqtın'ız.'''
 
 Siz {{SITENAME}} saytınan anonim halda paydalanıwın'ız mu'mkin.
-Yamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen [[Special:UserLogin|qaytadan sistemag'a kiriwin'izge]] boladı.
+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! ==
 
@@ -853,8 +853,6 @@ Sha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı,
 'search-interwiki-caption' => 'Qarındas proektler',
 'search-interwiki-default' => "$1 na'tiyje:",
 'search-interwiki-more' => "(ko'birek)",
-'search-mwsuggest-enabled' => 'usınıslar menen',
-'search-mwsuggest-disabled' => 'usınıslarsız',
 'search-relatedarticle' => 'Baylanıslı',
 'mwsuggest-disable' => "AJAX usınısların o'shir",
 'searchrelated' => 'baylanıslı',
index f96d2ff..9b6621e 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Agurzil
  * @author Agzennay
+ * @author Amazigh84
  * @author Azwaw
  * @author Mmistmurt
  * @author MoubarikBelkasim
@@ -45,6 +46,8 @@ $messages = array(
 'tog-underline' => 'Derrer izdayen:',
 'tog-justify' => 'Err tehri ger wawalen kif-kif',
 'tog-hideminor' => 'Ffer ibeddlen ifessasen deg yibeddlen imaynuten',
+'tog-hidepatrolled' => 'Ffer ibeddlen iεessan deg yibeddlen imaynuten',
+'tog-newpageshidepatrolled' => 'Ffer isebtaren iɛessan gar umuɣ n isebtaren imaynuten',
 'tog-extendwatchlist' => 'Ssemɣer umuɣ n uɛessi iwakken ad muqleɣ akk n wayen zemreɣ ad beddleɣ',
 'tog-usenewrc' => 'Sselhu ibeddlen ifessasen (JavaScript)',
 'tog-numberheadings' => 'Izwal ɣur-sen imḍanen mebla ma serseɣ-iten',
@@ -67,6 +70,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Azen-iyi-d e-mail ma llan ibeddlen ifessasen',
 'tog-enotifrevealaddr' => 'Ssken e-mail inu asmi yettwazen email n talɣut',
 'tog-shownumberswatching' => 'Ssken geddac yellan n yimseqdacen iɛessasen',
+'tog-oldsig' => 'Azmul yellan :',
 'tog-fancysig' => 'ǧǧ azmul am yettili (war azday awurman)',
 'tog-externaleditor' => 'Sseqdec ambeddel n berra d ameslugen',
 'tog-externaldiff' => 'Sseqdec ambeddel n berra iwakken ad ẓreɣ imgerraden',
@@ -76,13 +80,25 @@ $messages = array(
 'tog-watchlisthideown' => 'Ffer ibeddlen inu seg wumuɣ n uɛessi inu',
 'tog-watchlisthidebots' => 'Ffer ibeddlen n iboṭiyen seg wumuɣ n uɛessi inu',
 'tog-watchlisthideminor' => 'Ffer ibeddlen ifessasen seg wumuɣ n uɛessi inu',
+'tog-watchlisthideliu' => 'Ffer ibeddlen n iseqdacen yelan deg umuɣ n tiḍefri',
+'tog-watchlisthideanons' => 'Ffer ibeddlen n iseqdacen udrigen deg umuɣ n tiḍefri',
+'tog-watchlisthidepatrolled' => 'Ffer ibeddlen iɛessan deg umuɣ n tiḍefri',
 'tog-ccmeonemails' => 'Azen-iyi-d email n wayen uzneɣ i imseqdacen wiyaḍ',
 'tog-diffonly' => 'Ur temliḍ-iyi-d ara ayen yellan seddaw imgerraden',
+'tog-showhiddencats' => 'Beqqeḍ taggayin yeffren',
+'tog-norollbackdiff' => 'Ur beqqeḍ ara "diff" ma yella usemmet',
 
 'underline-always' => 'Daymen',
 'underline-never' => 'Abaden',
 'underline-default' => 'Browser/Explorateur ameslugen',
 
+# Font style option in Special:Preferences
+'editfont-style' => 'Aɣanib n tasefsit n taɣzut ubeqqeḍ :',
+'editfont-default' => 'Tasefsit n iminig s lexṣas',
+'editfont-monospace' => 'Tasefsit s lqedd usbiḍ',
+'editfont-sansserif' => 'Tasefsit "Sans-serif"',
+'editfont-serif' => 'Tasefsit "Serif"',
+
 # Dates
 'sunday' => 'Ačer',
 'monday' => 'Arim',
@@ -146,9 +162,13 @@ $messages = array(
 'category-subcat-count' => 'Taggayt agi tesɛa {{PLURAL:$2|adu-taggayt|$2 adu-taggayin, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}}}} ddaw agi.',
 'category-subcat-count-limited' => 'Taggayt agi tesɛa {{PLURAL:$1|adu-taggayt agi|tid $1 adu-taggayin agi}} ddaw-agi.',
 'category-article-count' => 'Taggayt agi tesɛa {{PLURAL:$2|asebter agi|$2 isebtaren, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}} ddaw-agi}}.',
+'category-article-count-limited' => '{{PLURAL:$1|Asebter agi yella|$1 isebtar agi llan}} deg taggayt agi.',
 'category-file-count' => 'Taggayt agi tesɛa {{PLURAL:$2|afaylu agi|$2 ifuyla, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}} ddaw-agi}}.',
+'category-file-count-limited' => '{{PLURAL:$1|Afaylu agi yella|$1 ifuyla agi llan}} deg taggayt agi.',
 'listingcontinuesabbrev' => 'asartu',
+'index-category' => 'Isebtar s umatar',
 'noindex-category' => 'Asebter agi ur d-yerna ara deg umatar',
+'broken-file-category' => 'Isebtar s iseɣwan n ifuyla iṛzan',
 
 'about' => 'Awal ɣef...',
 'article' => 'Ayen yella deg usebter',
@@ -177,6 +197,9 @@ $messages = array(
 'vector-action-delete' => 'Mḥu',
 'vector-action-move' => 'Smimeḍ',
 'vector-action-protect' => 'Mmesten',
+'vector-action-undelete' => 'Uɣaled',
+'vector-action-unprotect' => 'Beddel amesten',
+'vector-simplesearch-preference' => 'Sermed tafeggast taḥerfit n unadi (i "Vector" kan)',
 'vector-view-create' => 'Snulfu',
 'vector-view-edit' => 'Ẓẓiẓreg',
 'vector-view-history' => 'Ẓeṛ amazray',
@@ -199,13 +222,16 @@ $messages = array(
 'updatedmarker' => 'yettubeddel segmi tarzeft taneggarut inu',
 'printableversion' => 'Tasiwelt iwakken ad timprimiḍ',
 'permalink' => 'Azday ur yettbeddil ara',
-'print' => 'Imprimi',
+'print' => 'Siggez',
+'view' => 'Ẓeṛ',
 'edit' => 'Beddel',
 'create' => 'Snulfu',
 'editthispage' => 'Beddel asebter-agi',
+'create-this-page' => 'Snulfu asebter-agi',
 'delete' => 'Mḥu',
 'deletethispage' => 'Mḥu asebter-agi',
 'undelete_short' => 'Fakk amḥay n {{PLURAL:$1|yiwen ubeddel|$1 yibeddlen}}',
+'viewdeleted_short' => 'Ẓeṛ {{PLURAL:$1|yiwen abeddel yettumḥan|$1 Ibeddlen yettumḥan}}',
 'protect' => 'Ḥrez',
 'protect_change' => 'beddel tiḥḥerzi',
 'protectthispage' => 'Ḥrez asebter-agi',
@@ -238,6 +264,14 @@ $messages = array(
 'jumpto' => 'Neggez ar:',
 'jumptonavigation' => 'ẓer isebtar',
 'jumptosearch' => 'anadi',
+'view-pool-error' => 'Suref-aɣ, iqeddacen iwziren tura.
+Aṭas iseqdacen tnadin ad ẓṛen asebter agi.
+Ilaq ad arǧuḍ imir uqbel ad εreḍeḍ tikkelt nniḍen .
+
+$1',
+'pool-timeout' => 'Amenḍar iɛedda deg taganit n uzekṛun',
+'pool-queuefull' => 'Adras n umahil yečuṛ',
+'pool-errorunknown' => 'Anezri warisem',
 
 # 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' => 'Awal ɣef {{SITENAME}}',
@@ -253,6 +287,7 @@ $messages = array(
 'helppage' => 'Help:Agbur',
 'mainpage' => 'Asebter amenzawi',
 'mainpage-description' => 'Asebter amenzawi',
+'policy-url' => 'Project:Ilugan',
 'portal' => 'Awwur n timetti',
 'portal-url' => 'Project:Awwur n timetti',
 'privacy' => 'Tudert tusligt',
@@ -260,15 +295,20 @@ $messages = array(
 
 'badaccess' => 'Agul n turagt',
 'badaccess-group0' => 'Ur tettalaseḍ ara ad texedmeḍ tigawt i tseqsiḍ.',
-'badaccess-groups' => 'Tigawt i steqsiḍ, llan ala imseqdacen seg yiwen n yiderman n $1 i zemren a t-xedmen.',
+'badaccess-groups' => 'Tigawt id steqsiḍ t-uffar kan i iseqdacen n {{PLURAL:$2|ugraw|igrawen}} : $1.',
 
 'versionrequired' => 'Yessefk ad tesɛiḍ tasiwelt $1 n MediaWiki',
 'versionrequiredtext' => 'Yessefk ad tesɛiḍ tasiwelt $1 n MediaWiki iwakken ad tesseqdceḍ asebter-agi. Ẓer [[Special:Version|tasiwelt n usebter]].',
 
+'ok' => 'Seɣbel',
 'retrievedfrom' => 'Yettwaddem seg "$1"',
 'youhavenewmessages' => 'Ɣur-k $1 ($2).',
 'newmessageslink' => 'Izen amaynut',
 'newmessagesdifflink' => 'Abeddel aneggaru',
+'youhavenewmessagesfromusers' => 'Tesɛiḍ $1 n {{PLURAL:$3|useqdac nniḍen|$3 iseqdacen nniḍen}} ( $2 ).',
+'youhavenewmessagesmanyusers' => 'Tesɛiḍ $1 n aṭas n iseqdacen ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|izen amaynut|inzan imaynuten}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|abeddel aneggaru|ibeddilen ineggura}}',
 'youhavenewmessagesmulti' => 'Tesɛiḍ iznan imaynuten deg $1',
 'editsection' => 'beddel',
 'editold' => 'beddel',
@@ -279,14 +319,21 @@ $messages = array(
 'toc' => 'Agbur',
 'showtoc' => 'Ssken',
 'hidetoc' => 'Ffer',
+'collapsible-collapse' => 'Seggelmes',
+'collapsible-expand' => 'Beqqeḍ',
 'thisisdeleted' => 'Ẓer neɣ err $1 am yella?',
 'viewdeleted' => 'Ẓer $1?',
 'restorelink' => '{{PLURAL:$1|Yiwen abeddel yettumḥan|$1 Ibeddlen yettumḥan}}',
 'feedlinks' => 'Asuddem:',
 'feed-invalid' => 'Anaw n usuddem mačči ṣaḥiḥ.',
+'feed-unavailable' => 'Isuddman RSS ur yestufan ara',
+'site-rss-feed' => 'Asuddem RSS n $1',
 'site-atom-feed' => 'Taneflit Atom n $1',
+'page-rss-feed' => 'Asuddem RSS n « $1 »',
 'page-atom-feed' => 'Taneflit Atom n "$1"',
 'red-link-title' => '$1 (ulac asebter)',
+'sort-descending' => 'Afran akaray',
+'sort-ascending' => 'Afran aseffes',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Amagrad',
@@ -333,16 +380,26 @@ Umata, wagi yeḍra mi neḍfeṛ azday ɣer yiwen diff aqbur naɣ ɣer amazray
 Ma mačči d-tajṛut agi, ihi d-taniwit deg uhil.
 Ilaq ad εeggenem yiwen [[Special:ListUsers/sysop|anedbal]] war ad ttum asefkem URL n uzday.',
 'missingarticle-rev' => '(uṭṭun n lqem : $1)',
+'missingarticle-diff' => '(Diff: $1, $2)',
 'readonly_lag' => 'Database d tamsekkert (weḥdes) axaṭer kra n serveur ɛeṭṭlen',
 'internalerror' => 'Agul zdaxel',
+'internalerror_info' => 'Anezri agensan : $1',
+'fileappenderrorread' => 'Ulamek an ɣeṛ « $1 »  mi taguri',
+'fileappenderror' => 'Ulamek an seffes « $1 » ar « $2 ».',
 'filecopyerror' => 'Ur yezmir ara ad yexdem alsaru n ufaylu "$1" ar "$2".',
 'filerenameerror' => 'Ur yezmir ara ad ibeddel isem ufaylu "$1" ar "$2".',
-'filedeleteerror' => 'Ur yezmir ara ad yemḥu afaylu "$1".',
+'filedeleteerror' => 'Ulamek an mḥu afaylu "$1".',
+'directorycreateerror' => 'Ulamek an snulfu akaram « $1 ».',
 'filenotfound' => 'Ur yezmir ara ad yaf afaylu "$1".',
+'fileexistserror' => 'Ulamek an aru afaylu « $1 » : afaylu agi yesnulfad yakan.',
 'unexpected' => 'Agul: "$1"="$2".',
 'formerror' => 'Agul: ur yezmir ara ad yazen talɣa',
 'badarticleerror' => 'Ur yezmir ara ad yexdem tigawt-agi deg usebter-agi.',
-'cannotdelete' => 'Ur yezmir ara ad yemḥu asebter neɣ afaylu i tebɣiḍ. (Ahat amdan wayeḍ yemḥa-t.)',
+'cannotdelete' => 'Ulamek ad yemḥu asebter naɣ afaylu « $1 ».
+Ahat amdan wayeḍ yemḥa-t.',
+'cannotdelete-title' => 'Ulamek an kkes  asebter « $1 »',
+'delete-hook-aborted' => 'Tukkesa tesemmet s usiɣzef.
+Ulac asefru ɣef wagi.',
 'badtitle' => 'Azwel ur yelhi',
 'badtitletext' => 'Asebter i testeqsiḍ fell-as mačči ṣaḥiḥ, d ilem, neɣ yella ugul deg wezday seg wikipedia s tutlayt tayeḍ neɣ deg wezday n wiki nniḍen. Ahat tesɛa asekkil ur yezmir ara ad yettuseqdac deg wezwel.',
 'perfcached' => 'Talɣut deg ukessar seg lkac u waqila mačči d tasiwelt taneggarut. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -352,31 +409,59 @@ Ilaq ad εeggenem yiwen [[Special:ListUsers/sysop|anedbal]] war ad ttum asefkem
 Tawuri: $1<br />
 Query: $2',
 'viewsource' => 'Ẓer aɣbalu',
+'viewsource-title' => 'Ẓeṛ aɣbalu n $1',
+'actionthrottled' => 'Tigawt tesɛa talast',
+'actionthrottledtext' => 'Iwakken an ewwet mgal tira yerkan (SPAM), tigawt agi tesɛa talast n amḍan n tikwalt deg akud awezzlan. talast agi t-ɛedda.
+Ɛred tikkelt nniḍen deg kra n dqiqa.',
 'protectedpagetext' => 'Asebter-agi d amsekker.',
 'viewsourcetext' => 'Tzemreḍ ad twaliḍ u txedmeḍ alsaru n uɣbalu n usebter-agi:',
+'viewyourtext' => 'Tzemṛeḍ ad ẓṛeḍ dɣa ad nɣeleḍ agbur n "ibeddlen inek/inem" deg usebter agi :',
 'protectedinterface' => 'Asebter-agi d amsekker axaṭer yettuseqdac i weḍris n software.',
 'editinginterface' => "'''Aɣtal:''' Aqla-k tettbeddileḍ asebter i yettuseqdac i weḍris n software. Tagmett n software i tt-ẓren yimseqdacen wiyaḍ ad tbeddel akk d ibeddlen inek.",
 'sqlhidden' => '(Query n SQL tettwaffer)',
-'cascadeprotected' => 'Asebter-agi yettwaḥrez seg ubeddil, axaṭer yettusekcem deg isebtar i ttwaḥerzen ula d nutni (acercur), ahaten:',
+'cascadeprotected' => 'Asebter-agi yegdel axaṭer yettusekcem deg {{PLURAL:$1|asebter yegdelen agi|isebtar yegdelen agi}} s Taxtiṛit « amesten s uceṛcuṛ » isermeden :
+$2',
+'namespaceprotected' => "Ur tesɛiḍ ara turagt iwakken ad beddeleḍ isebtar n tallunt n isemawen \"'''\$1'''\".",
+'customcssprotected' => 'Ur tesɛiḍ ara turagt iwakken ad beddeleḍ asebter agi n CSS, acku tesɛa iɣewwaren n yiwen useqdac nniḍen.',
+'customjsprotected' => 'Ur tesɛiḍ ara turagt iwakken ad beddeleḍ asebter agi n Javascript, acku tesɛa iɣewwaren n yiwen useqdac nniḍen.',
+'ns-specialprotected' => 'Ur t-zemred ara ad beddeleḍ isebtar usligen',
+'titleprotected' => "Azwel agi yegdel deg usnulfu ɣef [[User:$1|$1]].
+Taɣẓint id yenna : ''$2''",
+'filereadonlyerror' => 'Ulamek an beddel afaylu « $1 » acku akaram n ifuyla « $2 » yella deg taɣuri kan.
+
+Anedbal i tid sekkweṛen yefkad taɣẓint agi : « $3 ».',
+'invalidtitle-knownnamespace' => 'Azwel ur i ɣbel ara s tallunt n isemawen « $2 » dɣa d-uglam « $3 »',
+'invalidtitle-unknownnamespace' => 'Azwel ur i ɣbel ara s uṭṭun n tallunt n isemawen $1 dɣa d-uglam « $2 » warisem',
+'exception-nologin' => 'Ur tekcimeḍ ara',
+'exception-nologin-text' => 'I usebter agi naɣ i tigawt agi, ilaq ad qqeneḍ ɣef wiki agi.',
+
+# Virus scanner
+'virus-badscanner' => "Yir tawila : anafraḍ n infafaden warisem : ''$1''",
+'virus-scanfailed' => 'Abrir n unadi (tangalt $1)',
+'virus-unknownscanner' => 'amgelanfafad warisem :',
 
 # Login and logout pages
-'logouttext' => "'''Tura teffɣeḍ.'''
+'logouttext' => "'''Tura tesensereḍ.'''
 
-Tzemreḍ ad tesseqdceḍ {{SITENAME}} d udrig, neɣ tzemreḍ ad tkecmeḍ daɣen s yisem n wemseqdac inek (neɣ nniḍen).
+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 yis-k, $1! ==
+'welcomecreation' => '== Anṣuf yisek (yisem), $1 ! ==
 
-Isem n wemseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{SITENAME}} inek.',
+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',
 'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi (i afellay n $1 {{PLURAL:$1|ass|ussan}})',
+'securelogin-stick-https' => 'Qqim uqqin s HTTPS sakin tuqqna',
 'yourdomainname' => 'Taɣult inek',
+'password-change-forbidden' => 'Ur zemreḍ ara ad beddeleḍ awalen n uɛaddi ɣef uwiki agi.',
 'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an wemseqdac aberrani inek.',
 'login' => 'Kcem',
 'nav-login-createaccount' => 'Kcem / Xleq isem n wemseqdac',
 'loginprompt' => 'Yessefk ad teǧǧiḍ ikukiyen (cookies) iwakken ad tkecmeḍ ar {{SITENAME}}.',
 'userlogin' => 'Kcem / Xleq isem n wemseqdac',
+'userloginnocreate' => 'Qqen',
 'logout' => 'Ffeɣ',
 'userlogout' => 'Ffeɣ',
 'notloggedin' => 'Ur tekcimeḍ ara',
@@ -387,29 +472,38 @@ Isem n wemseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{
 'gotaccountlink' => 'Kcem',
 'userlogin-resetlink' => 'Ettuḍ tilɣa n tuqqna ?',
 'createaccountmail' => 's e-mail',
+'createaccountreason' => 'Ayɣer',
 'badretype' => 'Awal n tbaḍnit amezwaru d wis sin mačči d kif-kif.',
 'userexists' => 'Isem n wemseqdac yeddem-as amdan wayeḍ. Fren yiwen nniḍen.',
 'loginerror' => 'Agul n ukcam',
+'createaccounterror' => 'Ulamek ad nesnulfu amiḍan : $1',
 'nocookiesnew' => 'Isem n wemseqdac-agi yettwaxleq, meɛna ur tekcimeḍ ara. {{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eǧǧ-aten, umbeɛd kecm s yisem n wemseqdac akk d wawal n tbaḍnit inek.',
 'nocookieslogin' => '{{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eǧǧ-aten iwakken ad tkecmeḍ.',
+'nocookiesfornew' => 'Amiḍan n useqdac ur d-isnulfu ara, acku ur nezmer ara an sulu azar-is.
+Selken ma sermedeḍ "cookies", sismeḍ asebter dɣa εreḍ tikkelt nniḍen.',
 'noname' => 'Ur tefkiḍ ara isem n wemseqdac ṣaḥiḥ.',
 'loginsuccesstitle' => 'Tkecmeḍ !',
 'loginsuccess' => "'''Tkecmeḍ ar {{SITENAME}} s yisem n wemseqdac \"\$1\".'''",
-'nosuchuser' => 'Ulac isem n wemseqdac s yisem "$1". Ssenqed tira n yisem-nni, neɣ xelq isem n wemseqdac amaynut.',
+'nosuchuser' => 'Aseqdac « $1 » ulac-it d-agi.
+Ssenqed tira n yisem-nni, naɣ [[Special:UserLogin/signup|snulfu-d amiḍan amaynut]].',
 'nosuchusershort' => 'Ulac isem n wemseqdac s yisem "$1". Ssenqed tira n yisem-nni.',
 'nouserspecified' => 'Yessefk ad tefkeḍ isem n wemseqdac.',
+'login-userblocked' => 'Aseqdac agi i sewḥel. Tuqqna t-ugwi.',
 'wrongpassword' => 'Awal n tbaḍnit ɣaleṭ. Ɛreḍ daɣen.',
 'wrongpasswordempty' => 'Awal n tbaḍnit ulac-it. Ɛreḍ daɣen.',
-'passwordtooshort' => 'Awal n tbaḍnit inek d amecṭuḥ bezzaf. Yessefk ad yesɛu $1 isekkilen neɣ kter.',
+'passwordtooshort' => 'Awal-ik (im) n uɛaddi ilaq ad i sɛu adday {{PLURAL:$1|1 asekkil|$1 isekkilen}}.',
+'password-name-match' => 'Ilaq awal n uɛaddi ad yili imeẓli s-isem n useqdac.',
+'password-login-forbidden' => 'aseqdac agi d awal n uɛaddi agi d-izenbigen.',
 'mailmypassword' => 'Awal n tbaḍnit n e-mail',
 'passwordremindertitle' => 'Asmekti n wawal n tbaḍnit seg {{SITENAME}}',
-'passwordremindertext' => 'Amdan (waqila d kečč, seg tansa IP $1)
-yesteqsa iwakken a nazen awal n tbaḍnit amaynut i {{SITENAME}} ($4).
-Awal n tbaḍnit i wemseqdac "$2" yuɣal-d tura "$3".
-Mliḥ lukan tkecmeḍ u tbeddleḍ awal n tbaḍnit tura.
+'passwordremindertext' => 'Amdan (waqila d kečč/kem, seg tansa IP $1) yesteqsa iwakken a nazen
+Awal n uɛaddi amaynut i {{SITENAME}} ($4). Awal n uɛaddi i wemseqdac "$2" yuɣal-d tura "$3".
+Mliḥ lukan tkecmeḍ u tbeddleḍ Awal n uɛaddi tura.
+Tasewti n awal agi n uɛaddi amaynut ad yaweḍ deg {{PLURAL:$5|yiwen ass|$5 ussan}}
 
-Lukan mačči d kečč i yesteqsan neɣ tecfiḍ ɣef awal n tbaḍnit, tzemreḍ ad tkemmleḍ mebla ma tbeddleḍ awal n tbaḍnit.',
+Lukan mačči d kečč i yesteqsan naɣ tecfiḍ ɣef awal n uɛaddi, tzemreḍ ad tkemmleḍ mebla ma tbeddleḍ awal n uɛaddi.',
 'noemail' => '"$1" ur yesɛi ara email.',
+'noemailcreate' => 'Ilaq ad efkeḍ tansa e-mail i sɛan aseɣbel.',
 'passwordsent' => 'Awal n tbaḍnit amaynut yettwazen i emal inek, aylaw n "$1".
 G leɛnaya-k, kcem tikelt nniḍen yis-s.',
 'blocked-mailpassword' => 'Tansa n IP inek tɛekkel, ur tezmireḍ ara ad txedmeḍ abeddel,
@@ -417,29 +511,88 @@ ur tezmireḍ ara ad tesɛuḍ awal n tbaḍnit i tettuḍ.',
 'eauthentsent' => 'Yiwen e-mail yettwazen-ak iwakken ad tsenteḍ.
 Qbel kulci, ḍfer ayen yenn-ak deg e-mail,
 iwakken ad tbeyyneḍ belli tansa n email inek.',
-'throttled-mailpassword' => 'Asmekti n wawal n tbaḍnit yettwazen yagi deg $1 sswayeɛ i iɛeddan. Asmekti n wawal n tbaḍnit yettwazen tikelt kan mkul $1 swayeɛ.',
+'throttled-mailpassword' => 'Asmekti n wawal n uɛaddi yettwazen yagi deg {{PLURAL:$1|asrag agi aneggaru| $1 isragen agi ineggura}}. Asmekti n wawal n uɛaddi yettwazen tikelt kan mkul $1 swayeɛ. deg {{PLURAL:$1|asrag|azilal n $1 isragen}}.',
 'mailerror' => 'Agul asmi yettwazen e-mail: $1',
-'acct_creation_throttle_hit' => 'Surf-aɣ, txelqeḍ aṭas n yismawen n wemseqdac ($1). Ur tettalaseḍ ara ad txelqeḍ kter.',
-'emailauthenticated' => 'Tansa e-mail inek tettuɛqel deg $1.',
+'acct_creation_throttle_hit' => 'Amdan i seqdacen tansa IP inek/inem yesnulfud {{PLURAL:$1|yiwen amiḍan|$1 imiḍanen}} deg 24 izragen agi ineggura, negweḍ ar talast n turagt deg azilal agi n wakud.',
+'emailauthenticated' => 'Tansa e-mail inek/inem tesesteb ass n $2 af $3.',
 'emailnotauthenticated' => 'Tansa e-mail inek mazal ur tettuɛqel. Ḥedd e-mail ur ttwazen i ulaḥedd n iḍaɣaren-agi.',
 'noemailprefs' => 'Efk tansa e-mail iwakken ad leḥḥun iḍaɣaren-nni.',
 'emailconfirmlink' => 'Sentem tansa e-mail inek',
 'invalidemailaddress' => 'Tansa e-mail-agi ur telhi, ur tesɛi ara taseddast n lɛali. Ssekcem tansa e-mail s taseddast n lɛali neɣ ur tefkiḍ acemma.',
+'cannotchangeemail' => 'Ur t-zemreḍ ara ad beddeleḍ tansa e-mail deg uwiki agi.',
+'emaildisabled' => 'Asmel agi ur yezmer ara ad i cegaɛ e-mail.',
 'accountcreated' => 'Isem n wemseqdac yettwaxleq',
 'accountcreatedtext' => 'Isem n wemseqdac i $1 yettwaxleq.',
+'createaccount-title' => 'Asnulfu n umiḍan i {{SITENAME}}',
+'createaccount-text' => 'Albeɛḍ yesnulfu-d amiḍan i tansa e-amil inek/inem ɣef {{SITENAME}} ($4) s-isem n-useqdac « $2 », s awal n uɛaddi « $3 ».
+Ilaq tura ad lldiḍ taɣimit dɣa ad beddeleḍ awal ik/im n uɛaddi.',
+'usernamehasherror' => 'Isem n useqdac ur yezmer ara ad i sɛu  isekkilen n ugeddeḥ',
+'login-throttled' => 'Tɛerdeḍ ad qqeneḍ aṭas tiqwal deg dqiqat agi iɛddan.
+Ilaq ad rǧuḍ ciṭaḥ uqbel ad ɛerdeḍ tikkelt nniḍen.',
+'login-abort-generic' => 'Taremt ik/im n tuqqna tebrir',
 'loginlanguagelabel' => 'Tutlayt: $1',
+'suspicious-userlogout' => 'Asuter n usenser yugwi acku yella ugur s iminig naɣ s tazarkatut n uqeddac proxy.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'anezri warisem deg tawuri mail() n PHP',
+'user-mail-no-addy' => 'Ɛred ad icegaɛ e-mail war tansa e-mail',
 
 # Change password dialog
-'resetpass' => 'Iɛawed awal n tbaḍnit',
+'resetpass' => 'Beddel awal n uɛaddi',
 'resetpass_announce' => 'Tkecmeḍ s ungal yettwazen-ak s e-mail (ungal-nni qrib yemmut). Iwekken tkemmleḍ, yessefk ad textareḍ awal n tbaḍnit amaynut dagi:',
 'resetpass_text' => '<!-- Rnu aḍris dagi -->',
-'resetpass_header' => 'Ɛiwed awal n tbaḍnit',
+'resetpass_header' => 'Beddel awal n uɛassi n umiḍan',
 'oldpassword' => 'Awal n tbaḍnit aqdim:',
 'newpassword' => 'Awal n tbaḍnit amaynut:',
 'retypenew' => 'Ɛiwed ssekcem n tbaḍnit amaynut:',
 'resetpass_submit' => 'Eg awal n tbaḍnit u kcem',
 'resetpass_success' => 'Awal n tbaḍnit yettubeddel! Qrib ad tkecmeḍ...',
-'resetpass_forbidden' => 'Ur tezmireḍ ara ad tbeddleḍ awal n tbaḍnit deg wiki-yagi',
+'resetpass_forbidden' => 'Ur zemreḍ ara ad beddeleḍ awalen n uɛaddi',
+'resetpass-no-info' => 'Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.',
+'resetpass-submit-loggedin' => 'Beddel awal n uɛaddi',
+'resetpass-submit-cancel' => 'Semmewet',
+'resetpass-wrong-oldpass' => 'Awal n uɛaddi ur i seɣbel ara.
+Ahat ilaq ad beddeleḍ awal ik/im n uɛaddi naɣ ad ssutereḍ awal n uɛaddi amaynut.',
+'resetpass-temp-password' => 'Awal n uɛaddi amakud',
+
+# Special:PasswordReset
+'passwordreset' => 'Awennez tikkelt nniḍen n awal uɛaddi',
+'passwordreset-text' => 'Ččur tiferkit agi iwakken ad eṭṭfeḍ tirawt n usmekti  deg-es tilɣa n umiḍan inek/inem.',
+'passwordreset-legend' => 'Awennez tikkelt nniḍen n awal uɛaddi',
+'passwordreset-disabled' => 'Awennez n awal uɛaddi yensa deg uwiki agi.',
+'passwordreset-pretext' => '{{PLURAL:$1||Sekcem aferdis n isefka ddaw agi}}',
+'passwordreset-username' => 'Isem n useqdac',
+'passwordreset-domain' => 'Talɣut :',
+'passwordreset-capture' => 'Ẓeṛ tirawt ?',
+'passwordreset-capture-help' => 'Lukan ad tekkiḍ ɣef texxamt agi, tirawt (deg-es awal n uɛaddi akudan) att beqqeḍ dɣa ad tetwetceggaɛ i useqdac.',
+'passwordreset-email' => 'Tansa e-mail :',
+'passwordreset-emailtitle' => 'Tilɣa n umiḍan ɣef {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered asiwel n tilɣa n umiḍan inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yedrew|imiḍanen n iseqdacen agi drewen}} s tansa e-mail agi :
+
+$2
+
+{{PLURAL:$3|Awal n uɛaddi agi ad i aff tasewti-s|Awalen n uɛaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
+'passwordreset-emailtext-user' => 'Aseqdac $1 ɣef {{SITENAME}} yessutered asiwel n tilɣa n umiḍan inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yedrew|imiḍanen n iseqdacen agi drewen}} s tansa e-mail agi :
+
+$2
+
+{{PLURAL:$3|Awal n uɛaddi agi ad i aff tasewti-s|Awalen n uɛaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
+'passwordreset-emailelement' => 'Isem n useqdac : $1
+Awal n uɛddi akudan : $2',
+'passwordreset-emailsent' => 'Tirawt n usmekti tetwazen.',
+'passwordreset-emailsent-capture' => 'Tirawt n usmekti tetwazen, ẓeṛ-itt ddaw agi.',
+'passwordreset-emailerror-capture' => 'Tirawt n usmekti t-arewed, ẓeṛ-itt ddaw agi, lamaɛna azen yefkad anezri (tirawt ur tru ara) : $1',
+
+# Special:ChangeEmail
+'changeemail' => 'Beddel tansa n e-mail',
+'changeemail-header' => 'Beddel tansa n e-mail n umiḍan',
+'changeemail-text' => 'Ččur tiferkit agi iwakken ad beddeleḍ tansa e-mail inek/inem. Ilaq ad sekcemeḍ awal ik/im n uɛaddi iwakken ad sergegeḍ abeddel agi.',
+'changeemail-no-info' => 'Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.',
+'changeemail-oldemail' => 'Tansa e-mail n tura :',
+'changeemail-newemail' => 'Tansa e-mail tamaynut :',
+'changeemail-none' => '(ulac)',
+'changeemail-submit' => 'Beddel tansa e-mail',
+'changeemail-cancel' => 'Semmewet',
 
 # Edit page toolbar
 'bold_sample' => 'Aḍris aberbuz',
@@ -472,42 +625,79 @@ iwakken ad tbeyyneḍ belli tansa n email inek.',
 'showlivepreview' => 'Pre-timeẓriwt taǧiḥbuṭ',
 'showdiff' => 'Ssken ibeddlen',
 'anoneditwarning' => "'''Aɣtal:''' Ur tkecmiḍ ara. Tansa IP inek ad tettusmekti deg umezruy n usebter-agi.",
+'anonpreviewwarning' => "''Ur tesuluḍ ara. Aḥraz ad yekles tansa IP inek/inem deg umezruy n ibeddilen n usebter.''",
 'missingsummary' => "'''Ur tettuḍ ara:''' Ur tefkiḍ ara azwel i ubeddel inek. Lukan twekkiḍ ''Smekti'' tikelt nniḍen, abeddel inek ad yettusmekti mebla azwel.",
 'missingcommenttext' => 'Ssekcem awennit deg ukessar.',
 'missingcommentheader' => "'''Ur tettuḍ ara:''' Ur tefkiḍ ara azwel-azellum i ubeddel inek. Lukan twekkiḍ ''Smekti'' tikelt nniḍen, abeddel inek ad yettusmekti mebla azwel-azellum.",
 'summary-preview' => 'Pre-timeẓriwt n ugzul:',
 'subject-preview' => 'Pre-timeẓriwt asentel/azwel azellum:',
 'blockedtitle' => 'Amseqdac iɛekkel',
-'blockedtext' => "'''Isem n wemseqdac neɣ tansa n IP inek ɛekkelen.'''
+'blockedtext' => "'''Amiḍan ik n useqdac neɣ tansa n IP sewḥlen.'''
+
+Asewḥel yetwexdem af $1
+Taɣẓint id yenna : ''$2''.
+
+* Tazzwara n usewḥel : $8
+* Taggara n usewḥel : $6
+* Amiḍan i sewḥlen : $7.
+
+
+Tzemreḍ ad tmeslayeḍ s $1 neɣ [[{{MediaWiki:Grouppage-sysop}}|anedbal]] nniḍen iwakken ad tsmelayem ɣef uɛekkil-nni.
+Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen n wemseqdac]], ur tezmireḍ ara ad tazneḍ email.
+Tansa n IP inek n tura d $3, ID n uɛekkil d #$5.
+Smekti-ten u fka-ten i unedbal-nni.",
+'autoblockedtext' => "Tansa IP inek/inem tesewḥel s-uwurman acku d-aseqdac nniḍen i ttisexdmen. Ladɣa ula d-aseqdac agi, isewḥel-it $1.
 
-$1 iɛekkel-it u yenna-d ''$2''.
+Taɣẓint id yenna : ''$2''.
 
-Tzemreḍ ad tmeslayeḍ akk d $1 neɣ [[{{MediaWiki:Grouppage-sysop}}|anedbal]] nniḍen iwakken ad tsmelayem ɣef uɛekkil-nni.
-Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen n wemseqdac]], ur tezmireḍ ara ad tazneḍ email. Tansa n IP inek n tura d $3, ID n uɛekkil d #$5. Smekti-ten u fka-ten i unedbal-nni.",
+* Tazzwara n usewḥel : $8
+* Taggara n usewḥel : $6
+* Amiḍan i sewḥlen : $7.
+
+
+Tzemreḍ ad tmeslayeḍ s $1 neɣ [[{{MediaWiki:Grouppage-sysop}}|anedbal]] nniḍen iwakken ad tsmelayem ɣef uɛekkil-nni.
+Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen n wemseqdac]], ur tezmireḍ ara ad tazneḍ email.
+Tansa n IP inek n tura d $3, ID n uɛekkil d #$5.
+Smekti-ten u fka-ten i unedbal-nni.",
+'blockednoreason' => 'Ulac taɣẓint',
 'whitelistedittext' => 'Yessefk ad $1 iwakken ad tbeddleḍ isebtar.',
 'confirmedittext' => 'Yessefk ad tsentmeḍ tansa e-mail inek uqbel abeddel. Xtar tansa e-mail di [[Special:Preferences|isemyifiyen n wemseqdac]].',
-'nosuchsectiontitle' => 'Amur ulac-it',
-'nosuchsectiontext' => 'Tɛerḍeḍ ad tbeddleḍ amur ulac-it.',
+'nosuchsectiontitle' => 'Ulamek an af tigezmi',
+'nosuchsectiontext' => 'Tɛerḍeḍ ad tbeddleḍ tigezmi ur llan ara.',
 'loginreqtitle' => 'Yessefk ad tkecmeḍ',
 'loginreqlink' => 'Kcem',
 'loginreqpagetext' => 'Yessefk $1 iwakken ad teẓriḍ isebtar wiyaḍ.',
 'accmailtitle' => 'Awal n tbaḍnit yettwazen.',
-'accmailtext' => 'Awal n tbaḍnit n "$1" yettwazen ar $2.',
+'accmailtext' => "Awal n uɛaddi id yuran s ugacur i [[User talk:$1|$1]] yetwecgaɛ i $2.
+Awal n uɛaddi i umiḍan agi amaynut yezmer ad yetbeddel ɣef usebter n ''[[Special:ChangePassword|ubeddel n awal uɛddi]]'' sakin tuqqna.",
 'newarticle' => '(Amaynut)',
 'newarticletext' => 'Tḍefreḍ azday ɣer usebter mazal ur yettwaxleq ara.
 Akken ad txelqeḍ asebter-nni, aru deg tenkult i tella deg ukessar
 (ẓer [[{{MediaWiki:Helppage}}|asebter n tallat]] akken ad tessneḍ kter).
 Ma tɣelṭeḍ, wekki kan ɣef tqeffalt "Back/Précédent" n browser/explorateur inek.',
-'anontalkpagetext' => "----''Wagi d asebter n umyennan n wemseqdac adrig. Ihi, yessef ad as nefk ID, nesseqdac tansa IP ines akken a t-neɛqel. Tansa IP nni ahat tettuseqdac sɣur aṭṭas n yimdanen. Lukan ula d kečč aqla-k amseqdac adrig u ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:UserLogin|xleq isem n wemseqdac neɣ kcem]].''",
+'anontalkpagetext' => "---- ''Wagi d asebter n umyennan n useqdac adrig, mazal ur d-yesnufa ara amiḍan. I taɣẓint agi, ilaq an seqdec tansa IP ines iwakken at-id n sulu. Yiwet tansa IP tezmer at tettuseqdac sɣur aṭṭas n iseqdacen. Lukan ula d kečč aqla-k amseqdac adrig dɣa ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:UserLogin/signup|snulfud amiḍan]] naɣ [[Special:UserLogin|qqened]] iwakken sya d asawen ur t-illint ara uguren n usulu.''",
 'noarticletext' => 'Ulac aḍris deg usebter-agi, tzemreḍ ad [[Special:Search/{{PAGENAME}}|tnadiḍ ɣef wezwel n usebter-agi]] deg isebtar wiyaḍ neɣ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḍ asebter-agi].',
 'noarticletext-nopermission' => 'Imira ulac aḍris deg usebter agi.
 Tzemreḍ [[Special:Search/{{PAGENAME}}|ad nadiḍ ɣef azwel agi]] deg isebtaren nniḍen,
 naɣ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|asebter={{FULLPAGENAMEE}}}} ad nadiḍ deg iɣmisen iqqenen]</span>.',
+'missing-revision' => 'Tacaggart #$1 n usebter s isem « {{PAGENAME}} » ulac-itt.
+
+Acku azday n umezruy, ɣef wayen tsennedeḍ, d-aqbur. Asebter yemḥa.
+Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n isebtar yemḥan].',
+'userpage-userdoesnotexist' => 'Amiḍan n useqdac « <nowiki>$1</nowiki> » ur yekles ara. Ilaq ad selkeneḍ ma tebɣiḍ ad snulfuḍ asebter agi.',
+'userpage-userdoesnotexist-view' => 'Amiḍan n useqdac « $1 » ur yekles ara.',
+'blocked-notice-logextract' => 'Aseqdac agi yekyef.
+Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
 'clearyourcache' => "'''Tamawt:''' Beɛd asmekti, ahat yessefk ad temḥuḍ lkac n browser/explorateur inek akken teẓriḍ ibeddlen. '''Mozilla / Firefox / Safari:''' qqim twekkiḍ ''Shift'' u wekki ɣef ''Reload/Recharger'', neɣ wekki ɣef ''Ctrl-Shift-R'' (''Cmd-Shift-R'' deg Apple Mac); '''IE:''' qqim twekkiḍ ɣef ''Ctrl'' u wekki ɣef ''Refresh/Actualiser'', neɣ wekki ɣef ''Ctrl-F5''; '''Konqueror:''': wekki kan ɣef taqeffalt ''Reload'', neɣ wekki ɣef ''F5''; '''Opera''' yessefk ad tesseqdceḍ ''Tools→Preferences/Outils→Préférences'' akken ad temḥud akk lkac.",
-'usercssyoucanpreview' => "'''Tixidest:''' Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ CSS amynut inek uqbel ad tesmektiḍ.",
-'userjsyoucanpreview' => "'''Tixidest:''' Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ JS amynut inek uqbel ad tesmektiḍ.",
-'usercsspreview' => "'''Smekti belli aql-ak twaliḍ CSS inek kan, mazal ur yettusmekti ara!'''",
+'usercssyoucanpreview' => "'''taxbalut :''' Sseqdec taqeffalt « {{int:showpreview}} » iwakken ad tɛerḍeḍ asebter CSS inek/inem amaynut  uqbel ad aklasteḍ.",
+'userjsyoucanpreview' => "'''taxbalut :''' Sseqdec taqeffalt « {{int:showpreview}} » iwakken ad tɛerḍeḍ asebter JavaScript inek/inem amaynut  uqbel ad aklasteḍ.",
+'usercsspreview' => "'''Cfu-d, wagi d-azaraskan n usebter ik/im n CSS.'''
+'''Mmazal ur yettusmekti ara!'''",
 'userjspreview' => "'''Smekti belli aql-ak tɛerḍeḍ JavaScript inek kan, mazal ur yettusmekti ara!'''",
+'sitecsspreview' => "'''Smekti belli aql-ak tɛerḍeḍ asebter CSS agi inek kan.'''
+'''Mazal ur yettusmekti ara!'''",
+'sitejspreview' => "'''Smekti belli aql-ak tɛerḍeḍ angal agi JavaScript inek kan.'''
+'''Mazal ur yettusmekti ara!'''",
 'userinvalidcssjstitle' => '\'\'\'Aɣtal:\'\'\' Aglim "$1" ulac-it. Ur tettuḍ ara belli isebtar ".css" d ".js" i txedmeḍ sseqdacen azwel i yesɛan isekkilen imecṭuḥen, s umedya: {{ns:user}}:Foo/vector.css akk d {{ns:user}}:Foo/Vector.css.',
 'updated' => '(Yettubeddel)',
 'note' => "'''Tamawt:'''",
@@ -515,17 +705,24 @@ naɣ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|asebter={{FULLPAGENAME
 
 '''Cfut, ttagi d azar-timeẓriwt kan.'''
 Ibeddlen mazal ur ttusmektin ara!",
+'continue-editing' => 'Kemmel abeddel',
 'previewconflict' => 'Pre-timeẓriwt-agi tesskan aḍris i yellan deg usawen lemmer tebɣiḍ a tt-tesmektiḍ.',
 'session_fail_preview' => "'''Suref-aɣ! ur nezmir ara a nesmekti abeddil inek axaṭer yella ugur.
 G leɛnayek ɛreḍ tikelt nniḍen. Lukan mazal yella ugur, ffeɣ umbeɛd kcem.'''",
-'session_fail_preview_html' => "'''Suref-aɣ! ur nezmir ara a nesmekti abeddel inek axaṭer yella ugur.'''
+'session_fail_preview_html' => "'''Ur nezmer ara an aklas ibeddilen inek/inem acku yella asṛuḥu n tilɣa deg taɣimit inek/inem.'''
 
-''Awaṭer wiki-yagi teǧǧa HTML, teffer pre-timeẓriwt akken teǧǧanez antag n JavaScript.''
+''Acku {{SITENAME}} i sermed azar n HTML, azaraskan yeseggelmes iwakken ur t-illint ara tinṭagin s Javascript.''
 
-'''Lukan abeddel agi d aḥeqqani, g leɛnayek ɛreḍ tikelt nniḍen.. Lukan mazal yella ugur, ffeɣ umbeɛd kcem.'''",
+''' Lukan abeddel agi d-aḥeqqani, ɛered tikkelt nniḍen.'''
+Lukan yella ugur, [[Special:UserLogout|Senser]] dɣa qqen.",
+'token_suffix_mismatch' => "'''Abeddel inek/inem ur yeɣbel ara acku iminig inek/inem ur yesettengel ara s umellil isekkilen n uqqa deg asulay n ubeddel.'''
+Tiririt agi telaq i usḍiqqef n usgufsu n uḍris deg usebter.
+Ugur agi, yetilli tikwal mi seqdeceḍ aqeddac Proxy warisem yellan ɣef Web.",
+'edit_form_incomplete' => "'''Kra n iḥricen n tiferkit n ubeddel ur gweḍen ara ar uqeddac, ilaq ad selkeneḍ ma ibeddilen ur erẓen ara dɣa ɛreḍ tikkelt nniḍen.'''",
 'editing' => 'Abeddel n $1',
+'creating' => 'Asnulfu n $1',
 'editingsection' => 'Abeddel n $1 (amur)',
-'editingcomment' => 'Abeddel n $1 (awennit)',
+'editingcomment' => 'Abeddel n $1 (tigezmi tamaynut)',
 'editconflict' => 'Amennuɣ deg ubeddel: $1',
 'explainconflict' => "Amdan nniḍen ibeddel asebter-agi asmi telliḍ tettbeddileḍ.
 Aḍris deg usawen yesɛa asebter am yella tura.
@@ -544,42 +741,79 @@ Aqlak teggaleḍ belli tureḍ wagi d kečč, neɣ teddmiḍ-t seg taɣult azaye
 'copyrightwarning2' => "Ssen belli akk tikkin deg {{SITENAME}} zemren ad ttubeddlen neɣ ttumḥan sɣur imdanen wiyaḍ. Lukan ur tebɣiḍ ara aru inek yettubeddel neɣ yettwazen u yettwaru deg imkanen nniḍen, ihi ur t-tazneḍ ara dagi.<br />
 Aqlak teggaleḍ belli tureḍ wagi d kečč, neɣ teddmiḍ-t seg taɣult azayez neɣ iɣbula tilelliyin (ẓer $1 akken ad tessneḍ kter).
 '''UR TEFKIḌ ARA AXDAM S COPYRIGHT MEBLA TURAGT!'''",
-'longpageerror' => "'''AGUL: Aḍris i tefkiḍ yesɛa $1 kB/ko, tiddi-yagi kter n $2 kB/ko, ur yezmir ara ad yesmekti.'''",
-'readonlywarning' => "'''AƔTAL: Database d tamsekker akken ad teddwaxdem,
-ihi ur tezmireḍ ara ad tesmektiḍ ibeddlen inek tura. Smekti aḍris inek
-deg afaylu nniḍen akken tesseqdceḍ-it umbeɛd.'''",
-'protectedpagewarning' => "'''AƔTAL:  Asebter-agi yettwaḥrez, ala inedbalen zemren a t-beddlen'''",
-'semiprotectedpagewarning' => "'''Tamawt:''' Asebter-agi yettwaḥrez, ala imseqdacen i yesɛan isem n wemseqdac zemren a t-beddlen.",
-'cascadeprotectedwarning' => "'''Aɣtal:''' Asebter-agi iɛekkel iwakken ad zemren ala inedbalen a t-beddlen, axaṭer yettwassekcem deg isebtar i yettwaḥerzen agi (acercur):",
+'longpageerror' => "'''Anezri : Aḍris i sekcemeḍ yeɛbeṛ {{PLURAL:$1|yiwen kilobyte|$1 kilobytes}}, tiddi-yagi kter n talast yellan af {{PLURAL:$2|yiwen kilobyte|$1 kilobytes}}.'''
+Ur yezmer ara ad yetwaḥrez.",
+'readonlywarning' => "'''ƔUR-WET : taffa n isefka t-sekkweṛ i timhelin n ibeddi. Ur tzemreḍ ara ad ḥrezeḍ  ibeddilen tura.'''
+Tzemreḍ ad nɣeleḍ aḍris ik/im deg ufaylu iwakken ad tesqedceḍ sakin.
+
+Anedbal i sekkweṛen taffa n isefka agi, yefka-d taɣẓint agi : $1",
+'protectedpagewarning' => "'''ƔUR-WET : Asebter-agi yettwaḥrez, inedbalen kan i zemren a t-beddlen.'''
+Asekcem aneggaru n uɣmis yella ddaw-agi :",
+'semiprotectedpagewarning' => "'''Tamawt :''' Asebter-agi yettwaḥrez, iseqdacen yesɛan amiḍan kan i zemren a t-beddlen.
+Asekcem aneggaru n uɣmis yella ddaw-agi :",
+'cascadeprotectedwarning' => "'''ƔUR-WET :''' Asebter-agi yettwaḥrez, inedbalen kan i zemren a t-beddlen. Yettwaḥrez acku yettwassekcem  deg {{PLURAL:$1|asebter i ḥerzen agi yesɛan|isebtar i ḥerzen agi yesɛan}} « amesten s uceṛcuṛ » i sermeden :",
+'titleprotectedwarning' => "'''ƔUR-WET : Asebter agi yemesten, dɣa ilaq ad sɛuḍ [[Special:ListGroupRights|izerfan usligen]] iwakken at id snulfuḍ.''' Asekcem aneggaru n uɣmis yebeqqeḍ ddaw agi :",
 'templatesused' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg usebter agi :',
-'templatesusedpreview' => 'Talɣiwin ttuseqdacen deg pre-timeẓriwt-agi:',
-'templatesusedsection' => 'Talɣiwin ttuseqdacen deg amur-agi:',
+'templatesusedpreview' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg azaraskan agi :',
+'templatesusedsection' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg tigezmi agi :',
 'template-protected' => '(yettwaḥrez)',
 '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' => 'Adeg n internet agi iḥedded axleq n isebtar imaynuten.
-Tzemreḍ a d-uɣaleḍ u tbeddleḍ asebter i yellan, neɣ ad [[Special:UserLogin|tkecmeḍ neɣ ad txelqeḍ isem n wemseqdac]].',
+'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.',
+'sectioneditnotsupported-title' => 'Abeddel n tigezmi agi ur yezmer ara',
+'sectioneditnotsupported-text' => 'Abeddel n tigezmi ur yezmer ara deg usebtar agi n ubeddel.',
+'permissionserrors' => 'Anezri n turagt',
+'permissionserrorstext' => 'Ur tesɛiḍ ara turagt iwakken ad xedmeḍ wayagi i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :',
 'permissionserrorstext-withaction' => 'Ur sɛiḍ ara ttesriḥ af $2, i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :',
 'recreate-moveddeleted-warn' => "'''Ɣur-wet : asebter agi i tebɣam ad snulfum, yetwekkes uqbel.'''
 
 Ilaq ad snulfum asebter agi haca ma i xater. Aɣmis n isebtaren i twekkesen yella ddaw-agi :",
 'moveddeleted-notice' => 'Asebter agi yetwekkes. Aɣmis n isebtaren i twekkesen yella ddaw agi.',
+'log-fulllog' => 'Ẓeṛ aɣmis ummid',
+'edit-hook-aborted' => 'Abrir n ubeddel s usiɣzef.
+Tamentilt warisem',
+'edit-gone-missing' => 'Ur yezmer ara ad yemucceḍ asebter agi.
+Ahat yetwemḥa.',
+'edit-conflict' => 'Amgirred n ubeddel.',
+'edit-no-change' => 'Abeddel inek/inem ur yetwexdam ara acku ur di ban ara abeddel deg uḍris.',
+'edit-already-exists' => 'Asebter amaynut ur d yesnufu ara.
+Yella yakan.',
+'defaultmessagetext' => 'Izen s lexṣas',
 
 # Parser/template warnings
+'expensive-parserfunction-warning' => "'''Ɣur-wet :''' Asebter agi yesɛa aṭas n tiɣriwin ar tiseɣnin ɣlayen n umsisleḍ taseddast.
+Ilaq ad i sɛu ddaw n  $2 {{PLURAL:$2|tiɣri|tiɣriwin }}, wannag tura {{PLURAL:$1|tella $1 tiɣri|llant $1 tiɣriwin}}.",
+'expensive-parserfunction-category' => 'Isebtar yesɛan aṭas tiɣriwin ɣlayen n tiseeɣnin n umsisleḍ taseddast',
 'post-expand-template-inclusion-warning' => 'Ɣur-wet : Asebter agi yesɛa aṭas tilɣatin. Kra n tilɣatin ur zemrent ara ad seqdacent.',
 'post-expand-template-inclusion-category' => 'Isebtaren i sɛan aṭas tilɣatin',
 'post-expand-template-argument-warning' => "'''Ɣur-wet''' : Asebter agi yesɛa tuccḍa deg aɣewwar n yiwet talɣa.",
 'post-expand-template-argument-category' => 'Isebtaren i sɛan iɣewwaren n talɣa ur skazelen ara',
+'parser-template-loop-warning' => 'N-ufad talɣa s tineddict : [[$1]]',
+'parser-template-recursion-depth-warning' => 'Talast n lqay n tiɣriwin n tilɣatin tefel ($1)',
+'language-converter-depth-warning' => 'Talast n lqay n uselkat n tutlayt tefel ($1)',
+'node-count-exceeded-category' => 'Isebtar anda amḍa n tikerwas yefel',
+'node-count-exceeded-warning' => 'Asebter yefelen amḍan n tikerwas',
+'expansion-depth-exceeded-category' => 'Isebtar anda lqay n uderrec yefel',
+'expansion-depth-exceeded-warning' => 'Isebtar yefelen lqay n uderrec',
+'parser-unstrip-loop-warning' => 'Tifin n tineddict ur nezmer ara an sentuter',
+'parser-unstrip-recursion-limit' => 'Talast n usniles ur nezmer ara an sentuter tefel ($1)',
+'converter-manual-rule-error' => 'Tifin n unezri deg alugen awfus n uselket n tutlayt',
 
 # "Undo" feature
 'undo-success' => 'Tzemreḍ ad tessefsuḍ abeddil. Ssenqed asidmer akken ad tessneḍ ayen tebɣiḍ ad txdmeḍ d ṣṣeḥ, umbeɛd smekti ibeddlen u tkemmleḍ ad tessefsuḍ abeddil.',
 'undo-failure' => 'Ur yezmir ara ad issefu abeddel axaṭer yella amennuɣ abusari deg ubeddel.',
+'undo-norev' => 'Abeddel ur yezmer ara ad yetwekkes acku ulac-itt naɣ tetwekkes yakan',
 'undo-summary' => 'Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Ur yezmir ara ad yexleq isem n wemseqdac',
+'cantcreateaccount-text' => "Asnulfu n umiḍan seg tansa IP (<b>$1</b>) tekyef sɣur [[User:$3|$3]].
+
+Taɣẓint n $3 : ''$2''",
 
 # History pages
 'viewpagelogs' => 'Ẓer aɣmis n usebter-agi',
@@ -603,7 +837,7 @@ Tabadut: (tura) = amgirred akk d tasiwelt n tura,
 'history-show-deleted' => 'Ekkes kan',
 'histfirst' => 'Tikkin timezwura',
 'histlast' => 'Tikkin tineggura',
-'historysize' => '($1 bytes/octets)',
+'historysize' => '({{PLURAL:$1|1 atamḍan|$1 itamḍanen}})',
 'historyempty' => '(amecluc)',
 
 # Revision feed
@@ -615,56 +849,150 @@ Ahat yettumḥa neɣ yettbeddel isem-is.
 Ɛreḍ [[Special:Search|ad tnadiḍ deg wiki]] ɣef isebtar imaynuten.',
 
 # Revision deletion
-'rev-deleted-comment' => '(awennit yettwakes)',
+'rev-deleted-comment' => '(agzul n taẓrigt yettwakes)',
 'rev-deleted-user' => '(isem n wemseqdac yettwakes)',
 'rev-deleted-event' => '(asekcem yettwakkes)',
-'rev-deleted-text-permission' => 'Tasiwelt-agi n tettwakkes seg weɣbar azayez.
-Waqila yella kter n talɣut deg [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} aɣmis n umḥay].',
-'rev-deleted-text-view' => 'Tasiwelt-agi n tettwakkes seg weɣbar azayez.
-Kečč d anedbal, tzemreḍ a t-twaliḍ
-Waqila yella kter n talɣut [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} aɣmis n umḥay].',
+'rev-deleted-user-contribs' => '[isem n useqdac naɣ tansa IP yetwemḥa - abeddel yeffer deg tiwsitin]',
+'rev-deleted-text-permission' => "Lqem n usebter agi '''tetwesfeḍ'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].",
+'rev-deleted-text-unhide' => "Lqem n usebter agi '''tetwesfeḍ'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].
+Tzemreḍ meqqar [$1 ad ẓṛeḍ lqem agi]  ma tebɣiḍ",
+'rev-suppressed-text-unhide' => "Lqem n usebter agi '''tetwekkes'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n umḥu].
+Tzemreḍ meqqar [$1 ad ẓṛeḍ lqem agi]  ma tebɣiḍ",
+'rev-deleted-text-view' => "Lqem n usebter agi '''tetwesfeḍ'''.
+Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].",
+'rev-suppressed-text-view' => "Lqem n usebter agi '''tetwekkes'''.
+Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n umḥu].",
+'rev-deleted-no-diff' => "Ur tzemreḍ ara ad ẓṛeḍ \"diff\" agi acku yiwet n lqem-is '''tetwesfeḍ'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].",
+'rev-suppressed-no-diff' => "Ur tzemreḍ ara ad ẓṛeḍ \"diff\" agi acku yiwet n lqem-is '''tetwekkes'''.",
+'rev-deleted-unhide-diff' => "Yiwen lqem n tameẓla agi '''yetwesfeḍ'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].
+Tzemreḍ meqqar [$1 ad ẓṛeḍ tameẓla agi] ma tebɣiḍ",
+'rev-suppressed-unhide-diff' => "Yiwen lqem n tameẓla agi '''yetwekkes'''.
+Tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n umḥu].
+Tzemreḍ meqqar [$1 ad ẓṛeḍ tameẓla agi] ma tebɣiḍ",
+'rev-deleted-diff-view' => "Yiwen lqem n \"diff\" agi '''yetwekkes'''.
+Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n umḥu].",
+'rev-suppressed-diff-view' => "Yiwen lqem n \"diff\" agi '''yetwesfeḍ'''.
+Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n usfeḍ].",
 'rev-delundel' => 'ssken/ffer',
+'rev-showdeleted' => 'Ssken',
 'revisiondelete' => 'Mḥu/kkes amḥay tisiwal',
-'revdelete-nooldid-title' => 'Ulac nnican i tasiwelt',
-'revdelete-nooldid-text' => 'Ur textareḍ ara tasiwelt nnican akken ad txedmeḍ tawuri fell-as.',
+'revdelete-nooldid-title' => 'Lqem asaḍas ur i ɣbel ara',
+'revdelete-nooldid-text' => 'Ur textareḍ ara lqem nnican akken ad txedmeḍ tawuri fell-as.',
+'revdelete-nologtype-title' => 'Ulac tawsit n uɣmis',
+'revdelete-nologtype-text' => 'Ur d ssefruḍ ara tawsit n uɣmis ɣef anwa tigawt agi ad tetwexdam.',
+'revdelete-nologid-title' => 'Asekcem n uɣmis ur i ɣbel ara',
+'revdelete-nologid-text' => 'Ur d ssefruḍ ara asekcem n uɣmis ɣef anwa tigawt agi ilaq ad tetwexdam, naɣ tadyant agi ur tella ara.',
+'revdelete-no-file' => 'Afaylu id ssefruḍ ur yella ara.',
+'revdelete-show-file-confirm' => 'Tebɣriḍ ad mḥuḍ tacaggart n ufaylu « <nowiki>$1</nowiki> » n $2 af $3 ?',
+'revdelete-show-file-submit' => 'Ih',
 'revdelete-selected' => "'''{{PLURAL:$2|Tasiwelt tettwafren|Tisiwal ttwafernen}} n [[:$1]]'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Tamirt n uɣmis tettwafren|Isallen n uɣmis ttwafernen}}:'''",
-'revdelete-text' => "'''Tisiwal i yettumḥan ad baben deg umezruy n usebter d weɣmis,
-meɛna imuren seg-sen zemren imdanen a ten-ẓren.'''
-
-Inedbalen wiyaḍ deg wiki-yagi zemren ad ẓren imuren i yettwafren u zemren a ten-mḥan, ḥaca ma llan icekkilen.",
-'revdelete-legend' => 'Eg icekkilen',
+'revdelete-text' => 'Ileqman d tidyanin yettumḥan ad qqimen deg umezruy n usebter dɣa deg iɣmisen, maca agbur nsen ur i sɛu ara tuffart i uzayez."
+Inedbalen wiyaḍ deg {{SITENAME}} zemren ad ẓṛen imuren i yettwafren u zemren a ten-mḥan, ḥaca ma llan icekkilen.',
+'revdelete-confirm' => 'Sergeg ma tebɣiḍ ad xedmeḍ tigawt agi, fehmeḍ inalkamen, dɣa temtawiḍ s [[{{MediaWiki:Policy-url}}|ilugan]].',
+'revdelete-suppress-text' => "Ilaq tukksa at illi kan deg tijṛa agi :
+* tilɣa n yiwen ur ezgan ara
+*: ''tansa, uṭṭun n tilifun, uṭṭun n taɣellist tamettit, …''",
+'revdelete-legend' => 'Sbebd akref n tamuɣli',
 'revdelete-hide-text' => 'Ffer aḍris n tsiwelt',
 'revdelete-hide-image' => 'Ffer ayen yellan deg ufaylu',
 'revdelete-hide-name' => 'Ffer tigawt d nnican',
 'revdelete-hide-comment' => 'Ffer abeddel n uwennit',
 'revdelete-hide-user' => 'Ffer Isem n wemseqdac/IP n umeskar',
-'revdelete-hide-restricted' => 'Eg icekkilen i inedbalen d yimdanen wiyaḍ',
+'revdelete-hide-restricted' => 'Mḥu isefka agi i inedbalen d yimdanen wiyaḍ',
+'revdelete-radio-same' => '(ur beddel ara)',
+'revdelete-radio-set' => 'Ih',
+'revdelete-radio-unset' => 'Ala',
 'revdelete-suppress' => 'Kkes talɣut seg inedbalen d yimdanen wiyaḍ',
 'revdelete-unsuppress' => 'Kkes icekkilen ɣef tisiwal i yuɣalen-d',
 'revdelete-log' => 'Ayɣer',
-'revdelete-submit' => 'Eg-it i tasiwelt tettwafren',
-'revdelete-success' => "'''Asekkud n tasiwelt yettuxdem.'''",
+'revdelete-submit' => 'Snes {{PLURAL:$1|i tacaggart i tettwafren|i ticggarin i tettwafren}}',
+'revdelete-success' => "''Asekkud n ileqman yemucce war uguren.'''",
+'revdelete-failure' => "'''Iẓṛi n lqem ur yemucceḍ ara :'''
+$1",
 'logdelete-success' => "'''Asekkud n tamirt yettuxdem.'''",
+'logdelete-failure' => "'''Iẓṛi n uɣmis ur yezmer ara ad yesbadu :'''
+$1",
 'revdel-restore' => 'beddel timezrit',
 'revdel-restore-deleted' => 'allas iqḍeεen',
 'revdel-restore-visible' => 'allas i nezmer an ẓeṛ',
+'pagehist' => 'Amezruy n usebter',
+'deletedhist' => 'Amezruy yemḥa',
+'revdelete-hide-current' => 'Yella anezri imi nemḥa aferdis yezemzen ass n $1 af $2 : d lqem aneggaru.
+Ur yezmer ara ad yemḥu.',
+'revdelete-show-no-access' => 'Yella anezri imi n beqqeḍ aferdis yezemzen ass n $1 af $2 : yecreḍ am "ukrif".
+Ur tesɛiḍ ara izerfan n wadduf.',
+'revdelete-modify-no-access' => 'Yella anezri imi nebeddel aferdis yezemzen ass n $1 af $2 : yecreḍ am "ukrif".
+Ur tesɛiḍ ara izerfan n wadduf.',
+'revdelete-modify-missing' => 'Yella anezri imi nebeddel aferdis yesɛan ID $1 : Ulac-it deg taffa n isefka !',
+'revdelete-no-change' => "'''Ɣur-wet :''' Aferdis yezemzen ass n $1 af $2 yesɛa yakan iɣewwaren n iẓṛi i tebɣiḍ.",
+'revdelete-concurrent-change' => 'Yella anezri imi nebeddel aferdis yezemzen ass n $1 af $2 : aẓayeris yetwebeddel sɣur amḍan nniḍen mi tbeddeleḍ
+Ẓeṛ iɣmisen.',
+'revdelete-only-restricted' => 'Yella anezri imi nemḥa asekcem yezemzen ass n $1 af $2 : ur tzemreḍ ara ad mḥuḍ iferdisen agi i inedbalen war ad fruḍ tixtiṛiyin nniḍen n umḥu.',
+'revdelete-reason-dropdown' => 'Tiɣẓinin timiranin n umḥu :
+** Akukel n izerfan umeskar (copyright) ;
+** Iwenniten naɣ tilɣa n yiwen ur yezgan ara ;
+** Tilɣa i zemren ad rgemen.',
+'revdelete-otherreason' => 'Taɣẓint nniḍen / taɣzint tamarnant :',
+'revdelete-reasonotherlist' => 'Taɣẓint nniḍen',
+'revdelete-edit-reasonlist' => 'Beddel tiɣẓinin n umḥu i-d-yettuɣalen',
+'revdelete-offender' => 'Ameskar n tacaggart :',
+
+# Suppression log
+'suppressionlog' => 'Aɣmis n isfaḍen',
+'suppressionlogtext' => 'Ddaw-agi, umuɣ n tukksiwin d ikyafen yellan ɣef ugbur yeffren i inedbalen.
+Ẓeṛ [[Special:BlockList|umuɣ ikyafen]] i umuɣ n tiririyin d ikyafen yellan d imahlanen.',
+
+# History merging
+'mergehistory' => 'Zdi amezruy n isebtar',
+'mergehistory-header' => 'Asebtar agi aken yeǧǧ ad tesduklem ileqman n umezruy n usebtar unṣib γer usebtar amaynut.
+Senked d akken tamhelt agi ad eǧǧ amezruy n usebtar ad ikemmel.',
+'mergehistory-box' => 'Zdi lqem n sin isebtar',
+'mergehistory-from' => 'Azar n usebter :',
+'mergehistory-into' => 'Aserken n usebter :',
+'mergehistory-list' => 'Amezruy n ibeddilen i nezmer an zdi',
+'mergehistory-merge' => 'Ileqman id iteddun n [[:$1]] zemren ad twasduklen d [[:$2]]. Seqdec tigejdit n tqeffalt ṛadyu iwakken ad tesdukleḍ ala ileqman yettwasnulfan seg tazwara armi d azmez yettwamlan. Ẓeṛ d akken aseqdec n iseγwan n tunigin ad iwennez tigejdit agi.',
+'mergehistory-go' => 'Ẓeṛ ibeddilen i nezmer an zdi',
+'mergehistory-submit' => 'Azday n ileqman',
+'mergehistory-empty' => 'Ulac lqem i nezmer an zdi.',
+'mergehistory-no-source' => 'Azar n usebter $1 ulac-it.',
+'mergehistory-no-destination' => 'Aserken n usebter $1 ulac-it',
+'mergehistory-invalid-source' => 'Azar n usebter ilaq ad i sɛu azwel i ɣbelen.',
+'mergehistory-invalid-destination' => 'Aserken n usebter ilaq ad i sɛu azwel i ɣbelen.',
+'mergehistory-same-destination' => 'Asebter n azar d usebter n userken ur zemren ara ad illin d yiwen',
+'mergehistory-reason' => 'Ayɣer',
 
 # Merge log
+'mergelog' => 'Aɣmis n izdayen',
 'revertmerge' => 'Fru',
+'mergelogpagetext' => 'Attan tebdart n wesdukel umezruy usebtar deg win n usebtar nniḍen amaynut.',
 
 # Diffs
 'history-title' => 'Tiẓṛi tiss sint umezruy n "$1"',
+'difference-title' => '$1 : Tameẓla gar ileqman',
+'difference-title-multipage' => 'Timeẓliwin gar isebtar « $1 » d « $2 »',
+'difference-multipage' => '(Tameẓla gar isebtar)',
 'lineno' => 'Ajerriḍ $1:',
 'compareselectedversions' => 'Ẓer imgerraden ger tisiwal i textareḍ',
+'showhideselectedversions' => 'Ssken/Ffer ileqman i xtiṛen',
 'editundo' => 'ssefsu',
 'diff-multi' => '({{PLURAL:$1|Yiwet tasiwelt tabusarit|$1 n tisiwal tibusarin}} af {{PLURAL:$2|amseqdac|$2 imseqdacen}} {{PLURAL:$1|ur ttumlal ara|ur ttumlalent ara}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Yiwen lqem agrawan|$1 ileqman igrawanen}} af {{PLURAL:$2|aseqdac|$2 iseqdacen}} {{PLURAL:$1|yeffer|ffren}})',
+'difference-missing-revision' => '{{PLURAL:$1|Yiwet tacaggart|$1 ticaggartin}} n tameẓla agi ($1) {{PLURAL:$2|ur tella ara (ulac)|ur llant ara (ulac)}}.
+
+Acku azday n tameẓla, ɣef wayen tsennedeḍ, d-aqbur. Asebter yemḥa.
+Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} uɣmis n isebtar yekksen].',
 
 # Search results
 'searchresults' => 'Igmad n unadi',
 'searchresults-title' => 'Igmad n unadi i "$1"',
 'searchresulttext' => 'Akken ad tessneḍ amek ara tnadiḍ deg {{SITENAME}}, ẓer [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => "Tnadiḍ ɣef '''[[:$1]]'''",
+'searchsubtitle' => "Tnudaḍ « '''[[:$1]]''' » ([[Special:Prefixindex/$1|akkw isebtar i zwiren s « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|Akkw isebtar yesɛan azday ɣer « $1 »]])",
 'searchsubtitleinvalid' => "Tnadiḍ ɣef '''$1'''",
 'titlematches' => 'Ayen yecban azwel n umegrad',
 'notitlematches' => 'Ulac ayen yecban azwel n umegrad',
@@ -676,10 +1004,12 @@ Inedbalen wiyaḍ deg wiki-yagi zemren ad ẓren imuren i yettwafren u zemren a
 'nextn-title' => '$1 {{PLURAL:$1|agmud n sakin|igmad n sakin}}',
 'shown-title' => 'Beqqeḍ $1 {{PLURAL:$1|agmud|igmad}} s usebter',
 'viewprevnext' => 'Ẓer ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-legend' => 'Tixtiṛiyin n unadi',
 'searchmenu-exists' => "'''Yella asebter s isem \"[[:\$1]]\" deg wiki agi.'''",
 'searchmenu-new' => "'''Snulfud asebter « [[:$1|$1]] » deg wiki agi !'''",
 'searchhelp-url' => 'Help:Agbur',
-'searchprofile-articles' => 'Isebtaren n ugbur',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Nadi isebtar i zwaren s adat agi]]',
+'searchprofile-articles' => 'Isebtar n ugbur',
 'searchprofile-project' => 'Isebtaren n tallat dɣa n usenfa',
 'searchprofile-images' => 'Agetmedia',
 'searchprofile-everything' => 'Akk',
@@ -694,92 +1024,232 @@ Inedbalen wiyaḍ deg wiki-yagi zemren ad ẓren imuren i yettwafren u zemren a
 'search-redirect' => '(asemmimeḍ $1)',
 'search-section' => '(tigezmi $1)',
 'search-suggest' => 'D awal $1 i tnadiḍ ?',
+'search-interwiki-caption' => 'Isenfaren atmaten',
+'search-interwiki-default' => 'Igemmaḍ ɣef $1 :',
+'search-interwiki-more' => '(ugar)',
+'search-relatedarticle' => 'Amassaɣ',
+'mwsuggest-disable' => 'Ssens isumar n AJAX',
+'searcheverything-enable' => 'Nadi deg akkw tallunin n isemawen',
 'searchrelated' => 'ineqqes',
 'searchall' => 'akk',
 'showingresults' => "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg  #'''$2'''.",
 'showingresultsnum' => "Tamuli n {{PLURAL:$3|'''Yiwen''' wegmud|'''$3''' n yigmad}} seg  #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Agmud '''$1'''|Igmad '''$1–$2'''}} n '''$3''' i '''$4'''",
-'nonefound' => "'''Tamawt''': S umata, asmi ur tufiḍ acemma
-d ilmen awalen am \"ala\" and \"seg\",
-awalen-agi mačči deg tasmult, neɣ tefkiḍ kter n yiwen n wawal (ala isebtar
-i yesɛan akk awalen i banen-d).",
+'nonefound' => "'''Tamawt''' : S lexṣas, ala kra n tallunin n isemawen t-seqdacen i unadi.
+Ɛreḍ s udat ''all:'' i unadi deg akkw ugbur (ula d-isebtar n umeslay, talɣiwin, ...) naɣ seqdec tallunt n isemawen i tebɣiḍ am adat.",
 'search-nonefound' => 'Ulac igmad i usuter agi.',
-'powersearch' => 'Nadi',
+'powersearch' => 'Anadi amahlan',
+'powersearch-legend' => 'Anadi amahlan',
+'powersearch-ns' => 'Nadi deg tallunin n isemawen',
+'powersearch-redir' => 'Beqqeḍ alsinamuden',
+'powersearch-field' => 'Nadi',
+'powersearch-togglelabel' => 'Ɛellem :',
+'powersearch-toggleall' => 'Akkw',
+'powersearch-togglenone' => 'Ulac',
+'search-external' => 'Anadi yeffɣen',
 'searchdisabled' => 'Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meɛna ur tettuḍ ara, tasmult n google taqdimt.',
 
 # Quickbar
 'qbsettings' => 'Tanuga taǧiḥbuṭ',
-'qbsettings-none' => 'Ulaḥedd',
+'qbsettings-none' => 'Ulac',
 'qbsettings-fixedleft' => 'Aẓelmaḍ',
 'qbsettings-fixedright' => 'Ayeffus',
 'qbsettings-floatingleft' => 'Tufeg aẓelmaḍ',
 'qbsettings-floatingright' => 'Tufeg ayeffus',
+'qbsettings-directionality' => 'Usbiḍ, ɣef wayen n unamud n tira n tutlayt ik/im',
 
 # Preferences page
 'preferences' => 'Isemyifiyen',
 'mypreferences' => 'Isemyifiyen inu',
+'prefs-edits' => 'Amḍan n ibeddlilen :',
 'prefsnologin' => 'Ur tekcimeḍ ara',
-'prefsnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] iwakken textareḍ isemyifiyen inek.',
+'prefsnologintext' => 'Ilaq ad iliḍ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} qqeneḍ]</span> iwakken ad beddeleḍ iɣewwaren ik/im n useqdac.',
 'changepassword' => 'Beddel awal n tbaḍnit',
 'prefs-skin' => 'Aglim',
 'skin-preview' => 'Pre-timeẓriwt',
 'datedefault' => 'Ur sɛiɣ ara asemyifi',
+'prefs-beta' => 'Tiseɣnin bêta',
 'prefs-datetime' => 'Azemz d ukud',
+'prefs-labs' => 'Tiseɣnin « labs »',
+'prefs-user-pages' => 'Isebtar n useqdac',
 'prefs-personal' => 'Profile n wemseqdac',
 'prefs-rc' => 'Ibeddlen imaynuten',
 'prefs-watchlist' => 'Umuɣ n uɛessi',
-'prefs-watchlist-days' => 'Geddac n wussan yessefk ad banen deg wumuɣ n uɛessi:',
+'prefs-watchlist-days' => 'Amḍan n ussan i ubeqqeḍ deg umuɣ n uɛassi :',
+'prefs-watchlist-days-max' => 'Afellay $1 {{PLURAL:$1|ass|ussan}}',
 'prefs-watchlist-edits' => 'Geddac n yibeddlen yessefk ad banen deg wumuɣ n uɛessi ameqqran:',
+'prefs-watchlist-edits-max' => 'Amḍan afellay : 1000',
+'prefs-watchlist-token' => 'Tiddest  umuɣ n uɛassi :',
 'prefs-misc' => 'Isemyifiyen wiyaḍ',
+'prefs-resetpass' => 'Beddel awal n uɛaddi',
+'prefs-changeemail' => 'Beddel tansa n e-mail',
+'prefs-setemail' => 'Sbadu yiwet tansa e-mail',
+'prefs-email' => 'Tixtiṛiyin n tira',
+'prefs-rendering' => 'Tummant',
 'saveprefs' => 'Smekti',
-'resetprefs' => 'Reset/réinitialiser isemyifiyen',
+'resetprefs' => 'Asfeḍ n ibeddilen ur ḥrezen ara',
+'restoreprefs' => 'Err akkw azalen s lexṣas',
 'prefs-editing' => 'Abedddil',
+'prefs-edit-boxsize' => 'Lqedd n usfaylu n ubeddel.',
 'rows' => 'Ijerriḍen:',
 'columns' => 'Tigejda:',
 'searchresultshead' => 'Anadi',
 'resultsperpage' => 'Geddac n tiririyin i mkul asebter:',
-'recentchangescount' => 'Geddac n izwal deg ibeddilen imaynuten:',
+'stub-threshold-disabled' => 'Yensa',
+'recentchangesdays' => 'Amḍan n ussan an beqqeḍ deg ibeddilen ineggura.',
+'recentchangesdays-max' => 'Afellay $1 {{PLURAL:$1|ass|ussan}}',
+'recentchangescount' => 'Amḍan n ibeddilen i ubeqqeḍ s lexṣas :',
+'prefs-help-recentchangescount' => 'Wagi yesɛa deg-es ibeddilen ineggura, isebtar n umezruy d iɣmisen.',
 'savedprefs' => 'Isemyifiyen inek yettusmektan.',
-'timezonelegend' => 'Iẓḍi n ukud',
-'localtime' => 'Akud inek',
-'timezoneoffset' => 'Amgirred n ukud',
-'servertime' => 'Akud n server',
+'timezonelegend' => 'Iẓḍi n ukud :',
+'localtime' => 'Asrag adigan :',
+'timezoneuseserverdefault' => 'Seqdec azal s lexṣas n wiki ($1)',
+'timezoneuseoffset' => 'Nniḍen (ssefru asekḥer)',
+'timezoneoffset' => 'Asekḥer n usrag¹ :',
+'servertime' => 'Asrag n uqeddac :',
 'guesstimezone' => 'Sseqdec azal n browser/explorateur',
+'timezoneregion-africa' => 'Tafriqt',
+'timezoneregion-america' => 'Tamrikt',
+'timezoneregion-antarctica' => 'Antarktik',
+'timezoneregion-arctic' => 'Arktik',
+'timezoneregion-asia' => 'Asya',
+'timezoneregion-atlantic' => "Agaraw At'lasi",
+'timezoneregion-australia' => 'Usṭralya',
+'timezoneregion-europe' => 'Turuft',
+'timezoneregion-indian' => 'Agaraw Ahendi',
+'timezoneregion-pacific' => 'Agaraw Amelwi',
 'allowemail' => 'Eǧǧ imseqdacen wiyaḍ a k-aznen email',
-'defaultns' => 'Nadi deg yismawen n taɣult s umeslugen:',
+'prefs-searchoptions' => 'Nadi',
+'prefs-namespaces' => 'Talluntin n isemawen',
+'defaultns' => 'Nadi s lexṣas deg tallunin agi n isemawen :',
 'default' => 'ameslugen',
 'prefs-files' => 'Ifayluwen',
+'prefs-custom-css' => 'CSS asagen',
+'prefs-custom-js' => 'JavaScript asagen',
+'prefs-common-css-js' => 'JavaScript  d CSS azduklan i akkw lebsa :',
+'prefs-reset-intro' => 'Tzemreḍ ad seqdeceḍ asebter agi iwakken ad erreḍ iɣewwaren inek/inem ar azalen n lexṣas n usmel.
+Wagi ur yezmer ara ad yetwekkes.',
+'prefs-emailconfirm-label' => 'Aragag n tirawt :',
+'prefs-textboxsize' => 'Tiddi n usfaylu n ubeddel',
 'youremail' => 'E-mail *:',
 'username' => 'Isem n wemseqdac:',
 'uid' => 'Amseqdac ID:',
+'prefs-memberingroups' => 'Aεeggal n {{PLURAL:$1|ugraw|igrawen}} :',
+'prefs-registration' => 'Azmez n tiggezt :',
 'yourrealname' => 'Isem n ṣṣeḥ *:',
 'yourlanguage' => 'Tutlayt:',
-'yourvariant' => 'Ameskil:',
-'yournick' => 'Isem wis sin (mačči d amenṣib):',
+'yourvariant' => 'Lqem nniḍen n tutlayt n ugbur :',
+'yournick' => 'Azmul amaynut :',
+'prefs-help-signature' => 'Iwenniten ɣef isebtar n umeslay ilaq ad illin zmelen s « <nowiki>~~~~</nowiki> », sakin ad i sɛu aselkat ɣer azmul inek/inem dɣa azmez d usrag.',
 'badsig' => 'Azmul mačči d ṣaḥiḥ; Ssenqed tags n HTML.',
+'badsiglength' => 'Azmul inek/inem, teɣwzi-s tameqqṛant aṭas.
+Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
+'yourgender' => 'Tawsit :',
+'gender-unknown' => 'Ulac tumlin',
+'gender-male' => 'Amalay',
+'gender-female' => 'Untay',
+'email' => 'E-mail',
 'prefs-help-realname' => '* Isem n ṣṣeḥ (am tebɣiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.',
 'prefs-help-email' => '* E-mail (am tebɣiḍ): Teǧǧi imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.',
 'prefs-help-email-others' => 'Zemreḍ ad eǧǧeḍ wiyeḍ nniḍen ak(akem) cceqɛen izen deg usebter-ik (im) n umyannan war ad effekeḍ tamagit-ik (im).',
+'prefs-help-email-required' => 'Tansa e-mail tesḍulli.',
+'prefs-info' => 'Tilɣa n udasil',
+'prefs-i18n' => 'Asagraɣlan',
+'prefs-signature' => 'Azmul',
+'prefs-dateformat' => 'Amasal n izemzan',
+'prefs-timeoffset' => 'Asekḥer n usrag',
+'prefs-advancedediting' => 'Tixtiṛiyin timahlanin',
+'prefs-advancedrc' => 'Tixtiṛiyin timahlanin',
+'prefs-advancedrendering' => 'Tixtiṛiyin timahlanin',
+'prefs-advancedsearchoptions' => 'Tixtiṛiyin timahlanin',
+'prefs-advancedwatchlist' => 'Tixtiṛiyin timahlanin',
+'prefs-displayrc' => 'Tixtiṛiyin n ubeqqeḍ',
+'prefs-displaysearchoptions' => 'Tixtiṛiyin n ubeqqeḍ',
+'prefs-displaywatchlist' => 'Tixtiṛiyin n ubeqqeḍ',
+'prefs-diffs' => 'Timeẓliwin',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-invalid' => 'Telaq tansa e-mail i ɣbelen !',
 
 # User rights
 'userrights' => 'Laɛej iserfan n wemseqdac',
 'userrights-lookup-user' => 'Laɛej iderman n yimseqdacen',
 'userrights-user-editname' => 'Ssekcem isem n wemseqdac:',
 'editusergroup' => 'Beddel iderman n yimseqdacen',
-'editinguser' => "Abeddel n wemseqdac '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "Abeddel n izerfan n {{GENDER:$1|useqdac|taseqdact}} '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Beddel iderman n wemseqdac',
 'saveusergroups' => 'Smekti iderman n yimseqdacen',
 'userrights-groupsmember' => 'Amaslad deg:',
 'userrights-reason' => 'Ayɣer',
+'userrights-changeable-col' => 'Igrawen i tzemreḍ ad beddeleḍ',
+'userrights-unchangeable-col' => 'Igrawen ur tzemreḍ ara ad beddeleḍ',
 
 # Groups
 'group' => 'Adrum:',
+'group-user' => 'Iseqdacen',
+'group-autoconfirmed' => 'Iseqdacen i rgegen',
+'group-bot' => 'Iṛubuten',
 'group-sysop' => 'Inedbalen',
+'group-bureaucrat' => 'Imsifellura',
+'group-suppress' => 'Inemdayen',
 'group-all' => '(akk)',
 
-'group-sysop-member' => 'Anedbal',
+'group-user-member' => '{{GENDER:$1|aseqdac|taseqdact}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|manrgeg aseqdac|manrgeg taseqdact}}',
+'group-bot-member' => '{{GENDER:$1|aṛubut}}',
+'group-sysop-member' => '{{GENDER:$1|anedbal|tanedbalt}}',
+'group-bureaucrat-member' => '{{GENDER:$1|amsfellaru}}',
+'group-suppress-member' => '{{GENDER:$1|anemday|tanemdayt}}',
 
+'grouppage-user' => '{{ns:project}}:Iseqdacen',
+'grouppage-autoconfirmed' => '{{ns:project}}:Iseqdacen i rgegen',
+'grouppage-bot' => '{{ns:project}}:Iṛubuten',
 'grouppage-sysop' => '{{ns:project}}:Inedbalen',
+'grouppage-bureaucrat' => '{{ns:project}}:Imsfelluran',
+'grouppage-suppress' => '{{ns:project}}:Inemdayen',
+
+# Rights
+'right-read' => 'Ɣeṛ isebtar',
+'right-edit' => 'Beddel isebtar',
+'right-createpage' => 'Snulfud isebtar (mačči d-isebtar n umeslay)',
+'right-createtalk' => 'Snulfud isebtar n umeslay',
+'right-createaccount' => 'Snulfud imiḍanen n iseqdacen',
+'right-minoredit' => 'Ffer ibeddilen yellan d-imectuḥen',
+'right-move' => 'Beddel isem n isebtar',
+'right-move-subpages' => 'Beddel isem n isebtar d adu-isebtar nsen',
+'right-move-rootuserpages' => 'Beddel isem n usebtar amenzawi n useqdac',
+'right-movefile' => 'Beddel isem n ifuyla',
+'right-upload' => 'Azen ifuyla',
+'right-reupload' => 'Sefxes afaylu yellan',
+'right-reupload-own' => 'Sefxes afaylu id n-azen.',
+'right-upload_by_url' => 'Kter afaylu seg tansa URL',
+'right-purge' => 'Senger tazarkatut n isebtar war asuter n uragag',
+'right-autoconfirmed' => 'Beddel isebtar azinsegdelen',
+'right-apihighlimits' => 'Seqdec tilisa tid ɛlayen deg tuttriwin API',
+'right-writeapi' => 'Seqdec API n ubeddel',
+'right-delete' => 'Mḥu isebtar',
+'right-bigdelete' => 'Mḥu isebtar yesɛan amezruy affuyan',
+'right-deletedtext' => 'Ẓeṛ aḍris yemḥan d timeẓliwin gar ileqman yemḥan',
+'right-browsearchive' => 'Nadi ɣef isebtar yettumḥan',
+'right-undelete' => 'Erred asebter yemḥan',
+'right-suppressionlog' => 'Ẓeṛ iɣmisen usligen',
+'right-block' => 'Kyef deg tira iseqdacen nniḍen',
+'right-blockemail' => 'Sḍiqqef aceggaɛ n tira (e-mail) i yiwen useqdac',
+'right-hideuser' => 'Kyef aseqdac s tuffra n isem-is ar udem n uzayez',
+'right-protect' => 'Beddel aswir n umesten n isebtar dɣa beddel isebtar i gdelen',
+'right-editprotected' => 'Beddel isebtar i gdelen (war asegdel s uceṛcuṛ)',
+'right-editinterface' => 'Beddel agrudem n useqdac',
+'right-editusercssjs' => 'Beddel ifuyla CSS d JavaScript n iseqdacen nniḍen',
+'right-editusercss' => 'Beddel ifuyla CSS n iseqdacen nniḍen',
+'right-edituserjs' => 'Beddel ifuyla JavaScript n iseqdacen nniḍen',
+'right-import' => 'Kter ifuyla seg iWikiyen nniḍen',
+'right-importupload' => 'Azen isebtar seg ufaylu',
+'right-unwatchedpages' => 'Ẓeṛ umuɣ n isebtar ur sɛan ara iɛssasen',
+'right-mergehistory' => 'Sdukel amezruy n isebtar',
+'right-userrights' => 'Beddel akkw izerfan n yiwen aseqdac',
+'right-userrights-interwiki' => 'Beddel izerfan n iseqdacen yellan deg awiki nniḍen',
+'right-siteadmin' => 'Sekkweṛ naɣ kkes aseḍru i taffa n isefka',
+'right-sendemail' => 'Ceggaɛ tirawt i iseqdacen nniḍen',
 
 # User rights log
 'rightslog' => 'Aɣmis n yizerfan n wemseqdac',
@@ -788,7 +1258,36 @@ i yesɛan akk awalen i banen-d).",
 'rightsnone' => '(ulaḥedd)',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'ɣaṛ asebter agi',
 'action-edit' => 'beddel asebter agi',
+'action-createpage' => 'Snulfud isebtar',
+'action-createtalk' => 'snulfud isebtar n umeslay',
+'action-createaccount' => 'snulfud amiḍan agi n useqdac',
+'action-minoredit' => 'cṛeḍ abeddel agi am umectuḥ',
+'action-move' => 'beddel isem n usebter agi',
+'action-move-subpages' => 'beddel isem n usebter agi d adu-isebtar is',
+'action-move-rootuserpages' => 'beddel isem n usebtar amenzawi n useqdac',
+'action-movefile' => 'beddel isem n ufaylu agi',
+'action-upload' => 'Azen afaylu agi',
+'action-reupload' => 'Sefxes afaylu yellan',
+'action-upload_by_url' => 'Azen afaylu agi seg tansa URL',
+'action-writeapi' => 'seqdec API n tira',
+'action-delete' => 'mḥu asebter-agi',
+'action-deleterevision' => 'mḥu lqem agi',
+'action-deletedhistory' => 'ẓeṛ amezruy yemḥan n usebter agi',
+'action-browsearchive' => 'nadi ɣef isebtar yettumḥan',
+'action-undelete' => 'erred asebter agi',
+'action-suppressionlog' => 'ẓeṛ aɣmis agi uslig',
+'action-block' => 'Kyef deg tira aseqdac agi',
+'action-protect' => 'beddel iswiren n umesten i usebter agi',
+'action-import' => 'Kter asebter agi seg wiki nniḍen',
+'action-importupload' => 'Kter asebter agi seg ufaylu n wezdam (upload)',
+'action-unwatchedpages' => 'Sken-d tabdart n isebtaren ur yettwalan ara.',
+'action-mergehistory' => 'Sdukel amezruy n usebtar agi',
+'action-userrights' => 'Ẓreg izerfan n imseqdacen yark',
+'action-userrights-interwiki' => 'Ẓreg izerfan n umseqdac deg wikis wiyaḍ',
+'action-siteadmin' => 'sekkweṛ naɣ kkes aseḍru i taffa n isefka',
+'action-sendemail' => 'Ceggaɛ tira',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|Abeddel|Ibeddlen}}',
@@ -817,11 +1316,14 @@ i yesɛan akk awalen i banen-d).",
 'minoreditletter' => 'm',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 aɛessas/iɛessasen]',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|aɛessas|iɛessasen}}]',
 'rc_categories' => 'Ḥedded i taggayin (ferreq s "|")',
 'rc_categories_any' => 'Ulayɣer',
+'rc-change-size-new' => '$1 {{PLURAL:$1|atamḍan|itamḍanen}} sakin abeddel',
+'newsectionsummary' => '/* $1 */ tigezmi tamaynut',
 'rc-enhanced-expand' => 'Ẓeṛ tilɣa (yeḥwaǧ JavaScript)',
 'rc-enhanced-hide' => 'Ffer tilɣa',
+'rc-old-title' => 'yesnulfad s uzwel « $1 »',
 
 # Recent changes linked
 'recentchangeslinked' => 'Ibeddlen imaynuten n isebtar myezdin',
@@ -836,68 +1338,198 @@ i yesɛan akk awalen i banen-d).",
 # Upload
 'upload' => 'Azen afaylu',
 'uploadbtn' => 'Azen afaylu',
-'reuploaddesc' => 'Uɣal-d ar talɣa n tuznin.',
+'reuploaddesc' => 'Semmewet dɣa uɣaled ar tiferkit n tuznin.',
+'upload-tryagain' => 'Ceggaɛ aglam n ufaylu ibeddelen',
 'uploadnologin' => 'Ur tekcimeḍ ara',
 'uploadnologintext' => 'Yessefk [[Special:UserLogin|ad tkecmeḍ]]
 iwakken ad tazneḍ afaylu.',
+'upload_directory_missing' => 'Akaram n taktert n ufaylu ($1) ulac-it dɣa ur d-yesnulfa ara sɣur aqeddac web.',
 'upload_directory_read_only' => 'Weserver/serveur Web ur yezmir ara ad yaru deg ($1).',
 'uploaderror' => 'Agul deg usekcam',
-'uploadtext' => "Sseqdec talɣa deg ukessar akken ad tazeneḍ tugnawin, akken ad teẓred neɣ ad tnadiḍ tugnawin yettwaznen, ruḥ ɣer [[Special:FileList|umuɣ n usekcam n tugnawin]], Amezruy n usekcam d umḥay hatent daɣen deg [[Special:Log/upload|amezruy n usekcam]].
-
-Akken ad tessekcmeḍ tugna deg usebter, seqdec azay am wagi
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Afaylu.jpg]]</nowiki>''',
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Afaylu.png|aḍris]]</nowiki>''' neɣ
-'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Afaylu.ogg]]</nowiki>''' akken ad iruḥ wezday qbala ar ufaylu.",
+'uploadtext' => "Sseqdec tiferkit agi iwakken ad ktereḍ ifuyla ɣef uqeddac.
+Iwakken ad ẓṛeḍ naɣ ad nadiḍ tugniwin i ktren uqbel, ẓeṛ [[Special:FileList|umuɣ n tugniwin]]. Taktert tella daɣen deg [[Special:Log/upload|aɣmis n taktert n ifuyla]], dɣa inuzal deg [[Special:Log/delete|aɣmis n inuzal]].
+
+Akken ad tessekcmeḍ afaylu deg usebter, seqdec azay am wagi
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:afaylu.jpg]]</nowiki></code>''', iwakken ad beqqeḍeḍ afaylu deg tabadut tačurant (lukan d-tugna) ;
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:afaylu.png|200px|thumb|left|aḍris n uglam]]</nowiki></code>''' i useqdac n uqmamaḍ n 200px s tehri deg tanaka af uzelmeḍ s « aḍris n uglam » am aglam ;
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:afaylu.ogg]]</nowiki></code>''' iwakken ad qqeneḍ ɣer ufaylu war ubeqqeḍ.",
+'upload-permitted' => 'Amasal n ifuyla i siregen : $1.',
+'upload-preferred' => 'Amasal n ifuyla i smenyifen : $1.',
+'upload-prohibited' => 'Amasal n ifuyla igdelen : $1.',
 'uploadlog' => 'amezruy n usekcam',
 'uploadlogpage' => 'Amezruy n usekcam',
-'uploadlogpagetext' => 'Deg ukessar, yella wumuɣ n usekcam n ufayluwen imaynuten.',
+'uploadlogpagetext' => 'Hat-an umuɣ n ifuyla ineggura i kteren ɣef uqeddac.
+Ẓeṛ [[Special:NewFiles|tihawt n tugniwin timaynutin]].',
 'filename' => 'Isem n ufaylu',
 'filedesc' => 'Agzul',
 'fileuploadsummary' => 'Agzul:',
-'filestatus' => 'Aẓayer n copyright:',
-'filesource' => 'Seg way yekka',
+'filereuploadsummary' => 'Ibeddilen n ufaylu :',
+'filestatus' => 'Aẓayer n uzref n umeskar :',
+'filesource' => 'Aɣbalu :',
 'uploadedfiles' => 'Ifuyla yettwaznen',
 'ignorewarning' => 'Ttu aɣtal u smekti afaylu',
 'ignorewarnings' => 'Ttu iɣtalen',
+'minlength1' => 'Isem ufaylu ilaq ad yesεu ma drus yiwen usekkil',
 'illegalfilename' => 'Isem n ufaylu "$1" yesɛa isekkilen ur tettalaseḍ ara a ten-tesseqdceḍ deg yizwal n isebtar. G leɛnayek beddel isem n ufaylu u azen-it tikkelt nniḍen.',
+'filename-toolong' => 'Isem ufaylu ilaq ad yesεu m-ay aṭas 240 iṭamḍanen (bytes).',
 'badfilename' => 'Isem ufaylu yettubeddel ar "$1".',
+'filetype-mime-mismatch' => 'Asiɣzef n ufaylu « .$1 » ur yesɛa ara tuqqna s tawsit MIME id n-ufa deg ufaylu ($2).',
 'filetype-badmime' => 'Ur tettalaseḍ ara ad tazneḍ ufayluwen n anaw n MIME "$1".',
+'filetype-bad-ie-mime' => 'Afaylu ur yezmer ara ad yetwekter acku yetwaf am « $1 » sɣur Internet Explorer. Tawsit agi d tazanbagt acku d tamihawt.',
 'filetype-missing' => 'Afaylu ur yesɛi ara taseggiwit (am ".jpg").',
+'empty-file' => 'Afaylu id cegɛeḍ d-ilem.',
+'file-too-large' => 'Afaylu id cegɛed d-ameqqṛan aṭas.',
+'filename-tooshort' => 'Isem n ufaylu d-awezzlan aṭas.',
+'filetype-banned' => 'Tawsit agi n ufaylu d-tazanbagt.',
+'verification-error' => 'Afaylu agi ur i ɛedda ara aselken n ifuyla.',
+'hookaborted' => 'Abeddel i ɛerdeḍ ad xedmeḍ yetweḥbes s tamdeyt n usiɣzef.',
+'illegal-filename' => 'Isem n ufaylu agi ur yeɣbel ara.',
+'overwrite' => 'Asefxes n ufaylu yellan ur yeɣbel ara.',
+'unknown-error' => 'Yefkad anezri warisem.',
+'tmp-create-error' => 'Ulamek ad nesnulfu afaylu agi akudan.',
+'tmp-write-error' => 'Anezri deg tira n ufaylu agi akudan.',
 'large-file' => 'Ilaq tiddi n ufayluwen ur tettili kter n $1; tiddi n ufaylu-agi $2.',
 'largefileserver' => 'Afaylu meqqer aṭṭas, server ur t-yeqbil ara.',
 'emptyfile' => 'Afaylu i tazneḍ d ilem. Waqila tɣelṭeḍ deg isem-is. G leɛnayek ssenqed-it.',
+'windows-nonascii-filename' => 'Wiki agi ur yebra ara isemawen n ifuyla s isekkilen usligen.',
 'fileexists' => 'Afaylu s yisem-agi yewǧed yagi, ssenqed <strong>[[:$1]]</strong> ma telliḍ mačči meḍmun akken a t-tbeddleḍ.
 [[$1|thumb]]',
-'fileexists-extension' => 'Afaylu s yisem-agi yewǧed: [[$2|thumb]]
-* Isem n ufaylu i tazneḍ: <strong>[[:$1]]</strong>
-* Isem n ufaylu i yewǧed: <strong>[[:$2]]</strong>
-Amgirred i yella kan deg isekkilen imecṭuḥen/imeqqranen deg taseggiwit (am ".jpg"/".jPg"). G leɛnayek ssenqed-it.',
+'fileexists-extension' => 'Afaylu s yisem yecban wagi yella : [[$2|thumb]]
+* Isem n ufaylu i tezneḍ: <strong>[[:$1]]</strong>
+* Isem n ufaylu i yellan: <strong>[[:$2]]</strong>
+Ilaq ad xtiṛeḍ isem nniḍen.',
 'fileexists-thumbnail-yes' => "Iban-d belli tugna-nni d tugna tamecṭuht n tugna nniḍen ''(thumbnail)''. [[$1|thumb]]
 G leɛnayek ssenqed tugna-agi <strong>[[:$1]]</strong>.
 Ma llant kif-kif ur tt-taznepd ara.",
-'file-thumbnail-no' => "Isem n tugna yebda s <strong>$1</strong>. Waqila tugna-nni d tugna tamecṭuht n tugna nniḍen ''(thumbnail)''.
-Ma tesɛiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.",
-'fileexists-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leɛnayek uɣal u beddel isem-is. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Tugna s yisem kif-kif tewǧed yagi; g leɛnayek uɣal u beddel isem-is. [[File:$1|thumb|center|$1]]',
+'file-thumbnail-no' => "Isem n ufaylu yezwer s <strong>$1</strong>.
+Ahat d lqem tamectuḥt ''(aqmamaḍ)''.
+Lukan tesɛiḍ afaylu s tabadut taɛlayant, azen-it, m-ulac beddel isem-is.",
+'fileexists-forbidden' => 'Afaylu s isem agi yella yakan, dɣa ur yezmer ara ad yetsefxes.
+Ma tebɣiḍ ad azeneḍ afaylu inek/inem, ilaq ad uɣaleḍ ar deffir dɣa ad as efkeḍ isem amaynut.
+[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Afaylu s isem agi yella yakan deg uzadur n ifuyla azduklan.
+Ma tebɣiḍ ad azeneḍ afaylu inek/inem, ilaq ad uɣaleḍ ar deffir dɣa ad as efkeḍ isem amaynut.
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => 'Afaylu agi d-asleg n {{PLURAL:$1|ufaylu agi|ifuyla agi}} :',
 'uploadwarning' => 'Aɣtal deg wazan n ufayluwen',
+'uploadwarning-text' => 'Beddel aglam n ufaylu dɣa ɛreḍ tikkelt nniḍen',
 'savefile' => 'Smekti afaylu',
 'uploadedimage' => '"[[$1]]" yettwazen',
+'overwroteimage' => 'yekter lqem amaynut n « [[$1]] »',
 'uploaddisabled' => 'Suref-aɣ, azen n ufayluwen yettwakkes',
-'uploaddisabledtext' => 'Azen n ufayluwen yettwakkes deg wiki-yagi',
+'copyuploaddisabled' => 'Taktert n ufaylu s URL yensan.',
+'uploadfromurl-queued' => 'Afaylu inek/inem yekcem deg udras n ugani.',
+'uploaddisabledtext' => 'Azen n ifuyla yettwakkes deg wiki agi.',
+'php-uploaddisabledtext' => 'Taktert n ifuyla tensa deg PHP. Selken taxtiṛit n tawila  file_uploads.',
 'uploadscripted' => 'Afaylu-yagi yesɛa angal n HTML/script i yexdem agula deg browser/explorateur.',
 'uploadvirus' => 'Afaylu-nni yesɛa anfafad asenselkim (virus)! Ẓer kter: $1',
-'sourcefilename' => 'And yella afyalu',
-'destfilename' => 'Anda iruḥ afaylu',
-'watchthisupload' => 'Ɛass asebter-agi',
+'uploadjava' => 'Wagi d afaylu ZIP yesɛan afaylu Java .class.
+Azdam n ifuyla Java ur yesɛa ara turagt, acku zemren ad zizdewen ikyafen n taɣellist.',
+'upload-source' => 'Afaylu aɣbalu',
+'sourcefilename' => 'Isem n ufaylu aɣbalu :',
+'sourceurl' => 'URL aγbalu',
+'destfilename' => 'Isem n ufaylu deg aserken',
+'upload-maxfilesize' => 'Tiddi tafellayt n ufaylu : $1',
+'upload-description' => 'Aglam n ufaylu',
+'upload-options' => 'Tixtiṛiyin n taktert ifuyla',
+'watchthisupload' => 'Ɛass asebter agi',
 'filewasdeleted' => 'Afaylu s yisem-agi yettwazen umbeɛd yettumḥa. Ssenqed $1 qbel ad tazniḍ tikelt nniḍen.',
 'upload-success-subj' => 'Azen yekfa',
+'upload-success-msg' => 'Taktert inek/inem seg [$2] yesmures. Af-it d-agi : [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Ugur n taktert',
+'upload-failure-msg' => 'Yella ugur s taktert inek/inem seg [$2] :
+
+$1',
+'upload-warning-subj' => 'Alɣu deg taktert',
+'upload-warning-msg' => 'Yella ugur s taktert seg [$2]. Tzemreḍ ad uɣaleḍ ar [[Special:Upload/stash/$1|tiferkit n taktert]] iwakken ad fruḍ ugur agi.',
 
 'upload-proto-error' => 'Agul deg protokol',
 'upload-proto-error-text' => 'Assekcam yenṭerr URL i yebdan s <code>http://</code> neɣ <code>ftp://</code>.',
 'upload-file-error' => 'Agul zdaxel',
-'upload-file-error-text' => 'Agul n daxel yeḍran asmi yeɛreḍ ad yexleq afaylu temporaire deg server.  G leɛnayek, meslay akk d unedbal n system.',
+'upload-file-error-text' => 'Anezri agensan yeḍran asmi yeɛreḍ ad yesnulfu afaylu akudan ɣef uqeddac. Ilaq ad meslayeḍ s [[Special:ListUsers/sysop|unedbal]].',
 'upload-misc-error' => 'Agul mačči mechur asmi yettwazen ufaylu',
-'upload-misc-error-text' => 'Agul mačči mechur teḍra asmi yettwazen afaylu.  G leɛnayek sseqed belli URL d ṣaḥiḥ u ɛreḍ tikelt nniḍen.  Ma yella daɣen wagul, mmeslay akk d unedbal n system.',
+'upload-misc-error-text' => 'Anezri warisem yegweḍeḍ asmi yettwazen afaylu.
+Ilaq ad selkeneḍ ma URL nni teɣbel, dɣa ɛreḍ tikkelt nniḍen.
+Ma yella daɣen anezri, ilaq ad meslaye ḍ s  [[Special:ListUsers/sysop|unedbal]].',
+'upload-too-many-redirects' => 'URL agi yesɛa aṭas illusen n wesnili.',
+'upload-unknown-size' => 'Tiddi warisem',
+'upload-http-error' => 'Anezri HTTP : $1',
+'upload-copy-upload-invalid-domain' => 'Anɣel n izdamen ur yezmer ara seg taɣult agi.',
+
+# File backend
+'backend-fail-stream' => 'Ulamek an ɣeṛ afaylu $1.',
+'backend-fail-backup' => 'Ulamek an ḥrez afaylu $1.',
+'backend-fail-notexists' => 'Afaylu $1 ulac it.',
+'backend-fail-hashes' => 'Ulamek an sɛu idwayen n ufaylu i usnemhel.',
+'backend-fail-notsame' => 'Afaylu imeẓli yella yakan i $1.',
+'backend-fail-invalidpath' => '$1 mačči d abrid n uḥraz iɣbelen.',
+'backend-fail-delete' => 'Ulamek an mḥu afaylu "$1".',
+'backend-fail-alreadyexists' => 'Afaylu $1 yella yakan.',
+'backend-fail-store' => 'Ulamek an ḥrez afaylu $1 deg $2.',
+'backend-fail-copy' => 'Ulamek an nɣel afaylu $1 deg $2.',
+'backend-fail-move' => 'Ulamek an sekḥer afaylu $1 deg $2.',
+'backend-fail-opentemp' => 'Ulamek an ldi afaylu akudan.',
+'backend-fail-writetemp' => 'Ulamek an aru deg ufaylu akudan.',
+'backend-fail-closetemp' => 'Ulamek an mdel afaylu akudan.',
+'backend-fail-read' => 'Ulamek an ɣeṛ afaylu "$1".',
+'backend-fail-create' => 'Ulamek an aru afaylu "$1".',
+'backend-fail-maxsize' => 'Ulamek an aru afaylu "$1" acku yugar {{PLURAL:$2|yiwen atamḍan|$2 itamḍanen}}.',
+'backend-fail-readonly' => 'Tannalt n uḥraz "$1" yella deg taɣuri kan. Taɣzint id yefka : "$2"',
+'backend-fail-synced' => 'Afaylu "$1" yesɛa addad azanbag deg tannalin n uḥraz tigensanin',
+'backend-fail-connect' => 'Ulamek an qqen ar tannalt n uḥraz "$1".',
+'backend-fail-internal' => 'Yella anezri warisem deg tannalt n uraz "$1".',
+'backend-fail-contenttype' => 'Ulamek ad n efk tawsit n ugbur n ufaylu an ḥrez deg "$1".',
+'backend-fail-batchsize' => 'Tannalt n uḥraz yefkad akemmus n $1 {{PLURAL:$1|tamhelt|timehlin}} n ufaylu ; talast tella ar $2 {{PLURAL:$2|tamhelt|timehlin}}.',
+'backend-fail-usable' => 'Ulamek an ɣeṛ naɣ an aru afaylu « $1 » acku drus izerfan naɣ ikaramen xusen.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ulamek an qqen ar taffa n isefka n uɣmis i ixf n uḥraz "$1".',
+'filejournal-fail-dbquery' => 'Ulamek an mucceḍ taffa n isefka n uɣmis i ixf n uḥraz "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Ulamek an kkes aseḍru « $1 » ; ur yesɛa ara asekkweṛ.',
+'lockmanager-fail-closelock' => 'Ulamek an mdel afaylu n uzekṛun i « $1 ».',
+'lockmanager-fail-deletelock' => 'Ulamek an mḥu afaylu n uzekṛun i « $1 ».',
+'lockmanager-fail-acquirelock' => 'Ulamek an krez azekṛun i « $1 ».',
+'lockmanager-fail-openlock' => 'Ulamek an ldi afaylu n uzekṛun i « $1 ».',
+'lockmanager-fail-releaselock' => 'Ulamek an bru azekṛun i « $1 ».',
+'lockmanager-fail-db-bucket' => 'Ulamek an siwel ddeqs taffa n isefka n usekkweṛ deg uqbuc $1.',
+'lockmanager-fail-db-release' => 'Ulamek an bru izekṛunen ɣef taffa n isefka $1.',
+'lockmanager-fail-svr-acquire' => 'Ulamek an krez izekṛunen ɣef uqeddac $1.',
+'lockmanager-fail-svr-release' => 'Ulamek an bru izekṛunen ɣef uqeddac $1.',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'Afaylu agi mačči d afaylu n weɣbaṛ ZIP.',
+
+# Special:UploadStash
+'uploadstash' => 'Tazarkatut n taktert',
+'uploadstash-clear' => 'Sfeḍ ifuyla deg tazarkatut',
+'uploadstash-nofiles' => 'Ur tesɛiḍ ara ifuyla deg tazarkatut n taktert',
+'uploadstash-errclear' => 'Asfeḍ n ifuyla yefkad taruẓi',
+'uploadstash-refresh' => 'Mucceḍ umuɣ n ifuyla',
+'invalid-chunk-offset' => 'Tiggit n iɣil ur teɣbel ara',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'Addaf yugwi',
+'img-auth-notindir' => 'Abrid yesuteren mačči d akaram n taktert yellan deg tawila.',
+'img-auth-badtitle' => 'Ulamek an ssali azwel i ɣbelen seg « $1 ».',
+'img-auth-nologinnWL' => 'Ur teqqneḍ ara dɣa « $1 » ur yella ara deg umuɣ amellal.',
+'img-auth-nofile' => 'Afaylu « $1 » ulac it.',
+'img-auth-isdir' => 'Tɛerdeḍ ad ldiḍ akaram « $1 ».
+Tzemreḍ kan ad ldiḍ ifuyla.',
+'img-auth-streaming' => 'Taɣuri tamaɣlalt n « $1 ».',
+'img-auth-noread' => 'Aseqdac ur yesɛa ara azref deg taɣuri ɣef « $1 ».',
+'img-auth-bad-query-string' => 'URL tesɛa azrar n tuttra ur i ɣbelen ara.',
+
+# HTTP errors
+'http-invalid-url' => 'URL ur teɣbel ara : $1',
+'http-invalid-scheme' => 'URL s uzenziɣ « $1 » ur ɣbelen ara d-agi.',
+'http-request-error' => 'Anezri warisem deg uceggaɛ n tuttra.',
+'http-read-error' => 'Anezri n taɣuri HTTP.',
+'http-timed-out' => 'Tuttra HTTP teneffeṛ.',
+'http-curl-error' => 'Anezri deg tiririt n URL : $1',
+'http-host-unreachable' => 'Ulamek an siḍes URL',
+'http-bad-status' => 'Yella ugur deg tuttra HTTP : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Ur yezmir ara ad yessglu URL',
@@ -908,6 +1540,7 @@ Ma tesɛiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.
 'license' => 'Turagt',
 'license-header' => 'Turagt',
 'nolicense' => 'Ur textareḍ acemma',
+'license-nopreview' => '(Azarskan ur yestufa ara)',
 'upload_source_url' => ' (URL saḥiḥ)',
 'upload_source_file' => ' (afaylu deg uselkim inek)',
 
@@ -915,31 +1548,85 @@ Ma tesɛiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.
 'listfiles_search_for' => 'Nadi ɣef yisem n tugna:',
 'imgfile' => 'afaylu',
 'listfiles' => 'Umuɣ n tugniwin',
+'listfiles_thumb' => 'Aqmamaḍ',
 'listfiles_date' => 'Azemz',
 'listfiles_name' => 'Isem',
 'listfiles_user' => 'Amseqdac',
 'listfiles_size' => 'Tiddi (bytes/octets)',
 'listfiles_description' => 'Aglam',
+'listfiles_count' => 'Ileqman',
 
 # File description page
 'file-anchor-link' => 'Afaylu',
 'filehist' => 'Amazray n tugna',
 'filehist-help' => 'Senned ɣef yiwen azmez d usrag iwakken ad ẓṛeḍ afaylu aken yella deg imir nni.',
+'filehist-deleteall' => 'ekkes akkw',
+'filehist-deleteone' => 'ekkes',
 'filehist-revert' => 'Uɣal ar tasiwelt ssabeq',
 'filehist-current' => 'Lux a',
 'filehist-datetime' => 'Azmez/Asrag',
-'filehist-thumb' => 'Tugna tamecṭuḥt',
+'filehist-thumb' => 'Aqmamaḍ',
 'filehist-thumbtext' => 'Tugna tamectuḥt i lqem n $1',
+'filehist-nothumb' => 'Ulac aqmamaḍ',
 'filehist-user' => 'Amseqdac',
 'filehist-dimensions' => 'Iseggiwen',
+'filehist-filesize' => 'Tiddi n ufaylu',
 'filehist-comment' => 'Awennit',
+'filehist-missing' => 'Afaylu ulac-it',
 'imagelinks' => 'Izdayen',
 'linkstoimage' => '{{PLURAL:$1|Asebter agi teseqdac|$1 isebtaren agi teseqdacen}} afaylu agi :',
+'linkstoimage-more' => 'Ugar n {{PLURAL:$1|yiwen asebter|$1 isebtar}} tseqdacen afaylu agi.
+Umuɣ agi yebeqqeḍ ala {{PLURAL:$1|asebter amezwaru|$1 isebtar imezwura}} i seqdacen afaylu agi.
+Yella [[Special:WhatLinksHere/$2|umuɣ ummid]].',
 'nolinkstoimage' => 'Ulaḥedd seg isebtar sɛan azday ar afaylu-agi.',
-'sharedupload' => 'Afaylu-yagi yettuseqdac sɣur wiki tiyaḍ.',
+'morelinkstoimage' => 'Ẓeṛ [[Special:WhatLinksHere/$1|izdayen nniḍen]] ɣer afaylu agi.',
+'linkstoimage-redirect' => '$1 (allus n wesnili n ufaylu) $2',
+'duplicatesoffile' => '{{PLURAL:$1|Afaylu agi d anɣel|Ifuyla agi d ineɣlan}} n ufaylu agi ([[Special:FileDuplicateSearch/$2|tilɣa timarnanin]]) :',
+'sharedupload' => 'Afaylu agi yettuseqdac seg : $1. Yezmer ad yettuseqdac deg isenfaṛen nniḍen',
+'sharedupload-desc-there' => 'Afaylu agi yussad seg : $1. Yezmer ad yetseqdac sɣur isenfaren nniḍen.
+Ẓeṛ [$2 asebter is n uglam] ma tebɣiḍ tilɣa nniḍen.',
 'sharedupload-desc-here' => 'Afaylu agi yusad seg : $1. Ahat yeseqdec deg isenfaṛen nniḍen.
 Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
+'sharedupload-desc-edit' => 'Afaylu agi yussad seg : $1. Yezmer ad yetseqdac sɣur isenfaren nniḍen.
+Ahat tebɣiḍ ad beddeleḍ aglam is ɣef [$2 asebter is n uglam].',
+'sharedupload-desc-create' => 'Afaylu agi yussad seg : $1. Yezmer ad yetseqdac sɣur isenfaren nniḍen.
+Ẓeṛ [$2 asebter is n uglam] ma tebɣiḍ tilɣa nniḍen.',
+'filepage-nofile' => 'Ulac afaylu s isem agi.',
+'filepage-nofile-link' => 'Ulac afaylu s isem agi, maca tzemreḍ ad [$1 ktereḍ yiwen].',
 'uploadnewversion-linktext' => 'tazneḍ tasiwelt tamaynut n ufaylu-yagi',
+'shared-repo-from' => 'seg : $1',
+'shared-repo' => 'azadur azduklan',
+'upload-disallowed-here' => 'Ur tzemreḍ ara ad semselsiḍ tugna agi.',
+
+# File reversion
+'filerevert' => 'Erred $1',
+'filerevert-legend' => 'Erred afaylu',
+'filerevert-intro' => "Ha-ta-n ad uɣaleḍ ar ufaylu  '''[[Media:$1|$1]]''' ar [$4 lqem n $2 af $3].",
+'filerevert-comment' => 'Taɣẓint :',
+'filerevert-defaultcomment' => 'Uɣaleḍ ar lqem n $1 af $2',
+'filerevert-submit' => 'Erred',
+'filerevert-success' => "'''[[Media:$1|$1]]''' yuɣaled ar  [$4 lqem n $2 af $3].",
+'filerevert-badversion' => 'Ulac, deg udigan, lqem aqbur n ufaylu yesɛan azmez agi.',
+
+# File deletion
+'filedelete' => 'Kkes $1',
+'filedelete-legend' => 'Kkes asebter',
+'filedelete-intro' => "Ha-ta-n ad ekkeseḍ '''[[Media:$1|$1]]'' akkw d umezruy is.",
+'filedelete-intro-old' => "Ha-ta-n ad mḥuḍ lqem n '''[[Media:$1|$1]]''' n [$4 $2 af $3].",
+'filedelete-comment' => 'Taɣẓint :',
+'filedelete-submit' => 'Ekkes',
+'filedelete-success' => "'''$1''' yetwekkes.",
+'filedelete-success-old' => "Lqem n '''[[Media:$1|$1]]''' n $2 af $3 yetwekkes.",
+'filedelete-nofile' => "'''$1''' ulac-it.",
+'filedelete-nofile-old' => "Ulac lqem i ɣbeṛen n '''$1''' s ayla agi.",
+'filedelete-otherreason' => 'Taɣẓint nniḍen / taɣzint tamarnant :',
+'filedelete-reason-otherlist' => 'Taɣẓint nniḍen',
+'filedelete-reason-dropdown' => '* Tiɣzinin tillusanin n tukksa n ifuyla
+** Akukel n uzref n umeskar
+** Afaylu yesɛan anɣel',
+'filedelete-edit-reasonlist' => 'Beddel tiɣẓinin n umḥu i-d-yettuɣalen',
+'filedelete-maintenance' => 'Tukksa d tiririt n ifuyla yensa (akudan) deg ugani n ibeddi.',
+'filedelete-maintenance-title' => 'Ulamek an kkes afaylu',
 
 # MIME search
 'mimesearch' => 'Anadi n MIME',
@@ -955,35 +1642,51 @@ Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
 
 # Unused templates
 'unusedtemplates' => 'Talɣiwin mebla aseqdac',
-'unusedtemplatestext' => 'Asebter-agi yesɛa umuɣ n akk isebtar n isem n taɣult s yisem "talɣa" iwumi ulac-iten deg ḥedd asebter. Ur tettuḍ ara ad tessenqdeḍ isebtar n talɣa wiyaḍ qbel ad temḥuḍ.',
+'unusedtemplatestext' => 'Asebter-agi yesɛa umuɣ n akkw isebtar n tallunt isemawen « {{ns:template}} » ur llan ara deg asebter nniḍen.
+Ur tettuḍ ara ad selkeneḍ ma ur llan ara izdayen nniḍen ɣer tilɣatin uqbel ad temḥuḍ.',
 'unusedtemplateswlh' => 'izdayen wiyaḍ',
 
 # Random page
 'randompage' => 'Asebter menwala',
-'randompage-nopages' => 'Ulac isebtar deg isem n taɣult agi.',
+'randompage-nopages' => 'Ulac isebtar deg {{PLURAL:$2|tallunt n isemawen|tallunin n isemawen}} : $1.',
 
 # Random redirect
 'randomredirect' => 'Asemmimeḍ menwala',
 
 # Statistics
 'statistics' => 'Tisnaddanin',
+'statistics-header-pages' => 'Tisnaddanin n isebtar',
+'statistics-header-edits' => 'Tisnaddanin n ibeddilen',
+'statistics-header-views' => 'Tisnaddanin n iskanen',
 'statistics-header-users' => 'Tisnaddanin n wemseqdac',
+'statistics-header-hooks' => 'Tisnaddanin nniḍen',
+'statistics-articles' => 'Isebtar n ugbur',
+'statistics-pages' => 'Isebtar',
+'statistics-pages-desc' => 'Akkw isebtar n wiki agi, ula d isebtar n umeslay, etc...',
+'statistics-files' => 'Ifuyla yettwaznen',
+'statistics-edits' => 'Ibeddilen n isebtar seg aserkeb n {{SITENAME}}',
+'statistics-edits-average' => 'Amḍan allal n ibeddilen sɣur asebter',
+'statistics-views-total' => 'Iskanen',
 'statistics-mostpopular' => 'isebtar mmeẓren aṭṭas',
 
-'disambiguations' => 'isebtar n usefham',
+'disambiguations' => 'Isebtar yesɛan izdayen ɣer isebtar n tiynisemt',
 'disambiguationspage' => 'Template:Asefham',
-'disambiguations-text' => "Isebtar-agi sɛan azday ɣer '''usebter n usefham'''. Yessefk ad sɛun azday ɣer wezwel ṣaḥiḥ mačči ɣer usebter n usefham.",
+'disambiguations-text' => "Isebtar agi azday ɣer '''asebter n tiynisemt'''.
+Ilaq ad sɛun azday ɣer amagrad amellay.<br />
+Asebter yella d asebter n tiynisemt lukan yetseqdac talɣa i qqenen ar [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Asemmimeḍ yeḍra snat tikwal',
 'doubleredirectstext' => 'Mkull ajerriḍ yesɛa azday ɣer asmimeḍ amezwaru akk d wis sin, ajerriḍ amezwaru n uḍris n usebter wis sin daɣen, iwumi yefkan asmimeḍ ṣaḥiḥ i yessefk ad sɛan isebtar azday ɣur-s.',
 
 'brokenredirects' => 'Isemmimḍen imerẓa',
-'brokenredirectstext' => 'Isemmimḍen-agi sɛan izdayen ar isebtar ulac-iten:',
+'brokenredirectstext' => 'Isemmimḍen-agi sɛan izdayen ar isebtar ulac-iten :',
 'brokenredirects-edit' => 'beddel',
 'brokenredirects-delete' => 'mḥu',
 
-'withoutinterwiki' => 'isebtar mebla izdayen ar isebtar n wikipedia s tutlayin tiyaḍ',
-'withoutinterwiki-summary' => 'isebtar-agi ur sɛan ara izdayen ar isebtar n wikipedia s tutlayin tiyaḍ:',
+'withoutinterwiki' => 'Isebtar war izdayen ager-tutlayin',
+'withoutinterwiki-summary' => 'Isebtar agi ur sɛan ara izdayen ɣer tutlayin nniḍen :',
+'withoutinterwiki-legend' => 'Adat',
+'withoutinterwiki-submit' => 'Ssken',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte/octet|bytes/octets}}',
@@ -994,26 +1697,27 @@ Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
 'nviews' => '$1 {{PLURAL:$1|timeẓriwt|tuẓrin}}',
 'specialpage-empty' => 'Asebter-agi d ilem.',
 'lonelypages' => 'isebtar igujilen',
-'lonelypagestext' => 'isebtar-agi ur myezdin ara seg isebtar wiyaḍ deg wiki-yagi.',
+'lonelypagestext' => 'Isebtar agi ur sweṛen, ur llan deg isebtar nniḍen n {{SITENAME}}.',
 'uncategorizedpages' => 'isebtar mebla taggayt',
 'uncategorizedcategories' => 'Taggayin mebla taggayt',
-'uncategorizedimages' => 'Tugna mebla taggayt',
+'uncategorizedimages' => 'Ifuyla war taggayin',
 'uncategorizedtemplates' => 'Talɣiwin mebla taggayt',
 'unusedcategories' => 'Taggayin ur nettwaseqdac ara',
 'unusedimages' => 'Ifayluwin ur nettwaseqdac ara',
 'popularpages' => 'Isebtar iɣerfanen',
 'wantedcategories' => 'Taggayin mmebɣant',
 'wantedpages' => 'Isebtar mmebɣan',
+'wantedfiles' => 'Ifuyla yettwasutren s waṭas.',
 'mostlinked' => 'Isebtar myezdin aṭas',
 'mostlinkedcategories' => 'Taggayin myezdint aṭas',
 'mostcategories' => 'Isebtar i yesɛan aṭṭas taggayin',
-'mostimages' => 'Tugniwin myezdin aṭas',
+'mostimages' => 'Ifuyla i seqdacen aṭas',
 'mostrevisions' => 'Isebtar i yettubedlen aṭas',
 'prefixindex' => 'Akk isebtaren s yisekkilen imezwura',
 'shortpages' => 'isebtar imecṭuḥen',
 'longpages' => 'Isebtar imeqqranen',
 'deadendpages' => 'isebtar mebla izdayen',
-'deadendpagestext' => 'isebtar-agi ur sɛan ara azday ɣer isebtar wiyaḍ deg wiki-yagi.',
+'deadendpagestext' => 'Isebtar agi ur sɛan ara izdayen ɣer isebtar nniḍen n {{SITENAME}}.',
 'protectedpages' => 'isebtar yettwaḥerzen',
 'protectedpagestext' => 'isebtar-agi yettwaḥerzen seg ubeddel neɣ asemmimeḍ',
 'protectedpagesempty' => 'isebtar-agi ttwaḥerzen s imsektayen -agi.',
@@ -1024,7 +1728,8 @@ Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
 'ancientpages' => 'isebtar iqdimen',
 'move' => 'Smimeḍ',
 'movethispage' => 'Smimeḍ asebter-agi',
-'unusedimagestext' => 'Ssen belli ideggen n internet sɛan izdayen ɣer tugna-agi s URL n qbala, ɣas akken tugna-nni hatt da.',
+'unusedimagestext' => 'Ifuyla agi llan, maca ulac asebter anda llan.
+Ahat llan ismal nniḍen yesɛan azday ɣer afaylu, ihi yezmer ad yiqqim afaylu d agi dɣa ad yetseqdac deg ismal nni.',
 'unusedcategoriestext' => 'Taggayin-agi weǧden meɛna ulac isebtar neɣ taggayin i sseqdacen-iten.',
 'notargettitle' => 'Ulac nnican',
 'notargettext' => 'Ur textareḍ ara asebter d nnican neɣ asebter n wemseqdac d nnican.',
@@ -1038,12 +1743,12 @@ Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
 'booksources-text' => 'Deg ukessar, yella wumuɣ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d weqdimen), yernu ahat sɛan kter talɣut ɣef idlisen i tettnadiḍ fell-asen:',
 
 # Special:Log
-'specialloguserlabel' => 'Amseqdac:',
-'speciallogtitlelabel' => 'Azwel:',
+'specialloguserlabel' => 'Ameskar :',
+'speciallogtitlelabel' => 'Asaḍas (azwel naɣ aseqdac) :',
 'log' => 'Aɣmis',
-'all-logs-page' => 'Akk iɣmisen',
-'alllogstext' => 'Ssken akk iɣmisen n {{SITENAME}}.
-Tzemreḍ ad textareḍ cwiṭ seg-sen ma tebɣiḍ.',
+'all-logs-page' => 'Akk iɣmisen izayezen',
+'alllogstext' => 'Abeqqeḍ n akkw iɣmisen yestufan ɣef {{SITENAME}}.<br />
+Tzemreḍ ad sageneḍ abeqqeḍ s tixtiṛit n tawsit n uɣmis, isem n useqdac naɣ asebter nni.',
 'logempty' => 'Ur yufi ara deg uɣmis.',
 'log-title-wildcard' => 'Nadi ɣef izwal i yebdan s uḍris-agi',
 
@@ -1065,11 +1770,18 @@ Tzemreḍ ad textareḍ cwiṭ seg-sen ma tebɣiḍ.',
 
 # Special:Categories
 'categories' => 'Taggayin',
-'categoriespagetext' => 'Llant taggayin-agi deg wiki-yagi.
-[[Special:UnusedCategories|Unused categories]] are not shown here.
-Also see [[Special:WantedCategories|wanted categories]].',
+'categoriespagetext' => '{{PLURAL:$1|Taggayt agi teseqdec|Taggayin agi teseqdecet}} sɣur isebtar naɣ ifuyla.
+[[Special:UnusedCategories|Taggayin ur sɛan ara aqeddic]]
+Ẓeṛ daɣen [[Special:WantedCategories|taggayin yetwesuteren]].',
+'categoriesfrom' => 'Ssken taggayin seg :',
+'special-categories-sort-count' => 'Afran s amḍan n iferdisen',
+'special-categories-sort-abc' => 'Afran s ugemmay',
 
 # Special:LinkSearch
+'linksearch' => 'Anadi n izdayen yeffɣen',
+'linksearch-pat' => 'Anadi n tanfalit :',
+'linksearch-ns' => 'Talluntin n isemawen :',
+'linksearch-ok' => 'Nadi',
 'linksearch-line' => '$1 yeqqen seg $2',
 
 # Special:ListUsers
@@ -1081,31 +1793,56 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'newuserlogpage' => 'Aɣmis n isnulfan n  imiḍanen n imseqdacen',
 
 # Special:ListGroupRights
+'listgrouprights-group' => 'Agraw',
+'listgrouprights-rights' => 'Izerfan',
+'listgrouprights-helppage' => 'Help:Izerfan n igrawen',
 'listgrouprights-members' => '(umuɣ n imseqdacen)',
+'listgrouprights-addgroup' => 'Rnu iεeggalen i {{PLURAL:$2|ugraw|igrawen}} : $1',
+'listgrouprights-removegroup' => 'Ekkes iεeggalen i {{PLURAL:$2|ugraw|igrawen}} : $1',
+'listgrouprights-addgroup-all' => 'Rnu iεeggalen i akkw igrawen',
+'listgrouprights-removegroup-all' => 'Ekkes iεeggalen i akkw igrawen',
+'listgrouprights-addgroup-self' => 'Yezmer ad yernu {{PLURAL:$2|agraw|igrawen}} ar umiḍan-is : $1',
+'listgrouprights-removegroup-self' => 'Yezmer ad yekkes {{PLURAL:$2|agraw|igrawen}} ar umiḍan-is : $1',
+'listgrouprights-addgroup-self-all' => 'Yezmer ad yernu akkw igrawen ar umiḍan-is',
+'listgrouprights-removegroup-self-all' => 'Yezmer ad yekkes akkw igrawen ar umiḍan-is',
 
 # E-mail user
 'mailnologin' => 'Ur yufi ḥedd (tansa)',
 'mailnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] u tesɛiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
 iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
 'emailuser' => 'Azen e-mail i wemseqdac-agi',
-'emailpage' => 'Azen e-mail i wemseqdac',
-'emailpagetext' => 'Lukan amseqdac-agi yefka-d tansa n email ṣaḥiḥ
-deg imsifiyen ines, talɣa deg ukessar a t-tazen izen.
-Tansa n email i tefkiḍ deg imisifyen inek ad tban-d
-deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.',
+'emailuser-title-target' => 'Ceggaɛ tirawt i {{GENDER:$1|aseqdac agi|taseqdact agi}}',
+'emailuser-title-notarget' => 'Ceggaɛ tirawt i useqdac',
+'emailpage' => 'Ceggaɛ tirawt i useqdac',
+'emailpagetext' => 'Tzemreḍ ad seqdeceḍ tiferkit ddaw agi iwakken ad ceggɛeḍ tirawt i useqdac agi.
+Tansa e-mail id ekfeḍ deg [[Special:Preferences|iɣewwaren inek/inem]] ad tban deg urti "Amceggaɛ" n izen ; akka, anermas ad yezmer ak/akem yefk tiririt.',
 'usermailererror' => 'Yella ugul deg uzwel n email:',
-'defemailsubject' => 'e-mail n {{SITENAME}}',
+'defemailsubject' => '{{SITENAME}} tirawt n useqdac « $1 »',
+'usermaildisabled' => 'Aceggaɛ n tira gar iseqdacen yensa',
+'usermaildisabledtext' => 'Ur tzermeḍ ara ad ceggeɛeḍ tira i iseqdacen nniḍen ɣef wiki agi',
 'noemailtitle' => 'E-mail ulac-it',
-'noemailtext' => 'Amseqdac-agi ur yefki ara e-mail ṣaḥiḥ, neɣ ur yebɣi ara e-mailiyen seg medden.',
-'emailfrom' => 'Seg',
-'emailto' => 'i',
-'emailsubject' => 'Asentel',
-'emailmessage' => 'Izen',
+'noemailtext' => 'Aseqdac-agi ur d-yefka ara tansa e-mail iɣbelen.',
+'nowikiemailtitle' => 'Ulac turagt i e-mail',
+'nowikiemailtext' => 'Aseqdac agi ur yebɣa ara ad yeṭṭef tirawt sɣur iseqdacen nniḍen.',
+'emailnotarget' => 'Isem useqdac n unermas ur yella ara naɣ ur yeɣbel ara.',
+'emailtarget' => 'Sekcem isem useqdac n unermas',
+'emailusername' => 'Isem n useqdac',
+'emailusernamesubmit' => 'Sumer',
+'email-legend' => 'Ceggaɛ tirawt i yiwen useqdac nniḍen n {{SITENAME}}',
+'emailfrom' => 'Seg :',
+'emailto' => 'I :',
+'emailsubject' => 'Asentel :',
+'emailmessage' => 'Izen :',
 'emailsend' => 'Azen',
 'emailccme' => 'Azen-iyi-d e-mail n ulsaru n izen inu.',
 'emailccsubject' => 'Alsaru n izen inek i $1: $2',
 'emailsent' => 'E-mail yettwazen',
 'emailsenttext' => 'Izen n e-mail inek yettwazen.',
+'emailuserfooter' => 'Tirawt agi tetweceggaɛ sɣur « $1 » i « $2 » s tasɣent "Ceggaɛ tirawt i useqdac" n {{SITENAME}}.',
+
+# User Messenger
+'usermessage-summary' => 'Yeǧǧa-d izen anagraw',
+'usermessage-editor' => 'Ameskar n unagraw',
 
 # Watchlist
 'watchlist' => 'Umuɣ n uɛessi inu',
@@ -1115,12 +1852,14 @@ deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.',
 'watchlistanontext' => 'G leɛnaya-k $1 iwakken ad twalaḍ neɣ tbeddleḍ iferdas deg wumuɣ n uɛessi inek.',
 'watchnologin' => 'Ur tekcimeḍ ara',
 'watchnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] iwakken ad tbeddleḍ umuɣ n uɛessi inek.',
+'addwatch' => 'Rnu i umuɣ n uɛassi',
 'addedwatchtext' => "Asebter \"[[:\$1]]\" yettwarnu deg [[Special:Watchlist|wumuɣ n uɛessi]] inek.
 Ma llan ibeddlen deg usebter-nni neɣ deg usbtar umyennan ines, ad banen dagi,
 Deg [[Special:RecentChanges|wumuɣ n yibeddlen imaynuten]] ad banen s '''yisekkilen ibberbuzen''' (akken ad teẓriḍ).
 
 Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk aɛessi\".",
-'removedwatchtext' => 'Asebter "[[:$1]]" yettwakkes seg wumuɣ n uɛessi inek.',
+'removewatch' => 'Ekkes seg umuɣ n uɛassi',
+'removedwatchtext' => '!!Asebter "[[:$1]]" yettwakkes seg [[Special:Watchlist|umuɣ n uɛessi]] inek.',
 'watch' => 'Ɛass',
 'watchthispage' => 'Ɛass asebter-agi',
 'unwatch' => 'Fakk aɛassi',
@@ -1134,7 +1873,7 @@ Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk a
 'watchmethod-list' => 'yessenqed isebtar i ttɛassaɣ i ibeddlen imaynuten',
 'watchlistcontains' => 'Umuɣ n uɛessi inek ɣur-s $1 n {{PLURAL:$1|usebter|isebtar}}.',
 'iteminvalidname' => "Agnu akk d uferdis '$1', isem mačči ṣaḥiḥ...",
-'wlnote' => "Deg ukessar {{PLURAL:$1|yella yiwen ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|saɛa taneggarut|'''$2''' swayeɛ tineggura}}.",
+'wlnote' => "Ddaw agi  {{PLURAL:$1|yella abeddel aneggaru|llan '''$1''' ibeddilen ineggura}} n {{PLURAL:$2|usrag aneggaru|'''$2''' isragen ineggura}}, seg $3 af $4.",
 'wlshowlast' => 'Ssken $1 n swayeɛ $2 n wussan neɣ $3 ineggura',
 'watchlist-options' => 'Tifranin n umuɣ n uɛessi',
 
@@ -1153,25 +1892,32 @@ Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk a
 'enotif_lastdiff' => 'Ẓer $1 akken ad tmuqleḍ abeddel.',
 'enotif_body' => 'Ay $WATCHINGUSERNAME,
 
-Asebter n {{SITENAME}} $PAGETITLE $CHANGEDORCREATED deg wass $PAGEEDITDATE sɣur $PAGEEDITOR, ẓer $PAGETITLE_URL i tasiwelt n tura.
+Asebter « $PAGETITLE » n {{SITENAME}} $CHANGEDORCREATED ass n $PAGEEDITDATE sɣur « $PAGEEDITOR », ẓeṛ $PAGETITLE_URL iwakken ad ẓṛeḍ lqem n tura.
 
 $NEWPAGE
 
 Abeddel n wegzul: $PAGESUMMARY $PAGEMINOREDIT
 
-Meslay akk d ambeddel:
-email: $PAGEEDITOR_EMAIL
+Meslay s umbeddel:
+e-mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Ur yelli ara email n talɣut asmi llan ibeddlen deg usebter ala lukan teẓreḍ asebter-nni. Tzemreḍ ad terreḍ i zero email n talɣut i akk isebraen i tettɛasseḍ.
+Ur yelli ara email n talɣut asmi llan ibeddlen deg usebter ala lukan teẓreḍ asebter-nni.
+Tzemreḍ ad awennezeḍ akkw isenǧaqen n talɣut i akkw isebtar yellan deg umuɣ inek/inem n uɛassi.
 
-             email n talɣut n {{SITENAME}}
+             Anagraw inek/inem n talɣut n {{SITENAME}}
 
 --
-Akken ad tbeddleḍ n wumuɣ n uɛessi inek settings, ruḥ ɣer
+Iwakken ad beddeleḍ iɣewwaren n talɣut deg tirawt, ẓeṛ
+{{canonicalurl:{{#special:Preferences}}}}
+
+Iwakken ad beddeleḍ iɣewwaren n umuɣ inek/inem n uɛassi, ẓeṛ
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Tadhelt:
+Iwakken ad mḥuḍ asebter deg umuɣ inek/inem n uɛassi, ẓeṛ
+$UNWATCHURL
+
+Tuɣalin d tadhelt :
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
@@ -1181,7 +1927,7 @@ Tadhelt:
 'excontentauthor' => "Ayen yella: '$1' ('[[Special:Contributions/$2|$2]]' kan i yekken deg-s)",
 'exbeforeblank' => "Ayen yella uqbal ma yettumḥa: '$1'",
 'exblank' => 'asebter yella d ilem',
-'historywarning' => 'Aɣtal: Asebter i ara temḥuḍ yesɛa amezruy:',
+'historywarning' => 'Ɣur-wet : Asebter i ara temḥuḍ yesɛa amezruy s azal alemmas n $1 {{PLURAL:$1|lqem|ileqman}} :',
 'actioncomplete' => 'Axdam yekfa',
 'actionfailed' => 'Tigawt agi texser',
 'deletedtext' => '"$1" yettumḥa.
@@ -1224,7 +1970,7 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 'viewdeletedpage' => 'Ẓer isebtar yettumḥan',
 'undeletelink' => 'ẓeṛ/uɣaled',
 'undeleteviewlink' => 'ẓeṛ',
-'undeletecomment' => 'Awennit:',
+'undeletecomment' => 'Taɣẓint :',
 'undelete-header' => 'Ẓer [[Special:Log/delete|aɣmis n umḥay]] i isebtar ttumḥan tura.',
 'undelete-search-box' => 'Nadi ɣef isebtar yettumḥan',
 'undelete-search-prefix' => 'Ssken isebtar i yebdan s:',
@@ -1232,7 +1978,7 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 'undelete-no-results' => 'Ur yufi ara ulaḥedd n wawalen i tnadiḍ ɣef isebtar deg iɣbaren.',
 
 # Namespace form on various pages
-'namespace' => 'Isem n taɣult:',
+'namespace' => 'Talluntin n isemawen :',
 'invert' => 'Snegdam ayen textareḍ',
 'blanknamespace' => '(Amenzawi)',
 
@@ -1297,22 +2043,21 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 'block-log-flags-nocreate' => 'asnulfu n umiḍan yessegdel',
 'proxyblockreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy". G leɛnayek, meslay akk d provider inek.',
 'proxyblocksuccess' => 'D ayen.',
-'sorbsreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da.',
-'sorbs_create_account_reason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da. Ur tezmireḍ ara ad txelqeḍ isem n wemseqdac',
+'sorbsreason' => 'Tansa IP inek/inem tella deg yiwen umuɣ am "open proxy" deg DNSBL yettuseqdac deg {{SITENAME}}.',
+'sorbs_create_account_reason' => 'Tansa IP inek/inem tella deg yiwen umuɣ am "open proxy" deg DNSBL yettuseqdac deg {{SITENAME}}.
+Ur tezmireḍ ara ad snulfuḍ amiḍan.',
 
 # Developer tools
 'lockdb' => 'Sekker database',
 
 # Move page
 'move-page-legend' => 'Smimeḍ asebter',
-'movepagetext' => "Mi tedsseqdceḍ talɣa deg ukessar ad ibddel isem n usebter, yesmimeḍ akk umezruy-is ɣer isem amaynut.
-Azwel aqdim ad yuɣal azady n wesmimeḍ ɣer azwel amaynut.
-Izdayen ɣer azwel aqdim ur ttubeddlen ara;
-ssenqd-iten u ssenqed izdayen n snat d tlata tikkwal.
-D kečč i yessefk a ten-yessenqed.
-
-Meɛna, ma yella amagrad deg azwel amaynut neɣ azday n wamsmimeḍ mebla amezruy, asebter-inek '''ur''' yettusmimeḍ '''ara'''.
-Yernu, tzemreḍ ad tesmimeḍ asebter ɣer isem-is aqdim ma tɣelṭeḍ.",
+'movepagetext' => "Seqdec tiferkit ddaw agi iwakken ad beddeleḍ isem n usebter, s usiweḍ n akkw amezruy is ɣer isem amaynut. Azwel aqbur ad yuɣal d asebter n usemmime ɣer azwel amaynut. Tzemreḍ ad mucceḍeḍ s uwurman isemmimen amiran i sweṛen ɣer azwel amezwaru. Ma ur tebɣiḍ ara at sexdemeḍ wagi, ilaq ad selkeneḍ akkw [[Special:DoubleRedirects|Asemmimeḍ yeḍran snat tikwal]] naɣ [[Special:BrokenRedirects|asmmimeḍ yerẓan]]. Ilaq ad sɛuḍ talkint belli izdayen tsweṛen ɣer aserken is.
+
+Abeddel n isem ur yezmer ara ad yilli ma yella yakan asebter s isem agi, ḥaca ma ulac amezruy deg-es.
+
+'''Ɣur-wet !'''
+Wagi yezmer ad yexdem abeddel ameqqṛan i asebter s aṭas timerziwin ; ilaq ad fehmeḍ uqbel ad beddeleḍ asebter.",
 'movepagetalktext' => "Asebter \"Amyannan\" yettusmimeḍ ula d netta '''ma ulac:'''
 *Yella asebter \"Amyannan\" deg isem amaynut, neɣ
 *Trecmeḍ tankult deg ukessar.
@@ -1341,7 +2086,7 @@ Xtar yiwen nniḍen.',
 
 Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken yeqqim-d wemkan i usmimeḍ?',
 'delete_and_move_confirm' => 'Ih, mḥu asebter',
-'delete_and_move_reason' => 'Mḥu iwakken yeqqim-d wemkan i usmimeḍ',
+'delete_and_move_reason' => 'Asebter yemḥa iwakken yeqqim-d wemkan i usmimeḍ seg "[[$1]]"',
 'selfmove' => 'Izwal amezwaru d uneggaru kif-kif; ur yezmir ara ad yesmimeḍ asebter ɣur iman-is.',
 
 # Export
@@ -1356,10 +2101,11 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'allmessagesname' => 'Isem',
 'allmessagesdefault' => 'Aḍris ameslugen',
 'allmessagescurrent' => 'Aḍris n tura',
-'allmessagestext' => 'Wagi d umuɣ n izen n system i yellan deg yisem n taɣult.
-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' => 'Wagi d-umuɣ n inzan yestufan deg tallunt MediaWiki.
+Ẓeṛ [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
 'allmessages-language' => 'Tutlayt :',
+'allmessages-filter-submit' => 'Ruḥ',
 
 # Thumbnails
 'thumbnail-more' => 'Ssemɣer',
@@ -1372,6 +2118,8 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'import-interwiki-history' => 'Xdem alsaru n akk tisiwal umezruy n usebter-agi',
 'import-interwiki-submit' => 'Ssekcem',
 'import-interwiki-namespace' => 'Azen isebtar ar isem n taɣult:',
+'import-upload-filename' => 'Isem n ufaylu :',
+'import-comment' => 'Awennit :',
 'importstart' => 'Asekcem n isebtar...',
 'import-revision-count' => '$1 {{PLURAL:$1|tasiwelt|tisiwal}}',
 'importnopages' => 'Ulac isebtar iwakken ad ttussekcmen.',
@@ -1380,7 +2128,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'importcantopen' => 'Ur yezmir ara ad yexdem asekcem n ufaylu',
 'importbadinterwiki' => 'Azday n interwiki ur yelhi',
 'importnotext' => 'D ilem neɣ ulac aḍris',
-'importsuccess' => 'Asekcem yekfa!',
+'importsuccess' => 'Asekcem yekfa !',
 'importhistoryconflict' => 'Amennuɣ ger tisiwal n umezruy (ahat asebter-agi yettwazen yagi)',
 'importnosources' => 'Asekcam n transwiki ur yexdim ara u amezruy n usekcam yettwakkes.',
 'importnofile' => 'ulaḥedd afaylu usekcam ur yettwazen.',
@@ -1389,9 +2137,9 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'importlogpage' => 'Aɣmis n usekcam',
 'importlogpagetext' => 'Adeblan n usekcam n isebtar i yesɛan amezruy ubeddel seg wiki tiyaḍ.',
 'import-logentry-upload' => 'Yessekcem [[$1]] s usekcam n ufaylu',
-'import-logentry-upload-detail' => '$1 tasiwelt(tisiwal)',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|lqem|ileqman}}',
 'import-logentry-interwiki' => '$1 s transwiki',
-'import-logentry-interwiki-detail' => '$1 tasiwelt(tisiwal) seg $2',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|lqem|ileqman}} seg $2',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Asebter n umseqdac inu',
@@ -1458,12 +2206,12 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'tooltip-summary' => 'Sekcem agzul awezzlan',
 
 # Attribution
-'anonymous' => 'Amseqdac udrig (Imseqdacen udrigen) n {{SITENAME}}',
+'anonymous' => '{{PLURAL:$1|Aseqdac udrig|Iseqdacen udrigen}} ɣef {{SITENAME}}',
 'siteuser' => '{{SITENAME}} amseqdac $1',
 'lastmodifiedatby' => 'Tikkelt taneggarut asmi yettubeddel asebter-agi $2, $1 sɣur $3.',
-'othercontribs' => 'Tikkin n wemseqdac-agi.',
+'othercontribs' => 'Tikkin ɣef umahil n $1.',
 'others' => 'wiyaḍ',
-'siteusers' => '{{SITENAME}} amseqdac(imseqdacen) $1',
+'siteusers' => '{{PLURAL:$2|aseqdac|iseqdacen}} $1 n {{SITENAME}}',
 'creditspage' => 'Win ixedmen asebter',
 'nocredits' => 'Ulac talɣut ɣef wayen ixedmen asebter-agi.',
 
@@ -1474,11 +2222,28 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'spam_reverting' => 'Asuɣal i tasiwel taneggarut i ur tesɛi ara izdayen ɣer $1',
 'spam_blanking' => 'Akk tisiwal sɛan izdayen ɣer $1, ad yemḥu',
 
+# Info page
+'pageinfo-title' => 'Tilɣa i « $1 »',
+'pageinfo-header-basic' => 'Tilɣa n udasil',
+'pageinfo-header-edits' => 'Amezruy n ibeddilen',
+'pageinfo-header-restrictions' => 'Amesten n usebter',
+'pageinfo-header-properties' => 'Ayla n usebter',
+'pageinfo-display-title' => 'Azwel yebeqqeḍen',
+'pageinfo-default-sort' => 'Tasarut n ufran s lexṣas',
+'pageinfo-length' => 'Tiddi n usebter (s itamḍanen)',
+'pageinfo-article-id' => 'Uṭṭun n usebter',
+'pageinfo-robot-policy' => 'Aẓayer n umsadday n unadi',
+'pageinfo-robot-index' => 'Ṭwamatar',
+'pageinfo-robot-noindex' => 'Arṭwamatar',
+'pageinfo-views' => 'Amḍan n timuɣliwin',
+'pageinfo-watchers' => 'Amḍan n imttekkiyen yesɛan asebter agi deg umuɣ nsen n uɛassi',
+'pageinfo-subpages-name' => 'Adu-isebtar n usebter agi',
+
 # Patrolling
 'markaspatrolleddiff' => 'Rcem "yettwassenqden"',
 'markaspatrolledtext' => 'Rcem amagrad-agi "yettwassenqden"',
 'markedaspatrolled' => 'Rcem belli yettwasenqed',
-'markedaspatrolledtext' => 'Tasiwelt i textareḍ tettwassenqed.',
+'markedaspatrolledtext' => 'Lqem i textareḍ n [[:$1]] tettwassenqed.',
 'rcpatroldisabled' => 'Yettwakkes asenqad n ibeddlen imaynuten',
 'rcpatroldisabledtext' => 'Yettwakkes asenqad n ibeddlen imaynuten',
 'markedaspatrollederror' => 'Ur yezmir ara ad yercem "yettwassenqden"',
@@ -1496,8 +2261,9 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'nextdiff' => 'Amgirred ameḍfir →',
 
 # Media information
-'mediawarning' => "'''Aɣtal''': Waqila afaylu-yagi yesɛa angal aḥraymi, lukan a t-tesseqdceḍ yezmer ad ixesser aselkim inek.",
-'imagemaxsize' => 'Ḥedded tiddi n tugniwin deg yiglamen n tugniwim i:',
+'mediawarning' => "'''Ɣuṛ-wet''': tawsit agi n ufaylu tezmer at sɛu angal aḥraymi.
+Lukan a t-tesseqdceḍ yezmer ad yexsser aselkim inek/inem.",
+'imagemaxsize' => "Tiddi tafellayt n tugniwin :<br />''(i isebtar n weglam ufaylu)''",
 'thumbsize' => 'Tiddi n tugna tamecṭuḥt:',
 'file-info' => 'tiddi n ufaylu: $1, anaw n MIME: $2',
 'file-info-size' => '$1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4',
@@ -1508,10 +2274,20 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 # Special:NewFiles
 'newimages' => 'Umuɣ n ifayluwen imaynuten',
 'imagelisttext' => "Deg ukessar yella wumuɣ n '''$1''' {{PLURAL:$1|ufaylu|yifayluwen}} $2.",
+'newimages-legend' => 'Tastayt',
+'newimages-label' => 'Isem n ufaylu (naɣ aḥric ines) :',
+'showhidebots' => '($1 iṛubuten)',
 'noimages' => 'Tugna ulac-itt.',
 'ilsubmit' => 'Nadi',
 'bydate' => 's uzemz',
-'sp-newimages-showfrom' => 'Ssken tugniwin timaynutin seg $1',
+'sp-newimages-showfrom' => 'Beqqeḍ ifuyla imaynuten seg $1 ar $2',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 tasint|$1 tasinin}}',
+'minutes' => '{{PLURAL:$1|$1 tamrect|$1 timercin}}',
+'hours' => '{{PLURAL:$1|$1 asrag|$1 isragen}}',
+'days' => '{{PLURAL:$1|$1 ass|$1 ussan}}',
+'ago' => '$1 aya',
 
 # Bad image list
 'bad_image_list' => 'Amasal d-wagi :
@@ -1522,6 +2298,8 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 # Metadata
 'metadata' => 'Adferisefka',
 'metadata-help' => 'Afaylu agi, yesɛa tilɣa tisutay, ahat d-tamsaknewt id ernan tilɣa agi. Ma afaylu yebeddel seg addad-is amezwaru, ahat kra n tilɣa ur zemrent ara ad illint d-timekdant s-ufaylu amiran.',
+'metadata-expand' => 'Beqqeḍ tilɣa tummidin',
+'metadata-collapse' => 'Ffer tilɣa tummidin',
 'metadata-fields' => 'Urtan n adferisefka n tugniwin yellan deg umuɣ n izen agi, ad seddun deg usebter n aglam n tugna mi ṭabla n adferisefka at illi tesemẓi. Urtan nniḍen ad illin ffren m-ulac.
 * make
 * model
@@ -1539,11 +2317,143 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 
 # EXIF tags
 'exif-imagewidth' => 'Tehri',
+'exif-imagelength' => 'Taɣwzi',
+'exif-bitspersample' => 'Ibitten s isger',
+'exif-compression' => 'Tawsit n asekkusem',
+'exif-photometricinterpretation' => 'Talɣa n uferdis n tugna',
+'exif-orientation' => 'Taɣda',
+'exif-samplesperpixel' => 'Tisegranin s uferdis n tugna',
+'exif-planarconfiguration' => 'Aheggi n isefka',
+'exif-ycbcrsubsampling' => 'Atug n adu-isefka n ulemmec n Y ar C',
+'exif-ycbcrpositioning' => 'Aselfu n Y d C',
+'exif-xresolution' => 'Tabadut taglawit',
+'exif-yresolution' => 'Tabadut taratakt',
+'exif-stripoffsets' => 'Asun n isefka n tugna',
+'exif-rowsperstrip' => 'Amḍan n ijerriden s tasfift',
+'exif-stripbytecounts' => 'Tiddi n itamḍanen s tasfift',
+'exif-jpeginterchangeformat' => 'Ideg n SOI JPEG',
+'exif-jpeginterchangeformatlength' => 'Tiddi s itamḍanen n isefka JPEG',
+'exif-whitepoint' => 'Tiniskit n uqqa amellal',
+'exif-primarychromaticities' => 'Tiniskit n tizwaranin',
+'exif-referenceblackwhite' => 'Azalen n tamselɣut aberkan d umellal',
+'exif-datetime' => 'Azmez n ubeddel',
+'exif-imagedescription' => 'Aglam n tugna',
+'exif-make' => 'Amakras n taweṣṣaft',
+'exif-model' => 'Talɣa n taweṣṣaft',
+'exif-software' => 'Aseɣẓan yetseqdecen',
+'exif-artist' => 'Ameskar',
+'exif-copyright' => 'Amli n uzref n umeskar',
+'exif-exifversion' => 'Lqem EXIF',
+'exif-flashpixversion' => 'Lqem FlashPix',
+'exif-colorspace' => 'Tallunt n tiniskit',
+'exif-componentsconfiguration' => 'Anamek n yal isger',
+'exif-compressedbitsperpixel' => 'Askar n usekkusem n tugna',
+'exif-pixelydimension' => 'Tehri n tugna',
+'exif-pixelxdimension' => 'Taɣwzi n tugna',
+'exif-usercomment' => 'Iwenniten n useqdac',
+'exif-relatedsoundfile' => 'Afaylu n eslu yeqqnen',
+'exif-datetimeoriginal' => 'Azmez n tuddma tamezwarut',
+'exif-datetimedigitized' => 'Azmez n usemḍen',
+'exif-subsectime' => 'Azmez n ubeddel',
+'exif-subsectimeoriginal' => 'Azmez n tuddma tamezwarut',
+'exif-subsectimedigitized' => 'Azmez n usemḍen',
+'exif-exposuretime' => 'Akud n timzikent',
+'exif-exposuretime-format' => '$1 tas ($2 tas)',
+'exif-fnumber' => 'Alday',
+'exif-exposureprogram' => 'Ahil n timzikent',
+'exif-aperturevalue' => 'Alday n APEX',
+'exif-exposurebiasvalue' => 'Aseɣti n timzikent',
+'exif-maxaperturevalue' => 'Alday afellay',
+'exif-subjectdistance' => 'Ameccaq n usentel',
+'exif-meteringmode' => 'Askar n usket',
+'exif-lightsource' => 'Aɣbalu n tafat',
+'exif-flash' => 'Lebṛaq',
+'exif-focallength' => 'Taɣwzi n usaḍas',
+'exif-subjectarea' => 'Asun n usentel',
+'exif-flashenergy' => 'Tanezmart n lebṛaq',
+'exif-focalplanexresolution' => 'Tabadut taglawit n uɣawas asaḍas',
+'exif-focalplaneyresolution' => 'Tabadut taratakt n uɣawas asaḍas',
+'exif-focalplaneresolutionunit' => 'Aferdis n tabadut n uɣawas asaḍas',
+'exif-subjectlocation' => 'Asideg n usentel',
+'exif-exposureindex' => 'Amatar n timzikent',
+'exif-sensingmethod' => 'Tawsit n umaṭṭaf',
+'exif-filesource' => 'Aɣbal n ufaylu',
+'exif-scenetype' => 'Tawsit n usayes',
+'exif-worldregiondest' => 'Timnaḍin n umaḍal yebeqqeḍen',
+'exif-countrydest' => 'Timura yebeqqeḍen',
+'exif-countrycodedest' => 'Tangalt n tamurt yebeqqeḍen',
+'exif-provinceorstatedest' => 'Tamnaṭ naɣ Tamurt yebeqqeḍen',
+'exif-citydest' => 'Tamdint yebeqqeḍen',
+'exif-sublocationdest' => 'Aḥric n temdint yebeqqeḍen',
+'exif-objectname' => 'Azwel amectuḥ',
+'exif-specialinstructions' => 'Tinaḍi tusligin',
+'exif-headline' => 'Azwel',
+'exif-credit' => 'Asmad / imefki',
+'exif-source' => 'Aɣbalu',
+'exif-editstatus' => 'Aẓayer amaẓrag n tugna',
+'exif-urgency' => 'Lḥir',
+'exif-fixtureidentifier' => 'Isem n uferdis aslagan',
+'exif-locationdest' => 'Amḍiq yebeqqeḍen',
+'exif-locationdestcode' => 'Tangalt n umḍiq yebeqqeḍen',
+'exif-contact' => 'Tilɣa n unermis',
+'exif-writer' => 'Ameskar',
+'exif-languagecode' => 'Tutlayt',
+'exif-iimversion' => 'Lqem n IIM',
+'exif-iimcategory' => 'Taggayt',
+'exif-iimsupplementalcategory' => 'Taggayin timarnanin',
+'exif-datetimeexpires' => 'Ur tseqdac ara sakin',
+'exif-datetimereleased' => 'Tuffɣa ass n',
+'exif-originaltransmissionref' => 'Tangalt n usideg n tuzzna tamezwarut',
+'exif-identifier' => 'Asulay',
 
 'exif-meteringmode-255' => 'Nniḍen',
 
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Kilometr deg ssaɛa',
+'exif-gpsspeed-m' => 'Miles deg usrag',
+'exif-gpsspeed-n' => 'Tikerrist',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'Ikilumetren',
+'exif-gpsdestdistance-m' => 'igimen',
+'exif-gpsdestdistance-n' => 'Miles iwlalen',
+
+'exif-gpsdop-good' => 'Tamellayt ($1)',
+'exif-gpsdop-moderate' => 'Tallalt ($1)',
+
+'exif-objectcycle-a' => 'Tanzayt kan',
+'exif-objectcycle-p' => 'Tameddit kan',
+'exif-objectcycle-b' => 'Tanzayt d tameddit',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Anamud n tidett',
+'exif-gpsdirection-m' => 'Anamud adkiran',
+
+'exif-ycbcrpositioning-1' => 'Agwans',
+'exif-ycbcrpositioning-2' => 'Azdi-sideg',
+
+'exif-dc-contributor' => 'Imttekkiyen',
+'exif-dc-coverage' => 'Azrag allunan naɣ akudan n umedia',
+'exif-dc-date' => 'Azmez',
+'exif-dc-publisher' => 'Amaẓrag',
+'exif-dc-relation' => 'Imediaten iqqenen',
+'exif-dc-rights' => 'Izerfan',
+'exif-dc-source' => 'Aɣbalu umedia',
+'exif-dc-type' => 'Tawsit n umedia',
+
+'exif-rating-rejected' => 'Yerrad',
+
+'exif-isospeedratings-overflow' => 'Ameqqṛan ugar 65535',
+
+'exif-iimcategory-ace' => 'Tiẓuṛiyin, idles d amzel',
+'exif-iimcategory-clj' => 'Anɣa d uṣaḍuf',
+'exif-iimcategory-dis' => 'Tiwaɣin d timedriyin',
+'exif-iimcategory-fin' => 'Tadamsa d tidyanin',
+'exif-iimcategory-edu' => 'Asileɣ',
+'exif-iimcategory-evn' => 'Tawennaṭ',
+'exif-iimcategory-hth' => 'Tadawsa',
+'exif-iimcategory-hum' => 'Aramsu alsi',
+'exif-iimcategory-lab' => 'Amahil',
 
 # External editor support
 'edit-externally' => 'Beddel afaylu-yagi s usnas aberrani.',
@@ -1557,9 +2467,10 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 # E-mail address confirmation
 'confirmemail' => 'Sentem tansa n e-mail',
 'confirmemail_noemail' => 'Ur tesɛiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen n wemseqdac]] inek.',
-'confirmemail_text' => 'Deg wiki-yagi, yessefk ad tvalidiḍ tansa n email inek
-qbel ad tesseqdceḍ iḍaɣaren n email. Tella taqeffalt d akessar, wekki fell-as
-iwakken yettwazen ungal n usentem semail. Email-nni yesɛa azady, ldi-t.',
+'confirmemail_text' => '{{SITENAME}} yeḥweǧ aseɣbel n tansa e-mail inek/inem uqbel ad sexdemeḍ tanfa n tirawt.
+Seqdec taqeffalt ddaw-agi iwakken ad cegɛeḍ e-mail n uragag ar tansa e-mail inek/inem.
+Tirawt at sɛu azday deg-es tangalt. Tzemreḍ at seqdeceḍ tikkelt kan deg talast n ukud ;
+llid azday agi deg iminig iwakken ad sergegeḍ tansa e-mail inek/inem.',
 'confirmemail_pending' => 'Yettwazen-ak yagi ungal n usentem; lukan txelqeḍ isem wemseqdac tura kan,
 ahat yessefk ad tegguniḍ cwiṭ qbel ad tɛreḍeḍ ad testeqsiḍ ɣef ungal amaynut.',
 'confirmemail_send' => 'Azen-iyi-d angal n usentem s e-mail iwakken ad snetmeɣ.',
@@ -1567,30 +2478,36 @@ ahat yessefk ad tegguniḍ cwiṭ qbel ad tɛreḍeḍ ad testeqsiḍ ɣef ungal
 'confirmemail_oncreate' => 'Angal n usentem yettwazen ar tansa n e-mail inek.
 Yessefk ad tesseqdceḍ angal-agi iwakken ad tkecmeḍ, meɛna yessefk a t-tefkeḍ
 iwakken ad xedmen yiḍaɣaren n email deg wiki-yagi.',
-'confirmemail_sendfailed' => 'Ur yezmir ara ad yazen asentem n email. Ssenqed tansa n email inek.
+'confirmemail_sendfailed' => '{{SITENAME}} ur yezmir ara ad yazen asentem n email.
+Ssenqed tansa n email inek.
 
-Email yuɣal-d: $1',
+Ahil n uzzun n e-mail yuɣal-d s-izen agi : $1',
 'confirmemail_invalid' => 'Angal n usentem mačči ṣaḥiḥ. Waqila yemmut.',
 'confirmemail_needlogin' => 'Yessefk $1 iwakken tesnetmeḍ tansa n email inek.',
-'confirmemail_success' => 'Asentem n tansa n email inek yekfa. Tura tzemreḍ ad tkecmeḍ.',
+'confirmemail_success' => 'Tansa e-mail inek/inem tergeg.
+Tura tzemreḍ ad [[Special:UserLogin|qqeneḍ]].',
 'confirmemail_loggedin' => 'Asentem n tansa n email inek yekfa tura.',
 'confirmemail_error' => 'Yella ugur s usmekti n usentem inek.',
 'confirmemail_subject' => 'Asentem n tansa n email seg {{SITENAME}}',
-'confirmemail_body' => 'Amdan, waqila d kečč, seg tansa IP $1, yexleq
-isem n wemseqdac "$2" s tansa n e-mail deg {{SITENAME}}.
+'confirmemail_body' => 'Amdan, ahat d kečč/kem, seg tansa IP $1,
+yexleq amiḍan "$2" s tansa n e-mail deg {{SITENAME}}.
 
-Iwakken tbeyyneḍ belli isem n wemseqdac inek u terreḍ
-iḍaɣaren n email ad xdemen deg {{SITENAME}}, ldi azday agi:
+Iwakken ad sergegeḍ amiḍan agi d-win-inek/inem dɣa iwakken
+an sermed tiwura n tirawt deg {{SITENAME}},
+ilaq ad lkemeḍ aseɣwen agi deg iminig :
 
 $3
 
-Lukan mačči d *kečč*, ur teḍfireḍ ara azday. Angal n usentem-agi
-ad yemmut ass $4.',
+Ma mačči d *kečč/kem*, ilaq ad lkemeḍ aseɣwen agi deg iminig :
+
+$5
+
+Angal n usentem-agi ad yemmut ass $4.',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Yettwakkes assekcam n isebtar seg wiki tiyaḍ]',
-'scarytranscludefailed' => '[Ur yezmir ara a d-yawi talɣa n $1; suref-aɣ]',
-'scarytranscludetoolong' => '[URL d aɣezfan bezzaf; suref-aɣ]',
+'scarytranscludefailed' => '[Ur yezmir ara a d-yawi talɣa n $1]',
+'scarytranscludetoolong' => '[URL agi uffay aṭas]',
 
 # Delete conflict
 'deletedwhileediting' => 'Aɣtal: Asebter-agi yettumḥa qbel ad tebdiḍ a t-tbeddleḍ!',
@@ -1600,8 +2517,13 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'recreate' => 'Ɛiwed xleq',
 
 # action=purge
+'confirm_purge_button' => 'Seɣbel',
 'confirm-purge-top' => 'Mḥu lkac n usebter-agi?',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'Seɣbel',
+'confirm-unwatch-button' => 'Seɣbel',
+
 # Multipage image navigation
 'imgmultipageprev' => '← asebter ssabeq',
 'imgmultipagenext' => 'asebter ameḍfir →',
@@ -1639,8 +2561,8 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 Ɛreḍ pre-timeẓriwt tamagnut.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Ibeddlen imaynuten ɣef $1 tisinin ahat ur ttbanen ara deg wumuɣ-agi.',
-'lag-warn-high' => 'Database tɛeṭṭel aṭas, ibeddlen imaynuten ɣef $1 tisinin ahat ur ttbanen ara deg wumuɣ-agi.',
+'lag-warn-normal' => 'Ibeddelen n ddaw n $1 {{PLURAL:$1|tasint|tisinin}} ur ttbanen ara deg umuɣ-agi.',
+'lag-warn-high' => 'Acku af talalut taxatart n uqeddac n taffa n isefka, ibeddelen n ddaw n $1 {{PLURAL:$1|tasint|tisinin}} ur ttbanen ara deg umuɣ-agi.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Mebla isebtar "Amyannan", umuɣ n uɛessi inek ɣur-s {{PLURAL:$1|1 wezwel|$1 yizwalen}}.',
@@ -1666,7 +2588,7 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'duplicate-defaultsort' => 'Ɣur-wet : tasarut n ufran m-ulac « $2 » atsefεej tasarut n uqbel « $1 ».',
 
 # Special:Version
-'version' => 'Tasiwelt',
+'version' => 'Lqem',
 'version-specialpages' => 'isebtar usligen',
 
 # Special:SpecialPages
@@ -1685,4 +2607,15 @@ 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ḍ]] :',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|tasint|tisinin}}',
+'duration-minutes' => '$1 {{PLURAL:$1|tamrect|timercin}}',
+'duration-hours' => '$1 {{PLURAL:$1|asrag|isragen}}',
+'duration-days' => '$1 {{PLURAL:$1|ass|ussan}}',
+'duration-weeks' => '$1 {{PLURAL:$1|imalas|imulas}}',
+'duration-years' => '$1 {{PLURAL:$1|aseggwas|iseggwasen}}',
+'duration-decades' => '$1 {{PLURAL:$1|amrawass|amrawussan}}',
+'duration-centuries' => '$1 {{PLURAL:$1|timiḍi|timiḍa}}',
+'duration-millennia' => '$1 {{PLURAL:$1|agimseggwas|agimseggwasen}}',
+
 );
index bca56ac..6aeebf5 100644 (file)
@@ -408,7 +408,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Джыпсту уикӀыжауэ щыт.'''
 
-Уихьэжьыфыну {{grammar:genitive|{{SITENAME}}}} зыкъумгъэцӀыху иэ [[Special:UserLogin|зыкъегъэцӀыхун аргуэру]] уи цӀэмкӀэ иэ нэмыщӀымкӀэ.
+Уихьэжьыфыну {{grammar:genitive|{{SITENAME}}}} зыкъумгъэцӀыху иэ <span class='plainlinks'>[$1 зыкъегъэцӀыхун аргуэру]</span> уи цӀэмкӀэ иэ нэмыщӀымкӀэ.
 НапэкӀуэцӀ гуэрэхэр япэми хуэду къикӀыфынухэ, системэм уимыкӀыжьа хуэду. Апхуэду щымытын щхьэкӀэ браузэр кэшыр къэгъэщӀырыщӀын хуэй.",
 'welcomecreation' => '== Къеблагъэ, $1! ==
 Уи аккаунтыр хьэзырщ.
@@ -939,8 +939,6 @@ $1",
 'search-interwiki-caption' => 'Проэкт къыдэщӀхэр',
 'search-interwiki-default' => '$1 къыхэкӀар:',
 'search-interwiki-more' => '(иджыри)',
-'search-mwsuggest-enabled' => 'чэнджэш иӀэу',
-'search-mwsuggest-disabled' => 'чэнджэщыншэу',
 'nonefound' => "'''Гулъытыгъуэ.''' Тэрэзу имытхамэ узхуэныкъуэр, лъыхъуэгъуэр лъэныкъу хъуамкӀи ирегъэкӀуэкӀ. Къэгъэсэбэп ''all:'' пыгъувэгъуэр, зэгъэзэхуэгъуэ иӀэн щхьэкӀэ (хэтхэм я тепсэлъыхьыныгъэр, щапхъэхэр, нымыщӀхэр джоуэ хиубыдэным щхьэ), иэ узхуэныкъуэ лъэныкъуэр итхэ.",
 'search-nonefound' => 'Узлъыхъуэм техуэу щыӀэкъым.',
 'powersearch' => 'Убгъуауэ лъыхъу',
index 6625e3f..57caf22 100644 (file)
 
 $messages = array(
 'underline-always' => 'Bambala nyonso',
-'underline-never'  => 'Ata mbala mosi ve',
+'underline-never' => 'Ata mbala mosi ve',
 
 # Dates
-'sunday'        => 'Lumîngu',
-'monday'        => 'Kimosi',
-'tuesday'       => 'Kizôle',
-'wednesday'     => 'Kitatu',
-'thursday'      => 'Kîya',
-'friday'        => 'Kitânu',
-'saturday'      => 'Sabala',
-'sun'           => 'Lum',
-'mon'           => 'ki-1',
-'tue'           => 'ki-2',
-'wed'           => 'ki-3',
-'thu'           => 'ki-4',
-'fri'           => 'ki-5',
-'sat'           => 'Sab',
-'january'       => 'ngônda ya ntete',
-'february'      => 'ngônda ya zôle',
-'march'         => 'ngônda ya tatu',
-'april'         => 'ngônda ya yiya',
-'may_long'      => 'ngônda ya tânu',
-'june'          => 'ngônda ya sambânu',
-'july'          => 'ngônda ya nsambwâdi',
-'august'        => 'ngônda ya nâna',
-'september'     => 'ngônda ya yivwa',
-'october'       => 'ngônda ya kûmi',
-'november'      => 'ngônda ya kûmi na mosi',
-'december'      => 'ngôida ya kûmi na zôle',
-'january-gen'   => 'ngônda ya ntete',
-'february-gen'  => 'ngônda ya zôle',
-'march-gen'     => 'ngônda ya tatu',
-'april-gen'     => 'ngônda ya yiya',
-'may-gen'       => 'ngônda ya tânu',
-'june-gen'      => 'ngônda ya sambânu',
-'july-gen'      => 'ngônda ya nsambwâdi',
-'august-gen'    => 'ngônda ya nâna',
+'sunday' => 'Lumîngu',
+'monday' => 'Kimosi',
+'tuesday' => 'Kizôle',
+'wednesday' => 'Kitatu',
+'thursday' => 'Kîya',
+'friday' => 'Kitânu',
+'saturday' => 'Sabala',
+'sun' => 'Lum',
+'mon' => 'ki-1',
+'tue' => 'ki-2',
+'wed' => 'ki-3',
+'thu' => 'ki-4',
+'fri' => 'ki-5',
+'sat' => 'Sab',
+'january' => 'ngônda ya ntete',
+'february' => 'ngônda ya zôle',
+'march' => 'ngônda ya tatu',
+'april' => 'ngônda ya yiya',
+'may_long' => 'ngônda ya tânu',
+'june' => 'ngônda ya sambânu',
+'july' => 'ngônda ya nsambwâdi',
+'august' => 'ngônda ya nâna',
+'september' => 'ngônda ya yivwa',
+'october' => 'ngônda ya kûmi',
+'november' => 'ngônda ya kûmi na mosi',
+'december' => 'ngôida ya kûmi na zôle',
+'january-gen' => 'ngônda ya ntete',
+'february-gen' => 'ngônda ya zôle',
+'march-gen' => 'ngônda ya tatu',
+'april-gen' => 'ngônda ya yiya',
+'may-gen' => 'ngônda ya tânu',
+'june-gen' => 'ngônda ya sambânu',
+'july-gen' => 'ngônda ya nsambwâdi',
+'august-gen' => 'ngônda ya nâna',
 'september-gen' => 'ngônda ya yivwa',
-'october-gen'   => 'ngônda ya kûmi',
-'november-gen'  => 'ngônda ya kûmi na mosi',
-'december-gen'  => 'ngônda ya kûmi na zôle',
-'jan'           => 'ng1',
-'feb'           => 'ng2',
-'mar'           => 'ng3',
-'apr'           => 'ng4',
-'may'           => 'ng5',
-'jun'           => 'ng6',
-'jul'           => 'ng7',
-'aug'           => 'ng8',
-'sep'           => 'ng9',
-'oct'           => 'ng10',
-'nov'           => 'ng11',
-'dec'           => 'ng12',
+'october-gen' => 'ngônda ya kûmi',
+'november-gen' => 'ngônda ya kûmi na mosi',
+'december-gen' => 'ngônda ya kûmi na zôle',
+'jan' => 'ng1',
+'feb' => 'ng2',
+'mar' => 'ng3',
+'apr' => 'ng4',
+'may' => 'ng5',
+'jun' => 'ng6',
+'jul' => 'ng7',
+'aug' => 'ng8',
+'sep' => 'ng9',
+'oct' => 'ng10',
+'nov' => 'ng11',
+'dec' => 'ng12',
 
 # Categories related messages
-'pagecategories'  => '{{PLURAL:$1|Kalasi|Bakalasi}}',
+'pagecategories' => '{{PLURAL:$1|Kalasi|Bakalasi}}',
 'category_header' => 'Mikanda na kalasi "$1"',
 
 'article' => 'Pagina contenta continens',
-'cancel'  => 'Katula',
-'mypage'  => 'Lukaya ya munu',
-'mytalk'  => 'Disolo ya munu',
-'and'     => '&#32;mpe',
+'cancel' => 'Katula',
+'mypage' => 'Lukaya ya munu',
+'mytalk' => 'Disolo ya munu',
+'and' => '&#32;mpe',
 
 # Cologne Blue skin
-'qbfind'   => 'Sosa',
+'qbfind' => 'Sosa',
 'qbbrowse' => 'Tala',
-'qbedit'   => 'Soba',
+'qbedit' => 'Soba',
 
 # Vector skin
 'vector-action-delete' => 'Kufwa',
-'vector-action-move'   => 'Nata',
-'vector-view-edit'     => 'Sonika',
-'vector-view-history'  => 'Tala bansoba',
-'vector-view-view'     => 'Tânga',
-
-'errorpagetitle'   => 'Foti',
-'returnto'         => 'Vutukila $1',
-'help'             => 'Nsadisa',
-'search'           => 'Sosa',
-'searchbutton'     => 'Sosa',
-'searcharticle'    => 'Kwenda',
-'history'          => 'Bansoba ya mukanda',
-'history_short'    => 'Bansoba',
-'view'             => 'Tala',
-'edit'             => 'Sonika',
-'editthispage'     => 'Soba mukanda yayi',
-'delete'           => 'Kufwa',
-'deletethispage'   => 'Kufwa mukanda yayi',
+'vector-action-move' => 'Nata',
+'vector-view-edit' => 'Sonika',
+'vector-view-history' => 'Tala bansoba',
+'vector-view-view' => 'Tânga',
+
+'errorpagetitle' => 'Foti',
+'returnto' => 'Vutukila $1',
+'help' => 'Nsadisa',
+'search' => 'Sosa',
+'searchbutton' => 'Sosa',
+'searcharticle' => 'Kwenda',
+'history' => 'Bansoba ya mukanda',
+'history_short' => 'Bansoba',
+'view' => 'Tala',
+'edit' => 'Sonika',
+'editthispage' => 'Soba mukanda yayi',
+'delete' => 'Kufwa',
+'deletethispage' => 'Kufwa mukanda yayi',
 'talkpagelinktext' => 'Disolo',
-'talk'             => 'Disolo',
-'views'            => 'Bantadilu',
-'toolbox'          => 'Bisadilu',
-'viewtalkpage'     => 'Tala disolo',
-'otherlanguages'   => 'Bandinga ya nkaka',
-'redirectedfrom'   => '(Balulama tuka $1)',
-'lastmodifiedat'   => 'Mukânda yayi me sobama na kilumbu $1 na ngûnga $2',
-'jumpto'           => 'Pamuka na:',
-'jumptosearch'     => 'nsosa',
+'talk' => 'Disolo',
+'views' => 'Bantadilu',
+'toolbox' => 'Bisadilu',
+'viewtalkpage' => 'Tala disolo',
+'otherlanguages' => 'Bandinga ya nkaka',
+'redirectedfrom' => '(Balulama tuka $1)',
+'lastmodifiedat' => 'Mukânda yayi me sobama na kilumbu $1 na ngûnga $2',
+'jumpto' => 'Pamuka na:',
+'jumptosearch' => 'nsosa',
 
 # 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).
-'currentevents'        => 'Mambu ya mpa',
-'currentevents-url'    => 'Project:Mambu ya mpa',
-'mainpage'             => 'Lukaya ya mfumu',
+'currentevents' => 'Mambu ya mpa',
+'currentevents-url' => 'Project:Mambu ya mpa',
+'mainpage' => 'Lukaya ya mfumu',
 'mainpage-description' => 'Lukaya ya mfumu',
 
-'retrievedfrom'           => 'Receptum de "$1"',
-'youhavenewmessages'      => 'Nge kele na $1 ($2).',
-'newmessageslink'         => 'bansangu ya yimpa',
+'retrievedfrom' => 'Receptum de "$1"',
+'youhavenewmessages' => 'Nge kele na $1 ($2).',
+'newmessageslink' => 'bansangu ya yimpa',
 'youhavenewmessagesmulti' => 'Nge kele na bansangu ya yimpa kuna $1',
-'editsection'             => 'soba',
-'editold'                 => 'soba',
-'editlink'                => 'soba',
-'editsectionhint'         => 'Soba kibuku: $1',
-'red-link-title'          => '$1 (mukanda kele ve)',
+'editsection' => 'soba',
+'editold' => 'soba',
+'editlink' => 'soba',
+'editsectionhint' => 'Soba kibuku: $1',
+'red-link-title' => '$1 (mukanda kele ve)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Mukanda',
+'nstab-main' => 'Mukanda',
 'nstab-mediawiki' => 'Nsangu',
-'nstab-category'  => 'Kalasi',
+'nstab-category' => 'Kalasi',
 
 # Login and logout pages
-'yourname'           => 'Nkûmbu ya nsoniki:',
-'yourpassword'       => 'Mpovo ya kuluta:',
-'login'              => 'Kota',
-'userlogin'          => 'Kota / sala konti',
-'logout'             => 'Basika',
-'userlogout'         => 'Basika',
-'nologin'            => 'Nge kele na konti ve? $1.',
-'nologinlink'        => 'Sala konti',
-'createaccount'      => 'Sala konti',
-'gotaccountlink'     => 'Kota',
+'yourname' => 'Nkûmbu ya nsoniki:',
+'yourpassword' => 'Mpovo ya kuluta:',
+'login' => 'Kota',
+'userlogin' => 'Kota / sala konti',
+'logout' => 'Basika',
+'userlogout' => 'Basika',
+'nologin' => 'Nge kele na konti ve? $1.',
+'nologinlink' => 'Sala konti',
+'createaccount' => 'Sala konti',
+'gotaccountlink' => 'Kota',
 'loginlanguagelabel' => 'Ndinga: $1',
 
 # Edit pages
-'newarticle'     => '(Yimpa)',
-'editing'        => 'Na kusonika $1',
+'newarticle' => '(Yimpa)',
+'editing' => 'Na kusonika $1',
 'editingsection' => 'Na kusonika $1 (kibuku)',
 
 # History pages
 'history-fieldset-title' => 'Monisa bansoba',
-'histfirst'              => 'Ya ntete',
-'histlast'               => 'Ya nsuka',
+'histfirst' => 'Ya ntete',
+'histlast' => 'Ya nsuka',
 
 # Diffs
-'lineno'   => 'Nzila ya $1:',
+'lineno' => 'Nzila ya $1:',
 'editundo' => 'vutula',
 
 # Search results
-'prevn'                          => 'biyita {{PLURAL:$1|$1}}',
-'nextn'                          => 'bilandi {{PLURAL:$1|$1}}',
-'viewprevnext'                   => 'Mona ($1 {{int:pipe-separator}} $2) ($3).',
-'searchprofile-everything'       => 'Nyonso',
+'prevn' => 'biyita {{PLURAL:$1|$1}}',
+'nextn' => 'bilandi {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Mona ($1 {{int:pipe-separator}} $2) ($3).',
+'searchprofile-everything' => 'Nyonso',
 'searchprofile-articles-tooltip' => 'Sosa na $1',
-'searchprofile-project-tooltip'  => 'Sosa na $1',
-'search-result-size'             => '$1 ({{PLURAL:$2|mpovo 1|bampovo $2}})',
-'search-section'                 => '(kibuku $1)',
-'searchall'                      => 'nyonso',
-'powersearch'                    => 'Sosa',
+'searchprofile-project-tooltip' => 'Sosa na $1',
+'search-result-size' => '$1 ({{PLURAL:$2|mpovo 1|bampovo $2}})',
+'search-section' => '(kibuku $1)',
+'searchall' => 'nyonso',
+'powersearch' => 'Sosa',
 
 # Preferences page
 'mypreferences' => 'Konte ya munu',
-'yourlanguage'  => 'Ndinga:',
+'yourlanguage' => 'Ndinga:',
 
 # Recent changes
-'recentchanges'             => 'Bansoba ya yimpa',
+'recentchanges' => 'Bansoba ya yimpa',
 'recentchanges-label-minor' => 'Nsoba yayi kele ya fyoti-fyoti',
-'recentchanges-label-bot'   => 'Nsoba yayi me salama na robo',
-'rcshowhideminor'           => '$1 bansoba ya fyoti-fyoti',
-'rcshowhidemine'            => '$1 bansoba na munu',
-'diff'                      => 'nsoba',
-'hist'                      => 'nsoba',
-'show'                      => 'Monisa',
-'minoreditletter'           => 'f',
+'recentchanges-label-bot' => 'Nsoba yayi me salama na robo',
+'rcshowhideminor' => '$1 bansoba ya fyoti-fyoti',
+'rcshowhidemine' => '$1 bansoba na munu',
+'diff' => 'nsoba',
+'hist' => 'nsoba',
+'show' => 'Monisa',
+'minoreditletter' => 'f',
 
 # File description page
 'filehist-datetime' => 'Kilumbu/Ngûnga',
-'filehist-user'     => 'Nsoniki',
+'filehist-user' => 'Nsoniki',
 
 # Random page
 'randompage' => 'Lukaya na kintulumukini',
 
 # Miscellaneous special pages
 'ncategories' => '{{PLURAL:$1|kalasi|bakalasi}} $1',
-'newpages'    => 'Mikanda ya yimpa',
+'newpages' => 'Mikanda ya yimpa',
 
 # Special:AllPages
 'alphaindexline' => '$1 tî $2',
@@ -207,8 +207,8 @@ $messages = array(
 
 # Contributions
 'mycontris' => 'Makabu ya munu',
-'month'     => 'Katuka ngônda:',
-'year'      => 'Katuka mvula:',
+'month' => 'Katuka ngônda:',
+'year' => 'Katuka mvula:',
 
 'sp-contributions-talk' => 'disolo',
 
@@ -216,30 +216,30 @@ $messages = array(
 'whatlinkshere' => 'Balukaya ke songa awa',
 
 # Move page
-'movearticle'    => 'Nata lukaya:',
-'newtitle'       => 'Nkûmbu ya nkaka:',
-'movepagebtn'    => 'Nata lukaya',
-'pagemovedsub'   => 'Kunata me nunga',
+'movearticle' => 'Nata lukaya:',
+'newtitle' => 'Nkûmbu ya nkaka:',
+'movepagebtn' => 'Nata lukaya',
+'pagemovedsub' => 'Kunata me nunga',
 'movepage-moved' => '\'\'\'"$1" me natama na "$2"\'\'\'',
-'articleexists'  => 'Lukaya ya nkaka kele na nkûmbu yango, to nkûmbu yango kele ya mbote ve.
+'articleexists' => 'Lukaya ya nkaka kele na nkûmbu yango, to nkûmbu yango kele ya mbote ve.
 Sôla nkûmbu ya nkaka.',
-'movereason'     => 'Samu:',
+'movereason' => 'Samu:',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Mukanda ya munu',
-'tooltip-pt-mytalk'   => 'Disolo ya munu',
-'tooltip-pt-logout'   => 'Basika',
-'tooltip-search'      => 'Sosa na {{SITENAME}}',
-'tooltip-undo'        => '"Vutula" ke vutula nsoba yayi mpe yawu ke monisa lumoni ya kusoba. Nge lênda sonika kikuma ya mvutula.',
+'tooltip-pt-mytalk' => 'Disolo ya munu',
+'tooltip-pt-logout' => 'Basika',
+'tooltip-search' => 'Sosa na {{SITENAME}}',
+'tooltip-undo' => '"Vutula" ke vutula nsoba yayi mpe yawu ke monisa lumoni ya kusoba. Nge lênda sonika kikuma ya mvutula.',
 
 # 'all' in various places, this might be different for inflected languages
 'namespacesall' => 'nyonso',
-'monthsall'     => 'nyonso',
+'monthsall' => 'nyonso',
 
 # Table pager
-'table_pager_next'  => 'Lukaya ya kulanda',
-'table_pager_prev'  => 'Lukaya ya kuyita',
+'table_pager_next' => 'Lukaya ya kulanda',
+'table_pager_prev' => 'Lukaya ya kuyita',
 'table_pager_first' => 'Lukaya ya ntete',
-'table_pager_last'  => 'Lukaya ya nsuka',
+'table_pager_last' => 'Lukaya ya nsuka',
 
 );
index 69e8cb8..04088c4 100644 (file)
@@ -234,7 +234,7 @@ $messages = array(
 'jumptonavigation' => 'رہنمائی',
 'jumptosearch' => 'تلاش',
 'view-pool-error' => 'معذرت: تمام سرورا موجودہ وختہ اِضافی بوجھ شیر.
ہت زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان 
و زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان 
 برائے مہربانی! صفحو لوڑیکو بچے دوبارہ کوشش کوریکاری پروشٹی پھوکرو انتظار کورے.
 
 $1',
@@ -386,7 +386,7 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 
 # Login and logout pages
 'logouttext' => "'''ھنیسے تو خارج بیتی آسوس'''<br />
-تو خفی الاسم {{SITENAME}}  استعمال جاری لاکھیکو بوس، یا دوبارہ ھیہ نامو یا مختلف نامان سورا داخل دی بیکو بوس۔  ھیہ یاد آوری کورے کہ ای کما صفحات ھش [[Special:UserLogin|دوباری لاگن بوس]] غیچھی گونی کہ تو ھنیسے خارج نو بیتی آسوس، کلہ پت کہ تو تان تفصحہ (براؤزرو) ابطن (cache) صاف نوکوروس۔\",",
+تو خفی الاسم {{SITENAME}}  استعمال جاری لاکھیکو بوس، یا دوبارہ ھیہ نامو یا مختلف نامان سورا داخل دی بیکو بوس۔  ھیہ یاد آوری کورے کہ ای کما صفحات ھش <span class='plainlinks'>[\$1 دوباری لاگن بوس]</span> غیچھی گونی کہ تو ھنیسے خارج نو بیتی آسوس، کلہ پت کہ تو تان تفصحہ (براؤزرو) ابطن (cache) صاف نوکوروس۔\",",
 'welcomecreation' => '== رحمت عزیز چترالی تتے خوشان گیے ریران، $1 ! ==
 
 تہ  کھاتہ ساوزینو بیتی شیر تو تان [[Special:Preferences|{{SITENAME}} ترجیحات]]ن مرتب کوریکو مو روخڅے.',
@@ -631,8 +631,6 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'search-interwiki-caption' => 'ملگیری منصوبہ',
 'search-interwiki-default' => '$1 نتائج:',
 'search-interwiki-more' => '(مزید)',
-'search-mwsuggest-enabled' => 'تجویزان سوم جستہ',
-'search-mwsuggest-disabled' => 'کیہ تجویز نیکی',
 'searchrelated' => 'متعلقہ',
 'searchall' => 'کھل',
 'showingresultsheader' => "{{PLURAL:$5|نتیجہ'''$1''' of '''$3'''|نتیجہ'''$1 - $2''' of '''$3'''}} بچے'''$4'''",
@@ -715,7 +713,7 @@ HTML tags لوڑے.',",
 'recentchangeslinked-summary' => "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ چوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم چوکی شینی<br />
 ساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
 'recentchangeslinked-page' => 'کھوار ویکیپیڈیو منصوبو صفحو لوڑے',
-'recentchangeslinked-to' => 'Ú©Ú¾Ù\84Ù\88Ù\84اÙ\88 Ø¨Û\8cرÙ\88 ØµÙ\81Ø­Ù\88 Ø¨Ø¬Ø§Û\8cا Ú¾Ù\85Ù\88 Ø³Ù\88Ù\85 Ú\86Ù\88Ú©Û\8cرÙ\88 ØµÙ\81Ø­Ù\88 Ù\86Ù\88غ ØªØ¨Ø¯Û\8cÙ\84Û\8cاÙ\86 Ù¾Ø´Ø§Ù\88Û\92',
+'recentchangeslinked-to' => 'کھولاو بیرو صفحو بجایا ھمو سوم چوکیرو صفحو نوغ تبدیلیان پشاوے',
 
 # Upload
 'upload' => 'فائل انځاوے',
index 28cdd6e..08bf1de 100644 (file)
 
 $fallback = 'tr';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Xısusi',
+       NS_TALK             => 'Werênayış',
+       NS_USER             => 'Karber',
+       NS_USER_TALK        => 'Karber_werênayış',
+       NS_PROJECT_TALK     => '$1_werênayış',
+       NS_FILE             => 'Dosye',
+       NS_FILE_TALK        => 'Dosya_werênayış',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_werênayış',
+       NS_TEMPLATE         => 'Şablon',
+       NS_TEMPLATE_TALK    => 'Şablon_werênayış',
+       NS_HELP             => 'Peşti',
+       NS_HELP_TALK        => 'Peşti_werênayış',
+       NS_CATEGORY         => 'Kategoriye',
+       NS_CATEGORY_TALK    => 'Kategori_werênayış',
+);
+
+$namespaceAliases = array(
+       // Turkish namespace names.
+       'Medya'              => NS_MEDIA,
+       'Özel'               => NS_SPECIAL,
+       'Tartışma'           => NS_TALK,
+       'Kullanıcı'          => NS_USER,
+       'Kullanıcı_mesaj'    => NS_USER_TALK,
+       '$1_tartışma'        => NS_PROJECT_TALK,
+       'Dosya'              => NS_FILE,
+       'Dosya_tartışma'     => NS_FILE_TALK,
+       'MediaWiki_tartışma' => NS_MEDIAWIKI_TALK,
+       'Şablon'             => NS_TEMPLATE,
+       'Şablon_tartışma'    => NS_TEMPLATE_TALK,
+       'Yardım'             => NS_HELP,
+       'Yardım_tartışma'    => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_tartışma'  => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Bınê girey de xete bonce:',
@@ -409,7 +447,7 @@ Sebebê ho ''$2'' dero.",
 # Login and logout pages
 'logouttext' => "'''Sıma nıka cı ra veciyê.'''
 
-Sıma şikinê dızdêni {{SITENAME}} de dewam kerê, ya jê eyni karberi ya ki jê jüyê de bini [[Special:UserLogin|oncia cıkuyê]].
+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.
@@ -728,8 +766,6 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşikinê
 'search-interwiki-caption' => 'Procê bıray',
 'search-interwiki-default' => '$1 neticey:',
 'search-interwiki-more' => '(zafêr)',
-'search-mwsuggest-enabled' => 'ebe teklifu',
-'search-mwsuggest-disabled' => 'teklifi çinê',
 'search-relatedarticle' => 'alaqedar',
 'searchrelated' => 'alaqedar',
 'searchall' => 'pêro',
index acbf8de..3bd73b1 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Arabic script) (‫قازاقشا (تٴوتە)‬)
+/** Kazakh (Arabic script) (قازاقشا (تٴوتە)‏)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -180,130 +180,130 @@ $dateFormats = array(
  * This array can be modified at runtime with the LanguageGetMagic hook
  */
 $magicWords = array(
-       'redirect'                => array( '0', '#ايداۋ', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__مازمۇنسىز__', '__مسىز__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__قويماسىز__', '__قسىز__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__مازمۇنداتقىزۋ__', '__مقىزۋ__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__مازمۇنى__', '__مزمن__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بولىدىموندەمەۋ__', '__بولىموندەتكىزبەۋ__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'اعىمداعىاي', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'اعىمداعىاياتاۋى', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'اعىمداعىايىلىكاتاۋى', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'اعىمداعىايجىيىر', 'اعىمداعىايقىسقا', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'اعىمداعىكۇن', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'اعىمداعىكۇن2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'اعىمداعىكۇناتاۋى', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'اعىمداعىجىل', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'اعىمداعىۋاقىت', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'اعىمداعىساعات', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'جەرگىلىكتىاي', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'جەرگىلىكتىاياتاۋى', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'جەرگىلىكتىايىلىكاتاۋى', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'جەرگىلىكتىايجىيىر', 'جەرگىلىكتىايقىسقاشا', 'جەرگىلىكتىايقىسقا', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'جەرگىلىكتىكۇن', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'جەرگىلىكتىكۇن2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'جەرگىلىكتىكۇناتاۋى', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'جەرگىلىكتىجىل', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'جەرگىلىكتىۋاقىت', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'جەرگىلىكتىساعات', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'بەتسانى', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ماقالاسانى', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'فايلسانى', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'قاتىسۋشىسانى', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'وڭدەمەسانى', 'تۇزەتۋسانى', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'بەتاتاۋى', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'بەتاتاۋى2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ەسىماياسى', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ەسىماياسى2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'تالقىلاۋاياسى', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'تالقىلاۋاياسى2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'تاقىرىپبەتى', 'ماقالابەتى', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'تاقىرىپبەتى2', 'ماقالابەتى2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'تولىقبەتاتاۋى', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'تولىقبەتاتاۋى2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'بەتشەاتاۋى', 'استىڭعىبەتاتاۋى', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'بەتشەاتاۋى2', 'استىڭعىبەتاتاۋى2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'نەگىزگىبەتاتاۋى', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'نەگىزگىبەتاتاۋى2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'تالقىلاۋبەتاتاۋى', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'تالقىلاۋبەتاتاۋى2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'تاقىرىپبەتاتاۋى', 'ماقالابەتاتاۋى', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'تاقىرىپبەتاتاۋى2', 'ماقالابەتاتاۋى2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'حبر:', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'بادەل:', 'БӘДЕЛ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'ۋىيكىيسىزحبر:', 'УИКИСІЗХБР:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'نوباي', 'нобай', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'نوباي=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'وڭعا', 'وڭ', 'оңға', 'оң', 'right' ),
-       'img_left'                => array( '1', 'سولعا', 'سول', 'солға', 'сол', 'left' ),
-       'img_none'                => array( '1', 'ەشقانداي', 'جوق', 'ешқандай', 'жоқ', 'none' ),
-       'img_width'               => array( '1', '$1 نۇكتە', '$1 нүкте', '$1px' ),
-       'img_center'              => array( '1', 'ورتاعا', 'ورتا', 'ортаға', 'орта', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'سۇرمەلى', 'сүрмелі', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'سۇرمەسىز', 'сүрмесіз', 'frameless' ),
-       'img_page'                => array( '1', 'بەت=$1', 'بەت $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'تىكتى', 'تىكتىك=$1', 'تىكتىك $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'جىييەكتى', 'жиекті', 'border' ),
-       'img_baseline'            => array( '1', 'تىرەكجول', 'тірекжол', 'baseline' ),
-       'img_sub'                 => array( '1', 'استىلىعى', 'است', 'астылығы', 'аст', 'sub' ),
-       'img_super'               => array( '1', 'ۇستىلىگى', 'ۇست', 'үстілігі', 'үст', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'ۇستىنە', 'үстіне', 'top' ),
-       'img_text_top'            => array( '1', 'ماتىن-ۇستىندە', 'мәтін-үстінде', 'text-top' ),
-       'img_middle'              => array( '1', 'ارالىعىنا', 'аралығына', 'middle' ),
-       'img_bottom'              => array( '1', 'استىنا', 'астына', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'ماتىن-استىندا', 'мәтін-астында', 'text-bottom' ),
-       'int'                     => array( '0', 'ىشكى:', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'توراپاتاۋى', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ەا:', 'ەسىمايا:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'جەرگىلىكتىجاي:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'جەرگىلىكتىجاي2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'سەرۆەر', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'سەرۆەراتاۋى', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'امىرجولى', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'سەپتىگى:', 'سەپتىك:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__تاقىرىپاتىنتۇرلەندىرگىزبەۋ__', '__تاتجوق__', '__اتاۋالماستىرعىزباۋ__', '__ااباۋ__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ماعلۇماتىنتۇرلەندىرگىزبەۋ__', '__ماتجوق__', '__ماعلۇماتالماستىرعىزباۋ__', '__ماباۋ__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'اعىمداعىاپتاسى', 'اعىمداعىاپتا', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'اعىمداعىاپتاكۇنى', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'جەرگىلىكتىاپتاسى', 'جەرگىلىكتىاپتا', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'جەرگىلىكتىاپتاكۇنى', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'تۇزەتۋنومىرٴى', 'نۇسقانومىرٴى', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'تۇزەتۋكۇنى', 'نۇسقاكۇنى', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'تۇزەتۋكۇنى2', 'نۇسقاكۇنى2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'تۇزەتۋايى', 'نۇسقاايى', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'تۇزەتۋجىلى', 'نۇسقاجىلى', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'تۇزەتۋۋاقىتىتاڭباسى', 'نۇسقاۋاقىتتۇيىندەمەسى', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'كوپشەتۇرى:', 'كوپشە:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'تولىقجايى:', 'تولىقجاي:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'تولىقجايى2:', 'تولىقجاي2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'كا1:', 'كىشىارىپپەن1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'با1:', 'باسارىپپەن1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'كا:', 'كىشىارىپپەن:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
-       'uc'                      => array( '0', 'با:', 'باسارىپپەن:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
-       'raw'                     => array( '0', 'قام:', 'ҚАМ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'كورسەتىلەتىناتاۋ', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'ق', 'Қ', 'R' ),
-       'newsectionlink'          => array( '1', '__جاڭابولىمسىلتەمەسى__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'باعدارلامانۇسقاسى', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'جايدىمۇقامداۋ:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'جاكىردىمۇقامداۋ', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'اعىمداعىۋاقىتتۇيىندەمەسى', 'اعىمداعىۋاقىتتۇيىن', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'جەرگىلىكتىۋاقىتتۇيىندەمەسى', 'جەرگىلىكتىۋاقىتتۇيىن', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'باعىتبەلگىسى', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#تىل:', '#ТІЛ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ماعلۇماتتىلى', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ەسىمايابەتسانى:', 'ەابەتسانى:', 'ايابەتسانى:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'اكىمشىسانى', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'سانپىشىمى', 'САНПІШІМІ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'سولعاىعىس', 'سولىعىس', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
-       'padright'                => array( '0', 'وڭعاىعىس', 'وڭىعىس', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
-       'special'                 => array( '0', 'ارنايى', 'арнайы', 'special' ),
-       'defaultsort'             => array( '1', 'ادەپكىسۇرىپتاۋ:', 'ادەپكىساناتسۇرىپتاۋ:', 'ادەپكىسۇرىپتاۋكىلتى:', 'ادەپكىسۇرىپ:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'فايلمەكەنى:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'بەلگى', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__جاسىرىنسانات__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'ساناتتاعىبەتتەر', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'بەتمولشەرى', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#ايداۋ', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__مازمۇنسىز__', '__مسىز__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__قويماسىز__', '__قسىز__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__مازمۇنداتقىزۋ__', '__مقىزۋ__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__مازمۇنى__', '__مزمن__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بولىدىموندەمەۋ__', '__بولىموندەتكىزبەۋ__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'اعىمداعىاي', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'اعىمداعىاياتاۋى', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'اعىمداعىايىلىكاتاۋى', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'اعىمداعىايجىيىر', 'اعىمداعىايقىسقا', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'اعىمداعىكۇن', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'اعىمداعىكۇن2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'اعىمداعىكۇناتاۋى', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'اعىمداعىجىل', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'اعىمداعىۋاقىت', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'اعىمداعىساعات', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'جەرگىلىكتىاي', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'جەرگىلىكتىاياتاۋى', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'جەرگىلىكتىايىلىكاتاۋى', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'جەرگىلىكتىايجىيىر', 'جەرگىلىكتىايقىسقاشا', 'جەرگىلىكتىايقىسقا', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'جەرگىلىكتىكۇن', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'جەرگىلىكتىكۇن2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'جەرگىلىكتىكۇناتاۋى', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'جەرگىلىكتىجىل', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'جەرگىلىكتىۋاقىت', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'جەرگىلىكتىساعات', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'بەتسانى', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ماقالاسانى', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'فايلسانى', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'قاتىسۋشىسانى', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'وڭدەمەسانى', 'تۇزەتۋسانى', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'بەتاتاۋى', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'بەتاتاۋى2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ەسىماياسى', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ەسىماياسى2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'تالقىلاۋاياسى', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'تالقىلاۋاياسى2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'تاقىرىپبەتى', 'ماقالابەتى', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'تاقىرىپبەتى2', 'ماقالابەتى2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'تولىقبەتاتاۋى', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'تولىقبەتاتاۋى2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'بەتشەاتاۋى', 'استىڭعىبەتاتاۋى', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'بەتشەاتاۋى2', 'استىڭعىبەتاتاۋى2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'نەگىزگىبەتاتاۋى', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'نەگىزگىبەتاتاۋى2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'تالقىلاۋبەتاتاۋى', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'تالقىلاۋبەتاتاۋى2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'تاقىرىپبەتاتاۋى', 'ماقالابەتاتاۋى', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'تاقىرىپبەتاتاۋى2', 'ماقالابەتاتاۋى2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'حبر:', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'بادەل:', 'БӘДЕЛ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'ۋىيكىيسىزحبر:', 'УИКИСІЗХБР:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'نوباي', 'нобай', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'نوباي=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'وڭعا', 'وڭ', 'оңға', 'оң', 'right' ),
+       'img_left'                  => array( '1', 'سولعا', 'سول', 'солға', 'сол', 'left' ),
+       'img_none'                  => array( '1', 'ەشقانداي', 'جوق', 'ешқандай', 'жоқ', 'none' ),
+       'img_width'                 => array( '1', '$1 نۇكتە', '$1 нүкте', '$1px' ),
+       'img_center'                => array( '1', 'ورتاعا', 'ورتا', 'ортаға', 'орта', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'سۇرمەلى', 'сүрмелі', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'سۇرمەسىز', 'сүрмесіз', 'frameless' ),
+       'img_page'                  => array( '1', 'بەت=$1', 'بەت $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'تىكتى', 'تىكتىك=$1', 'تىكتىك $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'جىييەكتى', 'жиекті', 'border' ),
+       'img_baseline'              => array( '1', 'تىرەكجول', 'тірекжол', 'baseline' ),
+       'img_sub'                   => array( '1', 'استىلىعى', 'است', 'астылығы', 'аст', 'sub' ),
+       'img_super'                 => array( '1', 'ۇستىلىگى', 'ۇست', 'үстілігі', 'үст', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'ۇستىنە', 'үстіне', 'top' ),
+       'img_text_top'              => array( '1', 'ماتىن-ۇستىندە', 'мәтін-үстінде', 'text-top' ),
+       'img_middle'                => array( '1', 'ارالىعىنا', 'аралығына', 'middle' ),
+       'img_bottom'                => array( '1', 'استىنا', 'астына', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'ماتىن-استىندا', 'мәтін-астында', 'text-bottom' ),
+       'int'                       => array( '0', 'ىشكى:', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'توراپاتاۋى', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ەا:', 'ەسىمايا:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'جەرگىلىكتىجاي:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'جەرگىلىكتىجاي2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'سەرۆەر', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'سەرۆەراتاۋى', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'امىرجولى', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'سەپتىگى:', 'سەپتىك:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__تاقىرىپاتىنتۇرلەندىرگىزبەۋ__', '__تاتجوق__', '__اتاۋالماستىرعىزباۋ__', '__ااباۋ__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ماعلۇماتىنتۇرلەندىرگىزبەۋ__', '__ماتجوق__', '__ماعلۇماتالماستىرعىزباۋ__', '__ماباۋ__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'اعىمداعىاپتاسى', 'اعىمداعىاپتا', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'اعىمداعىاپتاكۇنى', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'جەرگىلىكتىاپتاسى', 'جەرگىلىكتىاپتا', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'جەرگىلىكتىاپتاكۇنى', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'تۇزەتۋنومىرٴى', 'نۇسقانومىرٴى', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'تۇزەتۋكۇنى', 'نۇسقاكۇنى', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'تۇزەتۋكۇنى2', 'نۇسقاكۇنى2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'تۇزەتۋايى', 'نۇسقاايى', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'تۇزەتۋجىلى', 'نۇسقاجىلى', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'تۇزەتۋۋاقىتىتاڭباسى', 'نۇسقاۋاقىتتۇيىندەمەسى', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'كوپشەتۇرى:', 'كوپشە:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'تولىقجايى:', 'تولىقجاي:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'تولىقجايى2:', 'تولىقجاي2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'كا1:', 'كىشىارىپپەن1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'با1:', 'باسارىپپەن1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'كا:', 'كىشىارىپپەن:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
+       'uc'                        => array( '0', 'با:', 'باسارىپپەن:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
+       'raw'                       => array( '0', 'قام:', 'ҚАМ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'كورسەتىلەتىناتاۋ', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'ق', 'Қ', 'R' ),
+       'newsectionlink'            => array( '1', '__جاڭابولىمسىلتەمەسى__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'باعدارلامانۇسقاسى', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'جايدىمۇقامداۋ:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'جاكىردىمۇقامداۋ', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'اعىمداعىۋاقىتتۇيىندەمەسى', 'اعىمداعىۋاقىتتۇيىن', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'جەرگىلىكتىۋاقىتتۇيىندەمەسى', 'جەرگىلىكتىۋاقىتتۇيىن', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'باعىتبەلگىسى', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#تىل:', '#ТІЛ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ماعلۇماتتىلى', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ەسىمايابەتسانى:', 'ەابەتسانى:', 'ايابەتسانى:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'اكىمشىسانى', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'سانپىشىمى', 'САНПІШІМІ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'سولعاىعىس', 'سولىعىس', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
+       'padright'                  => array( '0', 'وڭعاىعىس', 'وڭىعىس', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
+       'special'                   => array( '0', 'ارنايى', 'арнайы', 'special' ),
+       'defaultsort'               => array( '1', 'ادەپكىسۇرىپتاۋ:', 'ادەپكىساناتسۇرىپتاۋ:', 'ادەپكىسۇرىپتاۋكىلتى:', 'ادەپكىسۇرىپ:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'فايلمەكەنى:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'بەلگى', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__جاسىرىنسانات__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'ساناتتاعىبەتتەر', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'بەتمولشەرى', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -1128,8 +1128,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 'search-interwiki-caption' => 'باۋىرلاس جوبالار',
 'search-interwiki-default' => '$1 ناتىيجە:',
 'search-interwiki-more' => '(كوبىرەك)',
-'search-mwsuggest-enabled' => 'ۇسىنىمدارمەن',
-'search-mwsuggest-disabled' => 'ۇسىنىمدارسىز',
 'search-relatedarticle' => 'قاتىستى',
 'mwsuggest-disable' => 'AJAX ۇسىنىمدارىن ٴوشىر',
 'searchrelated' => 'قاتىستى',
index 1c042d3..39fd628 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Cyrillic script) (‪қазақша (кирил)‬)
+/** Kazakh (Cyrillic script) (қазақша (кирил)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -147,130 +147,130 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'БӘДЕЛ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'УИКИСІЗХБР:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'нобай', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'оңға', 'оң', 'right' ),
-       'img_left'                => array( '1', 'солға', 'сол', 'left' ),
-       'img_none'                => array( '1', 'ешқандай', 'жоқ', 'none' ),
-       'img_width'               => array( '1', '$1 нүкте', '$1px' ),
-       'img_center'              => array( '1', 'ортаға', 'орта', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'сүрмелі', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'сүрмесіз', 'frameless' ),
-       'img_page'                => array( '1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'жиекті', 'border' ),
-       'img_baseline'            => array( '1', 'тірекжол', 'baseline' ),
-       'img_sub'                 => array( '1', 'астылығы', 'аст', 'sub' ),
-       'img_super'               => array( '1', 'үстілігі', 'үст', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'үстіне', 'top' ),
-       'img_text_top'            => array( '1', 'мәтін-үстінде', 'text-top' ),
-       'img_middle'              => array( '1', 'аралығына', 'middle' ),
-       'img_bottom'              => array( '1', 'астына', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'мәтін-астында', 'text-bottom' ),
-       'int'                     => array( '0', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
-       'uc'                      => array( '0', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
-       'raw'                     => array( '0', 'ҚАМ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Қ', 'R' ),
-       'newsectionlink'          => array( '1', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ТІЛ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'САНПІШІМІ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
-       'padright'                => array( '0', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
-       'special'                 => array( '0', 'арнайы', 'special' ),
-       'defaultsort'             => array( '1', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'БӘДЕЛ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'УИКИСІЗХБР:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'нобай', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'оңға', 'оң', 'right' ),
+       'img_left'                  => array( '1', 'солға', 'сол', 'left' ),
+       'img_none'                  => array( '1', 'ешқандай', 'жоқ', 'none' ),
+       'img_width'                 => array( '1', '$1 нүкте', '$1px' ),
+       'img_center'                => array( '1', 'ортаға', 'орта', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'сүрмелі', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'сүрмесіз', 'frameless' ),
+       'img_page'                  => array( '1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'жиекті', 'border' ),
+       'img_baseline'              => array( '1', 'тірекжол', 'baseline' ),
+       'img_sub'                   => array( '1', 'астылығы', 'аст', 'sub' ),
+       'img_super'                 => array( '1', 'үстілігі', 'үст', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'үстіне', 'top' ),
+       'img_text_top'              => array( '1', 'мәтін-үстінде', 'text-top' ),
+       'img_middle'                => array( '1', 'аралығына', 'middle' ),
+       'img_bottom'                => array( '1', 'астына', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'мәтін-астында', 'text-bottom' ),
+       'int'                       => array( '0', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
+       'uc'                        => array( '0', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
+       'raw'                       => array( '0', 'ҚАМ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Қ', 'R' ),
+       'newsectionlink'            => array( '1', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ТІЛ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'САНПІШІМІ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
+       'special'                   => array( '0', 'арнайы', 'special' ),
+       'defaultsort'               => array( '1', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -756,7 +756,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Жүйеден шықтыңыз.'''
 
-Жүйеге кірместен де {{SITENAME}} жобасын пайдалана аласыз, немесе баяғы не өзге қатысушы ретінде жүйеге [[Special:UserLogin|қайта кіруіңізге]] болады.
+Жүйеге кірместен де {{SITENAME}} жобасын пайдалана аласыз, немесе баяғы не өзге қатысушы ретінде жүйеге <span class='plainlinks'>[$1 қайта кіруіңізге]</span> болады.
 Аңғартпа: Кейбір беттер шолғышыңыздың кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкін.",
 'welcomecreation' => '== Қош келдіңіз, $1! ==
 Жаңа тіркелгіңіз жасалды.
@@ -1274,8 +1274,6 @@ $3 келтірілген себебі: ''$2''",
 'search-interwiki-caption' => 'Бауырлас жобалар',
 'search-interwiki-default' => '$1 нәтиже:',
 'search-interwiki-more' => '(көбірек)',
-'search-mwsuggest-enabled' => 'ұсынымдармен',
-'search-mwsuggest-disabled' => 'ұсынымдарсыз',
 'search-relatedarticle' => 'Қатысты',
 'mwsuggest-disable' => 'AJAX ұсынымдарын өшір',
 'searcheverything-enable' => 'Белгіленген есім кеңістігінен іздеу',
@@ -1568,22 +1566,22 @@ $3 келтірілген себебі: ''$2''",
 'upload-tryagain' => 'Файл сипаттамасының өзгерістерін жөнелту',
 'uploadnologin' => 'Кірмегенсіз',
 'uploadnologintext' => 'Файлдарды жүктеу үшін  [[Special:UserLogin|кіруіңіз]] жөн.',
-'upload_directory_missing' => 'Қотарып бермек қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
-'upload_directory_read_only' => 'Қотарып бермек қалтасына ($1) веб-сервер жаза алмайды.',
+'upload_directory_missing' => 'Жүктеу қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
+'upload_directory_read_only' => 'Жүктеу қалтасына ($1) веб-сервер жаза алмайды.',
 'uploaderror' => 'Жүктеу қатесі',
-'uploadtext' => "Төмендегі пішінді файлдарды қотарып беру үшін қолданыңыз.
-Алдында қотарылып берілген файлдарды қарау не іздеу үшін [[{{#special:FileList}}|қотарып берілген файлдар тізіміне]] барыңыз, тағы да қотарып беруі мен жоюы  [[{{#special:Log}}/upload|қотарып беру журналына]] жазылып алынады.
+'uploadtext' => "Төмендегі пішінді файлдарды жүктеу үшін қолданыңыз.
+Алдында жүктелген файлдарды қарау не іздеу үшін [[Special:FileList|жүктелген файлдар тізіміне]] барыңыз. Сондай-ақ файлдардың жүктелуі [[Special:Log/upload|жүктелі журналына]], ал жойылған файлдар [[Special:Log/delete|жойылу журналына]] жазылады.
 
-СÑ\83Ñ\80еÑ\82Ñ\82Ñ\96 Ð±ÐµÑ\82ке ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80Ñ\83ге, Ñ\84айлÒ\93а Ñ\82Ñ\83Ñ\80а Ñ\81Ñ\96лÑ\82еÑ\83 Ò¯Ñ\88Ñ\96н Ð¼Ñ\8bна Ð¿Ñ\96Ñ\88Ñ\96ндегÑ\96 Ñ\81Ñ\96лÑ\82емені қолданыңыз:
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki>''',
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|балама мәтін]]</nowiki>''' не
-'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>'''.",
+СÑ\83Ñ\80еÑ\82Ñ\82Ñ\96 Ð¼Ð°Ò\9bалаÒ\93а Ò\9bоÑ\81Ñ\83 Ò¯Ñ\88Ñ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ó\99Ñ\81Ñ\96лдеÑ\80ді қолданыңыз:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файлдың толық нұсқасын орнату үшін;
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|сурет тақырыбы]]</nowiki></code>''' 200px кішірейтілген файлды тақырыбын қосып сол жаққа орналастыру;
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' тек файлға сілтеме жасау үшін.",
 'upload-permitted' => 'Рұқсат етілген файл түрлері: $1.',
 'upload-preferred' => 'Ұнамды файл түрлері $1.',
 'upload-prohibited' => 'Рұқсат етілмеген файл түрлері: $1.',
 'uploadlog' => 'жүктеу журналы',
 'uploadlogpage' => 'Жүктеу журналы',
-'uploadlogpagetext' => 'Төменде ең соңғы қотарып берілген файл тізімі.',
+'uploadlogpagetext' => 'Төменде ең соңғы жүктелген файлдар тізімі.',
 'filename' => 'Файл атауы',
 'filedesc' => 'Түйіндемесі',
 'fileuploadsummary' => 'Файл сипаттамасы:',
@@ -1592,7 +1590,7 @@ $3 келтірілген себебі: ''$2''",
 'filesource' => 'Қайнар көзі:',
 'uploadedfiles' => 'Жүктелген файлдар',
 'ignorewarning' => 'Құлақтандыруға елеме де файлды қалайда сақта.',
-'ignorewarnings' => 'Ð\9aез ÐºÐµÐ»Ð³ÐµÐ½ Ò\9bұлаÒ\9bÑ\82андÑ\8bÑ\80Ñ\83лаÑ\80Ò\93а ÐµÐ»ÐµÐ¼Ðµ',
+'ignorewarnings' => 'Ð\95Ñ\81кеÑ\80Ñ\82Ñ\83леÑ\80дÑ\96 ÐµÐ»ÐµÐ¼ÐµÑ\83',
 'minlength1' => 'Файл атауында ең кемінде бір әріп болуы жөн.',
 'illegalfilename' => '«$1» файл атауында бет тақырыбы атында рұқсат берілмеген таңбалар бар.
 Файлды қайта атаңыз да бұны қотарып беруді қайта байқап көріңіз.',
@@ -1616,9 +1614,9 @@ $3 келтірілген себебі: ''$2''",
 * Қотарып берілетін файл атауы: <strong>[[:$1]]</strong>
 * Бар болған файл атауы: <strong>[[:$2]]</strong>
 Өзге атауды таңдаңыз.',
-'fileexists-thumbnail-yes' => "Осы файл — мөлшері кішірітілген сурет ''(нобай)'' сияқты. [[$1|thumb]]
-Бұл <strong>[[:$1]]</strong> деген файлды сынап шығыңыз.
-Егер сыналған файл түпнұсқалы мөлшері бар дәлме-дәл сурет болса, қосысмша нобайды қотарып беру керегі жоқ.",
+'fileexists-thumbnail-yes' => 'Осы файл — мөлшері кішірітілген көшірмесі (нобай) сияқты. [[$1|thumb]]
+Өтініш, <strong>[[:$1]]</strong> деген файлды тексеріңіз.
+Егер көрсетілген файл дәл сіз жүктейін деп жатқан файл болса, онда оның кішірейтілген көшірмесін қайта жүктеудің қажеті жоқ.',
 'file-thumbnail-no' => "Файл атауы <strong>$1</strong> дегенмен басталады.
 Бұл — мөлшері кішірітілген сурет ''(нобай)'' сияқты.
 Егер бұл суреттің толық ажыратылымдығы болса, бұны қотарып беріңіз, әйтпесе файл атауын өзгертіңіз.",
@@ -1627,11 +1625,11 @@ $3 келтірілген себебі: ''$2''",
 'fileexists-shared-forbidden' => 'Осылай аталған файл ортақ қоймада алдақашан бар;
 кері қайтыңыз да, осы файлды жаңа атымен қотарып беріңіз. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Бұл файл келесі {{PLURAL:$1|файлдың|файлдарының}} телнұсқасы:',
-'uploadwarning' => 'Қотарып беру жөнінде құлақтандыру',
+'uploadwarning' => 'Жүктеу жөнінде құлақтандыру',
 'savefile' => 'Файлды сақтау',
 'uploadedimage' => '«[[$1]]» файлын жүктеді',
 'overwroteimage' => '«[[$1]]» деген файлдың жаңа нұсқасын жүктеді',
-'uploaddisabled' => 'Қотарып беру өшірілген',
+'uploaddisabled' => 'Жүктеу өшірілген',
 'copyuploaddisabled' => 'URL арқылы жүктеу өшірілген.',
 'uploaddisabledtext' => '{{SITENAME}} жобасында файл қотарып беруі өшірілген.',
 'uploadscripted' => 'Бұл файлда веб шолғышты қателікпен талдатқызатын HTML не әмір коды бар.',
@@ -1639,26 +1637,25 @@ $3 келтірілген себебі: ''$2''",
 'upload-source' => 'Қайнар файл',
 'sourcefilename' => 'Қайнар файл атауы:',
 'sourceurl' => 'Қайнардың URL-мекенжайы:',
-'destfilename' => 'Ð\9dÑ\8bÑ\81ана Ñ\84айл атауы:',
+'destfilename' => 'Файл атауы:',
 'upload-maxfilesize' => 'Файлдың ең көп мүмкін мөлшері: $1',
 'upload-description' => 'Файл сипаттамасы',
 'upload-options' => 'Жүктеу баптаулары',
 'watchthisupload' => 'Осы файлды бақылау',
-'filewasdeleted' => 'Бұл атауы бар файл бұрын қотарып берілген де бері келе жойылған.
-Бұны қайта қотарып беру алдынан $1 дегенді тексеріп шығыңыз.',
+'filewasdeleted' => 'Бұндай атаумен файл бұрын жүктелген болатын, бірақ кейін жойылды. Бұны қайта жүктеу алдында $1 дегенді тексеріп шығыңыз.',
 'filename-bad-prefix' => "Қотарып бермек файлыңыздың атауы '''«$1» ''' деп басталады, мынадай сипаттаусыз атауды әдетте сандық камералар өздіктік береді.
 Файлыңызға сипаттылау атауды таңдаңыз.",
-'upload-success-subj' => 'Сәтті қотарып берілді',
+'upload-success-subj' => 'Сәтті жүктелді',
 'upload-failure-subj' => 'Жүктеу мәселесі',
 'upload-warning-subj' => 'Жүктеу кезіндегі ескерту',
 
 'upload-proto-error' => 'Бұрыс хаттама',
-'upload-proto-error-text' => 'Шеттен қотарып беру үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.',
+'upload-proto-error-text' => 'Шеттен жүктеу үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.',
 'upload-file-error' => 'Ішкі қате',
 'upload-file-error-text' => 'Серверде уақытша файл құрылуы ішкі қатесіне ұшырасты.
 Бұл жүйенің әкімшімен қатынасыңыз.',
-'upload-misc-error' => 'Қотарып беру кезіндегі белгісіз қате',
-'upload-misc-error-text' => 'Қотарып беру кезінде белгісіз қатеге ұшырасты.
+'upload-misc-error' => 'Жүктеу кезіндегі белгісіз қате',
+'upload-misc-error-text' => 'Жүктеу кезінде белгісіз қатеге ұшырасты.
 URL жарамды және қатынаулы екенін тексеріп шығыңыз да қайта байқап көріңіз.
 Егер бұл мәселе әлде де қалса, жүйе әкімшімен қатынасыңыз.',
 'upload-too-many-redirects' => 'URL шектен тыс жылжытуларға ие',
@@ -1671,7 +1668,7 @@ URL жарамды және қатынаулы екенін тексеріп ш
 'upload-curl-error6' => 'URL жетілмеді',
 'upload-curl-error6-text' => 'Келтірілген URL жетілмеді.
 URL дұрыс екендігін және торап істеп тұрғанын қос тексеріңіз.',
-'upload-curl-error28' => 'Қотарып беру уақыты бітті',
+'upload-curl-error28' => 'Жүктеу уақыты бітті',
 'upload-curl-error28-text' => 'Тораптың жауап беруі тым ұзақ уақытқа созылды.
 Бұл торап істе екенін тексеріп шығыңыз, азғана кідіре тұрыңыз да қайта байқап көріңіз.
 Талабыңызды қол тиген кезінде қайта байқап көруіңіз мүмкін.',
@@ -1717,7 +1714,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'morelinkstoimage' => 'Бұл файлдың [[Special:WhatLinksHere/$1|көбірек сілтемелерін]] қарау.',
 'duplicatesoffile' => 'Келесі {{PLURAL:$1|файл бұл файлдың телнұсқасы|$1 файл бұл файлдың телнұсқалары}}:',
 'sharedupload' => 'Бұл файл ортақ қоймаға қотарып берілген сондықтан басқа жобаларда қолдануы мүмкін.',
-'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын қотарып беру',
+'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын жүктеу',
 
 # File reversion
 'filerevert' => '$1 дегенді қайтару',
@@ -2404,7 +2401,7 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 бет өзінің үстіне жылжытылмайды.',
 'imagenocrossnamespace' => 'Файл емес есім аясына файл жылжытылмайды',
 'imagetypemismatch' => 'Файлдың жаңа кеңейтімі бұның түріне сәйкес емес',
-'imageinvalidfilename' => 'Ð\9dÑ\8bÑ\81ана Ñ\84айл атауы жарамсыз',
+'imageinvalidfilename' => 'Файл атауы жарамсыз',
 'move-leave-redirect' => 'Ескі бетте айдату сілтемесін қалдыру',
 
 # Export
@@ -3194,4 +3191,7 @@ $5
 'logentry-newusers-autocreate' => '$1 аккаунты автоматты түрде тіркелді',
 'newuserlog-byemail' => 'Құпия сөз e-mail арқылы жіберілді',
 
+# Search suggestions
+'searchsuggest-search' => 'Іздеу',
+
 );
index 82b4cfb..9c26f06 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Latin script) (‪qazaqşa (latın)‬)
+/** Kazakh (Latin script) (qazaqşa (latın)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -146,129 +146,129 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#AÝDAW', '#АЙДАУ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__MAZMUNSIZ__', '__MSIZ__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__QOÝMASIZ__', '__QSIZ__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__MAZMUNDATQIZW__', '__MQIZW__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__MAZMUNI__', '__MZMN__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BÖLİDİMÖNDEMEW__', '__BÖLİMÖNDETKİZBEW__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AĞIMDAĞIAÝ', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AĞIMDAĞIAÝATAWI', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AĞIMDAĞIAÝİLİKATAWI', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'AĞIMDAĞIAÝJÏIR', 'AĞIMDAĞIAÝQISQA', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AĞIMDAĞIKÜN', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AĞIMDAĞIKÜN2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'AĞIMDAĞIKÜNATAWI', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AĞIMDAĞIJIL', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AĞIMDAĞIWAQIT', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AĞIMDAĞISAĞAT', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'JERGİLİKTİAÝ', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'JERGİLİKTİAÝATAWI', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'JERGİLİKTİAÝİLİKATAWI', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'JERGİLİKTİAÝJÏIR', 'JERGİLİKTİAÝQISQAŞA', 'JERGİLİKTİAÝQISQA', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JERGİLİKTİKÜN', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JERGİLİKTİKÜN2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'JERGİLİKTİKÜNATAWI', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'JERGİLİKTİJIL', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'JERGİLİKTİWAQIT', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'JERGİLİKTİSAĞAT', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BETSANI', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'MAQALASANI', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAÝLSANI', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'QATISWŞISANI', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ÖÑDEMESANI', 'TÜZETWSANI', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'BETATAWI', 'БЕТАТАУЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'BETATAWI2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESİMAYASI', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESİMAYASI2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'TALQILAWAYASI', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'TALQILAWAYASI2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'TAQIRIPBETİ', 'MAQALABETİ', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'TAQIRIPBETİ2', 'MAQALABETİ2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'TOLIQBETATAWI', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'TOLIQBETATAWI2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'BETŞEATAWI', 'ASTIÑĞIBETATAWI', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'BETŞEATAWI2', 'ASTIÑĞIBETATAWI2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NEGİZGİBETATAWI', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NEGİZGİBETATAWI2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'TALQILAWBETATAWI', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'TALQILAWBETATAWI2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'TAQIRIPBETATAWI', 'MAQALABETATAWI', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'TAQIRIPBETATAWI2', 'MAQALABETATAWI2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'XBR:', 'ХБР:', 'MSG:' ),
-       'subst'                   => array( '0', 'BÄDEL:', 'БӘДЕЛ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'WÏKÏSİZXBR:', 'УИКИСІЗХБР:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'nobaý', 'нобай', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'nobaý=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'oñğa', 'oñ', 'оңға', 'оң', 'right' ),
-       'img_left'                => array( '1', 'solğa', 'sol', 'солға', 'сол', 'left' ),
-       'img_none'                => array( '1', 'eşqandaý', 'joq', 'ешқандай', 'жоқ', 'none' ),
-       'img_width'               => array( '1', '$1 nükte', '$1 нүкте', '$1px' ),
-       'img_center'              => array( '1', 'ortağa', 'orta', 'ортаға', 'орта', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'sürmeli', 'сүрмелі', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sürmesiz', 'сүрмесіз', 'frameless' ),
-       'img_page'                => array( '1', 'bet=$1', 'bet $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'tikti', 'tiktik=$1', 'tiktik $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'jïekti', 'жиекті', 'border' ),
-       'img_baseline'            => array( '1', 'tirekjol', 'тірекжол', 'baseline' ),
-       'img_sub'                 => array( '1', 'astılığı', 'ast', 'астылығы', 'аст', 'sub' ),
-       'img_super'               => array( '1', 'üstiligi', 'üst', 'үстілігі', 'үст', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'üstine', 'үстіне', 'top' ),
-       'img_text_top'            => array( '1', 'mätin-üstinde', 'мәтін-үстінде', 'text-top' ),
-       'img_middle'              => array( '1', 'aralığına', 'аралығына', 'middle' ),
-       'img_bottom'              => array( '1', 'astına', 'астына', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'mätin-astında', 'мәтін-астында', 'text-bottom' ),
-       'int'                     => array( '0', 'İŞKİ:', 'ІШКІ:', 'INT:' ),
-       'sitename'                => array( '1', 'TORAPATAWI', 'ТОРАПАТАУЫ', 'SITENAME' ),
-       'ns'                      => array( '0', 'EA:', 'ESİMAYA:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
-       'localurl'                => array( '0', 'JERGİLİKTİJAÝ:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'JERGİLİKTİJAÝ2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERATAWI', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ÄMİRJOLI', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'SEPTİGİ:', 'SEPTİK:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__TAQIRIPATINTÜRLENDİRGİZBEW__', '__TATJOQ__', '__ATAWALMASTIRĞIZBAW__', '__AABAW__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__MAĞLUMATINTÜRLENDİRGİZBEW__', '__MATJOQ__', '__MAĞLUMATALMASTIRĞIZBAW__', '__MABAW__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'AĞIMDAĞIAPTASI', 'AĞIMDAĞIAPTA', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'AĞIMDAĞIAPTAKÜNİ', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'JERGİLİKTİAPTASI', 'JERGİLİKTİAPTA', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JERGİLİKTİAPTAKÜNİ', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'TÜZETWNÖMİRİ', 'NUSQANÖMİRİ', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'TÜZETWKÜNİ', 'NUSQAKÜNİ', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'TÜZETWKÜNİ2', 'NUSQAKÜNİ2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'TÜZETWAÝI', 'NUSQAAÝI', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'TÜZETWJILI', 'NUSQAJILI', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'TÜZETWWAQITITAÑBASI', 'NUSQAWAQITTÜÝİNDEMESİ', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'KÖPŞETÜRİ:', 'KÖPŞE:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TOLIQJAÝI:', 'TOLIQJAÝ:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TOLIQJAÝI2:', 'TOLIQJAÝ2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KÄ1:', 'KİŞİÄRİPPEN1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BÄ1:', 'BASÄRİPPEN1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KÄ:', 'KİŞİÄRİPPEN:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
-       'uc'                      => array( '0', 'BÄ:', 'BASÄRİPPEN:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
-       'raw'                     => array( '0', 'QAM:', 'ҚАМ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'KÖRİNETİNTAQIRIAPATI', 'KÖRSETİLETİNATAW', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Q', 'Қ', 'R' ),
-       'newsectionlink'          => array( '1', '__JAÑABÖLİMSİLTEMESİ__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'BAĞDARLAMANUSQASI', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'JAÝDIMUQAMDAW:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'JÄKİRDİMUQAMDAW', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'AĞIMDAĞIWAQITTÜÝİNDEMESİ', 'AĞIMDAĞIWAQITTÜÝİN', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'JERGİLİKTİWAQITTÜÝİNDEMESİ', 'JERGİLİKTİWAQITTÜÝİN', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'BAĞITBELGİSİ', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TİL:', '#ТІЛ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'MAĞLUMATTİLİ', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'ESİMAYABETSANI:', 'EABETSANI:', 'AYABETSANI:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ÄKİMŞİSANI', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'SANPİŞİMİ', 'САНПІШІМІ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'SOLĞAIĞIS', 'SOLIĞIS', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
-       'padright'                => array( '0', 'OÑĞAIĞIS', 'OÑIĞIS', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
-       'special'                 => array( '0', 'arnaýı', 'арнайы', 'special' ),
-       'defaultsort'             => array( '1', 'ÄDEPKİSURIPTAW:', 'ÄDEPKİSANATSURIPTAW:', 'ÄDEPKİSURIPTAWKİLTİ:', 'ÄDEPKİSURIP:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FAÝLMEKENİ:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'belgi', 'белгі', 'tag' ),
-       'hiddencat'               => array( '1', '__JASIRINSANAT__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SANATTAĞIBETTER', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'BETMÖLŞERİ', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#AÝDAW', '#АЙДАУ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__MAZMUNSIZ__', '__MSIZ__', '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__QOÝMASIZ__', '__QSIZ__', '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__MAZMUNDATQIZW__', '__MQIZW__', '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__MAZMUNI__', '__MZMN__', '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BÖLİDİMÖNDEMEW__', '__BÖLİMÖNDETKİZBEW__', '__БӨЛІДІМӨНДЕМЕУ__', '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AĞIMDAĞIAÝ', 'АҒЫМДАҒЫАЙ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AĞIMDAĞIAÝATAWI', 'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AĞIMDAĞIAÝİLİKATAWI', 'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'AĞIMDAĞIAÝJÏIR', 'AĞIMDAĞIAÝQISQA', 'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AĞIMDAĞIKÜN', 'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AĞIMDAĞIKÜN2', 'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'AĞIMDAĞIKÜNATAWI', 'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AĞIMDAĞIJIL', 'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AĞIMDAĞIWAQIT', 'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AĞIMDAĞISAĞAT', 'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'JERGİLİKTİAÝ', 'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'JERGİLİKTİAÝATAWI', 'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'JERGİLİKTİAÝİLİKATAWI', 'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'JERGİLİKTİAÝJÏIR', 'JERGİLİKTİAÝQISQAŞA', 'JERGİLİKTİAÝQISQA', 'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚАША', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JERGİLİKTİKÜN', 'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JERGİLİKTİKÜN2', 'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'JERGİLİKTİKÜNATAWI', 'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'JERGİLİKTİJIL', 'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'JERGİLİKTİWAQIT', 'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'JERGİLİKTİSAĞAT', 'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BETSANI', 'БЕТСАНЫ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'MAQALASANI', 'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAÝLSANI', 'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'QATISWŞISANI', 'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ÖÑDEMESANI', 'TÜZETWSANI', 'ӨҢДЕМЕСАНЫ', 'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'BETATAWI', 'БЕТАТАУЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'BETATAWI2', 'БЕТАТАУЫ2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESİMAYASI', 'ЕСІМАЯСЫ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESİMAYASI2', 'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'TALQILAWAYASI', 'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'TALQILAWAYASI2', 'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'TAQIRIPBETİ', 'MAQALABETİ', 'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'TAQIRIPBETİ2', 'MAQALABETİ2', 'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'TOLIQBETATAWI', 'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'TOLIQBETATAWI2', 'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'BETŞEATAWI', 'ASTIÑĞIBETATAWI', 'БЕТШЕАТАУЫ', 'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'BETŞEATAWI2', 'ASTIÑĞIBETATAWI2', 'БЕТШЕАТАУЫ2', 'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NEGİZGİBETATAWI', 'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NEGİZGİBETATAWI2', 'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'TALQILAWBETATAWI', 'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'TALQILAWBETATAWI2', 'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'TAQIRIPBETATAWI', 'MAQALABETATAWI', 'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'TAQIRIPBETATAWI2', 'MAQALABETATAWI2', 'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'XBR:', 'ХБР:', 'MSG:' ),
+       'subst'                     => array( '0', 'BÄDEL:', 'БӘДЕЛ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'WÏKÏSİZXBR:', 'УИКИСІЗХБР:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'nobaý', 'нобай', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'nobaý=$1', 'нобай=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'oñğa', 'oñ', 'оңға', 'оң', 'right' ),
+       'img_left'                  => array( '1', 'solğa', 'sol', 'солға', 'сол', 'left' ),
+       'img_none'                  => array( '1', 'eşqandaý', 'joq', 'ешқандай', 'жоқ', 'none' ),
+       'img_width'                 => array( '1', '$1 nükte', '$1 нүкте', '$1px' ),
+       'img_center'                => array( '1', 'ortağa', 'orta', 'ортаға', 'орта', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'sürmeli', 'сүрмелі', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sürmesiz', 'сүрмесіз', 'frameless' ),
+       'img_page'                  => array( '1', 'bet=$1', 'bet $1', 'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'tikti', 'tiktik=$1', 'tiktik $1', 'тікті', 'тіктік=$1', 'тіктік $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'jïekti', 'жиекті', 'border' ),
+       'img_baseline'              => array( '1', 'tirekjol', 'тірекжол', 'baseline' ),
+       'img_sub'                   => array( '1', 'astılığı', 'ast', 'астылығы', 'аст', 'sub' ),
+       'img_super'                 => array( '1', 'üstiligi', 'üst', 'үстілігі', 'үст', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'üstine', 'үстіне', 'top' ),
+       'img_text_top'              => array( '1', 'mätin-üstinde', 'мәтін-үстінде', 'text-top' ),
+       'img_middle'                => array( '1', 'aralığına', 'аралығына', 'middle' ),
+       'img_bottom'                => array( '1', 'astına', 'астына', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'mätin-astında', 'мәтін-астында', 'text-bottom' ),
+       'int'                       => array( '0', 'İŞKİ:', 'ІШКІ:', 'INT:' ),
+       'sitename'                  => array( '1', 'TORAPATAWI', 'ТОРАПАТАУЫ', 'SITENAME' ),
+       'ns'                        => array( '0', 'EA:', 'ESİMAYA:', 'ЕА:', 'ЕСІМАЯ:', 'NS:' ),
+       'localurl'                  => array( '0', 'JERGİLİKTİJAÝ:', 'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'JERGİLİKTİJAÝ2:', 'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERATAWI', 'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ÄMİRJOLI', 'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'SEPTİGİ:', 'SEPTİK:', 'СЕПТІГІ:', 'СЕПТІК:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__TAQIRIPATINTÜRLENDİRGİZBEW__', '__TATJOQ__', '__ATAWALMASTIRĞIZBAW__', '__AABAW__', '__ТАҚЫРЫПАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__ТАТЖОҚ__', '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__MAĞLUMATINTÜRLENDİRGİZBEW__', '__MATJOQ__', '__MAĞLUMATALMASTIRĞIZBAW__', '__MABAW__', '__МАҒЛҰМАТЫНТҮРЛЕНДІРГІЗБЕУ__', '__МАТЖОҚ__', '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'AĞIMDAĞIAPTASI', 'AĞIMDAĞIAPTA', 'АҒЫМДАҒЫАПТАСЫ', 'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'AĞIMDAĞIAPTAKÜNİ', 'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'JERGİLİKTİAPTASI', 'JERGİLİKTİAPTA', 'ЖЕРГІЛІКТІАПТАСЫ', 'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JERGİLİKTİAPTAKÜNİ', 'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'TÜZETWNÖMİRİ', 'NUSQANÖMİRİ', 'ТҮЗЕТУНӨМІРІ', 'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'TÜZETWKÜNİ', 'NUSQAKÜNİ', 'ТҮЗЕТУКҮНІ', 'НҰСҚАКҮНІ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'TÜZETWKÜNİ2', 'NUSQAKÜNİ2', 'ТҮЗЕТУКҮНІ2', 'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'TÜZETWAÝI', 'NUSQAAÝI', 'ТҮЗЕТУАЙЫ', 'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'TÜZETWJILI', 'NUSQAJILI', 'ТҮЗЕТУЖЫЛЫ', 'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'TÜZETWWAQITITAÑBASI', 'NUSQAWAQITTÜÝİNDEMESİ', 'ТҮЗЕТУУАҚЫТЫТАҢБАСЫ', 'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'KÖPŞETÜRİ:', 'KÖPŞE:', 'КӨПШЕТҮРІ:', 'КӨПШЕ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TOLIQJAÝI:', 'TOLIQJAÝ:', 'ТОЛЫҚЖАЙЫ:', 'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TOLIQJAÝI2:', 'TOLIQJAÝ2:', 'ТОЛЫҚЖАЙЫ2:', 'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KÄ1:', 'KİŞİÄRİPPEN1:', 'КӘ1:', 'КІШІӘРІППЕН1:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BÄ1:', 'BASÄRİPPEN1:', 'БӘ1:', 'БАСӘРІППЕН1:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KÄ:', 'KİŞİÄRİPPEN:', 'КӘ:', 'КІШІӘРІППЕН:', 'LC:' ),
+       'uc'                        => array( '0', 'BÄ:', 'BASÄRİPPEN:', 'БӘ:', 'БАСӘРІППЕН:', 'UC:' ),
+       'raw'                       => array( '0', 'QAM:', 'ҚАМ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'KÖRİNETİNTAQIRIAPATI', 'KÖRSETİLETİNATAW', 'КӨРІНЕТІНТАҚЫРЫАПАТЫ', 'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Q', 'Қ', 'R' ),
+       'newsectionlink'            => array( '1', '__JAÑABÖLİMSİLTEMESİ__', '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'BAĞDARLAMANUSQASI', 'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'JAÝDIMUQAMDAW:', 'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'JÄKİRDİMUQAMDAW', 'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'AĞIMDAĞIWAQITTÜÝİNDEMESİ', 'AĞIMDAĞIWAQITTÜÝİN', 'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'JERGİLİKTİWAQITTÜÝİNDEMESİ', 'JERGİLİKTİWAQITTÜÝİN', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'BAĞITBELGİSİ', 'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TİL:', '#ТІЛ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'MAĞLUMATTİLİ', 'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'ESİMAYABETSANI:', 'EABETSANI:', 'AYABETSANI:', 'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ÄKİMŞİSANI', 'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'SANPİŞİMİ', 'САНПІШІМІ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'SOLĞAIĞIS', 'SOLIĞIS', 'СОЛҒАЫҒЫС', 'СОЛЫҒЫС', 'PADLEFT' ),
+       'padright'                  => array( '0', 'OÑĞAIĞIS', 'OÑIĞIS', 'ОҢҒАЫҒЫС', 'ОҢЫҒЫС', 'PADRIGHT' ),
+       'special'                   => array( '0', 'arnaýı', 'арнайы', 'special' ),
+       'defaultsort'               => array( '1', 'ÄDEPKİSURIPTAW:', 'ÄDEPKİSANATSURIPTAW:', 'ÄDEPKİSURIPTAWKİLTİ:', 'ÄDEPKİSURIP:', 'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСАНАТСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫПТАУКІЛТІ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FAÝLMEKENİ:', 'ФАЙЛМЕКЕНІ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'belgi', 'белгі', 'tag' ),
+       'hiddencat'                 => array( '1', '__JASIRINSANAT__', '__ЖАСЫРЫНСАНАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SANATTAĞIBETTER', 'САНАТТАҒЫБЕТТЕР', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'BETMÖLŞERİ', 'БЕТМӨЛШЕРІ', 'PAGESIZE' ),
 );
 
 $specialPageAliases = array(
@@ -1091,8 +1091,6 @@ Añğartpa: bağıttaw siltemelerin qoldanğanda bul bağan qaýta qoýıladı.'
 'search-interwiki-caption' => 'Bawırlas jobalar',
 'search-interwiki-default' => '$1 nätïje:',
 'search-interwiki-more' => '(köbirek)',
-'search-mwsuggest-enabled' => 'usınımdarmen',
-'search-mwsuggest-disabled' => 'usınımdarsız',
 'search-relatedarticle' => 'Qatıstı',
 'mwsuggest-disable' => 'AJAX usınımdarın öşir',
 'searchrelated' => 'qatıstı',
index bb90dec..d0a97cb 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kalaallisut (Kalaallisut)
+/** Kalaallisut (kalaallisut)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -58,70 +58,70 @@ $namespaceAliases = array(
 
 $messages = array(
 # Dates
-'sunday'        => 'Sapaat',
-'monday'        => 'Ataasinngorneq',
-'tuesday'       => 'Marlunngorneq',
-'wednesday'     => 'Pingasunngorneq',
-'thursday'      => 'Sisamanngorneq',
-'friday'        => 'Tallimanngorneq',
-'saturday'      => 'Arfininngorneq',
-'sun'           => 'Sap',
-'mon'           => 'Ata',
-'tue'           => 'Mar',
-'wed'           => 'Pin',
-'thu'           => 'Sis',
-'fri'           => 'Tal',
-'sat'           => 'Arf',
-'january'       => 'Jannuaari',
-'february'      => 'Februaari',
-'march'         => 'Martsi',
-'april'         => 'Apriili',
-'may_long'      => 'Maaji',
-'june'          => 'Juuni',
-'july'          => 'Juuli',
-'august'        => 'Aggusti',
-'september'     => 'Septemberi',
-'october'       => 'Oktoberi',
-'november'      => 'Novemberi',
-'december'      => 'Decemberi',
-'january-gen'   => 'Januaari',
-'february-gen'  => 'Februaari',
-'march-gen'     => 'Marsi',
-'april-gen'     => 'Apriili',
-'may-gen'       => 'Maaji',
-'june-gen'      => 'Juuni',
-'july-gen'      => 'Juuli',
-'august-gen'    => 'Aggusti',
+'sunday' => 'Sapaat',
+'monday' => 'Ataasinngorneq',
+'tuesday' => 'Marlunngorneq',
+'wednesday' => 'Pingasunngorneq',
+'thursday' => 'Sisamanngorneq',
+'friday' => 'Tallimanngorneq',
+'saturday' => 'Arfininngorneq',
+'sun' => 'Sap',
+'mon' => 'Ata',
+'tue' => 'Mar',
+'wed' => 'Pin',
+'thu' => 'Sis',
+'fri' => 'Tal',
+'sat' => 'Arf',
+'january' => 'Jannuaari',
+'february' => 'Februaari',
+'march' => 'Martsi',
+'april' => 'Apriili',
+'may_long' => 'Maaji',
+'june' => 'Juuni',
+'july' => 'Juuli',
+'august' => 'Aggusti',
+'september' => 'Septemberi',
+'october' => 'Oktoberi',
+'november' => 'Novemberi',
+'december' => 'Decemberi',
+'january-gen' => 'Januaari',
+'february-gen' => 'Februaari',
+'march-gen' => 'Marsi',
+'april-gen' => 'Apriili',
+'may-gen' => 'Maaji',
+'june-gen' => 'Juuni',
+'july-gen' => 'Juuli',
+'august-gen' => 'Aggusti',
 'september-gen' => 'Septembari',
-'october-gen'   => 'Oktobari',
-'november-gen'  => 'Novembari',
-'december-gen'  => 'Decembari',
-'jan'           => 'Jan',
-'feb'           => 'Feb',
-'mar'           => 'Mar',
-'apr'           => 'Apr',
-'may'           => 'Maaji',
-'jun'           => 'Jun',
-'jul'           => 'Jul',
-'aug'           => 'Aug',
-'sep'           => 'Sep',
-'oct'           => 'Okt',
-'nov'           => 'Nov',
-'dec'           => 'Dec',
+'october-gen' => 'Oktobari',
+'november-gen' => 'Novembari',
+'december-gen' => 'Decembari',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mar',
+'apr' => 'Apr',
+'may' => 'Maaji',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Aug',
+'sep' => 'Sep',
+'oct' => 'Okt',
+'nov' => 'Nov',
+'dec' => 'Dec',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}',
-'category_header'        => 'Quppernerit sumut atassusermi "$1"-miittut',
-'subcategories'          => 'Sunut atassuserni ataaniittut',
-'category-subcat-count'  => '{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}',
+'pagecategories' => '{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}',
+'category_header' => 'Quppernerit sumut atassusermi "$1"-miittut',
+'subcategories' => 'Sunut atassuserni ataaniittut',
+'category-subcat-count' => '{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}',
 'category-article-count' => 'Una sumut atassuseq imarivaa {{PLURAL:$2|qupperneq ataaseq ataaniittoq|{{PLURAL:$1|qupperneq ataaseq ataaniittoq|quppernerit ataaniittut $1-it}} $2-suni.}}',
 
-'about'         => 'Pillugu',
-'newwindow'     => '(nutaamut ammassaaq)',
-'cancel'        => 'Unitsiguk',
+'about' => 'Pillugu',
+'newwindow' => '(nutaamut ammassaaq)',
+'cancel' => 'Unitsiguk',
 'moredotdotdot' => 'Suli...',
-'mytalk'        => 'Oqalliffikka',
-'navigation'    => 'Sumiissusersiuut',
+'mytalk' => 'Oqalliffikka',
+'navigation' => 'Sumiissusersiuut',
 
 # Cologne Blue skin
 'qbfind' => 'Naniuk',
@@ -129,255 +129,253 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Imm. nutaaq',
-'vector-action-move'       => 'Nuuguk',
-'vector-view-create'       => 'Pilersiguk',
-'vector-view-edit'         => 'Aaqqissoruk',
-'vector-view-history'      => 'Oqalutt.',
-'vector-view-view'         => 'Takuuk',
-'vector-view-viewsource'   => 'Toqqavia takuuk',
-
-'errorpagetitle'   => 'Kukkuneq',
-'returnto'         => '$1 -mut uterit',
-'tagline'          => '{{SITENAME}}-meersoq',
-'help'             => 'Ikiuutit',
-'search'           => 'Ujarlerit',
-'searchbutton'     => 'Ujarlerit',
-'go'               => 'Ikunnarit',
-'searcharticle'    => 'Tassunngarit',
-'history'          => 'Oqaluttuassartaa',
-'history_short'    => 'Oqaluttuassartaa',
+'vector-action-move' => 'Nuuguk',
+'vector-view-create' => 'Pilersiguk',
+'vector-view-edit' => 'Aaqqissoruk',
+'vector-view-history' => 'Oqalutt.',
+'vector-view-view' => 'Takuuk',
+'vector-view-viewsource' => 'Toqqavia takuuk',
+
+'errorpagetitle' => 'Kukkuneq',
+'returnto' => '$1 -mut uterit',
+'tagline' => '{{SITENAME}}-meersoq',
+'help' => 'Ikiuutit',
+'search' => 'Ujarlerit',
+'searchbutton' => 'Ujarlerit',
+'go' => 'Ikunnarit',
+'searcharticle' => 'Tassunngarit',
+'history' => 'Oqaluttuassartaa',
+'history_short' => 'Oqaluttuassartaa',
 'printableversion' => 'Naqikkuminartoq',
-'permalink'        => 'Ataavartumik innersuut',
-'edit'             => 'Aaqqissoruk',
-'create'           => 'Pilersiguk',
-'editthispage'     => 'Qupperneq aaqqissuuguk',
-'delete'           => 'Peeruk',
-'deletethispage'   => 'Qupperneq piiaruk',
-'protect'          => 'Illersoruk',
-'protect_change'   => 'allannguutit',
-'unprotect'        => 'Illersorunnaaruk',
-'newpage'          => 'Qupperneq nutaaq',
+'permalink' => 'Ataavartumik innersuut',
+'edit' => 'Aaqqissoruk',
+'create' => 'Pilersiguk',
+'editthispage' => 'Qupperneq aaqqissuuguk',
+'delete' => 'Peeruk',
+'deletethispage' => 'Qupperneq piiaruk',
+'protect' => 'Illersoruk',
+'protect_change' => 'allannguutit',
+'unprotect' => 'Illersorunnaaruk',
+'newpage' => 'Qupperneq nutaaq',
 'talkpagelinktext' => 'Oqallinneq',
-'personaltools'    => 'Namminermut sannatit',
-'talk'             => 'Oqallinneq',
-'views'            => 'Takutitat',
-'toolbox'          => 'Atortut',
-'otherlanguages'   => 'Oqaatsit allat',
-'redirectedfrom'   => '($1-mit nuunneq)',
-'lastmodifiedat'   => 'Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2',
-'jumpto'           => 'Uunngarit:',
+'personaltools' => 'Namminermut sannatit',
+'talk' => 'Oqallinneq',
+'views' => 'Takutitat',
+'toolbox' => 'Atortut',
+'otherlanguages' => 'Oqaatsit allat',
+'redirectedfrom' => '($1-mit nuunneq)',
+'lastmodifiedat' => 'Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2',
+'jumpto' => 'Uunngarit:',
 'jumptonavigation' => 'sumiissusersiuut',
-'jumptosearch'     => 'ujarlerit',
+'jumptosearch' => 'ujarlerit',
 
 # 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}} pillugu',
-'aboutpage'            => 'Project:Pillugu',
-'currentevents'        => 'Maannakkut pisut',
-'disclaimers'          => 'Aalajangersagaq',
-'edithelp'             => 'Ikiuutit',
-'edithelppage'         => 'Help:Aaqqissuussineq',
-'helppage'             => 'Help:Ikiuutit',
-'mainpage'             => 'Saqqaa',
+'aboutsite' => '{{SITENAME}} pillugu',
+'aboutpage' => 'Project:Pillugu',
+'currentevents' => 'Maannakkut pisut',
+'disclaimers' => 'Aalajangersagaq',
+'edithelp' => 'Ikiuutit',
+'edithelppage' => 'Help:Aaqqissuussineq',
+'helppage' => 'Help:Ikiuutit',
+'mainpage' => 'Saqqaa',
 'mainpage-description' => 'Saqqaa',
-'portal'               => 'Allattartup saqqaa',
-'privacy'              => 'Namminermut paasissutissat',
+'portal' => 'Allattartup saqqaa',
+'privacy' => 'Namminermut paasissutissat',
 
-'retrievedfrom'       => 'Uannga aaneqartoq "$1"',
-'youhavenewmessages'  => '<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)',
-'newmessageslink'     => 'Allagarsivutit',
+'retrievedfrom' => 'Uannga aaneqartoq "$1"',
+'youhavenewmessages' => '<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)',
+'newmessageslink' => 'Allagarsivutit',
 'newmessagesdifflink' => 'allannguutini kingullerniit',
-'editsection'         => 'aaqqissoruk',
-'editold'             => 'aaqqissoruk',
-'viewsourceold'       => 'toqqavia takuuk',
-'editlink'            => 'aaqqissoruk',
-'editsectionhint'     => 'Aaqqissuuguk immikkoortoq: $1',
-'toc'                 => 'Imarisai',
-'showtoc'             => 'saqqummeruk',
-'hidetoc'             => 'toqqoruk',
-'site-rss-feed'       => '$1 RSS Feed',
-'site-atom-feed'      => '$1 Atom Feed',
-'page-rss-feed'       => '"$1" RSS Feed',
-'red-link-title'      => '$1 (Qupperneq suli allaffigineqanngilaq)',
+'editsection' => 'aaqqissoruk',
+'editold' => 'aaqqissoruk',
+'viewsourceold' => 'toqqavia takuuk',
+'editlink' => 'aaqqissoruk',
+'editsectionhint' => 'Aaqqissuuguk immikkoortoq: $1',
+'toc' => 'Imarisai',
+'showtoc' => 'saqqummeruk',
+'hidetoc' => 'toqqoruk',
+'site-rss-feed' => '$1 RSS Feed',
+'site-atom-feed' => '$1 Atom Feed',
+'page-rss-feed' => '"$1" RSS Feed',
+'red-link-title' => '$1 (Qupperneq suli allaffigineqanngilaq)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Allaaserisaq',
-'nstab-user'     => 'Atuisup quppernera',
-'nstab-special'  => 'Immikkut',
-'nstab-project'  => 'Pillugu',
-'nstab-image'    => 'Assiliaq',
+'nstab-main' => 'Allaaserisaq',
+'nstab-user' => 'Atuisup quppernera',
+'nstab-special' => 'Immikkut',
+'nstab-project' => 'Pillugu',
+'nstab-image' => 'Assiliaq',
 'nstab-template' => 'Ilisserut',
-'nstab-help'     => 'Ikiuutit',
+'nstab-help' => 'Ikiuutit',
 'nstab-category' => 'Sumut atassuseq',
 
 # General errors
-'viewsource'        => 'Toqqavia takuuk',
+'viewsource' => 'Toqqavia takuuk',
 'protectedpagetext' => 'Una qupperneq allaffigineqarnissamut illersugaavoq.',
-'viewsourcetext'    => 'Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:',
+'viewsourcetext' => 'Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:',
 
 # Login and logout pages
-'logouttext'                 => "'''Maanna anivutit.'''
+'logouttext' => "'''Maanna anivutit.'''
 
 {{SITENAME}} atorlugu ingerlaqqissinnaavutit kinaanerit isertorlugu, iseqqissinnaavutilluunniit taamatut isissuteqarlutit imalt. allat iserfigisinnaanngorpaat.",
-'yourname'                   => 'Atuisutut atit',
-'yourpassword'               => 'Isissutissaq:',
-'yourpasswordagain'          => 'Isissutissaq allaqqiguk',
-'remembermypassword'         => 'Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                      => 'Iserit',
-'nav-login-createaccount'    => 'Konto-mik pilersitsigit imalt. iserit',
-'loginprompt'                => 'Pisariaqassaaq cookies-itit atussallugit {{SITENAME}} -mut isissaguit.',
-'userlogin'                  => 'Kontomik pilersitsigit / iserit',
-'logout'                     => 'Anigit',
-'userlogout'                 => 'Anigit',
-'nologin'                    => "Kontomik peqanngilatit? '''$1'''.",
-'nologinlink'                => 'Kontomik pilersitsigit',
-'createaccount'              => 'Kontomik nutaamik pilersitsigit',
-'gotaccount'                 => "Kontomik peqareerpit? '''$1'''.",
-'gotaccountlink'             => 'Iserit',
-'createaccountmail'          => 'e-mail-ikkut',
-'badretype'                  => 'Isissutissat allanneqartut assigiinngillat.',
-'userexists'                 => 'Atuisup atia atorneqareerpoq. Allamik qinersigit.',
-'loginerror'                 => 'Iserniarnerlunneq',
-'loginsuccesstitle'          => 'Maanna isersimalerputit',
-'loginsuccess'               => 'Maanna {{SITENAME}} -mut isersimalerputit "$1" -itut taaguuserlutit.',
-'wrongpassword'              => 'Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.',
-'mailmypassword'             => 'E-mail-ikkut isissutissaq nutaaq nassiuguk',
+'yourname' => 'Atuisutut atit',
+'yourpassword' => 'Isissutissaq:',
+'yourpasswordagain' => 'Isissutissaq allaqqiguk',
+'remembermypassword' => 'Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Iserit',
+'nav-login-createaccount' => 'Konto-mik pilersitsigit imalt. iserit',
+'loginprompt' => 'Pisariaqassaaq cookies-itit atussallugit {{SITENAME}} -mut isissaguit.',
+'userlogin' => 'Kontomik pilersitsigit / iserit',
+'logout' => 'Anigit',
+'userlogout' => 'Anigit',
+'nologin' => "Kontomik peqanngilatit? '''$1'''.",
+'nologinlink' => 'Kontomik pilersitsigit',
+'createaccount' => 'Kontomik nutaamik pilersitsigit',
+'gotaccount' => "Kontomik peqareerpit? '''$1'''.",
+'gotaccountlink' => 'Iserit',
+'createaccountmail' => 'e-mail-ikkut',
+'badretype' => 'Isissutissat allanneqartut assigiinngillat.',
+'userexists' => 'Atuisup atia atorneqareerpoq. Allamik qinersigit.',
+'loginerror' => 'Iserniarnerlunneq',
+'loginsuccesstitle' => 'Maanna isersimalerputit',
+'loginsuccess' => 'Maanna {{SITENAME}} -mut isersimalerputit "$1" -itut taaguuserlutit.',
+'wrongpassword' => 'Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.',
+'mailmypassword' => 'E-mail-ikkut isissutissaq nutaaq nassiuguk',
 'acct_creation_throttle_hit' => 'Konto-mik pilersitsereersimagavit pilersitseqqissinnaanngilatit, IP-adressit malillugu.
 Taamaattumik maannakkorpiaq kontomik pilersitsisinnaanngilatit.',
 
 # Change password dialog
 'oldpassword' => 'Isissutissatoqaq:',
 'newpassword' => 'Isissutissaq nutaaq:',
-'retypenew'   => 'Isissutissaq nutaaq allaqqiuk',
+'retypenew' => 'Isissutissaq nutaaq allaqqiuk',
 
 # Edit pages
-'summary'                          => 'Allaaserinera:',
-'subject'                          => 'Pineqartoq/qulequtaq:',
-'minoredit'                        => 'Annikitsumik allannguutaavoq',
-'watchthis'                        => 'Allaaserisaq ersersimatiguk',
-'savearticle'                      => 'Toqqoruk',
-'preview'                          => 'Isikkua',
-'showpreview'                      => 'Isikkua takuuk',
-'showdiff'                         => 'Allannguutit',
-'anoneditwarning'                  => "'''Mianersoqqussut:''' Isersimanak sulilerputit.
+'summary' => 'Allaaserinera:',
+'subject' => 'Pineqartoq/qulequtaq:',
+'minoredit' => 'Annikitsumik allannguutaavoq',
+'watchthis' => 'Allaaserisaq ersersimatiguk',
+'savearticle' => 'Toqqoruk',
+'preview' => 'Isikkua',
+'showpreview' => 'Isikkua takuuk',
+'showdiff' => 'Allannguutit',
+'anoneditwarning' => "'''Mianersoqqussut:''' Isersimanak sulilerputit.
 IP adressit nuisassaaq massuma quppernerup oqaluttuassartaani.",
-'accmailtitle'                     => 'Password-i nassiunneqarsimavoq.',
-'accmailtext'                      => 'Password-i "$1" $2-mut nassiunneqarsimavoq.',
-'newarticle'                       => '(Nuutaq)',
-'newarticletext'                   => "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.
+'accmailtitle' => 'Password-i nassiunneqarsimavoq.',
+'accmailtext' => 'Password-i "$1" $2-mut nassiunneqarsimavoq.',
+'newarticle' => '(Nuutaq)',
+'newarticletext' => "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.
 Qupperneq pilersissagukku, boks-ip iluani allagit (takuuk [[{{MediaWiki:Helppage}}|ikiuutit]] paasissutissaanerusut).
 Maanngarsimaguit kukkusumik, toortaat '''utimut''' tooruk.",
-'anontalkpagetext'                 => "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.
+'anontalkpagetext' => "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.
 Taamaattumik IP-adressia kinaanerattut atortariaqassavarput.
 IP-adressi pigineqarsinnaavoq atuisunit arlalinnit.
 Atuisuuguit anonym-iusoq, isumaqarlutillu soqutiginngisannik oqaaseqarfigineqarlutit, qinnuigivatsigit [[Special:UserLogin/signup|atuisutut pilersitsissallutit]] aamma [[Special:UserLogin|iserlutit]], taava siunissami paarlattoornernik atuisuni arlalinni pinaveersaartoqarniassammat.''",
-'noarticletext'                    => 'Maannamut una qupperneq allaffigineqanngilaq.
+'noarticletext' => 'Maannamut una qupperneq allaffigineqanngilaq.
 Taamatut oqaasilimmik quppernerni allani [[Special:Search/{{PAGENAME}}|ujaasisinnaavutit]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log-ini ujaasisinnavutillu] imaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} qupperneq pilersissinnaavat]</span>.',
-'previewnote'                      => 'Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!',
-'editing'                          => 'Aaqqissorpaa $1',
-'editingsection'                   => 'Aaqqissorpaa $1 (immikkoortoq)',
-'editingcomment'                   => 'Aaqqissorpaa $1 (immikkoortoq nutaaq)',
-'yourtext'                         => 'Allatat',
-'editingold'                       => "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''
+'previewnote' => 'Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!',
+'editing' => 'Aaqqissorpaa $1',
+'editingsection' => 'Aaqqissorpaa $1 (immikkoortoq)',
+'editingcomment' => 'Aaqqissorpaa $1 (immikkoortoq nutaaq)',
+'yourtext' => 'Allatat',
+'editingold' => "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''
 Toqqorukku quppernerup taamaannera taarserneqassaaq.",
-'protectedpagewarning'             => "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
-'semiprotectedpagewarning'         => "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
-'templatesused'                    => '{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:',
+'protectedpagewarning' => "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
+'semiprotectedpagewarning' => "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
+'templatesused' => '{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:',
 'permissionserrorstext-withaction' => 'Pisinnaatitaaffeqanngilatit $2 atussallugu, {{PLURAL:$1|peqqutigalugu|peqqutigalugit}}:',
-'moveddeleted-notice'              => 'Una qupperneq peerneqarsimavoq.
+'moveddeleted-notice' => 'Una qupperneq peerneqarsimavoq.
 Peersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.',
 
 # History pages
-'currentrev'             => 'Maanna taamaannera',
-'currentrev-asof'        => 'Maanna taamaannera $1-meersoq',
-'revisionasof'           => 'Taamaannera $1-meersoq',
-'previousrevision'       => '← Pisoqaaneq',
-'nextrevision'           => 'Nutaaneq →',
-'currentrevisionlink'    => 'Massakkuunera takuuk',
-'cur'                    => 'maanna',
-'last'                   => 'siulia',
-'page_first'             => 'siulliit',
-'page_last'              => 'kingulliit',
-'histlegend'             => 'Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut',
+'currentrev' => 'Maanna taamaannera',
+'currentrev-asof' => 'Maanna taamaannera $1-meersoq',
+'revisionasof' => 'Taamaannera $1-meersoq',
+'previousrevision' => '← Pisoqaaneq',
+'nextrevision' => 'Nutaaneq →',
+'currentrevisionlink' => 'Massakkuunera takuuk',
+'cur' => 'maanna',
+'last' => 'siulia',
+'page_first' => 'siulliit',
+'page_last' => 'kingulliit',
+'histlegend' => 'Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut',
 'history-fieldset-title' => 'Oqaluttuassartaani qupperaagit',
-'histfirst'              => 'Pisoqaaneq',
-'histlast'               => 'Nutaaneq',
+'histfirst' => 'Pisoqaaneq',
+'histlast' => 'Nutaaneq',
 
 # Diffs
-'history-title'           => '"$1"-p oqaluttuassartaa',
+'history-title' => '"$1"-p oqaluttuassartaa',
 'compareselectedversions' => 'Qinikkat nalilersukkit',
-'editundo'                => 'peeruk',
+'editundo' => 'peeruk',
 
 # Search results
-'searchresults'             => 'Ujaasinermi inernerit',
-'searchresults-title'       => 'Uuma ujarnera "$1"',
-'prevn'                     => 'siulii {{PLURAL:$1|$1}}',
-'nextn'                     => 'tullii {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Takuuk ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists'         => "'''Qupperneqarpoq \"[[:\$1]]\" -mik atilimmik maani wikimi'''",
-'searchmenu-new'            => "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
-'searchhelp-url'            => 'Help:Ikiuutit',
-'searchprofile-articles'    => 'Imarisai',
-'searchprofile-project'     => 'Ikiuutit suliniutillu imaat',
-'searchprofile-everything'  => 'Tamarmik',
-'searchprofile-advanced'    => 'Ujaasiffik anneq',
-'search-result-size'        => '$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})',
-'search-redirect'           => '(nuunneq $1)',
-'search-suggest'            => 'Una piviuk: $1',
-'search-mwsuggest-enabled'  => 'siunnersuuserlugu',
-'search-mwsuggest-disabled' => 'siunnersuusernagu',
-'showingresultsheader'      => "{{PLURAL:$5|Inernera '''$1''' '''$3'''|Inerneri '''$1 - $2''' '''$3'''}}-suni '''$4'''-mut",
-'search-nonefound'          => 'Ujaasineq inerneqanngilaq',
-'powersearch'               => 'Ujarlerit',
+'searchresults' => 'Ujaasinermi inernerit',
+'searchresults-title' => 'Uuma ujarnera "$1"',
+'prevn' => 'siulii {{PLURAL:$1|$1}}',
+'nextn' => 'tullii {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Takuuk ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Qupperneqarpoq \"[[:\$1]]\" -mik atilimmik maani wikimi'''",
+'searchmenu-new' => "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
+'searchhelp-url' => 'Help:Ikiuutit',
+'searchprofile-articles' => 'Imarisai',
+'searchprofile-project' => 'Ikiuutit suliniutillu imaat',
+'searchprofile-everything' => 'Tamarmik',
+'searchprofile-advanced' => 'Ujaasiffik anneq',
+'search-result-size' => '$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})',
+'search-redirect' => '(nuunneq $1)',
+'search-suggest' => 'Una piviuk: $1',
+'showingresultsheader' => "{{PLURAL:$5|Inernera '''$1''' '''$3'''|Inerneri '''$1 - $2''' '''$3'''}}-suni '''$4'''-mut",
+'search-nonefound' => 'Ujaasineq inerneqanngilaq',
+'powersearch' => 'Ujarlerit',
 
 # Preferences page
 'mypreferences' => 'Inissiffissat',
-'prefs-rc'      => 'Allannguutit kingulliit',
-'saveprefs'     => 'Toqqukkit',
-'yourlanguage'  => 'Oqaatsit:',
+'prefs-rc' => 'Allannguutit kingulliit',
+'saveprefs' => 'Toqqukkit',
+'yourlanguage' => 'Oqaatsit:',
 
 # Groups
 'group-sysop' => 'Administratorit',
 
 # Recent changes
-'recentchanges'               => 'Allannguutit kingulliit',
-'recentchanges-legend'        => 'Inissisimaffiit allannguutini kingullerni',
-'recentchangestext'           => "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
+'recentchanges' => 'Allannguutit kingulliit',
+'recentchanges-legend' => 'Inissisimaffiit allannguutini kingullerni',
+'recentchanges-summary' => "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
 'recentchanges-label-newpage' => 'Tassaavoq qupperneq nutaaq',
-'recentchanges-label-minor'   => 'Tassaavoq allannguut annikitsoq',
-'recentchanges-label-bot'     => 'Bot-ip allannguutaa',
-'rclistfrom'                  => 'Allannguutit kingulliit takukkit $1 -nngaanniit',
-'rcshowhideminor'             => '$1 allannguutit annikitsut',
-'rcshowhidebots'              => '$1 robottit',
-'rcshowhideliu'               => '$1 atuisut nalunaarsimasut',
-'rcshowhideanons'             => '$1 atuisut anonymejusut',
-'rcshowhidepatr'              => '$1 allannguutit misissorneqarsimasut',
-'rcshowhidemine'              => '$1 nammineq tapit',
-'rclinks'                     => 'Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3',
-'diff'                        => 'assigiinng',
-'hist'                        => 'oqalutt',
-'hide'                        => 'Assequt',
-'show'                        => 'Saqqummiuk',
-'minoreditletter'             => 'm',
-'newpageletter'               => 'N',
-'boteditletter'               => 'b',
+'recentchanges-label-minor' => 'Tassaavoq allannguut annikitsoq',
+'recentchanges-label-bot' => 'Bot-ip allannguutaa',
+'rclistfrom' => 'Allannguutit kingulliit takukkit $1 -nngaanniit',
+'rcshowhideminor' => '$1 allannguutit annikitsut',
+'rcshowhidebots' => '$1 robottit',
+'rcshowhideliu' => '$1 atuisut nalunaarsimasut',
+'rcshowhideanons' => '$1 atuisut anonymejusut',
+'rcshowhidepatr' => '$1 allannguutit misissorneqarsimasut',
+'rcshowhidemine' => '$1 nammineq tapit',
+'rclinks' => 'Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3',
+'diff' => 'assigiinng',
+'hist' => 'oqalutt',
+'hide' => 'Assequt',
+'show' => 'Saqqummiuk',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Allannguutit naleqqiussat',
-'recentchangeslinked-feed'    => 'Allannguutit naleqqiussat',
+'recentchangeslinked' => 'Allannguutit naleqqiussat',
+'recentchangeslinked-feed' => 'Allannguutit naleqqiussat',
 'recentchangeslinked-toolbox' => 'Allannguutit naleqqiussat',
 
 # Upload
-'upload'        => 'Fiilimik ilisigit',
+'upload' => 'Fiilimik ilisigit',
 'uploadedimage' => 'ilivaa "[[$1]]"',
 
 # Special:ListFiles
 'listfiles_user' => 'Atuisoq',
 
 # File description page
-'file-anchor-link'  => 'Assiliaq',
+'file-anchor-link' => 'Assiliaq',
 'filehist-datetime' => 'Ulloq/Piffissaq',
-'filehist-user'     => 'Atuisoq',
-'imagelinks'        => 'Innersuutit',
+'filehist-user' => 'Atuisoq',
+'imagelinks' => 'Innersuutit',
 
 # MIME search
 'mimesearch' => 'MIME ujaarlerit',
@@ -389,8 +387,8 @@ Peersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.',
 'statistics' => 'Kisitsisinngorlugit paasissutissat',
 
 # Miscellaneous special pages
-'newpages'      => 'Quppernerit nutaat',
-'move'          => 'Nuuguk',
+'newpages' => 'Quppernerit nutaat',
+'move' => 'Nuuguk',
 'pager-newer-n' => '{{PLURAL:$1|nutaaneq 1|nutaanerit $1}}',
 'pager-older-n' => '{{PLURAL:$1|pisoqaaneq 1|pisoqaanerit $1}}',
 
@@ -401,146 +399,146 @@ Peersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.',
 'specialloguserlabel' => 'Atuisoq:',
 
 # Special:AllPages
-'allarticles'    => 'Quppernerit tamarmik',
-'allpagesprev'   => 'Siulii',
-'allpagesnext'   => 'Tullii',
+'allarticles' => 'Quppernerit tamarmik',
+'allpagesprev' => 'Siulii',
+'allpagesnext' => 'Tullii',
 'allpagessubmit' => 'Tassunngarit',
 
 # Special:Categories
-'categories'         => 'Sunut atassusit',
+'categories' => 'Sunut atassusit',
 'categoriespagetext' => 'Uku {{PLURAL:$1|sumut atassuseq|sunut atassusit}} imarivai quppernerit media-lluunniit.
 [[Special:UnusedCategories|Sunut atassusit]] atorneqanngitsut maani ilaanngillat.
 Aamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].',
-'categoriesfrom'     => 'Takuuk qanoq aallartiffianeersumiit:',
+'categoriesfrom' => 'Takuuk qanoq aallartiffianeersumiit:',
 
 # Special:LinkSearch
 'linksearch-ok' => 'Ujaruk',
 
 # Watchlist
-'watchlist'      => 'Ersersimasut',
-'mywatchlist'    => 'Nuisatiffikka',
+'watchlist' => 'Ersersimasut',
+'mywatchlist' => 'Nuisatiffikka',
 'addedwatchtext' => 'Una qupperneq "[[:$1]]" ersersimatitannut ilanngunneqarpoq. Siunissami allannguutit ilinnut malugeqquneqartassapput aamma [[Special:RecentChanges|allannguutini kingullerni]] issusuumik allanneqartuusassallutik. Ersersimatikkusunngikkukku [[Special:Watchlist|piiginnassavat]] ersersimasuutitanni.',
-'watch'          => 'Ersilli',
-'watchthispage'  => 'Qupperneq ersersimatiguk',
-'unwatch'        => 'Ersitsinnagu',
+'watch' => 'Ersilli',
+'watchthispage' => 'Qupperneq ersersimatiguk',
+'unwatch' => 'Ersitsinnagu',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Saqqumitiguk',
+'watching' => 'Saqqumitiguk',
 'unwatching' => 'Saqquminera peeruk',
 
 # Delete
-'excontent'       => "imarivaa: '$1'",
+'excontent' => "imarivaa: '$1'",
 'excontentauthor' => "imarivaa: '$1' (allattutuaavorlu '[[Special:Contributions/$2|$2]]')",
-'delete-confirm'  => 'Peeruk "$1"',
-'actioncomplete'  => 'Naammassivoq',
-'deletedtext'     => '"$1" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.',
+'delete-confirm' => 'Peeruk "$1"',
+'actioncomplete' => 'Naammassivoq',
+'deletedtext' => '"$1" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.',
 
 # Rollback
 'revertpage' => 'Inisseqqiineq [[User:$1|$1]]-meersoq, peerneqarpoq [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])-meersoq',
 
 # Protect
-'prot_1movedto2'         => '[[$1]]-i nuunneqarsimavoq [[$2]]-mut',
+'prot_1movedto2' => '[[$1]]-i nuunneqarsimavoq [[$2]]-mut',
 'protect-expiry-options' => '1 tiimi:1 hour,ulloq 1:1 day,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite',
 
 # Undelete
-'undeletebtn'            => 'Inisseqqiguk',
+'undeletebtn' => 'Inisseqqiguk',
 'undelete-search-submit' => 'Ujarlerit',
 
 # Namespace form on various pages
-'namespace'      => 'Quppernerup ilusia:',
-'invert'         => 'Quppernerup ilusia qinernagu',
+'namespace' => 'Quppernerup ilusia:',
+'invert' => 'Quppernerup ilusia qinernagu',
 'blanknamespace' => '(Pingaarneq)',
 
 # Contributions
 'contributions' => 'Atuisup tapii',
-'mycontris'     => 'Tapikka',
-'contribsub2'   => '$1-meersoq ($2)',
-'uctop'         => '(kingulleq)',
-'month'         => 'Qaammat:',
-'year'          => 'Ukioq:',
-
-'sp-contributions-newbies'  => 'Atuisut nutaaginnaat takukkit',
-'sp-contributions-talk'     => 'oqallinneq',
-'sp-contributions-search'   => 'Tapiisunik ujaasineq',
+'mycontris' => 'Tapikka',
+'contribsub2' => '$1-meersoq ($2)',
+'uctop' => '(kingulleq)',
+'month' => 'Qaammat:',
+'year' => 'Ukioq:',
+
+'sp-contributions-newbies' => 'Atuisut nutaaginnaat takukkit',
+'sp-contributions-talk' => 'oqallinneq',
+'sp-contributions-search' => 'Tapiisunik ujaasineq',
 'sp-contributions-username' => 'IP adresse imalt. atuisoq:',
-'sp-contributions-submit'   => 'Ujaruk',
+'sp-contributions-submit' => 'Ujaruk',
 
 # What links here
-'whatlinkshere'      => 'Suna maangamut innersuussisoq',
+'whatlinkshere' => 'Suna maangamut innersuussisoq',
 'whatlinkshere-prev' => '{{PLURAL:$1|siulia|siulii $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|tullia|tullii $1}}',
 
 # Block/unblock
-'blockip'            => 'Atuisoq asseruk',
-'blockip-legend'     => 'Atuisoq asseruk',
+'blockip' => 'Atuisoq asseruk',
+'blockip-legend' => 'Atuisoq asseruk',
 'ipadressorusername' => 'IP adresse imalt. atuisoq:',
-'ipboptions'         => '2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite',
+'ipboptions' => '2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite',
 'ipblocklist-submit' => 'Ujarlerit',
-'infiniteblock'      => 'killeqanngitsoq',
-'expiringblock'      => 'atorunnaassaaq $1 $2-nngoruni',
-'blocklink'          => 'assersoruk',
-'contribslink'       => 'tapikkat',
-'blocklogentry'      => 'asserpaa [[$1]] $2-mik sivissusilimmik $3',
+'infiniteblock' => 'killeqanngitsoq',
+'expiringblock' => 'atorunnaassaaq $1 $2-nngoruni',
+'blocklink' => 'assersoruk',
+'contribslink' => 'tapikkat',
+'blocklogentry' => 'asserpaa [[$1]] $2-mik sivissusilimmik $3',
 
 # Move page
-'movearticle'    => 'Qupperneq nuuguk',
-'move-watch'     => 'Qupperneq ersersimatiguk',
-'movepagebtn'    => 'Qupperneq nuuguk',
-'pagemovedsub'   => 'Nuunnera iluatsippoq',
+'movearticle' => 'Qupperneq nuuguk',
+'move-watch' => 'Qupperneq ersersimatiguk',
+'movepagebtn' => 'Qupperneq nuuguk',
+'pagemovedsub' => 'Nuunnera iluatsippoq',
 'movepage-moved' => 'Qupperneq \'\'\'"$1" uunga nuuppoq "$2"\'\'\'',
 
 # Namespace 8 related
-'allmessages-language'      => 'Oqaatsit:',
+'allmessages-language' => 'Oqaatsit:',
 'allmessages-filter-submit' => 'Takuuk',
 
 # Thumbnails
 'thumbnail-more' => 'Allisiguk',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Atuisutut quppernerit',
-'tooltip-pt-mytalk'              => 'Oqalliffiit',
-'tooltip-pt-preferences'         => 'Inissiinikka',
-'tooltip-pt-mycontris'           => 'Tapikkatit',
-'tooltip-pt-login'               => 'Iseqquneqaraluarputit, pitsaanerussagaluarpoq',
-'tooltip-pt-logout'              => 'Aniffik',
-'tooltip-ca-talk'                => 'Quppernerup imaanik oqallinneq',
-'tooltip-ca-edit'                => 'Allanngortiterisinnaavutit. Isikkua takulaariuk',
-'tooltip-ca-history'             => 'Quppernerup siulii',
-'tooltip-ca-move'                => 'Qupperneq nuuguk',
-'tooltip-ca-watch'               => 'Saqqumitiguk',
-'tooltip-search'                 => 'Ujaarlerit {{SITENAME}}',
-'tooltip-search-go'              => 'Tassunngarit nassaassappat',
-'tooltip-search-fulltext'        => 'Taanna ujaruk',
-'tooltip-n-mainpage'             => 'Saqqaa iseruk',
+'tooltip-pt-userpage' => 'Atuisutut quppernerit',
+'tooltip-pt-mytalk' => 'Oqalliffiit',
+'tooltip-pt-preferences' => 'Inissiinikka',
+'tooltip-pt-mycontris' => 'Tapikkatit',
+'tooltip-pt-login' => 'Iseqquneqaraluarputit, pitsaanerussagaluarpoq',
+'tooltip-pt-logout' => 'Aniffik',
+'tooltip-ca-talk' => 'Quppernerup imaanik oqallinneq',
+'tooltip-ca-edit' => 'Allanngortiterisinnaavutit. Isikkua takulaariuk',
+'tooltip-ca-history' => 'Quppernerup siulii',
+'tooltip-ca-move' => 'Qupperneq nuuguk',
+'tooltip-ca-watch' => 'Saqqumitiguk',
+'tooltip-search' => 'Ujaarlerit {{SITENAME}}',
+'tooltip-search-go' => 'Tassunngarit nassaassappat',
+'tooltip-search-fulltext' => 'Taanna ujaruk',
+'tooltip-n-mainpage' => 'Saqqaa iseruk',
 'tooltip-n-mainpage-description' => 'Saqqaa iseruk',
-'tooltip-n-portal'               => 'Suliaq, ilitsersuut, nassaassaasinnaasullu',
-'tooltip-n-currentevents'        => 'Maannakkut pisut tunuliaqutai takukkit',
-'tooltip-n-recentchanges'        => 'Wikimi allannguutit kingulliit',
-'tooltip-n-randompage'           => 'Allaaserisamukarit',
-'tooltip-n-help'                 => 'Qanoq iliussaanga ...',
-'tooltip-t-whatlinkshere'        => 'Innersuussami saqqummiussat',
-'tooltip-t-recentchangeslinked'  => 'Massuma quppernerani allannguutit kingulliit',
-'tooltip-t-upload'               => 'Assinik mediafiilinilluunniit ilisigit',
-'tooltip-t-specialpages'         => 'Quppernerit immikkut ittut nassaassaasinnaasut',
-'tooltip-t-print'                => 'Quppernerup naqikkuminarnera',
-'tooltip-t-permalink'            => 'Massuma quppernerup taamaaqqaarnera',
-'tooltip-ca-nstab-main'          => 'Imarisaa takuuk',
-'tooltip-save'                   => 'Allannguutitit toqqukkit',
-'tooltip-preview'                => 'Isikkua takuuk, toqqortinnaguk atortaruk!',
+'tooltip-n-portal' => 'Suliaq, ilitsersuut, nassaassaasinnaasullu',
+'tooltip-n-currentevents' => 'Maannakkut pisut tunuliaqutai takukkit',
+'tooltip-n-recentchanges' => 'Wikimi allannguutit kingulliit',
+'tooltip-n-randompage' => 'Allaaserisamukarit',
+'tooltip-n-help' => 'Qanoq iliussaanga ...',
+'tooltip-t-whatlinkshere' => 'Innersuussami saqqummiussat',
+'tooltip-t-recentchangeslinked' => 'Massuma quppernerani allannguutit kingulliit',
+'tooltip-t-upload' => 'Assinik mediafiilinilluunniit ilisigit',
+'tooltip-t-specialpages' => 'Quppernerit immikkut ittut nassaassaasinnaasut',
+'tooltip-t-print' => 'Quppernerup naqikkuminarnera',
+'tooltip-t-permalink' => 'Massuma quppernerup taamaaqqaarnera',
+'tooltip-ca-nstab-main' => 'Imarisaa takuuk',
+'tooltip-save' => 'Allannguutitit toqqukkit',
+'tooltip-preview' => 'Isikkua takuuk, toqqortinnaguk atortaruk!',
 
 # Attribution
 'lastmodifiedatby' => 'Una qupperneq kingullermik allanngortinneqarsimavoq $2, $1 $3-mit.',
 
 # Browsing diffs
 'previousdiff' => '← Assigiinngissut siulia',
-'nextdiff'     => 'Assigiinngissut tullia →',
+'nextdiff' => 'Assigiinngissut tullia →',
 
 # Special:NewFiles
 'ilsubmit' => 'Ujarlerit',
 
 # 'all' in various places, this might be different for inflected languages
 'namespacesall' => 'tamarmik',
-'monthsall'     => 'tamarmik',
+'monthsall' => 'tamarmik',
 
 # Auto-summaries
 'autosumm-new' => "Qupperneq pilersippaa '$1'",
@@ -548,4 +546,7 @@ Aamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].'
 # Special:SpecialPages
 'specialpages' => 'Quppernerit immikkut ittut',
 
+# Search suggestions
+'searchsuggest-search' => 'Ujarlerit',
+
 );
index b7329fe..7f53780 100644 (file)
@@ -189,76 +189,76 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ', '#ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__លាក់មាតិកា__', '__លាក់បញ្ជីអត្ថបទ__', '__គ្មានមាតិកា__', '__គ្មានបញ្ជីអត្ថបទ__', '__កុំបង្ហាញមាតិកា__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__លាក់វិចិត្រសាល__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__មាតិកា__', '__បញ្ជីអត្ថបទ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__ផ្នែកមិនត្រូវកែប្រែ__', '__មិនមានផ្នែកកែប្រែ__', '__លាក់ផ្នែកកែប្រែ__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__លាក់បឋមកថា__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ខែនេះ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ឈ្មោះខែនេះ', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'ថ្ងៃនេះ', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'ឈ្មោះថ្ងៃនេះ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ឆ្នាំនេះ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ពេលនេះ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ម៉ោងនេះ', 'ម៉ោងឥឡូវ', 'CURRENTHOUR' ),
-       'localyear'               => array( '1', 'LOCALDAYNAME', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ពេលវេលាក្នុងតំបន់', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ម៉ោងតំបន់', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ចំនួនទំព័រ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ចំនួនអត្ថបទ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ចំនួនឯកសារ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ចំនួនអ្នកប្រើប្រាស់', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ចំនួនកំណែប្រែ', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ឈ្មោះទំព័រ', 'PAGENAME' ),
-       'namespace'               => array( '1', 'លំហឈ្មោះ', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'លំហឈ្មោះទំព័រពិភាក្សា', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ឈ្មោះទំព័រពេញ', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'ឈ្មោះទំព័ររង', 'SUBPAGENAME' ),
-       'talkpagename'            => array( '1', 'ឈ្មោះទំព័រពិភាក្សា', 'TALKPAGENAME' ),
-       'msg'                     => array( '0', 'សារ:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'សារមិនមែនជាកូដវិគី:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'រូបភាពតូច', 'រូបតូច', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'រូបភាពតូច=$1', 'រូបតូច=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ស្តាំ', 'ខាងស្តាំ', 'right' ),
-       'img_left'                => array( '1', 'ធ្វេង', 'ខាងធ្វេង', 'left' ),
-       'img_none'                => array( '1', 'ទទេ', 'គ្មាន', 'none' ),
-       'img_width'               => array( '1', '$1ភីកសែល', '$1ភស', '$1px' ),
-       'img_center'              => array( '1', 'កណ្តាល', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ស៊ុម', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'គ្មានស៊ុម', 'frameless' ),
-       'img_page'                => array( '1', 'ទំព័រ=$1', 'ទំព័រ$1', 'page=$1', 'page $1' ),
-       'img_top'                 => array( '1', 'ផ្នែកលើ', 'ផ្នែកខាងលើ', 'top' ),
-       'img_text_top'            => array( '1', 'ឃ្លានៅផ្នែកខាងលើ', 'ឃ្លាផ្នែកខាងលើ', 'text-top' ),
-       'img_middle'              => array( '1', 'ផ្នែកកណ្តាល', 'middle' ),
-       'img_bottom'              => array( '1', 'បាត', 'ផ្នែកបាត', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'ឃ្លានៅផ្នែកបាត', 'ឃ្លាផ្នែកបាត', 'text-bottom' ),
-       'img_link'                => array( '1', 'តំនភ្ជាប់=$1', 'តំណភ្ជាប់=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'ឈ្មោះវិបសាយ', 'ឈ្មោះគេហទំព័រ', 'SITENAME' ),
-       'ns'                      => array( '0', 'លឈ:', 'NS:' ),
-       'server'                  => array( '0', 'ម៉ាស៊ីនបម្រើសេវា', 'SERVER' ),
-       'servername'              => array( '0', 'ឈ្មោះម៉ាស៊ីនបម្រើសេវា', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ផ្លូវស្រ្គីប', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'វេយ្យាករណ៍:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'សប្ដាហ៍នេះ', 'CURRENTWEEK' ),
-       'plural'                  => array( '0', 'ពហុវចនៈ:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLពេញ:', 'FULLURL:' ),
-       'displaytitle'            => array( '1', 'បង្ហាញចំណងជើង', 'បង្ហាញចំនងជើង', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'រ', 'R' ),
-       'newsectionlink'          => array( '1', '__តំនភ្ជាប់ផ្នែកថ្មី__', '__តំណភ្ជាប់ផ្នែកថ្មី__', '__NEWSECTIONLINK__' ),
-       'language'                => array( '0', '#ភាសា:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'កូដភាសា', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'ចំនួនអ្នកអភិបាល', 'ចំនួនអ្នកថែទាំប្រព័ន្ធ', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'ពិសេស', 'special' ),
-       'filepath'                => array( '0', 'ផ្លូវនៃឯកសារ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ប្លាក', 'tag' ),
-       'hiddencat'               => array( '1', '__ចំណាត់ថ្នាក់ក្រុមមិនបានបង្ហាញ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'ចំនួនទំព័រក្នុងចំនាត់ថ្នាក់ក្រុម', 'ចំនួនទំព័រក្នុងចំណាត់ថ្នាក់ក្រុម', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ទំហំទំព័រ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__លិបិក្រម__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__មិនមានលិបិក្រម__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__ស្ថិតិទំព័របញ្ជូនបន្ត__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#បញ្ជូនបន្ត', '#ប្ដូរទីតាំងទៅ', '#ប្តូរទីតាំងទៅ', '#ប្ដូរទីតាំង', '#ប្តូរទីតាំង', '#ប្ដូរចំណងជើង', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__លាក់មាតិកា__', '__លាក់បញ្ជីអត្ថបទ__', '__គ្មានមាតិកា__', '__គ្មានបញ្ជីអត្ថបទ__', '__កុំបង្ហាញមាតិកា__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__លាក់វិចិត្រសាល__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__មាតិកា__', '__បញ្ជីអត្ថបទ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ផ្នែកមិនត្រូវកែប្រែ__', '__មិនមានផ្នែកកែប្រែ__', '__លាក់ផ្នែកកែប្រែ__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__លាក់បឋមកថា__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ខែនេះ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ឈ្មោះខែនេះ', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'ថ្ងៃនេះ', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'ឈ្មោះថ្ងៃនេះ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ឆ្នាំនេះ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ពេលនេះ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ម៉ោងនេះ', 'ម៉ោងឥឡូវ', 'CURRENTHOUR' ),
+       'localyear'                 => array( '1', 'LOCALDAYNAME', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ពេលវេលាក្នុងតំបន់', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ម៉ោងតំបន់', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ចំនួនទំព័រ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ចំនួនអត្ថបទ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ចំនួនឯកសារ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ចំនួនអ្នកប្រើប្រាស់', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ចំនួនកំណែប្រែ', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ឈ្មោះទំព័រ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'លំហឈ្មោះ', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'លំហឈ្មោះទំព័រពិភាក្សា', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ឈ្មោះទំព័រពេញ', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'ឈ្មោះទំព័ររង', 'SUBPAGENAME' ),
+       'talkpagename'              => array( '1', 'ឈ្មោះទំព័រពិភាក្សា', 'TALKPAGENAME' ),
+       'msg'                       => array( '0', 'សារ:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'សារមិនមែនជាកូដវិគី:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'រូបភាពតូច', 'រូបតូច', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'រូបភាពតូច=$1', 'រូបតូច=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ស្តាំ', 'ខាងស្តាំ', 'right' ),
+       'img_left'                  => array( '1', 'ធ្វេង', 'ខាងធ្វេង', 'left' ),
+       'img_none'                  => array( '1', 'ទទេ', 'គ្មាន', 'none' ),
+       'img_width'                 => array( '1', '$1ភីកសែល', '$1ភស', '$1px' ),
+       'img_center'                => array( '1', 'កណ្តាល', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ស៊ុម', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'គ្មានស៊ុម', 'frameless' ),
+       'img_page'                  => array( '1', 'ទំព័រ=$1', 'ទំព័រ$1', 'page=$1', 'page $1' ),
+       'img_top'                   => array( '1', 'ផ្នែកលើ', 'ផ្នែកខាងលើ', 'top' ),
+       'img_text_top'              => array( '1', 'ឃ្លានៅផ្នែកខាងលើ', 'ឃ្លាផ្នែកខាងលើ', 'text-top' ),
+       'img_middle'                => array( '1', 'ផ្នែកកណ្តាល', 'middle' ),
+       'img_bottom'                => array( '1', 'បាត', 'ផ្នែកបាត', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'ឃ្លានៅផ្នែកបាត', 'ឃ្លាផ្នែកបាត', 'text-bottom' ),
+       'img_link'                  => array( '1', 'តំនភ្ជាប់=$1', 'តំណភ្ជាប់=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'ឈ្មោះវិបសាយ', 'ឈ្មោះគេហទំព័រ', 'SITENAME' ),
+       'ns'                        => array( '0', 'លឈ:', 'NS:' ),
+       'server'                    => array( '0', 'ម៉ាស៊ីនបម្រើសេវា', 'SERVER' ),
+       'servername'                => array( '0', 'ឈ្មោះម៉ាស៊ីនបម្រើសេវា', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ផ្លូវស្រ្គីប', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'វេយ្យាករណ៍:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'សប្ដាហ៍នេះ', 'CURRENTWEEK' ),
+       'plural'                    => array( '0', 'ពហុវចនៈ:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLពេញ:', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'បង្ហាញចំណងជើង', 'បង្ហាញចំនងជើង', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'រ', 'R' ),
+       'newsectionlink'            => array( '1', '__តំនភ្ជាប់ផ្នែកថ្មី__', '__តំណភ្ជាប់ផ្នែកថ្មី__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#ភាសា:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'កូដភាសា', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'ចំនួនអ្នកអភិបាល', 'ចំនួនអ្នកថែទាំប្រព័ន្ធ', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'ពិសេស', 'special' ),
+       'filepath'                  => array( '0', 'ផ្លូវនៃឯកសារ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ប្លាក', 'tag' ),
+       'hiddencat'                 => array( '1', '__ចំណាត់ថ្នាក់ក្រុមមិនបានបង្ហាញ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'ចំនួនទំព័រក្នុងចំនាត់ថ្នាក់ក្រុម', 'ចំនួនទំព័រក្នុងចំណាត់ថ្នាក់ក្រុម', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ទំហំទំព័រ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__លិបិក្រម__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__មិនមានលិបិក្រម__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__ស្ថិតិទំព័របញ្ជូនបន្ត__', '__STATICREDIRECT__' ),
 );
 
 $messages = array(
@@ -287,7 +287,7 @@ $messages = array(
 'tog-nocache' => 'មិនប្រើសតិភ្ជាប់​នៃ​ទំព័រ',
 'tog-enotifwatchlistpages' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបំលាស់ប្ដូរនៃទំព័រ​ណាមួយដែលមានក្នុងបញ្ជីតាមដានរបស់ខ្ញុំ',
 'tog-enotifusertalkpages' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបំលាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ',
-'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9aâ\80\8bá\9e\85á\9f\86á\9e\96á\9f\84á\9f\87â\80\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85​',
+'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\96á\9f\81á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85â\80\8bá\9e\9bá\9e¾á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9a​',
 'tog-enotifrevealaddr' => 'បង្ហាញ​អាសយដ្ឋានអ៊ីមែល​របស់ខ្ញុំ​ក្នុង​​មែល​ក្រើនរំលឹក​នានា',
 'tog-shownumberswatching' => 'បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ',
 'tog-oldsig' => 'ហត្ថលេខាមានហើយ៖',
@@ -419,7 +419,7 @@ $messages = array(
 'vector-action-protect' => 'ការពារ',
 'vector-action-undelete' => 'ឈប់លុបចោល',
 'vector-action-unprotect' => 'ប្ដូរការការពារ',
-'vector-simplesearch-preference' => 'á\9e\94á\9f\92á\9e\9aá\9e¾á\9e¢á\9e\93á\9e»á\9e\9fá\9e¶á\9e\9fá\9e\93á\9f\8dá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\85á\9e\84á\9f\8bá\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80 (សំរាប់តែសំបកវ៉ិចទ័រប៉ុណ្ណោះ)',
+'vector-simplesearch-preference' => 'á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\9aá\9e\94á\9e¶á\9e\9aá\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80á\9e\9fá\9e¶á\9e\98á\9e\89á\9f\92á\9e\89 (សំរាប់តែសំបកវ៉ិចទ័រប៉ុណ្ណោះ)',
 'vector-view-create' => 'បង្កើត​',
 'vector-view-edit' => 'កែប្រែ​',
 'vector-view-history' => 'មើល​ប្រវត្តិ​',
@@ -528,6 +528,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' => 'កែប្រែ',
@@ -612,8 +616,8 @@ $1',
 'cannotdelete-title' => 'មិនអាចលុបទំព័រ "$1"',
 'badtitle' => 'ចំណងជើង​មិនល្អ',
 'badtitletext' => 'ចំណងជើងទំព័រដែលបានស្នើ គ្មានសុពលភាព, ទទេ, ឬ ចំណងជើងតំណភ្ជាប់អន្តរភាសាឬអន្តរវិគី មិនត្រឹមត្រូវ ។ ប្រហែលជាមានតួអក្សរមួយឬច្រើន ដែលជាតួអក្សរហាមប្រើ​ក្នុង​ចំណងជើង។',
-'perfcached' => 'ទិន្នន័យទាំងនេះត្រូវបានដាក់ទៅសតិភ្ជាប់និងប្រហែលជាមិនទាន់សម័យ ។ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'ទិន្នន័យខាងក្រោមនេះត្រូវបានដាក់ក្នុងសតិភ្ជាប់ និង បានត្រូវបន្ទាន់សម័យចុងក្រោយនៅ $1។ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'ទិន្នន័យទាំងនេះត្រូវបានដាក់ទៅសតិភ្ជាប់និងប្រហែលជាមិនទាន់សម័យ ។ ជាអតិបរមា {{PLURAL:$1|លទ្ធផលមួយ|លទ្ធផលចំនួន $1}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
+'perfcachedts' => 'ទិន្នន័យខាងក្រោមនេះត្រូវបានដាក់ក្នុងសតិភ្ជាប់ និង បានត្រូវបន្ទាន់សម័យចុងក្រោយនៅ $1។ ជាអតិបរមា {{PLURAL:$4|លទ្ធផលមួយ|លទ្ធផលចំនួន $4}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
 'querypage-no-updates' => 'ការបន្ទាន់សម័យសម្រាប់ទំព័រនេះគឺមិនអាចធ្វើទៅរួចទេនាពេលឥឡូវទេ។
 
 ទិន្នន័យនៅទីនេះនឹងមិនត្រូវផ្លាស់ប្ដូរថ្មីនាពេលបច្ចុប្បន្នទេ។',
@@ -629,7 +633,8 @@ $1',
 'protectedpagetext' => 'ទំព័រនេះបានត្រូវចាក់សោមិនឱ្យកែប្រែ​។',
 'viewsourcetext' => 'អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖',
 'viewyourtext' => "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''ទៅកាន់ទំព័រនេះ៖",
-'protectedinterface' => 'ទំព័រនេះ ផ្ដល់នូវ អត្ថបទអន្តរមុខ សម្រាប់ផ្នែកទន់, និង បានត្រូវចាក់សោ ដើម្បីចៀសវាង ការបំពាន ។',
+'protectedinterface' => 'ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។
+ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។',
 'editinginterface' => "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់នូវអន្តរមុខសម្រាប់ផ្នែកទន់​។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទំព័រអន្តរមុខនៃអ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិបសាយនេះ។ សម្រាប់ការបកប្រែ សូមពិចារណាប្រើប្រាស់ [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] (បេតាវិគី) គម្រោង​អន្តរជាតូបនីយកម្ម​នៃមេឌាវិគី ។",
 'sqlhidden' => '(ការអង្កេត SQL ត្រូវបិទបាំង)',
 'cascadeprotected' => 'ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស"ជាបណ្ដាក់"៖
@@ -640,6 +645,10 @@ $2',
 'ns-specialprotected' => 'ទំព័រពិសេសៗមិនអាចកែប្រែបានទេ។',
 'titleprotected' => "ចំណងជើងនេះត្រូវបានការពារមិនឱ្យបង្កើត​ដោយ [[User:$1|$1]]។
 ហេតុផលលើកឡើងគឺ ''$2''។",
+'filereadonlyerror' => 'មិនអាចកែប្រែឯកសារ "$1" បានទេពីព្រោះថតឯកសារ "$2" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។
+
+អភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ "$3"។',
+'exception-nologin-text' => 'ទំព័រឬសកម្មភាពនេះតំរូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
 
 # Virus scanner
 'virus-badscanner' => "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
@@ -649,7 +658,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ឥឡូវនេះលោកអ្នកបានកត់ឈ្មោះចេញពីគណនីរបស់លោកអ្នកហើយ។'''
 
-អ្នកអាចបន្តប្រើប្រាស់{{SITENAME}}ក្នុងភាពអនាមិក ឬ [[Special:UserLogin|កត់ឈ្មោះចូលម្ដងទៀត]]ក្នុងនាមជាអ្នកប្រើប្រាស់ដដែលឬផ្សេងទៀត។
+អ្នកអាចបន្តប្រើប្រាស់{{SITENAME}}ក្នុងភាពអនាមិក ឬ <span class='plainlinks'>[$1 កត់ឈ្មោះចូលម្ដងទៀត]</span>ក្នុងនាមជាអ្នកប្រើប្រាស់ដដែលឬផ្សេងទៀត។
 
 សូមកត់សំគាល់ថាទំព័រមួយចំនួនប្រហែលជានៅតែបង្ហាញដូចពេលលោកអ្នកកត់ឈ្មោះចូលក្នុងគណនីរបស់លោកអ្នកដដែល។ ប្រសិនបើមានករណីនេះកើតឡើង សូមសំអាត សតិភ្ជាប់នៃកម្មវិធីរុករករបស់លោកអ្នក។",
 'welcomecreation' => '== សូមស្វាគមន៍ $1! ==
@@ -662,6 +671,7 @@ $2',
 'remembermypassword' => 'ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយូរបំផុត $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})',
 'securelogin-stick-https' => 'នៅភ្ជាប់ទៅ HTTPS ដដែលបន្ទាប់ពីចុះឈ្មោះចូលហើយក៏ដោយ',
 'yourdomainname' => 'ដូម៉ែនរបស់អ្នក៖',
+'password-change-forbidden' => 'អ្នកមិនអាចផ្លាស់ប្ដូរពាក្យសំងាត់ក្នុងវិគីនេះទេ។',
 'externaldberror' => 'មាន​​បញ្ហាក្នុងការ​បញ្ជាក់​ផ្ទៀង​ផ្ទាត់​​មូលដ្ឋាន​ទិន្នន័យ​ ឬ​អ្នក​មិន​ត្រូវ​បាន​អនុញ្ញាត​ឲ្យ​បន្ទាន់​សម័យ​គណនី​ខាង​ក្រៅ​របស់​អ្នក​។​
 ​',
 'login' => 'កត់ឈ្មោះចូល',
@@ -750,6 +760,7 @@ $2',
 
 សូមបញ្ចូល​អាសយដ្ឋានមួយ​ដែលមាន​ទម្រង់​ត្រឹមត្រូវ ឬមួយក៏ទុកវាលនោះឱ្យនៅទំនេរ​​។',
 'cannotchangeemail' => 'អាសយដ្ឋានអ៊ីមែលរបស់គណនីមិនអាចប្ដូរបានទេនៅលើវិគីនេះ។',
+'emaildisabled' => 'វិបសៃថ៍នេះមិនអាចផ្ញើអ៊ីមែលបានទេ។',
 'accountcreated' => 'គណនីរបស់លោកអ្នកត្រូវបានបង្កើតហើយ',
 'accountcreatedtext' => 'គណនីឈ្មោះ $1 ត្រូវបានបង្កើតហើយ។',
 'createaccount-title' => 'ការបង្កើតគណនីសម្រាប់{{SITENAME}}',
@@ -802,6 +813,25 @@ $2',
 'passwordreset-capture-help' => 'ប្រសិនបើអ្នកគូសធីកប្រអប់នេះ អ៊ីមែល (ដែលមានពាក្យសំងាត់បណ្ដោះអាសន្ន) មិនត្រូវបានបង្ហាញដូចគ្នានឹងអ៊ីមែលដែលនឹងត្រូវផ្ញើទៅទៅកាន់អ្នកប្រើប្រាស់ដែរ។',
 'passwordreset-email' => 'អាសយដ្ឋានអ៊ីមែល៖',
 'passwordreset-emailtitle' => 'ព័ត៌មានលំអិតពីគណនីនៅលើ {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំសារក្រើនរំលឹកពីព័ត៌មានពិស្ដារ
+អំពីគណនីរបស់អ្នកសំរាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ
+មានជាប់ទាក់ទិននឹងអាស័យដ្ឋានអ៊ីមែលនេះ៖
+
+$2
+
+{{PLURAL:$3|ពាក្យសំងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសំងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
+យកល្អអ្នកគួរតែកត់ឈ្មោះរួចជ្រើសរើសពាក្យសំងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
+ឬប្រសិនបើអ្នកនឹកឃើញពាក្យសំងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
+កុំខ្វល់ជាមួយសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសំងាត់ចាស់របស់អ្នកទៅបានហើយ។',
+'passwordreset-emailtext-user' => 'អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំសារក្រើនរំលឹកអំពីព័ត៌មានពិស្ដាររបស់គណនីរបស់អ្នកនៅក្នុង {{SITENAME}} ($4)។
+ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាស័យដ្ឋានអ៊ីមែលនេះ៖
+
+$2
+
+{{PLURAL:$3|ពាក្យសំងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសំងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
+យកល្អអ្នកគួរតែកត់ឈ្មោះរួចជ្រើសរើសពាក្យសំងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
+ឬប្រសិនបើអ្នកនឹកឃើញពាក្យសំងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
+កុំខ្វល់ជាមួយសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសំងាត់ចាស់របស់អ្នកទៅបានហើយ។',
 'passwordreset-emailelement' => 'ឈ្មោះអ្នកប្រើប្រាស់៖ $1
 លេខសម្ងាត់បណ្ដោះអាសន្ន៖ $2',
 'passwordreset-emailsent' => 'អីុមែលរំលឹកមួយបានផ្ញើទៅហើយ។',
@@ -923,19 +953,19 @@ $2',
 អ្នកអាច [[Special:Search/{{PAGENAME}}|ស្វែងរក​ចំណងជើង​នៃទំព័រនេះ]]ក្នុងទំព័រដទៃទៀត​​ ឬ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ស្វែង​រក​កំណត់​ហេតុ​ដែល​ពាក់ព័ន្ធ] ឬ [{{fullurl:{{FULLPAGENAME}}|action=edit}} កែប្រែ​ទំព័រនេះ]។',
 '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' => 'អ្នកប្រើប្រាស់នេះត្រូវបានហាមឃាត់ហើយនាពេលនេះ។
 កំណត់ត្រាស្ដីពីការហាមឃាត់ចុងក្រោយមានបង្ហាញដូចខាងក្រោមនេះ៖',
-'clearyourcache' => "!'''សម្គាល់:''' បន្ទាប់ពីបានរក្សាទុករួចហើយ លោកអ្នកគួរតែសំអាត browser's cache របស់លោកអ្នកដើម្បីមើលការផ្លាស់ប្តូរ។ ខាងក្រោមនេះជាវិធីសំអាត browser's cache ចំពោះកម្មវិធីរុករក(Browser)មួយចំនួន។
-* ''' Firefox / Safari:''' សង្កត់ [Shift] ឱ្យជាប់រួចចុចប៊ូតុង ''Reload'' ឬក៏ចុច  ''Ctrl-F5'' ឬ ''Ctrl-R'' (ចំពោះApple Mac វិញ​ចុច ''Command-R'')
-* '''Google Chrome:''' ចុច ''Ctrl-Shift-R'' (''Command-Shift-R'' សំរាប់ Mac)
+'clearyourcache' => "'''សម្គាល់:''' បន្ទាប់ពីបានរក្សាទុករួចហើយ លោកអ្នកគួរតែសំអាត browser's cache របស់លោកអ្នកដើម្បីមើលការផ្លាស់ប្តូរ។ ខាងក្រោមនេះជាវិធីសំអាត browser's cache ចំពោះកម្មវិធីរុករក(Browser)មួយចំនួន។
+* ''' Firefox / Safari:''' សង្កត់ [Shift] ឱ្យជាប់រួចចុចប៊ូតុង ''Reload'' ឬក៏ចុច  ''Ctrl-F5'' ឬ ''Ctrl-R'' ( ''⌘-R'' សំរាប់ Mac)
+* '''Google Chrome:''' ចុច ''Ctrl-Shift-R'' (''-Shift-R'' សំរាប់ Mac)
 * '''IE(Internet Explorer):''' សង្កត់ [Ctrl] ឱ្យជាប់ រួចចុច ''Refresh''ប៊ូតុង ឬក៏ចុច ''Ctrl-F5''​។
 * '''Konqueror:''' ចុចប៊ូតុង  ''Reload'' ឬក៏ចុច ''F5''
-* '''Opera:''' á\9e\9fá\9e¼á\9e\98á\9e\85á\9e»á\9e\85  ''[Tools]â\86\92[Preferences]''â\80\8bá\9f\94",
+* '''Opera:''' á\9e\9fá\9e¼á\9e\98á\9e\9fá\9f\86á\9e¢á\9e¶á\9e\8fcacheá\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84  ''[Tools]â\86\92[Preferences]''â\80\8b",
 'usercssyoucanpreview' => "'''គន្លឹះ ៖ ''' សូមប្រើប្រាស់ប៊ូតុង\"{{int:showpreview}}\"ដើម្បី​ធ្វើតេស្ត​សន្លឹក CSS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។",
 'userjsyoucanpreview' => "'''គន្លឹះ ៖ ''' សូមប្រើប្រាស់​ប៊ូតុង \"{{int:showpreview}}\" ដើម្បី​ធ្វើតេស្ត​សន្លឹក JS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។",
 'usercsspreview' => "'''កុំភ្លេចថា​អ្នកគ្រាន់តែ​កំពុងមើលជាមុនសន្លឹក CSS របស់អ្នក។
@@ -949,6 +979,7 @@ $2',
 'updated' => '(បានបន្ទាន់សម័យ)',
 'note' => "'''ចំណាំ៖'''",
 'previewnote' => "'''សូមចាំថានេះគ្រាន់តែជា​ការបង្ហាញការមើលជាមុនប៉ុណ្ណោះ។ បំលាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
+'continue-editing' => 'បន្តធ្វើការកែប្រែ',
 'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
 'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
 
@@ -963,6 +994,7 @@ $2',
 
 បើនៅតែមិនបានទេ សូមព្យាយាម[[Special:UserLogout|កត់ឈ្មោះចេញ]] រួចកត់ឈ្មោះចូលឡើងវិញ។'''",
 'editing' => 'កំពុងកែប្រែ​ $1',
+'creating' => 'កំពុងបង្កើត $1',
 'editingsection' => "កំពុងកែប្រែ'''$1'''(ផ្នែក)",
 'editingcomment' => 'កែប្រែ $1 (ផ្នែកថ្មី)',
 'editconflict' => 'ភាពឆ្គងនៃកំណែប្រែ៖ $1',
@@ -1031,6 +1063,7 @@ $2',
 'edit-already-exists' => 'មិនអាចបង្កើតទំព័រថ្មីមួយទេ។
 
 ទំព័រនេះមានរួចហើយ។',
+'defaultmessagetext' => 'អត្ថបទសារតាមលំនាំដើម',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ប្រយ័ត្ន៖''' ទំព័រនេះមានប្រើអនុគមន៍ញែកច្រើនពេកហើយ។
@@ -1180,7 +1213,7 @@ $1",
 'suppressionlog' => 'កំណត់​ហេតុ​នៃ​ការ​ហាម​ឃាត់​',
 'suppressionlogtext' => 'ខាងក្រោមនេះជាបញ្ជីការលុបចោលនិងការហាមឃាត់ទាក់ទិននឹងខ្លឹមសារដែលអ្នកអភិបាលបានលាក់។
 
-សូមមើលបំរាមនិងការហាមឃាត់ដែលនៅជាធរមាននាពេលបច្ចុប្បន្ននៅក្នុង[[Special:BlockList|បញ្ជីនៃការហាមឃាត់ IP]]។',
+សូមមើលបំរាមនិងការហាមឃាត់ដែលនៅជាធរមាននាពេលបច្ចុប្បន្ននៅក្នុង[[Special:BlockList|បញ្ជីនៃការហាមឃាត់]]។',
 
 # History merging
 'mergehistory' => 'ច្របាច់ប្រវត្តិទាំងឡាយរបស់ទំព័របញ្ចូលគ្នា',
@@ -1212,7 +1245,9 @@ $1",
 'mergelogpagetext' => 'ខាងក្រោមគឺជាតារាងនៃការច្របាច់បញ្ចូលគ្នាថ្មីៗបំផុតរបស់ប្រវត្តិនៃទំព័រមួយទៅក្នុងប្រវត្តិនៃទំព័រមួយទៀត។',
 
 # Diffs
-'history-title' => 'ប្រវត្តិកំណែប្រែនានានៃ "$1"',
+'history-title' => 'ប្រវត្តិកំណែប្រែរបស់ "$1"',
+'difference-title' => 'ភាពខុសគ្នារវាងកំណែនានារបស់ "$1"',
+'difference-title-multipage' => 'ភាពខុសគ្នារបស់ទំព័រ "$1" និង "$2"',
 'difference-multipage' => '(ភាពខុសគ្នារវាងទំព័រនានា)',
 'lineno' => 'បន្ទាត់ទី$1៖',
 'compareselectedversions' => 'ប្រៀបធៀប​កំណែដែលបាន​ជ្រើសយក',
@@ -1220,6 +1255,10 @@ $1",
 'editundo' => 'មិនធ្វើវិញ',
 'diff-multi' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន $1}}មិនត្រូវបានបង្ហាញ)',
 'diff-multi-manyusers' => '({{PLURAL:$1|កំណែប្រែកម្រិតបង្គួរមួយ|កំណែប្រែកម្រិតបង្គួរចំនួន $1}}មិនត្រូវបានបង្ហាញ)',
+'difference-missing-revision' => ' {{PLURAL:$2|រកមិនឃើញ|រកមិនឃើញ}}{{PLURAL:$2|កំណែមួយ|កំណែចំនួន $2}} របស់ភាពខុសគ្នានេះ ($1) ទេ។
+
+ជាធម្មតានេះបណ្ដាលមកពីការតាមទៅកាន់តំនភ្ជាប់ភាពខុសគ្នារបស់ទំព័រដែលត្រូវបានលុបចោល។
+ព័ត៌មានលំអិតអាចរកបាននៅក្នុង [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់ហេតុនៃការលុបចោល]។',
 
 # Search results
 'searchresults' => 'លទ្ធផលស្វែងរក',
@@ -1262,8 +1301,6 @@ $1",
 'search-interwiki-caption' => 'គម្រោងជាបងប្អូន',
 'search-interwiki-default' => 'លទ្ធផលពី$1៖',
 'search-interwiki-more' => '(បន្ថែមទៀត)',
-'search-mwsuggest-enabled' => 'មានសំណើ',
-'search-mwsuggest-disabled' => 'គ្មានសំណើ',
 'search-relatedarticle' => 'ទាក់ទិន',
 'mwsuggest-disable' => 'មិនប្រើសំនើAJAX',
 'searcheverything-enable' => 'ស្វែងរកនៅក្នុងលំហឈ្មោះទាំងអស់',
@@ -1310,6 +1347,7 @@ $1",
 'prefs-beta' => 'មុខងារពិសេសថ្មីៗរបស់ស៊េរីបេតា',
 'prefs-datetime' => 'កាលបរិច្ឆេទនិងល្វែងម៉ោង',
 'prefs-labs' => 'មុខងារពិសេសថ្មីៗដែលស្ថិតក្រោមការពិសោធន៍នៅឡើយ',
+'prefs-user-pages' => 'ទំព័រអ្នកប្រើប្រាស់',
 'prefs-personal' => 'ប្រវត្តិរូប',
 'prefs-rc' => 'បំលាស់ប្ដូរថ្មីៗ',
 'prefs-watchlist' => 'បញ្ជីតាមដាន',
@@ -1558,6 +1596,7 @@ $1",
 'action-userrights' => 'កែប្រែសិទ្ធិរបស់អ្នកប្រើប្រាស់ទាំងអស់',
 'action-userrights-interwiki' => 'កែប្រែសិទ្ធិនានារបស់អ្នកប្រើប្រាស់នៅលើវិគីដទៃ',
 'action-siteadmin' => 'ចាក់សោឬដោះសោមូលដ្ឋានទិន្នន័យ',
+'action-sendemail' => 'ផ្ញើអ៊ីមែល',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}',
@@ -1590,9 +1629,11 @@ $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' => 'បន្លាស់ប្ដូរពាក់ព័ន្ធ',
@@ -1769,6 +1810,21 @@ $1',
 'upload-unknown-size' => 'មិនដឹងទំហំ',
 'upload-http-error' => 'មានកំហុសHTTPមួយបានកើតឡើង៖ $1',
 
+# File backend
+'backend-fail-notexists' => 'គ្មានឯកសារ "$1" ទេ។',
+'backend-fail-notsame' => 'ឯកសារដែលមិនដូចគ្នាបេះបិទមួយមានរួចហើយនៅ "$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-opentemp' => 'មិនអាចបើកឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-writetemp' => 'មិនអាចសរសេរទៅក្នុងឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-closetemp' => 'មិនអាចបិទឯកសារបណ្ដោះអាសន្ន។',
+'backend-fail-read' => 'មិនអាចអានឯកសារ "$1" បានទេ។',
+'backend-fail-create' => 'មិនអាចសរសេរឯកសារ "$1" បានទេ។',
+'backend-fail-maxsize' => 'មិនអាចសរសេរឯកសារ "$1" បានទេពីព្រោះវាមានទំហំធំជាង {{PLURAL:$2|មួយបៃ|$2 បៃ}}.',
+
 # Special:UploadStash
 'uploadstash-errclear' => 'ការសំអាតឯកសារមិនបានសំរេច។',
 'uploadstash-refresh' => 'ផ្ទុកបញ្ជីឯកសារឡើងវិញ',
@@ -2128,6 +2184,8 @@ $1',
 'mailnologin' => 'មិនមានអាសយដ្ឋានផ្ញើទេ',
 'mailnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។',
 'emailuser' => 'ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ',
+'emailuser-title-target' => 'ផ្ញើសារទៅកាន់ {{GENDER:$1|អ្នកប្រើប្រាស់}} នេះ',
+'emailuser-title-notarget' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
 'emailpage' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់',
 'emailpagetext' => 'អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​អ្នក​ប្រើប្រាស់​នេះ​។
 អាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង​[[Special:Preferences|ចំណង់ចំណូល​ចិត្ត​]]​របស់​អ្នក នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល "From" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។',
@@ -2510,6 +2568,8 @@ $1',
 'ipb-confirm' => 'បញ្ជាក់ទទួលស្គាល់ការហាមឃាត់',
 'badipaddress' => 'អាសយដ្ឋានIPមិនត្រឹមត្រូវ',
 'blockipsuccesssub' => 'ដាក់ការហាមឃាត់បានសំរេច',
+'ipb-blockingself' => 'អ្នករៀបនឹងរាំងខ្ទប់ខ្លួនឯងហើយ! តើអ្នកប្រាកដថាចង់ធ្វើបែបនេះមែនទេ?',
+'ipb-confirmhideuser' => 'អ្នករៀបនឹងរាំងខ្ទប់អ្នកប្រើប្រាស់ម្នាក់ដែលមានប្រើមុខងារ "អ្នកប្រើប្រាស់លាក់មុខ"។ ការធ្វើបែបនេះនឹងលាក់ឈ្មោះរបស់អ្នកប្រើប្រាស់នេះនៅក្នុងបញ្ជីនិងកំណត់ហេតុទាំងអស់។ តើអ្នកប្រាកដថាចង់ធ្វើបែបនេះមែនទេ?',
 'ipb-edit-dropdown' => 'កែប្រែមូលហេតុនៃការហាមឃាត់',
 'ipb-unblock-addr' => 'ដកការហាមឃាត់លើ $1',
 'ipb-unblock' => 'ដកការហាមឃាត់លើអ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP',
@@ -2553,7 +2613,7 @@ $1',
 'blocklog-showlog' => 'អ្នកប្រើប្រាស់នេះត្រូវបានរាំងខ្ទប់មុននេះម្ដងហើយ។
 កំណត់ហេតុស្ដីពីការរាំងខ្ទប់ត្រូវបានផ្ដល់អោយដូចខាងក្រោម៖',
 'blocklogentry' => 'បានហាមឃាត់ [[$1]]​ដោយរយៈពេលផុតកំណត់$2 $3',
-'blocklogtext' => 'នេះជាកំណត់ហេតុនៃការហាមឃាត់និងឈប់ហាមឃាត់អ្នកប្រើប្រាស់។ អាសយដ្ឋានIPដែលត្រូវបានហាមឃាត់ដោយស្វ័យប្រវត្តិមិនត្រូវបានដាក់ក្នុងបញ្ជីនេះទេ។ សូមមើល[[Special:BlockList|បញ្ជីនៃការហាមឃាត់IP]]ចំពោះបញ្ជីនៃហាមឃាត់នាថ្មីៗ។',
+'blocklogtext' => 'នេះជាកំណត់ហេតុនៃការហាមឃាត់និងឈប់ហាមឃាត់អ្នកប្រើប្រាស់។ អាសយដ្ឋានIPដែលត្រូវបានហាមឃាត់ដោយស្វ័យប្រវត្តិមិនត្រូវបានដាក់ក្នុងបញ្ជីនេះទេ។ សូមមើល[[Special:BlockList|បញ្ជីនៃការហាមឃាត់]]ចំពោះបញ្ជីនៃហាមឃាត់នាថ្មីៗ។',
 'unblocklogentry' => 'បានឈប់ហាមឃាត់ $1',
 'block-log-flags-anononly' => 'សម្រាប់​តែ​អ្នកប្រើប្រាស់​អនាមិក​ប៉ុណ្ណោះ',
 'block-log-flags-nocreate' => 'ការបង្កើតគណនីត្រូវបានហាមឃាត់',
@@ -2869,11 +2929,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-length' => 'ប្រវែងទំព័រ (គិតជាបៃ)',
+'pageinfo-article-id' => 'អត្តលេខទំព័រ',
+'pageinfo-robot-policy' => 'ស្ថានភាពម៉ាស៊ីនស្វែងរក',
 'pageinfo-views' => 'ចំនួនការបើកមើល',
-'pageinfo-watchers' => 'ចំនួនអ្នកតាមដាន',
-'pageinfo-edits' => 'ចំនួនកំណែប្រែ',
-'pageinfo-authors' => 'ចំនួនអ្នកនិពន្ធ',
+'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)',
 
 # Skin names
 'skinname-standard' => 'បុរាណ',
@@ -2920,9 +2998,12 @@ $1',
 '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' => 'គ្មានភាពម៉ត់ ដែលខ្ពស់ជាង។',
 'svg-long-desc' => 'ឯកសារប្រភេទSVG  $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
+'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
 'show-big-image' => 'រូបភាពពេញ',
+'show-big-image-preview' => 'ទំហំរបស់ការមើលមុននេះ: $1។',
 'show-big-image-size' => '$1 × $2 ភីកសែ',
 'file-info-gif-looped' => 'រង្វិល',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|ផ្ទាំង|ផ្ទាំង}}',
@@ -3054,6 +3135,33 @@ $1',
 'exif-specialinstructions' => 'ការណែនាំពិសេស',
 'exif-credit' => 'អ្នកផ្ដល់',
 'exif-source' => 'ប្រភព',
+'exif-contact' => 'ព័ត៌មានសំរាប់ធ្វើការទាក់ទង',
+'exif-writer' => 'អ្នកសរសេរ',
+'exif-languagecode' => 'ភាសា​',
+'exif-iimcategory' => 'ចំណាត់ថ្នាក់ក្រុម',
+'exif-iimsupplementalcategory' => 'ចំណាត់ថ្នាក់ក្រុមបំពេញ',
+'exif-datetimeexpires' => 'កុំប្រើបន្ទាប់ពី',
+'exif-datetimereleased' => 'ចេញផ្សាយនៅ',
+'exif-lens' => 'ឡង់ទីដែលបានប្រើ',
+'exif-cameraownername' => 'ម្ចាស់កាមេរ៉ា',
+'exif-label' => 'ផ្លាក',
+'exif-rating' => 'រង្វាយតំលៃ (ធំបំផុត ៥)',
+'exif-rightscertificate' => 'លិខិត្របញ្ជាក់ការគ្រប់គ្រងកម្មសិទ្ធបញ្ញា',
+'exif-copyrighted' => 'ស្ថានភាពកម្មសិទ្ធបញ្ញា',
+'exif-copyrightowner' => 'ម្ចាស់កម្មសិទ្ធិបញ្ញា',
+'exif-usageterms' => 'លក្ខខណ្ឌប្រើប្រាស់',
+'exif-webstatement' => 'សេចក្ដីប្រកាសកម្មសិទ្ធបញ្ញាលើអ៊ីនធើណិត',
+'exif-licenseurl' => 'URL សំរាប់អាជ្ញាបណ្ឌកម្មសិទ្ធបញ្ញា',
+'exif-morepermissionsurl' => 'ព័ត៌មានអាជ្ញាបណ្ឌជំនួស',
+'exif-attributionurl' => 'នៅពេលកែច្នៃស្នាដៃនេះយកទៅប្រើ សូមដាក់តំណភ្ជាប់ទៅ',
+'exif-preferredattributionname' => 'នៅពេលកែច្នៃស្នាដៃនេះយកទៅប្រើ សូមថ្លែងអំណរគុណដល់ម្ចាស់ដើម',
+'exif-pngfilecomment' => 'វិចារលើឯកសារ PNG',
+'exif-disclaimer' => 'ការបដិសេធ',
+'exif-contentwarning' => 'ការព្រមានអំពីខ្លឹមសារ',
+'exif-giffilecomment' => 'វិចារលើឯកសារ GIF',
+'exif-intellectualgenre' => 'ប្រភេទរបស់',
+'exif-originalimageheight' => 'កំពស់របស់រូបភាពមុនពេលកាត់តំរឹម',
+'exif-originalimagewidth' => 'ទទឹងរបស់រូបភាពមុនពេលកាត់តំរឹម',
 
 # EXIF attributes
 'exif-compression-1' => 'លែងបានបង្ហាប់',
@@ -3248,6 +3356,34 @@ $3
 
 $5
 
+កូដដើម្បីទទួលស្គាល់នេះនឹងផុតកំណត់នៅ  $4 ។',
+'confirmemail_body_changed' => 'មាននរណាម្នាក់, ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1,
+បានផ្លាស់ប្ដូរអាស័យដ្ឋានអ៊ីមែលរបស់គណនី "$2" មកកាន់អាស័យដ្ឋាននេះនៅក្នុង {{SITENAME}}។
+
+ដើម្បីបញ្ជាក់ថាគណនីនេះពិតជារបស់អ្នកមែន រួចដំណើរការមុខងារអ៊ីមែលនៅលើ {{SITENAME}} ឡើងវិញ
+សូមបើកតំណភ្ជាប់ខាងក្រោមនេះនៅលើកម្មវិធីរាយរកអ៊ីនធើណិតរបស់អ្នក៖
+
+$3
+
+ប្រសិនបើគណនីនេះ *មិនមែន* ជារបស់អ្នក សូមចុចលើតំណភ្ជាប់ខាងក្រោមនេះ
+ដើម្បីលុបចោលការបញ្ជាក់ទទួលស្គាល់អាស័យដ្ឋានអ៊ីមែល៖
+
+$5
+
+កូដបញ្ជាក់ទទួលស្គាល់នេះនឹងផុតកំណត់នៅ $4។',
+'confirmemail_body_set' => 'នរណាម្នាក់ ប្រហែលជាខ្លួនអ្នកផ្ទាល់ មកពីអាស័យដ្ឋានIP $1,
+បានដាក់ភ្ជាប់អាស័យដ្ឋានអ៊ីមែលរបស់គណនី "$2" ជាមួយនឹងអាស័យដ្ឋានអ៊ីមែលនេះនៅលើ{{SITENAME}}។
+
+ដើម្បីបញ្ជាក់ថានេះពិតជាគណនីផ្ទាល់របស់អ្នកមែន និងដំណើរការមុខងារអ៊ីមែលក្នុង{{SITENAME}}ឡើងវិញ
+សូមបើកតំណភ្ជាប់ខាងក្រោមនេះក្នុងកម្មវិធីរាយរកអ៊ីនធើណិតរបស់អ្នក៖
+
+$3
+
+ប្រសិនបើនេះ*មិនមែន*ជាគណនីរបស់អ្នកទេ សូមចុចតំណភ្ជាប់ខាងក្រោម 
+ដើម្បីបោះបង់ចោលនូវការបញ្ជាក់ទទួលស្គាល់អាសយដ្ឋានអ៊ីមែលនេះ៖
+
+$5
+
 កូដដើម្បីទទួលស្គាល់នេះនឹងផុតកំណត់នៅ  $4 ។',
 'confirmemail_invalidated' => 'ការអះអាងបញ្ជាក់ទទួលស្គាល់អាសយដ្ឋានអ៊ីមែលបានបោះបង់ចោលហើយ',
 'invalidateemail' => 'បោះបង់ចោលការបញ្ជាក់ទទួលស្គាល់អ៊ីមែល',
@@ -3400,7 +3536,7 @@ $5
 * <span class="mw-specialpagecached">ទំព័រពិសេសៗសំរាប់រក្សាទុក។</span>',
 'specialpages-group-maintenance' => 'របាយការណ៍នានាអំពីតំហែទាំ',
 'specialpages-group-other' => 'ទំព័រពិសេសៗផ្សេងៗទៀត',
-'specialpages-group-login' => 'á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b / á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87',
+'specialpages-group-login' => 'á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b / á\9e\94á\9e\84á\9f\92á\9e\80á\9e¾á\9e\8fá\9e\82á\9e\8eá\9e\93á\9e¸',
 'specialpages-group-changes' => 'បំលាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ',
 'specialpages-group-media' => 'របាយការណ៍មេឌានិងការផ្ទុកឯកសារ',
 'specialpages-group-users' => 'អ្នកប្រើប្រាស់និងសិទ្ធិ',
@@ -3461,6 +3597,14 @@ $5
 'htmlform-selectorother-other' => 'ផ្សេងទៀត',
 
 # New logging system
+'logentry-delete-delete' => '$1 បានលុបទំព័រ $3 ចោល',
+'logentry-delete-restore' => '$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',
@@ -3473,7 +3617,39 @@ $5
 'logentry-newusers-autocreate' => 'គណនី $1 ត្រូវ បានបង្កើត ដោយស្វ័យប្រវត្តិ',
 'newuserlog-byemail' => 'ពាក្យសំងាត់ត្រូវបានផ្ញើតាមអ៊ីមែល',
 
+# Feedback
+'feedback-subject' => 'កម្មវត្ថុ ៖',
+'feedback-message' => 'សារ​៖',
+'feedback-cancel' => 'បោះបង់​',
+'feedback-submit' => 'ដាក់ស្នើមតិយោបល់',
+'feedback-adding' => 'កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...',
+'feedback-thanks' => 'សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ "[$2 $1]"។',
+'feedback-close' => 'រួចរាល់',
+
+# Search suggestions
+'searchsuggest-search' => 'ស្វែងរក​',
+'searchsuggest-containing' => 'ដែលមានពាក្យ...',
+
 # API errors
+'api-error-badaccess-groups' => 'អ្នកគ្មានការអនុញ្ញាតអោយផ្ទុកឯកសារឡើងទៅក្នុងវិគីនេះទេ។',
+'api-error-empty-file' => 'ឯកសារដែលអ្នកបានដាក់ស្នើគឺទទេ។',
+'api-error-emptypage' => 'ការអនុញ្ញាតអោយបង្កើតទំព័រថ្មីដែលគ្មានសរសេរអ្វីទេ',
+'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-http' => 'បញ្ហាខាងក្នុង៖ មិនអាចភ្ជាប់ទោកាន់ម៉ាស៊ីនបំរើការ។',
+'api-error-illegal-filename' => 'មិនអនុញ្ញាតអោយប្រើឈ្មោះឯកសារនេះ។',
+'api-error-internal-error' => 'បញ្ហាខាងក្នុង៖ មានបញ្ហាណាមួយកើតឡើងពេលកំពុងដំណើរការផ្ទុកឯកសារអ្នកឡើងទៅក្នុងវិគី។',
+'api-error-missingresult' => 'បញ្ហាខាងក្នុង៖ មិនអាចកំណត់បានថាការថតចំលងបានសំរេចទេ។',
+'api-error-mustbeloggedin' => 'អ្នកត្រូវតែកត់ឈ្មោះចូលដើម្បីផ្ទុកឯកសារឡើង។',
+'api-error-ok-but-empty' => 'បញ្ហាខាងក្នុង៖ គ្មានចំលើយពីម៉ាស៊ីនបំរើការ។',
+'api-error-overwrite' => 'មិនអនុញ្ញាតអោយសរសេរជាន់ពីលើឯកសារដែលមានស្រាប់ហើយ។',
+'api-error-timeout' => 'ម៉ាស៊ីនបំរើការមិនបានឆ្លើយតបក្នុងរយៈពេលដែលយើងរំពឹងទុក។',
 'api-error-unclassified' => 'បញ្ហាមិនស្គាល់មួយបានកើតឡើង។',
 'api-error-unknown-code' => 'បញ្ហាមិនស្គាល់៖ "$1" ។',
 'api-error-unknown-error' => 'បញ្ហាខាងក្នុង៖ មានបញ្ហាមិនស្រួលពេលកំពុងព្យាយាមផ្ទុកឯកសាររបស់អ្នកឡើង។',
@@ -3482,4 +3658,14 @@ $5
 '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|សតវត្សរ៍|សតវត្សរ៍}}',
+
 );
index 42c52af..de43d34 100644 (file)
@@ -437,7 +437,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ನೀವು ಈಗ ಲಾಗ್ ಔಟ್ ಆಗಿರುವಿರಿ.'''
 
-ನೀವು {{SITENAME}} ಅನ್ನು ಅನಾಮಧೇಯವಾಗಿ ಉಪಯೋಗಿಸಬಹುದು, ಅಥವ ಮತ್ತೆ ಇದೇ ಹೆಸರಿನಲ್ಲಿ ಅಥವ ಬೇರೆ ಹೆಸರಿನಲ್ಲಿ [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಬಹುದು.
+ನೀವು {{SITENAME}} ಅನ್ನು ಅನಾಮಧೇಯವಾಗಿ ಉಪಯೋಗಿಸಬಹುದು, ಅಥವ ಮತ್ತೆ ಇದೇ ಹೆಸರಿನಲ್ಲಿ ಅಥವ ಬೇರೆ ಹೆಸರಿನಲ್ಲಿ <span class='plainlinks'>[$1 ಲಾಗ್ ಇನ್]</span> ಆಗಬಹುದು.
 ಗಮನಿಸಿ: ನಿಮ್ಮ ಬ್ರೌಸರ್‍ನ cache ಅನ್ನು ಅಳಿಸುವವರೆಗೂ ಕೆಲವು ಪುಟಗಳು ನೀವಿನ್ನೂ ಲಾಗ್ ಇನ್ ಆಗಿರುವಂತೆ ಪ್ರದರ್ಶಿತವಾಗಬಹುದು.",
 'welcomecreation' => '== ಸುಸ್ವಾಗತ, $1! ==
 ನಿಮ್ಮ ಅಕೌಂಟನ್ನು ಸೃಷ್ಟಿಸಲಾಗಿದೆ.
@@ -845,8 +845,6 @@ $2',
 'search-interwiki-caption' => 'ಬಳಗದ ಇತರ ಯೋಜನೆಗಳು',
 'search-interwiki-default' => '$1 ಫಲಿತಾಂಶಗಳು:',
 'search-interwiki-more' => '(ಹೆಚ್ಚು)',
-'search-mwsuggest-enabled' => 'ಸಲಹೆಗಳೊಂದಿಗೆ',
-'search-mwsuggest-disabled' => 'ಯಾವುದೇ ಸಲಹೆಗಳಿಲ್ಲ',
 'search-relatedarticle' => 'ಸಂಬಂಧಿತ',
 'mwsuggest-disable' => 'AJAX ಸಲಹೆಗಳನ್ನು ತೋರದಿರು',
 'searchrelated' => 'ಸಂಬಂಧಿತ',
index 574c1c7..33d7793 100644 (file)
  * @author Gapo
  * @author Gjue
  * @author Ha98574
+ * @author Hoo
  * @author IRTC1015
  * @author ITurtle
  * @author Idh0854
+ * @author Jmkim dot com
  * @author Kaganer
  * @author Klutzy
  * @author Kwj2772
@@ -73,8 +75,8 @@ $specialPageAliases = array(
        'Booksources'               => array( '책찾기' ),
        'BrokenRedirects'           => array( '끊긴넘겨주기' ),
        'Categories'                => array( '분류' ),
-       'ChangeEmail'               => array( 'ì\9d´ë©\94ì\9d¼ë³\80ê²½', 'ì\9d´ë©\94ì\9d¼ë°\94꾸기' ),
-       'ChangePassword'            => array( 'ë¹\84ë°\80ë²\88í\98¸ë³\80ê²½', 'ë¹\84ë°\80ë²\88í\98¸ë°\94꾸기', 'ë¹\84ë°\80ë\8b¨ì\96´ë³\80ê²½', 'ë¹\84ë°\80ë\8b¨ì\96´ë°\94꾸기' ),
+       'ChangeEmail'               => array( 'ì\9d´ë©\94ì\9d¼ë°\94꾸기', 'ì\9d´ë©\94ì\9d¼ë³\80ê²½' ),
+       'ChangePassword'            => array( 'ë¹\84ë°\80ë²\88í\98¸ë°\94꾸기', 'ë¹\84ë°\80ë²\88í\98¸ë³\80ê²½', 'ë¹\84ë°\80ë\8b¨ì\96´ë°\94꾸기', 'ë¹\84ë°\80ë\8b¨ì\96´ë³\80ê²½' ),
        'ComparePages'              => array( '문서비교' ),
        'Confirmemail'              => array( '이메일인증' ),
        'Contributions'             => array( '기여', '기여목록', '사용자기여' ),
@@ -108,6 +110,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME찾기', 'MIME검색' ),
        'Mostcategories'            => array( '많이분류된문서' ),
        'Mostimages'                => array( '많이쓰는파일', '많이쓰는그림' ),
+       'Mostinterwikis'            => array( '인터위키많은문서' ),
        'Mostlinked'                => array( '많이링크된문서' ),
        'Mostlinkedcategories'      => array( '많이쓰는분류' ),
        'Mostlinkedtemplates'       => array( '많이쓰는틀' ),
@@ -119,13 +122,13 @@ $specialPageAliases = array(
        'Myuploads'                 => array( '내가올린파일' ),
        'Newimages'                 => array( '새파일', '새그림' ),
        'Newpages'                  => array( '새문서' ),
-       'PasswordReset'             => array( '비밀번호초기화', '비밀단어초기화' ),
+       'PasswordReset'             => array( 'ë¹\84ë°\80ë²\88í\98¸ì\9e¬ì\84¤ì \95', 'ë¹\84ë°\80ë\8b¨ì\96´ì\9e¬ì\84¤ì \95', 'ë¹\84ë°\80ë²\88í\98¸ì´\88기í\99\94', 'ë¹\84ë°\80ë\8b¨ì\96´ì´\88기í\99\94' ),
        'PermanentLink'             => array( '고유링크', '영구링크' ),
        'Popularpages'              => array( '인기있는문서' ),
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
-       'Protectedtitles'           => array( '생성보호된문서' ),
+       'Protectedtitles'           => array( '생성보호된문서', '만들기보호된문서' ),
        'Randompage'                => array( '임의문서' ),
        'Randomredirect'            => array( '임의넘겨주기' ),
        'Recentchanges'             => array( '최근바뀜' ),
@@ -164,159 +167,164 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#넘겨주기', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__목차숨김__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__화랑숨김__', '__갤러리숨김__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__목차보임__', '__목차표시__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__목차__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__단락편집숨김__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__머릿글숨김__', '__헤더숨김__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', '현재월', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', '현재월1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', '현재월이름', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', '현재월이름소유격', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', '현재월이름약자', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', '현재일', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', '현재일2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', '현재요일', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', '현재년', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', '현재시분', '현재시각', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', '현재시', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', '지역월', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', '지역월1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', '지역월이름', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', '지역월이름소유격', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', '지역월이름약자', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', '지역일', 'LOCALDAY' ),
-       'localday2'               => array( '1', '지역일2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', '지역요일', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', '지역년', 'LOCALYEAR' ),
-       'localtime'               => array( '1', '지역시분', '지역시각', 'LOCALTIME' ),
-       'localhour'               => array( '1', '지역시', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', '모든문서수', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', '문서수', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', '파일수', '그림수', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', '사용자수', '계정수', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', '활동중인사용자수', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', '편집수', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', '조회수', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', '문서이름', 'PAGENAME' ),
-       'pagenamee'               => array( '1', '문서이름E', 'PAGENAMEE' ),
-       'namespace'               => array( '1', '이름공간', 'NAMESPACE' ),
-       'namespacee'              => array( '1', '이름공간E', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', '이름공간수', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', '토론이름공간', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', '토론이름공간E', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', '본문서이름공간', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', '본문서이름공간E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', '전체문서이름', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', '전체문서이름E', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', '하위문서이름', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', '하위문서이름E', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', '상위문서이름', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', '상위문서이름E', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', '토론문서이름', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', '토론문서이름E', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', '본문서이름', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', '본문서이름E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', '메시지:', 'MSG:' ),
-       'subst'                   => array( '0', '풀기:', 'SUBST:' ),
-       'safesubst'               => array( '0', '안전풀기:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', '위키잘못메시지:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', '섬네일', '썸네일', '축소판', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', '섬네일=$1', '썸네일=$1', '축소판=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', '오른쪽', 'right' ),
-       'img_left'                => array( '1', '왼쪽', 'left' ),
-       'img_none'                => array( '1', '없음', 'none' ),
-       'img_width'               => array( '1', '$1픽셀', '$1px' ),
-       'img_center'              => array( '1', '가운데', 'center', 'centre' ),
-       'img_framed'              => array( '1', '프레임', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', '프레임없음', 'frameless' ),
-       'img_page'                => array( '1', '문서=$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', '위오른쪽', '위오른쪽=$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', '테두리', 'border' ),
-       'img_baseline'            => array( '1', '밑줄', 'baseline' ),
-       'img_sub'                 => array( '1', '아래첨자', 'sub' ),
-       'img_super'               => array( '1', '위첨자', 'super', 'sup' ),
-       'img_top'                 => array( '1', '위', 'top' ),
-       'img_text_top'            => array( '1', '글자위', '텍스트위', 'text-top' ),
-       'img_middle'              => array( '1', '중간', 'middle' ),
-       'img_bottom'              => array( '1', '아래', 'bottom' ),
-       'img_text_bottom'         => array( '1', '글자아래', '텍스트아래', 'text-bottom' ),
-       'img_link'                => array( '1', '링크=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', '대체글=$1', 'alt=$1' ),
-       'int'                     => array( '0', '정수:', 'INT:' ),
-       'sitename'                => array( '1', '사이트이름', 'SITENAME' ),
-       'ns'                      => array( '0', '이름:', '이름공간:', 'NS:' ),
-       'nse'                     => array( '0', '이름E:', '이름공간E:', 'NSE:' ),
-       'localurl'                => array( '0', '지역주소:', 'LOCALURL:' ),
-       'localurle'               => array( '0', '지역주소E:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', '항목경로', '기사경로', 'ARTICLEPATH' ),
-       'server'                  => array( '0', '서버', 'SERVER' ),
-       'servername'              => array( '0', '서버이름', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', '스크립트경로', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', '스타일경로', 'STYLEPATH' ),
-       'grammar'                 => array( '0', '문법:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', '성별:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__제목변환없음__', '__제변없음__', '__제목변환안함__', '__제변안함__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__내용변환없음__', '__내변없음__', '__내용변환안함__', '__내변안함__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', '현재주', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', '현재요일숫자', 'CURRENTDOW' ),
-       'localweek'               => array( '1', '지역주', 'LOCALWEEK' ),
-       'localdow'                => array( '1', '지역요일숫자', 'LOCALDOW' ),
-       'revisionid'              => array( '1', '판번호', 'REVISIONID' ),
-       'revisionday'             => array( '1', '판일', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', '판일2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', '판월', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', '판월1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', '판년', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', '판타임스탬프', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', '판사용자', 'REVISIONUSER' ),
-       'plural'                  => array( '0', '복수:', '복수형:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', '전체주소:', 'FULLURL:' ),
-       'fullurle'                => array( '0', '전체주소E:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', '표준주소:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', '표준주소E:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', '첫소문자:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', '첫대문자:', 'UCFIRST:' ),
-       'lc'                      => array( '0', '소문자:', 'LC:' ),
-       'uc'                      => array( '0', '대문자:', 'UC:' ),
-       'raw'                     => array( '0', '원시:', 'RAW:' ),
-       'displaytitle'            => array( '1', '제목보이기', '제목표시', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__새글쓰기__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__새글쓰기숨기기__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', '현재버전', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', '주소인코딩:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', '책갈피인코딩', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', '현재타임스탬프', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', '지역타임스탬프', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', '명령검토', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#언어:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', '기본언어', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', '이름공간문서수', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', '관리자수', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', '수형식', 'FORMATNUM' ),
-       'padleft'                 => array( '0', '대체왼쪽', 'PADLEFT' ),
-       'padright'                => array( '0', '대체오른쪽', 'PADRIGHT' ),
-       'special'                 => array( '0', '특수기능', 'special' ),
-       'speciale'                => array( '0', '특수기능E', '특수기능e', 'speciale' ),
-       'defaultsort'             => array( '1', '기본정렬:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', '파일경로:', '그림경로:', 'FILEPATH:' ),
-       'tag'                     => array( '0', '태그', 'tag' ),
-       'hiddencat'               => array( '1', '__숨은분류__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', '분류문서수', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', '문서크기', 'PAGESIZE' ),
-       'index'                   => array( '1', '__색인__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__색인안함__', '__색인거부__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', '보호수준', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', '날짜형식', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', '경로', 'PATH' ),
-       'url_wiki'                => array( '0', '위키', 'WIKI' ),
-       'url_query'               => array( '0', '쿼리', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', '오류없음', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', '바꾸기없음', 'noreplace' ),
+       'redirect'                  => array( '0', '#넘겨주기', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__목차숨김__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__화랑숨김__', '__갤러리숨김__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__목차보임__', '__목차표시__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__목차__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__단락편집숨김__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__머릿글숨김__', '__헤더숨김__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', '현재월', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', '현재월1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', '현재월이름', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', '현재월이름소유격', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', '현재월이름약자', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', '현재일', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', '현재일2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', '현재요일', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', '현재년', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', '현재시분', '현재시각', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', '현재시', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', '지역월', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', '지역월1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', '지역월이름', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', '지역월이름소유격', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', '지역월이름약자', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', '지역일', 'LOCALDAY' ),
+       'localday2'                 => array( '1', '지역일2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', '지역요일', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', '지역년', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', '지역시분', '지역시각', 'LOCALTIME' ),
+       'localhour'                 => array( '1', '지역시', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', '모든문서수', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', '문서수', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', '파일수', '그림수', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', '사용자수', '계정수', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', '활동중인사용자수', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', '편집수', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', '조회수', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', '문서이름', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', '문서이름E', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', '이름공간', 'NAMESPACE' ),
+       'namespacee'                => array( '1', '이름공간E', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', '이름공간수', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', '토론이름공간', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', '토론이름공간E', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', '본문서이름공간', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', '본문서이름공간E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', '전체문서이름', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', '전체문서이름E', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', '하위문서이름', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', '하위문서이름E', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', '상위문서이름', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', '상위문서이름E', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', '토론문서이름', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', '토론문서이름E', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', '본문서이름', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', '본문서이름E', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', '메시지:', 'MSG:' ),
+       'subst'                     => array( '0', '풀기:', 'SUBST:' ),
+       'safesubst'                 => array( '0', '안전풀기:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', '위키잘못메시지:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', '섬네일', '썸네일', '축소판', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', '섬네일=$1', '썸네일=$1', '축소판=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', '오른쪽', 'right' ),
+       'img_left'                  => array( '1', '왼쪽', 'left' ),
+       'img_none'                  => array( '1', '없음', 'none' ),
+       'img_width'                 => array( '1', '$1픽셀', '$1px' ),
+       'img_center'                => array( '1', '가운데', 'center', 'centre' ),
+       'img_framed'                => array( '1', '프레임', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', '프레임없음', 'frameless' ),
+       'img_page'                  => array( '1', '문서=$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', '위오른쪽', '위오른쪽=$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', '테두리', 'border' ),
+       'img_baseline'              => array( '1', '밑줄', 'baseline' ),
+       'img_sub'                   => array( '1', '아래첨자', 'sub' ),
+       'img_super'                 => array( '1', '위첨자', 'super', 'sup' ),
+       'img_top'                   => array( '1', '위', 'top' ),
+       'img_text_top'              => array( '1', '글자위', '텍스트위', 'text-top' ),
+       'img_middle'                => array( '1', '중간', 'middle' ),
+       'img_bottom'                => array( '1', '아래', 'bottom' ),
+       'img_text_bottom'           => array( '1', '글자아래', '텍스트아래', 'text-bottom' ),
+       'img_link'                  => array( '1', '링크=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', '대체글=$1', 'alt=$1' ),
+       'int'                       => array( '0', '정수:', 'INT:' ),
+       'sitename'                  => array( '1', '사이트이름', 'SITENAME' ),
+       'ns'                        => array( '0', '이름:', '이름공간:', 'NS:' ),
+       'nse'                       => array( '0', '이름E:', '이름공간E:', 'NSE:' ),
+       'localurl'                  => array( '0', '지역주소:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', '지역주소E:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', '항목경로', '기사경로', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', '문서번호', 'PAGEID' ),
+       'server'                    => array( '0', '서버', 'SERVER' ),
+       'servername'                => array( '0', '서버이름', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', '스크립트경로', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', '스타일경로', 'STYLEPATH' ),
+       'grammar'                   => array( '0', '문법:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', '성별:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__제목변환없음__', '__제변없음__', '__제목변환안함__', '__제변안함__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__내용변환없음__', '__내변없음__', '__내용변환안함__', '__내변안함__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', '현재주', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', '현재요일숫자', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', '지역주', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', '지역요일숫자', 'LOCALDOW' ),
+       'revisionid'                => array( '1', '판번호', 'REVISIONID' ),
+       'revisionday'               => array( '1', '판일', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', '판일2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', '판월', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', '판월1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', '판년', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', '판타임스탬프', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', '판사용자', 'REVISIONUSER' ),
+       'plural'                    => array( '0', '복수:', '복수형:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', '전체주소:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', '전체주소E:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', '표준주소:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', '표준주소E:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', '첫소문자:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', '첫대문자:', 'UCFIRST:' ),
+       'lc'                        => array( '0', '소문자:', 'LC:' ),
+       'uc'                        => array( '0', '대문자:', 'UC:' ),
+       'raw'                       => array( '0', '원본:', 'RAW:' ),
+       'displaytitle'              => array( '1', '제목보이기', '제목표시', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__새글쓰기__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__새글쓰기숨기기__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', '현재버전', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', '주소인코딩:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', '책갈피인코딩', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', '현재타임스탬프', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', '지역타임스탬프', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', '명령검토', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#언어:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', '기본언어', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', '이름공간문서수', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', '관리자수', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', '수형식', 'FORMATNUM' ),
+       'padleft'                   => array( '0', '대체왼쪽', 'PADLEFT' ),
+       'padright'                  => array( '0', '대체오른쪽', 'PADRIGHT' ),
+       'special'                   => array( '0', '특수기능', 'special' ),
+       'speciale'                  => array( '0', '특수기능E', '특수기능e', 'speciale' ),
+       'defaultsort'               => array( '1', '기본정렬:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', '파일경로:', '그림경로:', 'FILEPATH:' ),
+       'tag'                       => array( '0', '태그', 'tag' ),
+       'hiddencat'                 => array( '1', '__숨은분류__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', '분류문서수', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', '문서크기', 'PAGESIZE' ),
+       'index'                     => array( '1', '__색인__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__색인안함__', '__색인거부__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', '보호수준', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', '날짜형식', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', '경로', 'PATH' ),
+       'url_wiki'                  => array( '0', '위키', 'WIKI' ),
+       'url_query'                 => array( '0', '쿼리', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', '오류없음', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', '바꾸기없음', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', '모두', 'all' ),
+       'pagesincategory_pages'     => array( '0', '문서', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', '하위분류', 'subcats' ),
+       'pagesincategory_files'     => array( '0', '파일', 'files' ),
 );
 
 $bookstoreList = array(
@@ -366,8 +374,8 @@ $messages = array(
 '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-externaleditor' => '바깥 편집기를 기본 편집기로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 정보 보기])',
+'tog-externaldiff' => '바깥 비교 도구를 기본 도구로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 설명 보기])',
 'tog-showjumplinks' => '접근성을 위한 "이동" 링크 쓰기 (일부 스킨에서만 작동)',
 'tog-uselivepreview' => '실시간 미리 보기 사용하기 (자바스크립트 필요) (시험 기능)',
 'tog-forceeditsummary' => '편집 요약을 쓰지 않았을 때 알려주기',
@@ -494,7 +502,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' => '역사',
@@ -601,10 +609,10 @@ $1',
 'youhavenewmessages' => '다른 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslink' => '사용자 토론',
 'newmessagesdifflink' => '바뀐 내용 비교',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자|$3 사용자}}가 $1란에 글을 남겼습니다. ($2)',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1란에 글을 남겼습니다. ($2)',
 'youhavenewmessagesmanyusers' => '여러 사용자가 $1란에 글을 남겼습니다. ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|ì\83\88 ë©\94ì\8b\9cì§\80}}',
-'newmessagesdifflinkplural' => '최근 {{PLURAL:$1|바뀜}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ì\82¬ì\9a©ì\9e\90 í\86 ë¡ }}',
+'newmessagesdifflinkplural' => '마지막 {{PLURAL:$1|바뀐 내용}}',
 'youhavenewmessagesmulti' => '다른 사용자가 $1란에 글을 남겼습니다.',
 'editsection' => '편집',
 'editold' => '편집',
@@ -646,7 +654,7 @@ $1',
 # Main script and global functions
 'nosuchaction' => '해당하는 동작이 없습니다.',
 'nosuchactiontext' => 'URL로 요청한 동작이 잘못되었습니다.
-당신은 URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
+URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
 이것은 {{SITENAME}}의 버그일 수도 있습니다.',
 'nosuchspecialpage' => '해당하는 특수 문서가 없습니다.',
 'nospecialpagetext' => '<strong>요청한 특수 문서가 존재하지 않습니다.</strong>
@@ -716,17 +724,18 @@ $1',
 제한을 넘었으니 몇 분 뒤에 새로 시도하세요.',
 'protectedpagetext' => '이 문서는 편집할 수 없도록 보호되어 있습니다.',
 'viewsourcetext' => '문서의 원본을 보거나 복사할 수 있습니다:',
-'viewyourtext' => "당신은 이 문서에 남긴 '''당신의 편집''' 내용을 보거나 복사할 수 있습니다:",
-'protectedinterface' => '이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 잠겨 있습니다.',
-'editinginterface' => "'''경고''': 소프트웨어에서 사용하는 메시지 문서를 고치고 있습니다.
-이는 모든 사용자에게 영향을 끼칩니다.
-번역되지 않은 메시지를 번역하려는 경우에는 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하면 메시지 번역을 미디어위키에 직접 반영할 수 있습니다.",
+'viewyourtext' => "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
+'protectedinterface' => '이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
+모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.',
+'editinginterface' => "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.
+이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.
+모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
 'sqlhidden' => '(SQL 쿼리 숨겨짐)',
 'cascadeprotected' => '이 문서는 연쇄 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
 $2',
 'namespaceprotected' => "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
-'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 CSS 문서를 편집할 수 없습니다.',
-'customjsprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 자바스크립트 문서를 편집할 수 없습니다.',
+'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.',
+'customjsprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 자바스크립트 문서를 편집할 수 없습니다.',
 'ns-specialprotected' => '특수 문서는 편집할 수 없습니다.',
 'titleprotected' => '[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.
 이유는 다음과 같습니다. "$2"',
@@ -746,7 +755,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''{{SITENAME}}에서 로그아웃했습니다.'''
 
-이대로 이름 없이 {{SITENAME}}을(를) 이용하거나, 방금 사용했던 계정이나 다른 계정으로 다시 [[Special:UserLogin|로그인]]해서 이용할 수 있습니다.
+이대로 이름 없이 {{SITENAME}}을(를) 이용하거나, 방금 사용했던 계정이나 다른 계정으로 다시 <span class='plainlinks'>[$1 로그인]</span>해서 이용할 수 있습니다.
 웹 브라우저의 캐시를 지우지 않으면 몇몇 문서에서 로그인이 되어 있는 것처럼 보일 수 있다는 점을 유의해 주세요.",
 'welcomecreation' => '== $1 님, 환영합니다! ==
 계정이 만들어졌습니다.
@@ -758,7 +767,7 @@ $2',
 'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
 'yourdomainname' => '도메인 이름:',
 'password-change-forbidden' => '이 위키에서 비밀번호를 바꿀 수 없습니다.',
-'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나 외부 계정을 새로 고칠 권한이 없습니다.',
+'externaldberror' => '바깥 인증 데이터베이스에 오류가 있거나 바깥 계정을 새로 고칠 권한이 없습니다.',
 'login' => '로그인',
 'nav-login-createaccount' => '로그인 / 계정 만들기',
 'loginprompt' => '{{SITENAME}}에 로그인하려면 쿠키를 사용할 수 있어야 합니다.',
@@ -785,10 +794,10 @@ $2',
 지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.
 로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.',
 'nocookieslogin' => '{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.
-당신의 웹 브라우저에서 쿠키가 비활성되어 있습니다.
-ì¿ í\82¤ ì\82¬ì\9a©ì\9d\84 í\99\9cì\84±í\99\94í\95\9c ë\8b¤ì\9d\8c ë¡\9cê·¸ì\9d¸í\95´ ì£¼세요.',
+쿠키가 비활성되어 있습니다.
+ì¿ í\82¤ ì\82¬ì\9a©ì\9d\84 í\99\9cì\84±í\99\94í\95\9c ë\8b¤ì\9d\8c ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'nocookiesfornew' => '요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.
-쿠키를 허용한 것을 확인한 후에 다시 시도해 보십시오.',
+쿠키를 허용한 것을 확인한 후에 이 문서를 새로 고치고 나서 다시 시도하세요.',
 'noname' => '사용자 이름이 올바르지 않습니다.',
 'loginsuccesstitle' => '로그인 성공',
 'loginsuccess' => "'''{{SITENAME}}에 \"\$1\" 계정으로 로그인했습니다.'''",
@@ -938,7 +947,7 @@ $2
 'hr_tip' => '가로 줄 (되도록 사용하지 말아 주세요)',
 
 # Edit pages
-'summary' => '편집 요약:',
+'summary' => '요약:',
 'subject' => '주제/제목:',
 'minoredit' => '사소한 편집',
 'watchthis' => '이 문서 주시하기',
@@ -955,7 +964,7 @@ $2
 'missingcommenttext' => '아래에 내용을 채워 넣어 주세요.',
 'missingcommentheader' => "'''알림:''' 글의 제목을 입력하지 않았습니다.
 다시 \"{{int:savearticle}}\" 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
-'summary-preview' => '편집 요약 미리 보기:',
+'summary-preview' => '요약 미리 보기:',
 'subject-preview' => '주제/제목 미리 보기:',
 'blockedtitle' => '차단됨',
 'blockedtext' => "'''당신의 계정 혹은 IP 주소가 차단되었습니다.'''
@@ -1008,13 +1017,12 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
 IP 주소는 여러 사용자가 공유할 수 있습니다.
 자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인 하여]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
-'noarticletext' => '이 문서가 존재하지 않습니다.
+'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' => '"{{PAGENAME}}"이라는 문서의 #$1판이 존재하지 않습니다.
 
 이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.
@@ -1184,8 +1192,8 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 설명: '''({{int:cur}})''' = 최신 판과 비교, '''({{int:last}})''' = 이전 판과 비교, '''{{int:minoreditletter}}'''= 사소한 편집",
 'history-fieldset-title' => '문서의 바뀜 내역 찾기',
 'history-show-deleted' => '삭제된 것만',
-'histfirst' => 'ì´\88기',
-'histlast' => '최신',
+'histfirst' => 'ì²\98ì\9d\8c',
+'histlast' => '마지막',
 'historysize' => '($1 바이트)',
 'historyempty' => '(비었음)',
 
@@ -1286,7 +1294,8 @@ $1",
 'revdelete-only-restricted' => '$1 $2 버전 숨기기 오류: 다른 숨기기 설정을 같이 설정하지 않고 관리자가 보지 못하도록 특정 판을 숨길 수 없습니다.',
 'revdelete-reason-dropdown' => '*일반적인 삭제 이유
 ** 저작권 침해
-** 부적절한 개인 정보
+** 부적절한 의견과 개인 정보
+** 부적절한 이름
 ** 잠재적인 비방 정보',
 'revdelete-otherreason' => '다른 이유/부가적인 이유',
 'revdelete-reasonotherlist' => '다른 이유',
@@ -1330,7 +1339,7 @@ $1",
 'mergelogpagetext' => '다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.',
 
 # Diffs
-'history-title' => '"$1"  문서의 바뀜 내역',
+'history-title' => '"$1" 문서의 바뀜 내역',
 'difference-title' => '"$1"의 두 판 사이의 차이',
 'difference-title-multipage' => '문서 "$1"(와)과 "$2" 사이의 차이',
 'difference-multipage' => '(문서 사이의 차이)',
@@ -1382,12 +1391,10 @@ $1",
 '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' => '(더 보기)',
-'search-mwsuggest-enabled' => '검색어 제안 있음',
-'search-mwsuggest-disabled' => '검색어 제안 없음',
 'search-relatedarticle' => '관련',
 'mwsuggest-disable' => 'AJAX 검색어 제안 끄기',
 'searcheverything-enable' => '모든 이름공간에서 찾기',
@@ -1406,7 +1413,7 @@ $1",
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
 'powersearch-togglenone' => '모두 선택하지 않음',
-'search-external' => '외부 찾기',
+'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
 검색 엔진의 내용은 최신이 아닐 수 있다는 점을 주의해주세요.',
@@ -1422,7 +1429,7 @@ $1",
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
-'mypreferences' => '내 사용자 환경 설정',
+'mypreferences' => '사용자 환경 설정',
 'prefs-edits' => '편집 횟수:',
 'prefsnologin' => '로그인하지 않음',
 'prefsnologintext' => '사용자 환경 설정을 바꾸려면 먼저 <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 로그인]</span>해야 합니다.',
@@ -1485,14 +1492,14 @@ $1",
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
 'allowemail' => '다른 사용자가 보낸 이메일을 받음',
-'prefs-searchoptions' => '찾기 설정',
+'prefs-searchoptions' => '찾기',
 'prefs-namespaces' => '이름공간',
 'defaultns' => '다음 이름공간에서 찾기:',
 'default' => '기본값',
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
 'prefs-custom-js' => '사용자 자바스크립트',
-'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/JavaScript:',
+'prefs-common-css-js' => '모든 스킨에 대한 공통 CSS/자바스크립트:',
 'prefs-reset-intro' => '이 사이트의 기본값으로 환경 설정을 되돌릴 수 있습니다.
 복구할 수 없습니다.',
 'prefs-emailconfirm-label' => '이메일 인증:',
@@ -1549,7 +1556,7 @@ HTML 태그를 확인하세요.',
 'userrights-lookup-user' => '사용자 권한 관리',
 'userrights-user-editname' => '사용자 이름 입력:',
 'editusergroup' => '사용자 그룹 편집',
-'editinguser' => "사용자 '''[[User:$1|$1]]''' $2의 권한 바꿈",
+'editinguser' => "'''[[User:$1|$1]]''' $2 사용자의 권한 바꾸기",
 'userrights-editusergroup' => '사용자 그룹 편집',
 'saveusergroups' => '사용자 권한 저장',
 'userrights-groupsmember' => '현재 권한:',
@@ -1813,8 +1820,8 @@ $2 형식만 사용할 수 있습니다.',
 'fileexists' => '같은 이름의 파일이 이미 있습니다. 파일을 바꾸고 싶지 않다면 <strong>[[:$1]]</strong> 파일을 확인해 주세요.
 [[$1|thumb]]',
 'filepageexists' => '이 파일의 설명 문서가 <strong>[[:$1]]</strong>에 존재하지만, 이 이름을 가진 파일이 존재하지 않습니다.
-당신이 입력한 설명은 설명 문서에 반영되지 않을 것입니다.
-당신의 설명을 반영시키려면, 직접 편집하셔야 합니다.
+입력한 설명은 설명 문서에 반영되지 않을 것입니다.
+설명을 반영시키려면, 직접 편집하셔야 합니다.
 [[$1|thumb]]',
 'fileexists-extension' => '비슷한 이름의 파일이 존재합니다: [[$2|thumb]]
 * 올리려는 파일 이름: <strong>[[:$1]]</strong>
@@ -1923,7 +1930,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'backend-fail-internal' => '"$1" 저장 백엔드에 알 수 없는 오류가 발생했습니다.',
 'backend-fail-contenttype' => '"$1"에 저장하기 위한 파일의 내용 유형을 판별하지 못했습니다.',
 'backend-fail-batchsize' => '저장 백엔드에서 파일 {{PLURAL:$1|작업}} $1개가 쌓여 있습니다. 한계는 $2개입니다.',
-'backend-fail-usable' => 'í\8c\8cì\9d¼ ì \80ì\9e¥ ê¶\8cí\95\9cì\9d´ ì\97\86ê±°ë\82\98 ì \80ì\9e¥ ì\9c\84ì¹\98ê°\80 ë¹ ì¡\8c기 ë\95\8c문ì\97\90 $1 í\8c\8cì\9d¼ì\9d\84 ì \80ì\9e¥í\95  수 없습니다.',
+'backend-fail-usable' => 'í\8c\8cì\9d¼ ì\9d½ê¸°/ì\93°ê¸° ê¶\8cí\95\9cì\9d´ ì\97\86ê±°ë\82\98 ì \80ì\9e¥ ì\9c\84ì¹\98ê°\80 ë¹ ì¡\8c기 ë\95\8c문ì\97\90 "$1" í\8c\8cì\9d¼ì\9d\84 ì\9d½ê±°ë\82\98 ì\93¸ 수 없습니다.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '저장소 백엔드 "$1"에 대한 저널 데이터베이스에 연결할 수 없습니다.',
@@ -1956,7 +1963,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'uploadstash-nofiles' => '임시 저장한 파일이 없습니다.',
 'uploadstash-badtoken' => '이 동작을 수행하는 데 실패했습니다. 편집 토큰이 만료되었을 가능성이 있습니다. 다시 시도하세요.',
 'uploadstash-errclear' => '파일을 제거하는 데 실패했습니다.',
-'uploadstash-refresh' => '파일 목록을 새로고침',
+'uploadstash-refresh' => '파일 목록을 새로 고침',
 'invalid-chunk-offset' => '청크 오프셋이 잘못되었습니다.',
 
 # img_auth script messages
@@ -1972,7 +1979,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오
 'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다.
 파일에만 접근할 수 있습니다.',
 'img-auth-streaming' => '"$1" 파일을 전송하는 중입니다.',
-'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다.
+'img-auth-public' => 'img_auth.php는 개인 위키 파일을 바깥 사이트로 전송하는 기능입니다.
 이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있습니다.
 보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.',
 'img-auth-noread' => '"$1" 파일을 볼 권한이 없습니다.',
@@ -2000,13 +2007,13 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'license' => '라이선스:',
 'license-header' => '라이선스',
 'nolicense' => '선택하지 않음',
-'license-nopreview' => '(미리보기 불가능)',
+'license-nopreview' => '(미리 보기 불가능)',
 'upload_source_url' => ' (유효하고, 모든 사람이 접근 가능한 URL)',
 'upload_source_file' => ' (당신의 컴퓨터에 있는 파일)',
 
 # Special:ListFiles
 'listfiles-summary' => '이 위키에 올라와 있는 모든 파일이 나열되어 있습니다.
-사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 버전만이 표시됩니다.',
+사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 버전만이 보여집니다.',
 'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:',
 'imgfile' => '파일',
 'listfiles' => '파일 목록',
@@ -2149,7 +2156,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'doubleredirects' => '이중 넘겨주기 목록',
 'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.
 매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 "실제" 문서인 두 번째 넘겨주기의 대상이 있습니다.
-<del>ì·¨ì\86\8cì\84 ì\9d´ ê·¸ì\9d¸</del> 부분은 이미 해결되었습니다.',
+<del>ì·¨ì\86\8cì\84 ì\9d´ ê·¸ì\96´ì§\84</del> 부분은 이미 해결되었습니다.',
 'double-redirect-fixed-move' => '[[$1]] 문서를 옮겼습니다.
 이 문서는 이제 [[$2]] 문서로 넘겨줍니다.',
 'double-redirect-fixed-maintenance' => '[[$1]]에서 [[$2]]로 이중 넘겨주기를 고치는 중',
@@ -2191,8 +2198,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'wantedpages' => '필요한 문서 목록',
 'wantedpages-badtitle' => '문서 제목이 잘못되었습니다: $1',
 'wantedfiles' => '필요한 파일 목록',
-'wantedfiletext-cat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 외부 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.',
-'wantedfiletext-nocat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 외부 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다.',
+'wantedfiletext-cat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.',
+'wantedfiletext-nocat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다.',
 'wantedtemplates' => '필요한 틀 목록',
 'mostlinked' => '가장 많이 연결된 문서 목록',
 'mostlinkedcategories' => '가장 많이 연결된 분류 목록',
@@ -2241,7 +2248,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'booksources' => '책 찾기',
 'booksources-search-legend' => '책 찾기',
 'booksources-go' => '찾기',
-'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 외부 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
+'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
 'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
 # Special:Log
@@ -2267,7 +2274,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'allnotinnamespace' => '$1 이름공간을 제외한 모든 문서',
 'allpagesprev' => '이전',
 'allpagesnext' => '다음',
-'allpagessubmit' => '표시',
+'allpagessubmit' => '보기',
 'allpagesprefix' => '다음으로 시작하는 문서 보기:',
 'allpagesbadtitle' => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다.
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
@@ -2378,6 +2385,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 # User Messenger
 'usermessage-summary' => '시스템 메시지 남기기',
 'usermessage-editor' => '시스템 메신저',
+'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
 'watchlist' => '주시문서 목록',
@@ -2401,7 +2409,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchnochange' => '주어진 기간 중에 바뀐 주시문서가 없습니다.',
 'watchlist-details' => '토론을 제외하고 문서 $1개를 주시하고 있습니다.',
 'wlheader-enotif' => '* 이메일 알림 기능이 활성화되었습니다.',
-'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 표시됩니다.",
+'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보여집니다.",
 'watchmethod-recent' => '주시된 문서를 확인하고자 최근 편집을 확인',
 'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
 'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
@@ -2493,8 +2501,8 @@ $UNWATCHURL
 'rollback' => '편집 되돌리기',
 'rollback_short' => '되돌리기',
 'rollbacklink' => '되돌리기',
-'rollbacklinkcount' => '되돌리기 편집 $1회',
-'rollbacklinkcount-morethan' => '되돌리기 편집 $1회 이상',
+'rollbacklinkcount' => '편집 $1회 되돌리기',
+'rollbacklinkcount-morethan' => '편집 $1회 이상 되돌리기',
 'rollbackfailed' => '되돌리기 실패',
 'cantrollback' => '편집을 되돌릴 수 없습니다.
 문서를 편집한 사용자가 한명뿐입니다.',
@@ -2670,6 +2678,7 @@ $1',
 'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
 'sp-contributions-toponly' => '최신판만 보기',
 'sp-contributions-submit' => '찾기',
+'sp-contributions-explain' => '',
 
 # What links here
 'whatlinkshere' => '여기를 가리키는 문서',
@@ -2701,7 +2710,7 @@ $1',
 차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.
 차단 이유를 같이 적어주세요(예: 특정 문서 훼손).',
 'ipadressorusername' => 'IP 주소 또는 사용자 이름:',
-'ipbexpiry' => '기:',
+'ipbexpiry' => '기:',
 'ipbreason' => '이유:',
 'ipbreasonotherlist' => '다른 이유',
 'ipbreason-dropdown' => '*일반적인 차단 이유
@@ -2750,7 +2759,7 @@ $1',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
 'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
 'blocklist-rangeblocks' => '광역 차단을 숨기기',
-'blocklist-timestamp' => '날짜·시각',
+'blocklist-timestamp' => '시간 기록',
 'blocklist-target' => '차단 대상',
 'blocklist-expiry' => '차단 기한',
 'blocklist-by' => '차단한 관리자',
@@ -2863,10 +2872,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 [[Special:DoubleRedirects|이중 넘겨주기]]나 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
 당신은 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-참고로 새 제목을 가진 문서가 이미 있다면 다음 경우에 해당하지 않으면 이 문서는 옮겨지지 '''않을''' 것입니다.
-* 비어 있거나,
-* 넘겨주기 문서이며,
-* 과거에 편집 내력이 없는 경우
+참고로 새 제목을 가진 문서가 이미 있다면 비어 있거나 넘겨주기 문서이며, 과거에 편집 내역이 없으면 이 문서는 옮겨지지 '''않을''' 것입니다.
 이는 당신이 실수로 문서를 옮겼을 때 되돌릴 수 있으며 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
@@ -3053,7 +3059,6 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # JavaScriptTest
 'javascripttest' => '자바스크립트 테스트',
-'javascripttest-disabled' => '이 기능은 비활성되어 있습니다.',
 'javascripttest-title' => '$1 테스트 실행',
 'javascripttest-pagetext-noframework' => '이 페이지는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.',
 'javascripttest-pagetext-unknownframework' => '실험용 프레임워크 "$1"를 알 수 없습니다.',
@@ -3067,14 +3072,14 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-pt-anonuserpage' => '현재 사용하는 IP의 사용자 문서',
 'tooltip-pt-mytalk' => '내 토론 문서',
 'tooltip-pt-anontalk' => '현재 사용하는 IP를 위한 사용자 토론 문서',
-'tooltip-pt-preferences' => '내 사용자 환경 설정',
+'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' => '문서가 잠겨 있습니다.
 문서의 내용만 볼 수 있습니다.',
@@ -3128,7 +3133,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-recreate' => '문서를 편집하는 중 삭제되어도 새로 만들기',
 'tooltip-upload' => '파일 올리기 시작',
 'tooltip-rollback' => '"되돌리기" 기능을 사용하면 이 문서에 대한 마지막 기여자의 편집을 모두 되돌릴 수 있습니다.',
-'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고, 차이보기 기능이 미리보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
+'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고 차이 보기 기능이 미리 보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
 'tooltip-preferences-save' => '환경 설정 저장하기',
 'tooltip-summary' => '짧은 편집 요약을 적어주세요',
 
@@ -3219,10 +3224,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-authors' => '총 서로 다른 편집자 수',
 'pageinfo-recent-edits' => '최근 편집 수 (지난 $1일 이내)',
 'pageinfo-recent-authors' => '최근 기여자 수',
-'pageinfo-restriction' => '문서 보호 (<code>$1</code>)',
 'pageinfo-magic-words' => '매직 {{PLURAL:$1|워드}} ($1개)',
 'pageinfo-hidden-categories' => '숨은 {{PLURAL:$1|분류}} ($1개)',
 'pageinfo-templates' => '포함한 {{PLURAL:$1|틀}} ($1개)',
+'pageinfo-toolboxlink' => '문서 정보',
 
 # Skin names
 'skinname-standard' => '클래식',
@@ -3360,7 +3365,7 @@ Variants for Chinese language
 'exif-ycbcrpositioning' => 'Y와 C 위치',
 'exif-xresolution' => '수평 해상도',
 'exif-yresolution' => '수직 해상도',
-'exif-stripoffsets' => '이미지 데이터 위치',
+'exif-stripoffsets' => '그림 데이터 위치',
 'exif-rowsperstrip' => '스트립당 줄의 수',
 'exif-stripbytecounts' => '압축된 스트립당 바이트 수',
 'exif-jpeginterchangeformat' => 'JPEG SOI와의 차이',
@@ -3380,7 +3385,7 @@ Variants for Chinese language
 'exif-flashpixversion' => '지원하는 플래시픽스 버전',
 'exif-colorspace' => '색 공간',
 'exif-componentsconfiguration' => '각 구성 요소의 의미',
-'exif-compressedbitsperpixel' => '이미지 압축 방식',
+'exif-compressedbitsperpixel' => '그림 압축 방식',
 'exif-pixelydimension' => '그림 너비',
 'exif-pixelxdimension' => '그림 높이',
 'exif-usercomment' => '사용자 주',
@@ -3416,7 +3421,7 @@ Variants for Chinese language
 'exif-sensingmethod' => '감지 방식',
 'exif-filesource' => '파일 출처',
 'exif-scenetype' => '촬영 모드',
-'exif-customrendered' => '이미지 처리 방식',
+'exif-customrendered' => '그림 처리 방식',
 'exif-exposuremode' => '노출 방식',
 'exif-whitebalance' => '화이트 밸런스',
 'exif-digitalzoomratio' => '디지털 줌 비율',
@@ -3428,7 +3433,7 @@ Variants for Chinese language
 'exif-sharpness' => '선명도',
 'exif-devicesettingdescription' => '장치 설정에 대한 설명',
 'exif-subjectdistancerange' => '대상과의 거리 범위',
-'exif-imageuniqueid' => '이미지 고유 ID',
+'exif-imageuniqueid' => '그림 고유 ID',
 'exif-gpsversionid' => 'GPS 태그 버전',
 'exif-gpslatituderef' => '북위 또는 남위',
 'exif-gpslatitude' => '위도',
@@ -3445,8 +3450,8 @@ Variants for Chinese language
 'exif-gpsspeed' => 'GPS 수신기 속도',
 'exif-gpstrackref' => '이동 방향에 대한 정보',
 'exif-gpstrack' => '이동 방향',
-'exif-gpsimgdirectionref' => '이미지 방향에 대한 정보',
-'exif-gpsimgdirection' => '이미지 방향',
+'exif-gpsimgdirectionref' => '그림 방향에 대한 정보',
+'exif-gpsimgdirection' => '그림 방향',
 'exif-gpsmapdatum' => '측지 조사 데이처 사용',
 'exif-gpsdestlatituderef' => '목적지의 위도 정보',
 'exif-gpsdestlatitude' => '목적지의 위도',
@@ -3500,7 +3505,7 @@ Variants for Chinese language
 'exif-cameraownername' => '카메라 소유자',
 'exif-label' => '라벨',
 'exif-datetimemetadata' => '메타데이터 최종 수정일',
-'exif-nickname' => '이미지의 비공식적 이름',
+'exif-nickname' => '그림의 비공식적 이름',
 'exif-rating' => '평가 (5점 만점)',
 'exif-rightscertificate' => '권리 관리 인증서',
 'exif-copyrighted' => '저작권 정보',
@@ -3522,8 +3527,8 @@ Variants for Chinese language
 'exif-event' => '묘사된 사건',
 'exif-organisationinimage' => '묘사된 기관',
 'exif-personinimage' => '묘사된 사람',
-'exif-originalimageheight' => '자르기 전 이미지의 세로 길이',
-'exif-originalimagewidth' => '자르기 전 이미지의 가로 길이',
+'exif-originalimageheight' => '자르기 전 그림의 세로 길이',
+'exif-originalimagewidth' => '자르기 전 그림의 가로 길이',
 
 # EXIF attributes
 'exif-compression-1' => '압축되지 않음',
@@ -3617,9 +3622,9 @@ Variants for Chinese language
 'exif-sensingmethod-7' => '3선 센서',
 'exif-sensingmethod-8' => '순차적 색 공간 선형 센서',
 
-'exif-filesource-3' => 'ë\94\94ì§\80í\84¸ ì\8a¤í\8b¸ 카메라',
+'exif-filesource-3' => 'ë\94\94ì§\80í\84¸ ì \95ì§\80 카메라',
 
-'exif-scenetype-1' => '직접 촬영된 이미지',
+'exif-scenetype-1' => '직접 촬영한 그림',
 
 'exif-customrendered-0' => '일반',
 'exif-customrendered-1' => '사용자 정의',
@@ -3741,7 +3746,7 @@ Variants for Chinese language
 'exif-urgency-other' => '사용자 정의 ($1)',
 
 # External editor support
-'edit-externally' => '이 파일을 외부 프로그램을 사용해서 편집하기',
+'edit-externally' => '이 파일을 바깥 프로그램을 사용해서 편집하기',
 'edit-externally-help' => '(자세한 정보는 [//www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
 
 # 'all' in various places, this might be different for inflected languages
@@ -3823,6 +3828,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[인터위키가 비활성되어 있습니다]',
 'scarytranscludefailed' => '[$1 틀을 불러오는 데에 실패했습니다]',
+'scarytranscludefailed-httpstatus' => '[$1 틀을 가져오는 데 실패했습니다: HTTP $2]',
 'scarytranscludetoolong' => '[URL이 너무 깁니다]',
 
 # Delete conflict
@@ -3933,7 +3939,7 @@ $5
 'version-version' => '(버전 $1)',
 'version-license' => '라이선스',
 'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
-'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS 그 외 다른 개발자]',
+'version-poweredby-others' => '그 외 다른 개발자',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
@@ -3991,7 +3997,7 @@ $5
 # External image whitelist
 'external_image_whitelist' => ' #이 줄은 그대로 두십시오<pre>
 #정규 표현식(// 사이에 있는 부분)을 아래에 입력하세요.
-#이 목록은 외부 이미지의 URL과 대조할 것입니다.
+#이 목록은 바깥 그림의 URL과 대조할 것입니다.
 #이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.
 # "#"으로 시작하는 줄은 주석으로 간주됩니다.
 #이 목록은 대소문자를 구별하지 않습니다.
@@ -4003,7 +4009,7 @@ $5
 'tag-filter' => '[[Special:Tags|태그]] 필터:',
 'tag-filter-submit' => '필터',
 'tags-title' => '태그',
-'tags-intro' => '이 페이지는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.',
+'tags-intro' => '이 문서는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.',
 'tags-tag' => '태그 이름',
 'tags-display-header' => '바뀜 목록의 모양',
 'tags-description-header' => '태그에 대한 설명',
@@ -4097,6 +4103,10 @@ $5
 'feedback-bugcheck' => '감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.',
 'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
 
+# Search suggestions
+'searchsuggest-search' => '찾기',
+'searchsuggest-containing' => '다음의 어구가 들어간 문서 찾기',
+
 # API errors
 'api-error-badaccess-groups' => '당신은 이 위키에 파일을 올릴 권한이 없습니다.',
 'api-error-badtoken' => '내부 오류: 토큰이 잘못되었습니다.',
index 30fdfcb..833cdf9 100644 (file)
@@ -343,8 +343,6 @@ $messages = array(
 'search-interwiki-caption' => 'Вачкисян проекттэз',
 'search-interwiki-default' => '$1 результат:',
 'search-interwiki-more' => '(унажык)',
-'search-mwsuggest-enabled' => 'öтсöттэзöн',
-'search-mwsuggest-disabled' => 'öтсöттэзтöг',
 'searchall' => 'быдöс',
 'nonefound' => "'''Пасйöт.''' Он кö нагладь шуан,  кытiсь кошшыны,  шедасö не быдöс тексттэз, кытöн пантасьö колан кылыс. Мед кошшыны быдöс тексттэзiсь (уджкериссез листбоккезiсь,  шаболоннэзiсь дмд.), гиж ''all:'',  нето утлянно мыччав,  кытiсь кошшыны.",
 'powersearch' => 'Паськытжыка кошшан',
index d457a15..acfa367 100644 (file)
@@ -428,7 +428,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Аккаунтугъуздан чыкъдыгъыз.'''
 
-Сиз {{SITENAME}} сайтда аноним халда къалыргъа боллкъсуз. неда [[Special:UserLogin|джангыдан кирирге]].
+Сиз {{SITENAME}} сайтда аноним халда къалыргъа боллкъсуз. неда <span class='plainlinks'>[$1 джангыдан кирирге]</span>.
 Талай бетле сиз тергеу джазыу (аккаунт) бла киргенча кёрюнюрге боллукъдула, аны кетерир ючюн кэшни джангыртыгъыз.",
 'welcomecreation' => '== Хош келигиз, $1!  ==
 Сизни тергеу джазыуугъуз (аккаунтугъуз) къуралды.
@@ -987,8 +987,6 @@ $1",
 'search-interwiki-caption' => 'Джууукъ проектле',
 'search-interwiki-default' => '$1 эсеблери:',
 'search-interwiki-more' => '(дагъыда)',
-'search-mwsuggest-enabled' => 'юретиуле бла',
-'search-mwsuggest-disabled' => 'юретиулесиз',
 'search-relatedarticle' => 'Байламлы',
 'mwsuggest-disable' => 'AJAX юретиулени джукълатыгъыз',
 'searcheverything-enable' => 'Атланы бютёу аламларында изле',
@@ -3435,6 +3433,10 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'feedback-error2' => 'Халат. Тюзетиу ётмеди',
 'feedback-close' => 'Тындырылды',
 
+# Search suggestions
+'searchsuggest-search' => 'Излеу',
+'searchsuggest-containing' => 'ичиндегиси…',
+
 # API errors
 'api-error-badtoken' => 'Ич халат: терс токен.',
 'api-error-duplicate-popup-title' => ' {{PLURAL:$1|Файлны|Файлны}} дубликаты',
index 89dd72e..ccfbd05 100644 (file)
 
 $messages = array(
 # User preference toggles
-'tog-justify'         => 'jostifai di paragraf-dem',
-'tog-hideminor'       => 'Haid di lili chenj-dem na di risent chenj list',
+'tog-justify' => 'jostifai di paragraf-dem',
+'tog-hideminor' => 'Haid di lili chenj-dem na di risent chenj list',
 'tog-extendwatchlist' => 'Big di wachlist fo sho ol di chenj-dem,  pas di risent chenj-dem nomo',
 
 # Dates
-'sunday'        => 'Sonde',
-'monday'        => 'Monde',
-'tuesday'       => 'Tyuzde',
-'wednesday'     => 'Wenzde',
-'thursday'      => 'Tozde',
-'friday'        => 'Fraide',
-'saturday'      => 'Satide',
-'sun'           => 'Son',
-'mon'           => 'Mon',
-'tue'           => 'Tyu',
-'wed'           => 'Wen',
-'thu'           => 'Toz',
-'fri'           => 'Frai',
-'sat'           => 'Sat',
-'january'       => 'Janyuari',
-'february'      => 'Febyuari',
-'march'         => 'Mach',
-'april'         => 'Epril',
-'may_long'      => 'Mey',
-'june'          => 'Jun',
-'july'          => 'Julai',
-'august'        => 'Ogost',
-'september'     => 'Septemba',
-'october'       => 'Oktoba',
-'november'      => 'Novemba',
-'december'      => 'Disemba',
-'january-gen'   => 'Janyuari',
-'february-gen'  => 'Febyuari',
-'march-gen'     => 'Mach',
-'april-gen'     => 'Epril',
-'may-gen'       => 'Mey',
-'june-gen'      => 'Jun',
-'july-gen'      => 'Julai',
-'august-gen'    => 'Ogost',
+'sunday' => 'Sonde',
+'monday' => 'Monde',
+'tuesday' => 'Tyuzde',
+'wednesday' => 'Wenzde',
+'thursday' => 'Tozde',
+'friday' => 'Fraide',
+'saturday' => 'Satide',
+'sun' => 'Son',
+'mon' => 'Mon',
+'tue' => 'Tyu',
+'wed' => 'Wen',
+'thu' => 'Toz',
+'fri' => 'Frai',
+'sat' => 'Sat',
+'january' => 'Janyuari',
+'february' => 'Febyuari',
+'march' => 'Mach',
+'april' => 'Epril',
+'may_long' => 'Mey',
+'june' => 'Jun',
+'july' => 'Julai',
+'august' => 'Ogost',
+'september' => 'Septemba',
+'october' => 'Oktoba',
+'november' => 'Novemba',
+'december' => 'Disemba',
+'january-gen' => 'Janyuari',
+'february-gen' => 'Febyuari',
+'march-gen' => 'Mach',
+'april-gen' => 'Epril',
+'may-gen' => 'Mey',
+'june-gen' => 'Jun',
+'july-gen' => 'Julai',
+'august-gen' => 'Ogost',
 'september-gen' => 'Septemba',
-'october-gen'   => 'Oktoba',
-'november-gen'  => 'Novemba',
-'december-gen'  => 'Disemba',
-'jan'           => 'Jan',
-'feb'           => 'Feb',
-'mar'           => 'Mach',
-'apr'           => 'Epr',
-'may'           => 'Mey',
-'jun'           => 'Jun',
-'jul'           => 'Jul',
-'aug'           => 'Og',
-'sep'           => 'Sep',
-'oct'           => 'Okt',
-'nov'           => 'Nov',
-'dec'           => 'Dis',
+'october-gen' => 'Oktoba',
+'november-gen' => 'Novemba',
+'december-gen' => 'Disemba',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mach',
+'apr' => 'Epr',
+'may' => 'Mey',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Og',
+'sep' => 'Sep',
+'oct' => 'Okt',
+'nov' => 'Nov',
+'dec' => 'Dis',
 
 # Categories related messages
-'pagecategories'        => '{{PLURAL:$1|Katigori|Katigori-dem}}',
-'category_header'       => 'Pej-dehm we de na katigori "$1"',
-'subcategories'         => 'Sobkatigori-dem',
+'pagecategories' => '{{PLURAL:$1|Katigori|Katigori-dem}}',
+'category_header' => 'Pej-dehm we de na katigori "$1"',
+'subcategories' => 'Sobkatigori-dem',
 'category-media-header' => 'Midya we de na katigori "$1"',
-'category-empty'        => "''Dis katigori-ya no get no pej o midya fo naw.''",
-'hidden-categories'     => '{{PLURAL:$1|Katigori we dem don haid|Katigori-dem we dehm don haid}}',
+'category-empty' => "''Dis katigori-ya no get no pej o midya fo naw.''",
+'hidden-categories' => '{{PLURAL:$1|Katigori we dem don haid|Katigori-dem we dehm don haid}}',
 
-'cancel'     => 'Kansul',
-'mytalk'     => 'Mi Tok',
+'cancel' => 'Kansul',
+'mytalk' => 'Mi Tok',
 'navigation' => 'Navigeshon',
 
 # Cologne Blue skin
-'qbedit'  => 'Edit',
-'faq'     => 'Kwestyon we dem de aks boku',
+'qbedit' => 'Edit',
+'faq' => 'Kwestyon we dem de aks boku',
 'faqpage' => 'Project:Kwehstyohn-dehm we ohlman de aks',
 
 # Vector skin
-'vector-action-move'     => 'Muf',
-'vector-view-edit'       => 'Chenj',
-'vector-view-history'    => 'Luk histri',
-'vector-view-view'       => 'Rid',
+'vector-action-move' => 'Muf',
+'vector-view-edit' => 'Chenj',
+'vector-view-history' => 'Luk histri',
+'vector-view-view' => 'Rid',
 'vector-view-viewsource' => 'Luk di sos',
-'actions'                => 'Akshon-dem',
-'namespaces'             => 'Nemspes-dem',
-
-'errorpagetitle'   => 'Problem',
-'returnto'         => 'Go bak tu $1.',
-'tagline'          => 'Dis komot {{SITENAME}}',
-'help'             => 'Hep',
-'search'           => 'Luk fo',
-'searchbutton'     => 'Luk fo',
-'go'               => 'Go',
-'searcharticle'    => 'Go',
-'history'          => 'Pej-im histri',
-'history_short'    => 'Histri',
-'updatedmarker'    => 'wetin dem don opdet from we A las vizit',
+'actions' => 'Akshon-dem',
+'namespaces' => 'Nemspes-dem',
+
+'errorpagetitle' => 'Problem',
+'returnto' => 'Go bak tu $1.',
+'tagline' => 'Dis komot {{SITENAME}}',
+'help' => 'Hep',
+'search' => 'Luk fo',
+'searchbutton' => 'Luk fo',
+'go' => 'Go',
+'searcharticle' => 'Go',
+'history' => 'Pej-im histri',
+'history_short' => 'Histri',
+'updatedmarker' => 'wetin dem don opdet from we A las vizit',
 'printableversion' => 'Vazhon fo Print',
-'permalink'        => 'Pamanent link',
-'print'            => 'Print',
-'edit'             => 'Edit',
-'create'           => 'Mek',
-'editthispage'     => 'Edit dis pej-ya',
+'permalink' => 'Pamanent link',
+'print' => 'Print',
+'edit' => 'Edit',
+'create' => 'Mek',
+'editthispage' => 'Edit dis pej-ya',
 'create-this-page' => 'Mek dis pej-ya',
-'delete'           => 'Dilit',
-'deletethispage'   => 'Dilit dis pej-ya',
-'protect'          => 'Protekt',
-'protect_change'   => 'chenj',
-'protectthispage'  => 'Protekt dis pej-ya',
+'delete' => 'Dilit',
+'deletethispage' => 'Dilit dis pej-ya',
+'protect' => 'Protekt',
+'protect_change' => 'chenj',
+'protectthispage' => 'Protekt dis pej-ya',
 'talkpagelinktext' => 'Tok',
-'specialpage'      => 'Speshal Pej',
-'personaltools'    => 'Pasonal tul-dèm',
-'postcomment'      => 'Nyu sekshon',
-'articlepage'      => 'Luk kontent pej',
-'talk'             => 'Diskoshon',
-'views'            => 'Vyu-dem',
-'toolbox'          => 'Tulboks',
-'userpage'         => 'Luk dis yuza-im pej',
-'otherlanguages'   => 'Na oda langwej-dem',
-'jumpto'           => 'Jomp go:',
+'specialpage' => 'Speshal Pej',
+'personaltools' => 'Pasonal tul-dèm',
+'postcomment' => 'Nyu sekshon',
+'articlepage' => 'Luk kontent pej',
+'talk' => 'Diskoshon',
+'views' => 'Vyu-dem',
+'toolbox' => 'Tulboks',
+'userpage' => 'Luk dis yuza-im pej',
+'otherlanguages' => 'Na oda langwej-dem',
+'jumpto' => 'Jomp go:',
 'jumptonavigation' => 'navigeshon',
-'jumptosearch'     => 'Luk fo',
+'jumptosearch' => 'Luk fo',
 
 # 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'            => 'Na bot {{SITENAME}}',
-'aboutpage'            => 'Project:Na bot',
-'copyright'            => 'Dis kontent de onda $1 .',
-'currentevents'        => 'Korent ivent-dem',
-'currentevents-url'    => 'Project:Korent ivent-dem',
-'disclaimers'          => 'Disklema-dem',
-'disclaimerpage'       => 'Project:Jeneral disklema',
-'edithelp'             => 'Advais foh we yu wan fo edit',
-'edithelppage'         => 'Help:Editin',
-'helppage'             => 'Help:Kontent-dem',
-'mainpage'             => 'Men Pej',
+'aboutsite' => 'Na bot {{SITENAME}}',
+'aboutpage' => 'Project:Na bot',
+'copyright' => 'Dis kontent de onda $1 .',
+'currentevents' => 'Korent ivent-dem',
+'currentevents-url' => 'Project:Korent ivent-dem',
+'disclaimers' => 'Disklema-dem',
+'disclaimerpage' => 'Project:Jeneral disklema',
+'edithelp' => 'Advais foh we yu wan fo edit',
+'edithelppage' => 'Help:Editin',
+'helppage' => 'Help:Kontent-dem',
+'mainpage' => 'Men Pej',
 'mainpage-description' => 'Men Pej',
-'policy-url'           => 'Project:Polisi',
-'portal'               => 'Mitin-ples fo yuza-dem',
-'portal-url'           => 'Project:Mitin-ples fo yuza-dem',
-'privacy'              => 'Polisi fo Praivesi',
-'privacypage'          => 'Project:Polisi fo praivesi',
+'policy-url' => 'Project:Polisi',
+'portal' => 'Mitin-ples fo yuza-dem',
+'portal-url' => 'Project:Mitin-ples fo yuza-dem',
+'privacy' => 'Polisi fo Praivesi',
+'privacypage' => 'Project:Polisi fo praivesi',
 
-'badaccess'        => 'Pamishon problem',
+'badaccess' => 'Pamishon problem',
 'badaccess-group0' => 'Yu no get pamishon foh du wetin yu jos chuz',
 'badaccess-groups' => 'Na di yuza-dem we don join {{PLURAL:$2|di grup|wan pa di grup-dem}}: $1 nomo ebul du wetin yu jos chuz.',
 
-'versionrequired'     => 'Yu nid MediaWiki Vazhon $1',
+'versionrequired' => 'Yu nid MediaWiki Vazhon $1',
 'versionrequiredtext' => 'Yu nid MediaWiki Vazhon $1 foh yuz dis pej-ya.
 Luk [[Special:Version|version page]].',
 
-'ok'                      => 'OK',
+'ok' => 'OK',
 'pagetitle-view-mainpage' => ' 
 {{SAITNEM}}',
-'retrievedfrom'           => 'Dem ritriv am na"$1"',
-'youhavenewmessages'      => 'Yu get $1 ($2).',
-'editsection'             => 'edit',
-'editsection-brackets'    => '[$1]',
-'editold'                 => 'chenj',
-'viewsourceold'           => 'Luk di sos',
-'editlink'                => 'edit',
-'viewsourcelink'          => 'luk di sos',
-'editsectionhint'         => 'edit sekshon: $1',
-'toc'                     => 'Kontent-dem',
-'showtoc'                 => 'sho',
-'hidetoc'                 => 'haid',
-'thisisdeleted'           => 'Luk wetin i bi naw o tohn am bak tu wetin i bin bi bifo $1?',
-'viewdeleted'             => 'Luk am $1?',
-'restorelink'             => '{{PLURAL:$1|wan chenj we dehm dohn ires|$1 chenj-dehm we dehm dohn ires}}',
-'feedlinks'               => 'Feed:',
-'site-rss-feed'           => '$1 RSS Fid',
-'site-atom-feed'          => '$1 Atom Fid',
-'red-link-title'          => '$1 (pej no de)',
+'retrievedfrom' => 'Dem ritriv am na"$1"',
+'youhavenewmessages' => 'Yu get $1 ($2).',
+'editsection' => 'edit',
+'editsection-brackets' => '[$1]',
+'editold' => 'chenj',
+'viewsourceold' => 'Luk di sos',
+'editlink' => 'edit',
+'viewsourcelink' => 'luk di sos',
+'editsectionhint' => 'edit sekshon: $1',
+'toc' => 'Kontent-dem',
+'showtoc' => 'sho',
+'hidetoc' => 'haid',
+'thisisdeleted' => 'Luk wetin i bi naw o tohn am bak tu wetin i bin bi bifo $1?',
+'viewdeleted' => 'Luk am $1?',
+'restorelink' => '{{PLURAL:$1|wan chenj we dehm dohn ires|$1 chenj-dehm we dehm dohn ires}}',
+'feedlinks' => 'Feed:',
+'site-rss-feed' => '$1 RSS Fid',
+'site-atom-feed' => '$1 Atom Fid',
+'red-link-title' => '$1 (pej no de)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Pej',
-'nstab-user'      => 'Yuza-im Pej',
-'nstab-media'     => 'Midya Pej',
-'nstab-special'   => 'Speshal Pej',
-'nstab-project'   => 'Projekt Pej',
-'nstab-image'     => 'Fail',
+'nstab-main' => 'Pej',
+'nstab-user' => 'Yuza-im Pej',
+'nstab-media' => 'Midya Pej',
+'nstab-special' => 'Speshal Pej',
+'nstab-project' => 'Projekt Pej',
+'nstab-image' => 'Fail',
 'nstab-mediawiki' => 'Mesej',
-'nstab-template'  => 'Templet',
-'nstab-help'      => 'Advais pej',
-'nstab-category'  => 'Katigori',
+'nstab-template' => 'Templet',
+'nstab-help' => 'Advais pej',
+'nstab-category' => 'Katigori',
 
 # Main script and global functions
-'nosuchaction'      => 'Da kain akshon no de',
-'nosuchactiontext'  => 'Di wiki no de ondastan di akshon we di URL tel am fo du',
+'nosuchaction' => 'Da kain akshon no de',
+'nosuchactiontext' => 'Di wiki no de ondastan di akshon we di URL tel am fo du',
 'nosuchspecialpage' => 'Da kain spehshal pej noh de',
 
 # General errors
 'viewsource' => 'Luk di sos',
 
 # Login and logout pages
-'yourname'                => 'Yuzanem:',
-'login'                   => 'Login',
+'yourname' => 'Yuzanem:',
+'login' => 'Login',
 'nav-login-createaccount' => 'Login / Mek yu-yon akaunt',
-'loginprompt'             => 'Yu get fo de yuz kuki-dem foh ebul fo login {{SITENAME}}.',
-'userlogin'               => 'Login / Mek yu-yon akaunt',
-'logout'                  => 'Komot na di sait',
-'userlogout'              => 'Komot na di sait',
-'notloggedin'             => 'Yu no login yet',
-'nologin'                 => "Yu don mek yu akaunt? '''$1'''.",
-'nologinlink'             => 'Mek yu-yon akaunt',
-'createaccount'           => 'Mek yu-yon akaunt',
-'gotaccount'              => "Yu dohn mek yu yuza login? '''$1'''.",
-'gotaccountlink'          => 'Login',
-'createaccountmail'       => 'wit imel',
-'badretype'               => 'Di paswohd-dehm we yu taip mach.',
-'userexists'              => 'Oda pohsin de yuz da yuzanem de.
+'loginprompt' => 'Yu get fo de yuz kuki-dem foh ebul fo login {{SITENAME}}.',
+'userlogin' => 'Login / Mek yu-yon akaunt',
+'logout' => 'Komot na di sait',
+'userlogout' => 'Komot na di sait',
+'notloggedin' => 'Yu no login yet',
+'nologin' => "Yu don mek yu akaunt? '''$1'''.",
+'nologinlink' => 'Mek yu-yon akaunt',
+'createaccount' => 'Mek yu-yon akaunt',
+'gotaccount' => "Yu dohn mek yu yuza login? '''$1'''.",
+'gotaccountlink' => 'Login',
+'createaccountmail' => 'wit imel',
+'badretype' => 'Di paswohd-dehm we yu taip mach.',
+'userexists' => 'Oda pohsin de yuz da yuzanem de.
 Yu go geht fo pik difren wan.',
 
 # Edit pages
-'summary'                          => 'Somari:',
-'minoredit'                        => 'Dis na lili edit',
-'watchthis'                        => 'Wach dis pej-ya',
-'savearticle'                      => 'Sev dis pej-ya',
-'preview'                          => 'Privyu',
-'showpreview'                      => 'Luk di privyu',
-'showlivepreview'                  => 'Luk di laiv privyu',
-'showdiff'                         => 'Sho wetin don chenj',
-'anoneditwarning'                  => "'''Tek tem:''' Yu noh login yet.
+'summary' => 'Somari:',
+'minoredit' => 'Dis na lili edit',
+'watchthis' => 'Wach dis pej-ya',
+'savearticle' => 'Sev dis pej-ya',
+'preview' => 'Privyu',
+'showpreview' => 'Luk di privyu',
+'showlivepreview' => 'Luk di laiv privyu',
+'showdiff' => 'Sho wetin don chenj',
+'anoneditwarning' => "'''Tek tem:''' Yu noh login yet.
 So dem go sev yu IP address na di pej-im editin histri",
-'missingsummary'                   => "'''Mehmba se:''' yu noh mek editin somari.
+'missingsummary' => "'''Mehmba se:''' yu noh mek editin somari.
 If yu pres Sev bak, dem go sev yu edit nomo.",
-'missingcommenttext'               => 'Rait yu koment onda ya',
+'missingcommenttext' => 'Rait yu koment onda ya',
 'permissionserrorstext-withaction' => 'Yu no get pamishon fo $2, bikoz {{PLURAL:$1|rizin|rizin-dem}}:',
-'recreate-moveddeleted-warn'       => "'''Tek tem!!: Yu de mek bak wan pej we dehm bin dohn ires.'''
+'recreate-moveddeleted-warn' => "'''Tek tem!!: Yu de mek bak wan pej we dehm bin dohn ires.'''
 
 Yu sabi if yu foh wok pan dis pej-ya.
 Di log we dem kip foh dis pej-in dilishon de ya:",
-'moveddeleted-notice'              => 'Dehm dohn ires dis pej-ya.
+'moveddeleted-notice' => 'Dehm dohn ires dis pej-ya.
 Di log we dehm kip foh dis pej-in dilishohn de ya:',
-'edit-hook-aborted'                => 'Wan Hook don blok yu Edit.
+'edit-hook-aborted' => 'Wan Hook don blok yu Edit.
 I no eksplen wetin-mek.',
-'edit-gone-missing'                => 'Wi noh ebul updet dis pej-ya.
+'edit-gone-missing' => 'Wi noh ebul updet dis pej-ya.
 Somtem dem don dilit am.',
-'edit-conflict'                    => 'Edit konflikt',
-'edit-no-change'                   => 'Wi no luk wetin yu chenj, bicoh yu no chenj wetin rait de.',
+'edit-conflict' => 'Edit konflikt',
+'edit-no-change' => 'Wi no luk wetin yu chenj, bicoh yu no chenj wetin rait de.',
 
 # History pages
-'last'                   => 'prev',
-'page_first'             => 'fohs',
-'page_last'              => 'las',
+'last' => 'prev',
+'page_first' => 'fohs',
+'page_last' => 'las',
 'history-fieldset-title' => 'Brawz histri',
 
 # Revision deletion
@@ -263,72 +263,72 @@ Somtem dem don dilit am.',
 'revertmerge' => 'Sepret',
 
 # Diffs
-'editundo'   => 'rivas wetin yu jos do',
+'editundo' => 'rivas wetin yu jos do',
 'diff-multi' => '({{PLURAL:$1|Wan intamidyet vazhon|$1 intamidyet vazhon-dem}} no de sho)',
 
 # Search results
-'searchresults'                  => 'Sach rizolt-dem',
-'prevn'                          => 'privios wan {{PLURAL:$1|$1}}',
-'nextn'                          => 'neks wan {{PLURAL:$1|$1}}',
-'searchhelp-url'                 => 'Help:Kohntehnt-dehm',
-'searchprofile-articles'         => 'Kontent pej-dem',
-'searchprofile-everything'       => 'Oltin',
-'searchprofile-advanced'         => 'Advans',
+'searchresults' => 'Sach rizolt-dem',
+'prevn' => 'privios wan {{PLURAL:$1|$1}}',
+'nextn' => 'neks wan {{PLURAL:$1|$1}}',
+'searchhelp-url' => 'Help:Kohntehnt-dehm',
+'searchprofile-articles' => 'Kontent pej-dem',
+'searchprofile-everything' => 'Oltin',
+'searchprofile-advanced' => 'Advans',
 'searchprofile-articles-tooltip' => 'Luk na $1',
-'searchprofile-images-tooltip'   => 'Sach fo fail-dem',
-'search-result-size'             => '$1 ({{PLURAL:$2|1 wod|$2 wod-dem}})',
-'search-suggest'                 => 'Yu bin min?: $1',
-'searchall'                      => 'ol',
-'powersearch'                    => 'Advans sach',
-'powersearch-legend'             => 'Advans sach',
-'powersearch-ns'                 => 'Sach na nemspes-dem:',
-'powersearch-redir'              => 'List de sen yu kam ya',
-'powersearch-field'              => 'Luk fo',
-'search-external'                => 'Ekstanal sach',
-'searchdisabled'                 => '{{websait-im nem}} Di sach no de wok.
+'searchprofile-images-tooltip' => 'Sach fo fail-dem',
+'search-result-size' => '$1 ({{PLURAL:$2|1 wod|$2 wod-dem}})',
+'search-suggest' => 'Yu bin min?: $1',
+'searchall' => 'ol',
+'powersearch' => 'Advans sach',
+'powersearch-legend' => 'Advans sach',
+'powersearch-ns' => 'Sach na nemspes-dem:',
+'powersearch-redir' => 'List de sen yu kam ya',
+'powersearch-field' => 'Luk fo',
+'search-external' => 'Ekstanal sach',
+'searchdisabled' => '{{websait-im nem}} Di sach no de wok.
 Na mintem yuz Google fo sach.
 Memba se somtem dem indeks-dem noh op tu det {{SITENAME}}.',
 
 # Preferences page
-'prefsnologin'      => 'Yu no login yet',
+'prefsnologin' => 'Yu no login yet',
 'searchresultshead' => 'Sach',
-'youremail'         => 'Imel:',
-'username'          => 'Yuzanem:',
+'youremail' => 'Imel:',
+'username' => 'Yuzanem:',
 
 # Recent changes
-'recentchanges'   => 'Risent chenj-dem',
-'rcshowhideliu'   => '$1 yuza-dem we don login',
+'recentchanges' => 'Risent chenj-dem',
+'rcshowhideliu' => '$1 yuza-dem we don login',
 'rcshowhideanons' => '$1 anonimos yuza-dem',
-'diff'            => 'dif',
-'hist'            => 'hist',
-'hide'            => 'Haid',
-'show'            => 'Sho',
+'diff' => 'dif',
+'hist' => 'hist',
+'hide' => 'Haid',
+'show' => 'Sho',
 
 # Recent changes linked
 'recentchangeslinked-page' => 'pej nem',
 
 # Upload
-'upload'          => 'Oplod fail',
-'uploadbtn'       => 'Oplod fail',
-'uploadnologin'   => 'Yu no login yet',
-'filedesc'        => 'Somari:',
+'upload' => 'Oplod fail',
+'uploadbtn' => 'Oplod fail',
+'uploadnologin' => 'Yu no login yet',
+'filedesc' => 'Somari:',
 'watchthisupload' => 'Wach dis fail-ya',
 
 # File description page
-'file-anchor-link'   => 'Fail',
-'filehist'           => 'fail histri',
+'file-anchor-link' => 'Fail',
+'filehist' => 'fail histri',
 'filehist-deleteone' => 'dilit',
-'filehist-current'   => 'Korent',
-'filehist-datetime'  => 'Det/Tem',
-'filehist-thumb'     => 'Tomnel',
-'filehist-user'      => 'Yuza',
-'filehist-comment'   => 'Koment',
-'imagelinks'         => 'Fail yusej',
-'linkstoimage'       => 'Di {{PLURAL:$1|pej de link|pej-dem  de link}} go dis fail:',
-'linkstoimage-more'  => 'Pas wan $1 {{PLURAL:$1|pej de link|pej-dem de link}} go dis fail-ya.
+'filehist-current' => 'Korent',
+'filehist-datetime' => 'Det/Tem',
+'filehist-thumb' => 'Tomnel',
+'filehist-user' => 'Yuza',
+'filehist-comment' => 'Koment',
+'imagelinks' => 'Fail yusej',
+'linkstoimage' => 'Di {{PLURAL:$1|pej de link|pej-dem  de link}} go dis fail:',
+'linkstoimage-more' => 'Pas wan $1 {{PLURAL:$1|pej de link|pej-dem de link}} go dis fail-ya.
 Dis list get di{{PLURAL:$1|fohs pej link|fohs $1 pej link-dem}} fohdis fail nomo.
 Di [[Special:WhatLinksHere/$2|ful list]] de yah.',
-'nolinkstoimage'     => 'No pej no de we de link kam dis fail-ya.',
+'nolinkstoimage' => 'No pej no de we de link kam dis fail-ya.',
 
 # File deletion
 'filedelete-submit' => 'Dilit',
@@ -336,14 +336,14 @@ Di [[Special:WhatLinksHere/$2|ful list]] de yah.',
 # Random page
 'randompage' => 'Random pej',
 
-'brokenredirects-edit'   => 'edit',
+'brokenredirects-edit' => 'edit',
 'brokenredirects-delete' => 'dilit',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 {{PLURAL:$1|bait|bait-dem}}',
-'nmembers'     => '$1 {{PLURAL:$1|memba|memba-dem}}',
-'newpages'     => 'Nyu pej-dem',
-'move'         => 'Muf',
+'nbytes' => '$1 {{PLURAL:$1|bait|bait-dem}}',
+'nmembers' => '$1 {{PLURAL:$1|memba|memba-dem}}',
+'newpages' => 'Nyu pej-dem',
+'move' => 'Muf',
 'movethispage' => 'Muf dis pej-ya',
 
 # Book sources
@@ -354,7 +354,7 @@ Di [[Special:WhatLinksHere/$2|ful list]] de yah.',
 
 # Special:AllPages
 'alphaindexline' => '$1 go $2',
-'allarticles'    => 'Ol pej-dem',
+'allarticles' => 'Ol pej-dem',
 'allpagessubmit' => 'Go',
 
 # Special:Categories
@@ -364,124 +364,124 @@ Di [[Special:WhatLinksHere/$2|ful list]] de yah.',
 'linksearch-ok' => 'Sach',
 
 # Watchlist
-'watchlist'         => 'Mi wachlist',
-'mywatchlist'       => 'Mi wachlist',
-'nowatchlist'       => 'Yu no get natin na yu wachlist.',
+'watchlist' => 'Mi wachlist',
+'mywatchlist' => 'Mi wachlist',
+'nowatchlist' => 'Yu no get natin na yu wachlist.',
 'watchlistanontext' => '$1 Foh luk o chenj wetin de na yu wachlist',
-'watchnologin'      => 'Yu no login yet',
-'watch'             => 'Wach',
-'watchthispage'     => 'Wach dis pej-ya',
-'unwatch'           => 'Lef fo wach dis pej-ya',
-'unwatchthispage'   => 'Lef fo wach',
-'notanarticle'      => 'Dis pej-ya noto kontent pej',
-'notvisiblerev'     => 'Dem don dilit di last rivizhon we difren yuza rait',
+'watchnologin' => 'Yu no login yet',
+'watch' => 'Wach',
+'watchthispage' => 'Wach dis pej-ya',
+'unwatch' => 'Lef fo wach dis pej-ya',
+'unwatchthispage' => 'Lef fo wach',
+'notanarticle' => 'Dis pej-ya noto kontent pej',
+'notvisiblerev' => 'Dem don dilit di last rivizhon we difren yuza rait',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Ah de wach...',
+'watching' => 'Ah de wach...',
 'unwatching' => 'Ah de lef fo wach...',
 
 # Delete
-'deletepage'    => 'Dilit dis pej-ya',
-'confirm'       => 'Konfam',
-'excontent'     => "Nah dis i bin geht/ de tohk boht: '$1'",
+'deletepage' => 'Dilit dis pej-ya',
+'confirm' => 'Konfam',
+'excontent' => "Nah dis i bin geht/ de tohk boht: '$1'",
 'delete-legend' => 'Dilit',
-'dellogpage'    => 'Dilishon Log',
+'dellogpage' => 'Dilishon Log',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Edit',
+'restriction-edit' => 'Edit',
 'restriction-create' => 'Mek sohmtin',
 
 # Undelete
-'undeleteviewlink'       => 'luk',
+'undeleteviewlink' => 'luk',
 'undelete-search-submit' => 'Sach',
 
-'sp-contributions-logs'   => 'Log-dem',
-'sp-contributions-talk'   => 'tok',
+'sp-contributions-logs' => 'Log-dem',
+'sp-contributions-talk' => 'tok',
 'sp-contributions-submit' => 'Sach',
 
 # What links here
-'whatlinkshere'      => 'Wetin de link kam ya',
+'whatlinkshere' => 'Wetin de link kam ya',
 'whatlinkshere-page' => 'Pej',
-'isimage'            => 'Fail link',
+'isimage' => 'Fail link',
 
 # Block/unblock
 'ipblocklist-submit' => 'Luk foh am',
-'blocklink'          => 'blok',
-'unblocklink'        => 'lef fo blok',
-'contribslink'       => 'kontribyushon-dem',
-'blocklogpage'       => 'Blok log',
+'blocklink' => 'blok',
+'unblocklink' => 'lef fo blok',
+'contribslink' => 'kontribyushon-dem',
+'blocklogpage' => 'Blok log',
 
 # Move page
 'movenologin' => 'Yu no login yet',
-'move-watch'  => 'Wach dis pej-ya',
+'move-watch' => 'Wach dis pej-ya',
 'movelogpage' => 'Muf log',
 
 # Namespace 8 related
 'allmessagesname' => 'Nem',
 
 # Thumbnails
-'thumbnail-more'  => 'Big-am',
-'filemissing'     => 'Di fail noh de',
+'thumbnail-more' => 'Big-am',
+'filemissing' => 'Di fail noh de',
 'thumbnail_error' => 'Problem foh mek dis tombnel: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Yu yuza pej',
-'tooltip-pt-mytalk'               => 'Yu tok pej',
-'tooltip-pt-preferences'          => 'Yu prefrens-dem',
-'tooltip-pt-mycontris'            => 'List ov yu kontribyushon-dem',
-'tooltip-pt-login'                => 'I go bete if yu login, bot noto obligeshon',
-'tooltip-pt-anonlogin'            => 'I go bete if yu login, bot noto obligeshon',
-'tooltip-pt-logout'               => 'Log komot',
-'tooltip-ca-talk'                 => 'Diskoshon bot kontent pej',
-'tooltip-ca-edit'                 => 'Yu ebul fo edit dis pej-ya
+'tooltip-pt-userpage' => 'Yu yuza pej',
+'tooltip-pt-mytalk' => 'Yu tok pej',
+'tooltip-pt-preferences' => 'Yu prefrens-dem',
+'tooltip-pt-mycontris' => 'List ov yu kontribyushon-dem',
+'tooltip-pt-login' => 'I go bete if yu login, bot noto obligeshon',
+'tooltip-pt-anonlogin' => 'I go bete if yu login, bot noto obligeshon',
+'tooltip-pt-logout' => 'Log komot',
+'tooltip-ca-talk' => 'Diskoshon bot kontent pej',
+'tooltip-ca-edit' => 'Yu ebul fo edit dis pej-ya
 Bot yuz di privyu botin bifo yu sev',
-'tooltip-ca-addsection'           => 'Bigin nyu sekshon.',
-'tooltip-ca-viewsource'           => 'Dem don protekt dis pej-ya.
+'tooltip-ca-addsection' => 'Bigin nyu sekshon.',
+'tooltip-ca-viewsource' => 'Dem don protekt dis pej-ya.
 Yu go ebul luk im sos.',
-'tooltip-ca-history'              => 'Dis pej-im ol vazhon-dèm.',
-'tooltip-ca-protect'              => 'Protekt dis pej-ya',
-'tooltip-ca-delete'               => 'Ires dis pej-ya',
-'tooltip-ca-undelete'             => 'Bring bak di chenj-dehm we dehm bin mek na dis pej-ya bifo dehm ires am.',
-'tooltip-ca-move'                 => 'Muf dis pej-ya',
-'tooltip-ca-watch'                => 'Put dis pej na yu wachlist',
-'tooltip-ca-unwatch'              => 'Pul dis pej komoh nah yu wachlist',
-'tooltip-search'                  => 'Luk nah dis websait {{SITENAME}}',
-'tooltip-search-fulltext'         => 'Sach na di pej fo dis teks',
-'tooltip-p-logo'                  => 'Visit di men pej',
-'tooltip-n-mainpage'              => 'Visit Men Pej',
-'tooltip-n-portal'                => 'Infomeshon bot di projek, wetin yu ebul du, usai fo fen oltin',
-'tooltip-n-currentevents'         => 'Fen infomashon bot wetin de hapin naw-naw',
-'tooltip-n-recentchanges'         => 'List ov wetin dem don chenj trade na di wiki.',
-'tooltip-n-randompage'            => 'Lod eni random pej',
-'tooltip-n-help'                  => 'Di ples fo lan.',
-'tooltip-t-whatlinkshere'         => 'List ov ol di wiki pej-dèm we de link kam ya',
-'tooltip-t-recentchangeslinked'   => 'Resent chenj-dèm na di pej-dem we de link komot na dis pej-ya',
-'tooltip-feed-rss'                => 'RSS feed foh dis pej-ya',
-'tooltip-feed-atom'               => 'Atom fid foh dis pej-ya',
-'tooltip-t-contributions'         => 'dis yuza-im kontribyushon list',
-'tooltip-t-emailuser'             => 'Sen imel go dis yuza',
-'tooltip-t-upload'                => 'Oplod fail-dem',
-'tooltip-t-specialpages'          => 'List we get ol di speshal pej-dem',
-'tooltip-t-print'                 => 'Vazhon fo print',
-'tooltip-t-permalink'             => 'Pamanent link fo go dis vazhon',
-'tooltip-ca-nstab-main'           => 'Luk kontent pej',
-'tooltip-ca-nstab-project'        => 'Luk di projekt pej',
-'tooltip-ca-nstab-image'          => 'Luk di fail pej',
-'tooltip-save'                    => 'Sev wetin yu don chenj',
-'tooltip-preview'                 => 'Luk wetin you dohn chenj, Luk am bifo yu sev!',
-'tooltip-diff'                    => 'Luk us chenj-dem yu mek nah di teks.',
+'tooltip-ca-history' => 'Dis pej-im ol vazhon-dèm.',
+'tooltip-ca-protect' => 'Protekt dis pej-ya',
+'tooltip-ca-delete' => 'Ires dis pej-ya',
+'tooltip-ca-undelete' => 'Bring bak di chenj-dehm we dehm bin mek na dis pej-ya bifo dehm ires am.',
+'tooltip-ca-move' => 'Muf dis pej-ya',
+'tooltip-ca-watch' => 'Put dis pej na yu wachlist',
+'tooltip-ca-unwatch' => 'Pul dis pej komoh nah yu wachlist',
+'tooltip-search' => 'Luk nah dis websait {{SITENAME}}',
+'tooltip-search-fulltext' => 'Sach na di pej fo dis teks',
+'tooltip-p-logo' => 'Visit di men pej',
+'tooltip-n-mainpage' => 'Visit Men Pej',
+'tooltip-n-portal' => 'Infomeshon bot di projek, wetin yu ebul du, usai fo fen oltin',
+'tooltip-n-currentevents' => 'Fen infomashon bot wetin de hapin naw-naw',
+'tooltip-n-recentchanges' => 'List ov wetin dem don chenj trade na di wiki.',
+'tooltip-n-randompage' => 'Lod eni random pej',
+'tooltip-n-help' => 'Di ples fo lan.',
+'tooltip-t-whatlinkshere' => 'List ov ol di wiki pej-dèm we de link kam ya',
+'tooltip-t-recentchangeslinked' => 'Resent chenj-dèm na di pej-dem we de link komot na dis pej-ya',
+'tooltip-feed-rss' => 'RSS feed foh dis pej-ya',
+'tooltip-feed-atom' => 'Atom fid foh dis pej-ya',
+'tooltip-t-contributions' => 'dis yuza-im kontribyushon list',
+'tooltip-t-emailuser' => 'Sen imel go dis yuza',
+'tooltip-t-upload' => 'Oplod fail-dem',
+'tooltip-t-specialpages' => 'List we get ol di speshal pej-dem',
+'tooltip-t-print' => 'Vazhon fo print',
+'tooltip-t-permalink' => 'Pamanent link fo go dis vazhon',
+'tooltip-ca-nstab-main' => 'Luk kontent pej',
+'tooltip-ca-nstab-project' => 'Luk di projekt pej',
+'tooltip-ca-nstab-image' => 'Luk di fail pej',
+'tooltip-save' => 'Sev wetin yu don chenj',
+'tooltip-preview' => 'Luk wetin you dohn chenj, Luk am bifo yu sev!',
+'tooltip-diff' => 'Luk us chenj-dem yu mek nah di teks.',
 'tooltip-compareselectedversions' => 'Luk wetin difren pan di tu vazhon-dem we yu don silekt',
-'tooltip-watch'                   => 'Put dis pej na yu wachlist',
+'tooltip-watch' => 'Put dis pej na yu wachlist',
 
 # Special:NewFiles
 'ilsubmit' => 'Luk foh am',
 
 # 'all' in various places, this might be different for inflected languages
 'namespacesall' => 'ol',
-'monthsall'     => 'ol',
+'monthsall' => 'ol',
 
 # E-mail address confirmation
-'confirmemail'         => 'Konfam yu e-mail adrehs',
+'confirmemail' => 'Konfam yu e-mail adrehs',
 'confirmemail_noemail' => 'Di email adrehs we yu pu na [[Special:Preferences|user preferences]] noh de.',
 
 # Multipage image navigation
index ec7009a..19eea20 100644 (file)
 
 $messages = array(
 # User preference toggles
-'tog-underline'            => "Koritan ang dalum kang manga ''link'':",
-'tog-justify'              => 'Tururupungun ang kilid kang manga paragraph',
-'tog-hideminor'            => "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
-'tog-extendwatchlist'      => "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
-'tog-numberheadings'       => "Automatiko nga togroan kang nomero ang manga ''heading''",
-'tog-showtoolbar'          => 'Ipakita ang pangbolig sa pag-ilis (JavaScript)',
-'tog-rememberpassword'     => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'tog-watchcreations'       => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
-'tog-watchdefault'         => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
-'tog-watchmoves'           => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
-'tog-watchdeletion'        => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
-'tog-previewonfirst'       => 'Ipakita ang preview sa ona nga ilis',
-'tog-nocache'              => "Ontatun ang ''page caching''",
+'tog-underline' => "Koritan ang dalum kang manga ''link'':",
+'tog-justify' => 'Tururupungun ang kilid kang manga paragraph',
+'tog-hideminor' => "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
+'tog-extendwatchlist' => "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
+'tog-numberheadings' => "Automatiko nga togroan kang nomero ang manga ''heading''",
+'tog-showtoolbar' => 'Ipakita ang pangbolig sa pag-ilis (JavaScript)',
+'tog-rememberpassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'tog-watchcreations' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
+'tog-watchdefault' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
+'tog-watchmoves' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
+'tog-watchdeletion' => "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
+'tog-previewonfirst' => 'Ipakita ang preview sa ona nga ilis',
+'tog-nocache' => "Ontatun ang ''page caching''",
 'tog-enotifwatchlistpages' => 'Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan',
-'tog-enotifminoredits'     => "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
-'tog-shownumberswatching'  => "Ipakita ang karakuun kang manga ''user'' nga galantaw",
-'tog-forceeditsummary'     => "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
-'tog-watchlisthideown'     => "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
-'tog-watchlisthidebots'    => "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
-'tog-watchlisthideminor'   => "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
-'tog-nolangconversion'     => "Ontatun ang ''variants conversion''",
-'tog-ccmeonemails'         => "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
-
-'underline-always'  => 'Pirme gid',
-'underline-never'   => 'Indi gid',
+'tog-enotifminoredits' => "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
+'tog-shownumberswatching' => "Ipakita ang karakuun kang manga ''user'' nga galantaw",
+'tog-forceeditsummary' => "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
+'tog-watchlisthideown' => "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
+'tog-watchlisthidebots' => "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
+'tog-watchlisthideminor' => "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
+'tog-ccmeonemails' => "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
+
+'underline-always' => 'Pirme gid',
+'underline-never' => 'Indi gid',
 'underline-default' => 'Onay nga browser',
 
 # Dates
-'sunday'        => 'Domingo',
-'monday'        => 'Lones',
-'tuesday'       => 'Martes',
-'wednesday'     => 'Miyerkoles',
-'thursday'      => 'Webes',
-'friday'        => 'Biyernes',
-'saturday'      => 'Sabado',
-'sun'           => 'Dom',
-'mon'           => 'Lon',
-'tue'           => 'Mar',
-'wed'           => 'Miy',
-'thu'           => 'Web',
-'fri'           => 'Biy',
-'sat'           => 'Sab',
-'january'       => 'Enero',
-'february'      => 'Pebrero',
-'march'         => 'Marso',
-'april'         => 'Abril',
-'may_long'      => 'Mayo',
-'june'          => 'Honyo',
-'july'          => 'Holyo',
-'august'        => 'Agosto',
-'september'     => 'Setyembre',
-'october'       => 'Oktobre',
-'november'      => 'Nobyembre',
-'december'      => 'Disyembre',
-'january-gen'   => 'Enero',
-'february-gen'  => 'Pebrero',
-'march-gen'     => 'Marso',
-'april-gen'     => 'Abril',
-'may-gen'       => 'Abril',
-'june-gen'      => 'Honyo',
-'july-gen'      => 'Holyo',
-'august-gen'    => 'Agosto',
+'sunday' => 'Domingo',
+'monday' => 'Lones',
+'tuesday' => 'Martes',
+'wednesday' => 'Miyerkoles',
+'thursday' => 'Webes',
+'friday' => 'Biyernes',
+'saturday' => 'Sabado',
+'sun' => 'Dom',
+'mon' => 'Lon',
+'tue' => 'Mar',
+'wed' => 'Miy',
+'thu' => 'Web',
+'fri' => 'Biy',
+'sat' => 'Sab',
+'january' => 'Enero',
+'february' => 'Pebrero',
+'march' => 'Marso',
+'april' => 'Abril',
+'may_long' => 'Mayo',
+'june' => 'Honyo',
+'july' => 'Holyo',
+'august' => 'Agosto',
+'september' => 'Setyembre',
+'october' => 'Oktobre',
+'november' => 'Nobyembre',
+'december' => 'Disyembre',
+'january-gen' => 'Enero',
+'february-gen' => 'Pebrero',
+'march-gen' => 'Marso',
+'april-gen' => 'Abril',
+'may-gen' => 'Abril',
+'june-gen' => 'Honyo',
+'july-gen' => 'Holyo',
+'august-gen' => 'Agosto',
 'september-gen' => 'Setyembre',
-'october-gen'   => 'Oktobre',
-'november-gen'  => 'Nobyembre',
-'december-gen'  => 'Disyembre',
-'jan'           => 'Ene',
-'feb'           => 'Peb',
-'apr'           => 'Abr',
-'may'           => 'May',
-'jun'           => 'Hon',
-'jul'           => 'Hol',
-'aug'           => 'Ago',
-'sep'           => 'Set',
-'oct'           => 'Okt',
-'nov'           => 'Nob',
-'dec'           => 'Dis',
+'october-gen' => 'Oktobre',
+'november-gen' => 'Nobyembre',
+'december-gen' => 'Disyembre',
+'jan' => 'Ene',
+'feb' => 'Peb',
+'apr' => 'Abr',
+'may' => 'May',
+'jun' => 'Hon',
+'jul' => 'Hol',
+'aug' => 'Ago',
+'sep' => 'Set',
+'oct' => 'Okt',
+'nov' => 'Nob',
+'dec' => 'Dis',
 
 # Categories related messages
-'category_header'       => 'Manga artikolo sa "$1"',
-'subcategories'         => "Manga ''subcategory''",
+'category_header' => 'Manga artikolo sa "$1"',
+'subcategories' => "Manga ''subcategory''",
 'category-media-header' => 'Manga midya sa "$1"',
-'category-empty'        => "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
+'category-empty' => "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
 
-'about'         => 'Angut sa Iwan',
-'article'       => 'Pahina kasudlan',
-'newwindow'     => "(gabokas sa bag-o nga ''window'')",
-'cancel'        => 'Kanselar',
+'about' => 'Angut sa Iwan',
+'article' => 'Pahina kasudlan',
+'newwindow' => "(gabokas sa bag-o nga ''window'')",
+'cancel' => 'Kanselar',
 'moredotdotdot' => 'Raku pa...',
-'mypage'        => 'Akun nga pahina',
-'anontalk'      => "Istoryahun ang dya nga ''IP''",
+'mypage' => 'Akun nga pahina',
+'anontalk' => "Istoryahun ang dya nga ''IP''",
 
 # Cologne Blue skin
-'qbfind'         => 'Sagap',
-'qbbrowse'       => 'Bilid',
-'qbedit'         => 'Iislan',
-'qbpageoptions'  => 'Dya nga Pahina',
-'qbpageinfo'     => 'Konteksto',
+'qbfind' => 'Sagap',
+'qbbrowse' => 'Bilid',
+'qbedit' => 'Iislan',
+'qbpageoptions' => 'Dya nga Pahina',
+'qbpageinfo' => 'Konteksto',
 'qbspecialpages' => 'Manga espesyal nga pahina',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
-
-'errorpagetitle'    => 'Sayup',
-'returnto'          => 'Balik sa $1.',
-'help'              => 'Bolig',
-'search'            => 'Sagap',
-'searchbutton'      => 'Sagap',
-'go'                => 'Agto',
-'searcharticle'     => 'Agto',
-'history'           => 'Kasaysayan kang Pahina',
-'history_short'     => 'Kasaysayan',
-'updatedmarker'     => 'ginpabag-o halin kang orihi ko nga pagbisita',
-'printableversion'  => "Bersyon nga sarang ma-''print''",
-'permalink'         => "Permanyente nga ''link''",
-'print'             => 'Printa',
-'edit'              => 'Iislan',
-'editthispage'      => 'Islan ang dya nga pahina',
-'delete'            => 'Para',
-'deletethispage'    => 'Paraun ang dya nga Pahina',
-'protect'           => 'Amlig',
-'protect_change'    => 'islan ang proteksyon',
-'protectthispage'   => 'Amligan ang dya nga pahina',
-'unprotect'         => 'huksun ang proteksyon',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
+
+'errorpagetitle' => 'Sayup',
+'returnto' => 'Balik sa $1.',
+'help' => 'Bolig',
+'search' => 'Sagap',
+'searchbutton' => 'Sagap',
+'go' => 'Agto',
+'searcharticle' => 'Agto',
+'history' => 'Kasaysayan kang Pahina',
+'history_short' => 'Kasaysayan',
+'updatedmarker' => 'ginpabag-o halin kang orihi ko nga pagbisita',
+'printableversion' => "Bersyon nga sarang ma-''print''",
+'permalink' => "Permanyente nga ''link''",
+'print' => 'Printa',
+'edit' => 'Iislan',
+'editthispage' => 'Islan ang dya nga pahina',
+'delete' => 'Para',
+'deletethispage' => 'Paraun ang dya nga Pahina',
+'protect' => 'Amlig',
+'protect_change' => 'islan ang proteksyon',
+'protectthispage' => 'Amligan ang dya nga pahina',
+'unprotect' => 'huksun ang proteksyon',
 'unprotectthispage' => 'Huksun ang proteksyon sa dya nga pahina',
-'newpage'           => 'Bag-o nga pahina',
-'talkpage'          => 'Sogdanunun ang dya nga pahina',
-'talkpagelinktext'  => 'Wakal',
-'specialpage'       => 'Espesyal nga Pahina',
-'postcomment'       => 'Togro Komento',
-'articlepage'       => 'Turukun ang pahina kasudlan',
-'talk'              => 'Sugilanon',
-'views'             => 'Manga paglantaw',
-'toolbox'           => 'Pangbolig',
-'otherlanguages'    => 'Sa iban nga lingwahe',
-'redirectpagesub'   => 'Idaho ang pahina',
-'protectedpage'     => 'Protektado nga pahina',
-'jumpto'            => 'Lompat sa:',
-'jumptosearch'      => 'sagap',
+'newpage' => 'Bag-o nga pahina',
+'talkpage' => 'Sogdanunun ang dya nga pahina',
+'talkpagelinktext' => 'Wakal',
+'specialpage' => 'Espesyal nga Pahina',
+'postcomment' => 'Togro Komento',
+'articlepage' => 'Turukun ang pahina kasudlan',
+'talk' => 'Sugilanon',
+'views' => 'Manga paglantaw',
+'toolbox' => 'Pangbolig',
+'otherlanguages' => 'Sa iban nga lingwahe',
+'redirectpagesub' => 'Idaho ang pahina',
+'protectedpage' => 'Protektado nga pahina',
+'jumpto' => 'Lompat sa:',
+'jumptosearch' => 'sagap',
 
 # 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'            => 'Tunggəd sa {{SITENAME}}',
-'aboutpage'            => 'Project:Tunggəd',
-'disclaimers'          => 'Mga Panginwala',
-'disclaimerpage'       => 'Project:Panginwala nga Pangtanan',
-'edithelp'             => 'Panoytoy sa Pag-ilis',
-'edithelppage'         => 'Help:Pag-ilis',
-'mainpage'             => 'Pono nga Pahina',
+'aboutsite' => 'Tunggəd sa {{SITENAME}}',
+'aboutpage' => 'Project:Tunggəd',
+'disclaimers' => 'Mga Panginwala',
+'disclaimerpage' => 'Project:Panginwala nga Pangtanan',
+'edithelp' => 'Panoytoy sa Pag-ilis',
+'edithelppage' => 'Help:Pag-ilis',
+'mainpage' => 'Pono nga Pahina',
 'mainpage-description' => 'Pono nga Pahina',
-'privacy'              => 'Surundun sa Privacy',
-'privacypage'          => 'Project:Surundun sa Privacy',
+'privacy' => 'Surundun sa Privacy',
+'privacypage' => 'Project:Surundun sa Privacy',
 
-'badaccess'        => 'Sayup sa lisensya',
+'badaccess' => 'Sayup sa lisensya',
 'badaccess-group0' => 'Indi kaw ginpasogtan nga himoon ang lihuk nga ginalaum mo.',
 'badaccess-groups' => 'Ang imo ginpangayo nga lihuk ay para lang sa mga users sa {{PLURAL:$2|nga grupo|sara sa mga grupo}}: $1.',
 
-'versionrequired'     => 'Version $1 kang MediaWiki kinahanglan',
+'versionrequired' => 'Version $1 kang MediaWiki kinahanglan',
 'versionrequiredtext' => 'Version $1 of MediaWiki kinahanglan para magamit ang page nga ja.
 Lantawa sa [[Special:Version|version kang page]].',
 
-'ok'                      => 'OK dun',
-'youhavenewmessages'      => 'May rudyan kaw nga $1 ($2).',
-'newmessageslink'         => 'bag-o nga manga mensahe',
-'newmessagesdifflink'     => 'orihi nga ilis',
+'ok' => 'OK dun',
+'youhavenewmessages' => 'May rudyan kaw nga $1 ($2).',
+'newmessageslink' => 'bag-o nga manga mensahe',
+'newmessagesdifflink' => 'orihi nga ilis',
 'youhavenewmessagesmulti' => 'May rudyan kaw nga manga bag-o nga mensahe sa $1',
-'editsection'             => 'iislan',
-'editold'                 => 'iislan',
-'toc'                     => 'Manga Sulud',
-'showtoc'                 => 'ipakita',
-'hidetoc'                 => 'itago',
+'editsection' => 'iislan',
+'editold' => 'iislan',
+'toc' => 'Manga Sulud',
+'showtoc' => 'ipakita',
+'hidetoc' => 'itago',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Pahina',
-'nstab-media'     => 'Pahina kang Midya',
-'nstab-special'   => 'Espesyal',
-'nstab-project'   => 'Pahina kang Proyekto',
-'nstab-image'     => 'Inayap',
+'nstab-main' => 'Pahina',
+'nstab-media' => 'Pahina kang Midya',
+'nstab-special' => 'Espesyal',
+'nstab-project' => 'Pahina kang Proyekto',
+'nstab-image' => 'Inayap',
 'nstab-mediawiki' => 'Mensahe',
-'nstab-template'  => "''Template''",
-'nstab-help'      => 'Pahina kang Panoytoy',
-'nstab-category'  => 'Kategorya',
+'nstab-template' => "''Template''",
+'nstab-help' => 'Pahina kang Panoytoy',
+'nstab-category' => 'Kategorya',
 
 # General errors
-'error'                => 'Sayup',
-'databaseerror'        => 'Sayup sa database',
-'readonly'             => "Napintalan ang ''database''",
-'internalerror'        => 'Sayup internal',
-'internalerror_info'   => 'Sayup internal: $1',
-'filecopyerror'        => 'Indi makopya ang \'\'file\'\' halin sa "$1" paagto sa "$2".',
-'filerenameerror'      => 'Indi maislan ang ngaran kang \'\'file\'\' halin sa "$1" paagto sa "$2".',
-'filedeleteerror'      => "Indi mapara ang ''file'' nga \"\$1\".",
+'error' => 'Sayup',
+'databaseerror' => 'Sayup sa database',
+'readonly' => "Napintalan ang ''database''",
+'internalerror' => 'Sayup internal',
+'internalerror_info' => 'Sayup internal: $1',
+'filecopyerror' => 'Indi makopya ang \'\'file\'\' halin sa "$1" paagto sa "$2".',
+'filerenameerror' => 'Indi maislan ang ngaran kang \'\'file\'\' halin sa "$1" paagto sa "$2".',
+'filedeleteerror' => "Indi mapara ang ''file'' nga \"\$1\".",
 'directorycreateerror' => "Indi mahimo ang ''directory'' nga \"\$1\".",
-'filenotfound'         => "Indi makita ang ''file'' nga \"\$1\".",
-'fileexistserror'      => "Indi makasolat sa ''file'' nga \"\$1\": may amo kadya run nga ''file''",
-'viewsource'           => 'Turukun ang ginhalinan',
+'filenotfound' => "Indi makita ang ''file'' nga \"\$1\".",
+'fileexistserror' => "Indi makasolat sa ''file'' nga \"\$1\": may amo kadya run nga ''file''",
+'viewsource' => 'Turukun ang ginhalinan',
 
 # Login and logout pages
 'remembermypassword' => "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'nologinlink'        => "Himo ka sangka ''account''",
-'createaccount'      => "Himo ka ''account''",
+'nologinlink' => "Himo ka sangka ''account''",
+'createaccount' => "Himo ka ''account''",
 
 # Edit pages
 'preview' => 'Bilid',
 
 # Preferences page
-'skin-preview'      => 'Bilid',
+'skin-preview' => 'Bilid',
 'searchresultshead' => 'Sagap',
-'youremail'         => 'E-mail:',
-'email'             => 'E-mail',
+'youremail' => 'E-mail:',
+'email' => 'E-mail',
 
 # Recent changes
 'hide' => 'Itago',
@@ -240,7 +239,7 @@ Lantawa sa [[Special:Version|version kang page]].',
 # File deletion
 'filedelete-submit' => 'Para',
 
-'brokenredirects-edit'   => 'Iislan',
+'brokenredirects-edit' => 'Iislan',
 'brokenredirects-delete' => 'para',
 
 'withoutinterwiki-submit' => 'Ipakita',
@@ -269,32 +268,32 @@ Lantawa sa [[Special:Version|version kang page]].',
 # Undelete
 'undelete-search-submit' => 'Sagap',
 
-'sp-contributions-talk'   => 'Wakal',
+'sp-contributions-talk' => 'Wakal',
 'sp-contributions-submit' => 'Sagap',
 
 # What links here
 'whatlinkshere-page' => 'Pahina:',
-'isredirect'         => 'idaho ang pahina',
+'isredirect' => 'idaho ang pahina',
 
 # Block/unblock
 'ipblocklist-submit' => 'Sagap',
 
 # Tooltip help for the actions
-'tooltip-ca-protect'            => 'Amligan ang dya nga pahina',
-'tooltip-ca-delete'             => 'Paraun ang dya nga Pahina',
-'tooltip-p-logo'                => 'Pono nga Pahina',
-'tooltip-n-mainpage'            => 'Agtoni ang Main Page',
-'tooltip-n-portal'              => 'Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay',
-'tooltip-n-currentevents'       => 'Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad',
-'tooltip-n-recentchanges'       => 'Listahan kang mga bag-o lang na-ilis sa wiki.',
-'tooltip-n-randompage'          => 'Magkarga kang random nga page',
-'tooltip-n-help'                => 'Lugar kun diin mo masagap.',
-'tooltip-t-whatlinkshere'       => 'Listahan kang tanan nga mga wiki pages nga naga-link paagto ja',
+'tooltip-ca-protect' => 'Amligan ang dya nga pahina',
+'tooltip-ca-delete' => 'Paraun ang dya nga Pahina',
+'tooltip-p-logo' => 'Pono nga Pahina',
+'tooltip-n-mainpage' => 'Agtoni ang Main Page',
+'tooltip-n-portal' => 'Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay',
+'tooltip-n-currentevents' => 'Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad',
+'tooltip-n-recentchanges' => 'Listahan kang mga bag-o lang na-ilis sa wiki.',
+'tooltip-n-randompage' => 'Magkarga kang random nga page',
+'tooltip-n-help' => 'Lugar kun diin mo masagap.',
+'tooltip-t-whatlinkshere' => 'Listahan kang tanan nga mga wiki pages nga naga-link paagto ja',
 'tooltip-t-recentchangeslinked' => 'Mga bag-o lng ilis nga mga page nga naka-link halin sa page nga ja',
-'tooltip-feed-rss'              => 'RSS feed para sa page nga ja',
-'tooltip-feed-atom'             => 'Atom feed para sa page nga ja',
-'tooltip-t-contributions'       => 'Lantawa ang listahan kang mga ginbulig kang user nga ja',
-'tooltip-t-emailuser'           => 'Padarhi kang e-mail ang user nga ja',
+'tooltip-feed-rss' => 'RSS feed para sa page nga ja',
+'tooltip-feed-atom' => 'Atom feed para sa page nga ja',
+'tooltip-t-contributions' => 'Lantawa ang listahan kang mga ginbulig kang user nga ja',
+'tooltip-t-emailuser' => 'Padarhi kang e-mail ang user nga ja',
 
 # Special:NewFiles
 'ilsubmit' => 'Sagap',
index 4cd9339..3640f33 100644 (file)
@@ -32,15 +32,15 @@ $separatorTransformTable = array(
 
 $messages = array(
 # Dates
-'monday'    => 'ژِنٛدٕروار',
-'february'  => 'فرؤری',
-'april'     => 'اپریٖل',
-'may_long'  => 'مٔی',
-'june'      => 'جوٗن',
-'august'    => 'اَگست',
+'monday' => 'ژِنٛدٕروار',
+'february' => 'فرؤری',
+'april' => 'اپریٖل',
+'may_long' => 'مٔی',
+'june' => 'جوٗن',
+'august' => 'اَگست',
 'september' => 'سیٚپٹَمبَر',
-'november'  => 'نَوَمبَر',
-'december'  => 'ڈیٚسَمبَر',
+'november' => 'نَوَمبَر',
+'december' => 'ڈیٚسَمبَر',
 
 'about' => 'مُتعلِق',
 
@@ -48,22 +48,22 @@ $messages = array(
 'vector-view-edit' => 'تَرتیٖب دِیُن',
 'vector-view-view' => 'پَرُن',
 
-'help'             => 'مدد',
-'search'           => 'ژھارُن',
-'searchbutton'     => 'ژھارُن',
-'history_short'    => 'توٲریٖخ',
+'help' => 'مدد',
+'search' => 'ژھارُن',
+'searchbutton' => 'ژھارُن',
+'history_short' => 'توٲریٖخ',
 'talkpagelinktext' => 'بَحَژ',
-'talk'             => 'بَحَژ',
-'toolbox'          => 'اَوزار',
-'otherlanguages'   => 'باقیَن زَبانَن منٛز',
-'jumptosearch'     => 'ژھارُن',
+'talk' => 'بَحَژ',
+'toolbox' => 'اَوزار',
+'otherlanguages' => 'باقیَن زَبانَن منٛز',
+'jumptosearch' => 'ژھارُن',
 
 # 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}}',
-'mainpage'  => 'گَرٕ',
+'mainpage' => 'گَرٕ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'صَفہٕ',
+'nstab-main' => 'صَفہٕ',
 'nstab-category' => 'زٲژ',
 
 # Edit pages
@@ -75,7 +75,7 @@ $messages = array(
 # Upload
 'filedesc' => 'خُلاسہٕ',
 
-'sp-contributions-talk'   => 'بَحَژ',
+'sp-contributions-talk' => 'بَحَژ',
 'sp-contributions-submit' => 'ژھارُن',
 
 # Namespace 8 related
index 66fe9b1..51f588d 100644 (file)
@@ -197,13 +197,13 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ÖMLEIDE_OP', '#ÖMLEIDE', '#LEIDT_ÖM_OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
-       'nogallery'               => array( '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'img_right'               => array( '1', 'rähß', 'räts', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'lengks', 'lenks', 'links', 'left' ),
-       'language'                => array( '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ),
-       'hiddencat'               => array( '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'redirect'                  => array( '0', '#ÖMLEIDE_OP', '#ÖMLEIDE', '#LEIDT_ÖM_OP', '#ÖMLEIDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
+       'nogallery'                 => array( '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'img_right'                 => array( '1', 'rähß', 'räts', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'lengks', 'lenks', 'links', 'left' ),
+       'language'                  => array( '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ),
+       'hiddencat'                 => array( '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
 );
 
 $imageFiles = array(
@@ -369,7 +369,7 @@ $messages = array(
 'vector-action-protect' => 'Schöze!',
 'vector-action-undelete' => 'Zerökholle!',
 'vector-action-unprotect' => 'Schoz ändere!',
-'vector-simplesearch-preference' => 'Donn de verbäßerte Vörschlääsch beim Söke aanschallde (bloß mem Ußsinn „Vektor“ zesamme ze hann)',
+'vector-simplesearch-preference' => 'Donn et eijfachere Söke aanschallde (bloß mem Ußsinn „Vektor“ zesamme ze hann)',
 'vector-view-create' => 'Neu Schriive!',
 'vector-view-edit' => 'Ändere!',
 'vector-view-history' => 'Versione zeije!',
@@ -476,6 +476,10 @@ $1',
 'youhavenewmessages' => 'Do häs $1 ($2).',
 'newmessageslink' => 'neu Metdeilunge op Dinger Klaafsigg',
 'newmessagesdifflink' => 'Ungerscheid zor vürletzte Version',
+'youhavenewmessagesfromusers' => 'Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)',
+'youhavenewmessagesmanyusers' => 'Do häs $1 vun andere Metmaacher ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|en neuje Nohreesch|neu Nohreeschte|kein neuje Nohreeschte}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|läzde Änderong|läzde Änderonge|kein Änderonge}}',
 'youhavenewmessagesmulti' => 'Do häs neu Nachrichte op $1',
 'editsection' => 'Ändere',
 'editsection-brackets' => '[$1]',
@@ -528,12 +532,12 @@ Et künnt sesch och öm ene Fäähler en dä Sofware fum Wiki handelle.',
 # General errors
 'error' => 'Fähler',
 'databaseerror' => 'Fähler en de Daatebank',
-'dberrortext' => 'Enne Fääler es opjefalle en dä Süntax vun ennem Befääl för de Datebank.
-Dat künnd_enne Fääler em Wikki-Projamm sin.
-De läzde Date_Bank_Befääl eß jewääse:
+'dberrortext' => 'Enne Fähler es opjefalle en dä Süntax vun ennem Befähl för de Daatebangk.
+Dat künnd_enne Fähler em Wikki-Projamm sin.
+De läzde Befähl för de Daatebangk eß jewääse:
 <blockquote><code>$1</code></blockquote>
-uß dä Funkzjohn: „<code>$2</code>“.
-De Datebank mälldt dä Fääler: „<code>$3: $4</code>“.',
+uß dä Fongxjohn: „<code>$2</code>“.
+De Daatebangk mälldt dä Fähler: „<code>$3: $4</code>“.',
 'dberrortextcl' => 'En dä Syntax vun enem Befähl för de Daatebank es
 ene Fähler es opjefalle.
 Dä letzte Befähl för de Daatebank es jewäse:
@@ -631,7 +635,7 @@ Dä Wiki_Köbes dovun hät beim Deeschmaache als Jrond aanjejovve: „$3“',
 # Login and logout pages
 'logouttext' => "'''Jetz bes de usjelogg'''
 
-Do künnts heh em Wiki wigger maache, als ene namelose Metmaacher. Do kanns De ävver och [[Special:UserLogin|widder enlogge]], als däselve oder och ene andere Metmaacher.
+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.
@@ -643,6 +647,7 @@ Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAM
 'remembermypassword' => 'Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})',
 'securelogin-stick-https' => 'Noh em Enlogge övver HTTPS verbonge blieve.',
 'yourdomainname' => 'Ding Domain',
+'password-change-forbidden' => 'Do kanns en heh däm Wiki kein Paßwööter ändere.',
 'externaldberror' => 'Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk jedenfalls donevve.',
 'login' => 'Enlogge',
 'nav-login-createaccount' => 'Enlogge, Aanmälde',
@@ -952,6 +957,10 @@ domet De dann donoh nit mieh met esu en Ömständ ze dun häs, wie de andere nam
 'noarticletext-nopermission' => 'Op dä Sigg es em Momang nix drop.
 Do kanns noh däm Tittel vun heh dä Sigg [[Special:Search/{{PAGENAME}}|em Tex op ander Sigge söhke]],
 udder en dä zopaß <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbööscher nohloore]</span>.',
+'missing-revision' => 'En Version $1 vun dä Sigg „{{PAGENAME}}“ jidd_et nit.
+
+Esu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob en Sigg follesch, di zweschedren fottjeschmeße woode es.
+Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].',
 'userpage-userdoesnotexist' => 'Enne Metmaacher „<nowiki>$1</nowiki>“ hammer nit, beß De secher, dat De die Metmaachersigg ändere oder aanläje wellss?.',
 'userpage-userdoesnotexist-view' => 'Ene Metmaacher mem Naame „$1“ hät sesch noch nih aanjemeldt',
 'blocked-notice-logextract' => 'Dä Metmaacher es jraad jesperrt.
@@ -1102,6 +1111,7 @@ Ene Jrond weße mer nit.',
 'expansion-depth-exceeded-warning' => 'Heh di Sigg hät  the expansion depth övverschredde',
 'parser-unstrip-loop-warning' => 'Ene Befähl em Täx betrick sesch op sesch sellef.',
 'parser-unstrip-recursion-limit' => 'Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.',
+'converter-manual-rule-error' => 'Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprooche.',
 
 # "Undo" feature
 'undo-success' => 'De Änderung könnte mer zeröck nämme. Beloor Der de Ungerscheid un dann donn di Sigg avspeichere, wann De dengks, et es en Oodenung esu.',
@@ -1238,7 +1248,8 @@ $1",
 Do kanns kein Enndrääsch vör de Wiki_Köbeße verschteijsche, der oohne noch en Zoot Verschteijsche dobei ußzewähle.',
 'revdelete-reason-dropdown' => '*Jewöhnlijje Jrönd för et Fottschmiiße
 ** Vershtüß jääje et Uerhävverrääsch.
-** Esu en päsöönlesche Enfomazjuhne sin nit aanjebraach, udder esujaa jääje der Dateschoz.',
+** Esu en päsöönlesche Enfomazjuhne sin nit aanjebraach, udder esujaa jääje der Dateschoz.
+** Künnd en Verleundong sin',
 'revdelete-otherreason' => 'Ene andere ov zohsäzlejje Jrund:',
 'revdelete-reasonotherlist' => 'Ene andere Jrund',
 'revdelete-edit-reasonlist' => 'De Jrönde för et Fottschmieße beärbeide',
@@ -1289,6 +1300,10 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'editundo' => 'De letzte Änderung zeröck nämme',
 'diff-multi' => '(Mer don hee {{PLURAL:$1|eij Version|$1 Versione|keij Version}} dozwesche beim Verjliesche översprenge. Di sin vun jesamp {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} jemaat woode)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ein Version|$1 Versione|kei Version}} dozwesche vun mieh wi {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} wääde nit jezeish)',
+'difference-missing-revision' => '{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.
+
+Esu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob der Ongerscheid zwesche de Versione vun en Sigg follesch, di zweschedren fottjeschmeße woode es.
+Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].',
 
 # Search results
 'searchresults' => 'Wat beim Söke eruskom',
@@ -1307,7 +1322,7 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'nextn-title' => '{{PLURAL:$1|Et näähßte|De nähßte $1|Kütt nix mieh}}',
 'shown-title' => 'Zeisch {{PLURAL:$1|ein|$1|nix}} pro Sigg',
 'viewprevnext' => 'Bläddere: ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-legend' => 'Enstellunge för et Söhke',
+'searchmenu-legend' => 'Enschtällonge för et Söhke',
 'searchmenu-exists' => "*Sigg '''[[$1]]'''",
 'searchmenu-new' => "'''Donn de Sigg „[[:$1|$1]]“ hee em Wiki aanlääje'''",
 'searchhelp-url' => 'Help:Hölp',
@@ -1331,8 +1346,6 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'search-interwiki-caption' => 'Schwesterprojekte',
 'search-interwiki-default' => '$1 hät heh di Träffer jefonge:',
 'search-interwiki-more' => '(mieh)',
-'search-mwsuggest-enabled' => 'met Vürschläsh',
-'search-mwsuggest-disabled' => 'ohne Vürschläsh',
 'search-relatedarticle' => 'Ähnlesch',
 'mwsuggest-disable' => 'Kein automatische Hölp-Liss per Ajax beim Tippe em Feld för et Söke',
 'searcheverything-enable' => 'En alle Appachtemangs söhke',
@@ -1422,7 +1435,7 @@ dat dänne ihr Daate topaktuell sin,
 Wä dä Schlößel weiß, kann ding Oppaßleß lesse. Donn alsu ene seschere un jeheime Wäät doför nämme.
 Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <code>$1</code>',
 'savedprefs' => 'Ding Enstellunge sin jetz jesechert.',
-'timezonelegend' => 'Ziggzon:',
+'timezonelegend' => 'Ziggzohn:',
 'localtime' => 'De Zigg op Dingem Kompjuter:',
 'timezoneuseserverdefault' => 'Nemm däm Server sing Zigg ($1)',
 'timezoneuseoffset' => 'Söns jet, jiff dä Ungerscheid aan',
@@ -1440,7 +1453,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'timezoneregion-indian' => 'De indesche Ozejan',
 'timezoneregion-pacific' => 'De shtelle Ozejan',
 'allowemail' => 'E-Mail vun andere Metmaacher zolooße',
-'prefs-searchoptions' => 'Enstellunge för et Sööke',
+'prefs-searchoptions' => 'Enschtällonge för et Söhke',
 'prefs-namespaces' => 'Appachtemangs',
 'defaultns' => 'Söns don en hee dä Appachtemengs söhke:',
 'default' => 'Standaad',
@@ -1527,11 +1540,11 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'group-suppress' => 'Kontrollettis',
 'group-all' => '(jeede)',
 
-'group-user-member' => '{{GENDER:$1|Metmaacher|Metmaacherin}}',
+'group-user-member' => '{{GENDER:$1|Metmaacher|Metmaacherėn}}',
 'group-autoconfirmed-member' => 'automattesch beshtääteshte {{GENDER:$1|Metmaacher|Metmaacherėn}}',
 'group-bot-member' => '{{GENDER:$1|Bot}}',
 'group-sysop-member' => '{{GENDER:$1|Wiki-Köbes}}',
-'group-bureaucrat-member' => '{{GENDER:$1|Bürrokrad|Bürrokraatėn}}',
+'group-bureaucrat-member' => '{{GENDER:$1|Bürrokraad|Bürrokraadefrou}}',
 'group-suppress-member' => '{{GENDER:$1|Kontrolletti}}',
 
 'grouppage-user' => '{{ns:project}}:Metmaacher',
@@ -1566,6 +1579,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'right-writeapi' => 'Darf de <tt>writeAPI</tt> bruche',
 'right-delete' => 'Sigge fottschmieße, die nit besönders vill ahle Versione han',
 'right-bigdelete' => 'Sigge fottschmiiße, och wann se ahle Versione ze baasch han',
+'right-deletelogentry' => 'Beschtemmpte Endrääsch em Logbooch fottschmiiße un zerök holle',
 'right-deleterevision' => 'Einzel Versione fun Sigge fottschmiiße un zeröck holle',
 'right-deletedhistory' => 'Fottjeschmeße Versione vun Sigge opleßte lohße — dat zeich ävver nit der Tex aan',
 'right-deletedtext' => 'Fotjeschmeße Täx un Ungerscheid zwesche de verschtoche Versione aanloore',
@@ -1647,7 +1661,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'action-sendemail' => '<i lang="en">e-mails</i> ze verschecke',
 
 # Recent changes
-'nchanges' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Kein Änderung}}',
+'nchanges' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}',
 'recentchanges' => 'Neuste Änderunge',
 'recentchanges-legend' => 'Enstellunge',
 'recentchanges-summary' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
@@ -1901,8 +1915,9 @@ Als Jrond es aanjejovve: „$2“',
 'lockmanager-fail-acquirelock' => 'Mer kunnte kein Schpärr för „$1“ krijje.',
 'lockmanager-fail-openlock' => 'Mer kunnte di Schpärdatei för „$1“ nit opmaache.',
 'lockmanager-fail-releaselock' => 'Mer kunnte di Schpärr för „$1“ nit ophävve.',
-'lockmanager-fail-db-bucket' => 'Mer kunnet nit met jenooch  <i lang="en">lock databases in bucket$1</i> en Verbendong opnämme.',
+'lockmanager-fail-db-bucket' => 'Mer kunnte nit met jenooch Datebangke för Schpärre pä Sammeloproof „$1“ en Verbendong opnämme.',
 'lockmanager-fail-db-release' => 'Mer kunnte di Schpärre för de Daatebangk „$1“ nit ophävve.',
+'lockmanager-fail-svr-acquire' => 'Mer kunnte kein Schpärre op däm ẞööver „$1“ krijje.',
 'lockmanager-fail-svr-release' => 'Mer kunnte di Schpärre för dä ẞööver „$1“ nit ophävve.',
 
 # ZipDirectoryReader
@@ -2023,6 +2038,7 @@ Velleisch sullts De dä [$2 Täx övver se doh]  aanpasse.',
 'shared-repo-from' => 'uß $1',
 'shared-repo' => 'ene jemeinsame Beshtand',
 'filepage.css' => '/* Heh dat CSS küdd op Sigge övver Dateije, och di vun ander Wikis jehollt woode sin. */',
+'upload-disallowed-here' => 'Onjlöklescherwies kanns De heh dat Beld nit övverschriive.',
 
 # File reversion
 'filerevert' => '„$1“ zerök holle',
@@ -2109,10 +2125,10 @@ All de Sigge em Wiki, och Klaafsigge, Ömleitunge, un esu jet',
 
 'disambiguations' => 'Sigge met Lengks dren op „(Wat ėß dat?)“-Sigge',
 'disambiguationspage' => 'Template:Disambig',
-'disambiguations-text' => 'En de Sigge hee noh sin Links dren, di op en „(Watt ėßß datt?)“-Sigg jonn.
+'disambiguations-text' => 'En dä Sigge onge sin Links dren, di op en „(Watt ėßß datt?)“-Sigg jonn.
 Esu en Links sollte eijentlesch op en Sigg jon, di tirek jemeint es.
 
-Ene Atikel jelld als en „(Watt ėßß datt?)“-Sigg, wann en dä Sigg [[MediaWiki:Disambiguationspage]] ene Link op en drop dren es. Alles wat keij Atikele sin, weed dobei jaa nit eez metjezallt.',
+Ene Atikel weed als en „(Watt ėßß datt?)“-Sigg jezallt, wann dä en Schablohn opröhf, op di ene Lenk en dä Sigg [[MediaWiki:Disambiguationspage]] dren es.',
 
 'doubleredirects' => 'Ömleitunge op Ömleitunge',
 'doubleredirectstext' => 'Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de
@@ -2139,6 +2155,7 @@ Tipp: Merk Der dä Tittel vun dä Sigg dovör.',
 # Miscellaneous special pages
 'nbytes' => '$1 Byte{{PLURAL:$1||s|}}',
 'ncategories' => '{{PLURAL:$1| ein Saachjrupp | $1 Saachjruppe | keij Saachjruppe }}',
+'ninterwikis' => '{{PLURAL:$1|Eine Engerwikilengk|$1 Engerwikilengks|Keine Engerwikilengk}}',
 'nlinks' => '{{PLURAL:$1|eine Link|$1 Links}}',
 'nmembers' => 'met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren',
 'nrevisions' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Keij Änderung}}',
@@ -2172,6 +2189,7 @@ Di sin dann <del>dorschjeschtresche</del>.',
 'mostlinkedtemplates' => 'Schablone met de miehßte Lenks drop',
 'mostcategories' => 'Atikkele met de miehste Saachjruppe',
 'mostimages' => 'Dateie met de miehste Links drop',
+'mostinterwikis' => 'Atikkele met de miehste Engerwikilengks',
 'mostrevisions' => 'Atikkele met de miehste Änderunge',
 'prefixindex' => 'All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk',
 'prefixindex-namespace' => 'All Sigge med enem beschtemmpte Aanfang (Appachtemang $1 )',
@@ -2338,6 +2356,8 @@ Mieh övver de einzel Rääschte fenkt Er op de [[{{MediaWiki:Listgrouprights-he
 Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze
 schecke.',
 'emailuser' => 'E-mail aan dä Metmaacher',
+'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.
@@ -2361,7 +2381,7 @@ Alles klor?',
 'email-legend' => 'Scheck en<i lang="en"> e-mail</i> aan ene andere Metmaacher fum Wiki',
 'emailfrom' => 'Vun:',
 'emailto' => 'Aan:',
-'emailsubject' => 'Ã\9cvverschreff:',
+'emailsubject' => 'Ã\96vverschreff:',
 'emailmessage' => 'Dä Tex fun Dinge Nohreesch:',
 'emailsend' => 'Avschecke',
 'emailccme' => 'Scheck mer en Kopie vun dä E-Mail.',
@@ -2489,6 +2509,8 @@ Do kanns hee noh Hölp luure:
 'rollback' => 'Em Letzte sing Änderunge zeröcknemme',
 'rollback_short' => 'Zeröcknemme',
 'rollbacklink' => 'All dem Letzte sing Änderunge zeröckdriehe',
+'rollbacklinkcount' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|Mieh wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme',
 'rollbackfailed' => 'Dat Zeröcknemme jingk scheiv',
 'cantrollback' => 'De letzte Änderung zeröckzenemme es nit müjjelich. Dä letzte Schriever es dä einzije, dä aan dä Sigg hee jet jedon hät!',
 'alreadyrolled' => 'Mer künne de letzte Änderunge vun dä Sigg „[[:$1]]“ vum Metmaacher „[[User:$2|$2]]“ ([[User talk:$2|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nimieh zeröcknemme, dat hät ene Andere enzwesche ald jedon, udder de Sigg ömjeändert.
@@ -2994,6 +3016,7 @@ All de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassj
 'import-interwiki-templates' => 'All Schablone metnämme',
 'import-interwiki-submit' => 'Huhlade!',
 'import-interwiki-namespace' => 'Dun de Sigge emporteere en dat Appachtemeng:',
+'import-interwiki-rootpage' => 'De Aanfangssigg (kann läddesch bliive):',
 'import-upload-filename' => 'Dä Name fun dä Datei:',
 'import-comment' => 'Jrond:',
 'importtext' => 'Dun de Daate met däm „[[Special:Export|Export]]“ vun doh vun enem Wiki Exporteere un - etwa bei Dir om Rechner - avspeichere, un dann heh wider huhlade.',
@@ -3027,6 +3050,9 @@ 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-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.',
 
 # Import log
 'importlogpage' => 'Logboch met emporteerte Sigge',
@@ -3038,7 +3064,6 @@ Bes esu joot, un versök et noch ens.',
 
 # JavaScriptTest
 'javascripttest' => ' JavaSkrepte ußprobeere.',
-'javascripttest-disabled' => 'Di Funxjon es en heh dämm Wiki ußjeschalldt.',
 'javascripttest-title' => 'De Prööfunge „$1“ loufe.',
 'javascripttest-pagetext-noframework' => 'Heh di Sigg es för JavaSkrepte ußzeprobeere.',
 'javascripttest-pagetext-unknownframework' => 'Dä Prööfrahme „$1“ es onbikannt.',
@@ -3179,11 +3204,34 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 
 # Info page
 'pageinfo-title' => 'Övver di Sigg: „$1“',
+'pageinfo-header-basic' => 'Jrundlääje Aanjabe',
 'pageinfo-header-edits' => 'De Änderonge',
+'pageinfo-header-restrictions' => 'Siggeschoz',
+'pageinfo-header-properties' => 'De Eijeschaffte vun dä Sigg',
+'pageinfo-display-title' => 'De extra Övverschreff vun dä Sigg',
+'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-robot-policy' => 'Eijeschaffte för de Söhkmaschiine',
+'pageinfo-robot-index' => 'kammer opnämme',
+'pageinfo-robot-noindex' => 'kammer nit opnämme',
 'pageinfo-views' => 'De Aanzahl Affroofe',
-'pageinfo-watchers' => 'De Aanzahl Oppaßer',
+'pageinfo-watchers' => 'De Aanzahl Oppaßer för di Sigg',
+'pageinfo-redirects-name' => 'Ömleidong(e) op heh di Sigg',
+'pageinfo-subpages-name' => 'Ongersigg(e) vun heh dä Sigg',
+'pageinfo-subpages-value' => '$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomaale Sigg|$3 nomaale Sigge|kein nomaale Sigg}})',
+'pageinfo-firstuser' => 'Aanjelaat vun',
+'pageinfo-firsttime' => 'Aanjelaat aam',
+'pageinfo-lastuser' => 'Dä läzde Schriiver',
+'pageinfo-lasttime' => 'Et Dattom vun de läzde Änderong',
 'pageinfo-edits' => 'De Aanzahl Änderonge',
-'pageinfo-authors' => 'De Aanzahl ongerscheidlije Schriever',
+'pageinfo-authors' => 'De Aanzahl ongerscheidleje Schriever',
+'pageinfo-recent-edits' => 'De Aanzahl Änderonge en dä läzde Zik, ennerhallf vun $1',
+'pageinfo-recent-authors' => 'De Aanzahl ongerscheidleje Schriever en dä läzde Zik',
+'pageinfo-magic-words' => '{{PLURAL:$1|Ei Zauberwoot|$1 Zauberwööter|Kein Zauberwööter}}',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Ein verstoche Saachjropp|$1 verstoche Saachjroppe|Kein verstoche Saachjropp}}',
+'pageinfo-templates' => '{{PLURAL:$1|Ein Schablohn|$1 Schablohne|Kein Schablohn}} opjerohfe',
+'pageinfo-toolboxlink' => 'Övver heh di Sigg',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -3236,7 +3284,8 @@ $1',
 'file-info-size' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, de Datei hät $3, dä MIME-Typ es: <code>$4</code>',
 'file-info-size-pages' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, Ömfang:&nbsp;$3, <i lang="en">MIME</i> Zoot: $4, met {{PLURAL:$5|ein Sigg|$5 Sigge|kein Sigge}}',
 '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}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle}} huh, dä Dateiömfang es $3',
+'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',
 '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.',
@@ -3246,6 +3295,8 @@ $1',
 'file-info-png-looped' => 'läuf emmer widder vun vürre',
 'file-info-png-repeat' => 'weed {{PLURAL:$1|eijmohl|$1 Mohl|keimohl}} affjespellt',
 'file-info-png-frames' => '{{PLURAL:$1|ei einzel Beld|$1 einzel Belder|kei einzel Beld}}',
+'file-no-thumb-animation' => "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun dä Dattei ohne Bewääjong.'''",
+'file-no-thumb-animation-gif' => "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun GIF-Datteije met enhuhe Oplöösung, wie die heh, ohne Bewääjong.'''",
 
 # Special:NewFiles
 'newimages' => 'Neu Dateie als Jaleri',
@@ -3790,7 +3841,8 @@ Domet deiß De tirek sare, dat De di Adress nit bestätije wells.',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Et Enbinge per Interwiki es avjeschalt]',
-'scarytranscludefailed' => '[De Schablon „$1“ enzebinge hät nit jeflupp]',
+'scarytranscludefailed' => '[De Schablon „$1“ enzebenge hät nit jeflupp]',
+'scarytranscludefailed-httpstatus' => '[De Schablon „$1“ enzebenge hät nit jeflupp. Dä HTTP-Fähler es: $2]',
 'scarytranscludetoolong' => '[Schad, de URL es ze lang]',
 
 # Delete conflict
@@ -3882,9 +3934,9 @@ Don de nomaale Vör-Ansich nemme.',
 'watchlistedit-noitems' => 'Ding Oppassliss es leddisch.',
 'watchlistedit-normal-title' => 'Oppassliss beärbeijde',
 'watchlistedit-normal-legend' => 'Titell uß de Oppassliss eruß lohße',
-'watchlistedit-normal-explain' => 'Dat sin de Endräch in Dinge Oppassliss.
-Om einzel Titelle loss ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.
-De kanns Ding Oppassliss och [[Special:EditWatchlist/raw|en rüh beärbeide]].',
+'watchlistedit-normal-explain' => 'Dat sin de Endräsch en Dinge Oppaßleß.
+Öm einzel Titelle loßß ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.
+Do kanns Ding Oppassleß och [[Special:EditWatchlist/raw|en rüh beärbeide]].',
 'watchlistedit-normal-submit' => 'Jangk de Titele met Hökche eruß schmieße',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Eine Sigge-Tittel es|<strong>$1</strong> Sigge-Tittele sin|Keine Sigge-Tittel es}} us Dinge Opassliss erus jefloore:',
 'watchlistedit-raw-title' => 'Rüh Oppassliss beärbeide',
@@ -3990,7 +4042,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 * <span class="mw-specialpagecached">Em Zwescheshpeisher jehallde {{int:nstab-special}}e. Di künnte ovverhollt sind.</span>',
 'specialpages-group-maintenance' => 'Waadungsleste',
 'specialpages-group-other' => 'Ander {{int:nstab-special}}e',
-'specialpages-group-login' => 'Aamelde',
+'specialpages-group-login' => 'Enlogge udder Aanmälde',
 'specialpages-group-changes' => 'Letzte Änderunge un Logböcher',
 'specialpages-group-media' => 'Dateie — Huhlaade un Opliste',
 'specialpages-group-users' => 'Metmaacher un denne ier Rääschte',
@@ -4027,7 +4079,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 'tags-description-header' => 'Bedüggtening',
 'tags-hitcount-header' => 'Makeete Änderunge',
 'tags-edit' => 'ändere',
-'tags-hitcount' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|kein Änderunge}}',
+'tags-hitcount' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|kein Änderonge}}',
 
 # Special:ComparePages
 'comparepages' => 'Sigge verjliesche',
@@ -4116,6 +4168,10 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'feedback-bugcheck' => 'Joot. Donn op jeede Vall nohlooer, dat dat bes jäz noch nit [$1 bikannt wohr].',
 'feedback-bugnew' => 'Hann esch nohjelooert. Esch jävven ene neue Fähler enn.',
 
+# Search suggestions
+'searchsuggest-search' => 'Söhke',
+'searchsuggest-containing' => 'dren änthallde…',
+
 # API errors
 'api-error-badaccess-groups' => 'Do häs nit et Rääsch, Datteije en heh dat Wiki huhzelaade.',
 'api-error-badtoken' => 'Fähler: et Kännzeijsche (<i lang="en">token</i>) es kappott.',
index 47e7f57..11dee6e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kurdish (Latin script) (‪Kurdî (latînî)‬)
+/** Kurdish (Latin script) (Kurdî (latînî)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
 $namespaceNames = array(
        NS_MEDIA            => 'Medya',
        NS_SPECIAL          => 'Taybet',
-       NS_TALK             => 'Nîqaş',
+       NS_TALK             => 'Gotûbêj',
        NS_USER             => 'Bikarhêner',
-       NS_USER_TALK        => 'Bikarhêner_nîqaş',
-       NS_PROJECT_TALK     => '$1_nîqaş',
+       NS_USER_TALK        => 'Gotûbêja_bikarhêner',
+       NS_PROJECT_TALK     => '$1_gotûbêj',
        NS_FILE             => 'Wêne',
-       NS_FILE_TALK        => 'Wêne_nîqaş',
+       NS_FILE_TALK        => 'Gotûbêja_wêneyî',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_nîqaş',
+       NS_MEDIAWIKI_TALK   => 'Gotûbêja_MediaWiki',
        NS_TEMPLATE         => 'Şablon',
-       NS_TEMPLATE_TALK    => 'Şablon_nîqaş',
+       NS_TEMPLATE_TALK    => 'Gotûbêja_şablonê',
        NS_HELP             => 'Alîkarî',
-       NS_HELP_TALK        => 'Alîkarî_nîqaş',
+       NS_HELP_TALK        => 'Gotûbêja_alîkariyê',
        NS_CATEGORY         => 'Kategorî',
-       NS_CATEGORY_TALK    => 'Kategorî_nîqaş',
+       NS_CATEGORY_TALK    => 'Gotûbêja_kategoriyê',
 );
 
+$namespaceAliases = array(
+       'Nîqaş'            => NS_TALK,
+       'Bikarhêner_nîqaş' => NS_USER_TALK,
+       '$1_nîqaş'         => NS_PROJECT_TALK,
+       'Wêne_nîqaş'       => NS_FILE_TALK,
+       'MediaWiki_nîqaş'  => NS_MEDIAWIKI_TALK,
+       'Şablon_nîqaş'     => NS_TEMPLATE_TALK,
+       'Alîkarî_nîqaş'    => NS_HELP_TALK,
+       'Kategorî_nîqaş'   => NS_CATEGORY_TALK,
+);
 
 $specialPageAliases = array(
        'Categories'                => array( 'Dara_kategoriyan' ),
@@ -49,7 +59,8 @@ $specialPageAliases = array(
        'Randompage'                => array( 'Rûpela_tesadufî' ),
        'Randomredirect'            => array( 'Redirecta_tasadufî' ),
        'Recentchanges'             => array( 'Guherandinên_dawî' ),
-       'Search'                    => array( 'Lê_bigere' ),
+       'Search'                    => array( 'Lêgerîn' ),
+       'Shortpages'                => array( 'Rûpelên_kurt' ),
        'Statistics'                => array( 'Statîstîk' ),
        'Uncategorizedcategories'   => array( 'Kategoriyên_bê_kategorî' ),
        'Uncategorizedpages'        => array( 'Rûpelên_bê_kategorî' ),
@@ -59,33 +70,33 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#BERALÎKIRIN', '#REDIRECT' ),
-       'notoc'                   => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
-       'nogallery'               => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '_NAVEROK_', '__TOC__' ),
-       'noheader'                => array( '0', '_SERÎTUNE_', '__NOHEADER__' ),
-       'currentmonth1'           => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
-       'currentday'              => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
-       'currenttime'             => array( '1', 'DEMA_NIHA', 'CURRENTTIME' ),
-       'numberofpages'           => array( '1', 'HEJMARA_RÛPELAN', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'HEJMARA_GOTARAN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'HEJMARA_DOSYEYAN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'HEJMARA_BIKARHÊNERAN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'HEJMARA_BIKARHÊNERÊN_ÇALAK', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'HEJMARA_GUHERTINAN', 'NUMBEROFEDITS' ),
-       'subpagename'             => array( '1', 'BINRÛPEL', 'SUBPAGENAME' ),
-       'img_right'               => array( '1', 'rast', 'right' ),
-       'img_left'                => array( '1', 'çep', 'left' ),
-       'img_link'                => array( '1', 'girêdan=$', 'link=$1' ),
-       'sitename'                => array( '1', 'NAVÊ_PROJEYÊ', 'SITENAME' ),
-       'grammar'                 => array( '0', 'RÊZIMAN.', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ZAYEND.', 'GENDER:' ),
-       'plural'                  => array( '0', 'PIRRJIMAR:', 'PLURAL:' ),
-       'currentversion'          => array( '1', 'VERSIYONA_NIHA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#ZIMAN', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'HEJMARA_RÊVEBERAN', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'taybet', 'special' ),
+       'redirect'                  => array( '0', '#BERALÎKIRIN', '#REDIRECT' ),
+       'notoc'                     => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '_NAVEROK_', '__TOC__' ),
+       'noheader'                  => array( '0', '_SERÎTUNE_', '__NOHEADER__' ),
+       'currentmonth1'             => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
+       'currentday'                => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
+       'currenttime'               => array( '1', 'DEMA_NIHA', 'CURRENTTIME' ),
+       'numberofpages'             => array( '1', 'HEJMARA_RÛPELAN', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'HEJMARA_GOTARAN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'HEJMARA_DOSYEYAN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'HEJMARA_BIKARHÊNERAN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'HEJMARA_BIKARHÊNERÊN_ÇALAK', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'HEJMARA_GUHERTINAN', 'NUMBEROFEDITS' ),
+       'subpagename'               => array( '1', 'BINRÛPEL', 'SUBPAGENAME' ),
+       'img_right'                 => array( '1', 'rast', 'right' ),
+       'img_left'                  => array( '1', 'çep', 'left' ),
+       'img_link'                  => array( '1', 'girêdan=$', 'link=$1' ),
+       'sitename'                  => array( '1', 'NAVÊ_PROJEYÊ', 'SITENAME' ),
+       'grammar'                   => array( '0', 'RÊZIMAN.', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ZAYEND.', 'GENDER:' ),
+       'plural'                    => array( '0', 'PIRRJIMAR:', 'PLURAL:' ),
+       'currentversion'            => array( '1', 'VERSIYONA_NIHA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#ZIMAN', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'HEJMARA_RÊVEBERAN', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'taybet', 'special' ),
 );
 
 $messages = array(
@@ -440,7 +451,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Tu niha derketî.'''
 
-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 [[Special:UserLogin|dîsa têkevî]].
+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! ==
 
@@ -827,8 +838,6 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'search-interwiki-caption' => 'Projeyên hevçeng',
 'search-interwiki-default' => '$1 encam:',
 'search-interwiki-more' => '(bêhtir)',
-'search-mwsuggest-enabled' => 'bi pêşniyazan',
-'search-mwsuggest-disabled' => 'pêşniyaz tune',
 'search-relatedarticle' => 'Pêwendîdar',
 'searchrelated' => 'pêwendîdar',
 'searchall' => 'hemû',
@@ -1041,7 +1050,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|bikarhênerek|$1 bikarhêner}} vê rûpelê {{PLURAL:$1|dişopîne|dişopînin}}.]',
 'rc_categories_any' => 'Hîç',
 'newsectionsummary' => '/* $1 */ beşeke nû',
-'rc-enhanced-expand' => 'Kitûmatan nîşan bide (JavaScript pêdivî ye)',
+'rc-enhanced-expand' => 'Hûragahiyan nîşan bide (JavaScript pêdivî ye)',
 'rc-enhanced-hide' => 'Kitûmatan veşêre',
 
 # Recent changes linked
@@ -1068,8 +1077,8 @@ anjî ji bo file'ên dengî '''<nowiki>[[</nowiki>{{ns:media}}:File.ogg<nowiki>]
 'upload-permitted' => 'Cureyên pelan yên tên qebûlkirin: $1.',
 'upload-preferred' => 'Cureyên pelan yên tên xwestin: $1.',
 'upload-prohibited' => 'Cureyên pelan yên qedexekirî: $1.',
-'uploadlog' => 'Têketina barkirinê',
-'uploadlogpage' => 'Têketina barkirinê',
+'uploadlog' => 'barkirina belgeyan',
+'uploadlogpage' => 'barkirina belgeyan',
 'filename' => 'Navê pelê',
 'filedesc' => 'Danasîn',
 'fileuploadsummary' => 'Kurte:',
@@ -1543,6 +1552,7 @@ Ger rûpeleke nû di dema jêbirinê de hatibe çêkirin, ew guherto wê were p
 
 Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/delete|Jêbirina têketinê]] binêre.",
 'undelete-header' => 'Ji bo rûpelên dawî hatine jêbirin, li [[Special:Log/delete|Jêbirina têketinê]] binêre.',
+'undelete-search-title' => 'Li rûpelên jêbirî bigere',
 'undelete-search-box' => 'Li rûpelên jêbirî bigere',
 'undelete-search-prefix' => 'Rûpela nîşandanê bi vê destpêdike:',
 'undelete-search-submit' => 'Lêgerîn',
@@ -1566,7 +1576,7 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'sp-contributions-newbies' => 'Tenê beşdariyên bikarhênerên nû nîşan bide',
 'sp-contributions-newbies-sub' => 'Ji bikarhênerên nû re',
 'sp-contributions-newbies-title' => 'Tevkariyên bikarhêner ji bo hesabên nû',
-'sp-contributions-blocklog' => 'Astengkirina têketinê',
+'sp-contributions-blocklog' => 'astengkirina têketinê',
 'sp-contributions-deleted' => 'beşdariyên bikarhêner yên jêbirî',
 'sp-contributions-uploads' => 'yên barkirî',
 'sp-contributions-logs' => 'têketin',
@@ -1589,8 +1599,9 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'whatlinkshere-prev' => '{{PLURAL:$1|yê|$1 yên}} berê',
 'whatlinkshere-next' => '{{PLURAL:$1|yê|$1 yên}} din',
 'whatlinkshere-links' => '← girêdan',
-'whatlinkshere-hideredirs' => '$1 beralîkirin',
-'whatlinkshere-hidelinks' => '$1 lînkan',
+'whatlinkshere-hideredirs' => 'Beralîkirinan $1',
+'whatlinkshere-hidetrans' => 'Naverokan $1',
+'whatlinkshere-hidelinks' => 'Lînkan $1',
 'whatlinkshere-hideimages' => '$1 lînkên wêneyan',
 'whatlinkshere-filters' => 'Parzûn',
 
@@ -2137,4 +2148,8 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'feedback-message' => 'Peyam:',
 'feedback-cancel' => 'Betal bike',
 
+# Search suggestions
+'searchsuggest-search' => 'Lêgerîn',
+'searchsuggest-containing' => 'dihundirîne...',
+
 );
index 9e17935..b54ba16 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Komi (Ð\9aоми)
+/** Komi (коми)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -48,44 +48,44 @@ $namespaceAliases = array(
 
 $messages = array(
 # Dates
-'sunday'        => 'вежалун',
-'monday'        => 'выльлун',
-'tuesday'       => 'воторник',
-'wednesday'     => 'середа',
-'thursday'      => 'четверг',
-'friday'        => 'пекнича',
-'saturday'      => 'субöта',
-'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'    => 'моз',
+'sunday' => 'вежалун',
+'monday' => 'выльлун',
+'tuesday' => 'воторник',
+'wednesday' => 'середа',
+'thursday' => 'четверг',
+'friday' => 'пекнича',
+'saturday' => 'субöта',
+'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'  => 'ӧшым',
+'october-gen' => 'йирым',
+'november-gen' => 'вӧльгым',
+'december-gen' => 'ӧшым',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Категория|Категория}}',
 
 'article' => 'Гижӧд',
-'cancel'  => 'Дугӧдны',
-'mytalk'  => 'Сёрнитан лист бокӧй',
+'cancel' => 'Дугӧдны',
+'mytalk' => 'Сёрнитан лист бокӧй',
 
 # Cologne Blue skin
 'qbfind' => 'Корсьысьӧм',
@@ -93,60 +93,60 @@ $messages = array(
 
 # Vector skin
 'vector-action-move' => 'Ним вежны',
-'vector-view-edit'   => 'Вежны',
-'vector-view-view'   => 'Лыддьыны',
-'namespaces'         => 'Ним пространствояс',
-
-'search'           => 'Корсьысьӧм',
-'searchbutton'     => 'Аддзыны',
-'searcharticle'    => 'Вуджны',
-'history_short'    => 'Важвылӧм',
+'vector-view-edit' => 'Вежны',
+'vector-view-view' => 'Лыддьыны',
+'namespaces' => 'Ним пространствояс',
+
+'search' => 'Корсьысьӧм',
+'searchbutton' => 'Аддзыны',
+'searcharticle' => 'Вуджны',
+'history_short' => 'Важвылӧм',
 'printableversion' => 'Лэдзӧм версия',
-'permalink'        => 'Вежласьтӧм ыстӧд',
-'edit'             => 'Вежны',
-'delete'           => 'Бырӧдны',
-'protect'          => 'Дорйыны',
-'newpage'          => 'Выль лист бок',
+'permalink' => 'Вежласьтӧм ыстӧд',
+'edit' => 'Вежны',
+'delete' => 'Бырӧдны',
+'protect' => 'Дорйыны',
+'newpage' => 'Выль лист бок',
 'talkpagelinktext' => 'сёрнитанін',
-'talk'             => 'Сёрнитанін',
-'toolbox'          => 'Инструментъяс',
-'otherlanguages'   => 'Мӧд кывъясӧн',
-'jumptosearch'     => 'корсьысьӧм',
+'talk' => 'Сёрнитанін',
+'toolbox' => 'Инструментъяс',
+'otherlanguages' => 'Мӧд кывъясӧн',
+'jumptosearch' => 'корсьысьӧм',
 
 # 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}} йылысь',
-'currentevents'        => 'Быд лунся лоӧмтор',
-'mainpage'             => 'Медшӧр лист бок',
+'aboutsite' => '{{SITENAME}} йылысь',
+'currentevents' => 'Быд лунся лоӧмтор',
+'mainpage' => 'Медшӧр лист бок',
 'mainpage-description' => 'Медшӧр лист бок',
-'portal'               => 'Йитчӧм',
-'portal-url'           => 'Project:Йитчӧм портал',
+'portal' => 'Йитчӧм',
+'portal-url' => 'Project:Йитчӧм портал',
 
 'newmessageslink' => 'выль юӧртӧмъяс',
-'editsection'     => 'веськӧдны',
-'editold'         => 'веськӧдны',
-'editlink'        => 'вежны',
+'editsection' => 'веськӧдны',
+'editold' => 'веськӧдны',
+'editlink' => 'вежны',
 'editsectionhint' => '«$1» секция веськӧдны',
-'red-link-title'  => '$1 (гижӧд абу)',
+'red-link-title' => '$1 (гижӧд абу)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Гижӧд',
-'nstab-user'     => 'Пырысь',
-'nstab-project'  => 'Проект йылысь',
+'nstab-main' => 'Гижӧд',
+'nstab-user' => 'Пырысь',
+'nstab-project' => 'Проект йылысь',
 'nstab-category' => 'Категория',
 
 # Login and logout pages
-'yourname'                => 'Пырысьлӧн ним:',
-'login'                   => 'Висьтасьны',
+'yourname' => 'Пырысьлӧн ним:',
+'login' => 'Висьтасьны',
 'nav-login-createaccount' => 'Висьтасьны / гижсьыны',
-'userlogin'               => 'Висьтасьны али гижсьыны',
-'logout'                  => 'Сеанс эштӧдӧм',
-'userlogout'              => 'Сеанс эштӧдӧм',
-'gotaccountlink'          => 'Висьтасьӧй',
-'loginlanguagelabel'      => 'Кыв: $1',
+'userlogin' => 'Висьтасьны али гижсьыны',
+'logout' => 'Сеанс эштӧдӧм',
+'userlogout' => 'Сеанс эштӧдӧм',
+'gotaccountlink' => 'Висьтасьӧй',
+'loginlanguagelabel' => 'Кыв: $1',
 
 # Edit pages
 'savearticle' => 'Лист бокӧс гижны',
-'newarticle'  => '(Выль)',
+'newarticle' => '(Выль)',
 
 # History pages
 'currentrev' => 'Быд лунся версия',
@@ -159,7 +159,7 @@ $messages = array(
 
 # Recent changes
 'recentchanges' => 'Выль веськӧдӧмъяс',
-'hide'          => 'Дзебны',
+'hide' => 'Дзебны',
 'newpageletter' => 'В',
 'boteditletter' => 'б',
 
@@ -167,24 +167,24 @@ $messages = array(
 'recentchangeslinked-page' => 'Гижӧдлӧн ним:',
 
 # Upload
-'upload'    => 'Файл сӧвтны',
+'upload' => 'Файл сӧвтны',
 'uploadbtn' => 'Файл сӧвтны',
 
 # File description page
 'filehist-datetime' => 'Кадпас/кад',
-'filehist-user'     => 'Пырысь',
-'filehist-comment'  => 'Пасйӧд',
+'filehist-user' => 'Пырысь',
+'filehist-comment' => 'Пасйӧд',
 
 # Random page
 'randompage' => 'Кӧсйытӧг гижӧд',
 
 # Miscellaneous special pages
 'newpages' => 'Выль лист бокъяс',
-'move'     => 'Ним вежны',
+'move' => 'Ним вежны',
 
 # Special:Log
 'specialloguserlabel' => 'Пырысь:',
-'log'                 => 'Журналъяс',
+'log' => 'Журналъяс',
 
 # Special:AllPages
 'allarticles' => 'Став гижӧдъяс',
@@ -193,7 +193,7 @@ $messages = array(
 'mywatchlist' => 'Видзӧдӧм лыддьӧгӧй',
 
 # Delete
-'deletepage'            => 'Лист бокӧс бырӧдны',
+'deletepage' => 'Лист бокӧс бырӧдны',
 'deletereason-dropdown' => '* Типовые причины удаления
 ** вандализм
 ** по запросу автора
@@ -209,7 +209,7 @@ $messages = array(
 
 # Contributions
 'contributions' => 'Вӧлысьлӧн чӧжӧс',
-'mycontris'     => 'Чӧжӧсӧй',
+'mycontris' => 'Чӧжӧсӧй',
 
 # What links here
 'whatlinkshere' => 'Ыстӧдъяс татчӧ',
@@ -218,7 +218,7 @@ $messages = array(
 'contribslink' => 'чӧжӧс',
 
 # Move page
-'newtitle'    => 'Выль ним',
+'newtitle' => 'Выль ним',
 'movepagebtn' => 'Лист бокӧс ним вежны',
 
 # Namespace 8 related
@@ -226,8 +226,8 @@ $messages = array(
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Пырысьлӧн лист бокӧй',
-'tooltip-ca-talk'     => 'Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй',
-'tooltip-ca-move'     => 'Лист боклӧн ним вежны',
+'tooltip-ca-talk' => 'Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй',
+'tooltip-ca-move' => 'Лист боклӧн ним вежны',
 
 # Special:SpecialPages
 'specialpages' => 'Торъя лист бокъяс',
index d41c07b..2059a32 100644 (file)
 
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Arbennek',
-       NS_TALK             => 'Kescows',
+       NS_SPECIAL          => 'Arbednek',
+       NS_TALK             => 'Keskows',
        NS_USER             => 'Devnydhyer',
-       NS_USER_TALK        => 'Kescows_Devnydhyer',
-       NS_PROJECT_TALK     => 'Kescows_$1',
+       NS_USER_TALK        => 'Keskows_Devnydhyer',
+       NS_PROJECT_TALK     => 'Keskows_$1',
        NS_FILE             => 'Restren',
-       NS_FILE_TALK        => 'Kescows_Restren',
+       NS_FILE_TALK        => 'Keskows_Restren',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'Kescows_MediaWiki',
-       NS_TEMPLATE         => 'Scantlyn',
-       NS_TEMPLATE_TALK    => 'Kescows_Scantlyn',
+       NS_MEDIAWIKI_TALK   => 'Keskows_MediaWiki',
+       NS_TEMPLATE         => 'Skantlyn',
+       NS_TEMPLATE_TALK    => 'Keskows_Skantlyn',
        NS_HELP             => 'Gweres',
-       NS_HELP_TALK        => 'Kescows_Gweres',
-       NS_CATEGORY         => 'Class',
-       NS_CATEGORY_TALK    => 'Kescows_Class',
+       NS_HELP_TALK        => 'Keskows_Gweres',
+       NS_CATEGORY         => 'Klass',
+       NS_CATEGORY_TALK    => 'Keskows_Klass',
 );
 
 $namespaceAliases = array(
-       'Arbednek'           => NS_SPECIAL,
+       'Arbennek'           => NS_SPECIAL,
        'Cows'               => NS_TALK,
-       'Keskows'            => NS_TALK,
+       'Kescows'            => NS_TALK,
        'Cows_Devnydhyer'    => NS_USER_TALK,
-       'Keskows_Devnydhyer' => NS_USER_TALK,
+       'Kescows_Devnydhyer' => NS_USER_TALK,
        'Cows_$1'            => NS_PROJECT_TALK,
-       'Keskows_$1'         => NS_PROJECT_TALK,
+       'Kescows_$1'         => NS_PROJECT_TALK,
        'Cows_Restren'       => NS_FILE_TALK,
-       'Keskows_Restren'    => NS_FILE_TALK,
+       'Kescows_Restren'    => NS_FILE_TALK,
        'Cows_MediaWiki'     => NS_MEDIAWIKI_TALK,
-       'Keskows_MediaWiki'  => NS_MEDIAWIKI_TALK,
+       'Kescows_MediaWiki'  => NS_MEDIAWIKI_TALK,
        'Cows_Scantlyn'      => NS_TEMPLATE_TALK,
-       'Skantlyn'           => NS_TEMPLATE,
-       'Keskows_Skantlyn'   => NS_TEMPLATE_TALK,
+       'Scantlyn'           => NS_TEMPLATE,
+       'Kescows_Skantlyn'   => NS_TEMPLATE_TALK,
        'Cows_Gweres'        => NS_HELP_TALK,
-       'Keskows_Gweres'     => NS_HELP_TALK,
+       'Kescows_Gweres'     => NS_HELP_TALK,
        'Cows_Class'         => NS_CATEGORY_TALK,
-       'Klass'              => NS_CATEGORY,
-       'Keskows_Klass'      => NS_CATEGORY_TALK,
+       'Class'              => NS_CATEGORY,
+       'Kescows_Class'      => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
@@ -551,8 +551,6 @@ Alhwedh: '''({{int:cur}})''' = dyffrans gans an amendyans diwettha, '''({{int:la
 'search-interwiki-caption' => 'Ragdresow hwor',
 'search-interwiki-default' => '$1 sewyansow:',
 'search-interwiki-more' => '(moy)',
-'search-mwsuggest-enabled' => 'gans profyansow',
-'search-mwsuggest-disabled' => 'heb profyansow',
 'search-relatedarticle' => 'Kelmys',
 'mwsuggest-disable' => 'Dialosegi profyansow AJAX',
 'searcheverything-enable' => 'Hwilas en keniver spas-hanow',
@@ -1109,4 +1107,8 @@ Y hellir gweles hy fednfenten.',
 # Special:Tags
 'tags-edit' => 'chanjya',
 
+# Search suggestions
+'searchsuggest-search' => 'Hwilas',
+'searchsuggest-containing' => 'ow senji...',
+
 );
index 726c146..ec9c19b 100644 (file)
@@ -474,8 +474,6 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'search-redirect' => '($1 кайра багыттоо)',
 'search-section' => '($1 бөлүмү)',
 'search-suggest' => 'Ушуну кааладыңызбы: $1',
-'search-mwsuggest-enabled' => 'сунуштар менен',
-'search-mwsuggest-disabled' => 'сунушсуз',
 'searchrelated' => 'байланыштуу',
 'searchall' => 'баары',
 'showingresultsheader' => "'''$4''' үчүн {{PLURAL:$5|'''$3''' жыйынтыктан '''$1'''-и|'''$1 - $2''' -дан '''$3''' жыйынтык}}",
index 5a877bc..96e79b7 100644 (file)
@@ -400,6 +400,10 @@ Vide [[Special:Version|paginam versionis]].',
 'youhavenewmessages' => 'Habes $1 ($2).',
 'newmessageslink' => 'nuntia nova',
 'newmessagesdifflink' => 'dissimilia post mutationem ultimam',
+'youhavenewmessagesfromusers' => 'Habes $1 ab {{PLURAL:$3|uno usore alio|usoribus $3}} ($2).',
+'youhavenewmessagesmanyusers' => 'Habes $1 a multis usoribus ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|nuntia nova}}',
+'newmessagesdifflinkplural' => 'dissimilitudo post mutationem ultimam',
 'youhavenewmessagesmulti' => 'Habes nuntia nova in $1',
 'editsection' => 'recensere',
 'editold' => 'recensere',
@@ -490,7 +494,7 @@ Ratio data est "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Conventum tuum conclusum est.'''
 
-Ignote continues {{grammar:ablative|{{SITENAME}}}} uti, aut conventum novum vel sub eodem vel novo nomine [[Special:UserLogin|aperias]].
+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.
@@ -845,8 +849,6 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 'search-interwiki-caption' => 'Alia incepta',
 'search-interwiki-default' => '$1 eventus:',
 'search-interwiki-more' => '(plus)',
-'search-mwsuggest-enabled' => 'cum suggestionibus',
-'search-mwsuggest-disabled' => 'sine suggestionibus',
 'search-relatedarticle' => 'Relata',
 'mwsuggest-disable' => 'Prohibere suggestiones AJAX',
 'searcheverything-enable' => 'Quaerere in omnibus spatiis nominalibus',
@@ -2380,4 +2382,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'logentry-newusers-autocreate' => 'Ratio $1 automatice creata est',
 'newuserlog-byemail' => 'tessera missa litteris electronicis',
 
+# Search suggestions
+'searchsuggest-search' => 'Quaerere',
+
 );
index 58bae9e..2a4f304 100644 (file)
@@ -172,12 +172,12 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'fullpagename'            => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'NOMBREDEHOJICA', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'img_left'                => array( '1', 'cierda', 'izquierda', 'izda', 'izq', 'left' ),
-       'img_none'                => array( '1', 'dinguna', 'dinguno', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
+       'redirect'                  => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'fullpagename'              => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'NOMBREDEHOJICA', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'img_left'                  => array( '1', 'cierda', 'izquierda', 'izda', 'izq', 'left' ),
+       'img_none'                  => array( '1', 'dinguna', 'dinguno', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
 );
 
 $messages = array(
@@ -692,8 +692,6 @@ Leyenda: (act) = diferencias con la versión actual,
 'search-interwiki-caption' => 'Proyectos hermanos',
 'search-interwiki-default' => 'Los resultados de $1:',
 'search-interwiki-more' => '(más)',
-'search-mwsuggest-enabled' => 'con consejos',
-'search-mwsuggest-disabled' => 'no ay consejos',
 'searchrelated' => 'lisionado',
 'searchall' => 'todos',
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
index a70bc6d..b22f804 100644 (file)
@@ -27,7 +27,7 @@ $namespaceNames = array(
        NS_TALK             => 'Diskussioun',
        NS_USER             => 'Benotzer',
        NS_USER_TALK        => 'Benotzer_Diskussioun',
-       NS_PROJECT_TALK     => '$1 Diskussioun',
+       NS_PROJECT_TALK     => '$1_Diskussioun',
        NS_FILE             => 'Fichier',
        NS_FILE_TALK        => 'Fichier_Diskussioun',
        NS_MEDIAWIKI        => 'MediaWiki',
@@ -147,31 +147,36 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#VIRULEEDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
-       'numberofpages'           => array( '1', 'Säitenzuel', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'Artikelen', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'Fichieren', 'DATEIANZAHL', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'Benotzerzuel', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'Aktiv_Benotzer', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
-       'pagename'                => array( '1', 'Säitennumm', 'SEITENNAME', 'PAGENAME' ),
-       'namespace'               => array( '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ),
-       'subjectspace'            => array( '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectpagename'         => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'img_thumbnail'           => array( '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'riets', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'lénks', 'links', 'left' ),
-       'img_none'                => array( '1', 'ouni', 'ohne', 'none' ),
-       'img_center'              => array( '1', 'zentréiert', 'zentriert', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'gerummt', 'gerahmt', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'net_gerummt', 'rahmenlos', 'frameless' ),
-       'img_page'                => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'bord', 'rand', 'border' ),
-       'img_top'                 => array( '1', 'uewen', 'oben', 'top' ),
-       'grammar'                 => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'plural'                  => array( '0', 'PLURAL', 'PLURAL:' ),
-       'formatnum'               => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ),
-       'special'                 => array( '0', 'spezial', 'special' ),
-       'hiddencat'               => array( '1', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'redirect'                  => array( '0', '#VIRULEEDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
+       'numberofpages'             => array( '1', 'Säitenzuel', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'Artikelen', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'Zuel_vu_Fichieren', 'DATEIANZAHL', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'Benotzerzuel', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'Aktiv_Benotzer', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
+       'pagename'                  => array( '1', 'Säitennumm', 'SEITENNAME', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ),
+       'subjectspace'              => array( '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectpagename'           => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'img_thumbnail'             => array( '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'riets', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'lénks', 'links', 'left' ),
+       'img_none'                  => array( '1', 'ouni', 'ohne', 'none' ),
+       'img_center'                => array( '1', 'zentréiert', 'zentriert', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'gerummt', 'gerahmt', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'net_gerummt', 'rahmenlos', 'frameless' ),
+       'img_page'                  => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'bord', 'rand', 'border' ),
+       'img_top'                   => array( '1', 'uewen', 'oben', 'top' ),
+       'img_bottom'                => array( '1', 'ënnen', 'unten', 'bottom' ),
+       'grammar'                   => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'plural'                    => array( '0', 'PLURAL', 'PLURAL:' ),
+       'currentversion'            => array( '1', 'AKTUELL_VERSIOUN', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#SPROOCH:', '#SPRACHE:', '#LANGUAGE:' ),
+       'formatnum'                 => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ),
+       'special'                   => array( '0', 'spezial', 'special' ),
+       'hiddencat'                 => array( '1', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+       'pagesincategory_pages'     => array( '0', 'Säiten', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'Fichieren', 'files' ),
 );
 
 $messages = array(
@@ -333,7 +338,7 @@ $messages = array(
 'vector-action-protect' => 'Spären',
 'vector-action-undelete' => 'Restauréieren',
 'vector-action-unprotect' => 'Spär änneren',
-'vector-simplesearch-preference' => 'Verbessert Sichvirschléi aktiviéieren (nëmme beim Ausgesinn Vector)',
+'vector-simplesearch-preference' => 'Vereinfacht Sichleescht aktivéieren (nëmme beim Ausgesinn Vector)',
 'vector-view-create' => 'Uleeën',
 'vector-view-edit' => 'Änneren',
 'vector-view-history' => 'Versioune weisen',
@@ -554,8 +559,12 @@ Ufro: $2',
 'protectedpagetext' => 'Dës Säit ass fir Ännerunge 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 an dofir ass si gespaart fir Mëssbrauch ze verhënneren.',
-'editinginterface' => "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. Ännerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer gesi ginn. Fir d'Iwwersetzungen z'änneren invitéiere mir Iech de [//translatewiki.net/wiki/Main_Page?setlang=lb Projet translatewiki.net] vun den internationale Messagen ze benotzen.",
+'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.
+
+Fir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
+'editinginterface' => "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. 
+Ännerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn. 
+Fir d'Iwwersetzungen fir all Wikien derbäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
 'sqlhidden' => '(SQL-Offro verstoppt)',
 'cascadeprotected' => 'Dës Säit gouf fir Ännerunge gespaart, well se duerch Cascadeprotectioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gespaart ass mat der Cascadenoptioun:
 $2',
@@ -577,7 +586,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Dir sidd elo ausgeloggt.'''
 
-Dir kënnt {{SITENAME}} elo anonym benotzen, oder Iech [[Special:UserLogin|erëm aloggen]].
+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! ==
@@ -825,8 +834,11 @@ Wann Dir en anonyme Benotzer sidd an Dir irrelevant Kommentäre krut, [[Special:
 Dir kënnt op anere Säiten no [[Special:Search/{{PAGENAME}}|dësem Säitentitel sichen]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an den entspriechende Logbicher nokucken] oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} esou eng Säit uleeën]</span>.',
 'noarticletext-nopermission' => 'Elo ass keen Text op dëser Säit.
-Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Sàitentitel sichen]],
-oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>.',
+Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Sàitentitel sichen]], oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>, mä Dir hutt net déi néideg Rechter fir dës Säit unzeleeën.',
+'missing-revision' => 'D\'Versioun #$1 vun der Säit mam Numm "{{PAGENAME}}" gëtt et net.
+
+Dat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.
+Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].',
 'userpage-userdoesnotexist' => 'De Benotzerkont "<nowiki>$1</nowiki>" ass net registréiert.
 Iwwerpréift w.e.g. op Dir dës Säit uleeën/ännere wëllt.',
 'userpage-userdoesnotexist-view' => 'De Benotzerkont "$1" ass net registréiert.',
@@ -939,6 +951,7 @@ Et däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|
 'parser-template-loop-warning' => 'Endlos Schleef an der Schabloun: [[$1]] entdeckt',
 'parser-template-recursion-depth-warning' => "D'Limit vun der Zuel vun de Verschachtelunge vu Schabloune gouf iwwerschratt ($1)",
 'language-converter-depth-warning' => "D'Limite vun der déift vun der Sproochëmwandlung gouf iwwerschratt ($1)",
+'converter-manual-rule-error' => 'An der Regel iwwer déi manuell Ëmwandlung vun der Sprooch gouf e Feeler fonnt',
 
 # "Undo" feature
 'undo-success' => "D'Ännerung gëtt réckgängeg gemaach. Iwwerpréift w.e.g. de Verglach ënnendrënner fir nozekuckeen ob et esou richteg ass, duerno späichert w.e.g d'Ännerungen of, fir dës Aktioun ofzeschléissen.",
@@ -1073,8 +1086,10 @@ Dir hutt keen Zougang dozou.',
 Kuckt w.e.g. an de Logbicher no.",
 'revdelete-only-restricted' => 'Feler beim verstoppe vum Objet vum $2, $1: Dir kënnt keng Objete virun den Administrateure verstoppen ouni och eng vun den aneren Optiounen vum weisen erauszesichen.',
 'revdelete-reason-dropdown' => "* Generell Läschgrënn
-**Verletzung vun den Droits d'Auteur
-**Net ubruechte perséinlech Informatioun",
+** Verletzung vun den Droits d'Auteur
+** Net ubruechte perséinlech Informatioun
+** Inadequate Benotzernumm
+** Informatioun déi beleidege kann",
 'revdelete-otherreason' => 'Aneren/zousätzleche Grond:',
 'revdelete-reasonotherlist' => 'Anere Grond:',
 'revdelete-edit-reasonlist' => 'Läschgrënn änneren',
@@ -1171,8 +1186,6 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 'search-interwiki-caption' => 'Schwësterprojeten',
 'search-interwiki-default' => '$1 Resultater:',
 'search-interwiki-more' => '(méi)',
-'search-mwsuggest-enabled' => 'mat Virschléi',
-'search-mwsuggest-disabled' => 'keng Virschléi',
 'search-relatedarticle' => 'A Verbindung',
 'mwsuggest-disable' => 'Ajax-Virschléi ausschalten',
 'searcheverything-enable' => 'An allen Nummraim sichen',
@@ -1268,7 +1281,7 @@ Hei ass een zoufälleg generéierte Wäert deen Dir benotze kënnt: $1',
 'timezoneregion-indian' => 'Indeschen Ozean',
 'timezoneregion-pacific' => 'Pazifeschen Ozean',
 'allowemail' => 'E-Maile vun anere Benotzer kréien.',
-'prefs-searchoptions' => 'Sichoptiounen',
+'prefs-searchoptions' => 'Sichen',
 'prefs-namespaces' => 'Nummraim',
 'defaultns' => 'Soss an dësen Nummraim sichen:',
 'default' => 'Standard',
@@ -1749,7 +1762,7 @@ Kuckt w.e.g. no op kee Feeler an der URL ass an op de Site och online ass.',
 # Special:ListFiles
 'listfiles-summary' => 'Op dëser Spezialsäit stinn all déi eropgeluede Fichieren.
 
-Wann se pro Benotzer gefiltert sinn, ginn nëmmen déi Fichiere gewise wou dee Benotzer déi lescht Versioun vum Fichier eropgelueden huet.',
+Wa se pro Benotzer gefiltert sinn, ginn nëmmen déi Fichiere gewise wou dee Benotzer déi lescht Versioun vum Fichier eropgelueden huet.',
 'listfiles_search_for' => 'Sicht nom Fichier:',
 'imgfile' => 'Fichier',
 'listfiles' => 'Lëscht vun de Fichieren',
@@ -1802,6 +1815,7 @@ Dir kënnt seng Beschreiwung op senger [$2 Beschreiwungssäit] änneren.',
 'shared-repo-from' => 'vu(n) $1',
 'shared-repo' => 'e gemeinsam genotzte Medienarchiv',
 'shared-repo-name-wikimediacommons' => 'Wikimedia-Commons',
+'upload-disallowed-here' => 'Leider kënnt Dir dëst Bild net iwwerschreiwen.',
 
 # File reversion
 'filerevert' => '"$1" zrécksetzen',
@@ -1863,7 +1877,7 @@ Dir musst ëmmer de Medien- a Subtyp aginn: z. Bsp. <code>image/jpeg</code>.",
 'statistics' => 'Statistik',
 'statistics-header-pages' => 'Säitestatistiken',
 'statistics-header-edits' => 'Statistik vun den Ännerungen',
-'statistics-header-views' => "Sttistiken iwwert d'Visiten",
+'statistics-header-views' => "Statistiken iwwert d'Visiten",
 'statistics-header-users' => 'Benotzerstatistik',
 'statistics-header-hooks' => 'Aner Statistiken',
 'statistics-articles' => 'Säite mat Inhalt',
@@ -1991,6 +2005,7 @@ Denkt w.e.g. drunn datt aner Internetsäiten dëse Fichier mat enger direkter UR
 Dir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrote Säit (och case-senisitive) agitt.",
 'logempty' => 'Näischt fonnt.',
 'log-title-wildcard' => 'Titel fänkt mat dësem Text un',
+'showhideselectedlogentries' => 'Déi erausgesichte Entréeën am Logbuch weisen/verstoppen',
 
 # Special:AllPages
 'allpages' => 'All Säiten',
@@ -2082,6 +2097,8 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i
 'mailnologin' => 'Keng E-Mailadress',
 'mailnologintext' => 'Dir musst [[Special:UserLogin|ugemellt]] sinn an eng gëlteg E-Mail Adress an Äre [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.',
 'emailuser' => 'Dësem Benotzer eng E-Mail schécken',
+'emailuser-title-target' => '{{GENDER:$1|Dëser Benotzerin|Dësem Benotzer}} eng Mail schécken',
+'emailuser-title-notarget' => 'Dem Benotzer eng E-Mail schécken',
 'emailpage' => 'Dem Benotzer eng E-Mail schécken',
 'emailpagetext' => 'Dir kënnt mat dësem Formulaire dësem Benotzer en E-Mail-Message schécken.
 D\'E-Mailadress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hutt, steet an der "From" Adress vun der Mail, sou datt den Destinataire Iech direkt äntwerte kann.',
@@ -2755,6 +2772,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 'import-error-special' => 'D\'Säit "$1" gouf net importéiert well se zu engem speziellen Nummraum gehéiert an deem et keng Säite gëtt.',
 'import-error-invalid' => 'D\'Säit "$1" gouf net importéiert well hiren Numm net valabel ass.',
 'import-options-wrong' => 'Falsch {{PLURAL:$2|Optioun|Optiounen}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Déi Basis-Säit déi Dir uginn hutt ass kee valabelen Titel.',
 
 # Import log
 'importlogpage' => 'Lëscht vun den Säitenimporten',
@@ -2766,7 +2784,6 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-Test',
-'javascripttest-disabled' => 'Dës Funktioun gouf an dëser Wiki net aktivéiert.',
 '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".',
@@ -2883,11 +2900,30 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 
 # Info page
 'pageinfo-title' => 'Informatioun iwwer "$1"',
-'pageinfo-header-edits' => 'Ännerungen',
+'pageinfo-header-basic' => 'Basisinformatiounen',
+'pageinfo-header-edits' => 'Historique vun den Ännerungen',
+'pageinfo-header-restrictions' => 'Spär vun der Säit',
+'pageinfo-header-properties' => 'Eegeschafte vun der Säit',
+'pageinfo-display-title' => 'Titel dee gewise gëtt',
+'pageinfo-default-sort' => 'Standard-Zortéierschlëssel',
+'pageinfo-length' => 'Gréisst vun der Säit (a Bytes)',
+'pageinfo-article-id' => 'ID (Nummer) vun der Säit',
 'pageinfo-views' => 'Zuel vun de Kéieren déi dës Säit gekuckt gouf',
-'pageinfo-watchers' => 'Zuel vun de Benotzer déi iwwerwaachen',
-'pageinfo-edits' => 'Zuel vun den Ännerungen',
-'pageinfo-authors' => 'Zuel vun de verschiddenen Auteuren',
+'pageinfo-watchers' => "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
+'pageinfo-redirects-name' => 'Viruleedungen op dës Säit',
+'pageinfo-subpages-name' => 'Ënnersäite vun dëser Säit',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|Viruleedung|Viruleedungen}}; $3 {{PLURAL:$3|Ënnersäit|Ënnersäiten}})',
+'pageinfo-firsttime' => 'Datum vum Uleeë vun der Säit',
+'pageinfo-lastuser' => 'Leschte Benotzer deen eppes geännert huet',
+'pageinfo-lasttime' => 'Datum vun der leschter Ännerung',
+'pageinfo-edits' => 'Gesamtzuel vun den Ännerungen',
+'pageinfo-authors' => 'Gesamtzuel vun de verschiddenen Auteuren',
+'pageinfo-recent-edits' => 'Zuel vun de rezenten Ännerungen (an de leschten $1)',
+'pageinfo-recent-authors' => 'Zuel vun de verschiddenen Auteuren',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magescht Wuert|Magesch Wierder}} ($1)',
+'pageinfo-hidden-categories' => 'Verstoppte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
+'pageinfo-templates' => 'Agebonne {{PLURAL:$1|Schabloun|Schabloune}} ($1)',
+'pageinfo-toolboxlink' => "Informatiounen iwwert d'Säit",
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -2941,6 +2977,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'file-info-size-pages' => '$1 × $2 Pixelen, Gréisst vum Fichier: $3, MIME Typ: $4, $5 {{PLURAL:$5|Säit|Säiten}}',
 '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',
 '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.',
@@ -2950,6 +2987,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'file-info-png-looped' => 'endlos Schleef',
 'file-info-png-repeat' => 'gouf $1 {{PLURAL:$1|mol|mol}} gespillt',
 'file-info-png-frames' => '$1 {{PLURAL:$1|Frame|Framen}}',
+'file-no-thumb-animation' => "''''Informatioun: Wéinst technesche Limitatioune sinn d'Miniatur-Biller vun dësem Fichier net animéiert.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallerie vun den neie Biller',
@@ -3142,6 +3180,7 @@ Déi aner sinn am Standard verstoppt.
 'exif-iimsupplementalcategory' => 'Zousätzlech Kategorien',
 'exif-datetimeexpires' => 'Net benotzen nom',
 'exif-datetimereleased' => 'Erausginn den',
+'exif-originaltransmissionref' => "Geo-Code vun der Plaz vu wou d'Foto iwwermëttelt gouf",
 'exif-identifier' => 'Identifiant',
 'exif-lens' => 'Objektiv dat benotzt gouf',
 'exif-serialnumber' => 'Seriennummer vun der Kamera',
@@ -3445,6 +3484,7 @@ Dëse Confirmatiouns-Code leeft den $4 of.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-Abannung ass ausgeschalt]',
 'scarytranscludefailed' => "[D'Siche no der Schabloun fir $1 huet net funktionéiert]",
+'scarytranscludefailed-httpstatus' => "[D'Oprufe vun der Schabloun $1: HTTP $2 huet net fonctionnéiert]",
 'scarytranscludetoolong' => "[D'URL ass ze laang]",
 
 # Delete conflict
@@ -3710,11 +3750,16 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'feedback-bugcheck' => 'Super! Kuckt just no ob et net ee vun de schonns [$1 bekannte Feeler] ass.',
 'feedback-bugnew' => 'Ech hunn et nogekuckt. Den neie Bug mellen',
 
+# Search suggestions
+'searchsuggest-search' => 'Sichen',
+'searchsuggest-containing' => 'mat ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Et ass Iech net erlaabt fir Fichieren op dës Wiki eropzelueden.',
 'api-error-badtoken' => 'Interne Feeler: falschen Token.',
 'api-error-copyuploaddisabled' => "D'Eroplueden iwwer eng URL ass op dësem Server desaktivéiert.",
 'api-error-duplicate' => 'Et gëtt schonn {{PLURAL:$1|[$2 en anere Fichier]|[$2 aner Fichiere]}} mat dem selwechten Inhalt op dem Site',
+'api-error-duplicate-archive' => 'Et gouf schonn {{PLURAL:$1| [een anere Fichier]|[$2 aner Fichieren]}} op dem Site mat deemselwechten Inhalt, {{PLURAL:$1|e gouf was|se goufen}} awer geläscht.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Duebele Fichier, dee scho geläscht gouf|Duebel Fichieren, déi scho geläscht goufen}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|Duebele Fichier|Duebel Fichieren}}',
 'api-error-empty-file' => 'De Fichier deen Dir geschéckt hutt war eidel.',
index abc9e2c..ae90ef0 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Ð\9bаккÑ\83 (Ð\9bакку)
+/** Ð»Ð°ÐºÐºÑ\83 (лакку)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -46,44 +46,44 @@ $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъы
 
 $messages = array(
 'article' => 'Тарих',
-'mytalk'  => 'На цӀухху-бусу байсса интернетрал лажин',
+'mytalk' => 'На цӀухху-бусу байсса интернетрал лажин',
 
 # Cologne Blue skin
 'qbedit' => 'Дакьин дуван',
 
-'history'          => 'Тарих',
-'history_short'    => 'Тарих',
-'edit'             => 'Дакьин дуван',
+'history' => 'Тарих',
+'history_short' => 'Тарих',
+'edit' => 'Дакьин дуван',
 'talkpagelinktext' => 'Ихтилат',
-'talk'             => 'Ихтилат',
+'talk' => 'Ихтилат',
 
 # 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).
-'currentevents'        => 'Нанисса ишру',
-'currentevents-url'    => 'Project:Нанисса ишру',
-'mainpage'             => 'Агьаммур лажин',
+'currentevents' => 'Нанисса ишру',
+'currentevents-url' => 'Project:Нанисса ишру',
+'mainpage' => 'Агьаммур лажин',
 'mainpage-description' => 'Агьаммур лажин',
 
 'editsection' => 'дакьин дуван',
-'editold'     => 'дакьин дуван',
+'editold' => 'дакьин дуван',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Тарих',
-'nstab-user'     => 'Гьуртту хьума',
-'nstab-special'  => 'Къуллугъирал лажин',
-'nstab-image'    => 'Сурат',
+'nstab-main' => 'Тарих',
+'nstab-user' => 'Гьуртту хьума',
+'nstab-special' => 'Къуллугъирал лажин',
+'nstab-image' => 'Сурат',
 'nstab-template' => 'Шаблон',
 'nstab-category' => 'Категория',
 
 # Login and logout pages
-'userlogin'  => 'Системалухь цу уссарав бусан',
-'logout'     => 'Уккаву',
+'userlogin' => 'Системалухь цу уссарав бусан',
+'logout' => 'Уккаву',
 'userlogout' => 'Уккаву',
 
 # Edit pages
-'minoredit'   => 'Мюрщсса дахханашиву',
-'watchthis'   => 'Ва лажин ябитаврил сияхӀравун ххи дан',
+'minoredit' => 'Мюрщсса дахханашиву',
+'watchthis' => 'Ва лажин ябитаврил сияхӀравун ххи дан',
 'savearticle' => 'Лажин ядан',
-'preview'     => 'Цалсса ххалбаву',
+'preview' => 'Цалсса ххалбаву',
 'showpreview' => 'Цалсса ххалбаву',
 
 # Recent changes
@@ -91,7 +91,7 @@ $messages = array(
 
 # File description page
 'file-anchor-link' => 'Сурат',
-'filehist-user'    => 'Гьурттучув',
+'filehist-user' => 'Гьурттучув',
 
 # Miscellaneous special pages
 'move' => 'ЦӀа даххана дан',
@@ -104,12 +104,12 @@ $messages = array(
 
 # Watchlist
 'watchlist' => 'Ябитаврил сияхӀ',
-'watch'     => 'Хъирив агьан',
-'unwatch'   => 'Хъирив къаагьан',
+'watch' => 'Хъирив агьан',
+'unwatch' => 'Хъирив къаагьан',
 
 # Contributions
 'contributions' => 'Гьурттучунал бутӀа',
-'mycontris'     => 'Ттул даву',
+'mycontris' => 'Ттул даву',
 
 'sp-contributions-talk' => 'Ихтилат',
 
index ffe54c2..d6e15d9 100644 (file)
@@ -567,8 +567,6 @@ $messages = array(
 'search-interwiki-caption' => 'Мукьва проект',
 'search-interwiki-default' => '$1(жавабар)',
 'search-interwiki-more' => '(мадни)',
-'search-mwsuggest-enabled' => 'меслятар галаз',
-'search-mwsuggest-disabled' => 'меслятар галачиз',
 'search-relatedarticle' => 'Галкlанавай',
 'searchrelated' => 'Галкlанавай',
 'searchall' => 'вири',
index 024c56a..2ff608d 100644 (file)
@@ -443,8 +443,6 @@ La arcivo de sutraes per esta paje es asi per conveni:",
 'search-section' => '(sesion $1)',
 'search-interwiki-default' => 'Resultas de $1:',
 'search-interwiki-more' => '(plu)',
-'search-mwsuggest-enabled' => 'con sujestes',
-'search-mwsuggest-disabled' => 'zero sujestes',
 'searchall' => 'tota',
 'powersearch' => 'Xerca avansada',
 
index 88b41b4..1a928c7 100644 (file)
@@ -400,7 +400,7 @@ Ensonga gy\'awadde eri nti "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Kati ovuddemu.'''
 
-Osobola okusigala nga okozesa {{SITENAME}} nga at'eyanjudde, ate osobola [[Special:UserLogin|n'okuddamu okuyingira]] nga bw'obadde oba nga okozesezza ery'obwa memba eddala.
+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 />
@@ -844,8 +844,6 @@ oba ku gano agali ku lupapula luno.<br />
 'search-interwiki-caption' => "Pulojekiti ezikolagana n'eno",
 'search-interwiki-default' => 'ebizuulidwa ku $1:',
 'search-interwiki-more' => '(ebikyaliyo)',
-'search-mwsuggest-enabled' => 'mpeeraako amagezi',
-'search-mwsuggest-disabled' => "sisitemu ereme okuteebereza ky'onoonya",
 'searchall' => '',
 'nonefound' => "'''Wekkaanye''': Okunoonya kuno kukoma mu makuŋaanyizo amalondemu okugyako nga okulagidde okweyonera awalala.
 W'owandikira by'onoonya bw'osoosawo akagambo ''all:'', okunoonya kubuna Wikipediya yonna. Bw'obanga olina ekkuŋaanyizo limu lyokka lyoyagala okunoonyezamu, soosawo erinnya lyalyo w'owandikira by'onoonya.",
index 2487b54..7360204 100644 (file)
@@ -558,7 +558,7 @@ d\'n Opgegaeve raej vanne sloetendje admin waar "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''De bis noe aafgemeld.'''
 
-De kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of [[Special:UserLogin|opnuuj aanmelde]] ónger dezelfde of 'ne angere naam.
+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.
@@ -1147,8 +1147,6 @@ Wees zeker det deze wieziging de gesjiedenisdoorloupendheid van de pagina zal be
 'search-interwiki-caption' => 'Zösterprojecte',
 'search-interwiki-default' => '$1 resultate:',
 'search-interwiki-more' => '(meer)',
-'search-mwsuggest-enabled' => 'mit suggesties',
-'search-mwsuggest-disabled' => 'gein suggesties',
 'search-relatedarticle' => 'Gerelateerd',
 'mwsuggest-disable' => 'Suggesties via AJAX oetsjakele',
 'searcheverything-enable' => 'Zeuke in alle naamruumdes',
@@ -2730,7 +2728,6 @@ Slaon de oetveur op dien eige systeem op, en voeg dae dao nao hiej toe.',
 
 # JavaScriptTest
 'javascripttest' => 'Tes JavaScript',
-'javascripttest-disabled' => 'Dees funksje steit oet op deze wiki.',
 'javascripttest-title' => 'Veur tes oet veur $1',
 'javascripttest-pagetext-noframework' => "Dees pagina is gerizzerveerd veur 't oetveure van JavaScriptteste.",
 'javascripttest-pagetext-unknownframework' => 'Ónbekèndje testframework "$1".',
@@ -3678,6 +3675,10 @@ Anges kin se-n ouch \'t einvawdig formeleer hieónger gebroeke. Dien commentaar
 'feedback-bugcheck' => "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
 'feedback-bugnew' => "Gekónterleerdj. Mèlj 'ne nuuj bug.",
 
+# Search suggestions
+'searchsuggest-search' => 'Zeuke',
+'searchsuggest-containing' => 'bevat...',
+
 # API errors
 'api-error-badaccess-groups' => 'Doe moogs gein bestenj uploade óp deze wiki.',
 'api-error-badtoken' => 'Intern fout: toke is slech.',
index 141c05e..a76dd63 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Erdemaslancan
  * @author Ohpuu
  * @author Warbola
  */
@@ -252,7 +253,7 @@ agā [{{fullurl:{{FULLPAGENAME}}|action=edit}} sīe līed īž lūodõ]</span>.'
 Sa võid [[Special:Search/{{PAGENAME}}|vȯtšõ pēļizkēra frāzõ]] mūšti lēḑist,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vȯtšõ tämstõ log failidi],
 agā [{{fullurl:{{FULLPAGENAME}}|action=edit}} sīe līed īž lūodõ]</span>.',
-'previewnote' => "''' Algid undõgid, ku se um setku jedmõl-vaņtlimi!'''
+'previewnote' => "'''Algid undõgid, ku se um setku jedmõl-vaņtlimi!'''
 Sin redigīerimizt äb ūo vel sa-gläbdõd !",
 'editing' => 'Redigīerimiz pǟl um $1',
 'editingsection' => 'Redigīerimiz pǟl um $1 sektsij līedst',
@@ -306,7 +307,7 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'revertmerge' => 'Kīeld jarā kubbõ vieddimi',
 
 # Diffs
-'history-title' => 'Līed "$1" mõitõkst istōrij',
+'history-title' => 'Līed mõitõkst istōrij "$1"',
 'lineno' => 'Rīnda $1:',
 'compareselectedversions' => 'Līdzinţ vēļdõt redaktsijḑi',
 'editundo' => 'kištānt jarā',
@@ -347,8 +348,6 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'search-interwiki-caption' => 'Sõzār-projektõd',
 'search-interwiki-default' => '$1 rezultātõd:',
 'search-interwiki-more' => ' (vel)',
-'search-mwsuggest-enabled' => 'jeddõpandõkstõks',
-'search-mwsuggest-disabled' => 'jeddõpandõkši äb ūo',
 'searchrelated' => 'sidtõd',
 'searchall' => 'tikkiž',
 'showingresultsheader' => "{{PLURAL:$5|'''$1''' '''$3'''-st rezultātõst|Rezultātõd '''$1–$2''' '''$3'''-st}} kizzimizõn '''$4'''",
index 1625953..adaa3c1 100644 (file)
@@ -96,10 +96,10 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_right'               => array( '1', 'drita', 'destra', 'right' ),
-       'img_left'                => array( '1', 'manzína', 'sinistra', 'left' ),
-       'img_none'                => array( '1', 'nissön', 'nessuno', 'none' ),
-       'sitename'                => array( '1', 'NUMSIT', 'NOMESITO', 'SITENAME' ),
+       'img_right'                 => array( '1', 'drita', 'destra', 'right' ),
+       'img_left'                  => array( '1', 'manzína', 'sinistra', 'left' ),
+       'img_none'                  => array( '1', 'nissön', 'nessuno', 'none' ),
+       'sitename'                  => array( '1', 'NUMSIT', 'NOMESITO', 'SITENAME' ),
 );
 
 $messages = array(
@@ -420,7 +420,7 @@ Per piasè, fa raport a 'n'[[Special:ListUsers/sysop|aministradur]], cun la nota
 # Login and logout pages
 'logouttext' => "'''Adess a sii descuness.'''
 
-A pudé andà inanz a druvà la {{SITENAME}} in manera anònima, o a pudé [[Special:UserLogin|cunètev anmò]] cun l'istess suranomm o cun un suranomm diferent.
+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}}]].",
@@ -628,8 +628,6 @@ Per infurmazion, varda ind el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGE
 'search-interwiki-caption' => 'Pruget fredej',
 'search-interwiki-default' => '$1 resültaa',
 'search-interwiki-more' => '(püssee)',
-'search-mwsuggest-enabled' => 'cun sügeriment',
-'search-mwsuggest-disabled' => 'senza sügeriment',
 'nonefound' => "''''Tenzión''': la ricerca la vegn fada in utumategh dumà per un quaj namespace.
 Pröa a giuntagh denanz a la tò ricerca ''all:'' per cercà in tücc i namespace (cumpres i discüssión, i mudel, etc...) o dupra el namespace vursüü 'me prefiss.",
 'powersearch' => 'Truvá',
index bf0b9d6..1495086 100644 (file)
@@ -340,8 +340,6 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'search-suggest' => 'Ómeka na lokomá : $1',
 'search-interwiki-default' => 'Bozwi bwa $1 :',
 'search-interwiki-more' => '(elekí)',
-'search-mwsuggest-enabled' => 'na bokáni',
-'search-mwsuggest-disabled' => 'na bokáni tɛ́',
 'searchall' => 'nyɔ́nsɔ',
 'nonefound' => "'''Notí''' : Boluki bwa likwá bosálí na ndámbo ya ntáká ya nkómbó.
 Ómeka kobakisa ''all:'' o libóso lya esɛ́ngi mpɔ̂ na koluka maloba ma nkomá mánsɔ (ekɔ́tí ntembe, bimekisele, b.n.b.), tǒ kobakisa ntáka ya nkómbó eye olingí o libóso.",
index 9669b31..a1ec10d 100644 (file)
@@ -483,8 +483,6 @@ $messages = array(
 'search-result-size' => '$1 ({{PLURAL:$2|1 ຄຳ|$2 ຄຳ}})',
 'search-result-score' => 'ຄວາມກ່ຽວຂ້ອງ: $1%',
 'search-redirect' => '(ໂອນ $1)',
-'search-mwsuggest-enabled' => 'ແບບມີຄຳແນະນຳ',
-'search-mwsuggest-disabled' => 'ແບບບໍ່ມີຄຳແນະນຳ',
 'search-relatedarticle' => 'ກ່ຽວຂ້ອງ',
 'mwsuggest-disable' => 'ບໍ່ໃຊ້ການແນະນຳ ໂດຍ AJAX',
 'searchrelated' => 'ກ່ຽວຂ້ອງ',
index 762c1e8..333e04f 100644 (file)
@@ -41,7 +41,6 @@ $messages = array(
 'tog-uselivepreview' => 'Sebelize live PendiBe (bulukezi JavaScript) (yem nca)',
 'tog-watchlisthideown' => 'Cwankekile zwa afina di zwa mukoloko di kentezi',
 'tog-watchlisthidebots' => 'Cwankekile roboti di zwa mukoloko di kentezi',
-'tog-nolangconversion' => 'Dinyembulisize selti konfesyoni',
 'tog-ccmeonemails' => 'Afi di zwa dubina di melina a afi di xetewi sebelu',
 'tog-diffonly' => 'Ni sa kamukile petulo selt pre petuho',
 
index f7a8728..724e7e9 100644 (file)
@@ -144,28 +144,28 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PERADRESAVIMAS', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BETURIN__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEGALERIJOS__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__TURINYS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEREDAGSEKC__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'DABARTINISMĖNESIS', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DABARTINIOMĖNESIOPAVADINIMAS', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'DABARTINĖDIENA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DABARTINĖDIENA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DABARTINĖSDIENOSPAVADINIMAS', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DABARTINIAIMETAI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DABARTINISLAIKAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DABARTINĖVALANDA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'PUSLAPIŲSKAIČIUS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'STRAIPSNIŲSKAIČIUS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FAILŲSKAIČIUS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NAUDOTOJŲSKAIČIUS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'KEITIMŲSKAIČIUS', 'NUMBEROFEDITS' ),
-       'img_thumbnail'           => array( '1', 'miniatiūra', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatiūra=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dešinėje', 'right' ),
-       'img_left'                => array( '1', 'kairėje', 'left' ),
+       'redirect'                  => array( '0', '#PERADRESAVIMAS', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BETURIN__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEGALERIJOS__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__TURINYS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEREDAGSEKC__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'DABARTINISMĖNESIS', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DABARTINIOMĖNESIOPAVADINIMAS', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'DABARTINĖDIENA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DABARTINĖDIENA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DABARTINĖSDIENOSPAVADINIMAS', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DABARTINIAIMETAI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DABARTINISLAIKAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DABARTINĖVALANDA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'PUSLAPIŲSKAIČIUS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'STRAIPSNIŲSKAIČIUS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FAILŲSKAIČIUS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NAUDOTOJŲSKAIČIUS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'KEITIMŲSKAIČIUS', 'NUMBEROFEDITS' ),
+       'img_thumbnail'             => array( '1', 'miniatiūra', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatiūra=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dešinėje', 'right' ),
+       'img_left'                  => array( '1', 'kairėje', 'left' ),
 );
 
 $fallback8bitEncoding = 'windows-1257';
@@ -445,9 +445,9 @@ $1',
 'youhavenewmessages' => 'Jūs turite $1 ($2).',
 'newmessageslink' => 'naujų žinučių',
 'newmessagesdifflink' => 'paskutinis pakeitimas',
-'youhavenewmessagesfromusers' => 'Jūs turite $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
+'youhavenewmessagesfromusers' => 'Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
 'youhavenewmessagesmanyusers' => 'Jūs turite $1 iš daugelio vartotojų ( $2 ) .',
-'newmessageslinkplural' => '{{PLURAL:$1|nauja žinutė|naujos žinutės}}',
+'newmessageslinkplural' => '{{PLURAL:$1|naują žinutę|naujų žinučių}}',
 'newmessagesdifflinkplural' => 'paskutinis {{PLURAL:$1|pakeitimas|pakeitimai}}',
 'youhavenewmessagesmulti' => 'Turite naujų žinučių $1',
 'editsection' => 'redaguoti',
@@ -588,7 +588,7 @@ Ją užrakinęs administratorius pateikė šį paaiškinimą: "$3".',
 # Login and logout pages
 'logouttext' => "'''Dabar jūs esate atsijungęs.'''
 
-Galite toliau naudoti {{SITENAME}} anonimiškai arba [[Special:UserLogin|prisijunkite]] iš naujo tuo pačiu ar kitu naudotoju.
+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! ==
 
@@ -1178,8 +1178,6 @@ Prašome patikrinti sąrašus.',
 'search-interwiki-caption' => 'Dukteriniai projektai',
 'search-interwiki-default' => '$1 rezultatai:',
 'search-interwiki-more' => '(daugiau)',
-'search-mwsuggest-enabled' => 'su pasiūlymais',
-'search-mwsuggest-disabled' => 'nėra pasiūlymų',
 'search-relatedarticle' => 'Susiję',
 'mwsuggest-disable' => 'Slėpti AJAX pasiūlymus',
 'searcheverything-enable' => 'Ieškoti visose vardų srityse',
@@ -2778,7 +2776,6 @@ Išsaugokite jį savo kompiuteryje ir įkelkite jį čia.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript testavimas',
-'javascripttest-disabled' => 'Ši funkcija šiame wiki projekte neįjungta.',
 'javascripttest-title' => 'Vykdomas $1 testavimas',
 'javascripttest-pagetext-noframework' => 'Šis puslapis yra skirtas vykdyti JavaScript testavimus.',
 'javascripttest-pagetext-unknownframework' => 'Nežinoma "$1" testavimo struktūra.',
@@ -3751,6 +3748,9 @@ Kitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentar
 'feedback-bugcheck' => 'Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].',
 'feedback-bugnew' => 'Patikrinau. Pranešti apie naują klaidą',
 
+# Search suggestions
+'searchsuggest-search' => 'Ieškoti',
+
 # API errors
 'api-error-badaccess-groups' => 'Jums neleidžiama įkelti failus į šią wiki.',
 'api-error-badtoken' => 'Vidinė klaida: blogai atpažinimo ženklas.',
index 69f914d..b400758 100644 (file)
@@ -395,8 +395,6 @@ n = nasvareigs lobuojums.',
 'search-interwiki-caption' => 'Citi projekti',
 'search-interwiki-default' => 'Rezuļtati nu $1',
 'search-interwiki-more' => '(vaira)',
-'search-mwsuggest-enabled' => 'Ar īsacejumim',
-'search-mwsuggest-disabled' => 'Bez īsacejumim',
 'searchall' => 'vysi',
 'nonefound' => "'''Pīzeime:''' bīži vin mekliešona ir naveiksmeiga, meklejūt plaši izplateitus vuordus, pīvadumam, \"kai\" voi \"ir\", deļ tam ka tī nateik īkļauti mekliešonys datu bazā, voi ari meklejūt vairuok par vīnu vuordu (deļ tam ka rezuļtatūs pasaruodeis tikai lopys, kuramuos ir visi meklietī vuordi). Vēļ, piec nūklusiejuma, puormeklej tikai dažys ''namespaces''. Lai meklētu vysuos, mekliešonys pīprasejumam prīškā juolīkn ''all:'', voi ari analogā veidā juonūruoda puormekliejamuo ''namespace''.",
 'powersearch' => 'Smolkuo mekliešona',
index 2af1c67..df75921 100644 (file)
@@ -394,7 +394,7 @@ $2',
 
 # Login and logout pages
 '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 [[Special:UserLogin|lût leh]] thei ang.
+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.
@@ -731,8 +731,6 @@ Lamtawi hmante: '''({{int:cur}})'''= ennawnna thar ber nena danglamna, '''({{int
 'search-interwiki-caption' => 'Hmachhawppuite',
 'search-interwiki-default' => 'Chhuak $1:',
 'search-interwiki-more' => '(tam)',
-'search-mwsuggest-enabled' => 'rawtna telin',
-'search-mwsuggest-disabled' => 'rawtna tel lovin',
 'search-relatedarticle' => 'Laichin',
 'mwsuggest-disable' => 'AJAX rawtna tithi rawh',
 'searcheverything-enable' => 'Hminghmun zawng zawngah zawng rawh',
@@ -1934,4 +1932,8 @@ A bak zawng chu thuhrûk sa vek a ni ang.
 'feedback-message' => 'Thu',
 'feedback-cancel' => 'Sûtna',
 
+# Search suggestions
+'searchsuggest-search' => 'Zawnna',
+'searchsuggest-containing' => 'hemi thu telna hi...',
+
 );
index af20cc9..72e6a04 100644 (file)
@@ -307,9 +307,10 @@ $1',
 
 'ok' => 'Labi',
 'retrievedfrom' => 'Saturs iegūts no "$1"',
-'youhavenewmessages' => 'Tev ir $1 (skat. $2).',
+'youhavenewmessages' => 'Tev ir $1 (skatīt $2).',
 'newmessageslink' => 'jauns vēstījums',
 'newmessagesdifflink' => 'pēdējā izmaiņa',
+'newmessageslinkplural' => '{{PLURAL:$1|jauns vēstījums|jauni vēstījumi}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|pēdējā izmaiņa|pēdējās izmaiņas}}',
 'youhavenewmessagesmulti' => 'Tev ir jauns ziņojums: $1',
 'editsection' => 'labot',
@@ -428,7 +429,7 @@ Norādītais iemesls bija ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Tu esi izgājis no {{grammar:ģenitīvs|{{SITENAME}}}}.'''
 
-Vari turpināt to izmantot anonīmi, vari [[Special:UserLogin|atgriezties]] kā cits lietotājs vai varbūt tas pats.
+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! ==
 
@@ -932,8 +933,6 @@ $1",
 'search-interwiki-caption' => 'Citi projekti',
 'search-interwiki-default' => 'Rezultāti no $1:',
 'search-interwiki-more' => '(vairāk)',
-'search-mwsuggest-enabled' => 'ar ieteikumiem',
-'search-mwsuggest-disabled' => 'bez ieteikumiem',
 'search-relatedarticle' => 'Saistītais',
 'mwsuggest-disable' => 'Atslēgt AJAX ieteikumus',
 'searcheverything-enable' => 'Meklēt visās nosaukumvietās',
@@ -3099,6 +3098,10 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'feedback-close' => 'Gatavs',
 'feedback-bugnew' => 'Es pārbaudīju. Ziņot par jaunu kļūdu',
 
+# Search suggestions
+'searchsuggest-search' => 'Meklēt',
+'searchsuggest-containing' => 'Meklējamā frāze:',
+
 # API errors
 'api-error-filename-tooshort' => 'Faila nosaukums ir pārāk īss.',
 'api-error-http' => 'Iekšēja kļūda: Nevar izveidot savienojumu ar serveri.',
index 3a273c5..b519d82 100644 (file)
@@ -11,6 +11,7 @@
  * @author Justincheng12345
  * @author Omnipaedista
  * @author Shinjiman
+ * @author Super Wang
  */
 
 $specialPageAliases = array(
@@ -409,6 +410,8 @@ $1',
 'youhavenewmessages' => '子有$1($2)',
 'newmessageslink' => '新訊',
 'newmessagesdifflink' => '變更',
+'youhavenewmessagesfromusers' => '子有 $1 自 {{PLURAL:$3|another user|$3 簿戶也}} ($2)。',
+'youhavenewmessagesmanyusers' => '子有 $1 自多簿戶 ( $2 )',
 'youhavenewmessagesmulti' => '新訊於$1',
 'editsection' => '纂',
 'editold' => '纂',
@@ -507,6 +510,8 @@ $2',
 'namespaceprotected' => "子權未逮,莫能纂'''$1'''。",
 'ns-specialprotected' => '奇頁禁纂也。',
 'titleprotected' => "緘焉自[[User:$1|$1]]防建也。因''$2''也。",
+'invalidtitle-knownnamespace' => '無效卷題,含名域"$2"與文本"$3"',
+'exception-nologin' => '尚未登簿',
 
 # Virus scanner
 'virus-badscanner' => "壞設:不明之病掃:''$1''",
@@ -516,7 +521,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''子去簿矣'''
 
-子可匿名還覽{{SITENAME}},或[[Special:UserLogin|復登]]同簿、異簿。
+子可匿名還覽{{SITENAME}},或<span class='plainlinks'>[$1 復登]</span>同簿、異簿。
 未清謄本,覽器文舊,且慎之。",
 'welcomecreation' => '== $1大駕光臨! ==
 子簿增矣,敬更[[Special:Preferences|簿註]]。',
@@ -581,6 +586,7 @@ $2',
 'noemailprefs' => '郵驛設而用之。',
 'emailconfirmlink' => '惠考郵驛',
 'invalidemailaddress' => '驛址不格,惠正略之。',
+'cannotchangeemail' => '電郵地址不可改于此wiki',
 'accountcreated' => '簿增矣',
 'accountcreatedtext' => '$1簿增矣',
 'createaccount-title' => '於{{SITENAME}}增簿',
@@ -615,6 +621,10 @@ $2',
 爾或改符,或求新臨符。',
 'resetpass-temp-password' => '臨符節:',
 
+# Special:PasswordReset
+'passwordreset' => '重設符節',
+'passwordreset-legend' => '重設符節',
+
 # Edit page toolbar
 'bold_sample' => '粗體',
 'bold_tip' => '粗體',
@@ -706,6 +716,7 @@ $2',
 'updated' => '(新)',
 'note' => "'''註'''",
 'previewnote' => "'''此乃預覽,尚未儲焉。'''",
+'continue-editing' => '續纂',
 'session_fail_preview' => "'''歉哉有變,子纂未存焉,惠再之。如復不成,[[Special:UserLogout|重登]]再試也。'''",
 'session_fail_preview_html' => "'''歉哉有變,子纂未存焉'''
 
@@ -895,7 +906,9 @@ $1",
 'revdelete-only-restricted' => '藏期於 $1 $2 之項:爾無廢有秩見之項,而無選另廢項也。',
 'revdelete-reason-dropdown' => '*常因
 ** 侵權
-** 無合之人料',
+** 無合之人料
+** 無合之簿
+** 隱謗譏',
 'revdelete-otherreason' => '它附因:',
 'revdelete-reasonotherlist' => '它因',
 'revdelete-edit-reasonlist' => '纂刪因',
@@ -985,8 +998,6 @@ $1",
 'search-interwiki-caption' => '結義金蘭',
 'search-interwiki-default' => '結果有$1:',
 'search-interwiki-more' => '(多)',
-'search-mwsuggest-enabled' => '有議',
-'search-mwsuggest-disabled' => '無議',
 'search-relatedarticle' => '關',
 'mwsuggest-disable' => '停AJAX議',
 'searcheverything-enable' => '尋全名集',
index 469b493..4c12a97 100644 (file)
 
 $fallback = 'tr';
 
+$namespaceNames = array(
+       NS_MEDIA            => 'Medya',
+       NS_SPECIAL          => 'Doxmeli',
+       NS_TALK             => 'Ğarğala',
+       NS_USER             => 'Maxmare',
+       NS_USER_TALK        => 'Maxmare_mesaji',
+       NS_PROJECT_TALK     => '$1_ğarğala',
+       NS_FILE             => 'Dosya',
+       NS_FILE_TALK        => 'Dosya_ğarğala',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_ğarğala',
+       NS_TEMPLATE         => 'Şabloni',
+       NS_TEMPLATE_TALK    => 'Şabloni_ğarğala',
+       NS_HELP             => 'Meşvela',
+       NS_HELP_TALK        => 'Meşvela_ğarğala',
+       NS_CATEGORY         => 'Kʼatʼegori',
+       NS_CATEGORY_TALK    => 'Kʼatʼegori_ğarğala',
+);
+
+$namespaceAliases = array(
+       // Turkish namespace names.
+       'Medya'              => NS_MEDIA,
+       'Özel'               => NS_SPECIAL,
+       'Tartışma'           => NS_TALK,
+       'Kullanıcı'          => NS_USER,
+       'Kullanıcı_mesaj'    => NS_USER_TALK,
+       '$1_tartışma'        => NS_PROJECT_TALK,
+       'Dosya'              => NS_FILE,
+       'Dosya_tartışma'     => NS_FILE_TALK,
+       'MediaWiki_tartışma' => NS_MEDIAWIKI_TALK,
+       'Şablon'             => NS_TEMPLATE,
+       'Şablon_tartışma'    => NS_TEMPLATE_TALK,
+       'Yardım'             => NS_HELP,
+       'Yardım_tartışma'    => NS_HELP_TALK,
+       'Kategori'           => NS_CATEGORY,
+       'Kategori_tartışma'  => NS_CATEGORY_TALK,
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => "Link'iş tude kogu3’uxaçki:",
@@ -223,6 +261,7 @@ Dudicoxopes oxmaruşi yasaği na ren ar, varna daha dido kʼarakʼtʼeri uğun.'
 'userlogout' => 'Siteşen Kogamaxti',
 'nologin' => "Hesabi va giğuni? '''$1'''",
 'nologinlink' => 'Hesabi dokʼidi.',
+'gotaccountlink' => 'Sitʼeşa amaxti',
 'mailmypassword' => 'Ağne pʼarola-çkimi moncğoni',
 
 # Change password dialog
@@ -306,7 +345,7 @@ Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 'revertmerge' => 'Artikʼartişen okʼo3ʼkʼi',
 
 # Diffs
-'history-title' => '"$1" butʼkʼaşi tarixi',
+'history-title' => 'Butʼkʼaşi tarixi "$1"',
 'lineno' => '$1. satʼiri:',
 'compareselectedversions' => 'Na goşiğen versiyonepe okʼo3ʼiri',
 'editundo' => 'ukʼuni',
@@ -329,8 +368,6 @@ Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 'search-interwiki-caption' => 'Cuma projepe',
 'search-interwiki-default' => '$1 sonucepe:',
 'search-interwiki-more' => '(çkva)',
-'search-mwsuggest-enabled' => 'okʼvandupete',
-'search-mwsuggest-disabled' => 'okʼvandu varen',
 'searchall' => 'mteli',
 'nonefound' => "'''Notʼi''': Xvala, namtini svacoxope maartani oqʼopinot igoren.
 Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (oğarğaluşi butʼkʼape, şablonepe, doçkva şeyepeti iqʼvasen) mgori varna pʼrefiksi oqʼopinot na igoren svacoxo ixmarit.",
@@ -581,7 +618,7 @@ Am butʼkʼaşi oçvuşi sinori gaktirinen; ama am oktiroba, kʼademoni oçvalu
 # Block/unblock
 'blockip' => 'Maxmares bloği qʼvi',
 'ipboptions' => '2 saatʼi:2 hours,1 ndğa:1 day,3 ndğa:3 days,1 doloni:1 week,2 doloni:2 weeks,1 tuta:1 month,3 tuta:3 months,6 tuta:6 months,1 3ʼana:1 year,pʼanda:infinite',
-'ipblocklist' => 'Bloği xveneri na renan IP adresepe do maxmareş coxope',
+'ipblocklist' => 'Bloği do maxmareş',
 'blocklink' => 'bloği qʼvi',
 'unblocklink' => 'bloği kezdi',
 'change-blocklink' => 'bloği doktiri',
index dccadb8..2cdf041 100644 (file)
@@ -15,6 +15,7 @@
  * @author Kumariprity
  * @author Manojberma77
  * @author Meno25
+ * @author Nemo bis
  * @author Priyanka.rachna.jha
  * @author Rajesh
  * @author Reedy
@@ -421,7 +422,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''अहाँ निष्क्रमण कऽ गेल छी।'''
 
-अहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ [[Special:UserLogin|log in again]] वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।
+अहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ <span class='plainlinks'>[$1 log in again]</span> वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।
 ई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।",
 'welcomecreation' => '== स्वागत अछि, $1! ==
 अहाँक खाता खुजि गेल अछि।
@@ -1017,8 +1018,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 'search-interwiki-caption' => 'सम्बन्धित परियोजना सभ',
 'search-interwiki-default' => '$1 सभटा परिणाम:',
 'search-interwiki-more' => '(आर)',
-'search-mwsuggest-enabled' => 'सलाहक संग',
-'search-mwsuggest-disabled' => 'कोनो सलाह नै',
 'search-relatedarticle' => 'सम्बन्धी',
 'mwsuggest-disable' => 'AJAX सलाह अमान्य करू',
 'searcheverything-enable' => 'सभ नामस्थान सभमे ताकू',
@@ -3532,8 +3531,8 @@ $5
 'logentry-move-move-noredirect' => '$1 {{लिंग:$2|हटाएल}} पन्ना $3 सँ $4 घुमौआकेँ बिना छोड़ने',
 'logentry-move-move_redir' => '$1 {{लिंग:$2|हटाएल}} पन्ना $3 सँ $4 घुमौआक अतिरिक्त',
 'logentry-move-move_redir-noredirect' => '$1 {{लिंग:$2|हटाएल}} पन्ना $3 सँ $4 घुमौआक अतितिक्त घुमौआकेँ बिना छोड़ने',
-'logentry-patrol-patrol' => '$1 {{लिंग:$2|चिन्हित}} संशोधन $4 $3 पन्नाक निरीक्षित',
-'logentry-patrol-patrol-auto' => '$1 स्वतः {{लिंग:$2|चिन्हित}} संशोधन $4 $3 पन्नाक निरीक्षित',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|चिन्हित}} संशोधन $4 $3 पन्नाक निरीक्षित',
+'logentry-patrol-patrol-auto' => '$1 स्वतः {{GENDER:$2|चिन्हित}} संशोधन $4 $3 पन्नाक निरीक्षित',
 'logentry-newusers-newusers' => '$1 {{लिंग:$2|बनाएल}} एकटा प्रयोक्ता खाता',
 'logentry-newusers-create' => '$1 {{लिंग:$2|बनाएल}} एकटा प्रयोक्ता खाता',
 'logentry-newusers-create2' => '$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3',
index 1e462df..7b6732d 100644 (file)
@@ -409,7 +409,7 @@ Alesane yakuwe "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Rika uwis metu log sekang sistem.'''
 
-Rika teyeng terus nggunakna {{SITENAME}} kanthi anonim, utawa Rika teyeng [[Special:UserLogin|mlebu log maning]] nganggo jeneng panganggo sing padha utawa sejene.
+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! ==
 
@@ -885,8 +885,6 @@ Gatèkna, angger nganggo pranala navigasi kuwe bakalan nge-reset kolom kiye.',
 'search-interwiki-caption' => 'Proyek liyane',
 'search-interwiki-default' => 'Hasil $1:',
 'search-interwiki-more' => '(terusane)',
-'search-mwsuggest-enabled' => 'nganggo saran',
-'search-mwsuggest-disabled' => 'ora ana saran',
 'search-relatedarticle' => 'Kagandhèng',
 'mwsuggest-disable' => 'Non-aktifna saran AJAX',
 'searcheverything-enable' => 'Goleti nang kabeh bilik jeneng',
index 4c4697c..a40808d 100644 (file)
@@ -147,28 +147,31 @@ $messages = array(
 'tog-underline' => 'Сюлмафкснень алга китькстамс:',
 'tog-justify' => 'Тиемс сёрматфть фкакс ушедоматнень лопать кувалмова',
 'tog-hideminor' => 'Од полафтоматнень эса кяшемс ёмланя видептематне',
+'tog-hidepatrolled' => 'Кяшемс лувонь кирдихнень видептемаснон мекольце полафнематнень эса',
+'tog-newpageshidepatrolled' => 'Кяшемс лувонь кирдихнень эса видептьф лопат од лопань лувса',
 'tog-extendwatchlist' => 'Келептемс мельгеваномать сембе полафтоматнень няфтемга, аф аньцек мекольценнет',
-'tog-usenewrc' => 'Ð\9dолдак Ñ\82евÑ\81 Ñ\86ебÑ\8fÑ\80Ñ\8cгоÑ\84Ñ\82Ñ\84 Ð¾Ð´ Ð¸Ð»Ñ\8fкÑ\81Ñ\82опÑ\82омаÑ\82 (Ñ\8dÑ\80Ñ\8fви JavaScript)',
+'tog-usenewrc' => 'Ð\9fолгаÑ\8fÑ\84Ñ\82омÑ\81 Ð¸Ð»Ñ\8fкÑ\81Ñ\82опÑ\82омаÑ\82ненÑ\8c Ð»Ð¾Ð¿Ð°Ð½Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 Ð¼ÐµÐºÐ¾Ð»Ñ\8cÑ\86е Ð¿Ð¾Ð»Ð°Ñ\84немаÑ\82ненÑ\8c Ñ\8dÑ\81а Ð´Ð¸ Ð¼ÐµÐ»Ñ\8cгеваномаÑ\81а (веÑ\88и JavaScript)',
 'tog-numberheadings' => 'Сёрмадома коняксс лувомтяшксне эслек путовихть',
 'tog-showtoolbar' => 'Кядьёнкс седяфксть няфтемс сёрмадомбачк (JavaScript)',
 'tog-editondblclick' => 'Кафксть люпштазь сувамс сёрматфть петнема (JavaScript)',
 'tog-editsection' => 'Няфтемс сюлмафксть [петемс] эрь пяльксонди',
 'tog-editsectiononrightclick' => 'Петнемс пялькстне: люпштамс сёрмадомбяльксть лемонц лангс видешире пуняса (JavaScript)',
 'tog-showtoc' => 'Няфтемс сёрматфть потмакс (лопатнень, конатнень эса 3 сёрмадома конякста лама)',
-'tog-rememberpassword' => 'Ð\92анÑ\84Ñ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ñ\81Ñ\83вама Ð»ÐµÐ¼Ð¾Ð·Ðµ Ñ\82Ñ\8f Ñ\81одама Ð¼Ð°Ñ\88инаÑ\81а (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ñ\82еÑ\84Ñ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82не Ð¼Ð¾Ð½Ñ\8c мельгеваномазон',
-'tog-watchdefault' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ð¿ÐµÑ\82нема Ð»Ð¾Ð¿Ð°Ð½Ðµ Ð¼Ð¾Ð½Ñ\8c мельгеваномазон',
-'tog-watchmoves' => 'Ð\9bопаÑ\82ненÑ\8c Ñ\88аÑ\88Ñ\84Ñ\82омÑ\81Ñ\82а Ñ\81Ñ\83ваÑ\84Ñ\82омÑ\81 Ñ\81инÑ\8c Ð¼Ð¾Ð½Ñ\8c мельгеваномазон',
-'tog-watchdeletion' => 'Ð\9bопаÑ\82ненÑ\8c Ð½Ð°Ñ\80дамÑ\81Ñ\82а Ñ\81Ñ\83ваÑ\84Ñ\82омÑ\81 Ñ\81инÑ\8c Ð¼Ð¾Ð½Ñ\8c мельгеваномазон',
+'tog-rememberpassword' => 'Ð\92анÑ\84Ñ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ñ\81Ñ\83вама Ð»ÐµÐ¼Ð¾Ð·Ðµ Ñ\82Ñ\8f Ñ\81одаммаÑ\88инаÑ\81а (Ñ\81Ñ\8fда ÐºÑ\83ваÑ\82Ñ\8c $1 {{PLURAL:$1|Ñ\88и|Ñ\88иÑ\82}})',
+'tog-watchcreations' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c, ÐºÐ¾Ð½Ð°Ñ\82ненÑ\8c Ñ\82иине Ð´Ð¸ Ñ\84айлаÑ\82, ÐºÐ¾Ð½Ð°Ñ\82ненÑ\8c Ñ\82онгине мельгеваномазон',
+'tog-watchdefault' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð´Ð¸ Ñ\84айлаÑ\82ненÑ\8c, ÐºÐ¾Ð½Ð°Ñ\82ненÑ\8c Ð¿ÐµÑ\82неÑ\81айне мельгеваномазон',
+'tog-watchmoves' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð´Ð¸ Ñ\84айлаÑ\82ненÑ\8c, ÐºÐ¾Ð½Ð°Ñ\82ненÑ\8c Ñ\88аÑ\88Ñ\84Ñ\82Ñ\8bне мельгеваномазон',
+'tog-watchdeletion' => 'СÑ\83ваÑ\84Ñ\82омÑ\81 Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð´Ð¸ Ñ\84айлаÑ\82ненÑ\8c, ÐºÐ¾Ð½Ð°Ñ\82ненÑ\8c Ð½Ð°Ñ\80дÑ\8bне мельгеваномазон',
 'tog-minordefault' => 'Тяшксемс сембе петема анцяйнятне мъзярс илякс изь мярьгов',
 'tog-previewontop' => 'Няфтемс сёрматфть васень няфтемать петемань седяфксть инголе',
 'tog-previewonfirst' => 'Васень няфтема васенце петнемада меле',
-'tog-nocache' => 'Ð\90Ñ\84 Ð¼Ñ\8fÑ\80Ñ\8cгома Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ñ\8dÑ\81лек Ð²Ð°Ð½Ñ\84неви Ñ\84айлÑ\81нон Ñ\82иемÑ\81',
-'tog-enotifwatchlistpages' => 'Кучемс электрононь сёрма монь ванома лопать илякстоптомада меле',
+'tog-nocache' => 'Ð\9aаÑ\80дамÑ\81 Ð¸Ð½Ñ\82еÑ\80неÑ\82Ñ\81 Ð²Ñ\8fÑ\82иенди Ñ\8dÑ\81лек Ð²Ð°Ð½Ñ\84неви Ñ\84айлÑ\85ненÑ\8c Ñ\82иема',
+'tog-enotifwatchlistpages' => 'Кучт тейне е-сёрма мзярда монь мельгеваномаста лопат илякстоптовихть',
 'tog-enotifusertalkpages' => 'Кучемс электрононь сёрма монь тиить корхтама лопанц илякстоптомада меле',
-'tog-enotifminoredits' => 'Кучемс электрононь сёрма нъльне петема анцяйняда меле',
+'tog-enotifminoredits' => 'Кучт тейне е-сёрма нъльне мъзярда лопат эди файлхт аф ламне видептевихть',
 'tog-enotifrevealaddr' => 'Штафтомс монь электрононь адресозе пачфтема сёрмаса',
 'tog-shownumberswatching' => 'Няфтемс мъзяра сувсида конат арафтозь лопать эсь мельгеваномазост',
+'tog-oldsig' => 'Афкуксонь кядьтяшкс',
 'tog-fancysig' => 'Кядьтяшкст улихть викитекстокс (эслек тиеви сюлмафксфтома)',
 'tog-externaleditor' => 'Нолдамс тевс ушеширень петнить мъзярс илякс изь мярьгов (аньцек тевонь содайхненди, сяс мес эрявихть башка кядьёнкст-арафнемат содама машинаса)',
 'tog-externaldiff' => 'Нолдамс тевс ушеширень програм верзиень ваксс путоманкса мъзярс илякс изь мярьгов (аньцек тевонь содайхненди, сяс мес эрявихть башка кядьёнкст-арафнемат содама машинаса)',
@@ -281,6 +284,7 @@ $messages = array(
 'faqpage' => 'Project:Сидеста Кеподеви Кизефксне',
 
 # Vector skin
+'vector-action-addsection' => 'Поладомс мезень колга корхтамс',
 'vector-action-delete' => 'Нардамс',
 'vector-action-move' => 'Шашфтомс',
 'vector-action-protect' => 'Араламс',
@@ -445,7 +449,7 @@ $messages = array(
 'readonlytext' => 'Датабазась тяни пякстаф од сёрмадоматненди эли полафнематненди, шятьта нежедематненди, меле сон мърдай эрьшинь покаманцты.
 
 Оцюнясь кона сонь пякстазе арьсезе сонь шарьхкотьфтемац: $1',
-'missing-article' => 'Ð\94аÑ\82абазаÑ\81а Ð°Ñ\84 Ð¼Ñ\83ви Ñ\82екÑ\81Ñ\82 конань эряви мумс, сонь лемоц "$1" $2.
+'missing-article' => 'СодамоÑ\88инÑ\8c Ð¿Ð°Ñ\80гÑ\81а Ð°Ñ\84 Ð¼Ñ\83ви Ñ\82екÑ\81Ñ\82Ñ\81Ñ\8c конань эряви мумс, сонь лемоц "$1" $2.
 
 Тя сидеста лиси мъзярда молят сирелготф верзиева эли историянь сюлмафксова, кона вяти нардаф лопас.
 
@@ -498,7 +502,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Тон лисеть.'''
 
-Тондейть ули кода ащемс {{SITENAME}}са апак содак эли [[Special:UserLogin|сувак тага весть]] кода сяка эли иля тиись.
+Тондейть ули кода ащемс {{SITENAME}}са апак содак эли <span class='plainlinks'>[$1 сувак тага весть]</span> кода сяка эли иля тиись.
 Кой-кона лопатне илядсть стамкс кодамкс синь ульсть тонь лисемада инголе мъзярс тонь интернет полатксце изь аруяфтов эсь ванфневи файлхнень эзда.",
 'welcomecreation' => '== Сувак, $1! ==
 
@@ -521,6 +525,7 @@ $2',
 'createaccount' => 'Тиемс од сёрматфтомась',
 'gotaccount' => "Сёрматфтыть ни? '''$1'''.",
 'gotaccountlink' => 'Сувамс',
+'userlogin-resetlink' => 'Сувама эрявикснень юкстайть?',
 'createaccountmail' => 'электрононь сёрма вельде',
 'badretype' => 'Сувама валхне тон путыть аф фкат.',
 'userexists' => 'Тя лемсь кой-кие сявозь ни. Эняльттяма, арьсек иля лемсь.',
@@ -675,6 +680,9 @@ $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>, аньцек тонь аш мярьговомаце тя лопать ушедомс.',
 'userpage-userdoesnotexist' => 'Сёрматфтомась «<nowiki>$1</nowiki>» лемса аш. Арьсек лацкаста, афкукс тонь улендяряй мяльце тиемс эли полафтомс тя лопать.',
 'clearyourcache' => "'''Шарфтк мяльце:''' Ванфтомада меле од полафнематнень ваноманкса тондейть эряви нардамс эслек ванфневи файлхнень тонь интернет полатксонь вальмастонза. '''Mozilla / Firefox / Safari:''' ''Shift'' кирдезь, люпштак ''Reload'', эли люпштак ''Ctrl-Shift-F5'' эли ''Ctrl-R'' (''Command-Shift-R'' Mac машинаса); '''Konqueror: '''люпштак ''Reload'' эли люпштак ''F5;'' '''Opera:''' програмса тондейть эрявксты нардамс сембе эслек ванфневи файлхт  ''Tools→Preferences'' вельде; '' '''Internet Explorer:''' ''Ctrl'' кирдезь люпштакшнек ''Refresh'' эли люпштак ''Ctrl-F5.''",
 'usercssyoucanpreview' => "'''Мялень максома:''' Ванфтомада инголе нолдак тевс 'Васень няфтема' пунять тонь од CSS эли JS файлть варжаманкса.",
@@ -684,7 +692,7 @@ $2',
 'userinvalidcssjstitle' => "'''Инголе мярьгома:''' Аш тема файл \"\$1\" мазопнеманкса. Киртть мяльсот .css эди .js лопас путови аньцек ёмла тяшкса коняксне, кепотьксонди {{ns:user}}:Foo/лем.css афи {{ns:user}}:Foo/Лем.css.",
 'updated' => '(Одонзаф)',
 'note' => "'''Шарфтк мяльце:'''",
-'previewnote' => "'''ТÑ\8f Ð°Ð½Ñ\8cÑ\86ек Ð²Ð°Ñ\81енÑ\8c Ð½Ñ\8fÑ\84Ñ\82емаÑ\81Ñ\8c; Ð¿Ð¾Ð»Ð°Ñ\84немаÑ\82не Ð½Ð¸Ð½Ð³Ðµ Ð¸Ñ\81Ñ\82Ñ\8c Ð²Ð°Ð½Ñ\84Ñ\82ов!'''",
+'previewnote' => "'''Ð\9aиÑ\80Ñ\82Ñ\82Ñ\8c Ð¼Ñ\8fлÑ\8cÑ\81оÑ\82, Ñ\82Ñ\8f Ð°Ð½Ñ\8cÑ\86ек Ð²Ð°Ñ\81енÑ\8c Ð½Ñ\8fÑ\84Ñ\82емаÑ\81Ñ\8c.''' Ð¢Ð¾Ð½Ñ\8c Ð¿Ð¾Ð»Ð°Ñ\84Ñ\82омаÑ\82не Ð½Ð¸Ð½Ð³Ðµ Ð¸Ñ\81Ñ\82Ñ\8c Ð²Ð°Ð½Ñ\84Ñ\82ов!",
 'previewconflict' => 'Текстсь тя васень няфтемаса няфтеви вярдень петнема паксяса стамкс кодамкс сон няеволь ванфтомада меле.',
 'session_fail_preview' => "'''Аш кода тонь петнемаце сувафтомс мекольце информациень юмафтомать сюнеда.
 Тик одукс.
@@ -801,6 +809,7 @@ $3 макссь туфталсь - ''$2''",
 Шарьхкотьфтема: (тян.) = тяниень верзиеда явомась,
 (сяд.) = сядынгольдень верзияда явомась, Ё = ёмла петнема.',
 'history-fieldset-title' => 'Вешентть история',
+'history-show-deleted' => 'Аньцек нардаф',
 'histfirst' => 'Кунардонь',
 'histlast' => 'Мекольце',
 'historysize' => '({{PLURAL:$1|1 байт|$1 байтт}})',
@@ -847,6 +856,8 @@ $3 макссь туфталсь - ''$2''",
 'revdelete-success' => "'''Верзиеть няевоманц одонзафозь лац.'''",
 'logdelete-success' => "'''Сёрматфть няевомац арафтовсь лац.'''",
 'revdel-restore' => 'Полафтомс няевомац',
+'revdel-restore-deleted' => 'нардаф верзиет',
+'revdel-restore-visible' => 'няеви верзиет',
 'pagehist' => 'Лопать историяц',
 'deletedhist' => 'Нардаф историяц',
 'revdelete-edit-reasonlist' => 'Петнемс нардамань туфталхне',
@@ -888,12 +899,12 @@ $3 макссь туфталсь - ''$2''",
 'mergelogpagetext' => 'Ванк ала сяда мекольдень лопатнень фкя фкянь мархта шоворемаснон историясна.',
 
 # Diffs
-'history-title' => '"$1"-нь верзиетнень историясна',
+'history-title' => '"$1"нь полафнематнень историясна',
 'difference-multipage' => 'Явомась лопаланготнень ёткова',
 'lineno' => 'Кикссь $1:',
 'compareselectedversions' => 'Путомс кочкаф верзиетнень ваксс',
 'editundo' => 'валхтомс',
-'diff-multi' => '({{PLURAL:$1|$1-нь ётконь верзиец изь няфтев|$1-нь ётконь верзиенза исть няфтев}}.)',
+'diff-multi' => '({{PLURAL:$1|ёткопингонь верзие, конась|$1 ёткопингонь верзиет, конатне}} {{PLURAL:$2|тии тизе|$2 тиихть тизь}} апак няфтек)',
 
 # Search results
 'searchresults' => 'Мезе мувсь',
@@ -908,6 +919,9 @@ $3 макссь туфталсь - ''$2''",
 'notextmatches' => 'Лопаса сёрматфсь изь мув',
 'prevn' => 'сядынголень {{PLURAL:$1|$1}}',
 'nextn' => 'сай {{PLURAL:$1|$1}}',
+'prevn-title' => 'Сядынгольдень $1 {{PLURAL:$1|сафкс|сафкст}}',
+'nextn-title' => 'Сядомелень $1 {{PLURAL:$1|сафкс|сафкст}}',
+'shown-title' => 'Няфтемс лопасонза $1 {{PLURAL:$1|сафкс|сафкст}}',
 'viewprevnext' => 'Ваномс ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Вешендема арафнематне',
 'searchmenu-exists' => "'''Тя Викиса ули лопась \"[[:\$1]]\" лем мархта'''",
@@ -925,6 +939,7 @@ $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-score' => 'Малавиксши: $1%',
 'search-redirect' => '(шашфтт $1с)',
 'search-section' => '(пялькс $1)',
@@ -932,14 +947,13 @@ $3 макссь туфталсь - ''$2''",
 'search-interwiki-caption' => 'Сазоронь проекттне',
 'search-interwiki-default' => '$1 муфкст:',
 'search-interwiki-more' => '(сяда лама)',
-'search-mwsuggest-enabled' => 'мяль максоматнень мархта',
-'search-mwsuggest-disabled' => 'мяль максоматнень ашет',
 'search-relatedarticle' => 'Мала',
 'mwsuggest-disable' => 'Лоткак AJAX мяль максоматне тевс нолдама',
 'searchrelated' => 'мала',
 'searchall' => 'сембе',
 'showingresults' => "Ала няфтеви {{PLURAL:$1|мувсь '''1'''|мувсть '''$1'''}} '''$2'''-ста ушедомс.",
 'showingresultsnum' => "Ала няфтеви {{PLURAL:$3|мувсь '''1'''|мувсть '''$3'''}} '''$2'''-ста ушедомс.",
+'showingresultsheader' => "{{PLURAL:$5|'''$1''' сафкс '''$3'''-ста|'''$1 - $2''' сафкст '''$3'''-ста}} '''$4'''нди",
 'nonefound' => "'''Шарфтк мяльце''': Аньцек мъзярошка лемботмат вешендевихть инголе апак полафтт. Тяряфтт вешендема валда инголе путомс ''all:'' сембе потмонь вешендеманди (корхнема лопат ди шаблотт сявомок, ди с. т) эли кундак эрявикс лемботмос кода валынгольксс.",
 'search-nonefound' => 'Аш вешфксонди малады муфкст.',
 'powersearch' => 'Сядонга вешендемс',
@@ -1032,6 +1046,7 @@ $3 макссь туфталсь - ''$2''",
 'email' => 'Электрононь адресце',
 'prefs-help-realname' => 'Афкуксонь лемце путомась аф лувови эрявикс. Афкуксонь лемцень тязк путомада меле тонь лемце кармай эвондама лопаса тонь петнемацень ала.',
 'prefs-help-email' => 'Электрононь адресце тяса аф лувови эрявикс, интай юкстандярят сувама валце адресце путомась лезды сонь полафтоманди.',
+'prefs-help-email-others' => 'Тондейть ули кода путомс корхнема лопазот е-паргцень, конань вельде иля ломатне сёрмадовихть тейть. Е-паргце аф кармай няеви мзярда иля тиихне тяшнелихть тейть.',
 'prefs-help-email-required' => 'Эряви электрононь адресце.',
 
 # User rights
@@ -1182,6 +1197,10 @@ $3 макссь туфталсь - ''$2''",
 'recentchanges-legend' => 'Мекольце полафнематнень арафнемасна',
 'recentchanges-summary' => 'Ваномс сяда мекольце Викиса полафнематнень мельге тя лопаса.',
 'recentchanges-feed-description' => 'Ваномс сяда мекольце Викиса полафнематнень мельге тя шудемаса.',
+'recentchanges-label-newpage' => 'Тя видептемась од лопа тись',
+'recentchanges-label-minor' => 'Тя ёмланя видептема',
+'recentchanges-label-bot' => 'Тя видептемась тизе кона-бди робот програм',
+'recentchanges-label-unpatrolled' => 'Тя видептемась ашесь пова патруль ала ни',
 'rcnote' => "Ала {{PLURAL:$1|мекольце '''1''' полафнема|мекольце '''$1''' полафнемат}} '''$2''' ётай  {{PLURAL:$2|шис|шис}}, $5, $4ста.",
 'rcnotefrom' => "Ала няфтезь полафнематне '''$2'''-ста ('''$1'''-с).",
 'rclistfrom' => 'Няфтемс од полафнематне $1-ста ушедомс',
@@ -1346,7 +1365,7 @@ $3 макссь туфталсь - ''$2''",
 'filehist-dimensions' => 'Кувалма',
 'filehist-filesize' => 'Файлонь кувалмоц',
 'filehist-comment' => 'Мяльполаткс',
-'imagelinks' => 'Файл сюлмафкст',
+'imagelinks' => 'Файлань тевс нолнема',
 'linkstoimage' => 'Сай {{PLURAL:$1|лопась сюлмаф|$1 лопатне сюлмафт}} вага тя файлть мархта:',
 'linkstoimage-more' => '$1-да лама {{PLURAL:$1|лопа сюлмаф|лопат сюлмафт}} тя файлть мархта.
 Тя лувомаса няфневихть {{PLURAL:$1|васенце лопань сюлмафксоц|васенце $1 лопань сюлмафкссна}} аньцек тя файлть мархта.
@@ -1355,6 +1374,8 @@ $3 макссь туфталсь - ''$2''",
 'morelinkstoimage' => 'Ванк [[Special:WhatLinksHere/$1|сяда лама сюлмафкст]] тя файлонди.',
 'duplicatesoffile' => 'Сай {{PLURAL:$1|файлсь ащи кафонзафксокс|$1 файлхне ащихть кафонзафксокс}} тя файлонди ([[Special:FileDuplicateSearch/$2|сяда лама информацие]]):',
 'sharedupload' => 'Тя файлсь $1ста ди сонь ули кода сувафтомс иля проектс.',
+'sharedupload-desc-here' => 'Тя файлась $1ста ди сонь ули кода сувафтомс иля проектс.
+Колганза тяштьф [$2 файлать азондома лопазонза] конась няфтеви ала.',
 'uploadnewversion-linktext' => 'Тонгодемс тя файлонь од верзиенц',
 
 # File reversion
@@ -1495,6 +1516,7 @@ $3 макссь туфталсь - ''$2''",
 'listusers' => 'Тиихне',
 'listusers-editsonly' => 'Няфтемс аньцек петнематнень мархта тиихнень',
 'usereditcount' => '$1 {{PLURAL:$1|петнема|петнемат}}',
+'usercreated' => '{{GENDER:$3|Шкаф}} $1 шиста $2 пингста',
 'newpages' => 'Од лопат',
 'newpages-username' => 'Тиить лемоц:',
 'ancientpages' => 'Сембода сире лопат',
@@ -1619,6 +1641,7 @@ $3 макссь туфталсь - ''$2''",
 # Watchlist
 'watchlist' => 'Монь мельгеваномазе',
 'mywatchlist' => 'Монь мельгеваномазе',
+'watchlistfor2' => '$1 $2-нди',
 'nowatchlist' => 'Мезеге аш тонь мельгеваномасот.',
 'watchlistanontext' => '$1 тонь ванома мельгеваномаста лопат ваноманкса эли петнеманкса.',
 'watchnologin' => 'Апак сувак',
@@ -1700,6 +1723,7 @@ $UNWATCHURL
 'confirmdeletetext' => 'Тон сърхкать нардамс лопать сембе сонь историянц мархта.
 Эняльттяма, кемокстак тон афкукс ёрат тянь тиемс, эди тон шарьхкодьсак мезе лиси тяда меле, ди тон сембе тянь тисак [[{{MediaWiki:Policy-url}}|политик]] коряс.',
 'actioncomplete' => 'Тевонь тиемась анок',
+'actionfailed' => 'Тиемась изь лисе',
 'deletedtext' => 'Лопась "$1" нардафоль. Ванк $2 мекольце нардаматнень няфтеманкса.',
 'dellogpage' => 'Нардамань лувома',
 'dellogpagetext' => 'Ватт сяда мекольце нардаматнень лувомась ала.',
@@ -1812,6 +1836,7 @@ $UNWATCHURL
 'undelete-nodiff' => 'Сядынгольдень верзиет исть мув.',
 'undeletebtn' => 'Мърдафтомс',
 'undeletelink' => 'ваномс/мърдафтомс',
+'undeleteviewlink' => 'ваномс',
 'undeletereset' => 'Валхтомс',
 'undeleteinvert' => 'Валхтомс кочкама',
 'undeletecomment' => 'Мяльполаткс:',
@@ -1858,10 +1883,13 @@ $1',
 'sp-contributions-newbies-title' => 'Тиить путксонза од сёрматфтоматненди',
 'sp-contributions-blocklog' => 'Сёлгомань лувомась',
 'sp-contributions-deleted' => 'нардаф тиинь путксонза',
+'sp-contributions-uploads' => 'Тонгодемат',
+'sp-contributions-logs' => 'Сувама лувомат',
 'sp-contributions-talk' => 'корхтама',
 'sp-contributions-userrights' => 'тиинь видекснень вятема',
 'sp-contributions-search' => 'Вешендемс путкст',
 'sp-contributions-username' => 'IP адрес эли тиить лемоц:',
+'sp-contributions-toponly' => 'Няфтемс аньцек мекольце верзиетнень ёткса видептематне',
 'sp-contributions-submit' => 'Вешендема',
 
 # What links here
@@ -2207,6 +2235,7 @@ $1',
 'tooltip-rollback' => '"Потафтфкс" мърдафтсыне петнематне мекольце тиинь путксонц лопазонза фкя люпштамас.',
 'tooltip-undo' => '"Каряньфтема" мърдафтсыне тя петнемать эди панжесы петнема форм васень няфтемаса.
 Лезни поладомс туфталхт лихтемать эс.',
+'tooltip-summary' => 'Тяштьк нюрьхкяняста сувафтфть колга',
 
 # Metadata
 'notacceptable' => 'Вики серверонди аш кода максомс информациесь стама форматса конань эса тонь клиентти ули кода сонь морафтомс.',
@@ -2767,6 +2796,9 @@ $5
 
 #Путт сембе васу валзюлмафксонь пакшензон тя луфть (строкать) вельфке. Катт тя луфть (строкать) стамкс кодамкс сон ульсь</pre>',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Tag]] педямась:',
+
 # New logging system
 'revdelete-restricted' => 'нолдаф тевс кардафксне системонь вятиксненди',
 'revdelete-unrestricted' => 'системонь вятиксненди кардафксне валхтфт',
index e243293..ec6defb 100644 (file)
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#FIHODINANA', '#REDIRECTION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__TSYASIANALAHATRA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__TSYASIANAGALLERY__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__TEREONYLAHATRA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__LAHATRA__', '__LAHAT__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__TSYAZOOVAINA__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'VOLANA', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'VOLANA1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ANARAMBOLANA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ANARAMBOLANAGEN', 'ANARANAVOLANA', 'CURRENTMONTHNAME', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ANARAMBOLANAFOHY', 'ANARANAVOLANAFOHY', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ANDRO', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ANDRO2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ANARANANDRO', 'ANARANAANDRO', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAONA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'LERA', 'HORAIREACTUEL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'VOLANAANTOERANA', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'VOLANAANTOERANA1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ANARAMBOLANAANTOERANA', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ANARAMBOLANAANTOERANAGEN', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ANARAMBOLANAANTOERANAFOHY', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ANDROANTOERANA', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ANDROANTOERANA2', 'JOUR2LOCAL', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ANARANANDROANTOERANA', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'TAONAANTOERANA', 'ANNEELOCALE', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LERAANTOERANA', 'HORAIRELOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORAANTOERANA', 'HEURELOCALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ISAPEJY', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ISALAHATSORATRA', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ISARAKITRA', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ISAMPIKAMBANA', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ISAMPIKAMBANAMANOVA', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ISAFANOVANA', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ISATOPIMASO', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ANARAMPEJY', 'ANARANAPEJY', 'NOMPAGE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ANARAMPEJYX', 'ANARANAPEJYX', 'NOMPAGEX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ANARANTSEHATRA', 'ANARANASEHATRA', 'ESPACENOMMAGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ANARANTSEHATRAX', 'ANARANASEHATRAX', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PEJINDRESAKA', 'PEJYRESAKA', 'DINIKA', 'ESPACEDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PEJINDRESAKAX', 'PEJYRESAKAX', 'DINIKAX', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'TOERANALAHATSORATRA', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'TOERANNYLAHATSORATRA', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ANARAMPEJYFENO', 'ANARANAPEJYFENO', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ANARAMPEJYFENOX', 'ANARANAPEJYFENOX', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ANARANAZANAPEJY', 'ANARANJANAPEJY', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ANARANJANAPEJYX', 'ANARANAZANAPEJYX', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ANARANAFOTOPEJY', 'ANARAMPOTOPEJY', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ANARANAFOTOPEJYE', 'ANARAMPOTOPEJYE', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ANARAMPEJINDRESAKA', 'ANARANAPEJINDRESAKA', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
-       'img_right'               => array( '1', 'ankavanana', 'droite', 'right' ),
-       'img_left'                => array( '1', 'ankavia', 'gauche', 'left' ),
-       'img_none'                => array( '1', 'tsymisy', 'néant', 'neant', 'none' ),
-       'img_center'              => array( '1', 'ampivoany', 'anivony', 'centré', 'center', 'centre' ),
-       'img_page'                => array( '1', 'pejy $1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'sisiny', 'bordure', 'border' ),
-       'img_top'                 => array( '1', 'ambony', 'haut', 'top' ),
-       'img_middle'              => array( '1', 'anivo', 'milieu', 'middle' ),
-       'img_bottom'              => array( '1', 'ambany', 'bas', 'bottom' ),
-       'currentweek'             => array( '1', 'HERINANDRO', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ALAHADY', 'JDSACTUEL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'HERINANDROANTOERANA', 'SEMAINELOCALE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ALAHADYANTOERANA', 'JDSLOCAL', 'LOCALDOW' ),
-       'fullurl'                 => array( '0', 'URLREHETRA:', 'URLCOMPLETE:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLREHETRAX:', 'URLCOMPLETEX:', 'FULLURLE:' ),
-       'displaytitle'            => array( '1', 'ASEHOLOHATENY', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
+       'redirect'                  => array( '0', '#FIHODINANA', '#REDIRECTION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__TSYASIANALAHATRA__', '__AUCUNSOMMAIRE__', '__AUCUNETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__TSYASIANAGALLERY__', '__AUCUNEGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__TEREONYLAHATRA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__LAHATRA__', '__LAHAT__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__TSYAZOOVAINA__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'VOLANA', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'VOLANA1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ANARAMBOLANA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ANARAMBOLANAGEN', 'ANARANAVOLANA', 'CURRENTMONTHNAME', 'NOMGENMOISACTUEL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ANARAMBOLANAFOHY', 'ANARANAVOLANAFOHY', 'ABREVMOISACTUEL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ANDRO', 'JOURACTUEL', 'JOUR1ACTUEL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ANDRO2', 'JOUR2ACTUEL', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ANARANANDRO', 'ANARANAANDRO', 'NOMJOURACTUEL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAONA', 'ANNEEACTUELLE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'LERA', 'HORAIREACTUEL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORA', 'HEUREACTUELLE', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'VOLANAANTOERANA', 'MOISLOCAL', 'MOIS2LOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'VOLANAANTOERANA1', 'MOIS1LOCAL', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ANARAMBOLANAANTOERANA', 'NOMMOISLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ANARAMBOLANAANTOERANAGEN', 'NOMGENMOISLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ANARAMBOLANAANTOERANAFOHY', 'ABREVMOISLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ANDROANTOERANA', 'JOURLOCAL', 'JOUR1LOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ANDROANTOERANA2', 'JOUR2LOCAL', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ANARANANDROANTOERANA', 'NOMJOURLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'TAONAANTOERANA', 'ANNEELOCALE', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LERAANTOERANA', 'HORAIRELOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORAANTOERANA', 'HEURELOCALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ISAPEJY', 'NOMBREPAGES', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ISALAHATSORATRA', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ISARAKITRA', 'NOMBREFICHIERS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ISAMPIKAMBANA', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ISAMPIKAMBANAMANOVA', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ISAFANOVANA', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ISATOPIMASO', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ANARAMPEJY', 'ANARANAPEJY', 'NOMPAGE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ANARAMPEJYX', 'ANARANAPEJYX', 'NOMPAGEX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ANARANTSEHATRA', 'ANARANASEHATRA', 'ESPACENOMMAGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ANARANTSEHATRAX', 'ANARANASEHATRAX', 'ESPACENOMMAGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PEJINDRESAKA', 'PEJYRESAKA', 'DINIKA', 'ESPACEDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PEJINDRESAKAX', 'PEJYRESAKAX', 'DINIKAX', 'ESPACEDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'TOERANALAHATSORATRA', 'ESPACESUJET', 'ESPACEARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'TOERANNYLAHATSORATRA', 'ESPACESUJETX', 'ESPACEARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ANARAMPEJYFENO', 'ANARANAPEJYFENO', 'NOMPAGECOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ANARAMPEJYFENOX', 'ANARANAPEJYFENOX', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ANARANAZANAPEJY', 'ANARANJANAPEJY', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ANARANJANAPEJYX', 'ANARANAZANAPEJYX', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ANARANAFOTOPEJY', 'ANARAMPOTOPEJY', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ANARANAFOTOPEJYE', 'ANARAMPOTOPEJYE', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ANARAMPEJINDRESAKA', 'ANARANAPEJINDRESAKA', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
+       'img_right'                 => array( '1', 'ankavanana', 'droite', 'right' ),
+       'img_left'                  => array( '1', 'ankavia', 'gauche', 'left' ),
+       'img_none'                  => array( '1', 'tsymisy', 'néant', 'neant', 'none' ),
+       'img_center'                => array( '1', 'ampivoany', 'anivony', 'centré', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'pejy $1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'sisiny', 'bordure', 'border' ),
+       'img_top'                   => array( '1', 'ambony', 'haut', 'top' ),
+       'img_middle'                => array( '1', 'anivo', 'milieu', 'middle' ),
+       'img_bottom'                => array( '1', 'ambany', 'bas', 'bottom' ),
+       'currentweek'               => array( '1', 'HERINANDRO', 'SEMAINEACTUELLE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ALAHADY', 'JDSACTUEL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'HERINANDROANTOERANA', 'SEMAINELOCALE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ALAHADYANTOERANA', 'JDSLOCAL', 'LOCALDOW' ),
+       'fullurl'                   => array( '0', 'URLREHETRA:', 'URLCOMPLETE:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLREHETRAX:', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'displaytitle'              => array( '1', 'ASEHOLOHATENY', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
 );
 
 $fallback = 'fr';
@@ -529,12 +529,11 @@ Mitaky version $1-n'i MediaWiki",
 # General errors
 'error' => 'Tsy mety',
 'databaseerror' => "Tsy fetezana eo amin'ny toby",
-'dberrortext' => 'Nisy tsy fetezana ao amin\'ny fangatahana tany amin\'ny database.
-Inoana fa ny rindrankajy no misy olana (bug).
-Ny fangatahana farany dia:
-<blockquote><tt>$1</tt></blockquote>
-tao amin\'ny tao "<tt>$2</tt>".
-Toy izao no navalin\'ny MySQL "<tt>$3: $4</tt>".',
+'dberrortext' => "Nitranga ny hadisoana ara-pirafi-kataka (syntax error).
+Mety noho ny tsifandehanan'ny rindrankajy tsara izany.
+<blockquote><code>$1</code></blockquote>
+avy amin'ny tao « <code>$2</code> ».
+ary « <samp>$3 : $4</samp> » no hadisoana naverinn'ny banky angona.",
 'dberrortextcl' => "Ao amin'ny fangatahana tao amin'ny banky angona dia misy tsi-fetezana ara-pehezanteny.
 Ny fangatahana farany nalefa dia :
 « $1 »
@@ -612,7 +611,7 @@ Ny antony napetraka dia : « ''$2'' ».",
 # Login and logout pages
 'logouttext' => "'''Tafavoaka ianao ankehitriny.'''
 
-Mbola afaka mampiasa ny {{SITENAME}} ianao na dia ef anivoaka aza, na afaka [[Special:UserLogin|miverina mihiditra]] ianao ambanin'ny anaranao na anaram-pikambana hafa.
+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! ==
 
@@ -869,10 +868,9 @@ Azonao atao ny [[Special:Search/{{PAGENAME}}|Mikaroka momba ny lohatenin'io pejy
 'blocked-notice-logextract' => "Ankehitriny ity mpikambana ity dia voasakana.
 Ny fampidirana faran'ny laogin'ny fanakanam-pikambana dia naseho teo ambany ho an'ny fampahalalàna :",
 'clearyourcache' => "'''Fantaro :''' Rehefa avy mitahiry, dia mila terenao ny fanavaozana ny voatakon'ny mpitety tranonkalanao hahafahanao mahita ny fanovana.
-'''Firefox/Safari:''' Tazomy ho voapotsitra ny kitika ''Maj'' na ''Shift'', dia tsindrio eo amin'i ''Actualiser'', na tsindrio Ctrl+F5
-'''Google Chrome:''' Miaraka tsindrio Ctrl, Maj ary R.
-'''Internet Explorer''': Miaraka tsindrio Ctrl sy F5
-'''Konqueror''': Tsindrio F5
+'''Firefox/Safari:''' Tazomy ho voapotsitra ny kitika ''Maj'' na ''Shift'', dia tsindrio eo amin'i ''Actualiser'', na Ctrl+F5
+'''Google Chrome:''' Tsindrio miaraka ny Ctrl, Maj ary R.
+'''Internet Explorer''': Tsindrio miaraka Ctrl sy F5
 '''Opera''': Esory ny voatatoka ao amin'ny ''Outils → Préférences'' (''Fitaovana  → Safidy'').",
 'usercssyoucanpreview' => "'''Fika:''' Ampiasao ny bokotra 'Tsipalotra' mialoha ny hitehirizanao ny CSS-nao vaovao.",
 'userjsyoucanpreview' => "'''Fika:''' Ampiasao ny bokotra 'Tsipalotra' mialoha ny hitehirizanao ny JS-nao vaovao.",
@@ -1216,8 +1214,6 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 'search-interwiki-caption' => 'zandri-tetikasa',
 'search-interwiki-default' => "Valiny amin'ny $1 :",
 'search-interwiki-more' => '(be kokoa)',
-'search-mwsuggest-enabled' => 'misy hevitra',
-'search-mwsuggest-disabled' => 'tsy misy hevitra',
 'search-relatedarticle' => 'voadinika',
 'mwsuggest-disable' => 'Aza atao ny toro-hevitra AJAX',
 'searcheverything-enable' => "Hitady anatin'ny anaran-tsehatra rehetra:",
@@ -1268,7 +1264,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'prefs-rc' => 'Vao niova',
 'prefs-watchlist' => 'Lisitry ny pejy arahana-maso',
 'prefs-watchlist-days' => "Isa ny andro haseho anatin'ny lisitra ny pejy arahana-maso",
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => '$1 {{PLURAL:$1|}} andro farafahabetsany',
 'prefs-watchlist-edits' => "Isa ny fanovana aseho eo amin'ny fanaraha-maso navelatra:",
 'prefs-watchlist-edits-max' => 'Isa fara-fahabetsany : 1000',
 'prefs-watchlist-token' => "token ho an'ny lisitry ny pejy arahi-maso:",
@@ -1398,7 +1394,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'group-autoconfirmed' => 'Mpikambana voamarina',
 'group-bot' => 'Mpikambana rôbô',
 'group-sysop' => 'Mpandrindra',
-'group-bureaucrat' => 'Borōkraty',
+'group-bureaucrat' => 'Borôkraty',
 'group-suppress' => 'Mpitondra',
 'group-all' => '(izy rehetra)',
 
@@ -1413,7 +1409,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'grouppage-autoconfirmed' => '{{ns:project}}:Mpikambana Voamafy',
 'grouppage-bot' => '{{ns:project}}:Mpikambana rôbô',
 'grouppage-sysop' => '{{ns:project}}:Mpandrindra',
-'grouppage-bureaucrat' => '{{ns:project}}:Borōkraty',
+'grouppage-bureaucrat' => '{{ns:project}}:Borôkraty',
 'grouppage-suppress' => '{{ns:project}}:Oversight',
 
 # Rights
@@ -1603,13 +1599,13 @@ Raha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto
 'illegalfilename' => 'Misy litera tsy mety amin\'ny lohateny ny anaran\'ilay rakita "$1". Azafady soloy ny anaran\'ny rakitra dia andramo alefa indray.',
 'filename-toolong' => 'Tsy afaka mihoatra ny 240 oktety ny anaran-drakitra.',
 'badfilename' => 'Novana ho "$1" ny anaran\'ny rakitra.',
-'filetype-mime-mismatch' => "Ny karazan-drakitra dia tsy miady amin'ny karazana MIME.",
+'filetype-mime-mismatch' => 'Ny karazan-drakitra ".$1" dia tsy miady amin\'ny karazana MIME novinavinaina ho azy ho an\'ilay rakitra ($2).',
 'filetype-badmime' => 'Ny karazan-drakitra MIME « $1 » dia tsy afaka ampidirina.',
 'filetype-bad-ie-mime' => "Tsy afaka ampidirina ilay rakitra satria hitan'i Internet Explorer faha « $1 » izy, midika rakitra voarara satria mety mampidi-doza",
 'filetype-unwanted-type' => "Karazan-drakitra tsy tiana ny karazan-drakitra '''« .$1 »'''.
 {{PLURAL:$3||}}Ny karazan-drakitra fidiana dia $2.",
-'filetype-banned-type' => "Rarana ato ny karazan-drakitra '''« .$1 »'''
-{{PLURAL:$3||}}Ny karazan-drakitra ekena dia $2.",
+'filetype-banned-type' => "'''\".\$1\"'''dia {{PLURAL:\$4|anisan'ny|}} karazan-drakitra voarara.
+Karazan-drakitra azo alefa {{PLURAL:\$3||}} \$2.",
 'filetype-missing' => 'Tsy manan-karazan-drakitra ilay rakitra (hoatry ny « .jpg » ohatra).',
 'empty-file' => 'Tsy manam-botoatiny ny rakitra nalefanao.',
 'file-too-large' => 'Ngeza loatra ny rakitra nalefanao.',
@@ -1638,9 +1634,8 @@ Mba hanao azy, tsy maintsy ovainao manokana ilay pejy [[$1|thumb]]",
 * Anaran-drakitra ho ampidirina : <strong>[[:$1]]</strong>
 * Anaran-drakitra misy : <strong>[[:$2]]</strong>
 Misafidia anarana hafa.',
-'fileexists-thumbnail-yes' => "
-Hoatry ny saritapaka ''(vignette)'' ilay sary. [[$1|thumb]]
-Marino ilay rakitra <strong>[[:$1]]</strong>.
+'fileexists-thumbnail-yes' => "Ohatry ny sary nakelezina ilay rakitra. [[$1|thumb]]
+Mba marino ilay rakitra <strong>[[:$1]]</strong>.
 Raha mitovy amin'ny sary voalohany ny sarin'ilay rakitra marinina, tsy ilaina ny mampiditra santiôna nakelezina.",
 'file-thumbnail-no' => "Manomboka amin'ny <strong>$1</strong> ny anaran'ilay rakitra.
 Mety saritapaka ''(vignette)'' io sary io.
@@ -1680,7 +1675,7 @@ Tokony marina ny $1 aloha ny manao fampidirana vaovao.',
 'filename-bad-prefix' => "Ny anaran-drakitra ho ampidirinareo dia manomboka amin'ny '''« $1 »''', anarana omena an'ny fakan-tsary elektirônika.
 Misafidia anaran-drakitra mambangovango.",
 'upload-success-subj' => 'Voaray soa aman-tsara ny rakitra',
-'upload-success-msg' => 'Eto ny rakitra nalefanao : [[:{{ns:file}}:$1]]',
+'upload-success-msg' => "Vita soa aman-tsara ilay fandefasan-drakitra avy amin'i [$2]. Eto ny toerana mety ahitanao ny rakitrao : [[:{{ns:file}}:$1]]",
 'upload-failure-subj' => 'Olana nitranga teo am-pandefasana',
 'upload-failure-msg' => "Nisy olana tamin'ny fampidiranao [$2] :
 
@@ -1703,6 +1698,8 @@ Raha mbola misy foana ilay  olana, manorata any amin'ny [[Special:ListUsers/syso
 'backend-fail-stream' => 'Tsy afaka mamaky ilay rakitra $1.',
 'backend-fail-backup' => 'Tsy afaka mitahiry ilay rakitra $1.',
 'backend-fail-hashes' => "Tsy azo ilay hash an-drakitra ho an'ny fampitahana.",
+'backend-fail-notsame' => "Efa misy rakitra samihafa ho an'i $1",
+'backend-fail-invalidpath' => '$1 dia lalam-pitahirizana tsy azo raisina.',
 'backend-fail-delete' => 'Tsy afaka mamafa ilay rakitra $1.',
 'backend-fail-alreadyexists' => 'Efa misy ilay rakitra $1.',
 'backend-fail-store' => 'Tsy afaka mitahiry ilay rakitra $1 anaty $2.',
@@ -1824,6 +1821,7 @@ Tsindrio eo amin'ny lohan-tsanganana raha hanova ny laharam-pisehoana.",
 'linkstoimage' => "Ireto avy no {{PLURAL:$1|pejy mirohy|pejy mirohy}} ($1) amin'io rakitra io:",
 'nolinkstoimage' => "Tsy misy pejy mirohy amin'ity sary ity.",
 'morelinkstoimage' => "Hijery [[Special:WhatLinksHere/$1|rohy fanampiny]] makany amin'io rakitra io.",
+'linkstoimage-redirect' => '$1 (fihodinana) $2',
 'sharedupload' => "Mety ho rakitra itambarana amin'ny tetikasa hafa ny rakitra $1.",
 'sharedupload-desc-here' => "Avy amin'i $1 io rakitra io ary mety ampiasain'ny tetikasa hafa.
 Aseho eo ambany ny [$2 famisavisana ilay rakitra].",
@@ -2004,8 +2002,8 @@ wiki ity aza izy.</p>",
 'booksources-invalid-isbn' => 'Ny ISBN nomena dia mety diso ; marino raha diso ianao teo am-pandikanana ny loharano fotony.',
 
 # Special:Log
-'specialloguserlabel' => 'Mpikambana:',
-'speciallogtitlelabel' => 'Lohateny:',
+'specialloguserlabel' => 'Mpikambana nanao :',
+'speciallogtitlelabel' => 'Tanjona (lohateny na mpikambana) :',
 'log' => 'Tatitr’asa',
 'all-logs-page' => 'Ny tatitr’asa',
 'alllogstext' => "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.
@@ -2045,12 +2043,13 @@ Vangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
 'sp-deletedcontributions-contribs' => "fandraisan'anjara",
 
 # Special:LinkSearch
-'linksearch' => 'Rohy ivelany',
+'linksearch' => 'Fikarohana rohy ivelany',
 'linksearch-pat' => 'Volana tadiavina :',
 'linksearch-ns' => 'Anaran-tsehatra :',
 'linksearch-ok' => 'Fikarohana',
-'linksearch-text' => 'Ny soratra « joker » dia azo soratana ohatra <code>*.wikipedia.org</code>. br />
-Prôtôkôly zaka : <code>$1</code>.',
+'linksearch-text' => "Azo ampiasaina ny soratra joker toa i « *.wikipedia.org ».
+Mila top-level domain ambonimbony kokoa izy ireo, sahala « *.org » <br />
+Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'linksearch-line' => "$1 dia voarohy amin'ny $2",
 'linksearch-error' => "Ny soratra joker dia ampiasaina anatin'ny fanombohan'ny anaran-tsehatry ny milina hôte ihany.",
 
@@ -2061,8 +2060,8 @@ Prôtôkôly zaka : <code>$1</code>.',
 'listusers-blocked' => '(voasakana)',
 
 # Special:ActiveUsers
-'activeusers' => 'lisitra ny mpikambana miasa',
-'activeusers-intro' => "Ity ny lisitra ny mpikambana niasa teto tanatin'ny $1 andro farany {{PLURAL:}}",
+'activeusers' => 'Lisitry ny mpikambana mavitrika',
+'activeusers-intro' => 'Ity ny lisitry ny mpikambana izay nanao zavatra iray nandritry ny andro $1 farany. {{PLURAL:}}',
 'activeusers-count' => "Nanova in-$1 tao anatin'ny $3 andro{{PLURAL:}}",
 'activeusers-from' => 'Aseho ny mpikambana hatry ny :',
 'activeusers-hidebots' => 'Asitriho ny robo',
@@ -2078,7 +2077,7 @@ Prôtôkôly zaka : <code>$1</code>.',
 'listgrouprights-group' => 'Vondrona/Gropy',
 'listgrouprights-rights' => 'Fahefana miaraka aminy',
 'listgrouprights-helppage' => "Help:Fahefan'ny vondrona",
-'listgrouprights-members' => '(lisitra ny mpikambana)',
+'listgrouprights-members' => '(lisitry ny mpikambana)',
 'listgrouprights-addgroup' => '{{PLURAL:$2}}Manampy ny mpikambana : $1',
 'listgrouprights-removegroup' => "Manala ny mpikambana {{PLURAL:$2}}amin'ny gropy : $1",
 'listgrouprights-addgroup-all' => 'Manampy mpikambana anaty vondrona rehetra',
@@ -2096,7 +2095,7 @@ dia ahafahana mandefa hafatra tokana ho any aminy ity fisy eto ambany ity.
 Ny adiresy imailakao napetrakao tao amin'ny mombamomba anao no hiseho hoe
 adiresin'ny mpandefa izany imailaka izany, koa afaka hovaliany izay hafatra alefanao.",
 'usermailererror' => "Misy tsy mety amin'ny lohatenin'ny imailaka:",
-'defemailsubject' => "imailaka avy amin'ny sehatra {{SITENAME}}",
+'defemailsubject' => '{{SITENAME}} Mailaky ny mpikambana "$1"',
 'usermaildisabled' => 'Tsy azo mifandefa imailaka ny mpikambana',
 'usermaildisabledtext' => "Tsy mahazo mandefa imailaka any amin'ny mpikamban'ity wiki ity ianao",
 'noemailtitle' => 'Tsy misy adiresy imailaka',
@@ -2154,7 +2153,7 @@ Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindr
 'watchmethod-list' => 'fanamarinana ny pejy arahana ahitana fanovana farany',
 'watchlistcontains' => "Ao amin'ny pejy arahanao dia ahitana pejy $1{{PLURAL:}}.",
 'iteminvalidname' => "Olana amin'ny zavatra « $1 » : tsy ara-dalàna ny anarana...",
-'wlnote' => "Eo ambany eo ny {{PLURAL:}}fanovana farany $1 natao tanatin'ny $2 ora farany teo.",
+'wlnote' => "Eo ambany dia ahitana ny  {{PLURAL:$1|fanovana farany indrindra|ny fanovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
 'wlshowlast' => 'Haneho ny $1 ora farany, ny $2 andro farany na $3',
 'watchlist-options' => 'Safidy ny lisitry ny pejy arahana',
 
@@ -2263,6 +2262,7 @@ Ho ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy
 'protect-title-notallowed' => "Hijery ny lentam-piarovana ho an'i « [[$1]] »",
 'prot_1movedto2' => '[[$1]] voaova anarana ho [[$2]]',
 'protect-badnamespace-title' => 'Anaran-tsehatra tsy azo arovana',
+'protect-badnamespace-text' => "Tsy afaka arovana ny pejy ao amin'io anaran-tsehatra io.",
 'protect-legend' => 'Fanekena ny fiarovana pejy',
 'protectcomment' => 'Antony :',
 'protectexpiry' => 'Daty fitsaharana :',
@@ -2466,6 +2466,7 @@ Ampiasao ity fisy eto ambany ity hanalana ny sakana
 mihatra amin'ny adiresy IP na solonanarana iray.",
 'ipusubmit' => 'Esory ny sakana',
 'unblocked' => "voaala ny sakan'i [[User:$1|$1]]",
+'unblocked-range' => "Afaka ny sakan'i $1.",
 'unblocked-id' => "Niala ny sakan'i $1",
 'blocklist' => 'Mpikambana voasakana',
 'ipblocklist' => 'Lisitry ny adiresy IP sy mpikambana voasakana',
@@ -2630,7 +2631,7 @@ mifanaraka amin'ilay anarana vaovao. Azafady mba atambaro izay pejin-dresaka iza
 
 Efa misy ny lahatsoratra hoe "[[:$1]]". Irinao ve ny hamafana azy mba hahafahana mamindra toerana ity lahatsoratra ity?',
 'delete_and_move_confirm' => 'Eny, fafao io pejy io',
-'delete_and_move_reason' => 'Fafao mba hamindrana toerana ny anankiray',
+'delete_and_move_reason' => "Pejy voafafa hahafahana manolo ny anaran'i ''[[$1]]''",
 'selfmove' => 'Mitovy ny anarana taloha sy anarana vaovao; tsy afaka afindra ny pejy.',
 'immobile-source-namespace' => "Tsy afaka ovaina anarana ny pejy ao amin'ny anaran-tsehatra « $1 »",
 'immobile-target-namespace' => "Tsy afaka ovainao ny pejy makany amin'ny anaran-sehatra « $1 »",
@@ -2649,7 +2650,7 @@ Efa misy ao amina petra-drakitra zaraina ny rakitra [[:$1]]. Raha ovaina anarana
 Anarana hafa omena.",
 
 # Export
-'export' => 'Hanondrana pejy',
+'export' => 'Hamoaka pejy',
 'exporttext' => "Afaka manondrana ny lahatsoratra miaraka amin'ny tantaram-panovana ny pejy na vondrom-pejy maromaro ianao.
 Aoriana dia mety hafaran'ny wiki iray mandeha amin'ny rindrankajy MediaWiki izany, na dia mbola tsy afaka
 atao aza izany amin'izao fotoana izao.
@@ -2678,7 +2679,8 @@ Etsy amin'ny toerana farany dia afaka mampiasa rohy ihany koa ianao, ohatra [[{{
 'allmessagesname' => 'Anarana',
 'allmessagesdefault' => 'Dikan-teny tany am-boalohany',
 'allmessagescurrent' => 'Dikan-teny miasa ankehitriny',
-'allmessagestext' => "Ity no lisitry ny system messages misy eto amin'ity MediaWiki: namespace ity.",
+'allmessagestext' => "Ity dia lisitry ny hafatra hita ao amin'ny anaran-tsehatra MediaWiki.
+Andana vangio ny [//www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
 'allmessagesnotsupportedDB' => "Tsy mbola mandeha ny '''{{ns:special}}:Allmessages''' satria tsy mandeha koa ny '''\$wgUseDatabaseMessages'''.",
 'allmessages-filter-legend' => 'Tantavanina',
 'allmessages-filter' => 'Hanasivana araka ny satam-panovana :',
@@ -2809,6 +2811,7 @@ Ampesao ny topi-maso aloha no mihatiry.",
 'tooltip-diff' => "Asehoy izay novainao tamin'ny lahatsoratra.",
 'tooltip-compareselectedversions' => "Jereo ny fahasamihafana amin'ireo votoatin'ny pejy anankiroa ireo.",
 'tooltip-watch' => "Ampidiro amin'ny lisitry ny pejy arahinao maso ity pejy ity",
+'tooltip-watchlistedit-normal-submit' => 'Hanala ny lohateny',
 'tooltip-recreate' => 'Hamorona ilay pejy fanindroany raha efa voafafa izy',
 'tooltip-upload' => 'Hanomboka ny fampidirana',
 'tooltip-rollback' => "Manala ny fanovan'ny mpikambana farany nanova azy ilay asa « foano » (Rollback) .",
@@ -2843,11 +2846,11 @@ Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny a
 
 # Info page
 'pageinfo-title' => 'Fampahalalana ho an\'i "$1"',
-'pageinfo-header-edits' => 'Fanovana',
+'pageinfo-header-edits' => "Tantaran'ny fanovana",
 'pageinfo-views' => "Isan'ny jery",
-'pageinfo-watchers' => "Isan'ny mpikambana manaraka an'ity pejy ity",
-'pageinfo-edits' => "Isan'ny fanovana",
-'pageinfo-authors' => "Isan'ny mpanoratra tokana",
+'pageinfo-watchers' => "Isan'ny mpandray anjara manaraka",
+'pageinfo-edits' => "Isa manontolon'ny fanovana",
+'pageinfo-authors' => "Isa manontolon'ny mpandray anjara",
 
 # Patrolling
 'markaspatrolleddiff' => 'Marihana ho voamarina',
@@ -2888,6 +2891,7 @@ Raha alefanao ilay izy, mety ho simban'io renifango io ny solosainao.",
 'widthheightpage' => '$1 × $2, pejy $3{{PLURAL:}}',
 'file-info' => 'Haben-drakitra : $1, karazana MIME : $2',
 'file-info-size' => "$1 × $2 teboka, haben'ilay rakitra : $3, endrika MIME : $4",
+'file-info-size-pages' => '$1 × $2 teboka, haben-drakitra : $3, karazana MIME $4, pejy $5 {{PLURAL:}}',
 'file-nohires' => "Tsy misy sary ngeza non'io",
 'svg-long-desc' => 'rakitra SVG, habe $1 × $2 teboka, habe : $3',
 'show-big-image' => "Hijery ny tena haben'ny sary",
index 4c3a3f6..77eb3d2 100644 (file)
@@ -72,14 +72,14 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_right'               => array( '1', 'пурла', 'справа', 'right' ),
-       'img_left'                => array( '1', 'шола', 'слева', 'left' ),
-       'img_border'              => array( '1', 'чек', 'граница', 'border' ),
-       'img_sub'                 => array( '1', 'йымалне', 'под', 'sub' ),
-       'img_super'               => array( '1', 'ӱмбалне', 'над', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'кӱшычын', 'сверху', 'top' ),
-       'img_middle'              => array( '1', 'покшелне', 'посередине', 'middle' ),
-       'img_bottom'              => array( '1', 'ӱлычын', 'снизу', 'bottom' ),
+       'img_right'                 => array( '1', 'пурла', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'шола', 'слева', 'left' ),
+       'img_border'                => array( '1', 'чек', 'граница', 'border' ),
+       'img_sub'                   => array( '1', 'йымалне', 'под', 'sub' ),
+       'img_super'                 => array( '1', 'ӱмбалне', 'над', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'кӱшычын', 'сверху', 'top' ),
+       'img_middle'                => array( '1', 'покшелне', 'посередине', 'middle' ),
+       'img_bottom'                => array( '1', 'ӱлычын', 'снизу', 'bottom' ),
 );
 
 $messages = array(
@@ -515,8 +515,6 @@ $messages = array(
 'search-interwiki-caption' => 'Родо проект-влак',
 'search-interwiki-default' => "$1'ште мумо:",
 'search-interwiki-more' => '(эше)',
-'search-mwsuggest-enabled' => 'темлымаш дене',
-'search-mwsuggest-disabled' => 'темлымаш деч посна',
 'searchall' => 'чыла',
 'nonefound' => "'''Ешартыш''':  Посна каласыме огыл дык, кычалмаш южо лӱм-влакын кумдыкышто эрта. Уло лӱм-влакын кумдыкышто кычалашлан(чӱктен каҥашымаш лаштык-влакым, ямдылык-влакым и туге молат) шке йодмашыштет ''all:'' префиксым кучылт, але кӱлешан лӱм-влакын кумдыкым ончыкто.",
 'search-nonefound' => 'Тыйын йодышлан нимом кычален мумо уке.',
index a5ea00d..0ac1ac6 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'    => 'Rātapu',
-'monday'    => 'Rāhina',
-'tuesday'   => 'Rātū',
+'sunday' => 'Rātapu',
+'monday' => 'Rāhina',
+'tuesday' => 'Rātū',
 'wednesday' => 'Rāapa',
-'thursday'  => 'Rāpare',
-'friday'    => 'Rāmere',
-'saturday'  => 'Rāhoroi',
-'january'   => 'Kohi-tātea',
-'february'  => 'Hui-tanguru',
-'march'     => 'Poutū-te-rangi',
-'april'     => 'Paenga-whāwhā',
-'may_long'  => 'Haratua',
-'june'      => 'Pipiri',
-'july'      => 'Hōngongoi',
-'august'    => 'Here-turi-kōkā',
+'thursday' => 'Rāpare',
+'friday' => 'Rāmere',
+'saturday' => 'Rāhoroi',
+'january' => 'Kohi-tātea',
+'february' => 'Hui-tanguru',
+'march' => 'Poutū-te-rangi',
+'april' => 'Paenga-whāwhā',
+'may_long' => 'Haratua',
+'june' => 'Pipiri',
+'july' => 'Hōngongoi',
+'august' => 'Here-turi-kōkā',
 'september' => 'Mahuru',
-'october'   => 'Whiringa-ā-nuku',
-'november'  => 'Whiringa-ā-rangi',
-'december'  => 'Hakihea',
+'october' => 'Whiringa-ā-nuku',
+'november' => 'Whiringa-ā-rangi',
+'december' => 'Hakihea',
 
-'cancel'     => 'Whakakore',
-'mytalk'     => 'Karere mōku',
+'cancel' => 'Whakakore',
+'mytalk' => 'Karere mōku',
 'navigation' => 'Huarahi',
 
 # Cologne Blue skin
@@ -44,39 +44,39 @@ $messages = array(
 # Vector skin
 'vector-view-view' => 'Rīti',
 
-'help'             => 'Whakamārama',
-'search'           => 'Rapua',
-'go'               => 'Haere',
-'history'          => 'Kōrero Nehe',
-'history_short'    => 'Tuhinga/kaituhi',
+'help' => 'Whakamārama',
+'search' => 'Rapua',
+'go' => 'Haere',
+'history' => 'Kōrero Nehe',
+'history_short' => 'Tuhinga/kaituhi',
 'printableversion' => 'Tāia',
-'permalink'        => 'Hononga toitū',
-'edit'             => 'Whakatika',
-'delete'           => 'tangohia',
-'protect'          => 'Whakangungua',
+'permalink' => 'Hononga toitū',
+'edit' => 'Whakatika',
+'delete' => 'tangohia',
+'protect' => 'Whakangungua',
 'talkpagelinktext' => 'Kōrerohia',
-'talk'             => 'Kōrerorero',
-'toolbox'          => 'Pouaka utauta',
+'talk' => 'Kōrerorero',
+'toolbox' => 'Pouaka utauta',
 
 # 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'            => 'Mo {{SITENAME}}',
-'currentevents'        => 'Kōrero',
-'currentevents-url'    => 'Project:Kōrero',
-'mainpage'             => 'Hau Kāinga',
+'aboutsite' => 'Mo {{SITENAME}}',
+'currentevents' => 'Kōrero',
+'currentevents-url' => 'Project:Kōrero',
+'mainpage' => 'Hau Kāinga',
 'mainpage-description' => 'Hau Kāinga',
-'portal'               => 'Tomokanga hapori',
-'portal-url'           => 'Project:Tomokanga hapori',
-'privacy'              => 'Tikanga tūmataiti',
-'privacypage'          => 'Project:Tikanga tūmataiti',
+'portal' => 'Tomokanga hapori',
+'portal-url' => 'Project:Tomokanga hapori',
+'privacy' => 'Tikanga tūmataiti',
+'privacypage' => 'Project:Tikanga tūmataiti',
 
-'toc'     => 'Rārangi kōrero',
+'toc' => 'Rārangi kōrero',
 'showtoc' => 'whakakite',
 'hidetoc' => 'hunaia',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'tuhi pānui',
+'nstab-main' => 'tuhi pānui',
 'nstab-template' => 'papa tauira',
-'nstab-help'     => 'Āwhina',
+'nstab-help' => 'Āwhina',
 'nstab-category' => 'Wāhanga',
 
 # Login and logout pages
@@ -84,19 +84,19 @@ $messages = array(
 
 # Edit pages
 'savearticle' => 'Tiaki',
-'showdiff'    => 'Tiro rerekētanga',
+'showdiff' => 'Tiro rerekētanga',
 
 # Preferences page
 'preferences' => 'Kōwhiringa',
 
 # Recent changes
 'recentchanges' => 'Rerekētanga hōu',
-'hide'          => 'Hunaia',
-'show'          => 'Whakaaturia',
+'hide' => 'Hunaia',
+'show' => 'Whakaaturia',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Rerekētanga pū tahi',
-'recentchangeslinked-feed'    => 'Rerekētanga pū tahi',
+'recentchangeslinked' => 'Rerekētanga pū tahi',
+'recentchangeslinked-feed' => 'Rerekētanga pū tahi',
 'recentchangeslinked-toolbox' => 'Rerekētanga pū tahi',
 
 # Upload
@@ -109,18 +109,18 @@ $messages = array(
 'move' => 'Nekehia',
 
 # Special:AllPages
-'allpages'       => 'Ngā whārangi katoa',
+'allpages' => 'Ngā whārangi katoa',
 'allpagessubmit' => 'Haere',
 
 # Watchlist
-'watchlist'   => 'Rārangi mātaki',
+'watchlist' => 'Rārangi mātaki',
 'mywatchlist' => 'Rārangi mātaki',
-'watch'       => 'Mātaki',
-'unwatch'     => 'kāti te mātaki',
+'watch' => 'Mātaki',
+'unwatch' => 'kāti te mātaki',
 
 # Contributions
 'contributions' => 'Ngā mahi a tēnei mema',
-'mycontris'     => 'āku mahi',
+'mycontris' => 'āku mahi',
 
 # What links here
 'whatlinkshere' => 'Ngā hononga mai',
index a71605a..b5f7718 100644 (file)
@@ -214,12 +214,12 @@ $messages = array(
 'unprotectthispage' => 'Bukak palindungan laman iko',
 'newpage' => 'Laman baru',
 'talkpage' => 'Musyawarahkan laman ko',
-'talkpagelinktext' => 'Kecek',
+'talkpagelinktext' => 'Maota',
 'specialpage' => 'Laman istimewa',
 'personaltools' => 'Peralatan pribadi',
 'postcomment' => 'Bagian baru',
 'articlepage' => 'Liek isi laman',
-'talk' => 'Pembicaraan',
+'talk' => 'Ota',
 'views' => 'Tampilan',
 'toolbox' => 'Kotak pakakeh',
 'userpage' => 'Liek laman pangguno',
@@ -302,12 +302,12 @@ $1',
 'site-atom-feed' => '$1 umpan Atom',
 'page-rss-feed' => 'Umpan RSS "$1"',
 'page-atom-feed' => '"$1" umpan Atom',
-'red-link-title' => '$1 (laman alun tasadio)',
+'red-link-title' => '$1 (halaman alun babuek)',
 'sort-descending' => 'Urutkan manurun',
 'sort-ascending' => 'Urutkan manaik',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Laman',
+'nstab-main' => 'Halaman',
 'nstab-user' => 'Laman pangguno',
 'nstab-media' => 'Laman Media',
 'nstab-special' => 'Laman istimewa',
@@ -400,7 +400,7 @@ Alasan nan diberikan adolah ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Sanak alah kalua log dari sistem.'''
 
-Sanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek [[Special:UserLogin|masuak log liak]] sabagai pangguno nan samo atau pangguno nan lain.
+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! ==
 
@@ -778,7 +778,7 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 
 # Search results
 'searchresults' => 'Hasil pencarian',
-'searchresults-title' => 'Hasil pencarian untuak "$1"',
+'searchresults-title' => 'Hasil pancarian untuak "$1"',
 'searchresulttext' => 'Untuak informasi lanjut tentang pencarian {{SITENAME}}, lihek [[{{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'''",
@@ -810,8 +810,6 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 'search-interwiki-caption' => 'Proyek badunsanak',
 'search-interwiki-default' => 'Hasil $1:',
 'search-interwiki-more' => '(selanjutnyo)',
-'search-mwsuggest-enabled' => 'dengan saran',
-'search-mwsuggest-disabled' => 'indak ado saran',
 'searchrelated' => 'bakaitan',
 'searchall' => 'Sadonyo',
 'showingresultsheader' => "{{PLURAL:$5|Hasil '''$1''' dari '''$3'''|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
@@ -1142,13 +1140,13 @@ Awak hanyo buliah lihek sumber se',
 '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 laman yang ado teks ko',
+'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-n-recentchanges' => 'Senarai parubahan baru dalam wiki',
+'tooltip-n-recentchanges' => 'Daftar panyuntiangan baru dalam wiki',
 'tooltip-n-randompage' => 'Tampilkan sembarang halaman',
 'tooltip-n-help' => 'Tampek mancari bantuan',
 'tooltip-t-whatlinkshere' => 'Senarai sado halaman wiki yang punyo pranala ka halaman ko',
@@ -1158,7 +1156,7 @@ Awak hanyo buliah lihek sumber se',
 'tooltip-t-contributions' => 'Lihek senarai jariah pangguno ko',
 'tooltip-t-emailuser' => 'Kirimkan e-mail ka pangguno ko',
 'tooltip-t-upload' => 'Unggah berkas',
-'tooltip-t-specialpages' => 'Senarai semua halaman istimewa',
+'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',
@@ -1259,4 +1257,8 @@ Nan lainnyo akan tasuruak sacaro default.
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Tag]] bateh:',
 
+# Search suggestions
+'searchsuggest-search' => 'Cari',
+'searchsuggest-containing' => 'Barisi...',
+
 );
index 71c0c04..e856db5 100644 (file)
@@ -139,6 +139,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEПребарување' ),
        'Mostcategories'            => array( 'НајмногуКатегории' ),
        'Mostimages'                => array( 'НајмногуСлики', 'НајмногуПодатотеки', 'ПодатотекиСоНајмногуВрски' ),
+       'Mostinterwikis'            => array( 'НајмногуМеѓувикија' ),
        'Mostlinked'                => array( 'СоНајмногуВрски', 'СтранициСоНајмногуВрски' ),
        'Mostlinkedcategories'      => array( 'НајупотребуваниКатегории' ),
        'Mostlinkedtemplates'       => array( 'НајупотребуваниШаблони' ),
@@ -195,132 +196,148 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#пренасочување', '#види', '#Пренасочување', '#ПРЕНАСОЧУВАЊЕ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСОДРЖИНА__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЈА__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__СОСОДРЖИНА__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__СОДРЖИНА__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_УРЕДУВАЊЕ_НА_ПОДНАСЛОВИ__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗНАСЛОВ__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ТЕКОВЕНМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ТЕКОВЕНМЕСЕЦ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ТЕКОВЕНМЕСЕЦСКР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ТЕКОВЕНДЕН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ТЕКОВЕНДЕН2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ТЕКОВЕНДЕНИМЕ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ТЕКОВНАГОДИНА', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ТЕКОВНОВРЕМЕ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ТЕКОВЕНЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'МЕСЕЦ_ЛОКАЛНО', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'МЕСЕЦ_ЛОКАЛНО1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_ГЕНИТИВ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_КРАТЕНКА', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ДЕН_ЛОКАЛНО', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ДЕН2_ЛОКАЛНО', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ИМЕНАДЕН_ЛОКАЛНО', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ГОДИНА_ЛОКАЛНО', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ВРЕМЕ_ЛОКАЛНО', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ЧАС_ЛОКАЛНО', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'БРОЈНАСТРАНИЦИ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'БРОЈСТАТИИ', 'БРОЈНАСТАТИИ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'БРОЈНАПОДАТОТЕКИ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'РАЗГОВОРПРОСТОР', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ЦЕЛОСНОИМЕНАСТРАНИЦА', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'ИМЕНАПОТСТРАНИЦА', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ),
-       'subjectpagename'         => array( '1', 'ИМЕНАСТАТИЈА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subst'                   => array( '0', 'ЗАМЕНИ:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'БЕЗБЗАМЕНИ', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'ИЗВЕШТNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'мини', 'мини-слика', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'мини-слика=$1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'десно', 'д', 'right' ),
-       'img_left'                => array( '1', 'лево', 'л', 'left' ),
-       'img_none'                => array( '1', 'н', 'нема', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1п', '$1px' ),
-       'img_center'              => array( '1', 'центар', 'ц', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'рамка', 'ворамка', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'безрамка', 'frameless' ),
-       'img_page'                => array( '1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'исправено', 'исправено=$1', 'исправено $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'граничник', 'граница', 'border' ),
-       'img_baseline'            => array( '1', 'основналинија', 'baseline' ),
-       'img_sub'                 => array( '1', 'долениндекс', 'дол', 'sub' ),
-       'img_super'               => array( '1', 'горениндекс', 'гор', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'врв', 'најгоре', 'top' ),
-       'img_text_top'            => array( '1', 'текст-врв', 'текст-најгоре', 'text-top' ),
-       'img_middle'              => array( '1', 'средина', 'middle' ),
-       'img_bottom'              => array( '1', 'дно', 'најдолу', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'текст-дно', 'текст-најдолу', 'text-bottom' ),
-       'img_link'                => array( '1', 'врска=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'алт=$1', 'alt=$1' ),
-       'sitename'                => array( '1', 'ИМЕНАМРЕЖНОМЕСТО', 'SITENAME' ),
-       'localurl'                => array( '0', 'ЛОКАЛНААДРЕСА:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛНААДРЕСАИ:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'ОПСЛУЖУВАЧ', 'SERVER' ),
-       'servername'              => array( '0', 'ИМЕНАОПСЛУЖУВАЧ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ПАТЕКАНАСКРИПТА', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'ТЕКОВНАСЕДМИЦА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ТЕКОВЕНДЕНВОСЕДМИЦАТА', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'СЕДМИЦА_ЛОКАЛНО', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ЛОКАЛЕНДЕНВОСЕДМИЦАТА', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'НАЗНАКАНАРЕВИЗИЈА', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕННАРЕВИЗИЈА', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕННАРЕВИЗИЈА2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЕЦНАРЕВИЗИЈА', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'МЕСЕЦНАРЕВИЗИЈА1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'ГОДИНАНАРЕВИЗИЈА', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ВРЕМЕНАРЕВИЗИЈА', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
-       'raw'                     => array( '0', 'СИРОВО:', 'РЕД:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПРИКАЖИНАСЛОВ', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'П', 'R' ),
-       'currentversion'          => array( '1', 'ТЕКОВНАВЕРЗИЈА', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ШИФРИРАЈURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ШИФРИРАЈКОТВА', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'ОЗНАЧЕНОТЕКОВНОВРЕМЕ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ОЗНАЧЕНОЛОКАЛНОВРЕМЕ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'ОЗНАКАЗАНАСОКА', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ЈАЗИК:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ЈАЗИКНАСОДРЖИНАТА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'СТРАНИЦИВОИМЕНСКИПРОСТОР', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'БРОЈНААДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ФОРМАТБРОЈ', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ПОСТАВИЛЕВО', 'PADLEFT' ),
-       'padright'                => array( '0', 'ПОСТАВИДЕСНО', 'PADRIGHT' ),
-       'special'                 => array( '0', 'специјална', 'специјални', 'special' ),
-       'defaultsort'             => array( '1', 'ОСНОВНОПОДРЕДУВАЊЕ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ПОДАТОТЕЧНАПАТЕКА:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ознака', 'tag' ),
-       'hiddencat'               => array( '1', '__СКРИЕНАКАТ__', '__СКРИЕНАКАТЕГОРИЈА__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'СТРАНИЦИВОКАТЕГОРИЈА', 'СТРАНИЦИВОКАТ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ГОЛЕМИНА_НА_СТРАНИЦА', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ИНДЕКС__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗИНДЕКС__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__СТАТИЧНОПРЕНАСОЧУВАЊЕ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'НИВОНАЗАШТИТА', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'форматнадатум', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ПАТЕКА', 'PATH' ),
-       'url_wiki'                => array( '0', 'ВИКИ', 'WIKI' ),
-       'url_query'               => array( '0', 'БАРАЊЕ', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'безгрешки', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'беззамена', 'noreplace' ),
+       'redirect'                  => array( '0', '#пренасочување', '#види', '#Пренасочување', '#ПРЕНАСОЧУВАЊЕ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСОДРЖИНА__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЈА__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__СОСОДРЖИНА__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__СОДРЖИНА__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_УРЕДУВАЊЕ_НА_ПОДНАСЛОВИ__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗНАСЛОВ__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ТЕКОВЕНМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ТЕКОВЕНМЕСЕЦ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ТЕКОВЕНМЕСЕЦСКР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ТЕКОВЕНДЕН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ТЕКОВЕНДЕН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ТЕКОВЕНДЕНИМЕ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТЕКОВНАГОДИНА', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТЕКОВНОВРЕМЕ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКОВЕНЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'МЕСЕЦ_ЛОКАЛНО', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'МЕСЕЦ_ЛОКАЛНО1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_ГЕНИТИВ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'МЕСЕЦИМЕ_ЛОКАЛНО_КРАТЕНКА', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ДЕН_ЛОКАЛНО', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ДЕН2_ЛОКАЛНО', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ИМЕНАДЕН_ЛОКАЛНО', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ГОДИНА_ЛОКАЛНО', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ВРЕМЕ_ЛОКАЛНО', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ЧАС_ЛОКАЛНО', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'БРОЈНАСТРАНИЦИ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'БРОЈСТАТИИ', 'БРОЈНАСТАТИИ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'БРОЈНАПОДАТОТЕКИ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'РАЗГОВОРПРОСТОР', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ЦЕЛОСНОИМЕНАСТРАНИЦА', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'ПОТСТРАНИЦА', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'ИМЕНАСТАТИЈА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subst'                     => array( '0', 'ЗАМЕНИ:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'БЕЗБЗАМЕНИ', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'ИЗВЕШТNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'мини', 'мини-слика', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'мини-слика=$1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'десно', 'д', 'right' ),
+       'img_left'                  => array( '1', 'лево', 'л', 'left' ),
+       'img_none'                  => array( '1', 'н', 'нема', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1п', '$1px' ),
+       'img_center'                => array( '1', 'центар', 'ц', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'рамка', 'ворамка', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безрамка', 'frameless' ),
+       'img_page'                  => array( '1', 'страница=$1', 'страница_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'исправено', 'исправено=$1', 'исправено_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'граничник', 'граница', 'border' ),
+       'img_baseline'              => array( '1', 'основналинија', 'baseline' ),
+       'img_sub'                   => array( '1', 'долениндекс', 'дол', 'sub' ),
+       'img_super'                 => array( '1', 'горениндекс', 'гор', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'врв', 'најгоре', 'top' ),
+       'img_text_top'              => array( '1', 'текст-врв', 'текст-најгоре', 'text-top' ),
+       'img_middle'                => array( '1', 'средина', 'middle' ),
+       'img_bottom'                => array( '1', 'дно', 'најдолу', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'текст-дно', 'текст-најдолу', 'text-bottom' ),
+       'img_link'                  => array( '1', 'врска=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'алт=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', 'класа=$1', 'class=$1' ),
+       'sitename'                  => array( '1', 'ИМЕНАМРЕЖНОМЕСТО', 'SITENAME' ),
+       'localurl'                  => array( '0', 'ЛОКАЛНААДРЕСА:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛНААДРЕСАИ:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ПАТЕКАНАСТАТИЈА', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'НАЗНАКАНАСТРАНИЦА', 'PAGEID' ),
+       'server'                    => array( '0', 'ОПСЛУЖУВАЧ', 'SERVER' ),
+       'servername'                => array( '0', 'ИМЕНАОПСЛУЖУВАЧ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ПАТЕКАНАСКРИПТА', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'СТИЛСКАПАТЕКА', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__БЕЗПРЕТВОРАЊЕНАСЛОВ__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__БЕЗПРЕТВОРАЊЕСОДРЖИНА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ТЕКОВНАСЕДМИЦА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТЕКОВЕНДЕНВОСЕДМИЦАТА', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'СЕДМИЦА_ЛОКАЛНО', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ЛОКАЛЕНДЕНВОСЕДМИЦАТА', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'НАЗНАКАНАРЕВИЗИЈА', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕННАРЕВИЗИЈА', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕННАРЕВИЗИЈА2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦНАРЕВИЗИЈА', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МЕСЕЦНАРЕВИЗИЈА1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'ГОДИНАНАРЕВИЗИЈА', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ВРЕМЕНАРЕВИЗИЈА', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
+       'lcfirst'                   => array( '0', 'ПРВОМБ', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ПРВОГБ', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'МБ', 'LC:' ),
+       'uc'                        => array( '0', 'ГБ', 'UC:' ),
+       'raw'                       => array( '0', 'СИРОВО:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПРИКАЖИНАСЛОВ', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'П', 'R' ),
+       'newsectionlink'            => array( '1', '__ВРСКАНОВПОДНАСЛОВ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__БЕЗВРСКАНОВПОДНАСЛОВ__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ТЕКОВНАВЕРЗИЈА', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ШИФРИРАЈURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ШИФРИРАЈКОТВА', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'ОЗНАЧЕНОТЕКОВНОВРЕМЕ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ОЗНАЧЕНОЛОКАЛНОВРЕМЕ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'ОЗНАКАЗАНАСОКА', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ЈАЗИК:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ЈАЗИКНАСОДРЖИНАТА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СТРАНИЦИВОИМЕНСКИПРОСТОР', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'БРОЈНААДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ФОРМАТБРОЈ', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ПОСТАВИЛЕВО', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ПОСТАВИДЕСНО', 'PADRIGHT' ),
+       'special'                   => array( '0', 'специјална', 'специјални', 'special' ),
+       'defaultsort'               => array( '1', 'ОСНОВНОПОДРЕДУВАЊЕ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ПОДАТОТЕЧНАПАТЕКА:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ознака', 'tag' ),
+       'hiddencat'                 => array( '1', '__СКРИЕНАКАТ__', '__СКРИЕНАКАТЕГОРИЈА__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'СТРАНИЦИВОКАТЕГОРИЈА', 'СТРАНИЦИВОКАТ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ГОЛЕМИНА_НА_СТРАНИЦА', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ИНДЕКС__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗИНДЕКС__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__СТАТИЧНОПРЕНАСОЧУВАЊЕ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'НИВОНАЗАШТИТА', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'форматнадатум', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ПАТЕКА', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
+       'url_query'                 => array( '0', 'БАРАЊЕ', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'безгрешки', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'беззамена', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'сите', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'страници', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'поткатегории', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'податотеки', 'files' ),
 );
 
 $linkTrail = '/^([a-zабвгдѓежзѕијклљмнњопрстќуфхцчџш]+)(.*)$/sDu';
@@ -487,7 +504,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' => 'Историја',
@@ -642,10 +659,10 @@ $1',
 'nstab-category' => 'Категорија',
 
 # Main script and global functions
-'nosuchaction' => 'Не постои таа функција',
-'nosuchactiontext' => 'Дејството наведено во URL-низата е грешно.
-Можеби има грешка во пишувањето на URL или сте следеле погрешна врска.
\9eва Ð¼Ð¾Ð¶Ðµ Ð¸Ñ\81Ñ\82о Ñ\82ака Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¸ грешка во програмската опрема на {{SITENAME}}.',
+'nosuchaction' => 'Нема такво дејство',
+'nosuchactiontext' => 'Дејството укажано во URL-адресата е погрешно.
+Можеби имате грешка во пишувањето на адресата, или пак имате проследено погрешна врска.
\9eва Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´Ð¾Ð»Ð¶Ð¸ Ð¸ Ð½Ð° грешка во програмската опрема на {{SITENAME}}.',
 'nosuchspecialpage' => 'Не постои таква специјална страница',
 'nospecialpagetext' => '<strong>Побаравте непостоечка специјална страница.</strong>
 
@@ -714,10 +731,11 @@ $1',
 'protectedpagetext' => 'Оваа страница е заклучена за уредувања.',
 'viewsourcetext' => 'Можете да го погледнете и копирате кодот на оваа страница:',
 'viewyourtext' => "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
-'protectedinterface' => 'Оваа страница содржи текст од посредникот на програмот и е заклучена поради можна злоупотреба.',
-'editinginterface' => "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на програмската опрема на МедијаВики.
-Промените на оваа страница ќе предизвикаат промена на корисничкиот посредник кај останатите корисници.
-За превод, имајте го предвид [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net], проектот за локализација на МедијаВики.",
+'protectedinterface' => 'Оваа страница содржи текст од посредникот на софтверот на ова вики и е превентивно заштитена поради можна злоупотреба.
+За да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] - проектот за локализација на МедијаВики.',
+'editinginterface' => "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на МедијаВики софтверот.
+Промените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.
+За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
 'sqlhidden' => '(Барањето до SQL е скриено)',
 'cascadeprotected' => 'Оваа страница е заштитена од уредувања бидејќи е вклучена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:
 $2',
@@ -743,7 +761,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Сега сте одјавени.'''
 
-Можете да продолжите со користење на {{SITENAME}} анонимно или можете [[Special:UserLogin|повторно да се најавите]] под исто или различно корисничко име.
+Можете да продолжите со користење на {{SITENAME}} анонимно или можете <span class='plainlinks'>[$1 повторно да се најавите]</span> под исто или различно корисничко име.
 Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кешот на вашиот прелистувач.",
 'welcomecreation' => '== Добредојдовте, $1! ==
 Вашата корисничка сметка е создадена.
@@ -1010,8 +1028,7 @@ $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}}“.
 
 Ова обично се должи на застарена врска за разлики што води кон избришана страница.
@@ -1040,7 +1057,7 @@ $2
 'updated' => '(Подновено)',
 'note' => "'''Напомена:'''",
 'previewnote' => "'''Имајте предвид дека ова е само преглед.'''
\92аÑ\88иÑ\82е Ð¿Ñ\80омени сè уште не се зачувани!",
\9fÑ\80омениÑ\82е сè уште не се зачувани!",
 'continue-editing' => 'Продолжете со уредување',
 'previewconflict' => 'Овој преглед прикажува како ќе изгледа текстот внесен во горниот дел откако ќе се зачува страницата.',
 'session_fail_preview' => "'''Жалиме! Не можевме да го обработиме вашето уредување поради загуба на сесиски податоци.'''
@@ -1082,8 +1099,8 @@ $2
 '''НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!'''",
 'longpageerror' => "'''Грешка: Текстот што го внесовте е голем {{PLURAL:$1|еден килобајт|$1 килобајти}}, што ја надминува границата од {{PLURAL:$2|еден килобајт|$2 килобајти}}.'''
 Затоа нема да може да се зачува.",
-'readonlywarning' => "'''Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\94УÐ\92Ð\90Ð\8aÐ\95: Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ðµ Ð·Ð°ÐºÐ»Ñ\83Ñ\87ена Ð·Ð°Ñ\80ади Ð¾Ð´Ñ\80жÑ\83ваÑ\9aе, Ð¿Ð° Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80омени сега.
\9fÑ\80обаÑ\98Ñ\82е Ð´Ð° Ð³Ð¾ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82оÑ\82 Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ (cut & paste) Ð²Ð¾ Ð½ÐµÐºÐ¾Ñ\98а Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ð¸ Ð´Ð° Ð³Ð¾ Ð¿Ñ\80аÑ\82иÑ\82е Ð¿Ð¾Ð´Ð¾Ñ\86на.'''
+'readonlywarning' => "'''Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\94УÐ\92Ð\90Ð\8aÐ\95: Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и Ðµ Ð·Ð°ÐºÐ»Ñ\83Ñ\87ена Ð·Ð°Ñ\80ади Ð¾Ð´Ñ\80жÑ\83ваÑ\9aе, Ð¿Ð° Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ð¿Ñ\80омениÑ\82е сега.
\9fÑ\80обаÑ\98Ñ\82е Ð´Ð° Ð³Ð¾ Ð·Ð°Ñ\87Ñ\83ваÑ\82е Ñ\82екÑ\81Ñ\82оÑ\82 Ð·Ð° Ð¿Ð¾Ð´Ð¾Ñ\86на, Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ (Ñ\81о Ð¿Ñ\80екопиÑ\80аÑ\9aе) Ð²Ð¾ Ð½ÐµÐºÐ¾Ñ\98а Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека.'''
 
 Администраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
 'protectedpagewarning' => "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''
@@ -1125,6 +1142,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' => 'Предупредување: Оваа страница користи премногу повикувања на parser функции.
@@ -1277,7 +1303,9 @@ $1",
 'revdelete-only-restricted' => 'Грешка при сокривањето на записот од $2, $1: не можете да криете записи од администратори без воедно да изберете едно од другите нагодувања на видливоста.',
 'revdelete-reason-dropdown' => '*Вообичаени причини за бришење
 ** Прекршување на авторски права
-** Несоодветни лични информации',
+** Неумесни коментари или лични информации
+** Неумесно корисничко име
+** Потенцијално клеветнички информации',
 'revdelete-otherreason' => 'Друга/дополнителна причина:',
 'revdelete-reasonotherlist' => 'Друга причина',
 'revdelete-edit-reasonlist' => 'Уреди причини за бришење',
@@ -1376,8 +1404,6 @@ $1",
 'search-interwiki-caption' => 'Збратимени проекти',
 'search-interwiki-default' => 'Најдено на $1:',
 'search-interwiki-more' => '(уште)',
-'search-mwsuggest-enabled' => 'со предлози',
-'search-mwsuggest-disabled' => 'без предлози',
 'search-relatedarticle' => 'Поврзано',
 'mwsuggest-disable' => 'Оневозможи AJAX-предлози',
 'searcheverything-enable' => 'Барај во сите именски простори',
@@ -1476,7 +1502,7 @@ $1",
 'timezoneregion-indian' => 'Индиски Океан',
 'timezoneregion-pacific' => 'Тихи Океан',
 'allowemail' => 'Дозволи е-пошта од други корисници',
-'prefs-searchoptions' => 'Ð\9dагодÑ\83ваÑ\9aа Ð½Ð° Ð¿Ñ\80ебаÑ\80Ñ\83ваÑ\9aеÑ\82о',
+'prefs-searchoptions' => 'Ð\9fÑ\80ебаÑ\80Ñ\83ваÑ\9aе',
 'prefs-namespaces' => 'Именски простори',
 'defaultns' => 'Инаку пребарувај во овие именски простори:',
 'default' => 'по основно',
@@ -1695,7 +1721,7 @@ $1",
 'recentchanges-label-newpage' => 'Ова уредување создаде нова страница',
 'recentchanges-label-minor' => 'Ова е ситна промена',
 'recentchanges-label-bot' => 'Ова уредување е направено од бот',
-'recentchanges-label-unpatrolled' => 'Ð\9eва Ñ\83Ñ\80едÑ\83ваÑ\9aе Ñ\81è Ñ\83Ñ\88Ñ\82е Ð½Ðµ Ð±Ð¸Ð»Ð¾ патролирано',
+'recentchanges-label-unpatrolled' => 'Ð\9eва Ñ\83Ñ\80едÑ\83ваÑ\9aе Ñ\81è Ñ\83Ñ\88Ñ\82е Ð½Ðµ Ðµ Ð¸Ñ\81патролирано',
 'rcnote' => "Подолу {{PLURAL:$1|е прикажана '''1''' промена|се прикажани последните '''$1''' промени}} {{PLURAL:$2|за денес|во последниве '''$2''' дена}}, заклучно со $5, $4.",
 'rcnotefrom' => 'Подолу се промените од <b>$2</b> (се прикажуваат до <b>$1</b>).',
 'rclistfrom' => 'Прикажи нови промени почнувајќи од $1',
@@ -1910,7 +1936,7 @@ $1',
 'backend-fail-internal' => 'Се појави непозната грешка во складишната основа „$1“.',
 'backend-fail-contenttype' => 'Не можев да утврдам каква содржина има податотеката што треба да ја складирам во „$1“.',
 'backend-fail-batchsize' => 'Складишната основа доби блок од $1 податочна {{PLURAL:$1|операција|операции}}, а ограничувањето е $2 {{PLURAL:$2|операција|операции}}.',
-'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð¶ÐµÐ² Ð´Ð° Ñ\98а Ð·Ð°Ð¿Ð¸Ñ\88ам Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а $1 бидејќи немате доволно дозволи или поради тоа што недостасуваат именици/содржатели.',
+'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð¶ÐµÐ² Ð´Ð° Ñ\98а Ð¿Ñ\80оÑ\87иÑ\82ам Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\88ам Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а â\80\9e$1â\80\9c бидејќи немате доволно дозволи или поради тоа што недостасуваат именици/содржатели.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не можев да се поврзам со дневничката база за складишната основа „$1“.',
@@ -2047,6 +2073,7 @@ $1',
 'shared-repo' => 'заедничко складиште',
 'shared-repo-name-wikimediacommons' => 'Заедничката Ризница',
 'filepage.css' => '/* Тука поставените каскадни стилски страници (CSS) се вклучени во страницата за опис на податотеката, како и на клиентските викија */',
+'upload-disallowed-here' => 'Нажалост, не можете да ја замените сликава со нова.',
 
 # File reversion
 'filerevert' => 'Врати $1',
@@ -3037,7 +3064,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Проба на JavaScript',
-'javascripttest-disabled' => 'Функцијата не е овозможена на ова вики.',
 'javascripttest-title' => 'Вршам $1 проби',
 'javascripttest-pagetext-noframework' => 'Оваа страница е резервирана за вршење на проби со JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Непозната рамка „$1“.',
@@ -3101,8 +3127,8 @@ $1',
 'tooltip-ca-nstab-help' => 'Преглед на страницата за помош',
 'tooltip-ca-nstab-category' => 'Преглед на категоријата',
 'tooltip-minoredit' => 'Обележи ја промената како ситна',
-'tooltip-save' => 'Ð\97аÑ\87Ñ\83ваÑ\98Ñ\82е Ð³Ð¸ Ð²Ð°Ñ\88иÑ\82е Ð¿Ñ\80омени',
-'tooltip-preview' => 'Прегледајте ги вашите промени, ве молиме користете го ова пред зачувување!',
+'tooltip-save' => 'Ð\97аÑ\87Ñ\83ваÑ\98Ñ\82е Ð³Ð¸ Ð¿Ñ\80омениÑ\82е',
+'tooltip-preview' => 'Преглед на промените - ве молиме користете го ова пред зачувување!',
 'tooltip-diff' => 'Покажи кои промени ги направи во текстот.',
 'tooltip-compareselectedversions' => 'Видете ја разликата помеѓу двете избрани верзии на оваа страница.',
 'tooltip-watch' => 'Додај ја страницава во списокот на набљудувања',
@@ -3202,10 +3228,10 @@ $1',
 'pageinfo-authors' => 'Број на засебни автори',
 'pageinfo-recent-edits' => 'Број на скорешни уредувања (во последните $1)',
 'pageinfo-recent-authors' => 'Број на скорешни засебни автори',
-'pageinfo-restriction' => 'Заштита на страницата (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Волшебен збор|Волшебни зборови}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скриена категорија|Скриени категории}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Превметнат шаблон|Превметнати шаблони}} ($1)',
+'pageinfo-toolboxlink' => 'Информации за страницата',
 
 # Skin names
 'skinname-standard' => 'Класично',
@@ -3222,7 +3248,7 @@ $1',
 'markaspatrolleddiff' => 'Означи како проверена верзија',
 'markaspatrolledtext' => 'Означи ја верзијата како проверена',
 'markedaspatrolled' => 'Означено како проверено',
-'markedaspatrolledtext' => 'Избраната ревизија на [[:$1]]  е означена како патролирана.',
+'markedaspatrolledtext' => 'Ð\98збÑ\80анаÑ\82а Ñ\80евизиÑ\98а Ð½Ð° [[:$1]]  Ðµ Ð¾Ð·Ð½Ð°Ñ\87ена ÐºÐ°ÐºÐ¾ Ð¸Ñ\81паÑ\82Ñ\80олиÑ\80ана.',
 'rcpatroldisabled' => 'Оневозможено проверка на скорешни промени',
 'rcpatroldisabledtext' => 'Патролирањето на Скорешните промени е деактивирано.',
 'markedaspatrollederror' => 'Не можам да означам како проверена',
@@ -3261,6 +3287,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-desc-animated' => 'Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3',
 'show-big-image' => 'Вистинска големина',
 'show-big-image-preview' => 'Големина на овој преглед: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Други резолуции}}: $1.',
@@ -3270,6 +3297,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' => 'Галерија на нови податотеки',
@@ -3856,6 +3885,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[Превметнувањето помеѓу викијата е оневозможено]',
 'scarytranscludefailed' => '[Преземањето на шаблонот за $1 не успеа]',
+'scarytranscludefailed-httpstatus' => '[Преземањето на шаблонот не успеа за $1: HTTP $2]',
 'scarytranscludetoolong' => '[Премногу долго URL]',
 
 # Delete conflict
@@ -4101,7 +4131,7 @@ $5
 'specialpages-group-highuse' => 'Најкористени страници',
 'specialpages-group-pages' => 'Списоци на страници',
 'specialpages-group-pagetools' => 'Алатки за страници',
-'specialpages-group-wiki' => 'Википодатоци и алатки',
+'specialpages-group-wiki' => 'Вики-податоци и алатки',
 'specialpages-group-redirects' => 'Пренасочување на специјални страници',
 'specialpages-group-spam' => 'Алатки против спам',
 
@@ -4153,8 +4183,8 @@ $5
 'dberr-cachederror' => 'Следнава содржина е кеширана копија на бараната страница, која може да е застарена.',
 
 # HTML forms
-'htmlform-invalid-input' => 'Ð\98ма Ð¿Ñ\80облеми Ñ\81о Ð´ÐµÐ» Ð¾Ð´ Ð²Ð°Ñ\88иоÑ\82 Ð²Ð½Ðµс',
-'htmlform-select-badoption' => 'Ð\92Ñ\80едноÑ\81Ñ\82а ÐºÐ¾Ñ\98а Ñ\98а Ð½Ð°Ð²ÐµÐ´Ð¾Ð²Ñ\82е Ð½Ðµ Ðµ Ð²Ð°Ð¶ÐµÑ\87ка.',
+'htmlform-invalid-input' => 'Ð\98ма Ð¿Ñ\80облеми Ñ\81о Ð´ÐµÐ» Ð¾Ð´ Ð²Ð°Ñ\88иоÑ\82 Ð²Ð½Ð¾с',
+'htmlform-select-badoption' => 'УкажанаÑ\82а Ð²Ñ\80едноÑ\81Ñ\82 Ðµ Ð½ÐµÐ²Ð°Ð¶ÐµÑ\87ка ÐºÐ°ÐºÐ¾ Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82.',
 'htmlform-int-invalid' => 'Вредноста која ја наведовте не е цел број.',
 'htmlform-float-invalid' => 'Вредноста која ја наведовте не е број.',
 'htmlform-int-toolow' => 'Вредноста која ја наведовте е под минимумот од $1',
@@ -4216,6 +4246,10 @@ $5
 'feedback-bugcheck' => 'Одлично! Само проверете да не е една од [$1 веќе познатите грешки].',
 'feedback-bugnew' => 'Проверив. Пријави ја како нова грешка.',
 
+# Search suggestions
+'searchsuggest-search' => 'Пребарување',
+'searchsuggest-containing' => 'содржи...',
+
 # API errors
 'api-error-badaccess-groups' => 'Не ви е дозволено да подигате податотеки на ова вики.',
 'api-error-badtoken' => 'Внатрешна грешка: неисправен жетон.',
@@ -4268,4 +4302,6 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
 'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
 
+# Unknown messages
+'bad-target-model' => 'Саканата одредница користи друг содржински модел. Не можам да претворам од $1 во $2.',
 );
index 05ec30d..0266cbc 100644 (file)
@@ -16,6 +16,7 @@
  * @author Junaidpv
  * @author Jyothis
  * @author Kaganer
+ * @author Krenair
  * @author Manjith Joseph <manjithkaini@gmail.com>
  * @author Naveen Sankar
  * @author Praveen Prakash <me.praveen@gmail.com>
@@ -181,147 +182,147 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#തിരിച്ചുവിടുക', '#തിരിച്ചുവിടൽ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ഉള്ളടക്കംവേണ്ട__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ചിത്രസഞ്ചയംവേണ്ട__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ഉള്ളടക്കംഇടുക__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ഉള്ളടക്കം__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__സംശോധിക്കേണ്ട__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__തലക്കെട്ടുവേണ്ട__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ഈമാസം', 'ഈമാസം2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ഈമാസം1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ഈമാസത്തിന്റെപേര്‌', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ഈമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ഈമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'ഈമാസത്തിന്റെപേര്‌ചുരുക്കം', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ഈദിവസം', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ഈദിവസം2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ഈദിവസത്തിന്റെപേര്‌', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ഈവർഷം', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ഈസമയം', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ഈമണിക്കൂർ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'പ്രാദേശികമാസം', 'പ്രാദേശികമാസം2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'പ്രാദേശികമാസം1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'പ്രാദേശികമാസത്തിന്റെപേര്‌ചുരുക്കം', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'പ്രാദേശികദിവസം', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'പ്രാദേശികദിവസം2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'പ്രാദേശികദിവസത്തിന്റെപേര്‌', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'പ്രാദേശികവർഷം', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'പ്രാദേശികസമയം', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'പ്രാദേശികമണിക്കൂർ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'താളുകളുടെയെണ്ണം', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ലേഖനങ്ങളുടെയെണ്ണം', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'പ്രമാണങ്ങളുടെയെണ്ണം', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'താളിന്റെപേര്‌', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'താളിന്റെപേര്‌സമഗ്രം', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'നാമമേഖലസമഗ്രം', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'നാമമേഖലാസംഖ്യ', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'സംവാദമേഖല', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'സംവാദമേഖലസമഗ്രം', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'വിഷയമേഖല', 'ലേഖനമേഖല', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'വിഷയമേഖലസമഗ്രം', 'ലേഖനമേഖലസമഗ്രം', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'താളിന്റെമുഴുവൻപേര്‌', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'താളിന്റെമുഴുവൻപേര്സമഗ്രം', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'അനുബന്ധതാളിന്റെപേര്‌', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'അനുബന്ധതാളിന്റെപേര്സമഗ്രം', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌സമഗ്രം', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'സംവാദതാളിന്റെപേര്‌', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'സംവാദതാളിന്റെപേര്‌സമഗ്രം', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ലേഖനതാളിന്റെപേര്‌', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ലേഖനതാളിന്റെപേര്‌സമഗ്രം', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'സന്ദേശം:', 'MSG:' ),
-       'subst'                   => array( '0', 'ബദൽ:', 'ഉൾപ്പെടുത്തൽ:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'സംരക്ഷിതബദൽ:', 'സംരക്ഷിതയുൾപ്പെടുത്തൽ:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'മൂലരൂപം:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'ലഘുചിത്രം', 'ലഘു', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'ലഘുചിത്രം=$1', 'ലഘു=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'വലത്ത്‌', 'വലത്‌', 'right' ),
-       'img_left'                => array( '1', 'ഇടത്ത്‌', 'ഇടത്‌', 'left' ),
-       'img_none'                => array( '1', 'ശൂന്യം', 'none' ),
-       'img_width'               => array( '1', '$1ബിന്ദു', '$1px' ),
-       'img_center'              => array( '1', 'നടുവിൽ', 'നടുക്ക്‌', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'ചട്ടരഹിതം', 'frameless' ),
-       'img_page'                => array( '1', 'താൾ=$1', 'താൾ_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'നേരേകുത്തനെ', 'നേരേകുത്തനെ=$1', 'നേരേകുത്തനെ_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'അതിർവര', 'border' ),
-       'img_baseline'            => array( '1', 'താഴെയുള്ളവര', 'baseline' ),
-       'img_sub'                 => array( '1', 'കീഴെയെഴുത്ത്', 'sub' ),
-       'img_super'               => array( '1', 'മേലേയെഴുത്ത്', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'മേലെ', 'top' ),
-       'img_text_top'            => array( '1', 'എഴുത്ത്-മേലെ', 'text-top' ),
-       'img_middle'              => array( '1', 'മദ്ധ്യം', 'middle' ),
-       'img_bottom'              => array( '1', 'താഴെ', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'എഴുത്ത്-താഴെ', 'text-bottom' ),
-       'img_link'                => array( '1', 'കണ്ണി=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'പകരം=$1', 'alt=$1' ),
-       'sitename'                => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
-       'ns'                      => array( '0', 'നാമേ:', 'NS:' ),
-       'localurl'                => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ലോക്കൽയുആർഎൽഇ:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ലേഖനപഥം', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'സെർവർ', 'SERVER' ),
-       'servername'              => array( '0', 'സെർവറിന്റെപേര്', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'സ്ക്രിപ്റ്റ്പഥം', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'സ്റ്റൈൽപഥം', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'വ്യാകരണം:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ലിംഗം:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__തലക്കെട്ട്മാറ്റേണ്ട__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__ഉള്ളടക്കംമാറ്റേണ്ട__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ആഴ്ച', 'ആഴ്‌ച', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ദിവസത്തിന്റെപേര്‌അക്കത്തിൽ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'പ്രാദേശികആഴ്ച', 'പ്രാദേശികആഴ്‌ച', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ആഴ്ചയുടെപേര്‌അക്കത്തിൽ', 'ആഴ്‌ചയുടെപേര്‌അക്കത്തിൽ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'തിരുത്തൽഅടയാളം', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'തിരുത്തിയദിവസം', 'തിരുത്തിയദിനം', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'തിരുത്തിയദിവസം2', 'തിരുത്തിയദിനം2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'തിരുത്തിയമാസം', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'തിരുത്തിയമാസം1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'തിരുത്തിയവർഷം', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'തിരുത്തിയസമയമുദ്ര', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'അവസാനംതിരുത്തിയയാൾ', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ബഹുവചനം:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'പൂർണ്ണവിലാസം:', 'FULLURL:' ),
-       'raw'                     => array( '0', 'അസംസ്കൃതം:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ശീർഷകംപ്രദർശിപ്പിക്കുക', 'തലക്കെട്ട്പ്രദർശിപ്പിക്കുക', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'വ', 'R' ),
-       'newsectionlink'          => array( '1', '__പുതിയവിഭാഗംകണ്ണി__', '__പുതിയഖണ്ഡിക്കണ്ണി__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__പുതിയവിഭാഗംകണ്ണിവേണ്ട__', '__പുതിയഖണ്ഡിക്കണ്ണിവേണ്ട__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ഈപതിപ്പ്', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'സമയമുദ്ര', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'പ്രാദേശികസമയമുദ്ര', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'ദിശാസൂചിക', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ഭാഷ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ഉള്ളടക്കഭാഷ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'നാമമേഖലയിലുള്ളതാളുകൾ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'കാര്യനിർവ്വാഹകരുടെഎണ്ണം', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ദശാംശഘടന', 'സംഖ്യാഘടന', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ഇടത്ത്നിറക്കുക', 'PADLEFT' ),
-       'padright'                => array( '0', 'വലത്ത്നിറക്കുക', 'PADRIGHT' ),
-       'special'                 => array( '0', 'പ്രത്യേകം', 'special' ),
-       'defaultsort'             => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'റ്റാഗ്', 'tag' ),
-       'hiddencat'               => array( '1', '‌‌__മറഞ്ഞിരിക്കുംവർഗ്ഗം__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'വർഗ്ഗത്തിലുള്ളതാളുകൾ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'താൾവലിപ്പം', 'PAGESIZE' ),
-       'index'                   => array( '1', '‌‌__സൂചിക__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__സൂചികവേണ്ട__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '_സ്ഥിരസ്ഥിതതിരിച്ചുവിടൽ_', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'സംരക്ഷണതലം', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'ദിനരേഖീകരണരീതി', 'ദിവസരേഖീകരണരീതി', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'പഥം', 'PATH' ),
-       'url_wiki'                => array( '0', 'വിക്കി', 'WIKI' ),
-       'url_query'               => array( '0', 'ക്വറി', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'പിഴവില്ല', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
+       'redirect'                  => array( '0', '#തിരിച്ചുവിടുക', '#തിരിച്ചുവിടൽ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ഉള്ളടക്കംവേണ്ട__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ചിത്രസഞ്ചയംവേണ്ട__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ഉള്ളടക്കംഇടുക__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ഉള്ളടക്കം__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__സംശോധിക്കേണ്ട__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__തലക്കെട്ടുവേണ്ട__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ഈമാസം', 'ഈമാസം2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ഈമാസം1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ഈമാസത്തിന്റെപേര്‌', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ഈമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ഈമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'ഈമാസത്തിന്റെപേര്‌ചുരുക്കം', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ഈദിവസം', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ഈദിവസം2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ഈദിവസത്തിന്റെപേര്‌', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ഈവർഷം', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ഈസമയം', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ഈമണിക്കൂർ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'പ്രാദേശികമാസം', 'പ്രാദേശികമാസം2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'പ്രാദേശികമാസം1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേരുസൃഷ്ടിക്കുക', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'പ്രാദേശികമാസത്തിന്റെപേര്‌സംഗ്രഹം', 'പ്രാദേശികമാസത്തിന്റെപേര്‌ചുരുക്കം', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'പ്രാദേശികദിവസം', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'പ്രാദേശികദിവസം2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'പ്രാദേശികദിവസത്തിന്റെപേര്‌', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'പ്രാദേശികവർഷം', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'പ്രാദേശികസമയം', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'പ്രാദേശികമണിക്കൂർ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'താളുകളുടെയെണ്ണം', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ലേഖനങ്ങളുടെയെണ്ണം', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'പ്രമാണങ്ങളുടെയെണ്ണം', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'താളിന്റെപേര്‌', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'താളിന്റെപേര്‌സമഗ്രം', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'നാമമേഖലസമഗ്രം', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'നാമമേഖലാസംഖ്യ', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'സംവാദമേഖല', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'സംവാദമേഖലസമഗ്രം', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'വിഷയമേഖല', 'ലേഖനമേഖല', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'വിഷയമേഖലസമഗ്രം', 'ലേഖനമേഖലസമഗ്രം', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'താളിന്റെമുഴുവൻപേര്‌', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'താളിന്റെമുഴുവൻപേര്സമഗ്രം', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'അനുബന്ധതാളിന്റെപേര്‌', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'അനുബന്ധതാളിന്റെപേര്സമഗ്രം', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌സമഗ്രം', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'സംവാദതാളിന്റെപേര്‌', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'സംവാദതാളിന്റെപേര്‌സമഗ്രം', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ലേഖനതാളിന്റെപേര്‌', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ലേഖനതാളിന്റെപേര്‌സമഗ്രം', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'സന്ദേശം:', 'MSG:' ),
+       'subst'                     => array( '0', 'ബദൽ:', 'ഉൾപ്പെടുത്തൽ:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'സംരക്ഷിതബദൽ:', 'സംരക്ഷിതയുൾപ്പെടുത്തൽ:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'മൂലരൂപം:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'ലഘുചിത്രം', 'ലഘു', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'ലഘുചിത്രം=$1', 'ലഘു=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'വലത്ത്‌', 'വലത്‌', 'right' ),
+       'img_left'                  => array( '1', 'ഇടത്ത്‌', 'ഇടത്‌', 'left' ),
+       'img_none'                  => array( '1', 'ശൂന്യം', 'none' ),
+       'img_width'                 => array( '1', '$1ബിന്ദു', '$1px' ),
+       'img_center'                => array( '1', 'നടുവിൽ', 'നടുക്ക്‌', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'ചട്ടരഹിതം', 'frameless' ),
+       'img_page'                  => array( '1', 'താൾ=$1', 'താൾ_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'നേരേകുത്തനെ', 'നേരേകുത്തനെ=$1', 'നേരേകുത്തനെ_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'അതിർവര', 'border' ),
+       'img_baseline'              => array( '1', 'താഴെയുള്ളവര', 'baseline' ),
+       'img_sub'                   => array( '1', 'കീഴെയെഴുത്ത്', 'sub' ),
+       'img_super'                 => array( '1', 'മേലേയെഴുത്ത്', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'മേലെ', 'top' ),
+       'img_text_top'              => array( '1', 'എഴുത്ത്-മേലെ', 'text-top' ),
+       'img_middle'                => array( '1', 'മദ്ധ്യം', 'middle' ),
+       'img_bottom'                => array( '1', 'താഴെ', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'എഴുത്ത്-താഴെ', 'text-bottom' ),
+       'img_link'                  => array( '1', 'കണ്ണി=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'പകരം=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
+       'ns'                        => array( '0', 'നാമേ:', 'NS:' ),
+       'localurl'                  => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ലോക്കൽയുആർഎൽഇ:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ലേഖനപഥം', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'സെർവർ', 'SERVER' ),
+       'servername'                => array( '0', 'സെർവറിന്റെപേര്', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'സ്ക്രിപ്റ്റ്പഥം', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'സ്റ്റൈൽപഥം', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'വ്യാകരണം:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ലിംഗം:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__തലക്കെട്ട്മാറ്റേണ്ട__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__ഉള്ളടക്കംമാറ്റേണ്ട__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ആഴ്ച', 'ആഴ്‌ച', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ദിവസത്തിന്റെപേര്‌അക്കത്തിൽ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'പ്രാദേശികആഴ്ച', 'പ്രാദേശികആഴ്‌ച', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ആഴ്ചയുടെപേര്‌അക്കത്തിൽ', 'ആഴ്‌ചയുടെപേര്‌അക്കത്തിൽ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'തിരുത്തൽഅടയാളം', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'തിരുത്തിയദിവസം', 'തിരുത്തിയദിനം', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'തിരുത്തിയദിവസം2', 'തിരുത്തിയദിനം2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'തിരുത്തിയമാസം', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'തിരുത്തിയമാസം1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'തിരുത്തിയവർഷം', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'തിരുത്തിയസമയമുദ്ര', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'അവസാനംതിരുത്തിയയാൾ', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ബഹുവചനം:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'പൂർണ്ണവിലാസം:', 'FULLURL:' ),
+       'raw'                       => array( '0', 'അസംസ്കൃതം:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ശീർഷകംപ്രദർശിപ്പിക്കുക', 'തലക്കെട്ട്പ്രദർശിപ്പിക്കുക', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'വ', 'R' ),
+       'newsectionlink'            => array( '1', '__പുതിയവിഭാഗംകണ്ണി__', '__പുതിയഖണ്ഡിക്കണ്ണി__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__പുതിയവിഭാഗംകണ്ണിവേണ്ട__', '__പുതിയഖണ്ഡിക്കണ്ണിവേണ്ട__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ഈപതിപ്പ്', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'സമയമുദ്ര', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'പ്രാദേശികസമയമുദ്ര', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'ദിശാസൂചിക', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ഭാഷ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ഉള്ളടക്കഭാഷ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'നാമമേഖലയിലുള്ളതാളുകൾ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'കാര്യനിർവ്വാഹകരുടെഎണ്ണം', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ദശാംശഘടന', 'സംഖ്യാഘടന', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ഇടത്ത്നിറക്കുക', 'PADLEFT' ),
+       'padright'                  => array( '0', 'വലത്ത്നിറക്കുക', 'PADRIGHT' ),
+       'special'                   => array( '0', 'പ്രത്യേകം', 'special' ),
+       'defaultsort'               => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'റ്റാഗ്', 'tag' ),
+       'hiddencat'                 => array( '1', '‌‌__മറഞ്ഞിരിക്കുംവർഗ്ഗം__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'വർഗ്ഗത്തിലുള്ളതാളുകൾ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'താൾവലിപ്പം', 'PAGESIZE' ),
+       'index'                     => array( '1', '‌‌__സൂചിക__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__സൂചികവേണ്ട__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '_സ്ഥിരസ്ഥിതതിരിച്ചുവിടൽ_', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'സംരക്ഷണതലം', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'ദിനരേഖീകരണരീതി', 'ദിവസരേഖീകരണരീതി', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'പഥം', 'PATH' ),
+       'url_wiki'                  => array( '0', 'വിക്കി', 'WIKI' ),
+       'url_query'                 => array( '0', 'ക്വറി', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'പിഴവില്ല', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -484,7 +485,7 @@ $messages = array(
 'vector-action-protect' => 'സം‌രക്ഷിക്കുക',
 'vector-action-undelete' => 'മായ്ക്കപ്പെട്ടത് പുനഃസ്ഥാപിക്കുക',
 'vector-action-unprotect' => 'സംരക്ഷണത്തിൽ മാറ്റംവരുത്തുക',
-'vector-simplesearch-preference' => 'à´®àµ\86à´\9aàµ\8dà´\9aà´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´¤à´¿à´°à´\9aàµ\8dà´\9aിൽ à´¨à´¿àµ¼à´¦àµ\8dà´¦àµ\87à´¶à´\99àµ\8dà´\99ൾ à´¤à´°à´¿ക (വെക്റ്റർ ദൃശ്യരൂപത്തിൽ മാത്രം)',
+'vector-simplesearch-preference' => 'ലളിതമായ à´¤à´¿à´°à´\9aàµ\8dà´\9aിൽ à´¸àµ\97à´\95à´°àµ\8dà´¯à´\82 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95àµ\81ക (വെക്റ്റർ ദൃശ്യരൂപത്തിൽ മാത്രം)',
 'vector-view-create' => 'സൃഷ്ടിക്കുക',
 'vector-view-edit' => 'തിരുത്തുക',
 'vector-view-history' => 'നാൾവഴി കാണുക',
@@ -705,8 +706,10 @@ $1',
 'protectedpagetext' => 'ഈ താൾ തിരുത്തുവാൻ സാധിക്കാത്ത വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.',
 'viewsourcetext' => 'താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:',
 'viewyourtext' => "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തലുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
-'protectedinterface' => 'ഈ താൾ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു.',
-'editinginterface' => "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്. ഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താവ് വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം. മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾക്ക് മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ സംരംഭം ആയ [//translatewiki.net/wiki/Main_Page?setlang=ml ബീറ്റാവിക്കി] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
+'protectedinterface' => 'ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.',
+'editinginterface' => "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.
+ഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.
+മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
 'sqlhidden' => '(എസ്.ക്യു.എൽ. ക്വറി മറച്ചിരിക്കുന്നു)',
 'cascadeprotected' => 'നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്തുവാൻ സാധിക്കില്ല:
 $2',
@@ -733,7 +736,7 @@ $2',
 'logouttext' => "'''താങ്കൾ ഇപ്പോൾ {{SITENAME}} സംരംഭത്തിൽനിന്നും ലോഗൗട്ട് ചെയ്തിരിക്കുന്നു'''
 
 അജ്ഞാതമായിരുന്നു കൊണ്ട് {{SITENAME}} സം‌രംഭം താങ്കൾക്കു തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്‌.
-അല്ലെങ്കിൽ  [[Special:UserLogin|ലോഗിൻ സൗകര്യം ഉപയോഗിച്ച്]] വീണ്ടും ലോഗിൻ ചെയ്യാവുന്നതും ആണ്‌.
+അല്ലെങ്കിൽ  <span class='plainlinks'>[$1 ലോഗിൻ സൗകര്യം ഉപയോഗിച്ച്]</span> വീണ്ടും ലോഗിൻ ചെയ്യാവുന്നതും ആണ്‌.
 താങ്കൾ വെബ് ബ്രൌസറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
 'welcomecreation' => '== സ്വാഗതം, $1! ==
 താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
@@ -962,8 +965,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'newarticle' => '(പുതിയത്)',
 'newarticletext' => 'ഇതുവരെ നിലവിലില്ലാത്ത ഒരു താൾ സൃഷ്ടിക്കാനുള്ള ശ്രമത്തിലാണ് താങ്കൾ. അതിനായി താഴെ ആവശ്യമുള്ള വിവരങ്ങൾ എഴുതിച്ചേർത്ത് സേവ് ചെയ്യുക (കൂടുതൽ വിവരങ്ങൾക്ക് [[{{MediaWiki:Helppage}}|സഹായം താൾ]] കാണുക). താങ്കളിവിടെ അബദ്ധത്തിൽ വന്നതാണെങ്കിൽ ബ്രൗസറിന്റെ ബാക്ക് ബട്ടൺ ഞെക്കിയാൽ തിരിച്ചുപോകാം.',
 'anontalkpagetext' => "----
-{| class=\"messagebox standard-talk\" style=\"border: 1px solid #B3B300; background-color:#FFFFBF;\"
-|align=\"left\" |
+{| class=\"messagebox standard-talk\" style=\"border: 1px solid #B3B300; background-color:#FFFFBF; text-align: left;\"
+|
 ''ഇതുവരെ അംഗത്വം എടുക്കാതിരിക്കുകയോ, നിലവിലുള്ള അംഗത്വം ഉപയോഗിക്കാതിരിക്കുകയോ ചെയ്യുന്ന '''ഒരു അജ്ഞാത ഉപയോക്താവിന്റെ സം‌വാദം താളാണിത്'''.
 അതിനാൽ അദ്ദേഹത്തെ തിരിച്ചറിയുവാൻ അക്കരൂപത്തിലുള്ള ഐ.പി. വിലാസം ഉപയോഗിക്കേണ്ടതുണ്ട്. ഇത്തരം ഒരു ഐ.പി. വിലാസം പല ഉപയോക്താക്കൾ പങ്കുവെക്കുന്നുണ്ടാവാം.
 താങ്കൾ ഈ സന്ദേശം ലഭിച്ച ഒരു അജ്ഞാത ഉപയോക്താവാണെങ്കിൽ, ഭാവിയിൽ ഇതര ഉപയോക്താക്കളുമായി ഉണ്ടായേക്കാവുന്ന ആശയക്കുഴപ്പം ഒഴിവാക്കാൻ ദയവായി [[Special:UserLogin/signup|ഒരു അംഗത്വമെടുക്കുക]] അല്ലെങ്കിൽ  [[Special:UserLogin|പ്രവേശിക്കുക]].
@@ -971,8 +974,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$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>. പക്ഷേ ഈ താൾ സൃഷ്ടിക്കാൻ താങ്കൾക്ക് അനുവാദമില്ല.',
 'missing-revision' => '"{{PAGENAME}}" എന്ന താളിന്റെ #$1 എന്ന നാൾപ്പതിപ്പ് നിലവിലില്ല.
 
 മായ്ക്കപ്പെട്ട താളിന്റെ കാലഹരണപ്പെട്ട നാൾവഴി കണ്ണി ഉപയോഗിച്ചാലാണ് സാധാരണ ഇങ്ങനെ സംഭവിക്കുക.
@@ -984,9 +986,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'clearyourcache' => "'''ശ്രദ്ധിക്കുക:''' സേവ് ചെയ്തശേഷം മാറ്റങ്ങൾ കാണാനായി താങ്കൾക്ക് ബ്രൗസറിന്റെ കാഷെ ഒഴിവാക്കേണ്ടി വന്നേക്കാം.
 * '''ഫയർഫോക്സ് / സഫാരി:'''  ''Reload'' ബട്ടൺ അമർത്തുമ്പോൾ ''Shift'' കീ അമർത്തി പിടിക്കുകയോ, ''Ctrl-F5'' അല്ലെങ്കിൽ  ''Ctrl-R''  (മാക്കിന്റോഷിൽ ''⌘-R'' ) എന്ന് ഒരുമിച്ച് അമർത്തുകയോ ചെയ്യുക
 * '''ഗൂഗിൾ ക്രോം:'''  ''Ctrl-Shift-R'' (മാക്കിന്റോഷിൽ ''⌘-Shift-R'' ) അമർത്തുക
-* '''ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ:''' ''Refresh'' ബട്ടൺ അമർത്തുമ്പോൾ ''Ctrl'' കീ അമർത്തിപിടിക്കുക. അല്ലെങ്കിൽ ''Ctrl-F5'' അമർത്തുക;
-* '''ഓപ്പറ:'''  ''Tools→Preferences'' ഉപയോഗിച്ച് കാഷെ പൂർണ്ണമായും ക്ലിയർ ചെയ്യുക;
-* '''കോൺക്വറർ:''' ''Reload'' ബട്ടൺ അമർത്തുകയോ ''F5'' കീ അമർത്തുകയോ ചെയ്യുക.",
+* '''ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ:''' ''Refresh'' ബട്ടൺ അമർത്തുമ്പോൾ ''Ctrl'' കീ അമർത്തിപിടിക്കുക. അല്ലെങ്കിൽ ''Ctrl-F5'' അമർത്തുക
+* '''ഓപ്പറ:'''  ''Tools→Preferences'' ഉപയോഗിച്ച് കാഷെ പൂർണ്ണമായും ക്ലിയർ ചെയ്യുക",
 'usercssyoucanpreview' => "'''വഴികാട്ടി:''' താങ്കളുടെ പുതിയ CSS സേവ് ചെയ്യുന്നതിനു മുമ്പ് \"{{int:showpreview}}\" എന്ന ബട്ടൻ ഉപയോഗിച്ച് പരിശോധിക്കുക.",
 'userjsyoucanpreview' => "'''വഴികാട്ടി:''' താങ്കളുടെ പുതിയ ജാവാസ്ക്രിപ്റ്റ് സേവ് ചെയ്യുന്നതിനു മുമ്പ് \"{{int:showpreview}}\" എന്ന ബട്ടൻ ഉപയോഗിച്ച് പരിശോധിക്കുക.",
 'usercsspreview' => "'''താങ്കൾ താങ്കളുടെ സ്വന്തം സി.എസ്.എസ്. പ്രിവ്യൂ ചെയ്യുക മാത്രമേ ചെയ്യുന്നുള്ളൂ എന്ന കാര്യം ഓർമ്മിക്കുക.'''
@@ -1094,6 +1095,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'node-count-exceeded-warning' => 'താൾ നോഡ്-എണ്ണം അധികരിച്ചിരിക്കുന്നു',
 'expansion-depth-exceeded-category' => 'വികസന ആഴം അധികരിച്ച താളുകൾ',
 'expansion-depth-exceeded-warning' => 'താളിന്റെ വികസന ആഴം അധികരിച്ചിരിക്കുന്നു',
+'converter-manual-rule-error' => 'മാനുഷികമായുള്ള ഭാഷാ പരിവർത്തന നിയമത്തിൽ പിഴവ് കണ്ടെത്തി',
 
 # "Undo" feature
 'undo-success' => 'ഈ തിരുത്തൽ താങ്കൾക്ക് തിരസ്ക്കരിക്കാവുന്നതാണ്‌. താഴെ കൊടുത്തിരിക്കുന്ന പതിപ്പുകൾ തമ്മിലുള്ള താരതമ്യം ഒന്നുകൂടി പരിശോധിച്ച് ഈ പ്രവൃത്തി ചെയ്യണോ എന്ന് ഒന്നുകൂടി ഉറപ്പാക്കുക. ഉറപ്പാണെങ്കിൽ തിരുത്തൽ തിരസ്ക്കരിക്കുവാൻ താൾ സേവ് ചെയ്യുക.',
@@ -1135,7 +1137,7 @@ $3 അതിനു കാണിച്ചിരിക്കുന്ന കാര
 # Revision feed
 'history-feed-title' => 'നാൾവഴി',
 'history-feed-description' => 'വിക്കിയിൽ ഈ താളിന്റെ നാൾവഴി',
-'history-feed-item-nocomment' => '$1 ൽ $2',
+'history-feed-item-nocomment' => '$2 സമയത്ത് $1',
 'history-feed-empty' => 'താങ്കൾ തിരഞ്ഞ താൾ നിലവിലില്ല.
 പ്രസ്തുത താൾ വിക്കിയിൽ നിന്നു ഒഴിവാക്കിയിരിക്കാനോ പുനർനാമകരണം ചെയ്തിരിക്കാനോ സാദ്ധ്യത ഉണ്ട്.
 ബന്ധപ്പെട്ട പുതിയ താളുകൾ കണ്ടെത്താൻ [[Special:Search|വിക്കിയിലെ തിരച്ചിൽ]] എന്ന താൾ ഉപയോഗിക്കുക.',
@@ -1231,7 +1233,8 @@ $1",
 'revdelete-only-restricted' => '$2, $1 തീയതിയിലെ ഇനം മറയ്ക്കുന്നതിൽ പിഴവ്: ഒതുക്കലിനുള്ള മറ്റ് ഐച്ഛികങ്ങളിലൊന്ന് തിരഞ്ഞെടുക്കാതെ ഇനങ്ങൾ കാര്യനിർവാഹകരുടെ ദൃഷ്ടിയിൽ നിന്നും ഒതുക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
 'revdelete-reason-dropdown' => '*മായ്ക്കാനുള്ള സാധാരണ കാരണങ്ങൾ
 **പകർപ്പവകാശ ലംഘനം
-**അനുയോജ്യമല്ലാത്ത വ്യക്തി വിവരങ്ങൾ
+**അനുയോജ്യമല്ലാത്ത കുറിപ്പ് അല്ലെങ്കിൽ വ്യക്തി വിവരങ്ങൾ
+**അനുയോജ്യമല്ലാത്ത ഉപയോക്തൃനാമം
 **അടിസ്ഥാനപരമായി ദോഷകരമാകുന്ന വിവരങ്ങൾ',
 'revdelete-otherreason' => 'മറ്റ്/കൂടുതൽ കാരണം:',
 'revdelete-reasonotherlist' => 'മറ്റ് കാരണം',
@@ -1329,8 +1332,6 @@ $1",
 'search-interwiki-caption' => 'സഹോദര സംരംഭങ്ങൾ',
 'search-interwiki-default' => '$1 ഫലങ്ങൾ:',
 'search-interwiki-more' => '(കൂടുതൽ)',
-'search-mwsuggest-enabled' => 'നിർദ്ദേശങ്ങൾ വേണം',
-'search-mwsuggest-disabled' => 'നിർദ്ദേശങ്ങൾ വേണ്ട',
 'search-relatedarticle' => 'ബന്ധപ്പെട്ടവ',
 'mwsuggest-disable' => 'അജാക്സ് നിർദ്ദേശങ്ങൾ വേണ്ട',
 'searcheverything-enable' => 'എല്ലാ നാമമേഖലകളും തിരയുക',
@@ -1426,7 +1427,7 @@ $1",
 'timezoneregion-indian' => 'ഇന്ത്യൻ മഹാസമുദ്രം',
 'timezoneregion-pacific' => 'ശാന്തസമുദ്രം',
 'allowemail' => 'എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക',
-'prefs-searchoptions' => 'തിരà´\9aàµ\8dà´\9aിൽ à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ൾ',
+'prefs-searchoptions' => 'തിരയàµ\81à´\95',
 'prefs-namespaces' => 'നാമമേഖലകൾ',
 'defaultns' => 'അല്ലെങ്കിൽ ഈ നാമമേഖലകളിൽ തിരയുക:',
 'default' => 'സ്വതേ',
@@ -1766,7 +1767,7 @@ $2 {{PLURAL:$3|തരത്തിലുള്ള പ്രമാണം|തരങ
 'fileexists-forbidden' => 'ഈ പേരിൽ ഒരു പ്രമാണം നിലവിലുണ്ട്, അതു മാറ്റി സൃഷ്ടിക്കുക സാദ്ധ്യമല്ല.
 താങ്കൾക്ക് ഈ ചിത്രം അപ്‌ലോഡ് ചെയ്തേ മതിയാവുയെങ്കിൽ, ദയവു ചെയ്തു വേറൊരു പേരിൽ ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'ഈ പേരിൽ ഒരു പ്രമാണം പങ്ക് വെയ്ക്കപ്പെട്ടുപയോഗിക്കുന്ന ശേഖരത്തിലുണ്ട്. താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്തേ മതിയാവുയെങ്കിൽ, ദയവായി തിരിച്ചു പോയി പുതിയ ഒരു പേരിൽ ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക.[[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'à´\88 à´ªàµ\8dരമാണà´\82 à´\87നി à´ªà´±à´¯àµ\81à´¨àµ\8dà´¨ {{PLURAL:$1|à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86|à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86}} à´\85പരനാണ്‌:',
+'file-exists-duplicate' => 'à´\88 à´ªàµ\8dരമാണà´\82 à´\87നി à´ªà´±à´¯àµ\81à´¨àµ\8dà´¨ {{PLURAL:$1|à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86|à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86}} à´ªà´\95ർപàµ\8dà´ªാണ്‌:',
 'file-deleted-duplicate' => 'ഈ പ്രമാണത്തിനു സദൃശമായ പ്രമാണം ([[:$1]]) മുമ്പ് മായ്ക്കപ്പെട്ടിട്ടുണ്ട്.
 ആ പ്രമാണത്തിന്റെ മായ്ക്കൽ ചരിത്രം എടുത്തു പരിശോധിച്ച ശേഷം മാത്രം വീണ്ടും അപ്‌‌ലോഡ് ചെയ്യുക.',
 'uploadwarning' => 'അപ്‌ലോഡ് മുന്നറിയിപ്പ്',
@@ -1840,7 +1841,7 @@ $1',
 'backend-fail-internal' => '"$1" എന്ന സ്റ്റോറേജ് ബാക്കെൻഡിൽ അപരിചിതമായ പിഴവ് സംഭവിച്ചു.',
 'backend-fail-contenttype' => '"$1" എന്നതിൽ സംഭരിച്ചിരിക്കുന്ന പ്രമാണത്തിന്റെ ഉള്ളടക്ക തരം നിർണ്ണയിക്കാനായില്ല.',
 'backend-fail-batchsize' => 'ശേഖരണ ബാക്ക്എൻഡിൽ $1 ഫയൽ {{PLURAL:$1|പ്രവൃത്തി|പ്രവൃത്തികൾ}} ചെയ്യാൻ നൽകിയിരുന്നു; അതിന്റെ പരിധി $2 {{PLURAL:$2|പ്രവൃത്തി|പ്രവൃത്തികൾ}} ആണ്.',
-'backend-fail-usable' => 'ആവശ്യമായത്ര അനുമതിയില്ലാത്തതു കൊണ്ടോ ഡയറക്റ്ററികൾ/കണ്ടൈനറുകൾ ഇല്ലാത്തതു കൊണ്ടോ പ്രമാണം $1 എഴുതിച്ചേർക്കാൻ കഴിഞ്ഞില്ല.',
+'backend-fail-usable' => 'ആവശ്യമായ അനുമതിയില്ലാത്തതു കൊണ്ടോ ഡയറക്റ്ററികൾ/കണ്ടൈനറുകൾ ഇല്ലാത്തതു കൊണ്ടോ പ്രമാണം $1 എഴുതിച്ചേർക്കാൻ അല്ലെങ്കിൽ എടുക്കാൻ കഴിഞ്ഞില്ല.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '"$1" എന്ന ശേഖരണ ബാക്ക്എൻഡിനായി ജേണൽ ഡേറ്റാബേസിനെ ബന്ധപ്പെടാൻ കഴിഞ്ഞില്ല.',
@@ -1958,7 +1959,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'nolinkstoimage' => 'ഈ ചിത്രം/പ്രമാണം വിക്കിയിലെ താളുകളിലൊന്നിലും ഉപയോഗിക്കുന്നില്ല.',
 'morelinkstoimage' => 'ഈ പ്രമാണത്തിലേയ്ക്കുള്ള [[Special:WhatLinksHere/$1|കൂടുതൽ കണ്ണികൾ]] കാണുക.',
 'linkstoimage-redirect' => '$1 (പ്രമാണ തിരിച്ചുവിടൽ) $2',
-'duplicatesoffile' => 'à´\88 à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 {{PLURAL:$1|à´\92à´°àµ\81 à´\85പര à´ªàµ\8dരമാണതàµ\8dà´¤àµ\86|$1 à´\85പര പ്രമാണങ്ങളെ}} താഴെ കൊടുത്തിരിക്കുന്നു ([[Special:FileDuplicateSearch/$2|കൂടുതൽ വിവരങ്ങൾ]]):',
+'duplicatesoffile' => 'à´\88 à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 {{PLURAL:$1|à´\92à´°àµ\81 à´ªà´\95ർപàµ\8dà´ªàµ\8d à´ªàµ\8dരമാണതàµ\8dà´¤àµ\86|$1 à´ªà´\95ർപàµ\8dà´ªàµ\8d പ്രമാണങ്ങളെ}} താഴെ കൊടുത്തിരിക്കുന്നു ([[Special:FileDuplicateSearch/$2|കൂടുതൽ വിവരങ്ങൾ]]):',
 'sharedupload' => 'ഇത് $1 സം‌രംഭത്തിൽ നിന്നുള്ള പ്രമാണമാണ്‌, മറ്റു സം‌രംഭങ്ങളും ഇതുപയോഗിക്കുന്നുണ്ടാകാം.',
 'sharedupload-desc-there' => 'ഈ പ്രമാണം $1 സംരംഭത്തിൽ നിന്നുമുള്ളതാണ്, മറ്റു പദ്ധതികൾ ഇതുപയോഗിക്കുന്നുണ്ടാകാം.
 കൂടുതൽ വിവരങ്ങൾക്ക് ദയവായി [$2 പ്രമാണത്തിന്റെ വിവരണ താൾ] കാണുക.',
@@ -1975,6 +1976,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'shared-repo' => 'ഒരു പങ്കുവെക്കപ്പെട്ട സംഭരണി',
 'shared-repo-name-wikimediacommons' => 'വിക്കിമീഡിയ കോമൺസ്',
 'filepage.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. പ്രമാണ വിവരണ താളുകളിൽ ഉൾപ്പെടുത്തപ്പെടുന്നതായിരിക്കും, ബാഹ്യ ക്ലൈന്റ് വിക്കികളിലും അത് ലഭ്യമായിരിക്കും */',
+'upload-disallowed-here' => 'നിർഭാഗ്യവശാൽ ഈ ചിത്രത്തിനു മുകളിൽ മറ്റൊരു ചിത്രം ചേർക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
 
 # File reversion
 'filerevert' => '$1 തിരസ്ക്കരിക്കുക',
@@ -2082,6 +2084,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # 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 പതിപ്പുകൾ}}',
@@ -2110,6 +2113,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'mostlinkedtemplates' => 'ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന ഫലകങ്ങൾ',
 'mostcategories' => 'ഏറ്റവുമധികം വർഗ്ഗങ്ങൾ ഉൾപ്പെടുത്തിയിരിക്കുന്ന താളുകൾ',
 'mostimages' => 'ഏറ്റവുമധികം കണ്ണി ചേർത്തിരിക്കുന്ന പ്രമാണങ്ങൾ',
+'mostinterwikis' => 'ഏറ്റവുമധികം അന്തർവിക്കികളുള്ള താളുകൾ',
 'mostrevisions' => 'ഏറ്റവുമധികം തിരുത്തപ്പെട്ട താളുകൾ',
 'prefixindex' => 'പൂർവ്വപദത്തോടു കൂടിയ എല്ലാ താളുകളും',
 'prefixindex-namespace' => 'പൂർവ്വപദമുള്ള എല്ലാ താളുകളും (നാമമേഖല $1)',
@@ -2256,6 +2260,8 @@ 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' => 'താഴെ കാണുന്ന ഫോം മറ്റൊരു ഉപയോക്താവിന്‌ ഇമെയിൽ അയക്കാൻ ഉപയോഗിക്കാവുന്നതാണ്.
 [[Special:Preferences|ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങളിൽ]] കൊടുത്തിട്ടുള്ള ഇമെയിൽ വിലാസം "ദാതാവ്" ആയി വരുന്നതാണ്‌, അതുകൊണ്ട് സ്വീകർത്താവിന്‌ താങ്കൾക്ക് നേരിട്ട് മറുപടി അയക്കാൻ കഴിയും.',
@@ -2290,7 +2296,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # Watchlist
 'watchlist' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക',
 'mywatchlist' => 'ഞാൻ ശ്രദ്ധിക്കുന്നവ',
-'watchlistfor2' => '$1 എന്ന ഉപയോക്താവ് $2.',
+'watchlistfor2' => 'ഉപയോക്താവ്:$1 $2',
 'nowatchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ഇനങ്ങളൊന്നുമില്ല.',
 'watchlistanontext' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുവാനോ തിരുത്തുവാനോ $1.',
 'watchnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
@@ -2372,7 +2378,7 @@ $UNWATCHURL
 'delete-confirm' => '"$1" മായ്ക്കുക',
 'delete-legend' => 'മായ്ക്കുക',
 'historywarning' => "'''മുന്നറിയിപ്പ്''': താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു ഏകദേശം {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
-'confirmdeletetext' => 'താà´\99àµ\8dà´\95ൾ à´\92à´°àµ\81 à´¤à´¾àµ¾ à´\85തിനàµ\8dà´±àµ\86 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ à´\9aà´°à´¿à´¤àµ\8dà´°à´®à´\9fà´\95àµ\8dà´\95à´\82 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95àµ\81വാൻ à´ªàµ\8bà´µàµ\81à´\95യാണàµ\8d. à´¤à´¾à´\99àµ\8dà´\95ൾ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´¨àµ\8dനതിനàµ\8dà´±àµ\86 à´ªà´°à´¿à´£à´¿à´¤à´«à´²à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95റിയാമàµ\86à´¨àµ\8dà´¨àµ\81à´\82, à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\88 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95ൽ [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.',
+'confirmdeletetext' => 'താà´\99àµ\8dà´\95ൾ à´\92à´°àµ\81 à´¤à´¾àµ¾ à´\85തിനàµ\8dà´±àµ\86 à´¨à´¾àµ¾à´µà´´à´¿à´¯à´\9fà´\95àµ\8dà´\95à´\82 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95àµ\81വാൻ à´ªàµ\8bà´µàµ\81à´\95യാണàµ\8d. à´\88 à´\9aàµ\86à´¯àµ\8dതിയàµ\81à´\9fàµ\86 à´ªà´°à´¿à´£à´¤à´«à´²à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95റിയാമàµ\86à´¨àµ\8dà´¨àµ\81à´\82, à´\88 à´¨à´\9fà´ªà´\9fà´¿ [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.',
 'actioncomplete' => 'പ്രവൃത്തി പൂർത്തിയായിരിക്കുന്നു',
 'actionfailed' => 'പ്രവൃത്തി പരാജയപ്പെട്ടിരിക്കുന്നു',
 'deletedtext' => '"$1" മായ്ച്ചിരിക്കുന്നു. പുതിയതായി നടന്ന മായ്ക്കലുകളുടെ വിവരങ്ങൾ $2 ഉപയോഗിച്ച് കാണാം.',
@@ -2395,8 +2401,8 @@ $UNWATCHURL
 'rollback' => 'തിരുത്തലുകൾ റോൾബാക്ക് ചെയ്യുക',
 'rollback_short' => 'റോൾബാക്ക്',
 'rollbacklink' => 'റോൾബാക്ക്',
-'rollbacklinkcount' => '{{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ|$1 à´¤à´¿à´°àµ\81à´¤àµ\8dതലുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
-'rollbacklinkcount-morethan' => '{{PLURAL:$1|à´\92à´¨àµ\8dനിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ|$1 à´\8eà´£àµ\8dണതàµ\8dതിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dതലുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
+'rollbacklinkcount' => '{{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\8d|$1 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤ുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|à´\92à´¨àµ\8dനിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ|$1 à´\8eà´£àµ\8dണതàµ\8dതിലധിà´\95à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤ുകൾ}} മുൻപ്രാപനം ചെയ്യുക',
 'rollbackfailed' => 'റോൾബാക്ക് പരാജയപ്പെട്ടു',
 'cantrollback' => 'തിരുത്തൽ തിരസ്കരിക്കുവാൻ സാധിക്കുകയില്ല. ഒരു ഉപയോക്താവ് മാത്രമാണ് ഈ താളിൽ സം‌ഭാവന ചെയ്തിരിക്കുന്നത്.',
 'alreadyrolled' => '[[:$1]] എന്ന താളിൽ [[User:$2|$2]] ([[User talk:$2|സംവാദം]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) നടത്തിയ തിരുത്തലുകൾ മുൻപ്രാപനം ചെയ്യാൻ സാധിക്കുന്നതല്ല. മറ്റാരോ താൾ തിരുത്തുകയോ മുൻപ്രാപനം ചെയ്യുകയോ ചെയ്തിരിക്കുന്നു.
@@ -2892,6 +2898,7 @@ $1',
 'import-interwiki-templates' => 'എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക',
 'import-interwiki-submit' => 'ഇറക്കുമതി',
 'import-interwiki-namespace' => 'ഉദ്ദിഷ്ട നാമമേഖല:',
+'import-interwiki-rootpage' => 'ലക്ഷ്യമിട്ട മൂലതാൾ (ഐച്ഛികം):',
 'import-upload-filename' => 'പ്രമാണത്തിന്റെ പേര്‌',
 'import-comment' => 'കുറിപ്പ്:',
 'importtext' => 'ദയവായി സ്രോതസ്സ് വിക്കിയിൽ നിന്ന് [[Special:Export|കയറ്റുമതി ഉപകരണം]] ഉപയോഗിച്ച് പ്രമാണം കയറ്റുമതി ചെയ്യുക.
@@ -2927,6 +2934,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' => 'ഇറക്കുമതി പ്രവർത്തനരേഖ',
@@ -2938,7 +2948,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം',
-'javascripttest-disabled' => 'ഈ വിക്കിയിൽ ഈ പ്രക്രിയ സജ്ജമാക്കിയിട്ടില്ല.',
 'javascripttest-title' => '$1 പരീക്ഷണങ്ങൾ നടക്കുന്നുണ്ട്',
 'javascripttest-pagetext-noframework' => 'ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.',
 'javascripttest-pagetext-unknownframework' => 'അപരിചിതമായ പരീക്ഷണ ചട്ടക്കൂട് "$1".',
@@ -3068,11 +3077,34 @@ $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' => 'താളിന്റെ ഐ.ഡി.',
+'pageinfo-robot-policy' => 'തിരച്ചിൽ പ്രവർത്തനത്തിന്റെ സ്ഥിതി',
+'pageinfo-robot-index' => 'സൂചികാവത്കരിക്കാവുന്നത്',
+'pageinfo-robot-noindex' => 'സൂചികാവത്കരിക്കാനാവാത്തത്',
 'pageinfo-views' => 'എടുത്തുനോക്കലുകളുടെ എണ്ണം',
-'pageinfo-watchers' => 'ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം',
-'pageinfo-edits' => 'ആകെ തിരുത്തലുകൾ',
-'pageinfo-authors' => 'ആകെ രചയിതാക്കളുടെ എണ്ണം',
+'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)',
+'pageinfo-hidden-categories' => 'മറഞ്ഞിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗം|വർഗ്ഗങ്ങൾ}} ($1)',
+'pageinfo-templates' => 'ഉൾപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}} ($1)',
+'pageinfo-toolboxlink' => 'താളിന്റെ വിവരങ്ങൾ',
 
 # Skin names
 'skinname-standard' => 'സാർവത്രികം',
@@ -3125,16 +3157,19 @@ $1',
 'file-info-size' => '$1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, മൈം തരം: $4',
 'file-info-size-pages' => '$1 × $2 പിക്സൽ, പ്രമാണത്തിന്റെ വലിപ്പം: $3, മൈം തരം: $4, {{PLURAL:$5|ഒരു താൾ|$5 താളുകൾ}}',
 'file-nohires' => 'കൂടുതൽ വ്യക്തതയുള്ള ചിത്രം ലഭ്യമല്ല.',
-'svg-long-desc' => 'SVG പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
+'svg-long-desc' => 'എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
+'svg-long-desc-animated' => 'ചലിക്കുന്ന എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
 'show-big-image' => 'പൂർണ്ണ റെസലൂഷൻ',
 'show-big-image-preview' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1.',
-'show-big-image-other' => 'മറàµ\8dà´±àµ\8d {{PLURAL:$2|à´±àµ\86സലàµ\82ഷൻ|à´±àµ\86സലàµ\82à´·à´¨àµ\81à´\95ൾ}}: $1.',
+'show-big-image-other' => 'à´\95àµ\82à´\9fàµ\81തൽ {{PLURAL:$2|à´±àµ\86സലàµ\82ഷൻ}}: $1.',
 'show-big-image-size' => '$1 × $2 പിക്സലുകൾ',
 'file-info-gif-looped' => 'പുനരാവർത്തിതം',
 'file-info-gif-frames' => '{{PLURAL:$1|ഒരു ചട്ടം|$1 ചട്ടങ്ങൾ}}',
 'file-info-png-looped' => 'പുനരാവർത്തിതം',
 'file-info-png-repeat' => '{{PLURAL:$1|ഒരു തവണ|$1 തവണ}} പ്രവർത്തിപ്പിച്ചു',
 'file-info-png-frames' => '{{PLURAL:$1|ഒരു ഫ്രെയിം|$1 ഫ്രെയിം}}',
+'file-no-thumb-animation' => "'''ശ്രദ്ധിക്കുക: സാങ്കേതികപരിമിതികൾ മൂലം, ഈ പ്രമാണത്തിന്റെ ലഘുചിത്രങ്ങൾ ചലനാത്മകമല്ല.'''",
+'file-no-thumb-animation-gif' => "'''കുറിപ്പ്: സാങ്കേതികമായ പരിമിതികളാൽ, ഇങ്ങനെയുള്ള ഉയർന്ന റെസലൂഷൻ ജി.ഐ.എഫ്. ചിത്രങ്ങളുടെ ലഘുചിത്രങ്ങൾ ചലിക്കുന്നതായിരിക്കുകയില്ല.'''",
 
 # Special:NewFiles
 'newimages' => 'പുതിയ പ്രമാണങ്ങളുടെ ചിത്രശാല',
@@ -3210,7 +3245,7 @@ $1',
 'exif-software' => 'ഉപയോഗിച്ച സോഫ്റ്റ്‌വെയർ',
 'exif-artist' => 'ഛായാഗ്രാഹകൻ',
 'exif-copyright' => 'പകർപ്പവകാശ ഉടമ',
-'exif-exifversion' => 'Exif പതിപ്പ്',
+'exif-exifversion' => 'എക്സിഫ് (Exif) പതിപ്പ്',
 'exif-flashpixversion' => 'പിന്തുണയുള്ള ഫ്ലാഷ്‌‌പിക്സ് പതിപ്പ്',
 'exif-colorspace' => 'കളർ സ്പേസ്',
 'exif-componentsconfiguration' => 'ഓരോ ഘടകത്തിന്റേയും അർത്ഥം',
@@ -3291,8 +3326,8 @@ $1',
 'exif-gpsdestdistanceref' => 'ലക്ഷ്യം വച്ചതിലേയ്ക്കുള്ള ദൂരത്തിനുള്ള അവലംബം',
 'exif-gpsdestdistance' => 'ലക്ഷ്യം വച്ചതിലേയ്ക്കുള്ള ദൂരം',
 'exif-gpsprocessingmethod' => 'ജി.പി.എസ്. പ്രക്രിയയുടെ പേര്',
-'exif-gpsareainformation' => 'GPS പ്രദേശത്തിന്റെ പേര്‌',
-'exif-gpsdatestamp' => 'GPS തീയതി',
+'exif-gpsareainformation' => 'ജി.പി.എസ്. പ്രദേശത്തിന്റെ പേര്‌',
+'exif-gpsdatestamp' => 'ജി.പി.എസ്. തീയതി',
 'exif-gpsdifferential' => 'ജി.പി.എസ്. വ്യത്യാസം ശരിയാക്കൽ',
 'exif-jpegfilecomment' => 'ജെപെഗ് പ്രമാണക്കുറിപ്പ്',
 'exif-keywords' => 'അടയാളവാക്കുകൾ',
@@ -3324,7 +3359,7 @@ $1',
 'exif-languagecode' => 'ഭാഷ',
 'exif-iimversion' => 'ഐ.ഐ.എം. പതിപ്പ്',
 'exif-iimcategory' => 'വർഗ്ഗം',
-'exif-iimsupplementalcategory' => 'പൂരക വർഗ്ഗങ്ങൾ',
+'exif-iimsupplementalcategory' => 'പൂരകവർഗ്ഗങ്ങൾ',
 'exif-datetimeexpires' => 'ഇതിനു ശേഷമുപയോഗിക്കരുത്',
 'exif-datetimereleased' => 'പ്രസിദ്ധീകരിച്ചത്',
 'exif-originaltransmissionref' => 'യഥാർത്ഥ പ്രസരണ പ്രദേശത്തിന്റെ കോഡ്',
@@ -3339,7 +3374,7 @@ $1',
 'exif-rightscertificate' => 'അവകാശകൈകാര്യ യോഗ്യതാപത്രം',
 'exif-copyrighted' => 'പകർപ്പവകാശ സ്ഥിതി',
 'exif-copyrightowner' => 'പകർപ്പവകാശ ഉടമ',
-'exif-usageterms' => 'ഉപയോഗ നിബന്ധനകൾ',
+'exif-usageterms' => 'ഉപയോഗനിബന്ധനകൾ',
 'exif-webstatement' => 'ഓൺലൈൻ പകർപ്പവകാശക്കുറിപ്പ്',
 'exif-originaldocumentid' => 'യഥാർത്ഥ രേഖയുടെ അനന്യമായ ഐ.ഡി.',
 'exif-licenseurl' => 'പകർപ്പവകാശ അനുമതിയുടെ യൂ.ആർ.എൽ.',
@@ -3638,6 +3673,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[അന്തർവിക്കി ഉൾപ്പെടുത്തൽ സജ്ജമല്ല]',
 'scarytranscludefailed' => '[$1-നു ഫലകം കണ്ടുപിടിക്കാൻ പറ്റിയില്ല]',
+'scarytranscludefailed-httpstatus' => '[$1-നു ഫലകം എടുക്കാൻ കഴിഞ്ഞില്ല: എച്ച്.റ്റി.റ്റി.പി. $2]',
 'scarytranscludetoolong' => '[വളരെ നീളക്കൂടുതലുള്ള യൂ.ആർ.എൽ.]',
 
 # Delete conflict
@@ -3783,13 +3819,13 @@ $5
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'ഒരേ പ്രമാണത്തിന്റെ പലപകർപ്പുകളുണ്ടോയെന്നു തിരയുക',
-'fileduplicatesearch-summary' => 'ഒരേ പ്രമാണം തന്നെ വിവിധപേരിലുണ്ടോയെന്നു ഹാഷ് വാല്യൂവധിഷ്ഠിതമായി തിരയുക.',
-'fileduplicatesearch-legend' => 'à´\85പരനàµ\86 തിരയുക',
+'fileduplicatesearch-summary' => 'ഒരേ പ്രമാണം തന്നെ വിവിധ പേരിലുണ്ടോയെന്നു ഹാഷ് വാല്യൂവധിഷ്ഠിതമായി തിരയുക.',
+'fileduplicatesearch-legend' => 'à´ªà´\95ർപàµ\8dà´ªàµ\81à´£àµ\8dà´\9fàµ\8bà´¯àµ\86à´¨àµ\8dà´¨àµ\8d തിരയുക',
 'fileduplicatesearch-filename' => 'പ്രമാണത്തിന്റെ പേര്:',
 'fileduplicatesearch-submit' => 'തിരയൂ',
 'fileduplicatesearch-info' => '$1 × $2 ബിന്ദു<br /> പ്രമാണത്തിന്റെ വലിപ്പം: $3<br />മൈം തരം: $4',
-'fileduplicatesearch-result-1' => '"$1" à´\8eà´¨àµ\8dà´¨ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8d à´¸à´¦àµ\83à´¶ à´\85പരനില്ല.',
-'fileduplicatesearch-result-n' => '"$1" à´\8eà´¨àµ\8dà´¨ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8d {{PLURAL:$2|à´\92à´°àµ\81 à´¸à´¦àµ\83à´¶ à´\85പരൻ|$2 à´¸à´¦àµ\83à´¶ à´\85പരർ}} ഉണ്ട്.',
+'fileduplicatesearch-result-1' => '"$1" à´\8eà´¨àµ\8dà´¨ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8d à´¸à´¦àµ\83à´¶ à´ªà´\95ർപàµ\8dà´ªàµ\8d à´\87ല്ല.',
+'fileduplicatesearch-result-n' => '"$1" à´\8eà´¨àµ\8dà´¨ à´ªàµ\8dരമാണതàµ\8dതിനàµ\8d {{PLURAL:$2|à´\92à´°àµ\81 à´¸à´¦àµ\83à´¶ à´ªà´\95ർപàµ\8dà´ªàµ\8d|$2 à´¸à´¦àµ\83à´¶ à´ªà´\95ർപàµ\8dà´ªàµ\81à´\95ൾ}} ഉണ്ട്.',
 'fileduplicatesearch-noresults' => '"$1" എന്ന പേരിൽ ഒരു പ്രമാണവും കണ്ടെത്താനായില്ല.',
 
 # Special:SpecialPages
@@ -3910,7 +3946,7 @@ $5
 
 # Feedback
 'feedback-bugornote' => 'സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].
-à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´¤à´¾à´´àµ\86 à´\8eà´³àµ\81à´ªàµ\8dപതàµ\8dതിനായി à´¨àµ½à´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´«àµ\8bà´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´¾à´\82. à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\95àµ\81റിപàµ\8dà´ªàµ\8d "[$3 $2]" à´¤à´¾à´³à´¿àµ½, à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83നാമവàµ\81à´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¬àµ\8dà´°àµ\97സറിനàµ\8dà´±àµ\86 à´ªàµ\87à´°àµ\8bà´\9fàµ\81à´\82 à´\95àµ\82à´\9fà´¿ ചേർക്കുന്നതായിരിക്കും.',
+à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´¤à´¾à´´àµ\86 à´\8eà´³àµ\81à´ªàµ\8dപതàµ\8dതിനായി à´¨àµ½à´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´«àµ\8bà´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´¾à´\82. à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\95àµ\81റിപàµ\8dà´ªàµ\8d "[$3 $2]" à´¤à´¾à´³à´¿àµ½, à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83നാമതàµ\8dതിനàµ\8dà´±àµ\86à´¯àµ\81à´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¬àµ\8dà´°àµ\97സറിനàµ\8dà´±àµ\86 à´ªàµ\87à´°à´¿à´¨àµ\8dà´±àµ\86à´¯àµ\81à´\82 à´\92à´ªàµ\8dà´ªà´\82 ചേർക്കുന്നതായിരിക്കും.',
 'feedback-subject' => 'വിഷയം:',
 'feedback-message' => 'സന്ദേശം:',
 'feedback-cancel' => 'റദ്ദാക്കുക',
@@ -3924,6 +3960,10 @@ $5
 'feedback-bugcheck' => 'കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.',
 'feedback-bugnew' => 'ഞാൻ പരിശോധിച്ചു. പുതിയൊരു ബഗ് ചേർക്കുക',
 
+# Search suggestions
+'searchsuggest-search' => 'തിരയുക',
+'searchsuggest-containing' => 'ഉൾപ്പെടുന്നവ...',
+
 # API errors
 'api-error-badaccess-groups' => 'ഈ വിക്കിയിൽ പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ താങ്കൾക്കനുവാദമില്ല.',
 'api-error-badtoken' => 'ആന്തരിക പിഴവ്: ഗുണകരമല്ലാത്ത ചീട്ട്.',
@@ -3931,7 +3971,7 @@ $5
 '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|പ്രമാണം|പ്രമാണങ്ങൾ}} മുമ്പേതന്നെ മായ്ക്കപ്പെട്ടു',
-'api-error-duplicate-popup-title' => 'à´\85പര{{PLURAL:$1|പ്രമാണം|പ്രമാണങ്ങൾ}}',
+'api-error-duplicate-popup-title' => 'à´ªà´\95ർപàµ\8dà´ªàµ\8d {{PLURAL:$1|പ്രമാണം|പ്രമാണങ്ങൾ}}',
 'api-error-empty-file' => 'താങ്കൾ സമർപ്പിച്ച പ്രമാണം ശൂന്യമാണ്.',
 'api-error-emptypage' => 'ശൂന്യമായ പുതിയ താളുകൾ സൃഷ്ടിക്കുന്നത് അനുവദിക്കുന്നില്ല.',
 'api-error-fetchfileerror' => 'ആന്തരിക പിഴവ്: പ്രമാണം ശേഖരിച്ചുകൊണ്ടിരുന്നപ്പോൾ എന്തോ പിഴവുണ്ടായി.',
index e6b5d5f..284fca6 100644 (file)
@@ -65,7 +65,7 @@ $messages = array(
 'tog-previewontop' => 'Засварлах талбарын өмнө урьдчилж харсан байдлыг үзүүлэх',
 'tog-previewonfirst' => 'Эхний засварын үед урьдчилж харсан байдлыг үзүүлэх',
 'tog-nocache' => 'Вэб хөтөчийн хуудасны кешингийг болиулах',
-'tog-enotifwatchlistpages' => 'Миний хянах жагсаалт дахь хуудас өөрчлөгдөхөд и-мэйл явуулах',
+'tog-enotifwatchlistpages' => 'Миний хянах жагсаалт дахь хуудас өөрчлөгдсөн бол и-мэйл явуулах',
 'tog-enotifusertalkpages' => 'Миний хэлэлцүүлгийн хуудас өөрчлөгдөхөд и-мэйл явуулах',
 'tog-enotifminoredits' => 'Хуудсууд бага зэргээр засварлагдахад ч и-мэйл явуулах',
 'tog-enotifrevealaddr' => 'Мэдэгдлийн и-мэйлд миний мэйл хаягийг илчлэх',
@@ -437,7 +437,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Та одоо гарлаа.'''
 
-Та ямар нэг хэрэглэгчийн бүртгэлгүйгээр {{SITENAME}}-г ашиглах боломжтой, эсвэл саяынхаа болон өөр хэрэглэгчийн бүртгэлээ ашиглан [[Special:UserLogin|дахин нэвтэрч]] болно.
+Та ямар нэг хэрэглэгчийн бүртгэлгүйгээр {{SITENAME}}-г ашиглах боломжтой, эсвэл саяынхаа болон өөр хэрэглэгчийн бүртгэлээ ашиглан <span class='plainlinks'>[$1 дахин нэвтэрч]</span> болно.
 Броузерийнхаа хийсвэр санах ойг цэвэрлэх хүртэл зарим нэг хуудсууд нь таны холбогдсон байдлаар харагдаж болзошгүйг анхааруулъя.",
 'welcomecreation' => '= $1, тавтай морилно уу! ==
 Та амжилттай бүртгэгдлээ.
@@ -1031,8 +1031,6 @@ $1",
 'search-interwiki-caption' => 'Ах дүү төслүүд',
 'search-interwiki-default' => '$1 үр дүн:',
 'search-interwiki-more' => '(илүү их)',
-'search-mwsuggest-enabled' => 'санаачлагатай',
-'search-mwsuggest-disabled' => 'санаачлага байхгүй',
 'search-relatedarticle' => 'Холбоотой',
 'mwsuggest-disable' => 'AJAX саналуудыг болиулах',
 'searcheverything-enable' => 'Бүх нэрний зайнуудад хайх',
@@ -2864,6 +2862,15 @@ $1',
 'exif-gpsareainformation' => 'GPS бүсийн нэр',
 'exif-gpsdatestamp' => 'GPS огноо',
 'exif-gpsdifferential' => 'GPS дифференциал засвар',
+'exif-source' => 'Эх сурвалж',
+'exif-languagecode' => 'Хэл',
+'exif-iimcategory' => 'Ангилал',
+'exif-cameraownername' => 'Камерын эзэн',
+'exif-label' => 'Шошго',
+'exif-datetimemetadata' => 'метадатаг хамгийн сүүлд өөрчилсөн огноо',
+'exif-copyrighted' => 'Зохиогчийн эрхийн байдал',
+'exif-copyrightowner' => 'Зохиогчийн эрх эзэмшигч',
+'exif-originaldocumentid' => 'Ориг баримтын ID',
 
 # EXIF attributes
 'exif-compression-1' => 'Шахагдаагүй',
@@ -2986,6 +2993,8 @@ $1',
 'exif-gpsdestdistance-m' => 'Милл',
 'exif-gpsdestdistance-n' => 'бээр',
 
+'exif-objectcycle-a' => 'Зөвхөн өглөө',
+'exif-objectcycle-p' => 'Зөвхөн орой',
 'exif-objectcycle-b' => 'Өдөр ч шөнө ч',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
@@ -3178,6 +3187,7 @@ $5
 'version-parserhooks' => 'Парсер хүүкүүд',
 'version-variables' => 'Хувьсагчууд',
 'version-antispam' => 'Спамаас сэргийлэх',
+'version-skins' => 'Арьс',
 'version-other' => 'Бусад',
 'version-mediahandlers' => 'Медиа боловсруулагч',
 'version-hooks' => 'Гогцоо',
@@ -3210,6 +3220,7 @@ $5
 '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' => 'Тусгай хуудсууд',
@@ -3296,4 +3307,7 @@ $5
 'revdelete-unrestricted' => 'системийн операторуудаас авч хаясан хязгаарлалтууд',
 'newuserlog-byemail' => 'мэйлээр явуулсан нууц үг',
 
+# Search suggestions
+'searchsuggest-search' => 'Хайх',
+
 );
index caeb5ca..ef8797a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Moldavian (Ð\9cолдовеняскэ)
+/** Moldavian (молдовеняскэ)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -22,132 +22,132 @@ $specialPageAliases = array(
 
 $messages = array(
 # Dates
-'sun'           => 'Дум',
-'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'    => 'аугуст',
+'sun' => 'Дум',
+'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'           => 'деч',
+'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'          => 'Субкатегорий',
-'hidden-categories'      => '{{PLURAL:$1|категорие аскунсэ|категорий аскунсе}}',
-'category-subcat-count'  => "{{PLURAL:$2|Ачастэ категорие концине доар урмэтоаря субкатегорие.|Ачастэ категорие концине {{PLURAL:$1|урмэтоаря субкатегорие|урмэтоареле $1 субкатегорий}}, динтр'ун тотал де $2.}}",
+'pagecategories' => '{{PLURAL:$1|Категоирие|Категорий}}',
+'category_header' => 'Паӂинь дин категория «$1»',
+'subcategories' => 'Субкатегорий',
+'hidden-categories' => '{{PLURAL:$1|категорие аскунсэ|категорий аскунсе}}',
+'category-subcat-count' => "{{PLURAL:$2|Ачастэ категорие концине доар урмэтоаря субкатегорие.|Ачастэ категорие концине {{PLURAL:$1|урмэтоаря субкатегорие|урмэтоареле $1 субкатегорий}}, динтр'ун тотал де $2.}}",
 'category-article-count' => "{{PLURAL:$2|Ачастэ категорие концине доар урмэтоаря паӂинэ.|{{PLURAL:$1|Урмэтоаря паӂинэ|Урмэтоареле $1 паӂинь}} се афлэ ын ачастэ категорие, динтр'ун тотал де $2.}}",
 
-'newwindow'  => "(се дескиде ынтр'о ферястрэ ноуэ)",
-'cancel'     => 'Анулязэ',
-'mytalk'     => 'Дискуцииле меле',
+'newwindow' => "(се дескиде ынтр'о ферястрэ ноуэ)",
+'cancel' => 'Анулязэ',
+'mytalk' => 'Дискуцииле меле',
 'navigation' => 'Навигаре',
 
 # Cologne Blue skin
 'qbfind' => 'Гэсеште',
 
-'errorpagetitle'   => 'Ероаре',
-'returnto'         => 'Ынапой ла $1.',
-'tagline'          => 'Де ла {{SITENAME}}',
-'help'             => 'Ажутор',
-'search'           => 'Каутэ',
-'searchbutton'     => 'Каутэ',
-'searcharticle'    => 'Ду-те',
-'history'          => 'Историкул паӂиний',
-'history_short'    => 'Историк',
+'errorpagetitle' => 'Ероаре',
+'returnto' => 'Ынапой ла $1.',
+'tagline' => 'Де ла {{SITENAME}}',
+'help' => 'Ажутор',
+'search' => 'Каутэ',
+'searchbutton' => 'Каутэ',
+'searcharticle' => 'Ду-те',
+'history' => 'Историкул паӂиний',
+'history_short' => 'Историк',
 'printableversion' => 'Версиуне де типэрит',
-'permalink'        => 'Легэтурэ неынчетатэ',
-'edit'             => 'Едитязэ',
-'create'           => 'Креязэ',
-'editthispage'     => 'Едитязэ ачастэ паӂинэ',
-'delete'           => 'Штерӂе',
-'protect'          => 'Протежязэ',
-'protect_change'   => 'скимбэ',
-'newpage'          => 'Паӂина ноуэ',
-'talkpage'         => 'Дискутэ ачастэ паӂинэ',
+'permalink' => 'Легэтурэ неынчетатэ',
+'edit' => 'Едитязэ',
+'create' => 'Креязэ',
+'editthispage' => 'Едитязэ ачастэ паӂинэ',
+'delete' => 'Штерӂе',
+'protect' => 'Протежязэ',
+'protect_change' => 'скимбэ',
+'newpage' => 'Паӂина ноуэ',
+'talkpage' => 'Дискутэ ачастэ паӂинэ',
 'talkpagelinktext' => 'Дискуций',
-'personaltools'    => 'Унелте персонале',
-'talk'             => 'Дискуций',
-'views'            => 'Визуализэрь',
-'toolbox'          => 'Кутие де унелте',
-'otherlanguages'   => 'Ын алте лимбь',
-'redirectedfrom'   => '(Редирекционат де ла $1)',
-'redirectpagesub'  => 'Паӂинэ де редирекционаре',
-'lastmodifiedat'   => 'Ултима модификаре $2, $1.',
-'jumpto'           => 'Салт ла:',
+'personaltools' => 'Унелте персонале',
+'talk' => 'Дискуций',
+'views' => 'Визуализэрь',
+'toolbox' => 'Кутие де унелте',
+'otherlanguages' => 'Ын алте лимбь',
+'redirectedfrom' => '(Редирекционат де ла $1)',
+'redirectpagesub' => 'Паӂинэ де редирекционаре',
+'lastmodifiedat' => 'Ултима модификаре $2, $1.',
+'jumpto' => 'Салт ла:',
 'jumptonavigation' => 'навигацие',
-'jumptosearch'     => 'кэутаре',
+'jumptosearch' => 'кэутаре',
 
 # 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}}:Дрептурь де аутор',
-'disclaimers'          => 'Деклараций',
-'disclaimerpage'       => 'Project:Декларацие ӂенералэ',
-'edithelp'             => 'Ажутор пентру едитаре',
-'edithelppage'         => 'Help:Едитаре',
-'helppage'             => 'Help:Купринс',
-'mainpage'             => 'Прима паӂина',
+'aboutsite' => 'Деспре {{SITENAME}}',
+'aboutpage' => 'Project:Деспре',
+'copyright' => 'Концинутул есте диспонибил суб $1.',
+'copyrightpage' => '{{ns:project}}:Дрептурь де аутор',
+'disclaimers' => 'Деклараций',
+'disclaimerpage' => 'Project:Декларацие ӂенералэ',
+'edithelp' => 'Ажутор пентру едитаре',
+'edithelppage' => 'Help:Едитаре',
+'helppage' => 'Help:Купринс',
+'mainpage' => 'Прима паӂина',
 'mainpage-description' => 'Прима паӂина',
-'privacy'              => 'Политика де интимитате',
-'privacypage'          => 'Project:Политика де интимитате',
+'privacy' => 'Политика де интимитате',
+'privacypage' => 'Project:Политика де интимитате',
 
 'badaccess' => 'Ероаре пермисиуне',
 
-'retrievedfrom'      => 'Адус де ла «$1»',
+'retrievedfrom' => 'Адус де ла «$1»',
 'youhavenewmessages' => 'Ай $1 ($2).',
-'newmessageslink'    => 'месаже ной',
-'editsection'        => 'едитязэ',
-'editold'            => 'едитязэ',
-'editlink'           => 'едитязэ',
-'viewsourcelink'     => 'везь сурса',
-'editsectionhint'    => 'Едитязэ секциуня: $1',
-'toc'                => 'Таблэ де материй',
-'showtoc'            => 'аратэ',
-'hidetoc'            => 'аскунде',
-'site-rss-feed'      => '$1 Агрегат RSS',
-'site-atom-feed'     => '$1 Агрегат Atom',
-'page-rss-feed'      => '«$1» Агрегат RSS',
-'page-atom-feed'     => '«$1» Агрегат Atom',
-'red-link-title'     => '$1 (паӂина ну егзистэ)',
+'newmessageslink' => 'месаже ной',
+'editsection' => 'едитязэ',
+'editold' => 'едитязэ',
+'editlink' => 'едитязэ',
+'viewsourcelink' => 'везь сурса',
+'editsectionhint' => 'Едитязэ секциуня: $1',
+'toc' => 'Таблэ де материй',
+'showtoc' => 'аратэ',
+'hidetoc' => 'аскунде',
+'site-rss-feed' => '$1 Агрегат RSS',
+'site-atom-feed' => '$1 Агрегат Atom',
+'page-rss-feed' => '«$1» Агрегат RSS',
+'page-atom-feed' => '«$1» Агрегат Atom',
+'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-project'  => 'Паӂина проектулуй',
-'nstab-image'    => 'Фишиер',
+'nstab-main' => 'Паӂинэ',
+'nstab-user' => 'Паӂина утилизаторулуй',
+'nstab-special' => 'Сервичий',
+'nstab-project' => 'Паӂина проектулуй',
+'nstab-image' => 'Фишиер',
 'nstab-template' => 'Шаблон',
 'nstab-category' => 'Категорие',
 
@@ -158,118 +158,115 @@ $messages = array(
 
 Дакэ ну ачеста е мотивул, с-ар путя сэ фи гэсит ун буг ын програм.
 Те рог анунцэ ачест аспект унуй [[Special:ListUsers/sysop|администратор]], индикынду-ь адреса УРЛ.',
-'viewsource'      => 'Везь сурса',
+'viewsource' => 'Везь сурса',
 
 # Login and logout pages
-'yourname'                => 'Нуме де утилизатор:',
-'yourpassword'            => 'Паролэ:',
+'yourname' => 'Нуме де утилизатор:',
+'yourpassword' => 'Паролэ:',
 'nav-login-createaccount' => 'Креязэ конт / Аутентификаре',
-'userlogin'               => 'Креязэ конт / Аутентификаре',
-'logout'                  => 'Ынкиде сесиуня',
-'userlogout'              => 'Ынкиде сесиуня',
-'nologinlink'             => 'Креязэ конт',
+'userlogin' => 'Креязэ конт / Аутентификаре',
+'logout' => 'Ынкиде сесиуня',
+'userlogout' => 'Ынкиде сесиуня',
+'nologinlink' => 'Креязэ конт',
 
 # Edit page toolbar
-'bold_sample'     => 'Текст алдин',
-'bold_tip'        => 'Текст алдин',
-'italic_sample'   => 'Текст курсив',
-'italic_tip'      => 'Текст курсив',
-'link_sample'     => 'Титлул легэтурий',
-'link_tip'        => 'Легэтурэ интернэ',
-'extlink_sample'  => 'http://www.example.com титлул легэтурий',
-'extlink_tip'     => 'Легэтурэ екстернэ (ну уита префиксул http://)',
+'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'    => 'Титлу де нивел 2',
-'nowiki_sample'   => 'Интроду текст неформатат аичь',
-'nowiki_tip'      => 'Игнорэ форматаря вики',
-'image_tip'       => 'Фишиер инсерат',
-'media_tip'       => 'Легэтурэ ла фишиер',
-'sig_tip'         => 'Семнэтура та дататэ',
-'hr_tip'          => 'Линие оризонталэ (фолосеште-о кумпэтат)',
+'headline_tip' => 'Титлу де нивел 2',
+'nowiki_sample' => 'Интроду текст неформатат аичь',
+'nowiki_tip' => 'Игнорэ форматаря вики',
+'image_tip' => 'Фишиер инсерат',
+'media_tip' => 'Легэтурэ ла фишиер',
+'sig_tip' => 'Семнэтура та дататэ',
+'hr_tip' => 'Линие оризонталэ (фолосеште-о кумпэтат)',
 
 # Edit pages
-'summary'                          => 'Резумат:',
-'subject'                          => 'Субьект/титлу:',
-'minoredit'                        => 'Ачаста есте о едитаре минорэ',
-'watchthis'                        => 'Привеште ачастэ паӂинэ',
-'savearticle'                      => 'Салвязэ паӂина',
-'preview'                          => 'Превизуализязэ',
-'showpreview'                      => 'Аратэ превизуализаре',
-'showdiff'                         => 'Аратэ диференце',
-'anoneditwarning'                  => "'''Атенцие:''' Ну ць-ай аутентификат.
+'summary' => 'Резумат:',
+'subject' => 'Субьект/титлу:',
+'minoredit' => 'Ачаста есте о едитаре минорэ',
+'watchthis' => 'Привеште ачастэ паӂинэ',
+'savearticle' => 'Салвязэ паӂина',
+'preview' => 'Превизуализязэ',
+'showpreview' => 'Аратэ превизуализаре',
+'showdiff' => 'Аратэ диференце',
+'anoneditwarning' => "'''Атенцие:''' Ну ць-ай аутентификат.
 Адреса IP та ва фи ынреӂистратэ ын историкул ачестей паӂинь.",
-'newarticle'                       => '(Ноу)',
-'noarticletext'                    => 'Ын ачест момент ну есте ничь ун текст ын ачастэ паӂинэ.
+'newarticle' => '(Ноу)',
+'noarticletext' => 'Ын ачест момент ну есте ничь ун текст ын ачастэ паӂинэ.
 Поць [[Special:Search/{{PAGENAME}}|кэута ачест титлу]] ын алте паӂинь,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} кэута ынреӂистрэрь ын журнале], сау [{{fullurl:{{FULLPAGENAME}}|action=edit}} креа ачастэ паӂинэ]</span>.',
-'editing'                          => 'Едитынд $1',
-'editingsection'                   => 'Едитынд $1 (секциуне)',
-'copyrightwarning'                 => "Рецине кэ тоате контрибуцииле ла {{SITENAME}} сынт дистрибуите суб личенца $2 (везь $1 пентру деталий).
+'editing' => 'Едитынд $1',
+'editingsection' => 'Едитынд $1 (секциуне)',
+'copyrightwarning' => "Рецине кэ тоате контрибуцииле ла {{SITENAME}} сынт дистрибуите суб личенца $2 (везь $1 пентру деталий).
 Дакэ ну дорешть ка чея че скрий сэ фие модификат фэрэ милэ ши редистрибуит ын вое, атунчь ну тримите материалеле респективе аичь.<br />
 Де асеменя, не асигурь кэ чея че ай скирс а фост композицие проприе сау копие динтр'о ресурсэ публикэ сау либерэ.
 '''Ну интродуче материале ку дрептурь де аутор фэрэ пермисиуне!'''",
-'templatesused'                    => '{{PLURAL:$1|Шаблон фолосит|Шаблоане фолосите}} ын ачастэ паӂинэ:',
-'templatesusedpreview'             => '{{PLURAL:$1|Шаблон фолосит|Шаблоане фолосите}} ын ачастэ превизуализаре:',
-'template-protected'               => '(протежат)',
-'template-semiprotected'           => '(семи-протежат)',
-'hiddencategories'                 => 'Ачастэ паӂинэ есте мембрул {{PLURAL:$1|уней категорий аскунсе|а $1 категорий аскунсе}}:',
+'templatesused' => '{{PLURAL:$1|Шаблон фолосит|Шаблоане фолосите}} ын ачастэ паӂинэ:',
+'templatesusedpreview' => '{{PLURAL:$1|Шаблон фолосит|Шаблоане фолосите}} ын ачастэ превизуализаре:',
+'template-protected' => '(протежат)',
+'template-semiprotected' => '(семи-протежат)',
+'hiddencategories' => 'Ачастэ паӂинэ есте мембрул {{PLURAL:$1|уней категорий аскунсе|а $1 категорий аскунсе}}:',
 'permissionserrorstext-withaction' => 'Ну ай пермисиуня сэ $2, дин {{PLURAL:$1|урмэторул мотивул|урмэтоареле мотиве}}:',
 
 # History pages
-'viewpagelogs'           => 'Везь журналеле пентру ачастэ паӂинэ',
-'currentrev-asof'        => 'Версиуня курентэ дин $1',
-'revisionasof'           => 'Версиуня де ла дата $1',
-'previousrevision'       => 'Версиуня антериоарэ',
-'cur'                    => 'акт',
-'last'                   => 'преч',
+'viewpagelogs' => 'Везь журналеле пентру ачастэ паӂинэ',
+'currentrev-asof' => 'Версиуня курентэ дин $1',
+'revisionasof' => 'Версиуня де ла дата $1',
+'previousrevision' => 'Версиуня антериоарэ',
+'cur' => 'акт',
+'last' => 'преч',
 'history-fieldset-title' => 'Рэсфоеште историкул',
-'histfirst'              => 'Примеле',
-'histlast'               => 'Ултимеле',
+'histfirst' => 'Примеле',
+'histlast' => 'Ултимеле',
 
 # Revision deletion
-'rev-delundel'   => 'аратэ/аскунде',
+'rev-delundel' => 'аратэ/аскунде',
 'revdel-restore' => 'скимбэ визибилитатя',
 
 # Merge log
 'revertmerge' => 'Анулязэ ымбинаря',
 
 # Diffs
-'history-title'           => 'Историкул ревизиилор пентру «$1»',
-'difference'              => '(Диференца динтре версиунь)',
-'lineno'                  => 'Линия $1:',
+'history-title' => 'Историкул ревизиилор пентру «$1»',
+'lineno' => 'Линия $1:',
 'compareselectedversions' => 'Компарэ версиуниле селектате',
-'editundo'                => 'десфаче',
+'editundo' => 'десфаче',
 
 # 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'''",
-'notitlematches'            => 'Ничь ун резултат ын титлуриле артиколелор',
-'notextmatches'             => 'Ничь ун резултат ын текстеле артиколелор',
-'prevn'                     => 'антериоареле {{PLURAL:$1|$1}}',
-'nextn'                     => 'урмэтоареле {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Везь ($1 {{int:pipe-separator}} $2) ($3).',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 кувынт|$2 кувинте}})',
-'search-redirect'           => '(редирекционаре кэтре $1)',
-'search-section'            => '(секциуня $1)',
-'search-suggest'            => 'Аць дорит сэ скриець: $1',
-'search-interwiki-caption'  => 'Проекте ынрудите',
-'search-interwiki-default'  => '$1 резултате:',
-'search-interwiki-more'     => '(май мулт)',
-'search-mwsuggest-enabled'  => 'ку суӂестий',
-'search-mwsuggest-disabled' => 'фэрэ суӂестий',
-'nonefound'                 => "'''Нотэ''': Нумай унеле спаций де нуме сынт кэутате импличит.
+'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'''",
+'notitlematches' => 'Ничь ун резултат ын титлуриле артиколелор',
+'notextmatches' => 'Ничь ун резултат ын текстеле артиколелор',
+'prevn' => 'антериоареле {{PLURAL:$1|$1}}',
+'nextn' => 'урмэтоареле {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Везь ($1 {{int:pipe-separator}} $2) ($3).',
+'search-result-size' => '$1 ({{PLURAL:$2|1 кувынт|$2 кувинте}})',
+'search-redirect' => '(редирекционаре кэтре $1)',
+'search-section' => '(секциуня $1)',
+'search-suggest' => 'Аць дорит сэ скриець: $1',
+'search-interwiki-caption' => 'Проекте ынрудите',
+'search-interwiki-default' => '$1 резултате:',
+'search-interwiki-more' => '(май мулт)',
+'nonefound' => "'''Нотэ''': Нумай унеле спаций де нуме сынт кэутате импличит.
 Ынчеркэ сэ пуй ка ши префикс ал кэутэрий ''all:'' пентру а кэута ын тот концинутул (инклузынд ши паӂиниле де дискуций, формате, етч), сау фолосеште спациул де нуме дорит ка ши префикс.",
-'powersearch'               => 'Кэутаре авансатэ',
-'powersearch-legend'        => 'Кэутаре авансатэ',
-'powersearch-ns'            => 'Кэутаре ын спацииле де нуме:',
-'powersearch-redir'         => 'Афишазэ редиректэриле',
-'powersearch-field'         => 'Каутэ дупэ',
+'powersearch' => 'Кэутаре авансатэ',
+'powersearch-legend' => 'Кэутаре авансатэ',
+'powersearch-ns' => 'Кэутаре ын спацииле де нуме:',
+'powersearch-redir' => 'Афишазэ редиректэриле',
+'powersearch-field' => 'Каутэ дупэ',
 
 # Preferences page
-'preferences'   => 'Преферинце',
+'preferences' => 'Преферинце',
 'mypreferences' => 'Преферинцеле меле',
 
 # Groups
@@ -284,83 +281,83 @@ $messages = array(
 'action-edit' => 'едитязэ ачастэ паӂинэ',
 
 # Recent changes
-'recentchanges'                  => 'Скимбэрь реченте',
-'recentchanges-legend'           => 'Опциунь скимбэрь реченте',
+'recentchanges' => 'Скимбэрь реченте',
+'recentchanges-legend' => 'Опциунь скимбэрь реченте',
 'recentchanges-feed-description' => 'Привеште челе май реченте скимбэрь фолосинд ачест агрегат.',
-'rclistfrom'                     => 'Аратэ модификэриле ынчепынд де ла $1',
-'rcshowhideminor'                => '$1 модификэриле миноре',
-'rcshowhidebots'                 => '$1 ботурь',
-'rcshowhideliu'                  => '$1 утилизаторь аутентификаць',
-'rcshowhideanons'                => '$1 утилизаторь анонимь',
-'rcshowhidemine'                 => '$1 едитэриле меле',
-'rclinks'                        => 'Аратэ ултимеле $1 модификэрь дин ултимеле $2 зиле.<br />$3',
-'diff'                           => 'диф',
-'hist'                           => 'ист',
-'hide'                           => 'аскунде',
-'show'                           => 'аратэ',
-'minoreditletter'                => 'м',
-'newpageletter'                  => 'Н',
-'boteditletter'                  => 'б',
-'rc-enhanced-expand'             => 'Аратэ деталий (нечеситэ JavaScript)',
-'rc-enhanced-hide'               => 'Аскунде деталииле',
+'rclistfrom' => 'Аратэ модификэриле ынчепынд де ла $1',
+'rcshowhideminor' => '$1 модификэриле миноре',
+'rcshowhidebots' => '$1 ботурь',
+'rcshowhideliu' => '$1 утилизаторь аутентификаць',
+'rcshowhideanons' => '$1 утилизаторь анонимь',
+'rcshowhidemine' => '$1 едитэриле меле',
+'rclinks' => 'Аратэ ултимеле $1 модификэрь дин ултимеле $2 зиле.<br />$3',
+'diff' => 'диф',
+'hist' => 'ист',
+'hide' => 'аскунде',
+'show' => 'аратэ',
+'minoreditletter' => 'м',
+'newpageletter' => 'Н',
+'boteditletter' => 'б',
+'rc-enhanced-expand' => 'Аратэ деталий (нечеситэ JavaScript)',
+'rc-enhanced-hide' => 'Аскунде деталииле',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Скимбарь корелате',
-'recentchangeslinked-feed'    => 'Скимбарь корелате',
+'recentchangeslinked' => 'Скимбарь корелате',
+'recentchangeslinked-feed' => 'Скимбарь корелате',
 'recentchangeslinked-toolbox' => 'Скимбарь корелате',
-'recentchangeslinked-title'   => 'Скимбэрь легате де «$1»',
+'recentchangeslinked-title' => 'Скимбэрь легате де «$1»',
 'recentchangeslinked-summary' => "Ачаста есте о листэ а скимбэрилор ефектуате речент асупра паӂинилор ку легэтурь де ла о анумитэ паӂинэ (сау асупра мембрилор уней анумите категорий).
 Паӂиниле пе каре ле [[Special:Watchlist|привь]] апар ын '''алдине'''.",
-'recentchangeslinked-page'    => 'Нумеле паӂиний:',
-'recentchangeslinked-to'      => 'Афишазэ скимбэриле ын паӂиниле каре се лягэ де паӂина датэ',
+'recentchangeslinked-page' => 'Нумеле паӂиний:',
+'recentchangeslinked-to' => 'Афишазэ скимбэриле ын паӂиниле каре се лягэ де паӂина датэ',
 
 # Upload
-'upload'        => 'Тримите фишиер',
+'upload' => 'Тримите фишиер',
 'uploadedimage' => 'а ынкэркат «[[$1]]»',
 
 # File description page
-'file-anchor-link'          => 'Фишиер',
-'filehist'                  => 'Историкул фишиерулуй',
-'filehist-help'             => "Апасэ пе '''Дата ши ора''' пентру а ведя версиуня тримисэ атунчь.",
-'filehist-current'          => 'актуалэ',
-'filehist-datetime'         => 'Дата/Ора',
-'filehist-thumb'            => 'Миниатурэ',
-'filehist-thumbtext'        => 'Миниатурэ пентру версиуня дин $1',
-'filehist-user'             => 'Утилизатор',
-'filehist-dimensions'       => 'Дименсиунь',
-'filehist-comment'          => 'Коментариу',
-'imagelinks'                => 'Легэтурь',
-'linkstoimage'              => '{{PLURAL:$1|Урмэтоаря паӂинэ тримите спре|Урмэтоареле $1 паӂинь тримит спре}} ачест фишиер:',
-'sharedupload'              => 'Ачест фишиер провине де ла $1 ши поате фи фолосит ши де алте проекте.',
+'file-anchor-link' => 'Фишиер',
+'filehist' => 'Историкул фишиерулуй',
+'filehist-help' => "Апасэ пе '''Дата ши ора''' пентру а ведя версиуня тримисэ атунчь.",
+'filehist-current' => 'актуалэ',
+'filehist-datetime' => 'Дата/Ора',
+'filehist-thumb' => 'Миниатурэ',
+'filehist-thumbtext' => 'Миниатурэ пентру версиуня дин $1',
+'filehist-user' => 'Утилизатор',
+'filehist-dimensions' => 'Дименсиунь',
+'filehist-comment' => 'Коментариу',
+'imagelinks' => 'Легэтурь',
+'linkstoimage' => '{{PLURAL:$1|Урмэтоаря паӂинэ тримите спре|Урмэтоареле $1 паӂинь тримит спре}} ачест фишиер:',
+'sharedupload' => 'Ачест фишиер провине де ла $1 ши поате фи фолосит ши де алте проекте.',
 'uploadnewversion-linktext' => 'Ынкаркэ о версиуне ноуэ а ачестуй фишиер',
 
 # Statistics
 'statistics' => 'Статистичь',
 
 # Miscellaneous special pages
-'nbytes'        => '{{PLURAL:$1|ун октет|$1 октець}}',
-'nmembers'      => '$1 {{PLURAL:$1|ун мембру|мембрь}}',
-'prefixindex'   => 'Тоате паӂиниле ку префикс',
-'newpages'      => 'Паӂинь ной',
-'move'          => 'Депласязэ',
-'movethispage'  => 'Депласязэ ачастэ паӂинэ',
+'nbytes' => '{{PLURAL:$1|ун октет|$1 октець}}',
+'nmembers' => '$1 {{PLURAL:$1|ун мембру|мембрь}}',
+'prefixindex' => 'Тоате паӂиниле ку префикс',
+'newpages' => 'Паӂинь ной',
+'move' => 'Депласязэ',
+'movethispage' => 'Депласязэ ачастэ паӂинэ',
 'pager-newer-n' => '{{PLURAL:$1|1 май ноу|$1 май ной}}',
 'pager-older-n' => '{{PLURAL:$1|1|$1}} май векь',
 
 # Book sources
-'booksources'    => 'Сурсе де кэрць',
+'booksources' => 'Сурсе де кэрць',
 'booksources-go' => 'Ду-те',
 
 # Special:Log
 'log' => 'Журнале',
 
 # Special:AllPages
-'allpages'       => 'Тоате паӂиниле',
+'allpages' => 'Тоате паӂиниле',
 'alphaindexline' => '$1 пынэ ла $2',
-'prevpage'       => 'Паӂина антериоарэ ($1)',
-'allpagesfrom'   => 'Афишазэ паӂиниле порнинд де ла:',
-'allpagesto'     => 'Афишазэ паӂиниле терминынд де ла:',
-'allarticles'    => 'Тоате паӂиниле',
+'prevpage' => 'Паӂина антериоарэ ($1)',
+'allpagesfrom' => 'Афишазэ паӂиниле порнинд де ла:',
+'allpagesto' => 'Афишазэ паӂиниле терминынд де ла:',
+'allarticles' => 'Тоате паӂиниле',
 'allpagessubmit' => 'Ду-те',
 
 # Special:LinkSearch
@@ -376,110 +373,110 @@ $messages = array(
 'emailuser' => 'Тримите прин поштэ електроникэ ун месаж ачестуй утилизатор',
 
 # Watchlist
-'watchlist'         => 'Паӂинь привите',
-'mywatchlist'       => 'Паӂинь привите',
-'watch'             => 'Привеште',
-'watchthispage'     => 'Привеште ачастэ паӂинэ',
-'unwatch'           => 'Ну май привеште',
-'wlshowlast'        => 'Аратэ ултимеле $1 оре $2 зиле $3',
+'watchlist' => 'Паӂинь привите',
+'mywatchlist' => 'Паӂинь привите',
+'watch' => 'Привеште',
+'watchthispage' => 'Привеште ачастэ паӂинэ',
+'unwatch' => 'Ну май привеште',
+'wlshowlast' => 'Аратэ ултимеле $1 оре $2 зиле $3',
 'watchlist-options' => 'Опциуниле листей де паӂинь привите',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Привинд...',
+'watching' => 'Привинд...',
 'unwatching' => 'Ну май привинд...',
 
 # Delete
-'deletepage'            => 'Штерӂе паӂина',
-'actioncomplete'        => 'Акциуне комплетэ',
-'deletedtext'           => 'Паӂина «$1» а фост штярсэ.
+'deletepage' => 'Штерӂе паӂина',
+'actioncomplete' => 'Акциуне комплетэ',
+'deletedtext' => 'Паӂина «$1» а фост штярсэ.
 Везь $2 пентру о листэ а елементелор штерсе речент.',
-'dellogpage'            => 'Журнал штерӂерь',
-'deletecomment'         => 'Мотив:',
-'deleteotherreason'     => 'Мотив диферит/суплиментар:',
+'dellogpage' => 'Журнал штерӂерь',
+'deletecomment' => 'Мотив:',
+'deleteotherreason' => 'Мотив диферит/суплиментар:',
 'deletereasonotherlist' => 'Алт мотив',
 
 # Rollback
 'rollbacklink' => 'ревино',
 
 # Protect
-'protectlogpage'              => 'Журнал протекций',
-'protectedarticle'            => 'а протежат «[[$1]]»',
-'modifiedarticleprotection'   => 'а скимбат нивелул де протекцие пентру «[[$1]]»',
-'protectcomment'              => 'Мотив:',
-'protectexpiry'               => 'Експирэ:',
-'protect_expiry_invalid'      => 'Тимпул де експираре ну есте валид.',
-'protect_expiry_old'          => 'Тимпул де експираре есте ын трекут.',
-'protect-text'                => "Поць визуализа сау модифика нивелул де протекцие пентру паӂина '''$1'''.",
-'protect-locked-access'       => "Контул тэу ну аре пермисиуня де а скимба нивелуриле де протежаре а паӂиний.
+'protectlogpage' => 'Журнал протекций',
+'protectedarticle' => 'а протежат «[[$1]]»',
+'modifiedarticleprotection' => 'а скимбат нивелул де протекцие пентру «[[$1]]»',
+'protectcomment' => 'Мотив:',
+'protectexpiry' => 'Експирэ:',
+'protect_expiry_invalid' => 'Тимпул де експираре ну есте валид.',
+'protect_expiry_old' => 'Тимпул де експираре есте ын трекут.',
+'protect-text' => "Поць визуализа сау модифика нивелул де протекцие пентру паӂина '''$1'''.",
+'protect-locked-access' => "Контул тэу ну аре пермисиуня де а скимба нивелуриле де протежаре а паӂиний.
 Аичь сынт сетэриле куренте пентру паӂина '''$1''':",
-'protect-cascadeon'           => 'Ачастэ паӂинэ есте протежатэ деоарече есте инклусэ ын {{PLURAL:$1|урмэтоаря паӂинэ, че аре|урмэтоареле паӂинь, че ау}} активитатэ протежаря ла модификаре ын каскадэ.
+'protect-cascadeon' => 'Ачастэ паӂинэ есте протежатэ деоарече есте инклусэ ын {{PLURAL:$1|урмэтоаря паӂинэ, че аре|урмэтоареле паӂинь, че ау}} активитатэ протежаря ла модификаре ын каскадэ.
 Поць скимба нивелул де протежаре ал ачестей паӂинь, дар аста ну ва афекта протекция ын каскадэ.',
-'protect-default'             => 'Пермите тоць утилизаторий',
+'protect-default' => 'Пермите тоць утилизаторий',
 'protect-level-autoconfirmed' => 'Блокязэ утилизаторий ной ши неынреӂистраць',
-'protect-level-sysop'         => 'Нумай администраторий',
-'protect-summary-cascade'     => 'ын каскадэ',
-'protect-expiring'            => 'експирэ $1 (UTC)',
-'protect-cantedit'            => 'Ну поць скимба нивелул де протекцие а ачестей паӂинь, деоарече ну ай пермисиуня де а о модифика.',
-'restriction-type'            => 'Пермисиуне:',
-'restriction-level'           => 'Нивел де рестрикцие:',
+'protect-level-sysop' => 'Нумай администраторий',
+'protect-summary-cascade' => 'ын каскадэ',
+'protect-expiring' => 'експирэ $1 (UTC)',
+'protect-cantedit' => 'Ну поць скимба нивелул де протекцие а ачестей паӂинь, деоарече ну ай пермисиуня де а о модифика.',
+'restriction-type' => 'Пермисиуне:',
+'restriction-level' => 'Нивел де рестрикцие:',
 
 # Undelete
 'undeletelink' => 'визуализязэ/рестаурязэ',
 
 # Namespace form on various pages
-'namespace'      => 'Спациу де нуме:',
-'invert'         => 'Инверсязэ селекция',
+'namespace' => 'Спациу де нуме:',
+'invert' => 'Инверсязэ селекция',
 'blanknamespace' => '(Принчиал)',
 
 # Contributions
-'contributions'       => 'Контрибуцииле утилизаторулуй',
+'contributions' => 'Контрибуцииле утилизаторулуй',
 'contributions-title' => 'Контрибуцииле утилизаторулуй $1',
-'mycontris'           => 'Контрибуцииле меле',
-'contribsub2'         => 'Пентру $1 ($2)',
-'month'               => 'Дин луна (ши май ынаинте):',
-'year'                => 'Дин анул (ши май ынаинте):',
+'mycontris' => 'Контрибуцииле меле',
+'contribsub2' => 'Пентру $1 ($2)',
+'month' => 'Дин луна (ши май ынаинте):',
+'year' => 'Дин анул (ши май ынаинте):',
 
-'sp-contributions-newbies'  => 'Аратэ доар контрибуцииле контурилор ной',
+'sp-contributions-newbies' => 'Аратэ доар контрибуцииле контурилор ной',
 'sp-contributions-blocklog' => 'журнал блокэрь',
-'sp-contributions-talk'     => 'Дискуций',
-'sp-contributions-search'   => 'Каутэ контрибуций',
+'sp-contributions-talk' => 'Дискуций',
+'sp-contributions-search' => 'Каутэ контрибуций',
 'sp-contributions-username' => 'Адресэ IP сау нуме де утилизатор:',
-'sp-contributions-submit'   => 'Каутэ',
+'sp-contributions-submit' => 'Каутэ',
 
 # What links here
-'whatlinkshere'            => 'Че се лягэ аичь',
-'whatlinkshere-title'      => 'Паӂинь каре концин легэтурь спре «$1»',
-'whatlinkshere-page'       => 'Паӂинэ:',
-'linkshere'                => "Урмэтоареле паӂинь концин легэтурь кэтре '''[[:$1]]''':",
-'isredirect'               => 'паӂинэ де редирекционаре',
-'istemplate'               => 'трансклудере',
-'isimage'                  => 'легэтура фишиерулуй',
-'whatlinkshere-prev'       => '{{PLURAL:$1|антериоара|антериоареле $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|урмэтоаря|урматоареле $1}}',
-'whatlinkshere-links'      => '← легэтурь',
+'whatlinkshere' => 'Че се лягэ аичь',
+'whatlinkshere-title' => 'Паӂинь каре концин легэтурь спре «$1»',
+'whatlinkshere-page' => 'Паӂинэ:',
+'linkshere' => "Урмэтоареле паӂинь концин легэтурь кэтре '''[[:$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-filters'    => 'Филтре',
+'whatlinkshere-hidetrans' => '$1 трансклудериле',
+'whatlinkshere-hidelinks' => '$1 легэтурь',
+'whatlinkshere-filters' => 'Филтре',
 
 # 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',
-'blocklink'                => 'блокязэ',
-'unblocklink'              => 'деблокязэ',
-'change-blocklink'         => 'модификэ блокаря',
-'contribslink'             => 'контрибуций',
-'blocklogpage'             => 'Журнал блокэрь',
-'unblocklogentry'          => 'а деблокат $1',
+'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',
+'blocklink' => 'блокязэ',
+'unblocklink' => 'деблокязэ',
+'change-blocklink' => 'модификэ блокаря',
+'contribslink' => 'контрибуций',
+'blocklogpage' => 'Журнал блокэрь',
+'unblocklogentry' => 'а деблокат $1',
 'block-log-flags-nocreate' => 'креаря де контурь дезактиватэ',
 
 # Move page
 'movearticle' => 'Депласязэ паӂина:',
-'newtitle'    => 'Титлул ноу:',
+'newtitle' => 'Титлул ноу:',
 'movepagebtn' => 'Депласязэ паӂина',
 'movelogpage' => 'Журнал депласэрь',
-'movereason'  => 'Мотив:',
-'revertmove'  => 'ревино',
+'movereason' => 'Мотив:',
+'revertmove' => 'ревино',
 
 # Export
 'export' => 'Експортэ паӂинь',
@@ -488,63 +485,63 @@ $messages = array(
 '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-ca-talk'                 => 'Дискуцие деспре артикол',
-'tooltip-ca-edit'                 => 'Поате едита ачастэ паӂинэ. Ле ругэм сэ превизуализязэ концинутул ынаинте де салваре.',
-'tooltip-ca-addsection'           => 'Адаугэ о ноуэ секциуне.',
-'tooltip-ca-viewsource'           => 'Ачастэ паӂинэ есте протежатэ.
+'tooltip-pt-userpage' => 'Паӂина та де утилизатор',
+'tooltip-pt-mytalk' => 'Паӂина та де дискуций',
+'tooltip-pt-preferences' => 'Преферинцеле меле',
+'tooltip-pt-watchlist' => 'Листа паӂинилор пе каре ле мониторизезь',
+'tooltip-pt-mycontris' => 'Листэ де контрибуцииле тале',
+'tooltip-pt-login' => 'Есте ынкуражат сэ се аутентификэ, дешь ачест лукру ну есте облигаториу.',
+'tooltip-pt-logout' => 'Ынкиде сесиуня',
+'tooltip-ca-talk' => 'Дискуцие деспре артикол',
+'tooltip-ca-edit' => 'Поате едита ачастэ паӂинэ. Ле ругэм сэ превизуализязэ концинутул ынаинте де салваре.',
+'tooltip-ca-addsection' => 'Адаугэ о ноуэ секциуне.',
+'tooltip-ca-viewsource' => 'Ачастэ паӂинэ есте протежатэ.
 Поць визуализа доар кодул сурсэ',
-'tooltip-ca-history'              => 'Версиуниле антериоаре але ачестей паӂиний',
-'tooltip-ca-protect'              => 'Протежязэ ачастэ паӂинэ',
-'tooltip-ca-delete'               => 'Штерӂе ачастэ паӂинэ',
-'tooltip-ca-move'                 => 'Депласязэ ачастэ паӂинэ',
-'tooltip-ca-watch'                => 'Адаугэ ла листа де паӂинь привите',
-'tooltip-ca-unwatch'              => 'Елиминэ ачастэ паӂинэ дин листа та де паӂинь привите',
-'tooltip-search'                  => 'Кэутаре ын {{SITENAME}}',
-'tooltip-search-go'               => 'Ду-те ла паӂина ку ачест нуме ексакт дакэ егзистэ',
-'tooltip-search-fulltext'         => 'Каутэ паӂиниле пентру ачест текст',
-'tooltip-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'                => 'Агрегат RSS пентру ачастэ паӂинэ',
-'tooltip-feed-atom'               => 'Агрегат Atom пентру ачастэ паӂинэ',
-'tooltip-t-contributions'         => 'Везь листа де контрибуций але ачестуй утилизатор',
-'tooltip-t-emailuser'             => 'Тримите прин поштэ електроникэ ун месаж ачестуй утилизатор',
-'tooltip-t-upload'                => 'Тримите имаӂинь сау фишиере медия',
-'tooltip-t-specialpages'          => 'Листа тутурор паӂинилор де сервичиу',
-'tooltip-t-print'                 => 'Версиуня де типэрит а ачестей паӂинь',
-'tooltip-t-permalink'             => 'Легэтура перманентэ кэтре ачастэ версиуне а паӂиний',
-'tooltip-ca-nstab-main'           => 'Везь паӂина де концинут',
-'tooltip-ca-nstab-user'           => 'Везь паӂина де утилизатор',
-'tooltip-ca-nstab-special'        => 'Ачаста есте о паӂинэ спечиалэ, ну о поць модифика директ.',
-'tooltip-ca-nstab-project'        => 'Везь паӂина проектулуй',
-'tooltip-ca-nstab-image'          => 'Везь паӂина фишиерулуй',
-'tooltip-ca-nstab-template'       => 'Везь шаблон',
-'tooltip-ca-nstab-category'       => 'Везь паӂина категорией',
-'tooltip-minoredit'               => 'Маркязэ ачастэ едитаре ка фиинд минорэ',
-'tooltip-save'                    => 'Салвязэ скимбэриле тале',
-'tooltip-preview'                 => 'Превизуализаря модофикэрилор тале, фолосеште-о те ругэм ынаинте де а салва!',
-'tooltip-diff'                    => 'Аратэ-мь модификэриле ефектуате асупра текстулуй',
+'tooltip-ca-history' => 'Версиуниле антериоаре але ачестей паӂиний',
+'tooltip-ca-protect' => 'Протежязэ ачастэ паӂинэ',
+'tooltip-ca-delete' => 'Штерӂе ачастэ паӂинэ',
+'tooltip-ca-move' => 'Депласязэ ачастэ паӂинэ',
+'tooltip-ca-watch' => 'Адаугэ ла листа де паӂинь привите',
+'tooltip-ca-unwatch' => 'Елиминэ ачастэ паӂинэ дин листа та де паӂинь привите',
+'tooltip-search' => 'Кэутаре ын {{SITENAME}}',
+'tooltip-search-go' => 'Ду-те ла паӂина ку ачест нуме ексакт дакэ егзистэ',
+'tooltip-search-fulltext' => 'Каутэ паӂиниле пентру ачест текст',
+'tooltip-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' => 'Агрегат RSS пентру ачастэ паӂинэ',
+'tooltip-feed-atom' => 'Агрегат Atom пентру ачастэ паӂинэ',
+'tooltip-t-contributions' => 'Везь листа де контрибуций але ачестуй утилизатор',
+'tooltip-t-emailuser' => 'Тримите прин поштэ електроникэ ун месаж ачестуй утилизатор',
+'tooltip-t-upload' => 'Тримите имаӂинь сау фишиере медия',
+'tooltip-t-specialpages' => 'Листа тутурор паӂинилор де сервичиу',
+'tooltip-t-print' => 'Версиуня де типэрит а ачестей паӂинь',
+'tooltip-t-permalink' => 'Легэтура перманентэ кэтре ачастэ версиуне а паӂиний',
+'tooltip-ca-nstab-main' => 'Везь паӂина де концинут',
+'tooltip-ca-nstab-user' => 'Везь паӂина де утилизатор',
+'tooltip-ca-nstab-special' => 'Ачаста есте о паӂинэ спечиалэ, ну о поць модифика директ.',
+'tooltip-ca-nstab-project' => 'Везь паӂина проектулуй',
+'tooltip-ca-nstab-image' => 'Везь паӂина фишиерулуй',
+'tooltip-ca-nstab-template' => 'Везь шаблон',
+'tooltip-ca-nstab-category' => 'Везь паӂина категорией',
+'tooltip-minoredit' => 'Маркязэ ачастэ едитаре ка фиинд минорэ',
+'tooltip-save' => 'Салвязэ скимбэриле тале',
+'tooltip-preview' => 'Превизуализаря модофикэрилор тале, фолосеште-о те ругэм ынаинте де а салва!',
+'tooltip-diff' => 'Аратэ-мь модификэриле ефектуате асупра текстулуй',
 'tooltip-compareselectedversions' => 'Везь диференцеле ынтре челе доуэ версиунь селектате де пе ачастэ паӂинэ',
-'tooltip-watch'                   => 'Адаугэ ла листа де паӂинь привите',
-'tooltip-rollback'                => "«Ревино» анулязэ модификаря/модификэриле де пе ачастэ паӂинэ а ултимулуй контрибуитор принтр'о сингурэ апэсаре",
+'tooltip-watch' => 'Адаугэ ла листа де паӂинь привите',
+'tooltip-rollback' => "«Ревино» анулязэ модификаря/модификэриле де пе ачастэ паӂинэ а ултимулуй контрибуитор принтр'о сингурэ апэсаре",
 
 # Media information
 'file-info-size' => '$1 × $2 пиксель, мэриме фишиер: $3, тип MIME: $4',
-'file-nohires'   => 'Резолуций май марь ну сынт диспонибиле.',
-'svg-long-desc'  => 'фишиер SVG, ку дименсиуня номиналэ де $1 × $2 пиксель, мэриме фишиер: $3',
+'file-nohires' => 'Резолуций май марь ну сынт диспонибиле.',
+'svg-long-desc' => 'фишиер SVG, ку дименсиуня номиналэ де $1 × $2 пиксель, мэриме фишиер: $3',
 'show-big-image' => 'Мэреште резолуция имаӂиний',
 
 # Bad image list
@@ -555,24 +552,24 @@ $messages = array(
 Орьче легэтурь че урмязэ пе ачеяшь линие сынт консидерате ексчепций, адикэ паӂинь унде фишиерул поате апэря инклус директ.',
 
 # Metadata
-'metadata-help'     => 'Ачест фишиер концине информаций суплиментаре, интродусе пробабил де апаратул фотографик диӂитал сау сканерул каре л-а ӂенерат.
+'metadata-help' => 'Ачест фишиер концине информаций суплиментаре, интродусе пробабил де апаратул фотографик диӂитал сау сканерул каре л-а ӂенерат.
 Дакэ фишиерул а фост модификат ынтре тимп, есте посибил ка унеле деталий сэ ну май фие валабиле.',
-'metadata-expand'   => 'Афишазэ деталий суплиментаре',
+'metadata-expand' => 'Афишазэ деталий суплиментаре',
 'metadata-collapse' => 'Аскунде деталий суплиментаре',
 
 # External editor support
-'edit-externally'      => 'Едитязэ ачест фишиер фолосинд о апликацие екстернэ',
+'edit-externally' => 'Едитязэ ачест фишиер фолосинд о апликацие екстернэ',
 'edit-externally-help' => '(Везь [//www.mediawiki.org/wiki/Manual:External_editors инструкциунь де инсталаре] пентру май мулте информаций)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'тоате',
 'namespacesall' => 'тоате',
-'monthsall'     => 'тоате',
+'monthsall' => 'тоате',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Везь скимбэриле релеванте',
 'watchlisttools-edit' => 'Везь ши модификэ листа паӂинилор привите',
-'watchlisttools-raw'  => 'Модификэ листа брутэ а паӂинилор привите',
+'watchlisttools-raw' => 'Модификэ листа брутэ а паӂинилор привите',
 
 # Special:SpecialPages
 'specialpages' => 'Сервичий',
index 57c8314..73c0a09 100644 (file)
@@ -163,143 +163,143 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#पुनर्निर्देशन', '#पुर्ननिर्देशन', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__अनुक्रमणिकानको__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__प्रदर्शननको__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__शीर्षकनाही__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'सद्यमहिनासाधारण', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'सद्यमहिनासंक्षीप्त', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'सद्यदिवस', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'सद्यदिवस२', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'सद्यदिवसनाव', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'सद्यवर्ष', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'सद्यवेळ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'सद्यतास', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'स्थानिकमहिना', 'स्थानिकमहिना२', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'स्थानिकमहिना१', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'स्थानिकमहिनानाव', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'स्थानिकमहिनासाधारण', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'स्थानिकमहिनासंक्षीप्त', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'स्थानिकदिवस', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'स्थानिकदिवस२', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'स्थानिकदिवसनाव', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'स्थानिकवर्ष', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'स्थानिकवेळ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'स्थानिकतास', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'पानसंख्या', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'लेखसंख्या', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'संचिकासंख्या', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'सदस्यसंख्या', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'सक्रीयसदस्यसंख्या', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'संपादनसंख्या', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'धडकसंख्या', 'प्रेक्षासंख्या', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'लेखनाव', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'लेखानावव', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'नामविश्व', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'नामविश्वा', 'नामविश्वाचे', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'चर्चाविश्व', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'चर्चाविश्वा', 'चर्चाविश्वाचे', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'विषयविश्वा', 'लेखविश्वा', 'विषयविश्वाचे', 'लेखविश्वाचे', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'पूर्णलेखनाव', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'पूर्णलेखनावे', 'अंशदुवा', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'उपपाननाव', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'उपपाननावे', 'उपपाननावाचे', 'उपौंशदुवा', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'मूळपाननाव', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'मूळपाननावे', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'चर्चापाननाव', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'चर्चापाननावे', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'विषयपाननाव', 'लेखपाननाव', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'विषयपाननावे', 'लेखपाननावे', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'संदेश:', 'निरोप:', 'MSG:' ),
-       'subst'                   => array( '0', 'पर्याय:', 'समाविष्टी:', 'अबाह्य:', 'निरकंसबिंब:', 'कंसत्याग:', 'साचाहिन:', 'साचान्तर:', 'साचापरिस्फोट:', 'साचोद्घाटन:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'संदेशनवा:', 'निरोपनवा:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'इवलेसे', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'इवलेसे=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'उजवे', 'right' ),
-       'img_left'                => array( '1', 'डावे', 'left' ),
-       'img_none'                => array( '1', 'कोणतेचनाही', 'नन्ना', 'none' ),
-       'img_width'               => array( '1', '$1अंश', '$1कणी', '$1पक्ष', '$1px' ),
-       'img_center'              => array( '1', 'मध्यवर्ती', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'चौकट', 'फ़्रेम', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'विनाचौकट', 'विनाफ़्रेम', 'frameless' ),
-       'img_page'                => array( '1', 'पान=$1', 'पान $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'उभा', 'उभा=$1', 'उभा $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'सीमा', 'border' ),
-       'img_baseline'            => array( '1', 'तळरेषा', 'आधाररेषा', 'baseline' ),
-       'img_sub'                 => array( '1', 'अधो', 'sub' ),
-       'img_super'               => array( '1', 'उर्ध्व', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'अत्यूच्च', 'top' ),
-       'img_text_top'            => array( '1', 'मजकूर-शीर्ष', 'शीर्ष-मजकूर', 'text-top' ),
-       'img_middle'              => array( '1', 'मध्य', 'middle' ),
-       'img_bottom'              => array( '1', 'तळ', 'बूड', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'मजकुरतळ', 'text-bottom' ),
-       'img_link'                => array( '1', 'दुवा=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'अल्ट=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'इन्ट:', 'INT:' ),
-       'sitename'                => array( '1', 'संकेतस्थळनाव', 'SITENAME' ),
-       'ns'                      => array( '0', 'नावि:', 'NS:' ),
-       'nse'                     => array( '0', 'नाविअरिक्त:', 'नाव्यारिक्त:', 'नाव्याख:', 'NSE:' ),
-       'localurl'                => array( '0', 'स्थानिकस्थळ:', 'स्थानिकसंकेतस्थळ:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'स्थानिकस्थली:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'विदादाता', 'SERVER' ),
-       'servername'              => array( '0', 'विदादातानाव', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'संहीतामार्ग', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'लिंग:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__विनाशीर्षकबदल__', '__विनाशीब__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__विनामजकुरबदल__', '__विनामब__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'सद्यआठवडा', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'सद्यउतरण', 'सद्यउतार', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'स्थानिकआठवडा', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'स्थानिकउतरण', 'स्थानिकउतार', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'आवृत्तीक्र्मांक', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'आवृत्तीदिन', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'आवृत्तीदिन२', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'आवृत्तीमास', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'आवृत्तीवर्ष', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'आवृत्तीमुद्रा', 'आवृत्तीठसा', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'आवृत्तीसदस्य', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'बहुवचन:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'संपूर्णसंस्थळ', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'संपूर्णसंस्थली:', 'संपूर्णसंस्थळी:', 'FULLURLE:' ),
-       'raw'                     => array( '0', 'कच्चे:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'शीर्षकदाखवा', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'ॠ', 'R' ),
-       'newsectionlink'          => array( '1', '__नवविभागदुवा__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__विनानवविभागदुवा__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'सद्यआवृत्ती', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'संकेतस्थलीआंग्ल्संकेत:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'नांगरआंग्लसंकेत', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'सद्यकालमुद्रा', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'स्थानिककालमुद्रा', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'दिशाचिन्ह', 'दिशादर्शक', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#भाषा:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'मसुदाभाषा', 'मजकुरभाषा', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'नामविश्वातीलपाने:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'प्रचालकसंख्या', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'क्रमपद्धती', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'डावाभरीव', 'भरीवडावा', 'PADLEFT' ),
-       'padright'                => array( '0', 'उजवाभरीव', 'भरीवउजवा', 'PADRIGHT' ),
-       'special'                 => array( '0', 'विशेष', 'special' ),
-       'defaultsort'             => array( '1', 'अविचलवर्ग:', 'अविचलवर्गकळ:', 'अविचलवर्गवर्गीकरण:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'संचिकामार्ग:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'खूण', 'खूणगाठ', 'tag' ),
-       'hiddencat'               => array( '1', '__वर्गलपवा__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'वर्गातीलपाने', 'वर्गीतपाने', 'श्रेणीतपाने', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'पानक्षमता', 'PAGESIZE' ),
-       'index'                   => array( '1', '__क्रमीत__', '__अनुक्रमीत__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__विनाक्रमीत__', '__विनाअनुक्रमीत__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'गटक्रमांक', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__अविचलपुर्ननिर्देश__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'सुरक्षास्तर', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'दिनांकनपद्धती', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#पुनर्निर्देशन', '#पुर्ननिर्देशन', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__अनुक्रमणिकानको__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__प्रदर्शननको__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__शीर्षकनाही__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'सद्यमहिनासाधारण', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'सद्यमहिनासंक्षीप्त', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'सद्यदिवस', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'सद्यदिवस२', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'सद्यदिवसनाव', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'सद्यवर्ष', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'सद्यवेळ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'सद्यतास', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'स्थानिकमहिना', 'स्थानिकमहिना२', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'स्थानिकमहिना१', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'स्थानिकमहिनानाव', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'स्थानिकमहिनासाधारण', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'स्थानिकमहिनासंक्षीप्त', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'स्थानिकदिवस', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'स्थानिकदिवस२', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'स्थानिकदिवसनाव', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'स्थानिकवर्ष', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'स्थानिकवेळ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'स्थानिकतास', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'पानसंख्या', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'लेखसंख्या', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'संचिकासंख्या', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'सदस्यसंख्या', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'सक्रीयसदस्यसंख्या', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'संपादनसंख्या', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'धडकसंख्या', 'प्रेक्षासंख्या', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'लेखनाव', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'लेखानावव', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'नामविश्व', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'नामविश्वा', 'नामविश्वाचे', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'चर्चाविश्व', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'चर्चाविश्वा', 'चर्चाविश्वाचे', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'विषयविश्वा', 'लेखविश्वा', 'विषयविश्वाचे', 'लेखविश्वाचे', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'पूर्णलेखनाव', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'पूर्णलेखनावे', 'अंशदुवा', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'उपपाननाव', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'उपपाननावे', 'उपपाननावाचे', 'उपौंशदुवा', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'मूळपाननाव', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'मूळपाननावे', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'चर्चापाननाव', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'चर्चापाननावे', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'विषयपाननाव', 'लेखपाननाव', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'विषयपाननावे', 'लेखपाननावे', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'संदेश:', 'निरोप:', 'MSG:' ),
+       'subst'                     => array( '0', 'पर्याय:', 'समाविष्टी:', 'अबाह्य:', 'निरकंसबिंब:', 'कंसत्याग:', 'साचाहिन:', 'साचान्तर:', 'साचापरिस्फोट:', 'साचोद्घाटन:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'संदेशनवा:', 'निरोपनवा:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'इवलेसे', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'इवलेसे=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'उजवे', 'right' ),
+       'img_left'                  => array( '1', 'डावे', 'left' ),
+       'img_none'                  => array( '1', 'कोणतेचनाही', 'नन्ना', 'none' ),
+       'img_width'                 => array( '1', '$1अंश', '$1कणी', '$1पक्ष', '$1px' ),
+       'img_center'                => array( '1', 'मध्यवर्ती', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'चौकट', 'फ़्रेम', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'विनाचौकट', 'विनाफ़्रेम', 'frameless' ),
+       'img_page'                  => array( '1', 'पान=$1', 'पान $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'उभा', 'उभा=$1', 'उभा $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'सीमा', 'border' ),
+       'img_baseline'              => array( '1', 'तळरेषा', 'आधाररेषा', 'baseline' ),
+       'img_sub'                   => array( '1', 'अधो', 'sub' ),
+       'img_super'                 => array( '1', 'उर्ध्व', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'अत्यूच्च', 'top' ),
+       'img_text_top'              => array( '1', 'मजकूर-शीर्ष', 'शीर्ष-मजकूर', 'text-top' ),
+       'img_middle'                => array( '1', 'मध्य', 'middle' ),
+       'img_bottom'                => array( '1', 'तळ', 'बूड', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'मजकुरतळ', 'text-bottom' ),
+       'img_link'                  => array( '1', 'दुवा=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'अल्ट=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'इन्ट:', 'INT:' ),
+       'sitename'                  => array( '1', 'संकेतस्थळनाव', 'SITENAME' ),
+       'ns'                        => array( '0', 'नावि:', 'NS:' ),
+       'nse'                       => array( '0', 'नाविअरिक्त:', 'नाव्यारिक्त:', 'नाव्याख:', 'NSE:' ),
+       'localurl'                  => array( '0', 'स्थानिकस्थळ:', 'स्थानिकसंकेतस्थळ:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'स्थानिकस्थली:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'विदादाता', 'SERVER' ),
+       'servername'                => array( '0', 'विदादातानाव', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'संहीतामार्ग', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'लिंग:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__विनाशीर्षकबदल__', '__विनाशीब__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__विनामजकुरबदल__', '__विनामब__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'सद्यआठवडा', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'सद्यउतरण', 'सद्यउतार', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'स्थानिकआठवडा', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'स्थानिकउतरण', 'स्थानिकउतार', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'आवृत्तीक्र्मांक', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'आवृत्तीदिन', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'आवृत्तीदिन२', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'आवृत्तीमास', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'आवृत्तीवर्ष', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'आवृत्तीमुद्रा', 'आवृत्तीठसा', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'आवृत्तीसदस्य', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'बहुवचन:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'संपूर्णसंस्थळ', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'संपूर्णसंस्थली:', 'संपूर्णसंस्थळी:', 'FULLURLE:' ),
+       'raw'                       => array( '0', 'कच्चे:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'शीर्षकदाखवा', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'ॠ', 'R' ),
+       'newsectionlink'            => array( '1', '__नवविभागदुवा__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__विनानवविभागदुवा__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'सद्यआवृत्ती', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'संकेतस्थलीआंग्ल्संकेत:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'नांगरआंग्लसंकेत', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'सद्यकालमुद्रा', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'स्थानिककालमुद्रा', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'दिशाचिन्ह', 'दिशादर्शक', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#भाषा:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'मसुदाभाषा', 'मजकुरभाषा', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'नामविश्वातीलपाने:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'प्रचालकसंख्या', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'क्रमपद्धती', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'डावाभरीव', 'भरीवडावा', 'PADLEFT' ),
+       'padright'                  => array( '0', 'उजवाभरीव', 'भरीवउजवा', 'PADRIGHT' ),
+       'special'                   => array( '0', 'विशेष', 'special' ),
+       'defaultsort'               => array( '1', 'अविचलवर्ग:', 'अविचलवर्गकळ:', 'अविचलवर्गवर्गीकरण:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'संचिकामार्ग:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'खूण', 'खूणगाठ', 'tag' ),
+       'hiddencat'                 => array( '1', '__वर्गलपवा__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'वर्गातीलपाने', 'वर्गीतपाने', 'श्रेणीतपाने', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'पानक्षमता', 'PAGESIZE' ),
+       'index'                     => array( '1', '__क्रमीत__', '__अनुक्रमीत__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__विनाक्रमीत__', '__विनाअनुक्रमीत__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'गटक्रमांक', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__अविचलपुर्ननिर्देश__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'सुरक्षास्तर', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'दिनांकनपद्धती', 'formatdate', 'dateformat' ),
 );
 
 $digitTransformTable = array(
@@ -708,7 +708,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''तुम्ही आता अदाखल झाला(logout)आहात.'''
 
-तुम्ही अनामिकपणे {{SITENAME}}चा उपयोग करत राहू शकता, किंवा त्याच अथवा वेगळ्या सदस्य नावाने [[Special:UserLogin| पुन्हा दाखल होऊ शकता]].
+तुम्ही अनामिकपणे {{SITENAME}}चा उपयोग करत राहू शकता, किंवा त्याच अथवा वेगळ्या सदस्य नावाने <span class='plainlinks'>[$1  पुन्हा दाखल होऊ शकता]</span>.
 आपण स्वत:च्या न्याहाळकाची सय (cache) रिकामी करत नाही तो पर्यंत काही पाने आपण अजून दाखल आहात, असे नुसतेच दाखवत राहू शकतील.",
 'welcomecreation' => '== सुस्वागतम, $1! ==
 
@@ -1193,7 +1193,7 @@ $1",
 
 # History merging
 'mergehistory' => 'पान ईतिहासांचे एकत्रिकरण करा',
-'mergehistory-header' => 'हà¥\87 à¤ªà¤¾à¤¨ à¤\8fà¤\95ा à¤¸à¥\8dरà¥\8bत à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤\87तिहास à¤\8fà¤\96ादà¥\8dया à¤¨à¤µà¤¿न पानात समाविष्ट करू देते.
+'mergehistory-header' => 'हà¥\87 à¤ªà¤¾à¤¨ à¤\8fà¤\95ा à¤¸à¥\8dरà¥\8bत à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤\87तिहास à¤\8fà¤\96ादà¥\8dया à¤¨à¤µà¥\80न पानात समाविष्ट करू देते.
 हा बदल पानाचे ऐतिहासिक सातत्य राखेल याची दक्षता घ्या.',
 'mergehistory-box' => 'दोन पानांची आवर्तने संमिलीत करा:',
 'mergehistory-from' => 'स्रोत पान:',
@@ -1273,8 +1273,6 @@ $1",
 'search-interwiki-caption' => 'इतर प्रकल्प',
 'search-interwiki-default' => '$1चे निकाल:',
 'search-interwiki-more' => '(आणखी)',
-'search-mwsuggest-enabled' => 'सजेशन्स सहित',
-'search-mwsuggest-disabled' => 'सजेशन्स नाहीत',
 'search-relatedarticle' => 'जवळील',
 'mwsuggest-disable' => 'AJAX सजेशन्स रद्द करा',
 'searcheverything-enable' => 'सर्वनामविश्वांमध्ये शोधा:',
@@ -1696,7 +1694,7 @@ $1",
 जर तुमच्या कडे पूर्ण रिझोल्यूशनची संचिका असेल तर चढवा अथवा संचिकेचे नाव बदला.',
 'fileexists-forbidden' => 'या नावाची संचिका अगोदरच अस्तित्त्वात आहे; कृपया पुन्हा मागे जाऊन ही संचिका नवीन नावाने चढवा.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'हà¥\87 à¤¨à¤¾à¤µ à¤\85सलà¥\87लà¥\80 à¤\8fà¤\95 à¤¸à¤\82à¤\9aिà¤\95ा à¤¶à¥\87à¤\85रà¥\8dड à¤¸à¤\82à¤\9aिà¤\95ा à¤\95à¥\8bशात à¤\86धà¥\80 à¤ªà¤¾à¤¸à¥\82न à¤\86हà¥\87; à¤\95à¥\83पया à¤ªà¤°à¤¤ à¤«à¤¿à¤°à¤¾ à¤\86णि à¤¨à¤µà¤¿à¤¨(वà¥\87à¤\97ळà¥\8dया) à¤¨à¤¾à¤µà¤¾à¤¨à¥\87 à¤¹à¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤ªà¥\81नà¥\8dहा à¤\9aढवा.[[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'हà¥\87 à¤¨à¤¾à¤µ à¤\85सलà¥\87लà¥\80 à¤\8fà¤\95 à¤¸à¤\82à¤\9aिà¤\95ा à¤¶à¥\87à¤\85रà¥\8dड à¤¸à¤\82à¤\9aिà¤\95ा à¤\95à¥\8bशात à¤\86धà¥\80 à¤ªà¤¾à¤¸à¥\82न à¤\86हà¥\87; à¤\95à¥\83पया à¤ªà¤°à¤¤ à¤®à¤¾à¤\97à¥\87 à¤\9cा à¤\86णि à¤¨à¤µà¥\80न, à¤µà¥\87à¤\97ळà¥\8dया à¤¨à¤¾à¤µà¤¾à¤¨à¥\87 à¤¹à¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤ªà¥\81नà¥\8dहा à¤\9aढवा. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'ही संचिका खालील {{PLURAL:$1|संचिकेची|संचिकांची}} प्रत आहे:',
 'file-deleted-duplicate' => 'या संचिकेसारखीच् संचिका ([[:$1]]) या आधी वगळण्यात आली आहे.
 हि संचिका पुनः चढवण्यापूर्वी आपण त्या संचिकेची वगळण्याची नोंद तपासावी.',
@@ -2829,7 +2827,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'जावा स्क्रिप्ट तपासणी',
-'javascripttest-disabled' => 'हे कार्य अवरूद्ध केले आहे.',
 'javascripttest-title' => '$1 टेस्ट चालू आहेत',
 'javascripttest-pagetext-noframework' => 'हे पान जावा स्क्रिप्ट तपासणी साठी सुरक्षित केले आहे',
 'javascripttest-pagetext-unknownframework' => 'अज्ञात तपासणीचे ठिकाण $1',
@@ -3780,6 +3777,10 @@ $5
 'feedback-bugcheck' => 'उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.',
 'feedback-bugnew' => 'मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी',
 
+# Search suggestions
+'searchsuggest-search' => 'शोधा',
+'searchsuggest-containing' => '.......हे असलेले',
+
 # API errors
 'api-error-badaccess-groups' => 'आपणास ह्या विकीवर संचिका चढवण्याची परवानगी नाही',
 'api-error-badtoken' => 'अंतर्गत चूक: अयोग्य टोकन',
index 77a7da9..cefe13a 100644 (file)
@@ -371,8 +371,6 @@ $messages = array(
 'search-interwiki-caption' => 'Техеньок проектвлӓ',
 'search-interwiki-default' => '$1 результ.:',
 'search-interwiki-more' => '(эче)',
-'search-mwsuggest-enabled' => 'согоньвлӓ доно',
-'search-mwsuggest-disabled' => 'согоньвлӓдеок',
 'nonefound' => "'''Шотыш нӓлдӓ.''' Нимат ак лиӓлт гӹнь, керӓл шамакым цилӓ вӓреок кӹчӓлӓш ак тӹнгӓл. Кӹчӓлжӹ манын,   ''all:'' префиксӹм кычылтда.  Тенге тӓ лӹмвлӓм мода (кӱ тишкӹ сирӓ, нӹнӹн Кӓнгӓшӹмӓшвлӓштӹмӓт, шаблонвлӓмӓт дӓ молымат), уке гӹнь, шукырак лӹмӹм анжыктыда",
 'powersearch' => 'Кымдан кӹчӓлмӓш',
 'powersearch-legend' => 'Кымдан кӹчӓлмӓш',
index 6fd13c7..f1bed2f 100644 (file)
@@ -68,36 +68,36 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#LENCONG', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'BULANSEMASA', 'BULANSEMASA2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'BULANSEMASA1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NAMABULANSEMASA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NAMABULANSEMASAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'SINGBULANSEMASA', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HARISEMASA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HARISEMASA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NAMAHARISEMASA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TAHUNSEMASA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'WAKTUSEMASA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'JAMSEMASA', 'CURRENTHOUR' ),
-       'pagename'                => array( '1', 'NAMALAMAN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NAMALAMANE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'RUANGNAMA', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'RUANGNAMAE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RUANGBINCANG', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RUANGBINCANGE', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'NAMALAMANPENUH', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NAMALAMANPENUHE', 'FULLPAGENAMEE' ),
-       'msg'                     => array( '0', 'PESAN:', 'MSG:' ),
-       'subst'                   => array( '0', 'TUKAR:', 'SUBST:' ),
-       'img_right'               => array( '1', 'kiri', 'right' ),
-       'img_left'                => array( '1', 'kanan', 'left' ),
-       'img_none'                => array( '1', 'tiada', 'none' ),
-       'img_center'              => array( '1', 'tengah', 'center', 'centre' ),
-       'sitename'                => array( '1', 'NAMATAPAK', 'SITENAME' ),
-       'ns'                      => array( '0', 'RN:', 'NS:' ),
-       'nse'                     => array( '0', 'RNE:', 'NSE:' ),
-       'currentweek'             => array( '1', 'MINGGUSEMASA', 'CURRENTWEEK' ),
+       'redirect'                  => array( '0', '#LENCONG', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'BULANSEMASA', 'BULANSEMASA2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'BULANSEMASA1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NAMABULANSEMASA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NAMABULANSEMASAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'SINGBULANSEMASA', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HARISEMASA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HARISEMASA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NAMAHARISEMASA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TAHUNSEMASA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'WAKTUSEMASA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'JAMSEMASA', 'CURRENTHOUR' ),
+       'pagename'                  => array( '1', 'NAMALAMAN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NAMALAMANE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'RUANGNAMA', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'RUANGNAMAE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RUANGBINCANG', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RUANGBINCANGE', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'NAMALAMANPENUH', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NAMALAMANPENUHE', 'FULLPAGENAMEE' ),
+       'msg'                       => array( '0', 'PESAN:', 'MSG:' ),
+       'subst'                     => array( '0', 'TUKAR:', 'SUBST:' ),
+       'img_right'                 => array( '1', 'kiri', 'right' ),
+       'img_left'                  => array( '1', 'kanan', 'left' ),
+       'img_none'                  => array( '1', 'tiada', 'none' ),
+       'img_center'                => array( '1', 'tengah', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'NAMATAPAK', 'SITENAME' ),
+       'ns'                        => array( '0', 'RN:', 'NS:' ),
+       'nse'                       => array( '0', 'RNE:', 'NSE:' ),
+       'currentweek'               => array( '1', 'MINGGUSEMASA', 'CURRENTWEEK' ),
 );
 
 $specialPageAliases = array(
@@ -257,7 +257,7 @@ $messages = array(
 'thursday' => 'Khamis',
 'friday' => 'Jumaat',
 'saturday' => 'Sabtu',
-'sun' => 'Aha',
+'sun' => 'Ahd',
 'mon' => 'Isn',
 'tue' => 'Sel',
 'wed' => 'Rab',
@@ -295,7 +295,7 @@ $messages = array(
 'may' => 'Mei',
 'jun' => 'Jun',
 'jul' => 'Jul',
-'aug' => 'Ogo',
+'aug' => 'Ogs',
 'sep' => 'Sep',
 'oct' => 'Okt',
 'nov' => 'Nov',
@@ -351,7 +351,7 @@ $messages = array(
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Batal hapus',
 'vector-action-unprotect' => 'Ubah perlindungan',
-'vector-simplesearch-preference' => 'Bolehkan cadangan carian lanjutan (kulit Vector sahaja)',
+'vector-simplesearch-preference' => 'Bolehkan bar carian ringkas (kulit Vector sahaja)',
 'vector-view-create' => 'Cipta',
 'vector-view-edit' => 'Sunting',
 'vector-view-history' => 'Lihat sejarah',
@@ -576,8 +576,10 @@ Pertanyaan: $2',
 'protectedpagetext' => 'Laman ini telah dikunci untuk menghalang penyuntingan.',
 '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.',
-'editinginterface' => "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain. Untuk melakukan penterjemahan, anda boleh menggunakan [//translatewiki.net/wiki/Main_Page?setlang=ms translatewiki.net], sebuah projek penyetempatan MediaWiki.",
+'protectedinterface' => 'Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.
+Untuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].',
+'editinginterface' => "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain di wiki ini.
+Untuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(Pertanyaan SQL disorokkan)',
 'cascadeprotected' => 'Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara "melata": $2',
 'namespaceprotected' => "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
@@ -601,7 +603,7 @@ Pentadbir yang menguncinya memberikan penjelasan yang berikut: "$3".',
 # Login and logout pages
 'logouttext' => "'''Anda telah log keluar.'''
 
-Anda boleh terus menggunakan {{SITENAME}} sebagai pengguna tanpa nama, atau anda boleh [[Special:UserLogin|log masuk sekali lagi]] sebagai pengguna lain. Anda boleh membersihkan cache pelayar web anda sekiranya terdapat laman yang memaparkan seolah-olah anda masih log masuk.",
+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.',
@@ -1105,10 +1107,11 @@ Anda tidak memiliki capaian padanya.',
 'revdelete-concurrent-change' => 'Ralat ketika mengubahsuai item bertarikh $2, $1: kelihatan statusnya telah diubah oleh orang lain ketika anda cuba untuk mengubahsuainya.
 Mohon semak log.',
 'revdelete-only-restricted' => 'Ralat menyembunyikan item bertarikh $2, $1: anda tidak boleh menyekat item-item dari pandangan pentadbir-pentadbir tanpa memilih juga salah satu pilihan pandangan lain.',
-'revdelete-reason-dropdown' => '*Sebab penghapusan biasa
+'revdelete-reason-dropdown' => '*Sebab penghapusan yang biasa
 ** Pencabulan hak cipta
-** Maklumat peribadi tidak sesuai
-** Maklumat berpotensi fitnah',
+** Ulasan atau maklumat peribadi tidak sesuai
+** Nama pengguna tidak sesuai
+** Maklumat berkemungkinan fitnah',
 'revdelete-otherreason' => 'Sebab lain/tambahan:',
 'revdelete-reasonotherlist' => 'Sebab lain',
 'revdelete-edit-reasonlist' => 'Ubah sebab-sebab hapus',
@@ -1207,8 +1210,6 @@ Butirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGEN
 'search-interwiki-caption' => 'Projek-projek lain',
 'search-interwiki-default' => 'Keputusan daripada $1:',
 'search-interwiki-more' => '(lagi)',
-'search-mwsuggest-enabled' => 'berserta cadangan',
-'search-mwsuggest-disabled' => 'tiada cadangan',
 'search-relatedarticle' => 'Berkaitan',
 'mwsuggest-disable' => 'Matikan ciri cadangan AJAX',
 'searcheverything-enable' => 'Cari dalam semua ruang nama',
@@ -1305,7 +1306,7 @@ Di sini ada nilai yang dihasilkan secara rawak yang boleh anda guna: $1',
 'timezoneregion-indian' => 'Lautan Hindi',
 'timezoneregion-pacific' => 'Lautan Pasifik',
 'allowemail' => 'Benarkan e-mel daripada pengguna lain',
-'prefs-searchoptions' => 'Pilihan carian',
+'prefs-searchoptions' => 'Cari',
 'prefs-namespaces' => 'Ruang nama',
 'defaultns' => 'Jika tidak cari dalam ruang nama ini:',
 'default' => 'asali',
@@ -1472,7 +1473,7 @@ Tindakan ini tidak boleh dibatalkan.',
 
 # User rights log
 'rightslog' => 'Log hak pengguna',
-'rightslogtext' => 'Ini ialah log bagi perubahan 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',
 'rightsnone' => '(tiada)',
@@ -1726,7 +1727,7 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'backend-fail-internal' => 'Berlakunya ralat yang tidak dikenali dalam backend storan "$1".',
 'backend-fail-contenttype' => 'Jenis kandungan fail untuk disimpan di "$1" tidak dapat ditentukan.',
 'backend-fail-batchsize' => 'Backend storan diberi $1 operasi fail dalam satu kelompok; hadnya ialah $2 operasi.',
-'backend-fail-usable' => 'Fail $1 tidak boleh ditulis kerana kebenaran tidak memadai atau tertinggal direktori/penyimpan.',
+'backend-fail-usable' => 'Fail "$1" tidak boleh dibaca atau ditulis kerana kebenaran tidak memadai atau tertinggal direktori/penyimpan.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Tidak dapat bersambung dengan pangkalan data jurnal untuk backend storan "$1".',
@@ -2836,7 +2837,6 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 
 # JavaScriptTest
 'javascripttest' => 'Ujian JavaScript',
-'javascripttest-disabled' => 'Fungsi ini belum dapat dihidupkan di wki ini.',
 'javascripttest-title' => 'Ujian $1 sedang dijalankan',
 'javascripttest-pagetext-noframework' => 'Laman ini ditempah untuk menjalankan ujian JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Kerangka "$1" tidak dikenali.',
@@ -2976,10 +2976,10 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-authors' => 'Jumlah pengarang yang berlainan',
 'pageinfo-recent-edits' => 'Bilangan suntingan terkini (dalam $1 yang lalu)',
 'pageinfo-recent-authors' => 'Bilangan pengarang berbeza yang terkini',
-'pageinfo-restriction' => 'Perlindungan halaman (<code>$1</code>)',
 'pageinfo-magic-words' => 'Kata sakti ($1)',
 'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
 'pageinfo-templates' => 'Templat tertransklusi ($1)',
+'pageinfo-toolboxlink' => 'Maklumat halaman',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -3559,6 +3559,7 @@ Kod pengesahan ini akan luput pada $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Penyertaan pautan interwiki dilumpuhkan]',
 'scarytranscludefailed' => '[Gagal mendapatkan templat $1]',
+'scarytranscludefailed-httpstatus' => '[Ambilan templat gagal untuk $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL terlalu panjang]',
 
 # Delete conflict
@@ -3844,6 +3845,10 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'feedback-bugcheck' => 'Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.',
 'feedback-bugnew' => 'Saya dah semak. Laporkan pepijat baru',
 
+# Search suggestions
+'searchsuggest-search' => 'Cari',
+'searchsuggest-containing' => 'mengandungi...',
+
 # API errors
 'api-error-badaccess-groups' => 'Anda tidak dibenarkan memuat naik fail di wiki ini.',
 'api-error-badtoken' => 'Ralat dalaman: token tak elok.',
index f5bc99b..9f4aeb4 100644 (file)
@@ -142,133 +142,133 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RINDIRIZZA', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__EBDAWERREJ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__EBDAGALLERIJA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__SFORZAWERREJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__WERREJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__EBDASEZZJONIMODIFIKA__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'XAHARKURRENTI', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ISEMXAHARKURRENTI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ĠENISEMXAHARKURRENTI', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABBREVXAHARKURRENTI', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ĠURNATAKURRENTI', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ĠURNATAKURRENTI2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ISEMĠURNATAKURRENTI', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'SENAKURRENTI', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ĦINKURRENTI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'SIEGĦAKURRENTI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'XAHARLOKALI', 'XAHARLOKALI2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'XAHARLOKALI1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ISEMXAHARLOKALI', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ĠENISEMXAHARLOKALI', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABBREVXAHARLOKALI', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ĠURNATALOKALI', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ĠURNATALOKALI2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ISEMTAL-ĠURNATALOKALI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'SENALOKALI', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ĦINLOKALI', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'SIEGĦALOKALI', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMRUTA\'PAĠNI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMRUTA\'ARTIKLI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMRUTA\'FAJLS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMRUTA\'UTENTI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMRUTA\'UTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMBRUTA\'MODIFIKI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMRUTA\'VISTI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ISEMTAL-PAĠNA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ISEMTAL-PAĠNAE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'SPAZJUTAL-ISEM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'SPAZJUTAL-ISEME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'SPAZJUTA\'DISKUSSJONI', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'SPAZJUTA\'DISKUSSJONIE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SPAZJUTAS-SUĠĠETT', 'SPAZJUTAL-ARTIKLU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'ISEMSĦIĦTAL-PAĠNA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ISEMTAL-PAĠNASĦIĦAE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ISEMTAS-SOTTOPAĠNA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ISEMTAS-SUBPAĠNAE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ISEMBAŻIKUTAL-PAĠNA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ISEMTAL-PAĠNATAL-BAŻIE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ISEMPAĠNATA\'DISKUSSJONI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ISEMTAL-PAĠNATAD-DISKUSSJONIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNA', 'ISEMTAL-ARTIKLUTAL-PAĠNA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNAE', 'ISEMTAL-ARTIKLUTAL-PAĠNAE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSĠ:', 'MSG:' ),
-       'subst'                   => array( '0', 'BIDDEL:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'MSĠEW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'daqsminuri', 'minuri', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'daqsminuri=$1', 'minuri=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'lemin', 'right' ),
-       'img_left'                => array( '1', 'xellug', 'left' ),
-       'img_none'                => array( '1', 'xejn', 'none' ),
-       'img_center'              => array( '1', 'nofs', 'ċentrali', 'ċentru', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'tilat', 'b\'tilar', 'tilar', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bla_tilar', 'frameless' ),
-       'img_page'                => array( '1', 'paġna=$1', 'paġna $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'wieqaf', 'wieqaf=$1', 'wieqaf $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'bordura', 'burdura', 'border' ),
-       'img_baseline'            => array( '1', 'bażi_tal-linja', 'baseline' ),
-       'img_sub'                 => array( '1', 'bid', 'sub' ),
-       'img_super'               => array( '1', 'tajjeb', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'fuq', 'top' ),
-       'img_text_top'            => array( '1', 'test-fuq', 'text-top' ),
-       'img_bottom'              => array( '1', 'taħt', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'test-taħt', 'text-bottom' ),
-       'img_link'                => array( '1', 'ħolqa=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'ISEMTAS-SIT', 'SITENAME' ),
-       'ns'                      => array( '0', 'IS:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOKALI:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOKALIE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'ISEMTAS-SERVER', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'DESTINAZZJONITA\'SKRITT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SESS:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__EBDAKONVERTURTITLU__', '__EBDAKT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__EBDAKONVERTURKONTENUT__', '__EBDAKK__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ĠIMGĦAKURRENTI', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ĠTĠKURRENTI', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ĠIMGĦALOKALI', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ĠTĠLOKALI', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDTAR-REVIŻJONI', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ĠURNATATAR-REVIŻJONI', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ĠURNATATAR-REVIŻJONI2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'XAHARTAR-REVIŻJONI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'SENATAR-REVIŻJONI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'TIMBRUTAR-REVIŻJONI', 'REVISIONTIMESTAMP' ),
-       'fullurl'                 => array( '0', 'URLSĦIĦA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLSĦIĦAE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'IBDAKŻ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'IBDAKK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KŻ:', 'LC:' ),
-       'uc'                      => array( '0', 'KK:', 'UC:' ),
-       'displaytitle'            => array( '1', 'URITITLU', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__ĦOLQASEZZJONIĠDIDA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__EBDAĦOLQASEZZJONIĠDIDA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERŻJONIKURRENTI', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODIĊI:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKRAKODIĊI', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TIMBRUTAL-ĦINKURRENTI', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'TIMBRUTAL-ĦINLOKALI', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARKATAD-DIREZZJONI', 'MARKADIRE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LINGWA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LINGWATAL-KONTENUT', 'LINGKONTENUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAĠNIFL-ISPAZJUTAL-ISEM:', 'PAĠNISI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMRUTA\'AMMIN', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PADXELLUG', 'PADLEFT' ),
-       'padright'                => array( '0', 'PADLEMIN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speċjali', 'special' ),
-       'defaultsort'             => array( '1', 'DEFAULTSORTJA:', 'DEFAULTSORTJAĊAVETTA:', 'DEFAULTKATEGORIJISORTJA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DESTINAZZJONITAL-FAJL:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'tabella', 'tag' ),
-       'hiddencat'               => array( '1', '__KATMOĦBIJA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAĠNIFIL-KATEGORIJA', 'PAĠNIFILK', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'DAQSTAL-PAĠNI', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDIĊI__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__EBDAINDIĊI__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMRUFIL-GRUPP', 'NUMFIL-GRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__RIINDIRIZZSTATIKU__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'LIVELLITA\'PROTEZZJONI', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#RINDIRIZZA', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__EBDAWERREJ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__EBDAGALLERIJA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__SFORZAWERREJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__WERREJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__EBDASEZZJONIMODIFIKA__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'XAHARKURRENTI', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ISEMXAHARKURRENTI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ĠENISEMXAHARKURRENTI', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABBREVXAHARKURRENTI', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ĠURNATAKURRENTI', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ĠURNATAKURRENTI2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ISEMĠURNATAKURRENTI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SENAKURRENTI', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ĦINKURRENTI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'SIEGĦAKURRENTI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'XAHARLOKALI', 'XAHARLOKALI2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'XAHARLOKALI1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ISEMXAHARLOKALI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ĠENISEMXAHARLOKALI', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABBREVXAHARLOKALI', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ĠURNATALOKALI', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ĠURNATALOKALI2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ISEMTAL-ĠURNATALOKALI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'SENALOKALI', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ĦINLOKALI', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'SIEGĦALOKALI', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMRUTA\'PAĠNI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMRUTA\'ARTIKLI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMRUTA\'FAJLS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMRUTA\'UTENTI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMRUTA\'UTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMBRUTA\'MODIFIKI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMRUTA\'VISTI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ISEMTAL-PAĠNA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ISEMTAL-PAĠNAE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'SPAZJUTAL-ISEM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'SPAZJUTAL-ISEME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'SPAZJUTA\'DISKUSSJONI', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'SPAZJUTA\'DISKUSSJONIE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SPAZJUTAS-SUĠĠETT', 'SPAZJUTAL-ARTIKLU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'ISEMSĦIĦTAL-PAĠNA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ISEMTAL-PAĠNASĦIĦAE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ISEMTAS-SOTTOPAĠNA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ISEMTAS-SUBPAĠNAE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ISEMBAŻIKUTAL-PAĠNA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ISEMTAL-PAĠNATAL-BAŻIE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ISEMPAĠNATA\'DISKUSSJONI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ISEMTAL-PAĠNATAD-DISKUSSJONIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNA', 'ISEMTAL-ARTIKLUTAL-PAĠNA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ISEMTAS-SUĠĠETTTAL-PAĠNAE', 'ISEMTAL-ARTIKLUTAL-PAĠNAE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSĠ:', 'MSG:' ),
+       'subst'                     => array( '0', 'BIDDEL:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'MSĠEW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'daqsminuri', 'minuri', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'daqsminuri=$1', 'minuri=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'lemin', 'right' ),
+       'img_left'                  => array( '1', 'xellug', 'left' ),
+       'img_none'                  => array( '1', 'xejn', 'none' ),
+       'img_center'                => array( '1', 'nofs', 'ċentrali', 'ċentru', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'tilat', 'b\'tilar', 'tilar', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bla_tilar', 'frameless' ),
+       'img_page'                  => array( '1', 'paġna=$1', 'paġna $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'wieqaf', 'wieqaf=$1', 'wieqaf $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'bordura', 'burdura', 'border' ),
+       'img_baseline'              => array( '1', 'bażi_tal-linja', 'baseline' ),
+       'img_sub'                   => array( '1', 'bid', 'sub' ),
+       'img_super'                 => array( '1', 'tajjeb', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'fuq', 'top' ),
+       'img_text_top'              => array( '1', 'test-fuq', 'text-top' ),
+       'img_bottom'                => array( '1', 'taħt', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'test-taħt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ħolqa=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'ISEMTAS-SIT', 'SITENAME' ),
+       'ns'                        => array( '0', 'IS:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOKALI:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOKALIE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'ISEMTAS-SERVER', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'DESTINAZZJONITA\'SKRITT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SESS:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__EBDAKONVERTURTITLU__', '__EBDAKT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__EBDAKONVERTURKONTENUT__', '__EBDAKK__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ĠIMGĦAKURRENTI', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ĠTĠKURRENTI', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ĠIMGĦALOKALI', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ĠTĠLOKALI', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDTAR-REVIŻJONI', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ĠURNATATAR-REVIŻJONI', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ĠURNATATAR-REVIŻJONI2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'XAHARTAR-REVIŻJONI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'SENATAR-REVIŻJONI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'TIMBRUTAR-REVIŻJONI', 'REVISIONTIMESTAMP' ),
+       'fullurl'                   => array( '0', 'URLSĦIĦA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLSĦIĦAE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'IBDAKŻ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'IBDAKK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KŻ:', 'LC:' ),
+       'uc'                        => array( '0', 'KK:', 'UC:' ),
+       'displaytitle'              => array( '1', 'URITITLU', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ĦOLQASEZZJONIĠDIDA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__EBDAĦOLQASEZZJONIĠDIDA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERŻJONIKURRENTI', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODIĊI:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKRAKODIĊI', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TIMBRUTAL-ĦINKURRENTI', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'TIMBRUTAL-ĦINLOKALI', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARKATAD-DIREZZJONI', 'MARKADIRE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LINGWA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LINGWATAL-KONTENUT', 'LINGKONTENUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAĠNIFL-ISPAZJUTAL-ISEM:', 'PAĠNISI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMRUTA\'AMMIN', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PADXELLUG', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PADLEMIN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speċjali', 'special' ),
+       'defaultsort'               => array( '1', 'DEFAULTSORTJA:', 'DEFAULTSORTJAĊAVETTA:', 'DEFAULTKATEGORIJISORTJA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DESTINAZZJONITAL-FAJL:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'tabella', 'tag' ),
+       'hiddencat'                 => array( '1', '__KATMOĦBIJA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAĠNIFIL-KATEGORIJA', 'PAĠNIFILK', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'DAQSTAL-PAĠNI', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDIĊI__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__EBDAINDIĊI__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMRUFIL-GRUPP', 'NUMFIL-GRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__RIINDIRIZZSTATIKU__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'LIVELLITA\'PROTEZZJONI', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
 );
 
 $messages = array(
@@ -664,7 +664,7 @@ Ir-raġuni li ġiet mogħtija kienet ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Bħalissa tinsab barra mill-kont tiegħek.'''
 
-Tista' tkompli tuża' {{SITENAME}} bħala utent anonimu, jew tista' terġa [[Special:UserLogin|tidħol]] bħala l-istess utent jew wieħed differenti.
+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 />
@@ -1195,7 +1195,7 @@ Nota li l-użu tal-links tan-navigazzjoni jagħmel reset tal-kolonna.",
 'mergehistory-reason' => 'Raġuni:',
 
 # Merge log
-'mergelog' => "Reġistru ta' twaħħid",
+'mergelog' => 'Twaħħid',
 'pagemerge-logentry' => "waħħad [[$1]] ma' [[$2]] (reviżjonijiet sa $3)",
 'revertmerge' => 'Infired',
 'mergelogpagetext' => "Hawn taħt hawn lista ta' l-aktar tgħaqqid riċenti ta' paġna waħda ta' storja f'oħra.",
@@ -1253,8 +1253,6 @@ Nota li l-użu tal-links tan-navigazzjoni jagħmel reset tal-kolonna.",
 'search-interwiki-caption' => 'Proġetti kuġini',
 'search-interwiki-default' => "Riżultati ta' $1:",
 'search-interwiki-more' => '(aktar)',
-'search-mwsuggest-enabled' => 'bis-suġġerimenti',
-'search-mwsuggest-disabled' => 'l-ebda suġġeriment',
 'search-relatedarticle' => 'Relatati',
 'mwsuggest-disable' => 'Neħħi suġġeriment tal-AJAX',
 'searcheverything-enable' => 'Fittex fl-ispazji tal-isem kollha',
@@ -1701,7 +1699,7 @@ It-tlugħ ta' fajls tal-Java mhuwiex permess, minħabba li jistgħu jaqbżu rest
 'upload-source' => 'Sors tal-fajl',
 'sourcefilename' => 'L-isem tal-fajl tal-oriġini:',
 'sourceurl' => 'Sors tal-URL:',
-'destfilename' => 'L-Isem tal-fajl tad-destinazzjoni:',
+'destfilename' => "Isem tal-fajl ta' destinazzjoni:",
 'upload-maxfilesize' => 'Daqs massimu tal-fajl: $1',
 'upload-description' => 'Deskrizzjoni tal-fajl',
 'upload-options' => 'Opzjonijiet għat-tlugħ tal-fajl',
@@ -2656,9 +2654,9 @@ Jekk jogħġbok, waħħad iż-żewġ paġni manwalment.'''",
 'move-talk-subpages' => "Mexxi is-sottopaġni kollha tal-paġna ta' diskussjoni (sa $1)",
 'movepage-page-exists' => 'Il-paġna $1 diġà teżisti u ma tistax tiġi miktuba fuqha awtomatikament.',
 'movepage-page-moved' => 'Il-Paġna $1 ġiet imċaqilqa għal $2.',
-'movepage-page-unmoved' => 'Il-Paġna $1 ma setgħatx tiġi mċaqilqa għal $2.',
+'movepage-page-unmoved' => 'Il-paġna $1 ma setgħetx titmexxa lejn $2.',
 'movepage-max-pages' => "Ġie mċaqlaq in-numru massimu ta' {{PLURAL:$1|paġna u ma jistax jiġi mċaqlaq aktar awtomatikament|$1 paġni u ma jistgħux jiġu mċaqilqa aktar awtomatikament.}}",
-'movelogpage' => "Reġistru tat-tmexxija ta' paġni",
+'movelogpage' => "Tmexxija ta' paġni",
 'movelogpagetext' => "Hawn taħt jinsab lista ta' paġni mċaqilqa.",
 'movesubpage' => '{{PLURAL:$1|Sottopaġna|Sottopaġna}}',
 'movesubpagetext' => 'Din il-paġna għandha $1 {{PLURAL:$1|sottopaġna murija|sottopaġni murija}} hawn taħt:',
@@ -2793,7 +2791,6 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 
 # JavaScriptTest
 'javascripttest' => 'Testjar tal-JavaScript',
-'javascripttest-disabled' => 'Din il-funzjoni ma ġietx abilitata fuq din il-wiki.',
 'javascripttest-pagetext-noframework' => 'Din il-paġna hi riservata għall-eżekuzzjoni tat-testijiet tal-JavaScript.',
 'javascripttest-pagetext-frameworks' => 'Jekk jogħġbok agħżel wieħed mill-oqsma tal-ittestjar: $1',
 'javascripttest-pagetext-skins' => 'Agħżel aspett grafiku fuq liema tesegwixxi testijiet:',
@@ -3761,6 +3758,10 @@ Stampi huwa mogħrija b'risoluzzjoni sħiħa, tipi tal-fajl oħrajn jibdew bil-p
 'feedback-bugcheck' => 'Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].',
 'feedback-bugnew' => 'Ikkontrollajt. Irrapporta d-difett',
 
+# Search suggestions
+'searchsuggest-search' => 'Fittex',
+'searchsuggest-containing' => 'li tinkludi...',
+
 # API errors
 'api-error-fileexists-forbidden' => 'Fajl bl-isem "$1" diġà jeżisti, u ma jistax jiġi miktub fuqu.',
 'api-error-fileexists-shared-forbidden' => 'Fajl bl-isem "$1" diġà jeżisti fir-repożitorju maqsum u ma jistax jiġi miktub fuqu.',
index 8047db0..5aaf7e2 100644 (file)
@@ -64,17 +64,17 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ANCAMINAR', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'img_right'               => array( '1', 'dreita', 'direita', 'right' ),
-       'img_left'                => array( '1', 'squierda', 'esquerda', 'left' ),
-       'img_none'                => array( '1', 'nanhun', 'nenhum', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_middle'              => array( '1', 'meio', 'middle' ),
-       'language'                => array( '0', '#LHENGUA:', '#IDIOMA:', '#LANGUAGE:' ),
-       'filepath'                => array( '0', 'CAMINOFEXEIRO:', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'eitiqueta', 'tag' ),
-       'pagesize'                => array( '1', 'TAMANHOFEXEIRO', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'staticredirect'          => array( '1', '_ANCAMINARSTATICO_', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#ANCAMINAR', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'img_right'                 => array( '1', 'dreita', 'direita', 'right' ),
+       'img_left'                  => array( '1', 'squierda', 'esquerda', 'left' ),
+       'img_none'                  => array( '1', 'nanhun', 'nenhum', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_middle'                => array( '1', 'meio', 'middle' ),
+       'language'                  => array( '0', '#LHENGUA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'filepath'                  => array( '0', 'CAMINOFEXEIRO:', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'eitiqueta', 'tag' ),
+       'pagesize'                  => array( '1', 'TAMANHOFEXEIRO', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'staticredirect'            => array( '1', '_ANCAMINARSTATICO_', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
 );
 
 $messages = array(
@@ -567,8 +567,6 @@ Legenda: (atu) = defrénças de la berson atual,
 'search-interwiki-caption' => 'Porjetos armanos',
 'search-interwiki-default' => 'Resultados de $1:',
 'search-interwiki-more' => '(mais)',
-'search-mwsuggest-enabled' => 'cun sugestones',
-'search-mwsuggest-disabled' => 'sien sugestones',
 'searchall' => 'todos',
 'nonefound' => "'''Abiso''': solo alguns spácios nominales son percurados por oumisson. Spurmenta outelizar l perfixo ''all:'' na percura, pa percurar por todos ls cuntenidos desta Biqui (até páiginas de çcusson, modelos etc), ó mesmo, outelizando l spácio nominal que queiras cumo perfixo.",
 'powersearch' => 'Percura Abançada',
index 65b112e..56298d6 100644 (file)
@@ -376,9 +376,9 @@ $1',
 'virus-unknownscanner' => 'အမည်မသိအန်တီဗိုင်းရပ်စ် -',
 
 # Login and logout pages
-'logouttext' => 'သင်သည် လော့ဂ်အောက် လုပ်လိုက်ပြီဖြစ်သည်။
-သင့်အနေနှင့် ဤ {{SITENAME}} ဝက်ဘ်ဆိုက်ဒ်ကို အမည်မသိ အသုံးပြုသူ အနေနှင့် ဆက်လက် အသုံးပြုနိုင်သည်။ သို့မဟုတ် ယခင် အသုံးပြုသူ အမည် သို့ အသုံးပြုသူ အခြားအမည်တစ်ခုဖြင့် [[Special:UserLogin|နောက်တစ်ကြိမ် လော့ဂ်အင်ပြန်ဝင်]] နိုင်သည်။
-သင်၏ ဘရောက်ဆာမှ cache ကို ရှင်းလင်းသည့် အချိန် အထိ အချို့သော စာမျက်နှာ များသည် သင် လော့ဂ်အင် ဝင်ထားစဉ်က အတိုင်းပင် ဆက်လက် ပြသနေမည်ဖြစ်သည်။',
+'logouttext' => "သင်သည် လော့ဂ်အောက် လုပ်လိုက်ပြီဖြစ်သည်။
+သင့်အနေနှင့် ဤ {{SITENAME}} ဝက်ဘ်ဆိုက်ဒ်ကို အမည်မသိ အသုံးပြုသူ အနေနှင့် ဆက်လက် အသုံးပြုနိုင်သည်။ သို့မဟုတ် ယခင် အသုံးပြုသူ အမည် သို့ အသုံးပြုသူ အခြားအမည်တစ်ခုဖြင့် <span class='plainlinks'>[$1 နောက်တစ်ကြိမ် လော့ဂ်အင်ပြန်ဝင်]</span> နိုင်သည်။
+သင်၏ ဘရောက်ဆာမှ cache ကို ရှင်းလင်းသည့် အချိန် အထိ အချို့သော စာမျက်နှာ များသည် သင် လော့ဂ်အင် ဝင်ထားစဉ်က အတိုင်းပင် ဆက်လက် ပြသနေမည်ဖြစ်သည်။",
 'welcomecreation' => '== မင်္ဂလာပါ $1! ==
 သင့်အကောင့်ကို ဖန်တီးပြီးပါပြီ။
 [[Special:Preferences|{{SITENAME}} စိတ်​ကြိုက်​ရွေးချယ်စရာတို့]]ကို ပြောင်းရန် မမေ့ပါနှင့်။',
@@ -691,8 +691,6 @@ Legend: '''({{int:cur}})''' = နောက်ဆုံးမူနှင့် 
 'search-interwiki-caption' => 'ညီအစ်မ ပရောဂျက်များ',
 'search-interwiki-default' => 'ရလဒ် $1 ခု -',
 'search-interwiki-more' => '(နောက်ထပ်)',
-'search-mwsuggest-enabled' => 'အကြံပြုချက်များနှင့်တကွ',
-'search-mwsuggest-disabled' => 'အကြံပြုချက် မရှိပါ',
 'search-relatedarticle' => 'ဆက်နွယ်သော',
 'mwsuggest-disable' => 'AJAX အကြံပြုချက်များကို ပိတ်ထားရန်',
 'searcheverything-enable' => 'အမည်ညွှန်းအားလုံးတွင် ရှာရန်',
index 4868a46..2223760 100644 (file)
@@ -114,75 +114,75 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'МОЛИЦЯКОВ', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'МОЛИЦЯКОВЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'МОЛИЦЯКОВЛЕМГЕН', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'МОЛИЦЯКОВКИРЬТЯНЬХВОРМА', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'МОЛИЦЯЧЫ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'МОЛИЦЯЧЫ2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'МОЛИЦЯЧЫЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'МОЛИЦЯИЕ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'МОЛИЦЯШКА', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'МОЛИЦЯЦЯС', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ТЕСКЭНЬКОВ', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'ТЕСКЭНЬКОВЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ТЕСКЭНЬКОВЛЕМГЕН', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ТЕСКЭНЬКОВКИРЬТЯНЬХВОРМА', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ТЕСКЭНЬЧЫ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ТЕСКЭНЬЧЫ2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ТЕСКЭНЬЧЫЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ТЕСКЭНЬИЕ', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ТЕСКЭНЬШКА', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ТЕСКЭНЬЦЯС', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ЗЯРОЛОПАТ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ЗЯРОСЁРМАДОВКСТ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ЗЯРОФАЙЛАТ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ЗЯРОТЕИЦЯТ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ЗЯРОВИТНЕМАТПЕТНЕМАТ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'ЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'namespace'               => array( '1', 'ЛЕМПОТМО', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'КОРТАМОПОТМО', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'talkpagename'            => array( '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'msg'                     => array( '0', 'ПАЧТЯМНЭ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
-       'img_thumbnail'           => array( '1', 'кенжешка', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'вить_кедь', 'справа', 'right' ),
-       'img_left'                => array( '1', 'керш_кедь', 'слева', 'left' ),
-       'img_none'                => array( '1', 'вейкеяк_арась', 'без', 'none' ),
-       'img_center'              => array( '1', 'куншкасо', 'центр', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'кундсо', 'обрамить', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'кундовтомо', 'безрамки', 'frameless' ),
-       'img_page'                => array( '1', 'лопа=$1', 'лопа $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_top'                 => array( '1', 'верькс', 'сверху', 'top' ),
-       'img_text_top'            => array( '1', 'текст-верькс', 'текст-сверху', 'text-top' ),
-       'img_middle'              => array( '1', 'куншка', 'посередине', 'middle' ),
-       'img_bottom'              => array( '1', 'алкс', 'снизу', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'текст-алкс', 'текст-снизу', 'text-bottom' ),
-       'sitename'                => array( '1', 'САЙТЛЕМ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'gender'                  => array( '0', 'СЫМЕ:', 'ПОЛ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'МОЛИЦЯ_ТАРГО', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'МОЛИЦЯ_ЧИ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ТЕСКЭНЬТАРГО', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'ЛИЯКСТОМТОМАID', 'ИД_ВЕРСИИ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ЛИЯКСТОМТОМАЧЫ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ЛИЯКСТОМТОМАЧЫ2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'ЛИЯКСТОМТОМАКОВ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ЛИЯКСТОМТОМАИЕ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'ЛАМОНЬЧИСЛА', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
-       'lcfirst'                 => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ВИШКИНЕ:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ПОКШ:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ВИШКА_ТЕШТЬКЕСЭ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
-       'uc'                      => array( '0', 'ПОШК_ТЕШТЬКЕСЭ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
-       'raw'                     => array( '0', 'ВЕРЕКСТЭ', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'НЕВТЕМС_КОНЯКС', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'ТЕВАТЕВЕРСИЯ', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#КЕЛЕСЬ:', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'ЗЯРОАДМИНТНЭДЕ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'башка_тевень', 'служебная', 'special' ),
-       'filepath'                => array( '0', 'ФАЙЛАНЬКИ', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
-       'pagesize'                => array( '1', 'ЛОПАКУВАЛМО', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
-       'url_path'                => array( '0', 'ЯН', 'ПУТЬ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ВИКИ', 'WIKI' ),
+       'currentmonth'              => array( '1', 'МОЛИЦЯКОВ', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'МОЛИЦЯКОВЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'МОЛИЦЯКОВЛЕМГЕН', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'МОЛИЦЯКОВКИРЬТЯНЬХВОРМА', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'МОЛИЦЯЧЫ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'МОЛИЦЯЧЫ2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'МОЛИЦЯЧЫЛЕМ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'МОЛИЦЯИЕ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'МОЛИЦЯШКА', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'МОЛИЦЯЦЯС', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ТЕСКЭНЬКОВ', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'ТЕСКЭНЬКОВЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ТЕСКЭНЬКОВЛЕМГЕН', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ТЕСКЭНЬКОВКИРЬТЯНЬХВОРМА', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ТЕСКЭНЬЧЫ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ТЕСКЭНЬЧЫ2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ТЕСКЭНЬЧЫЛЕМ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ТЕСКЭНЬИЕ', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ТЕСКЭНЬШКА', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ТЕСКЭНЬЦЯС', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ЗЯРОЛОПАТ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ЗЯРОСЁРМАДОВКСТ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ЗЯРОФАЙЛАТ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ЗЯРОТЕИЦЯТ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ЗЯРОВИТНЕМАТПЕТНЕМАТ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'ЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'ЛЕМПОТМО', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'КОРТАМОПОТМО', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'talkpagename'              => array( '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'msg'                       => array( '0', 'ПАЧТЯМНЭ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
+       'img_thumbnail'             => array( '1', 'кенжешка', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'вить_кедь', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'керш_кедь', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'вейкеяк_арась', 'без', 'none' ),
+       'img_center'                => array( '1', 'куншкасо', 'центр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'кундсо', 'обрамить', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'кундовтомо', 'безрамки', 'frameless' ),
+       'img_page'                  => array( '1', 'лопа=$1', 'лопа $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_top'                   => array( '1', 'верькс', 'сверху', 'top' ),
+       'img_text_top'              => array( '1', 'текст-верькс', 'текст-сверху', 'text-top' ),
+       'img_middle'                => array( '1', 'куншка', 'посередине', 'middle' ),
+       'img_bottom'                => array( '1', 'алкс', 'снизу', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'текст-алкс', 'текст-снизу', 'text-bottom' ),
+       'sitename'                  => array( '1', 'САЙТЛЕМ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'gender'                    => array( '0', 'СЫМЕ:', 'ПОЛ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'МОЛИЦЯ_ТАРГО', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'МОЛИЦЯ_ЧИ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ТЕСКЭНЬТАРГО', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'ЛИЯКСТОМТОМАID', 'ИД_ВЕРСИИ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ЛИЯКСТОМТОМАЧЫ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ЛИЯКСТОМТОМАЧЫ2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'ЛИЯКСТОМТОМАКОВ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ЛИЯКСТОМТОМАИЕ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'ЛАМОНЬЧИСЛА', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
+       'lcfirst'                   => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ВИШКИНЕ:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ВАСЕНЦЕ_ТЕШТЬКЕСЬ_ПОКШ:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ВИШКА_ТЕШТЬКЕСЭ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
+       'uc'                        => array( '0', 'ПОШК_ТЕШТЬКЕСЭ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
+       'raw'                       => array( '0', 'ВЕРЕКСТЭ', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'НЕВТЕМС_КОНЯКС', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'ТЕВАТЕВЕРСИЯ', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#КЕЛЕСЬ:', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'ЗЯРОАДМИНТНЭДЕ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'башка_тевень', 'служебная', 'special' ),
+       'filepath'                  => array( '0', 'ФАЙЛАНЬКИ', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+       'pagesize'                  => array( '1', 'ЛОПАКУВАЛМО', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
+       'url_path'                  => array( '0', 'ЯН', 'ПУТЬ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
 );
 
 $messages = array(
@@ -193,7 +193,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Кекшемс лувонь кирдиень витнеметнень-петнематнень чыяконь полавтнематнестэ',
 'tog-newpageshidepatrolled' => 'Кекшемс лувонь кирдиень ванстома лопатнень од лопань керьксэнть эйстэ',
 'tog-extendwatchlist' => 'Келейгавтомс сёрмадовксонь мельга ваномань сёрмалевксэнть невтевест весе полавтнематне, аволь ансяк чыеньсетне.',
-'tog-usenewrc' => 'Ð\9dолдак Ñ\82евÑ\81 Ð²Ð°Ð´Ñ\80Ñ\8fлгавÑ\82озÑ\8c Ð¾Ð´ Ð»Ð¸Ñ\8fкÑ\81Ñ\82омаÑ\82  (веши JavaScript)',
+'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 Ð»Ð¾Ð¿Ð°Ð½Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 ÐºÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c Ð¿Ð¾Ð»Ð°Ð²Ñ\82немаÑ\82неÑ\81Ñ\8d-ванома Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\8d  (веши JavaScript)',
 'tog-numberheadings' => 'Сёрмадовкс коняксос кадык сынсь ловома валтнэ путовить',
 'tog-showtoolbar' => 'Кедьёнкс лазнэнть невтемс сёрмадома шкасто (JavaScript)',
 'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме (JavaScript)',
@@ -201,7 +201,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чэерень витьёнсе повнэсэ  (JavaScript)',
 'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
 'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
-'tog-watchcreations' => 'СовавÑ\82омÑ\81 Ð¼Ð¾Ð½Ñ\8c Ñ\82еевÑ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼ Ñ\80иÑ\81Ñ\8cмезÑ\8dнÑ\8c',
+'tog-watchcreations' => 'СовавÑ\82омÑ\81 Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмезÑ\8dнÑ\8c Ð¼Ð¾Ð½Ñ\8c Ñ\82еевÑ\82Ñ\8c Ð»Ð¾Ð¿Ð°Ñ\82ненÑ\8c Ð´Ñ\8b Ñ\81енÑ\8c, Ð¼ÐµÐ·Ðµ Ð¹Ð¾Ð²ÐºÑ\81Ñ\82ан',
 'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лем рисьмезэнь',
 'tog-watchmoves' => 'Лопанть лиякстомтса, совавтык ванома лем рисьмезэнь',
 'tog-watchdeletion' => 'Лопанть нардаса, совавтык сонзэ ванома лем рисьмезэнь',
@@ -214,6 +214,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Пачтямс е-сёрмасо лиякстомтоматнеде, сестэяк зярдо апокшкынеть',
 'tog-enotifrevealaddr' => 'Штавтомс е-сёрмань адресэм яволявтомань сёрмадовкстнэсэ',
 'tog-shownumberswatching' => 'Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень',
+'tog-oldsig' => 'Уликс кедьпутовксось:',
 'tog-fancysig' => 'Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)',
 'tog-externaleditor' => 'Нолдамс тевс ушоёнонь витнемканть, зярс лиякс апак аравто (ансяк тевень содыйтненень, арсий машинасот эрявить башка ёнкст-аравтомат [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
 'tog-externaldiff' => 'Нолдамс тевс ушоёнонь diff, зярс лиякс апак аравто (ансяк тевень содыйтненень, арсий машинасот эрявить башка ёнкст-аравтомат [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
@@ -310,6 +311,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'поладксозо моли',
 'index-category' => 'Индекс марто лопатне',
 'noindex-category' => 'Индекстэме лопатне',
+'broken-file-category' => 'Лопат, конатнесэ файлань яжазь сюлмавомапеть',
 
 'about' => 'Эстедензэ',
 'article' => 'Потмокслопа',
@@ -689,7 +691,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 {{FULLPAGENAME}}|action=edit}} витнемс-петнемс те лопанть]</span>.',
 'updated' => '(Одолгавтозь)',
 'note' => "'''Явт мель:'''",
-'previewnote' => "'''Ð\9aиÑ\80дÑ\82Ñ\8c Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d, Ð¢е ансяк васнянь невтевкс.'''
+'previewnote' => "'''Ð\9aиÑ\80дÑ\82Ñ\8fÑ\8f Ð¼ÐµÐ»Ñ\8cÑ\81Ñ\8d, Ñ\82е ансяк васнянь невтевкс.'''
 Полавтоматне зярс апак вансто!",
 'editing' => 'Витнят-петнят $1',
 'editingsection' => 'Витнеме-петнеме $1 (секциянть)',
@@ -728,6 +730,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 '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]]',
 
@@ -811,7 +814,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'revertmerge' => 'Явомс логонть мекев, кода ульнесь вейтьсэндямодо икеле',
 
 # Diffs
-'history-title' => 'Историясь ламо вановксонть "$1"',
+'history-title' => '"$1"-нь полавтнемань историязо',
 'lineno' => 'Киксэсь $1:',
 'compareselectedversions' => 'Кочказь версиятнень аравтомс карадо-каршо',
 'editundo' => 'Велявтомс мекев мезе витнинь-петнинь',
@@ -854,8 +857,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-interwiki-caption' => 'Дугакс проектт',
 'search-interwiki-default' => '$1 савкс:',
 'search-interwiki-more' => '(седе ламо)',
-'search-mwsuggest-enabled' => 'ушодкс марто',
-'search-mwsuggest-disabled' => 'ушодкстомо',
 'search-relatedarticle' => 'Малавикс',
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
@@ -945,6 +946,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'gender-female' => 'Авань сыме',
 'email' => 'Е-сёрма',
 'prefs-help-realname' => 'Алкуксонь леметь (арась мелеть, иляк путо): путсак, ды сон карми неявомо не таркатнесэ, косо тон тев теят.',
+'prefs-help-email' => 'Е-сёрмапаргот а эряви тешкстамс. Сон карми эрявомо ансяк салававалонь одов пачтямсто ёмавтындерясак неень салавань валот.',
+'prefs-help-email-others' => 'Мелеть сайтянзат, путыка кортамо лопазот е-сёрмапаргот, конань вельде лия ломантне сёрмадовить тенть. Минек вельде е-сёрмапаргот зярдояк а неяви, зярдо лия совицятне сёрмалить тенть.',
 'prefs-help-email-required' => 'Е-сёрмань адресэть эряви.',
 'prefs-signature' => 'Кедь путовкс',
 'prefs-dateformat' => 'Ков чинь форматозо',
index f94221b..e0b58f5 100644 (file)
@@ -74,56 +74,56 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#بور', '#تغییرمسیر', '#تغییر_مسیر', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نگارخنه__', '__بی‌نگارخانه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__بافهرست__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__فهرست__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', 'بی‌عنوان__', '__بی‌عنوان__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_اسایی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'روز۲', 'روز_۲', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'نام‌روز', 'نام_روز', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'سال', 'سال‌کنونی', 'سال_کنونی', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'زمان‌کنونی', 'زمان_کنونی', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ساعت', 'ساعت‌کنونی', 'ساعت_کنونی', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ماه‌محلی', 'ماه_محلی', 'ماه‌محلی۲', 'ماه_محلی۲', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'روزمحلی۲', 'روز_محلی_۲', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'نام‌روزمحلی', 'نام_روز_محلی', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'سال‌محلی', 'سال_محلی', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'زمون_محلی', 'زمان_محلی', 'زمان‌محلی', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ساعت‌محلی', 'ساعت_محلی', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'تعدادصفحه‌ها', 'تعداد_صفحه‌ها', 'ولگ‌ئون_نمره', 'وألگ‌ئون_نومره', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'تعدادکارورون', 'تعدادکاربران', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'کارورون_فعال', 'کاربران_فعال', 'کاربران‌فعال', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'تعداددچی‌یه‌ئون', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'فضای‌گپ', 'فضای_گپ', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'فضای‌گپ_کد', 'فضای_گپ_کد', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'int'                     => array( '0', 'ترجمه:', 'INT:' ),
-       'sitename'                => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
-       'ns'                      => array( '0', 'فن:', 'NS:' ),
-       'nse'                     => array( '0', 'فنک:', 'NSE:' ),
-       'localurl'                => array( '0', 'نشونی:', 'نشانی:', 'LOCALURL:' ),
-       'grammar'                 => array( '0', 'دستور_زبون:', 'دستور_زوون:', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
+       'redirect'                  => array( '0', '#بور', '#تغییرمسیر', '#تغییر_مسیر', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نگارخنه__', '__بی‌نگارخانه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', 'بی‌عنوان__', '__بی‌عنوان__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_اسایی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'نام‌ماه‌اضافه', 'نام_ماه_اضافه', 'نام‌ماه‌کنونی‌اضافه', 'نام_ماه_کنونی_اضافه', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'مخفف‌نام‌ماه', 'مخفف_نام_ماه', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'روز', 'روزکنونی', 'روز_کنونی', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'روز۲', 'روز_۲', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'نام‌روز', 'نام_روز', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'سال', 'سال‌کنونی', 'سال_کنونی', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'زمان‌کنونی', 'زمان_کنونی', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ساعت', 'ساعت‌کنونی', 'ساعت_کنونی', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ماه‌محلی', 'ماه_محلی', 'ماه‌محلی۲', 'ماه_محلی۲', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ماه‌محلی۱', 'ماه_محلی۱', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'نام‌ماه‌محلی', 'نام_ماه_محلی', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'نام‌ماه‌محلی‌اضافه', 'نام_ماه_محلی_اضافه', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'مخفف‌ماه‌محلی', 'مخفف_ماه_محلی', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'روزمحلی', 'روز_محلی', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'روزمحلی۲', 'روز_محلی_۲', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'نام‌روزمحلی', 'نام_روز_محلی', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'سال‌محلی', 'سال_محلی', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'زمون_محلی', 'زمان_محلی', 'زمان‌محلی', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ساعت‌محلی', 'ساعت_محلی', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'تعدادصفحه‌ها', 'تعداد_صفحه‌ها', 'ولگ‌ئون_نمره', 'وألگ‌ئون_نومره', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'تعدادکارورون', 'تعدادکاربران', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'کارورون_فعال', 'کاربران_فعال', 'کاربران‌فعال', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'تعداددچی‌یه‌ئون', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'فضای‌نام‌کد', 'فضای_نام_کد', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'فضای‌گپ', 'فضای_گپ', 'فضای‌بحث', 'فضای_بحث', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'فضای‌گپ_کد', 'فضای_گپ_کد', 'فضای‌بحث‌کد', 'فضای_بحث_کد', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'فضای‌موضوع', 'فضای‌مقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'int'                       => array( '0', 'ترجمه:', 'INT:' ),
+       'sitename'                  => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
+       'ns'                        => array( '0', 'فن:', 'NS:' ),
+       'nse'                       => array( '0', 'فنک:', 'NSE:' ),
+       'localurl'                  => array( '0', 'نشونی:', 'نشانی:', 'LOCALURL:' ),
+       'grammar'                   => array( '0', 'دستور_زبون:', 'دستور_زوون:', 'دستورزبان:', 'دستور_زبان:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'جنسیت:', 'جنس:', 'GENDER:' ),
 );
 
 $messages = array(
@@ -198,9 +198,9 @@ $messages = array(
 'wed' => 'چارشنبه',
 'thu' => 'پنجشنبه',
 'fri' => 'جـومه',
-'sat' => 'Ø´Ù\87â\80\8cÙ\85ه',
+'sat' => 'Ø´Ù\85به',
 'january' => 'جـانـویـه',
-'february' => 'Ù\81Ù\80Ù\87â\80\8cÙ\88رÛ\8cÙ\80ه',
+'february' => 'Ù\81Ù\88رÛ\8cه',
 'march' => 'مـارچ',
 'april' => 'آوریل',
 'may_long' => 'مه',
@@ -208,11 +208,11 @@ $messages = array(
 'july' => 'جـولای',
 'august' => 'ئـوگـه‌سـت',
 'september' => 'سـه‌پـتـه‌مـبـر',
-'october' => 'ئÙ\80Ù\88Ú©Ù\80تÙ\80Ù\88بÙ\80ر',
+'october' => 'اکتبر',
 'november' => 'نـووه‌مـبـر',
 'december' => 'ده‌سـه‌مـبـر',
 'january-gen' => 'جـانـویـه',
-'february-gen' => 'Ù\81Ù\80Ù\87â\80\8cÙ\88رÛ\8cÙ\80ه',
+'february-gen' => 'Ù\81Ù\88رÛ\8cه',
 'march-gen' => 'مـارس',
 'april-gen' => 'آوریـل',
 'may-gen' => 'مه',
@@ -220,7 +220,7 @@ $messages = array(
 'july-gen' => 'جـولای',
 'august-gen' => 'ئوگـه‌سـت',
 'september-gen' => 'سـه‌پـتـه‌مـبـر',
-'october-gen' => 'ئÙ\80Ù\88Ú©Ù\80تÙ\80Ù\88بÙ\80ر',
+'october-gen' => 'اکتبر',
 'november-gen' => 'نـووه‌مـبـر',
 'december-gen' => 'ده‌سـه‌مـبـر',
 'jan' => 'جانویه',
@@ -248,6 +248,8 @@ $messages = array(
 '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تا پرونده}} این رج دله {{PLURAL:$1|دره|درنه}}؛ این رج کلاً $2تا پرونده دانّه.}}',
+'category-file-count-limited' => '{{PLURAL:$1|پرونده|$1 پرونده}} این رج دله درنه.',
 'listingcontinuesabbrev' => '(دمباله)',
 'index-category' => 'صفحه‌ئون نمایه بَیی',
 'noindex-category' => 'صفحه‌ئون نمایه نَیی',
@@ -384,7 +386,11 @@ $2، $1',
 'youhavenewmessages' => 'شما اتا $1 دانّی ($2).',
 'newmessageslink' => 'ترنه پیغوم‌ئون',
 'newmessagesdifflink' => 'پایانی دچی‌یه',
-'youhavenewmessagesmulti' => 'شه مه وسه ترنه پیغوم بی یه موئه ای جه $1',
+'youhavenewmessagesfromusers' => 'شِما {{PLURAL:$3| کارور دیگه| $3  کارور}} $1 دارنی ($2).',
+'youhavenewmessagesmanyusers' => 'شما ات‌سری کارور جه $1 دارنی ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ترنه پیغوم|ترنه پیغوم}}',
+'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|ترنه دچی‌یه|ترنه دچی‌یه‌ئون}}',
+'youhavenewmessagesmulti' => 'شِمه وسّه $1 دله، ترنه پیغوم برسی‌یه.',
 'editsection' => 'دچی‌ین',
 'editold' => 'دچی‌ین',
 'viewsourceold' => 'منبع ره هارشائن',
@@ -392,7 +398,7 @@ $2، $1',
 'viewsourcelink' => 'منبع بدی‌ین',
 'editsectionhint' => 'تیکه: $1 ره دچی‌ین',
 'toc' => 'دله',
-'showtoc' => 'نشون هاده',
+'showtoc' => 'سِراق هاده',
 'hidetoc' => 'فرو بور',
 'collapsible-collapse' => 'دوستن',
 'collapsible-expand' => 'گت هاکردن',
@@ -451,7 +457,16 @@ $2، $1',
 'laggedslavemode' => "'''هشدار:''' صفحه ممکن هسته که جدید ِبه‌روزرسانی‌ئون ره شامل نواشه.",
 'readonly' => 'پایگاه داده زلفن بزه‎بیّه',
 'enterlockreason' => 'دلیلی زلفین بزوئن وسّه بارین، که حاوی تقریبی از زمونی بائه که زلفین بَیته وانه',
-'missingarticle-rev' => '(نسخهٔ شماره: $1)',
+'readonlytext' => 'داده پایگاه هنتا دچی‌ین و صفحه‌ئون بساتن وسّه زلفن بَیی‌ئه؛ این وضعیت احتمالاً معمولی رسیدگیون وسّه هسته که این کارون په، عادی وانه.
+
+مدیری که اینان ره زلفن هاکرده این توضیح ره شمه وسّه بنویشته: $1',
+'missing-article' => 'داده پایگاه صفحه «$1» $2 بنویشته ره که وسّه پیدا هاکرد بوو، پیدا نکارده.
+
+این مشکل معمولاً اون گادِر پیش انه که شمه بخاستی چیون اتا قدیمی یا حذف بَیی تاریخچه‌ی تفاوت بوئن.
+
+اگه غیر این هسته، احتمالاً نرم‌افزار دله موشکل پیدا بیّه.
+این مشکل ره اینترنتی نشونی همراه اتا [[Special:ListUsers/sysop|مدیر]] وسّه برسِنین.',
+'missingarticle-rev' => '(نسخه‌ی شماره: $1)',
 'missingarticle-diff' => '(فرق: $1، $2)',
 'readonly_lag' => 'پایگاه داده به طور خودکار زلفین بزه‌بیّه تا پشتیبون ِنسخه‌ئون با اصلی نسخه هماهنگ بواشِن',
 'internalerror' => 'خطای دله‌یی',
@@ -469,15 +484,24 @@ $2، $1',
 'badarticleerror' => 'ننشنه این کار ره این صفحه دله هاکردن.',
 'cannotdelete' => 'صفحه یا تصویر «$1» ره ننشنه پاک هاکردن.
 ممکنه قبلاً فرد دیگری وه ره پاک هاکردبوئه.',
-'badtitle' => 'نقش عنوان',
-'perfcached' => 'داده‌ئون زیر حافظهٔ موقت جه بَییته بَینه و ممکن هسته کاملاً به‌روز نوائن. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'cannotdelete-title' => 'نشنه «$1» ره پاک هاکردِن',
+'delete-hook-aborted' => 'قلاب نتونده حذف هاکنه.
+اینتا وسّه دلیل ننویشتنه.',
+'badtitle' => 'نخاشِ عنوان',
+'badtitletext' => 'بخاستی عنوان نامعتبر، خالی یا میون‌زوونی عنوان یا میون‌ویکیی غلط لینک جه بی‌یه.
+ممکنه ونه دله اتا یا چنتا چی بنویش بو که نَونه عنوان دله بئه.',
+'perfcached' => 'این چیون ثبت بَیی حافظه جه انّه و ممکنه آپدیت نَوائن. حداکثر {{PLURAL:$1|اتا نتیجه|$1تا نتیجه}} قدیمی حافظه دله دره.',
+'querypage-no-updates' => 'این صفحه فعلاً نَونه آپدیت بَواشه.
+همینسه ونه دله بنویشته‌ئون شاید قدیمی بائن.',
 'wrong_wfQuery_params' => 'پارامترون wfQuery()‎ غلطه<br />
 تابع: $1<br />
 پرس‌وجو: $2',
 'viewsource' => 'منبع ره بدی‌ین',
+'viewsource-title' => '$1 مبدأ ره سِراق هدائِن',
 'actionthrottled' => 'شمه پیش ره بیتنه',
 'protectedpagetext' => 'این صفحه دچی‌ین وسّه زلفین بزه بیّه.',
 'viewsourcetext' => 'بتونّی متن مبدأ این صفحه ره هارشین یا ونجه نسخه بَیرین:',
+'viewyourtext' => "بتونّی '''شه بنویشته چیون''' مبدأ ره این صفحه دله هارشین و کپی هاکنین:",
 'protectedinterface' => 'این صفحه ارائه‌دهندهٔ متنی واسط کارور این نرم‌افزار هسته و به منظور پیشگیری از خرابکاری زلفین بزه‌بیّه.',
 'sqlhidden' => '(دستور اس‌کیوال دپوشنی‌یه بیّه)',
 
@@ -489,6 +513,7 @@ $2، $1',
 'yourpassword' => 'شمه پسورد',
 'yourpasswordagain' => 'پسورد ره دِباره بنویس',
 'remembermypassword' => 'مه رمز ره (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) این مرورگر سر یاد نکان',
+'securelogin-stick-https' => 'HTTPS دله بموئن په، متصل بموند',
 'yourdomainname' => 'شمه کاروری نوم',
 'login' => 'دله بوردن',
 'nav-login-createaccount' => 'دله بوردن / عضو بیّن',
@@ -503,7 +528,8 @@ $2، $1',
 'createaccount' => 'ترنه حساب وا هکاردن',
 'gotaccount' => 'عضو هسنی؟ $1.',
 'gotaccountlink' => 'بورین دله',
-'createaccountmail' => 'ایمیل ِهمراه',
+'userlogin-resetlink' => 'دله بموئن ِجزئیات ره یاد هاکردی؟',
+'createaccountmail' => 'ایمیل جه',
 'createaccountreason' => 'دلیل:',
 'badretype' => 'دِتا پسوردی که بنویشتی اتجور نینه',
 'userexists' => 'کاروری نومی که بخاستنی وجود داشته.
@@ -523,6 +549,18 @@ $2، $1',
 # Change password dialog
 'newpassword' => 'نو پسورد:',
 
+# Special:PasswordReset
+'passwordreset-username' => 'کاروری نوم:',
+'passwordreset-domain' => 'دامنه:',
+'passwordreset-capture' => 'گت ایمیل سِراق هدائه بَواشه؟',
+
+# Special:ChangeEmail
+'changeemail-oldemail' => 'اساء ایمیل:',
+'changeemail-newemail' => 'ترنه ایمیل آدرس:',
+'changeemail-none' => '(هچّی)',
+'changeemail-submit' => 'ایمیل ره عوض هاکردن',
+'changeemail-cancel' => 'ول هاکردن',
+
 # Edit page toolbar
 'bold_sample' => 'ضخیم',
 'bold_tip' => 'ضخیم',
@@ -536,18 +574,28 @@ $2، $1',
 'headline_tip' => 'عنوان بند ۲',
 'nowiki_sample' => 'شه بی فورمت بنویشته ره اینجه دکانین',
 'nowiki_tip' => 'فورمت سر چش ره کوریک بَیره',
-'media_tip' => 'فایل لینک',
+'image_tip' => 'بنویشته‌ی دله‌ی عکس',
+'media_tip' => 'فایل ِلینک',
+'sig_tip' => 'شمه امضا و ونه په‌ی ِتاریخ',
+'hr_tip' => 'افقی خط (ونه کمته کار بکشین)',
 
 # Edit pages
-'summary' => 'Ú¯Ù\88زارش Ú©Ø§Ø±:',
+'summary' => 'کار Ù\90گزارش:',
 'subject' => 'موضوع یا عنوان:',
-'minoredit' => 'اینتا ویرایش خله جزئی بیه',
-'watchthis' => 'این صفحه ره دمبال هـاکاردن',
+'minoredit' => 'اینتا دچی‌یه خله جزئی بی‌یه',
+'watchthis' => 'این صفحه ره دمبال هاکردن',
 'savearticle' => 'جادکتن ِصفحه',
-'preview' => 'پیش نمایش',
-'showpreview' => 'پیش‌نمایش ره سِراق هدائن',
-'showlivepreview' => 'پیش‌نمایش آنلاین',
-'showdiff' => 'نمایش تغییرات',
+'preview' => 'پیش‌پیش سِراق هدائن',
+'showpreview' => 'پیش‌پیش سِراق هدائن',
+'showlivepreview' => 'آنلاین پیش‌پیش سِراق هدائن',
+'showdiff' => 'تغییرات ِسراق هدائن',
+'anoneditwarning' => "'''هشدار:''' شِما هنتا عضو نَیینی.
+شمه آی‌پی آدرِس تاریخچه دله موندنه.",
+'anonpreviewwarning' => "''شما هنتا عضو نَیینی، اگه اتچی بنویسین، شمه آی‌پی ِلینگِ‌رج اینجه موندنه.''",
+'missingcommenttext' => 'ات‌چی اینجه بنویسین که شمه توضیح بوو',
+'summary-preview' => 'خلاصه‌ی پیش‌پیش سِراق هدائن:',
+'subject-preview' => 'موضوع/عنوان ِپیش‌پیش سِراق هدائن:',
+'blockedtitle' => 'کارور دَوسته بیّه',
 'blockedtext' => "'''شمه آی پی دوسته بیّه.'''
 
 این کار ره $1 انجام هدائه.
@@ -562,6 +610,13 @@ $2، $1',
  شمه یاد دواشه که اگه شه ایمیل ره ننوشت بائین نتونی مدیرا وسه ایمیل بزنین اگه ایمیل ره ننوشنی ترجیحات دله بنویسین[[Special:Preferences|اینجه ایمیل ره بنویس]]
 نشونی آی‌پی شما $3 و شماره قطع دسترسی شما $5 هسته. حتما این دِتا شوماره ره گپ بزوئن دله به کار بورین.",
 'blockednoreason' => 'معلوم نی‌یه چچی وسه اینتی بیّه!',
+'loginreqtitle' => 'ونه سامانه دله بئین',
+'loginreqlink' => 'دله بموئن',
+'loginreqpagetext' => 'بقیه‌ی صفحه‌ئون ِبدی‌ین وسّه، ونه $1.',
+'accmailtitle' => 'پسورد ره برسِنیمی.',
+'accmailtext' => "اتا تصادفی پسور بساته بیّه [[User talk:$1|$1]] وسّه $2 سَر برسِنی‌یه بیّه.
+
+این ترنه کاروری حساب ِپسور، سامانه دله بموئن په، ''[[Special:ChangePassword|ات‌تی]]'' بتونده عوض بوو.",
 'newarticle' => '(ترنه)',
 'blocked-notice-logextract' => 'دسترسی اینتا کارور الآن دوستوئه.
 آخرین مورد سیاهه قطع دسترسی زیر بموئه:',
@@ -628,8 +683,6 @@ $2، $1',
 'search-suggest' => 'شما اینتا ره نخاسنی: $1',
 'search-interwiki-caption' => 'خاخر پروژه‌ئون',
 'search-interwiki-more' => '(ویشتر)',
-'search-mwsuggest-enabled' => 'پیشنهاد همرا',
-'search-mwsuggest-disabled' => 'هیچ پیشنهادی دنیه',
 'powersearch' => 'ململ بَیی دور هایتن',
 'powersearch-legend' => 'ململ بَیی دور هایتن',
 'powersearch-ns' => 'بچرخستن اینان دله:',
index d45886f..c029652 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'    => 'Tondak',
-'monday'    => 'Mondak',
-'tuesday'   => 'Dintak',
+'sunday' => 'Tondak',
+'monday' => 'Mondak',
+'tuesday' => 'Dintak',
 'wednesday' => 'Mitwok',
-'thursday'  => 'Donertak',
-'friday'    => 'Preidak',
-'saturday'  => 'Tadurdei',
+'thursday' => 'Donertak',
+'friday' => 'Preidak',
+'saturday' => 'Tadurdei',
 
 'moredotdotdot' => 'Iyuw...',
-'and'           => '&#32;me',
+'and' => '&#32;me',
 
 # Cologne Blue skin
 'qbedit' => 'Kiwiwid',
 
 'errorpagetitle' => 'Dairinaiya',
-'help'           => 'Ipuok',
-'search'         => 'Kanani',
-'go'             => 'Nuwa ko!',
-'history_short'  => 'Ekadaedaenigawae',
-'edit'           => 'Kiwiwid',
-'delete'         => 'Iyababa',
-'unprotect'      => 'Eab oberei',
-'toolbox'        => 'Dabadi n bwait makur',
+'help' => 'Ipuok',
+'search' => 'Kanani',
+'go' => 'Nuwa ko!',
+'history_short' => 'Ekadaedaenigawae',
+'edit' => 'Kiwiwid',
+'delete' => 'Iyababa',
+'unprotect' => 'Eab oberei',
+'toolbox' => 'Dabadi n bwait makur',
 
 # 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).
-'currentevents'        => 'Imwin',
-'currentevents-url'    => 'Project:Imwin',
-'edithelp'             => 'Oomo/edar Ipuok',
-'edithelppage'         => 'Help:Oomo/edar',
-'helppage'             => 'Help:Oangan',
-'mainpage'             => 'Bwiema peij',
+'currentevents' => 'Imwin',
+'currentevents-url' => 'Project:Imwin',
+'edithelp' => 'Oomo/edar Ipuok',
+'edithelppage' => 'Help:Oomo/edar',
+'helppage' => 'Help:Oangan',
+'mainpage' => 'Bwiema peij',
 'mainpage-description' => 'Bwiema peij',
 
 'editsection' => 'Kiwiwid',
-'showtoc'     => 'oduwen',
-'hidetoc'     => 'ewewin',
+'showtoc' => 'oduwen',
+'hidetoc' => 'ewewin',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-help' => 'Ipuok',
@@ -58,35 +58,35 @@ $messages = array(
 'error' => 'Dairinaiya',
 
 # Login and logout pages
-'login'      => 'Metu',
-'logout'     => 'Meta',
+'login' => 'Metu',
+'logout' => 'Meta',
 'userlogout' => 'Meta',
 
 # Edit page toolbar
-'bold_sample'  => 'Eõ mangiyungiy',
-'bold_tip'     => 'Eõ mangiyungiy',
+'bold_sample' => 'Eõ mangiyungiy',
+'bold_tip' => 'Eõ mangiyungiy',
 'image_sample' => 'Ekar.jpg',
 
 # Edit pages
-'savearticle'    => 'Otsimor',
-'newarticle'     => '(Etsimeduw)',
-'editing'        => 'Oomo/edar $1',
+'savearticle' => 'Otsimor',
+'newarticle' => '(Etsimeduw)',
+'editing' => 'Oomo/edar $1',
 'editingsection' => 'Oomo/edar $1 (itubwang)',
 
 # Search results
 'searchhelp-url' => 'Help:Oangan',
-'powersearch'    => 'Anani ko',
+'powersearch' => 'Anani ko',
 
 # Preferences page
-'prefs-skin'        => 'Witsin',
+'prefs-skin' => 'Witsin',
 'searchresultshead' => 'Anani ko',
-'yourlanguage'      => 'Edorer',
+'yourlanguage' => 'Edorer',
 
 # Recent changes
 'recentchanges' => 'Iwiwidit tsimeduw',
-'hist'          => 'eka',
-'hide'          => 'witsit imin gogoro',
-'show'          => 'oduwen',
+'hist' => 'eka',
+'hide' => 'witsit imin gogoro',
+'show' => 'oduwen',
 
 # Random page
 'randompage' => 'Tamo peij',
@@ -100,11 +100,11 @@ $messages = array(
 # E-mail user
 'emailuser' => 'Emaileiy amune',
 'emailfrom' => 'Atsiu',
-'emailto'   => 'Animwen',
+'emailto' => 'Animwen',
 'emailsend' => 'Oiyon',
 
 # Watchlist
-'watch'   => 'Aea',
+'watch' => 'Aea',
 'unwatch' => 'Eab krak',
 
 # Delete
index 044a768..3ed3338 100644 (file)
@@ -84,15 +84,15 @@ $messages = array(
 'tog-hidepatrolled' => 'Motlàtìs tlapîpialli tlayèktlàlilistli ìpan welok tlapảtlalistli',
 'tog-newpageshidepatrolled' => 'Mokintlàtis tlapîpialtlaìxtlapaltìn ìwikpa ìtlapòpòwaltekpànal in yâyankuik tlaìxtlapaltìn',
 'tog-extendwatchlist' => 'Mìxmảnas in tlapòpòwaltekpàntlachialli ìka mỏtas nochi in tlapảtlalistli, âmò in san okachi yankuik.',
-'tog-usenewrc' => 'Okachi kualli yankuik tlapảtlalistli (ìpan kineki JavaScript)',
+'tog-usenewrc' => 'Colōloāz in tlapatlaiztli īca yancuīc tlapatlaliztli īhuān in tlachiyaliztli tlapōhualāmatl (monequi JavaScript)',
 'tog-showtoolbar' => 'Tiquittāz in tlein motequitiltia tlapatlaliztechcopa (JavaScript)',
 'tog-editondblclick' => 'Tiquimpatlāz zāzaniltin ōme clicca (JavaScript)',
 'tog-showtoc' => 'Tiquittāz in tlein cah zāzotlahcuilōlco',
 'tog-rememberpassword' => 'Ticpiyāz moMotlatequitiltilīltōca īhuān motlahtōlichtacāyo inīn chīuhpōhualhuazco (īxquich {{PLURAL:$1|tōnalli|tōnalli}})',
-'tog-watchcreations' => 'Tiquintlachiyāz zāzaniltin tiquinchīhua',
-'tog-watchdefault' => 'Tiquintlachiyāz zāzaniltin tiquimpatla',
-'tog-watchmoves' => 'Tiquintlachiyāz zāzaniltin tiquinzaca',
-'tog-watchdeletion' => 'Tiquintlachiyāz zāzaniltin tiquimpoloa',
+'tog-watchcreations' => 'Moaquiāz in āmatl mā niquinyōcoya īhuān in tlahcuilōlli mā niquinquetza īpan notlachiyaliz',
+'tog-watchdefault' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquinpatla in notlachiyaliz',
+'tog-watchmoves' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquinzaca in notlachiyaliz',
+'tog-watchdeletion' => 'Moaquiāz āmatl īhuān tlahcuilōlli mā niquimpolo in notlachiyaliz',
 'tog-minordefault' => 'Ticmachiyōtīz mochīntīn tlapatlalitzintli ic default',
 'tog-previewontop' => 'Tiquittāz achtochīhualiztli achtopa tlapatlaliztli caxitl',
 'tog-previewonfirst' => 'Xiquitta achtochīhualiztli inic cē tlapatlalizpan',
@@ -169,7 +169,7 @@ $messages = array(
 'sep' => 'ic chiucnāuh',
 'oct' => 'ic mahtlāc',
 'nov' => 'ic mahtlāctli oncē',
-'dec' => 'ic mahtlāctli onōme',
+'dec' => 'ic mahtlāctli omōme',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Tlaìxmatkàtlàlilòtl|Tlaìxmatkàtlàlilòmë}}',
@@ -206,7 +206,7 @@ $messages = array(
 'qbpageinfo' => 'Tlahcuilōltechcopa',
 'qbmyoptions' => 'Nozāzanil',
 'qbspecialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
-'faq' => 'FAQ',
+'faq' => 'Zan īc tētlatlanīliztli',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
@@ -301,7 +301,7 @@ $messages = array(
 'badaccess-groups' => 'Inōn tiquiēlēhuia zan quichīhuah tlatequitiltilīlli {{PLURAL:$2|oncān|oncān}}: $1.',
 
 'ok' => 'Nopan iti',
-'retrievedfrom' => 'Īhuīcpa "$1"',
+'retrievedfrom' => 'Ōquīzqui ītech  "$1"',
 'youhavenewmessages' => 'Tiquimpiya $1 ($2).',
 'newmessageslink' => 'yancuīc tlahcuilōltzintli',
 'newmessagesdifflink' => 'achto tlapatlaliztli',
@@ -451,9 +451,9 @@ Occeppa xicalaqui niman ticmatīz.',
 'italic_sample' => 'Cōliuhqui tlahcuilōliztli',
 'italic_tip' => 'Cōliuhqui tlahcuilōliztli',
 'link_sample' => 'Tzonhuiliztli ītōcā',
-'link_tip' => 'Tzonhuiliztli tlahtic',
-'extlink_sample' => 'http://www.example.com Tōcāitl',
-'extlink_tip' => 'Tzonhuilizcallān (xitequitiltia http://)',
+'link_tip' => 'Tlahtic tzonhuiliztli',
+'extlink_sample' => 'http://www.machiyōtl.com Tzonhuiliztōcāitl',
+'extlink_tip' => 'Calān tzonhuiliztli (xiquilnamiqui ticaquiāz in http://)',
 'headline_sample' => 'Cuātlahcuilōlli',
 'headline_tip' => 'Iuhcāyōtl 2 tōcāyōtl',
 'image_sample' => 'Machiyōtl.jpg',
@@ -465,7 +465,7 @@ Occeppa xicalaqui niman ticmatīz.',
 # Edit pages
 'summary' => 'Mopatlaliz:',
 'subject' => 'Tōcāitl/Āmoxmachiyōtl:',
-'minoredit' => 'Inīn cah tlapatlalitzintli',
+'minoredit' => 'Inīn tlapatlaliztli tepitōn',
 'watchthis' => 'Tictlachiyāz inīn zāzanilli',
 'savearticle' => 'Ticpiyāz',
 'preview' => 'Xiquitta achtochīhualiztli',
@@ -497,7 +497,8 @@ Tihuelīti [[Special:Search/{{PAGENAME}}|tictēmoa inīn zāzaniltōcācopa]] oc
 '''¡Ahmo ōmochīuh nozan!'''",
 'updated' => '(Ōmoyancuīli)',
 'note' => "'''Tlahtōlcaquiliztilōni:'''",
-'previewnote' => "'''¡Ca inīn moachtochīhualiz, auh mopatlaliz ahmō cateh ōmochīhuah nozan!'''",
+'previewnote' => "'''Xiquilnamiqui tein inīn zan tlaachtopaittaliztli.'''
+¡Motlapatlaliz ayamo ōquinpix!",
 'editing' => 'Ticpatlacah $1',
 'editingsection' => 'Ticpatlacah $1 (tlahtōltzintli)',
 'editingcomment' => 'Ticpatlacah $1 (tlahtōltzintli)',
@@ -587,7 +588,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'revertmerge' => 'Tiquīxipehuaz',
 
 # Diffs
-'history-title' => '"$1" ītlachiyaliz tlahcuilōlloh',
+'history-title' => '«$1» tlahcuilōlloh ītlaihittaliz',
 'lineno' => 'Pāntli $1:',
 'editundo' => 'Tichuelōz',
 'diff-multi' => '({{PLURAL:$1|Cē tlapatlaliztli nepantlah ahmo motta in ōquichīuh|$1 Tlapatlaliztli nepantlah ahmo mottah in ōquinchīuh}}  {{PLURAL:$2|cē tlatequitiltilīlli|$2 tlatequitiltilīltin}})',
@@ -614,7 +615,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'search-result-size' => '$1 ({{PLURAL:$2|1 tlahtōl|$2 tlahtōltin}})',
 'search-redirect' => '(tlacuepaliztli $1)',
 'search-section' => '(tlahtōltzintli $1)',
-'search-suggest' => 'Mohtoa ahnozo: $1',
+'search-suggest' => 'Ahnōceh tiquihtōznequiya: $1',
 'search-interwiki-caption' => 'Tlachīhualiztli īcnīhuān',
 'search-interwiki-more' => '(huehca ōmpa)',
 'search-relatedarticle' => 'Ītechcopa',
@@ -849,7 +850,7 @@ Timitztlātlauhtiah, xitlahcuiloa occē tōcāitl.',
 'filehist-dimensions' => 'Octacayōtl',
 'filehist-comment' => 'TlahtōIcaquiliztīlōni',
 'imagelinks' => 'Tlahcuilōlli tlanemītīliztli',
-'linkstoimage' => 'Inīn {{PLURAL:$1|zāzanilli tzonhuilia|$1 zāzaniltin tzonhuiliah}} inīn tlahcuilōlhuīc:',
+'linkstoimage' => 'Inīn {{PLURAL:$1|zāzanilli motzonhuilia|$1 zāzanilli motzonhuiliah}} inīn tlahcuilōlhuīc:',
 'nolinkstoimage' => 'Ahmo cateh zāzaniltin tlein tzonhuiliah inīn tlahcuilōlhuīc.',
 'morelinkstoimage' => 'Tiquinttāz [[Special:WhatLinksHere/$1|achi tzonhuiliztli]] inīn tlahcuilōlhuīc.',
 'duplicatesoffile' => 'Inōn {{PLURAL:$1|tlahcuilōlli cah|$1 tlahcuilōlli cateh}} ōntiah inīn zāzanilli ([[Special:FileDuplicateSearch/$2|ocahci]]):',
@@ -1116,9 +1117,9 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'undelete-show-file-submit' => 'Quemah',
 
 # Namespace form on various pages
-'namespace' => 'Tōcātzin:',
+'namespace' => 'Tōcātlacāuhtli:',
 'invert' => 'Tlacuepāz motlahtōl',
-'blanknamespace' => '(Huēyi)',
+'blanknamespace' => '(Tāchcāuh)',
 
 # Contributions
 'contributions' => 'Ītlahcuilōl',
@@ -1163,7 +1164,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'ipbreasonotherlist' => 'Occē īxtlamatiliztli',
 'ipbsubmit' => 'Tiquitzacuilīz inīn tlatequitiltilīlli',
 'ipbother' => 'Occē cāuhpan:',
-'ipboptions' => '2 yēmpōhualminutl:2 hours,1 tōnalli:1 day,3 tōnaltin:3 days,7 tōnaltin:1 week,14 tōnaltin:2 weeks,1 mētztli:1 month,3 mētztli:3 months,6 mētztli:6 months,1 xihuitl:1 year,Mochipa:infinite',
+'ipboptions' => '2 cāhuitl:2 hours,1 tōnalli:1 day,3 tōnaltin:3 days,1 chicuēyilhuitl:1 week,2 chicuēyilhuitl:2 weeks,1 mētztli:1 month,3 mētztli:3 months,6 mētztli:6 months,1 xihuitl:1 year,mochipa:infinite',
 'ipbotheroption' => 'occē',
 'ipbotherreason' => 'Occē īxtlamatiliztli:',
 'ipbwatchuser' => 'Tiquinchiyāz inīn tlatequitiltilīlli in ītlatequitiltilīlzāzanil auh in ītēixnāmiquiliz',
@@ -1275,7 +1276,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 '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-p-logo' => 'Calīxatl',
-'tooltip-n-mainpage' => 'Tictlahpolōz in Calīxatl',
+'tooltip-n-mainpage' => 'Tiquittaz in calīxatl',
 'tooltip-n-mainpage-description' => 'Tiquittaz in calīxatl',
 'tooltip-n-portal' => 'Tlachīhualiztechcopa, inōn tihuelīti titlachīhua, tlatēmoyān',
 'tooltip-n-recentchanges' => 'Yancuīc tlapatlaliztli huiquipan',
@@ -1301,7 +1302,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-ca-nstab-category' => 'Mà mỏta ìtlaìxtlapal in tlaìxmatkàtlàlilòtl',
 'tooltip-minoredit' => 'Ticmachiyōz quemeh tlapatlalitzintli',
 'tooltip-save' => 'Ticpiyāz mopatlaliz',
-'tooltip-preview' => 'Xiquitta achtopa mopatlaliz, ¡timitztlātlauhtiah quitēquitiltilia achto ticpiya!',
+'tooltip-preview' => 'Xachtopaitta mopatlaliz ¡Timitztlahtlauhtiliah, xicchīhua yēppa mā tiquimpiya!',
 'tooltip-diff' => 'Xiquitta in tlein ōticpatlāz tlahcuilōlco.',
 'tooltip-compareselectedversions' => 'Tiquinttāz ahneneuhquiliztli ōme zāzanilli tlapatlaliznepantlah.',
 'tooltip-watch' => 'Ticcēntilīz inīn zāzanilli motlachiyalizhuīc',
@@ -1500,6 +1501,9 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 # HTML forms
 'htmlform-selectorother-other' => 'Occē',
 
+# Search suggestions
+'searchsuggest-search' => 'Tlatēmoliztli',
+
 # API errors
 'api-error-ok-but-empty' => 'Tlâtek îtlakawilistli: Âmò tènankilia in tlatèmakani.',
 'api-error-overwrite' => 'Awel motlâkuilnepanòltis sè èwalli tlèn yi katki.',
index 8d3edf6..b4b07a7 100644 (file)
@@ -499,6 +499,7 @@ Lîm-sî ê bi̍t-bé: $2',
 'subject-preview' => 'Ū-lám tê-bo̍k/piau-tê:',
 'blockednoreason' => '無寫理由',
 'whitelistedittext' => 'Lí ài $1 chiah ē-sái siu-kái.',
+'nosuchsectiontitle' => 'Chhoé bô toān-lo̍h',
 'loginreqtitle' => 'Su-iàu Teng-ji̍p',
 'loginreqlink' => 'Teng-ji̍p',
 'loginreqpagetext' => 'Lí ài $1 chiah thang khoàⁿ pat ia̍h.',
@@ -570,6 +571,9 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 'histfirst' => 'Tùi thâu-chêng',
 'histlast' => 'Tùi āu-piah',
 
+# Revision feed
+'history-feed-item-nocomment' => '$1 tī $2',
+
 # Diffs
 'lineno' => 'Tē $1 chōa:',
 'compareselectedversions' => 'Pí-phēng soán-te̍k ê pán-pún',
@@ -594,6 +598,7 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 'searchprofile-advanced' => 'chìn-chi̍t-pō͘',
 'searchprofile-articles-tooltip' => 'Tī $1 chhoé',
 'searchprofile-images-tooltip' => 'Chhoé tóng-àn',
+'search-result-size' => '$1 ({{PLURAL:$2|1 jī-goân|$2 jī-goân}})',
 'search-section' => '(toān-lo̍h $1)',
 'searchall' => 'choân-pō·',
 'showingresults' => 'Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.',
@@ -680,6 +685,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'recentchangeslinked-feed' => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-toolbox' => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-noresult' => 'Lí chí-tēng ê tiâu-kiaⁿ lāi-té chhōe bô jīn-hô kái-piàn.',
+'recentchangeslinked-page' => 'Ia̍h ê miâ:',
 
 # Upload
 'upload' => 'Kā tóng-àn chiūⁿ-bāng',
@@ -725,6 +731,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'filehist' => 'Tóng-àn ê le̍k-sú',
 'filehist-current' => 'hiān-chāi',
 'filehist-datetime' => 'Ji̍t-kî/ Sî-kan',
+'filehist-user' => 'Iōng-chiá',
 'imagelinks' => 'Iáⁿ-siōng liân-kiat',
 'linkstoimage' => 'Í-hā ê ia̍h liân kàu chit ê iáⁿ-siōng:',
 'nolinkstoimage' => 'Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.',
@@ -816,6 +823,7 @@ Template:Khu-pia̍t-ia̍h',
 'allpages' => 'Só·-ū ê ia̍h',
 'alphaindexline' => '$1 kàu $2',
 'nextpage' => 'Āu 1 ia̍h ($1)',
+'prevpage' => '前一頁($1)',
 'allpagesfrom' => 'Tùi chit ia̍h khai-sí hián-sī:',
 'allarticles' => 'Só·-ū ê bûn-chiuⁿ',
 'allinnamespace' => 'Só·-ū ê ia̍h ($1 miâ-khong-kan)',
@@ -857,6 +865,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Watchlist
 'watchlist' => 'Kàm-sī-toaⁿ',
 'mywatchlist' => 'Góa ê kàm-sī-toaⁿ',
+'watchlistfor2' => '予$1 $2',
 'nowatchlist' => 'Lí ê kàm-sī-toaⁿ bô pòaⁿ hāng.',
 'watchnologin' => 'Bô teng-ji̍p',
 'watchnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng siu-kái lí ê kàm-sī-toaⁿ.',
@@ -1028,6 +1037,7 @@ Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chia
 'tooltip-ca-viewsource' => 'Chit ia̍h pó-hō͘ tiâu leh.
 Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'tooltip-ca-history' => 'Chit ia̍h ê chá-chêng pán-pún',
+'tooltip-ca-delete' => 'Thâi chit ia̍h',
 'tooltip-ca-unwatch' => 'Lí ê kàm-sī-toaⁿ soá tiàu chit ia̍h.',
 'tooltip-search' => 'Chhoé {{SITENAME}}',
 'tooltip-search-fulltext' => 'Chhoé ū chia-ê jī ê ia̍h',
@@ -1096,6 +1106,7 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'watchlistall2' => 'choân-pō͘',
 'namespacesall' => 'choân-pō·',
 'monthsall' => 'choân-pō͘',
+'limitall' => '全部',
 
 # E-mail address confirmation
 'confirmemail' => 'Khak-jīn e-mail chū-chí',
index c95a5a8..12c44e4 100644 (file)
@@ -54,211 +54,211 @@ $namespaceAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => "Sottolinia 'e jonte:",
-'tog-justify'                 => "Alliniamento d''e paracrafe mpare",
-'tog-hideminor'               => "Annascunne 'e cagne piccirille  'int'a ll'úrdeme cagne",
-'tog-extendwatchlist'         => "Spanne ll'asservate speciale pe fà vedé tutte 'e cagne possíbbele",
-'tog-usenewrc'                => 'Urdeme cagne avanzate (JavaScript)',
-'tog-numberheadings'          => "Annúmmera automatecamente 'e títule",
-'tog-showtoolbar'             => "Aspone 'a barra d''e stromiente 'e cagno (JavaScript)",
-'tog-editondblclick'          => "Cagna 'e pàggene cliccanno ddoje vote (JavaScript)",
-'tog-editsection'             => "Permette 'e cagnà 'e sezzione cu a jonta [cagna]",
+'tog-underline' => "Sottolinia 'e jonte:",
+'tog-justify' => "Alliniamento d''e paracrafe mpare",
+'tog-hideminor' => "Annascunne 'e cagne piccirille  'int'a ll'úrdeme cagne",
+'tog-extendwatchlist' => "Spanne ll'asservate speciale pe fà vedé tutte 'e cagne possíbbele",
+'tog-usenewrc' => 'Urdeme cagne avanzate (JavaScript)',
+'tog-numberheadings' => "Annúmmera automatecamente 'e títule",
+'tog-showtoolbar' => "Aspone 'a barra d''e stromiente 'e cagno (JavaScript)",
+'tog-editondblclick' => "Cagna 'e pàggene cliccanno ddoje vote (JavaScript)",
+'tog-editsection' => "Permette 'e cagnà 'e sezzione cu a jonta [cagna]",
 'tog-editsectiononrightclick' => "Permette 'e cangne 'e sezzione cliccanno p''o tasto destro ncopp 'e titule 'e sezzione (JavaScript)",
-'tog-showtoc'                 => "Mosta ll'innece pe 'e paggene cu cchiù 'e 3 sezzione",
-'tog-rememberpassword'        => "Ricurda 'a registrazzione pe' cchiu sessione (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'tog-showtoc' => "Mosta ll'innece pe 'e paggene cu cchiù 'e 3 sezzione",
+'tog-rememberpassword' => "Ricurda 'a registrazzione pe' cchiu sessione (for a maximum of $1 {{PLURAL:$1|day|days}})",
 
 'underline-always' => 'Sèmpe',
-'underline-never'  => 'Màje',
+'underline-never' => 'Màje',
 
 # Dates
-'sunday'        => 'dumméneca',
-'monday'        => 'lunnerì',
-'tuesday'       => 'marterì',
-'wednesday'     => 'miercurì',
-'thursday'      => 'gioverì',
-'friday'        => 'viernarì',
-'saturday'      => 'sàbbato',
-'sun'           => 'dum',
-'mon'           => 'lun',
-'tue'           => 'mar',
-'wed'           => 'mier',
-'thu'           => 'gio',
-'fri'           => 'ven',
-'sat'           => 'sab',
-'january'       => 'jennaro',
-'february'      => 'frevàro',
-'march'         => 'màrzo',
-'april'         => 'abbrile',
-'may_long'      => 'màjo',
-'june'          => 'giùgno',
-'july'          => 'luglio',
-'august'        => 'aústo',
-'september'     => 'settembre',
-'october'       => 'ottobbre',
-'november'      => 'nuvembre',
-'december'      => 'dicèmbre',
-'january-gen'   => 'jennaro',
-'february-gen'  => 'frevaro',
-'march-gen'     => 'màrzo',
-'april-gen'     => 'abbrile',
-'may-gen'       => 'maggio',
-'june-gen'      => 'giùgno',
-'july-gen'      => 'luglio',
-'august-gen'    => 'aùsto',
+'sunday' => 'dumméneca',
+'monday' => 'lunnerì',
+'tuesday' => 'marterì',
+'wednesday' => 'miercurì',
+'thursday' => 'gioverì',
+'friday' => 'viernarì',
+'saturday' => 'sàbbato',
+'sun' => 'dum',
+'mon' => 'lun',
+'tue' => 'mar',
+'wed' => 'mier',
+'thu' => 'gio',
+'fri' => 'ven',
+'sat' => 'sab',
+'january' => 'jennaro',
+'february' => 'frevàro',
+'march' => 'màrzo',
+'april' => 'abbrile',
+'may_long' => 'màjo',
+'june' => 'giùgno',
+'july' => 'luglio',
+'august' => 'aústo',
+'september' => 'settembre',
+'october' => 'ottobbre',
+'november' => 'nuvembre',
+'december' => 'dicèmbre',
+'january-gen' => 'jennaro',
+'february-gen' => 'frevaro',
+'march-gen' => 'màrzo',
+'april-gen' => 'abbrile',
+'may-gen' => 'maggio',
+'june-gen' => 'giùgno',
+'july-gen' => 'luglio',
+'august-gen' => 'aùsto',
 'september-gen' => 'settembre',
-'october-gen'   => 'ottovre',
-'november-gen'  => 'nuvembre',
-'december-gen'  => 'dicembre',
-'jan'           => 'jen',
-'feb'           => 'fre',
-'mar'           => 'mar',
-'apr'           => 'abb',
-'may'           => 'maj',
-'jun'           => 'giu',
-'jul'           => 'lug',
-'aug'           => 'aus',
-'sep'           => 'set',
-'oct'           => 'ott',
-'nov'           => 'nuv',
-'dec'           => 'dic',
+'october-gen' => 'ottovre',
+'november-gen' => 'nuvembre',
+'december-gen' => 'dicembre',
+'jan' => 'jen',
+'feb' => 'fre',
+'mar' => 'mar',
+'apr' => 'abb',
+'may' => 'maj',
+'jun' => 'giu',
+'jul' => 'lug',
+'aug' => 'aus',
+'sep' => 'set',
+'oct' => 'ott',
+'nov' => 'nuv',
+'dec' => 'dic',
 
 # Categories related messages
 'category_header' => 'Paggene rìnt\'a categurìa "$1"',
-'subcategories'   => 'Categurìe secunnarie',
+'subcategories' => 'Categurìe secunnarie',
 
-'about'     => 'Nfromma',
-'article'   => 'Articulo',
+'about' => 'Nfromma',
+'article' => 'Articulo',
 'newwindow' => "(s'arape n'ata fenèsta)",
-'cancel'    => 'Scancèlla',
-'mypage'    => "'A paggena mia",
-'mytalk'    => "'E mmie chiacchieriàte",
-'anontalk'  => 'Chiacchierate pe chisto IP',
+'cancel' => 'Scancèlla',
+'mypage' => "'A paggena mia",
+'mytalk' => "'E mmie chiacchieriàte",
+'anontalk' => 'Chiacchierate pe chisto IP',
 
 # Cologne Blue skin
-'qbfind'         => 'Truòva',
-'qbedit'         => 'Càgna',
-'qbpageoptions'  => 'Chesta paggena',
-'qbpageinfo'     => "Nfrummazzione ncopp'â paggena",
-'qbmyoptions'    => "'E ppaggene mie",
+'qbfind' => 'Truòva',
+'qbedit' => 'Càgna',
+'qbpageoptions' => 'Chesta paggena',
+'qbpageinfo' => "Nfrummazzione ncopp'â paggena",
+'qbmyoptions' => "'E ppaggene mie",
 'qbspecialpages' => 'Pàggene speciàle',
 
-'errorpagetitle'    => 'Sbaglio',
-'returnto'          => 'Torna a $1.',
-'help'              => 'Ajùto',
-'search'            => 'Truova',
-'searchbutton'      => 'Truova',
-'go'                => 'Vàje',
-'history'           => "Verziune 'e primma",
-'history_short'     => 'Cronologgia',
-'printableversion'  => "Verzione pe' stampa",
-'permalink'         => 'Jonta permanente',
-'edit'              => 'Càgna',
-'editthispage'      => 'Càgna chesta paggena',
-'delete'            => 'Scancèlla',
-'deletethispage'    => 'Scancèlla chésta paggena',
-'protect'           => 'Ferma',
-'protectthispage'   => 'Ferma chesta paggena',
-'unprotect'         => 'Sferma',
+'errorpagetitle' => 'Sbaglio',
+'returnto' => 'Torna a $1.',
+'help' => 'Ajùto',
+'search' => 'Truova',
+'searchbutton' => 'Truova',
+'go' => 'Vàje',
+'history' => "Verziune 'e primma",
+'history_short' => 'Cronologgia',
+'printableversion' => "Verzione pe' stampa",
+'permalink' => 'Jonta permanente',
+'edit' => 'Càgna',
+'editthispage' => 'Càgna chesta paggena',
+'delete' => 'Scancèlla',
+'deletethispage' => 'Scancèlla chésta paggena',
+'protect' => 'Ferma',
+'protectthispage' => 'Ferma chesta paggena',
+'unprotect' => 'Sferma',
 'unprotectthispage' => 'Sferma chesta paggena',
-'newpage'           => 'Paggena nòva',
-'talkpage'          => "Paggena 'e chiàcchiera",
-'talkpagelinktext'  => 'Chiàcchiera',
-'specialpage'       => 'Paggena speciàle',
-'talk'              => 'Chiàcchiera',
-'toolbox'           => 'Strumiente',
-'imagepage'         => 'Paggena fiùra',
-'otherlanguages'    => 'Ate léngue',
-'redirectedfrom'    => "(Redirect 'a $1)",
-'lastmodifiedat'    => "Urdema cagnamiénto pe' a paggena: $2, $1.",
-'viewcount'         => 'Chesta paggena è stata lètta {{PLURAL:$1|una vòta|$1 vòte}}.',
-'jumpto'            => 'Vaje a:',
-'jumptonavigation'  => 'navigazione',
-'jumptosearch'      => 'truova',
+'newpage' => 'Paggena nòva',
+'talkpage' => "Paggena 'e chiàcchiera",
+'talkpagelinktext' => 'Chiàcchiera',
+'specialpage' => 'Paggena speciàle',
+'talk' => 'Chiàcchiera',
+'toolbox' => 'Strumiente',
+'imagepage' => 'Paggena fiùra',
+'otherlanguages' => 'Ate léngue',
+'redirectedfrom' => "(Redirect 'a $1)",
+'lastmodifiedat' => "Urdema cagnamiénto pe' a paggena: $2, $1.",
+'viewcount' => 'Chesta paggena è stata lètta {{PLURAL:$1|una vòta|$1 vòte}}.',
+'jumpto' => 'Vaje a:',
+'jumptonavigation' => 'navigazione',
+'jumptosearch' => 'truova',
 
 # 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'            => "'Nfrummazione ncòpp'a {{SITENAME}}",
-'aboutpage'            => "Project:'Nfrummazione",
-'disclaimers'          => 'Avvertimiènte',
-'disclaimerpage'       => 'Project:Avvertimiènte generale',
-'edithelp'             => 'Guida',
-'helppage'             => 'Help:Ajùto',
-'mainpage'             => 'Paggena prencepale',
+'aboutsite' => "'Nfrummazione ncòpp'a {{SITENAME}}",
+'aboutpage' => "Project:'Nfrummazione",
+'disclaimers' => 'Avvertimiènte',
+'disclaimerpage' => 'Project:Avvertimiènte generale',
+'edithelp' => 'Guida',
+'helppage' => 'Help:Ajùto',
+'mainpage' => 'Paggena prencepale',
 'mainpage-description' => 'Paggena prencepale',
-'portal'               => "Porta d''a cummunetà",
-'portal-url'           => "Project:Porta d''a cummunetà",
+'portal' => "Porta d''a cummunetà",
+'portal-url' => "Project:Porta d''a cummunetà",
 
 'badaccess' => "Nun haje 'e premmesse abbastante.",
 
-'newmessageslink'         => "nuove 'mmasciàte",
-'newmessagesdifflink'     => "differenze cu 'a revisione precedente",
+'newmessageslink' => "nuove 'mmasciàte",
+'newmessagesdifflink' => "differenze cu 'a revisione precedente",
 'youhavenewmessagesmulti' => 'Tiene nuove mmasciate $1',
-'editsection'             => 'càgna',
-'editold'                 => 'càgna',
-'toc'                     => 'Énnece',
-'showtoc'                 => 'faje vedé',
-'hidetoc'                 => 'annascunne',
-'viewdeleted'             => 'Vire $1?',
+'editsection' => 'càgna',
+'editold' => 'càgna',
+'toc' => 'Énnece',
+'showtoc' => 'faje vedé',
+'hidetoc' => 'annascunne',
+'viewdeleted' => 'Vire $1?',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Articulo',
-'nstab-user'      => 'Paggena utente',
-'nstab-project'   => "Paggena 'e servizio",
-'nstab-image'     => 'Fiura',
+'nstab-main' => 'Articulo',
+'nstab-user' => 'Paggena utente',
+'nstab-project' => "Paggena 'e servizio",
+'nstab-image' => 'Fiura',
 'nstab-mediawiki' => "'Mmasciata",
-'nstab-help'      => 'Ajùto',
-'nstab-category'  => 'Categurìa',
+'nstab-help' => 'Ajùto',
+'nstab-category' => 'Categurìa',
 
 # General errors
 'filedeleteerror' => 'Nun se pô scancellà \'o file "$1"',
-'cannotdelete'    => "Nun è possibbele scassà 'a paggena o 'a fiura addamannata. (Putria éssere stato già scancellato.)",
-'badtitle'        => "'O nnomme nun è jùsto",
+'cannotdelete' => "Nun è possibbele scassà 'a paggena o 'a fiura addamannata. (Putria éssere stato già scancellato.)",
+'badtitle' => "'O nnomme nun è jùsto",
 
 # Login and logout pages
-'logouttext'                 => "'''Site asciùte.'''
+'logouttext' => "'''Site asciùte.'''
 
 Putite cuntinuà a ausà {{SITENAME}} comme n'utente senza nomme, o si nò putite trasì n'ata vota, cu 'o stesso nomme o cu n'ato nomme.",
-'welcomecreation'            => "== Bemmenuto, $1! ==
+'welcomecreation' => "== Bemmenuto, $1! ==
 
 'O cunto è stato criato currettamente.  Nun scurdà 'e perzonalizzà 'e ppreferenze 'e {{SITENAME}}.",
-'remembermypassword'         => 'Allicuordate d"a password (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'yourdomainname'             => "Spiecà 'o dumminio",
-'login'                      => 'Tràse',
-'userlogin'                  => "Tràse o cria n'acciesso nuovo",
-'logout'                     => 'Jèsce',
-'userlogout'                 => 'Jèsce',
-'notloggedin'                => 'Acciesso nun affettuato',
-'nologin'                    => "Nun haje ancora n'acciesso? '''$1'''.",
-'nologinlink'                => 'Crialo mmo',
-'createaccount'              => 'Cria nu cunto nuovo',
-'gotaccount'                 => "Tiene già nu cunto? '''$1'''.",
-'gotaccountlink'             => 'Tràse',
-'loginerror'                 => "Probblema 'e accièsso",
-'loginsuccesstitle'          => 'Acciesso affettuato',
-'nosuchusershort'            => 'Nun ce stanno utente cu o nòmme "$1". Cuntrolla si scrivìste buòno.',
-'nouserspecified'            => "Tiene 'a dìcere nu nomme pricìso.",
+'remembermypassword' => 'Allicuordate d"a password (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'yourdomainname' => "Spiecà 'o dumminio",
+'login' => 'Tràse',
+'userlogin' => "Tràse o cria n'acciesso nuovo",
+'logout' => 'Jèsce',
+'userlogout' => 'Jèsce',
+'notloggedin' => 'Acciesso nun affettuato',
+'nologin' => "Nun haje ancora n'acciesso? '''$1'''.",
+'nologinlink' => 'Crialo mmo',
+'createaccount' => 'Cria nu cunto nuovo',
+'gotaccount' => "Tiene già nu cunto? '''$1'''.",
+'gotaccountlink' => 'Tràse',
+'loginerror' => "Probblema 'e accièsso",
+'loginsuccesstitle' => 'Acciesso affettuato',
+'nosuchusershort' => 'Nun ce stanno utente cu o nòmme "$1". Cuntrolla si scrivìste buòno.',
+'nouserspecified' => "Tiene 'a dìcere nu nomme pricìso.",
 'acct_creation_throttle_hit' => 'Ce dispiace, haje già criato $1 utente. Nun ne pô crià ate.',
-'accountcreated'             => 'Cunto criato',
-'loginlanguagelabel'         => 'Lengua: $1',
+'accountcreated' => 'Cunto criato',
+'loginlanguagelabel' => 'Lengua: $1',
 
 # Edit page toolbar
 'image_sample' => 'Essempio.jpg',
-'image_tip'    => 'Fiura ncuorporata',
+'image_tip' => 'Fiura ncuorporata',
 
 # Edit pages
-'minoredit'        => 'Chisto è nu cagnamiénto piccerillo',
-'watchthis'        => "Tiene d'uocchio chesta paggena",
-'savearticle'      => "Sarva 'a paggena",
-'preview'          => 'Anteprimma',
-'showpreview'      => 'Vere anteprimma',
-'showdiff'         => "Fa veré 'e cagnamiente",
-'loginreqtitle'    => "Pe' cagnà chesta paggena abbesognate aseguì ll'acciesso ô sito.",
-'loginreqlink'     => "aseguì ll'acciesso",
+'minoredit' => 'Chisto è nu cagnamiénto piccerillo',
+'watchthis' => "Tiene d'uocchio chesta paggena",
+'savearticle' => "Sarva 'a paggena",
+'preview' => 'Anteprimma',
+'showpreview' => 'Vere anteprimma',
+'showdiff' => "Fa veré 'e cagnamiente",
+'loginreqtitle' => "Pe' cagnà chesta paggena abbesognate aseguì ll'acciesso ô sito.",
+'loginreqlink' => "aseguì ll'acciesso",
 'loginreqpagetext' => "Pe' veré ate ppaggene abbesognate $1.",
-'accmailtitle'     => "'O password è stato mannato.",
-'accmailtext'      => '\'A password pe ll\'utente "$1" fuje mannata ô nnerizzo $2.',
-'previewnote'      => "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena NUN songo ancora sarvate!'''",
-'editing'          => "Cagnamiento 'e $1",
-'templatesused'    => "Template ausate 'a chesta paggena:",
+'accmailtitle' => "'O password è stato mannato.",
+'accmailtext' => '\'A password pe ll\'utente "$1" fuje mannata ô nnerizzo $2.',
+'previewnote' => "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena NUN songo ancora sarvate!'''",
+'editing' => "Cagnamiento 'e $1",
+'templatesused' => "Template ausate 'a chesta paggena:",
 
 # "Undo" feature
 'undo-summary' => "Canciella 'o cagnamiento $1 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|Chiàcchiera]])",
@@ -270,48 +270,48 @@ Putite cuntinuà a ausà {{SITENAME}} comme n'utente senza nomme, o si nò putit
 'rev-delundel' => 'faje vedé/annascunne',
 
 # Search results
-'searchresults'    => "Risultato d''a recerca",
+'searchresults' => "Risultato d''a recerca",
 'searchresulttext' => "Pe sapé de cchiù ncopp'â comme ascia 'a {{SITENAME}}, vere [[{{MediaWiki:Helppage}}|Ricerca in {{SITENAME}}]].",
-'notitlematches'   => "Voce addemannata nun truvata dint' 'e titule 'e articulo",
-'notextmatches'    => "Voce addemannata nun truvata dint' 'e teste 'e articulo",
-'searchhelp-url'   => 'Help:Ajùto',
-'powersearch'      => 'Truova',
+'notitlematches' => "Voce addemannata nun truvata dint' 'e titule 'e articulo",
+'notextmatches' => "Voce addemannata nun truvata dint' 'e teste 'e articulo",
+'searchhelp-url' => 'Help:Ajùto',
+'powersearch' => 'Truova',
 
 # Preferences page
-'mypreferences'         => "Preferenze d''e mie",
-'changepassword'        => 'Cagna password',
-'prefs-rc'              => 'Urdeme nove',
-'prefs-watchlist'       => 'Asservate speciale',
-'columns'               => 'Culonne:',
+'mypreferences' => "Preferenze d''e mie",
+'changepassword' => 'Cagna password',
+'prefs-rc' => 'Urdeme nove',
+'prefs-watchlist' => 'Asservate speciale',
+'columns' => 'Culonne:',
 'timezoneregion-africa' => 'Afreca',
-'username'              => 'Nomme utente',
-'yourlanguage'          => 'Lengua:',
+'username' => 'Nomme utente',
+'yourlanguage' => 'Lengua:',
 
 # User rights log
 'rightsnone' => '(nisciuno)',
 
 # Recent changes
-'recentchanges'     => 'Urdeme nove',
-'recentchangestext' => "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatto ê cuntenute d\"o sito.",
-'rcnote'            => "Ccà sotto nce songo ll'urdeme {{PLURAL:$1|cangiamiento|'''$1''' cangiamiente}} 'e ll'urdeme {{PLURAL:$2|juorno|'''$2''' juorne}}, agghiuornate a $3.",
-'rclistfrom'        => "Faje vedé 'e cagnamiénte fatte a partì 'a $1",
-'rcshowhideminor'   => "$1 'e cagnamiénte piccerille",
-'rcshowhidebots'    => "$1 'e bot",
-'rcshowhideliu'     => "$1 ll'utente reggìstrate",
-'rcshowhideanons'   => "$1 ll'utente anonime",
-'rcshowhidemine'    => "$1 'e ffatiche mmee",
-'rclinks'           => "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
-'hide'              => 'annascunne',
-'show'              => 'faje vedé',
+'recentchanges' => 'Urdeme nove',
+'recentchanges-summary' => "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatto ê cuntenute d\"o sito.",
+'rcnote' => "Ccà sotto nce songo ll'urdeme {{PLURAL:$1|cangiamiento|'''$1''' cangiamiente}} 'e ll'urdeme {{PLURAL:$2|juorno|'''$2''' juorne}}, agghiuornate a $3.",
+'rclistfrom' => "Faje vedé 'e cagnamiénte fatte a partì 'a $1",
+'rcshowhideminor' => "$1 'e cagnamiénte piccerille",
+'rcshowhidebots' => "$1 'e bot",
+'rcshowhideliu' => "$1 ll'utente reggìstrate",
+'rcshowhideanons' => "$1 ll'utente anonime",
+'rcshowhidemine' => "$1 'e ffatiche mmee",
+'rclinks' => "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
+'hide' => 'annascunne',
+'show' => 'faje vedé',
 'rc_categories_any' => 'Qualònca',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Cagnamiénte cullegate',
-'recentchangeslinked-feed'    => 'Cagnamiénte cullegate',
+'recentchangeslinked' => 'Cagnamiénte cullegate',
+'recentchangeslinked-feed' => 'Cagnamiénte cullegate',
 'recentchangeslinked-toolbox' => 'Cagnamiénte cullegate',
 
 # Upload
-'upload'        => 'Careca file',
+'upload' => 'Careca file',
 'uploadedimage' => 'ha carecato "[[$1]]"',
 
 # Special:ListFiles
@@ -319,11 +319,11 @@ Putite cuntinuà a ausà {{SITENAME}} comme n'utente senza nomme, o si nò putit
 
 # File description page
 'file-anchor-link' => 'Fiura',
-'filehist-user'    => 'Utente',
-'imagelinks'       => 'Jonte ê ffiure',
+'filehist-user' => 'Utente',
+'imagelinks' => 'Jonte ê ffiure',
 
 # Random page
-'randompage'         => 'Na paggena qualsiase',
+'randompage' => 'Na paggena qualsiase',
 'randompage-nopages' => 'Nessuna pagina nel namespace selezionato.',
 
 'disambiguations' => "Paggene 'e disambigua",
@@ -331,24 +331,24 @@ Putite cuntinuà a ausà {{SITENAME}} comme n'utente senza nomme, o si nò putit
 'doubleredirects' => 'Redirect duppie',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 {{PLURAL:$1|byte|byte}}',
-'ncategories'  => '$1 {{PLURAL:$1|categoria|categorie}}',
-'nlinks'       => '$1 {{PLURAL:$1|cullegamiento|cullegamiente}}',
+'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
+'ncategories' => '$1 {{PLURAL:$1|categoria|categorie}}',
+'nlinks' => '$1 {{PLURAL:$1|cullegamiento|cullegamiente}}',
 'popularpages' => "Paggene cchiù 'speziunate",
-'wantedpages'  => 'Paggene cchiù addemannate',
-'shortpages'   => 'Paggene curte',
-'longpages'    => 'Paggene cchiú longhe',
-'newpages'     => 'Paggene cchiù frische',
-'move'         => 'Spusta',
+'wantedpages' => 'Paggene cchiù addemannate',
+'shortpages' => 'Paggene curte',
+'longpages' => 'Paggene cchiú longhe',
+'newpages' => 'Paggene cchiù frische',
+'move' => 'Spusta',
 'movethispage' => 'Spusta chesta paggena',
 
 # Special:AllPages
-'allpages'       => "Tutte 'e ppaggene",
-'allarticles'    => "Tutt' 'e vvoce",
+'allpages' => "Tutte 'e ppaggene",
+'allarticles' => "Tutt' 'e vvoce",
 'allinnamespace' => "Tutt' 'e ppaggene d''o namespace $1",
 
 # Special:Categories
-'categories'         => 'Categurìe',
+'categories' => 'Categurìe',
 'categoriespagetext' => "Lista cumpleta d\"e categurie presente ncopp' 'o sito.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].",
@@ -357,30 +357,30 @@ Also see [[Special:WantedCategories|wanted categories]].",
 'linksearch-ok' => 'Truova',
 
 # Watchlist
-'watch'        => 'Secuta',
+'watch' => 'Secuta',
 'notanarticle' => 'Chesta paggena nun è na voce',
 
 'enotif_newpagetext' => 'Chesta è na paggena nòva.',
-'changed'            => 'cagnata',
+'changed' => 'cagnata',
 
 # Delete
-'deletepage'      => 'Scancella paggena',
-'excontent'       => "'o cuntenuto era: '$1'",
+'deletepage' => 'Scancella paggena',
+'excontent' => "'o cuntenuto era: '$1'",
 'excontentauthor' => "'o cuntenuto era: '$1' (e ll'unneco cuntribbutore era '[[Special:Contributions/$2|$2]]')",
-'exbeforeblank'   => "'O cuntenuto apprimm' 'a ll'arrevacamento era: '$1'",
-'exblank'         => "'a paggena era vacante",
-'actioncomplete'  => 'Azzione fernuta',
-'deletedtext'     => 'Qauccheruno ha scancellata \'a paggena "$1".  Addumannà \'o $2 pe na lista d"e ppaggene scancellate urdemamente.',
-'dellogpage'      => 'Scancellazione',
-'deletionlog'     => 'Log d"e scancellazione',
-'deletecomment'   => 'Raggióne',
+'exbeforeblank' => "'O cuntenuto apprimm' 'a ll'arrevacamento era: '$1'",
+'exblank' => "'a paggena era vacante",
+'actioncomplete' => 'Azzione fernuta',
+'deletedtext' => 'Qauccheruno ha scancellata \'a paggena "$1".  Addumannà \'o $2 pe na lista d"e ppaggene scancellate urdemamente.',
+'dellogpage' => 'Scancellazione',
+'deletionlog' => 'Log d"e scancellazione',
+'deletecomment' => 'Raggióne',
 
 # Rollback
-'rollback'   => "Ausa na revizione 'e primma",
+'rollback' => "Ausa na revizione 'e primma",
 'revertpage' => "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e  [[User:$1|$1]]",
 
 # Protect
-'prot_1movedto2'         => 'ha spustato [[$1]] a [[$2]]',
+'prot_1movedto2' => 'ha spustato [[$1]] a [[$2]]',
 'protect-expiry-options' => '2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite',
 
 # Undelete
@@ -391,45 +391,45 @@ Also see [[Special:WantedCategories|wanted categories]].",
 
 # Contributions
 'contributions' => 'Contribbute utente',
-'mycontris'     => 'Mie contribbute',
+'mycontris' => 'Mie contribbute',
 
 'sp-contributions-talk' => 'Chiàcchiera',
 
 # What links here
-'whatlinkshere'       => 'Paggene ca cullegano a chesta',
+'whatlinkshere' => 'Paggene ca cullegano a chesta',
 'whatlinkshere-title' => 'Paggene ca cullegano a $1',
-'nolinkshere'         => "Nisciuna paggena cuntene jonte ca mpuntano a '''[[:$1]]'''.",
+'nolinkshere' => "Nisciuna paggena cuntene jonte ca mpuntano a '''[[:$1]]'''.",
 
 # Block/unblock
-'blockip'            => 'Ferma utelizzatóre',
+'blockip' => 'Ferma utelizzatóre',
 'ipadressorusername' => 'Nnerizzo IP o nomme utente',
-'ipboptions'         => '2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite',
-'blockipsuccesssub'  => 'Blocco aseguito',
-'blocklink'          => 'ferma',
-'blocklogpage'       => 'Blocche',
-'blocklogentry'      => 'ha fermato "[[$1]]" pe\' nu mumento \'e $2 $3',
-'blocklogtext'       => "Chesta è 'a lista d''e azzione 'e blocco e sblocco utente.  'E nnerizze IP bloccate automaticamente nun nce so'. Addumannà 'a [[Special:BlockList|lista IP bloccate]] pp' 'a lista d''e nnerizze e nomme utente 'o ca blocco nce sta.",
+'ipboptions' => '2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite',
+'blockipsuccesssub' => 'Blocco aseguito',
+'blocklink' => 'ferma',
+'blocklogpage' => 'Blocche',
+'blocklogentry' => 'ha fermato "[[$1]]" pe\' nu mumento \'e $2 $3',
+'blocklogtext' => "Chesta è 'a lista d''e azzione 'e blocco e sblocco utente.  'E nnerizze IP bloccate automaticamente nun nce so'. Addumannà 'a [[Special:BlockList|lista IP bloccate]] pp' 'a lista d''e nnerizze e nomme utente 'o ca blocco nce sta.",
 
 # Move page
-'movearticle'             => "Spusta 'a paggena",
-'newtitle'                => 'Titulo nuovo:',
-'movepagebtn'             => "Spusta 'a paggena",
-'articleexists'           => "Na paggena cu chisto nomme asiste già, o pure 'o nomme scegliuto nun è buono.  Scegliere n'ato titulo.",
-'movedto'                 => 'spustata a',
-'movereason'              => 'Raggióne',
-'delete_and_move'         => 'Scancèlla e spusta',
+'movearticle' => "Spusta 'a paggena",
+'newtitle' => 'Titulo nuovo:',
+'movepagebtn' => "Spusta 'a paggena",
+'articleexists' => "Na paggena cu chisto nomme asiste già, o pure 'o nomme scegliuto nun è buono.  Scegliere n'ato titulo.",
+'movedto' => 'spustata a',
+'movereason' => 'Raggióne',
+'delete_and_move' => 'Scancèlla e spusta',
 'delete_and_move_confirm' => "Sì, suprascrivi 'a paggena asistente",
 
 # Export
 'export' => "Spurta 'e ppaggene",
 
 # Namespace 8 related
-'allmessages'        => "'Mmasciate d''o sistema",
-'allmessagesname'    => 'Nomme',
+'allmessages' => "'Mmasciate d''o sistema",
+'allmessagesname' => 'Nomme',
 'allmessagescurrent' => "Testo 'e mo",
 
 # Special:Import
-'import'                  => 'Mpurta paggene',
+'import' => 'Mpurta paggene',
 'import-interwiki-submit' => 'Mpurta',
 
 # Import log
@@ -438,8 +438,8 @@ Also see [[Special:WantedCategories|wanted categories]].",
 # Tooltip help for the actions
 'tooltip-pt-logout' => 'Jésce (logout)',
 'tooltip-minoredit' => 'Rénne chìsto cagnamiénto cchiù ppiccirìllo.',
-'tooltip-save'      => "Sàrva 'e cagnamiénte.",
-'tooltip-preview'   => "Primma 'e sarvà, vìre primma chille ca hê cagnàte!",
+'tooltip-save' => "Sàrva 'e cagnamiénte.",
+'tooltip-preview' => "Primma 'e sarvà, vìre primma chille ca hê cagnàte!",
 
 # Attribution
 'others' => 'ate',
@@ -450,10 +450,10 @@ Also see [[Special:WantedCategories|wanted categories]].",
 
 'exif-xyresolution-i' => '$1 punte pe pollice (dpi)',
 
-'exif-meteringmode-0'   => 'Scanusciuto',
+'exif-meteringmode-0' => 'Scanusciuto',
 'exif-meteringmode-255' => 'Ato',
 
-'exif-lightsource-0'  => 'Scanusciuta',
+'exif-lightsource-0' => 'Scanusciuta',
 'exif-lightsource-10' => "'Ntruvulato",
 'exif-lightsource-11' => 'Aumbruso',
 
@@ -469,14 +469,14 @@ Also see [[Special:WantedCategories|wanted categories]].",
 
 # E-mail address confirmation
 'confirmemail_needlogin' => "Abbesognate $1 pe cunfirmà 'o nnerizzo 'e e-mail d''o vuosto.",
-'confirmemail_loggedin'  => "'O nnerizzo 'e e-mail è vàleto",
+'confirmemail_loggedin' => "'O nnerizzo 'e e-mail è vàleto",
 
 # Delete conflict
 'deletedwhileediting' => 'Attenziòne: quaccherùno have scancellàto chesta pàggena prìmma ca tu accuminciàste â scrìvere!',
 
 # Auto-summaries
 'autoredircomment' => 'Redirect â paggena [[$1]]',
-'autosumm-new'     => 'Paggena nuova: $1',
+'autosumm-new' => 'Paggena nuova: $1',
 
 # Special:SpecialPages
 'specialpages' => 'Paggene speciale',
index ec83973..7ed7c6f 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Norwegian Bokmål (‪norsk (bokmål)‬)
+/** 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
@@ -23,6 +23,7 @@
  * @author Haakon K
  * @author Harald Khan
  * @author Jeblad
+ * @author Jsoby
  * @author Jóna Þórunn
  * @author Kph
  * @author Kph-no
@@ -192,124 +193,124 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__INGENINNHOLDSFORTEGNELSE__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__INTETGALLERI__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__TVINGINNHOLDSFORTEGNELSE__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INNHOLDSFORTEGNELSE__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__INGENSEKSJONSREDIGERING__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'NÅVÆRENDEMÅNED', 'NÅVÆRENDEMÅNED2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'NÅVÆRENDEMÅNED1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NÅVÆRENDEMÅNEDSNAVN', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NÅVÆRENDEMÅNEDSNAVNGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NÅVÆRENDEMÅNEDSNAVNKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NÅVÆRENDEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NÅVÆRENDEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÅVÆRENDEDAGSNAVN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NÅVÆRENDEÅR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NÅVÆRENDETID', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NÅVÆRENDETIME', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALMÅNED', 'LOKALMÅNED2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALMÅNED1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALMÅNEDSNAVN', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALMÅNEDSNAVNGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALMÅNEDSNAVNKORT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALDAGSNAVN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALTID', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALTIME', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALLSIDER', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALLARTIKLER', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALLFILER', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALLBRUKERE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALLAKTIVEBRUKERE', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALLREDIGERINGER', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALLVISNINGER', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIDENAVN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIDENAVNE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAVNEROM', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAVNEROME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSJONSROM', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSJONSROME', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SUBJEKTROM', 'ARTIKKELROM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SUBJEKTROME', 'ARTIKKELROME', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'FULLTSIDENAVN', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'FULLTSIDENAVNE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNDERSIDENAVN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNDERSIDENAVNE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'GRUNNSIDENAVN', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'GRUNNSIDENAVNE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSJONSSIDENAVN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSJONSSIDENAVNE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'SUBJEKTSIDENAVN', 'ARTIKKELSIDENAVN', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'SUBJEKTSIDENAVNE', 'ARTIKKELSIDENAVNE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'høyre', 'right' ),
-       'img_left'                => array( '1', 'venstre', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       'img_center'              => array( '1', 'sentrer', 'senter', 'midtstilt', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ramme', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'rammeløs', 'ingenramme', 'frameless' ),
-       'img_page'                => array( '1', 'side=$1', 'side $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'portrett', 'portrett=$1', 'portrett_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_baseline'            => array( '1', 'grunnlinje', 'baseline' ),
-       'img_top'                 => array( '1', 'topp', 'top' ),
-       'img_middle'              => array( '1', 'midt', 'middle' ),
-       'img_bottom'              => array( '1', 'bunn', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-bunn', 'text-bottom' ),
-       'img_link'                => array( '1', 'lenke=$1', 'link=$1' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKKELSTI', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'TJENER', 'SERVER' ),
-       'servername'              => array( '0', 'TJENERNAVN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSTI', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STILSTI', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KJØNN:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__INGENTITTELKONVERTERING__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__INGENINNHOLDSKONVERTERING__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'NÅVÆRENDEUKE', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'NÅVÆRENDEUKEDAG', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALUKE', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALUKEDAG', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISJONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISJONSDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISJONSDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISJONSMÅNED', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'REVISJONSMÅNED1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'REVISJONSÅR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISJONSTIDSSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISJONSBRUKER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'FLERTALL:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'RÅ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NYSEKSJONSLENKE__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__INGENNYSEKSJONSLENKE__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'NÅVÆRENDEVERSJON', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'NÅVÆRENDETIDSSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALTTIDSSTEMPEL', 'LOCALTIMESTAMP' ),
-       'contentlanguage'         => array( '1', 'INNHOLDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SIDERINAVNEROM:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALLADMINISTRATORER', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'spesial', 'special' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FILSTI:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__SKJULTKATEGORI__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SIDESTØRRELSE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKSER__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__INGENINDEKSERING__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMMERIGRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISTOMDIRIGERING__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'BESKYTTELSESNIVÅ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'STI', 'PATH' ),
-       'url_query'               => array( '0', 'SPØRRING', 'QUERY' ),
+       'redirect'                  => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__INGENINNHOLDSFORTEGNELSE__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__INTETGALLERI__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__TVINGINNHOLDSFORTEGNELSE__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INNHOLDSFORTEGNELSE__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__INGENSEKSJONSREDIGERING__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'NÅVÆRENDEMÅNED', 'NÅVÆRENDEMÅNED2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'NÅVÆRENDEMÅNED1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NÅVÆRENDEMÅNEDSNAVN', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NÅVÆRENDEMÅNEDSNAVNGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NÅVÆRENDEMÅNEDSNAVNKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NÅVÆRENDEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NÅVÆRENDEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÅVÆRENDEDAGSNAVN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NÅVÆRENDEÅR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NÅVÆRENDETID', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NÅVÆRENDETIME', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALMÅNED', 'LOKALMÅNED2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALMÅNED1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALMÅNEDSNAVN', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALMÅNEDSNAVNGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALMÅNEDSNAVNKORT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALDAGSNAVN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALTID', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALTIME', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALLSIDER', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALLARTIKLER', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALLFILER', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALLBRUKERE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALLAKTIVEBRUKERE', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALLREDIGERINGER', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALLVISNINGER', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDENAVN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIDENAVNE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAVNEROM', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAVNEROME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSJONSROM', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSJONSROME', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SUBJEKTROM', 'ARTIKKELROM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SUBJEKTROME', 'ARTIKKELROME', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'FULLTSIDENAVN', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'FULLTSIDENAVNE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNDERSIDENAVN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNDERSIDENAVNE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'GRUNNSIDENAVN', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'GRUNNSIDENAVNE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSJONSSIDENAVN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSJONSSIDENAVNE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'SUBJEKTSIDENAVN', 'ARTIKKELSIDENAVN', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'SUBJEKTSIDENAVNE', 'ARTIKKELSIDENAVNE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'høyre', 'right' ),
+       'img_left'                  => array( '1', 'venstre', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_center'                => array( '1', 'sentrer', 'senter', 'midtstilt', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ramme', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rammeløs', 'ingenramme', 'frameless' ),
+       'img_page'                  => array( '1', 'side=$1', 'side $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'portrett', 'portrett=$1', 'portrett_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_baseline'              => array( '1', 'grunnlinje', 'baseline' ),
+       'img_top'                   => array( '1', 'topp', 'top' ),
+       'img_middle'                => array( '1', 'midt', 'middle' ),
+       'img_bottom'                => array( '1', 'bunn', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-bunn', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lenke=$1', 'link=$1' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKKELSTI', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'TJENER', 'SERVER' ),
+       'servername'                => array( '0', 'TJENERNAVN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSTI', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STILSTI', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KJØNN:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__INGENTITTELKONVERTERING__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__INGENINNHOLDSKONVERTERING__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'NÅVÆRENDEUKE', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'NÅVÆRENDEUKEDAG', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALUKE', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALUKEDAG', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISJONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISJONSDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISJONSDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISJONSMÅNED', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'REVISJONSMÅNED1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'REVISJONSÅR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISJONSTIDSSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISJONSBRUKER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'FLERTALL:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'RÅ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NYSEKSJONSLENKE__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__INGENNYSEKSJONSLENKE__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'NÅVÆRENDEVERSJON', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'NÅVÆRENDETIDSSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALTTIDSSTEMPEL', 'LOCALTIMESTAMP' ),
+       'contentlanguage'           => array( '1', 'INNHOLDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SIDERINAVNEROM:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALLADMINISTRATORER', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'spesial', 'special' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FILSTI:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__SKJULTKATEGORI__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDESTØRRELSE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKSER__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__INGENINDEKSERING__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMMERIGRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISTOMDIRIGERING__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'BESKYTTELSESNIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'STI', 'PATH' ),
+       'url_query'                 => array( '0', 'SPØRRING', 'QUERY' ),
 );
 
 $messages = array(
@@ -470,7 +471,7 @@ $messages = array(
 '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-simplesearch-preference' => 'Aktiver forenklet søkefelt (kun for drakten Vector)',
 'vector-view-create' => 'Opprett',
 'vector-view-edit' => 'Rediger',
 'vector-view-history' => 'Vis historikk',
@@ -691,9 +692,9 @@ Spørring: $2',
 'protectedpagetext' => 'Denne siden har blitt låst for redigeringer.',
 '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 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.
+'protectedinterface' => 'Denne siden fremskaffer brukergrensesnittekst for programvaren, og er låst for å hindre misbruk.',
+'editinginterface' => "'''Advarsel:''' Du redigerer en side som brukes for å fremskaffe grensesnittekst for programvaren.
+Endringer av denne siden vil påvirke hvordan grensesnittet vil se ut for andre brukere.
 For oversettelser er det best om du bruker [//translatewiki.net/wiki/Main_Page?setlang=nb 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}}-->
@@ -720,7 +721,7 @@ Administrators nærmere begrunnelse: «$3».',
 # 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 en annen bruker.
+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.
@@ -979,8 +980,8 @@ Hvis du er en uregistrert bruker og synes at du har fått irrelevante kommentare
 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>.',
+'noarticletext-nopermission' => 'Det er for tiden ingen tekst på denne siden.
+Du kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.',
 'missing-revision' => 'Revisjonen #$1 av siden med navnet "{{PAGENAME}}" eksisterer ikke.
 
 Dette skyldes som regel at en gammel historikklenke er fulgt til en side som er slettet.
@@ -1341,8 +1342,6 @@ Detaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-interwiki-caption' => 'Søsterprosjekter',
 'search-interwiki-default' => '$1-resultater:',
 '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',
@@ -1439,7 +1438,7 @@ Her er et tilfeldig tall du kan bruke: $1',
 'timezoneregion-indian' => 'Indiahavet',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillat andre å sende meg e-post',
-'prefs-searchoptions' => 'Søkealternativ',
+'prefs-searchoptions' => 'Søk',
 'prefs-namespaces' => 'Navnerom',
 'defaultns' => 'Søk ellers i disse navnerommene:',
 'default' => 'standard',
@@ -1862,7 +1861,7 @@ Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-internal' => 'En ukjent feil oppsto i filbackend «$1».',
 'backend-fail-contenttype' => 'Kunne ikke avgjøre innholdstypen til filen som skal lagres på «$1».',
 'backend-fail-batchsize' => 'Bakgrunnsprosesseringen belastet med {{PLURAL:$1|en filoperasjon|en samling av $1 filoperasjoner}}; grensen er $2.',
-'backend-fail-usable' => 'Kunne ikke skrive fila $1 på grunn av utilstrekkelige tillatelser eller manglende mapper/beholdere.',
+'backend-fail-usable' => 'Kunne ikke lese eller skrive fila «$1» på grunn av utilstrekkelige tillatelser eller manglende mapper/beholdere.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikke koble til journaldatabasen for lagringssystemet «$1».',
@@ -1994,6 +1993,7 @@ Kanskje du vil redigere beskrivelsen på dens [$2 filbeskrivelsesside].',
 'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
 'shared-repo-from' => 'fra $1',
 'shared-repo' => 'et delt fillager',
+'upload-disallowed-here' => 'Beklageligvis kan du ikke overskrive dette bildet.',
 
 # File reversion
 'filerevert' => 'Tilbakestill $1',
@@ -2281,7 +2281,7 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou
 '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:',
-'defemailsubject' => '{{SITENAME}}-type e-post fra bruker "$1"',
+'defemailsubject' => 'E-post fra {{SITENAME}}-brukeren «$1»',
 'usermaildisabled' => 'Brukerepost deaktivert',
 'usermaildisabledtext' => 'Du kan ikke sende epost til andre brukere på denne wikien',
 'noemailtitle' => 'Ingen e-postadresse',
@@ -2464,7 +2464,7 @@ Dette er de nåværende innstillingene for siden '''$1''':",
 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 nye og uregistrerte brukere',
+'protect-level-autoconfirmed' => 'Blokker uregistrerte og nye brukere',
 'protect-level-sysop' => 'Kun administratorer',
 'protect-summary-cascade' => 'dypbeskyttelse',
 'protect-expiring' => 'utløper $1 (UTC)',
@@ -2952,7 +2952,6 @@ Lagre den på din egen datamaskin og last den opp her.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-testing',
-'javascripttest-disabled' => 'Denne funksjonen er ikke aktivert på denne wikien.',
 'javascripttest-title' => 'Kjører $1 tester',
 'javascripttest-pagetext-noframework' => 'Denne siden er reservert for å kjøre JavaScript-tester.',
 'javascripttest-pagetext-unknownframework' => 'Ukjent testerammeverk "$1".',
@@ -3104,10 +3103,10 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-authors' => 'Totalt antall forskjellige forfattere',
 'pageinfo-recent-edits' => 'Antall nylige redigeringer (innen siste $1)',
 'pageinfo-recent-authors' => 'Antall nylige forfattere',
-'pageinfo-restriction' => 'Sidebeskyttelse (<code>$1</code>)',
 '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-toolboxlink' => 'Sideinformasjon',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3159,7 +3158,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 '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}}',
 'file-nohires' => 'Ingen høyere oppløsning tilgjengelig.',
-'svg-long-desc' => 'SVG-fil, standardoppløsning $1 × $2 piksler, filstørrelse: $3',
+'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',
 '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.',
@@ -3169,6 +3169,8 @@ Ved å åpne den kan systemet ditt kompromitteres.",
 'file-info-png-looped' => 'loopet',
 'file-info-png-repeat' => 'avspilt $1 {{PLURAL:$1|gang|ganger}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bilde|bilder}}',
+'file-no-thumb-animation' => "'''Merk: På grunn av tekniske begrensninger vil ikke miniatyrbilder av denne filen bli animert.'''",
+'file-no-thumb-animation-gif' => "'''Merk: På grunn av tekniske begrensninger vil ikke miniatyrbilder av høyoppløselige GIF-bilder, slik som denne, bli animert.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri over nye filer',
@@ -3679,6 +3681,7 @@ Denne bekreftelseskoden går ut på dato $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-transkludering er slått av]',
 'scarytranscludefailed' => '[Malen kunne ikke hentes for $1]',
+'scarytranscludefailed-httpstatus' => '[Henting av mal for $1 feilet: HTTP $2]',
 'scarytranscludetoolong' => '[URL-en er for lang]',
 
 # Delete conflict
@@ -3978,6 +3981,10 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'feedback-bugcheck' => 'Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]',
 'feedback-bugnew' => 'Jeg sjekket. Rapporter en ny bug.',
 
+# Search suggestions
+'searchsuggest-search' => 'Søk',
+'searchsuggest-containing' => 'inneholder …',
+
 # API errors
 'api-error-badaccess-groups' => 'Du har ikke tillatelse til å laste opp filer til denne wikien.',
 'api-error-badtoken' => 'Intern feil: Ugyldig token.',
index 2c5b1cf..a23b88a 100644 (file)
@@ -56,33 +56,33 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#wiederleiden', '#WEITERLEITUNG', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__KEENINHOLTVERTEKEN__', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__WIESINHOLTVERTEKEN__', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHOLTVERTEKEN__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__KEENÄNNERNLINK__', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTMAAND', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AKTMAANDNAAM', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'AKTDAGNAAM', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTJOHR', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTTIED', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'ARTIKELTALL', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'SIETNAAM', 'SEITENNAME', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIETNAAME', 'SEITENNAME_URL', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUUM', 'NAMENSRAUM', 'NAMESPACE' ),
-       'img_thumbnail'           => array( '1', 'duum', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'keen', 'ohne', 'none' ),
-       'img_center'              => array( '1', 'merrn', 'zentriert', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rahmt', 'gerahmt', 'framed', 'enframed', 'frame' ),
-       'sitename'                => array( '1', 'STEEDNAAM', 'PROJEKTNAME', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'STEEDURL:', 'LOKALE_URL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'STEEDURLE:', 'LOKALE_URL_C:', 'LOCALURLE:' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'redirect'                  => array( '0', '#wiederleiden', '#WEITERLEITUNG', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__KEENINHOLTVERTEKEN__', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__WIESINHOLTVERTEKEN__', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHOLTVERTEKEN__', '__INHALTSVERZEICHNIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__KEENÄNNERNLINK__', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTMAAND', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AKTMAANDNAAM', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AKTMAANDNAAMGEN', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'AKTDAG', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'AKTDAGNAAM', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTJOHR', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTTIED', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'ARTIKELTALL', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'SIETNAAM', 'SEITENNAME', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIETNAAME', 'SEITENNAME_URL', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUUM', 'NAMENSRAUM', 'NAMESPACE' ),
+       'img_thumbnail'             => array( '1', 'duum', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'keen', 'ohne', 'none' ),
+       'img_center'                => array( '1', 'merrn', 'zentriert', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rahmt', 'gerahmt', 'framed', 'enframed', 'frame' ),
+       'sitename'                  => array( '1', 'STEEDNAAM', 'PROJEKTNAME', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'STEEDURL:', 'LOKALE_URL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'STEEDURLE:', 'LOKALE_URL_C:', 'LOCALURLE:' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
 );
 
 
@@ -606,7 +606,7 @@ As Grund is angeven: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Du büst nu afmellt.'''
 
-Du kannst {{SITENAME}} nu anonym wiederbruken oder di ünner dissen oder en annern Brukernaam wedder [[Special:UserLogin|anmellen]].
+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.
@@ -809,7 +809,7 @@ Wenn du en anonymen Bruker büst un meenst, dat disse Kommentaren nich an di ric
 oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse Sied ännern]</span>.',
 'noarticletext-nopermission' => 'Disse Sied hett opstunns keen Text.
 Du kannst in annere Sieden [[Special:Search/{{PAGENAME}}|na dissen Titel söken]]
-oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in de Logböker söken]</span>.',
+oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in de Logböker söken]</span>, man du hest nich dat Recht, de Sied optostellen.',
 'userpage-userdoesnotexist' => 'Dat Brukerkonto „<nowiki>$1</nowiki>“ gifft dat noch nich. Överlegg, wat du disse Siet würklich nee opstellen/ännern wullt.',
 'userpage-userdoesnotexist-view' => 'Dat Brukerkonto „$1“ gifft dat nich.',
 'blocked-notice-logextract' => 'Disse Bruker is opstunns sperrt.
@@ -827,7 +827,7 @@ De jüngste Indrag in dat Sperr-Logbook wart ünnen wiest:',
 'userinvalidcssjstitle' => "'''Wohrschau:''' Dat gifft keen Skin „$1“. Denk dor an, dat .css- un .js-Sieden  för Brukers mit en lütten Bookstaven anfangen mööt, to’n Bispeel ''{{ns:user}}:Brukernaam/vector.css'' un nich ''{{ns:user}}:Brukernaam/Vector.css''.",
 'updated' => '(Ännert)',
 'note' => "'''Wohrschau:'''",
-'previewnote' => "'''Dit is blots en Vörschau, de Siet is noch nich spiekert!'''",
+'previewnote' => "Dit is bloots en Vörschau, de Sied is noch nich spiekert!'''",
 'previewconflict' => 'Disse Vörschau wiest den Inholt vun dat Textfeld baven; so warrt de Siet utseihn, wenn du nu spiekerst.',
 'session_fail_preview' => "'''Deit uns leed! Wi kunnen dien Ännern nich spiekern. Diene Sitzungsdaten weren weg.
 Versöök dat noch wedder. Wenn dat noch jümmer nich geiht, denn versöök di [[Special:UserLogout|aftomellen]] un denn wedder antomellen.'''",
@@ -927,9 +927,7 @@ De Grund weer: ''$2''",
 'currentrev' => 'Aktuelle Version',
 'currentrev-asof' => 'Aktuelle Version vun’n $1',
 'revisionasof' => 'Version vun $1',
-'revision-info' => '<div id="viewingold-warning" style="background: #ffbdbd; border: 1px solid #BB7979; font-weight: bold; padding: .5em 1em;">
-Dit is en ole Version vun disse Siet, so as $2 de $1 ännert hett. De Version kann temlich stark vun de <a href="{{FULLURL:{{FULLPAGENAME}}}}" title="{{FULLPAGENAME}}">aktuelle Version</a> afwieken.
-</div>',
+'revision-info' => "Verschoon vun'n $4, Klock $5 vun $2",
 'previousrevision' => 'Nächstöllere Version→',
 'nextrevision' => 'Ne’ere Version →',
 'currentrevisionlink' => 'aktuelle Version',
@@ -1055,7 +1053,7 @@ Seh to, dat de Versionsgeschicht vun’n Artikel vun de Historie her bi de Reeg
 'mergelogpagetext' => 'Dit is dat Logbook över de tohoopföhrten Versionshistorien.',
 
 # Diffs
-'history-title' => 'Versionshistorie vun „$1“',
+'history-title' => 'Verschoonsgeschicht vun „$1“',
 'lineno' => 'Reeg $1:',
 'compareselectedversions' => 'Ünnerscheed twischen den utwählten Versionen wiesen',
 'showhideselectedversions' => 'Utwählt Versionen wiesen/versteken',
@@ -1104,8 +1102,6 @@ Seh to, dat de Versionsgeschicht vun’n Artikel vun de Historie her bi de Reeg
 'search-interwiki-caption' => 'Süsterprojekten',
 'search-interwiki-default' => '$1 Resultaten:',
 'search-interwiki-more' => '(mehr)',
-'search-mwsuggest-enabled' => 'mit Vörslääg',
-'search-mwsuggest-disabled' => 'kene Vörslääg',
 'search-relatedarticle' => 'Verwandt',
 'mwsuggest-disable' => 'Vörslääg per Ajax utstellen',
 'searcheverything-enable' => 'In all Naamrüüm söken',
@@ -1565,7 +1561,7 @@ Kann angahn, dat dat beter geiht, wenn du dat to en Tiet versöchst, to de op de
 'filehist-filesize' => 'Dateigrött',
 'filehist-comment' => 'Kommentar',
 'filehist-missing' => 'Datei fehlt',
-'imagelinks' => 'Dateiverwiesen',
+'imagelinks' => 'Dateibruuk',
 'linkstoimage' => 'Disse {{PLURAL:$1|Sied|Sieden}} bruukt dit Bild:',
 'linkstoimage-more' => 'Mehr as {{PLURAL:$1|ene Sied|$1 Sieden}} wiest na disse Datei.
 Disse List wiest blot {{PLURAL:$1|den eersten Lenk|de eersten $1 Lenken}} op disse Datei.
@@ -1726,7 +1722,7 @@ to den vun den tweeten Wiederleiden wiest warrt, un to den de eerste Wiederleide
 'listusers-editsonly' => 'Blot Brukers mit Bidrääg wiesen',
 'listusers-creationsort' => 'Na Opstelldatum sorteren',
 'usereditcount' => '$1 {{PLURAL:$1|Ännern|Ännern}}',
-'usercreated' => 'Opstellt an’n $1 üm $2',
+'usercreated' => "{{GENDER:$3|Opstellt}} an'n $1 üm Klock $2",
 'newpages' => 'Ne’e Sieden',
 'newpages-username' => 'Brukernaam:',
 'ancientpages' => 'Öllste Sieden',
index c4fd173..a416c5c 100644 (file)
@@ -74,139 +74,139 @@ $bookstoreList = array(
 
 #!!# Translation <b>HLEERSTE:</b> is used more than once for <a href="#mw-sp-magic-lcfirst">lcfirst</a> and <a href="#mw-sp-magic-ucfirst">ucfirst</a>.
 $magicWords = array(
-       'redirect'                => array( '0', '#DEURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GIENGALLERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GIENKOPJEN__', '__GEENKOP__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'DISSEMAONDAOFK', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DISSEDAG', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DISSEDAG2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DISSEDAGNAAM', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DITJAOR', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DISSETIED', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DITURE', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALEMAOND', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALEMAOND1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALEMAONDNAAM', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALEMAONDNAAMGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALEMAONDAOFK', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALEDAG', 'PLAATSELIJKEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALEDAG2', 'PLAATSELIJKEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALEDAGNAAM', 'PLAATSELIJKEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKAALJAOR', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALETIED', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKAALURE', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALPAGINAS', 'ANTALPAGINA\'S', 'ANTALPAGINA’S', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALARTIKELS', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALBESTANDEN', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAAMRUUMTEE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'OVERLEGRUUMTE', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'OVERLEGRUUMTEE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ONDERWARPRUUMTE', 'ARTIKELRUUMTE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ONDERWARPRUUMTEE', 'ARTIKELRUUMTEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'HELEPAGINANAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'HELEPAGINANAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'BAOSISPAGINANAAM', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'BAOSISPAGINANAAME', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ONDERWARPPAGINANAAM', 'ARTIKELPAGINANAAM', 'ONDERWERPPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ONDERWARPPAGINANAAME', 'ARTIKELPAGINANAAME', 'ONDERWERPPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'BERICHT:', 'MSG:' ),
-       'subst'                   => array( '0', 'VERVANG:', 'VERV:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'BERICHTNW', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatuur', 'duumnegel', 'doemnaegel', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatuur=$1', 'duumnegel=$1', 'doemnaegel=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'gien', 'geen', 'none' ),
-       'img_center'              => array( '1', 'esentreerd', 'gecentreerd', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'umraand', 'omkaderd', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kaoderloos', 'kaderloos', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina_$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'raand', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grondliende', 'grondlijn', 'baseline' ),
-       'img_top'                 => array( '1', 'boven', 'top' ),
-       'img_text_top'            => array( '1', 'tekste-boven', 'tekst-boven', 'text-top' ),
-       'img_middle'              => array( '1', 'midden', 'middle' ),
-       'img_bottom'              => array( '1', 'benejen', 'beneden', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                => array( '1', 'verwiezing=$', 'verwijzing=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALEURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTPAD', 'SCRIPTPAD', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STIELPAD', 'STIJLPAD', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKA:', 'GRAMMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESLACHTE:', 'GESLACHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__GIENTITELKONVERSIE__', '__GIENTC__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__GEENPAGINANAAMCONVERSIE__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'DISSEWEKE', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DISSEDVDW', 'HUIDIGEDVDW', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALEWEKE', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALEDVDW', 'PLAATSELIJKEDVDW', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIEID', 'REVISIE-ID', 'VERSIEID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIEDAG', 'VERSIEDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIEDAG2', 'VERSIEDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVISIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'MEERVOUD:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KL:', 'LC:' ),
-       'uc'                      => array( '0', 'HL:', 'UC:' ),
-       'raw'                     => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLKODEREN', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERKODEREN', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'DISSETIEDSTEMPEL', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALETIEDSTEMPEL', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASINNAAMRUUMTE', 'PAGINA’SINNAAMRUUMTE', 'PAGINA\'SINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALBEHEERDERS', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
-       'padright'                => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'spesiaal', 'speciaal', 'special' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING:', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'BESTAANDSPAD:', 'BESTANDSPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'label', 'tag' ),
-       'hiddencat'               => array( '1', '__VERBÖRGENKAT__', '__VERBORGENCAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASINKATEGORIE', 'PAGINASINKAT', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__GIENINDEX__', '__GEENINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ANTALINGROEP', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STAOTIESEDEURVERWIEZING__', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'BEVEILIGINGSNIVO', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'daotumopmaak', 'datumopmaak', 'formatdate', 'dateformat' ),
-       'url_query'               => array( '0', 'ZEUKOPDRACHTE', 'ZOEKOPDRACHT', 'QUERY' ),
+       'redirect'                  => array( '0', '#DEURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GIENGALLERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GIENKOPJEN__', '__GEENKOP__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'DISSEMAONDAOFK', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DISSEDAG', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DISSEDAG2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DISSEDAGNAAM', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DITJAOR', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DISSETIED', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DITURE', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALEMAOND', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALEMAOND1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALEMAONDNAAM', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALEMAONDNAAMGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALEMAONDAOFK', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALEDAG', 'PLAATSELIJKEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALEDAG2', 'PLAATSELIJKEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALEDAGNAAM', 'PLAATSELIJKEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKAALJAOR', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALETIED', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKAALURE', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALPAGINAS', 'ANTALPAGINA\'S', 'ANTALPAGINA’S', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALARTIKELS', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALBESTANDEN', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAAMRUUMTEE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'OVERLEGRUUMTE', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'OVERLEGRUUMTEE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ONDERWARPRUUMTE', 'ARTIKELRUUMTE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ONDERWARPRUUMTEE', 'ARTIKELRUUMTEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'HELEPAGINANAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HELEPAGINANAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'BAOSISPAGINANAAM', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'BAOSISPAGINANAAME', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ONDERWARPPAGINANAAM', 'ARTIKELPAGINANAAM', 'ONDERWERPPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ONDERWARPPAGINANAAME', 'ARTIKELPAGINANAAME', 'ONDERWERPPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'BERICHT:', 'MSG:' ),
+       'subst'                     => array( '0', 'VERVANG:', 'VERV:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'BERICHTNW', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatuur', 'duumnegel', 'doemnaegel', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatuur=$1', 'duumnegel=$1', 'doemnaegel=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'gien', 'geen', 'none' ),
+       'img_center'                => array( '1', 'esentreerd', 'gecentreerd', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'umraand', 'omkaderd', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kaoderloos', 'kaderloos', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'raand', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grondliende', 'grondlijn', 'baseline' ),
+       'img_top'                   => array( '1', 'boven', 'top' ),
+       'img_text_top'              => array( '1', 'tekste-boven', 'tekst-boven', 'text-top' ),
+       'img_middle'                => array( '1', 'midden', 'middle' ),
+       'img_bottom'                => array( '1', 'benejen', 'beneden', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verwiezing=$', 'verwijzing=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTPAD', 'SCRIPTPAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STIELPAD', 'STIJLPAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKA:', 'GRAMMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESLACHTE:', 'GESLACHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__GIENTITELKONVERSIE__', '__GIENTC__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__GEENPAGINANAAMCONVERSIE__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'DISSEWEKE', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DISSEDVDW', 'HUIDIGEDVDW', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALEWEKE', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALEDVDW', 'PLAATSELIJKEDVDW', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIEID', 'REVISIE-ID', 'VERSIEID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIEDAG', 'VERSIEDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIEDAG2', 'VERSIEDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVISIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KL:', 'LC:' ),
+       'uc'                        => array( '0', 'HL:', 'UC:' ),
+       'raw'                       => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODEREN', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERKODEREN', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'DISSETIEDSTEMPEL', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALETIEDSTEMPEL', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASINNAAMRUUMTE', 'PAGINA’SINNAAMRUUMTE', 'PAGINA\'SINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALBEHEERDERS', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'spesiaal', 'speciaal', 'special' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING:', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'BESTAANDSPAD:', 'BESTANDSPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'label', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERBÖRGENKAT__', '__VERBORGENCAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASINKATEGORIE', 'PAGINASINKAT', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__GIENINDEX__', '__GEENINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ANTALINGROEP', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STAOTIESEDEURVERWIEZING__', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'BEVEILIGINGSNIVO', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'daotumopmaak', 'datumopmaak', 'formatdate', 'dateformat' ),
+       'url_query'                 => array( '0', 'ZEUKOPDRACHTE', 'ZOEKOPDRACHT', 'QUERY' ),
 );
 
 $specialPageAliases = array(
@@ -319,7 +319,7 @@ $messages = array(
 'tog-numberheadings' => 'Koppen vanzelf nummeren',
 'tog-showtoolbar' => 'Laot de warkbalke zien',
 'tog-editondblclick' => 'Mit dubbelklik bewarken (JavaScript)',
-'tog-editsection' => 'Mit bewarkgedeeltes',
+'tog-editsection' => 'Mit bewarkgedeelten',
 'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)',
 'tog-showtoc' => 'Samenvatting laoten zien van de zaken die an bod koemen (mit meer as dree onderwarpen)',
 'tog-rememberpassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
@@ -433,8 +433,8 @@ $messages = array(
 'category-file-count' => 'In disse kategorie {{PLURAL:$2|steet t volgende bestaand|staon de volgende $1 bestaanden, van in totaal $2}}.',
 'category-file-count-limited' => 'In disse kategorie {{PLURAL:$1|steet t volgende bestaand|staon de volgende $1 bestaanden}}.',
 'listingcontinuesabbrev' => '(vervolg)',
-'index-category' => 'Spul wat al indexeerd is',
-'noindex-category' => 'Spul wat nog niet indexeerd is',
+'index-category' => 'Te indexeren ziejen',
+'noindex-category' => 'Niet te indexeren ziejen',
 'broken-file-category' => 'Ziejen mit verkeerde bestaandsverwiezingen',
 
 'about' => 'Informasie',
@@ -572,6 +572,10 @@ $1",
 'youhavenewmessages' => 'Je hebben $1 ($2).',
 'newmessageslink' => 'nieje berichten',
 'newmessagesdifflink' => 'verschil mit de veurige versie',
+'youhavenewmessagesfromusers' => 'Je hebben $1 van {{PLURAL:$3|n aandere gebruker|$3 gebrukers}} ($2).',
+'youhavenewmessagesmanyusers' => 'Je hebben $1 van n bulte gebrukers ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|n niej bericht|nieje berichten}}',
+'newmessagesdifflinkplural' => 'leste {{PLURAL:$1|wieziging|wiezigingen}}',
 'youhavenewmessagesmulti' => 'Je hebben nieje berichten op $1',
 'editsection' => 'bewark',
 'editold' => 'bewark',
@@ -628,9 +632,9 @@ De oorzake hiervan kan dujen op n fout in de programmatuur.
 Der is n syntaxisfout in t databankeverzeuk op-etrejen.
 t Kan ween dat der n fout in de programmatuur zit.
 De leste zeukpoging in de databanke was:
-<blockquote><tt>$1</tt></blockquote>
-vanuut de funksie "<tt>$2</tt>".
-De databanke gaf de volgende foutmelding "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+vanuut de funksie "<code>$2</code>".
+De databanke gaf de volgende foutmelding "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Der is n syntaxisfout in t databankeverzeuk op-etrejen.
 t Leste veurzeuk an de databanke was:
 "$1"
@@ -682,8 +686,9 @@ Zeukopdrachte: $2',
 'protectedpagetext' => 'Disse zied is beveiligd um bewarkingen te veurkoemen.',
 'viewsourcetext' => 'Je kunnen de brontekste van disse zied bewarken en bekieken:',
 'viewyourtext' => "Je kunnen '''joew bewarkingen''' an de brontekste van disse zied bekieken en kopiëren:",
-'protectedinterface' => 'Op disse zied steet n tekste die gebruukt wörden veur systeemteksten van de wiki. Allinnig beheerders kunnen disse zied bewarken.',
-'editinginterface' => "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Overweeg veur vertalingen um [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net] te gebruken, t vertalingsprojekt veur MediaWiki.",
+'protectedinterface' => "Op disse zied steet tekste die gebruukt wörden veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.
+Um vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [//translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
+'editinginterface' => "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Um vertalingen derbie te zetten of te wiezigen veur alle wiki's, gebruuk [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net], t vertalingsprojekt veur MediaWiki.",
 'sqlhidden' => '(SQL-zeukopdrachte verbörgen)',
 'cascadeprotected' => 'Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de "kaskade"-opsie:
 $2',
@@ -709,7 +714,7 @@ De beheerder gaf hierveur de volgende reden: "$3".',
 # Login and logout pages
 'logouttext' => "'''Je bin noen aofemeld.'''
 
-Je kunnen {{SITENAME}} noen anoniem gebruken of je eigen [[Special:UserLogin|opniej anmelden]] onder disse of n aandere gebrukersnaam.
+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.
@@ -720,6 +725,7 @@ Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te ste
 'remembermypassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
 'securelogin-stick-https' => "Verbunnen blieven via HTTPS naoda'j an-emeld bin",
 'yourdomainname' => 'Joew domein',
+'password-change-forbidden' => 'Je kunnen joew wachtwoord niet wiezigen op disse wiki.',
 'externaldberror' => 'Der gung iets fout bie de externe authentisering, of je maggen je gebrukersprofiel niet bewarken.',
 'login' => 'Anmelden',
 'nav-login-createaccount' => 'Anmelden',
@@ -964,7 +970,11 @@ Je kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere ziejen,
 of [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse zied bewarken]</span>.',
 'noarticletext-nopermission' => 'Op disse zied steet gien tekste.
 Je kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere ziejen of
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>, mer je hebben gien rechten um disse zied an te maken.',
+'missing-revision' => 'De versie #$1 van de zied "{{PAGENAME}} besteet niet.
+
+Dit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.
+Waorschienlik ku\'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].',
 'userpage-userdoesnotexist' => 'Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker "<nowiki>$1</nowiki>"). Kiek effen nao o\'j disse zied wel anmaken/bewarken willen.',
 'userpage-userdoesnotexist-view' => 'Gebruker "$1" steet hier niet in-eschreven',
 'blocked-notice-logextract' => 'Disse gebruker is op t moment eblokkeerd.
@@ -973,7 +983,6 @@ De leste regel uut t blokkeerlogboek steet hieronder as referensie:',
 *'''Firefox / Safari:''' drok op ''Shift'' terwiel je op ''verniejen'' klikken, of gebruuk ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-R'' op n knipperkiste van Mac)
 * '''Google Chrome:''' drok op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op n knipperkiste van Mac)
 *'''Internet Explorer:''' drok op ''Ctrl'' terwiel je op ''verniejen'' klikken of drok op ''Ctrl-F5''
-*'''Konqueror: '''klik op ''verniejen'' of drok op ''F5''
 *'''Opera:''' leeg t tussengeheugen in ''Extra → Voorkeuren\"",
 'usercssyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
 'userjsyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
@@ -1088,6 +1097,7 @@ Sommigen mallen wörden niet in-evoegd.',
 'expansion-depth-exceeded-warning' => 'Op disse zied staon te veule mallen',
 'parser-unstrip-loop-warning' => 'Der is n "unstrip"-lusse evunnen',
 'parser-unstrip-recursion-limit' => 'De rekursielimiet ($1) veur "unstrip" is overschrejen',
+'converter-manual-rule-error' => 'Der is n fout evunnen in n haandmaotig in-evoegden taalkonversieregel.',
 
 # "Undo" feature
 'undo-success' => 'De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de zied op um de bewarking weerumme te dreien.',
@@ -1218,7 +1228,8 @@ Kiek de logboeken nao.',
 'revdelete-only-restricted' => 'Der is n fout op-etrejen bie t verbargen van t objekt van $1, $2: je kunnen gien objekten onderdrokken uut t zich van beheerders zonder oek n van de aandere zichtbaorheidsopsies te selekteren.',
 'revdelete-reason-dropdown' => '*Veulveurkoemde redens veur t vortdoon
 ** Schenden van de auteursrechten
-** Ongeschikte persoonlike informasie
+** Ongepast kommentaar of ongepaste persoonlike informasie
+** Ongepaste gebrukersnaam
 ** Meugelik lasterlike informasie',
 'revdelete-otherreason' => 'Aandere reden:',
 'revdelete-reasonotherlist' => 'Aandere reden',
@@ -1269,6 +1280,10 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'editundo' => 'weerummedreien',
 'diff-multi' => '(Hier {{PLURAL:$1|zit nog 1 versie|zitten nog $1 versies}} van {{PLURAL:$2|1 gebruker|$2 gebrukers}} tussen die der niet bie staon.)',
 'diff-multi-manyusers' => '($1 tussenliggende {{PLURAL:$1|versie|versies}} deur meer as $2 {{PLURAL:$2|gebruker|gebrukers}} niet weeregeven)',
+'difference-missing-revision' => "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.
+
+Dit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.
+Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
 
 # Search results
 'searchresults' => 'Zeukresultaoten',
@@ -1311,8 +1326,6 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'search-interwiki-caption' => 'Zusterprojekten',
 'search-interwiki-default' => '$1 resultaoten:',
 'search-interwiki-more' => '(meer)',
-'search-mwsuggest-enabled' => 'mit anbevelingen',
-'search-mwsuggest-disabled' => 'gien anbevelingen',
 'search-relatedarticle' => 'Verwaant',
 'mwsuggest-disable' => 'Anbevelingen via AJAX uutschakelen',
 'searcheverything-enable' => 'In alle naamruumten zeuken',
@@ -1626,7 +1639,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'recentchanges-label-minor' => 'Dit is n kleine wieziging',
 'recentchanges-label-bot' => 'Disse bewarking is uutevoerd deur n bot',
 'recentchanges-label-unpatrolled' => 'Disse bewarking is nog niet nao-ekeken',
-'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (stand: $5, $4).",
+'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofgeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (per: $5, $4).",
 'rcnotefrom' => 'Dit bin de wiezigingen sinds <b>$2</b> (maximum van <b>$1</b> wiezigingen).',
 'rclistfrom' => 'Bekiek wiezigingen vanaof $1',
 'rcshowhideminor' => '$1 kleine wiezigingen',
@@ -1635,7 +1648,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'rcshowhideanons' => '$1 anonieme gebrukers',
 'rcshowhidepatr' => '$1 nao-ekeken bewarkingen',
 'rcshowhidemine' => '$1 mien bewarkingen',
-'rclinks' => 'Bekiek de leste $1 wiezigingen van de aofeleupen $2 dagen<br />$3',
+'rclinks' => 'Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3',
 'diff' => 'wiezig',
 'hist' => 'gesch',
 'hide' => 'verbarg',
@@ -1682,7 +1695,7 @@ Bestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smie
 
 Um t bestaand in te voegen in n zied ku'j één van de volgende kodes gebruken:
 * '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''
-* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternetieve tekste]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''
 * '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
 'upload-permitted' => 'Toe-estaone bestaandstypes: $1.',
 'upload-preferred' => 'An-ewezen bestaandstypes: $1.',
@@ -1822,7 +1835,7 @@ As t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/
 'backend-fail-internal' => 'Der is n onbekende fout op-etreden in t opslagbackend "$1".',
 'backend-fail-contenttype' => 'Kon t inhoudstype van t bestaand um op "$1" op te slaon niet bepaolen.',
 'backend-fail-batchsize' => 'Reeks van $1 bestaands{{PLURAL:$1|operasie|operasies}} in de opslagbackend; de limiet is $2 {{PLURAL:$2|operasie|operasies}}.',
-'backend-fail-usable' => 'Kon t bestaand $1 niet schrieven vanwegen te min rechten of niet-anwezige mappen of houwers.',
+'backend-fail-usable' => 'Kon t bestaand "$1" niet lezen of schrieven umda\'j niet genog rechten hebben of vanwegen niet-anwezige mappen of houwers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kon gien verbiending maken mit de journaaldatabanke veur t opslagbackend "$1".',
@@ -1952,6 +1965,7 @@ Je kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.',
 'uploadnewversion-linktext' => 'n Niejere versie van dit bestaand opsturen.',
 'shared-repo-from' => 'uut $1',
 'shared-repo' => 'n edeelden mediadatabanke',
+'upload-disallowed-here' => 'Je kunnen disse aofbeelding niet overschrieven.',
 
 # File reversion
 'filerevert' => '$1 weerummedreien',
@@ -2032,9 +2046,9 @@ Vergeet niet de verwiezingen nao te kieken veurda\'j de mal vortdoon.',
 
 'disambiguations' => 'Ziejen die verwiezen naor deurverwiesziejen',
 'disambiguationspage' => 'Template:Dv',
-'disambiguations-text' => "De onderstaonde ziejen verwiezen naor n '''deurverwieszied'''. Disse verwiezingen mutten eigenliks rechtstreeks verwiezen naor t juuste onderwarp.
-
-Ziejen wörden ezien as n deurverwieszied, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Hieronder staon ziejen mit tenminsten één verwiezing naor n '''deurverwieszied'''. 
+Feitelik mutten ze rechtstreeks verwiezen naor t juuste onderwarp.<br />
+Ziejen wörden ezien as n deurverwieszied, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dubbele deurverwiezingen',
 'doubleredirectstext' => 'Op disse lieste staon alle ziejen die deurverwiezen naor aandere deurverwiezingen.
@@ -2059,6 +2073,7 @@ Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zo
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorie|kategorieën}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikiverwiezing|interwikiverwiezingen}}',
 'nlinks' => '$1 {{PLURAL:$1|verwiezing|verwiezingen}}',
 'nmembers' => '$1 {{PLURAL:$1|onderwarp|onderwarpen}}',
 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}',
@@ -2087,6 +2102,7 @@ Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zo
 'mostlinkedtemplates' => 'Meestgebruukten mallen',
 'mostcategories' => 'Artikels mit de meeste kategorieën',
 'mostimages' => 'Meestgebruukten bestaanden',
+'mostinterwikis' => "Pagina's mit de meeste interwikiverwiezingen",
 'mostrevisions' => 'Artikels mit de meeste bewarkingen',
 'prefixindex' => 'Alle ziejen op veurvoegsel',
 'prefixindex-namespace' => 'Alle ziejen mit t veurvoegsel (naamruumte $1)',
@@ -2201,8 +2217,8 @@ Ondersteunde protokollen: <code>$1</code> (zet t niet in joew zeukopdrachte).',
 
 # Special:ActiveUsers
 'activeusers' => 'Aktieve gebrukers',
-'activeusers-intro' => 'Dit is n lieste van gebrukers die de aofeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewes bin.',
-'activeusers-count' => '$1 leste {{PLURAL:$1|bewarking|bewarkingen}} in de aofeleupen {{PLURAL:$3|dag|$3 dagen}}',
+'activeusers-intro' => 'Dit is n lieste van gebrukers die de aofgeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewest hebben.',
+'activeusers-count' => '$1 leste {{PLURAL:$1|bewarking|bewarkingen}} in de aofgeleupen {{PLURAL:$3|dag|$3 dagen}}',
 'activeusers-from' => 'Laot gebrukers zien vanaof:',
 'activeusers-hidebots' => 'Bots verbargen',
 'activeusers-hidesysops' => 'Beheerders verbargen',
@@ -2235,6 +2251,8 @@ Meer informasie over de rechten ku'j [[{{MediaWiki:Listgrouprights-helppage}}|hi
 'mailnologin' => 'Niet an-emeld.',
 'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en n geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse funksie te kunnen gebruken.',
 'emailuser' => 'n Bericht sturen',
+'emailuser-title-target' => 'Disse {{GENDER:$1|gebruker}} n bericht sturen',
+'emailuser-title-notarget' => 'Gebruker n bericht sturen',
 'emailpage' => 'Gebruker n bericht sturen',
 'emailpagetext' => "Deur middel van dit formulier ku'j n bericht sturen naor disse gebruker.
 t Adres da'j op-egeven hebben bie [[Special:Preferences|joew veurkeuren]] zal as aofzender gebruukt wörden.
@@ -2294,7 +2312,7 @@ Toekomstige wiezigingen op disse zied en de overlegzied zullen hier vermeld wör
 'watchmethod-list' => 'Kik joew nao volglieste veur de leste wiezigingen',
 'watchlistcontains' => 'Der {{PLURAL:$1|steet 1 zied|staon $1 ziejen}} op joew volglieste.',
 'iteminvalidname' => "Verkeerde naam '$1'",
-'wlnote' => 'Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofeleupen ure|de leste $2 uren}} vanaof $3 um $4.',
+'wlnote' => 'Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.',
 'wlshowlast' => 'Laot de veurbieje $1 uur $2 dagen $3 zien',
 'watchlist-options' => 'Opsies veur de volglieste',
 
@@ -2380,6 +2398,8 @@ Wees veurzichtig',
 'rollback' => 'Wiezigingen herstellen',
 'rollback_short' => 'Weerummedreien',
 'rollbacklink' => 'Weerummedreien',
+'rollbacklinkcount' => '{{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien',
+'rollbacklinkcount-morethan' => 'Meer as {{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien',
 'rollbackfailed' => 'Wieziging herstellen is mislokt',
 'cantrollback' => 'De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.',
 'alreadyrolled' => 'Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.
@@ -2578,7 +2598,7 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'ipbreason' => 'Reden:',
 'ipbreasonotherlist' => 'aandere reden',
 'ipbreason-dropdown' => '*Algemene redens veur t blokkeren
-** valse informasie invoeren
+** verkeerde informasie invoeren
 ** ziejen leegmaken
 ** ongewunste verwiezingen plaotsen
 ** onzinteksten schrieven
@@ -2863,6 +2883,7 @@ Alle transwiki-invoerhaandelingen wörden op-esleugen in t [[Special:Log/import|
 'import-interwiki-templates' => 'Alle mallen opnemen',
 'import-interwiki-submit' => 'Invoeren',
 'import-interwiki-namespace' => 'Doelnaamruumte:',
+'import-interwiki-rootpage' => 'Baosiszied veur doel (opsioneel):',
 'import-upload-filename' => 'Bestaandsnaam:',
 'import-comment' => 'Opmarkingen:',
 'importtext' => 'Gebruuk de [[Special:Export|uutvoerfunksie]] in de wiki waor de informasie vandaon kömp.
@@ -2898,6 +2919,9 @@ De tiedelike map is niet anwezig.',
 'import-error-interwiki' => 'De zied "$1" is niet in-evoerd umdat disse naam ereserveerd is veur externe verwiezingen (interwiki).',
 'import-error-special' => 'Zied "$1" is niet in-evoerd umdat t eplaotst is in n spesiale naamruumte waor gien ziejen in eplaotst kunnen wörden.',
 'import-error-invalid' => 'De zied" "$1" is niet in-evoerd umdat de naam ongeldig is.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|opsie|opsies}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'De op-egeven baosiszied is ongeldig.',
+'import-rootpage-nosubpage' => 'In de naamruumte "$1" van de baosiszied is t anmaken van onderziejen niet meugelik.',
 
 # Import log
 'importlogpage' => 'Invoerlogboek',
@@ -2909,7 +2933,6 @@ De tiedelike map is niet anwezig.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript testen',
-'javascripttest-disabled' => 'Disse funksie steet niet an op disse wiki.',
 'javascripttest-title' => 'Tests uutvoeren veur $1',
 'javascripttest-pagetext-noframework' => 'Disse zied is ereserveerd veur t uutvoeren van JavaScript-testen.',
 'javascripttest-pagetext-unknownframework' => 'Onbekend testraamwark "$1".',
@@ -3015,11 +3038,33 @@ Meestentieds kömp dit deur n uutgaonde verwiezing die op de zwarte lieste steet
 
 # Info page
 'pageinfo-title' => 'Informasie over "$1"',
-'pageinfo-header-edits' => 'Bewarkingen',
+'pageinfo-header-basic' => 'Baosisinformasie',
+'pageinfo-header-edits' => 'Bewarkingsgeschiedenisse',
+'pageinfo-header-restrictions' => 'Ziedbeveiliging',
+'pageinfo-header-properties' => 'Ziedeigenschappen',
+'pageinfo-display-title' => 'Weeregeven ziednaam',
+'pageinfo-default-sort' => 'Standard sorteerwieze',
+'pageinfo-length' => 'Ziedlengte (in bytes)',
+'pageinfo-article-id' => 'Zied-ID',
+'pageinfo-robot-policy' => 'Staotus veur de zeukmasine',
+'pageinfo-robot-index' => 'Indexeerbaor',
+'pageinfo-robot-noindex' => 'Niet indexeerbaor',
 'pageinfo-views' => 'Antal keer bekeken',
-'pageinfo-watchers' => 'Antal volgers',
-'pageinfo-edits' => 'Antal bewarkingen',
-'pageinfo-authors' => 'Antal verschillende auteurs',
+'pageinfo-watchers' => 'Antal ziedvolgers',
+'pageinfo-redirects-name' => 'Deurverwiezingen naor disse zied',
+'pageinfo-subpages-name' => 'Onderziejen van disse zied',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|deurverwiezing|deurverwiezingen}}; $3 {{PLURAL:$3|niet-deurverwiezing|niet-deurverwiezingen}})',
+'pageinfo-firstuser' => 'Gebruker die de zied an-emaakt hef',
+'pageinfo-firsttime' => 'Daotum waorop de zied an-emaakt is',
+'pageinfo-lastuser' => 'Leste bewarker',
+'pageinfo-lasttime' => 'Daotum van leste bewarking',
+'pageinfo-edits' => 'Totaal antal bewarkingen',
+'pageinfo-authors' => 'Totaal antal verschillende auteurs',
+'pageinfo-recent-edits' => 'Antal nieje bewarkingen (in de veurbieje $1).',
+'pageinfo-recent-authors' => 'Leste antal van verschillende auteurs',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magies woord|Magiese woorden}} ($1)',
+'pageinfo-hidden-categories' => 'Verbörgen {{PLURAL:$1|kategorie|kategorieën}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Gebruukten mal|Gebruukten mallen}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassiek',
@@ -3073,6 +3118,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|zied|ziejen}}',
 'file-nohires' => 'Gien hogere resolusie beschikbaor.',
 'svg-long-desc' => 'SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3',
+'svg-long-desc-animated' => 'Bewegend SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3',
 'show-big-image' => 'Volle resolusie',
 'show-big-image-preview' => 'Grootte van disse weergave: $1.',
 'show-big-image-other' => 'Aandere {{PLURAL:$2|resolusie|resolusies}}: $1.',
@@ -3082,6 +3128,8 @@ $1',
 'file-info-png-looped' => 'herhaolend',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} aofespeuld',
 'file-info-png-frames' => '$1 {{PLURAL:$1|beeld|beelden}}',
+'file-no-thumb-animation' => "'''Opmarking: vanwegen techniese beparkingen, zie'j bie miniaturen de boel niet bewegen.''",
+'file-no-thumb-animation-gif' => "'''Opmarking: vanwegen techniese beparkingen, zie'j bie miniaturen van GIF-aofbeeldingen mit n hoge resolusie de boel niet bewegen.''",
 
 # Special:NewFiles
 'newimages' => 'Nieje bestaanden',
@@ -3865,6 +3913,10 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'feedback-bugcheck' => 'Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.',
 'feedback-bugnew' => 'Ik heb t nao-ekeken. Meld n nieje programmafout',
 
+# Search suggestions
+'searchsuggest-search' => 'Zeuken / zuken / zuiken',
+'searchsuggest-containing' => 'bevat...',
+
 # API errors
 'api-error-badaccess-groups' => 'Je maggen gien bestaanden in disse wiki inlaojen.',
 'api-error-badtoken' => 'Interne fout: t token klopt niet.',
@@ -3881,7 +3933,7 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-file-too-large' => "t Bestaand da'j op-estuurd hebben is te groot.",
 'api-error-filename-tooshort' => 'De bestaandsnaam is te kort.',
 'api-error-filetype-banned' => 'Dit bestaandstype is niet toe-estaon.',
-'api-error-filetype-banned-type' => '{{PLURAL:$4|t Bestaandstype $1 wordt|De bestandstypes $1 worden}} niet toegelaten. {{PLURAL:$3|t Toe-estaone bestaandstype is|De toe-estaone bestaandstypen bin}} $2.',
+'api-error-filetype-banned-type' => '{{PLURAL:$4|t Bestaandstype $1|De bestaandstypes $1}} wörden niet toe-eleuten. {{PLURAL:$3|t Toe-estaone bestaandstype is|De toe-estaone bestaandstypen bin}} $2.',
 'api-error-filetype-missing' => 't Bestaand hef gien extensie.',
 'api-error-hookaborted' => "De wieziging die'j proberen deur te voeren is aofebreuken deur n extra uutbreiding.",
 'api-error-http' => 'Interne fout: der kon gien verbiending emaakt wörden mit de server.',
index 30b0d2b..f93fabb 100644 (file)
@@ -457,7 +457,7 @@ $2',
 
 # Login and logout pages
 'logouttext' => "'''तपाईं अहिले बाहिर निस्कनु भएको छ।'''
-तपाईंले नाम/खाताविनै पनि {{SITENAME}}मा प्रयोग गर्न सक्नुहुन्छ, अथवा अघिकै वा अर्कै कुनै नामको खाताबाट [[Special:UserLogin|फेरि प्रवेश गर्न]] पनि सक्नुहुन्छ।
+तपाईंले नाम/खाताविनै पनि {{SITENAME}}मा प्रयोग गर्न सक्नुहुन्छ, अथवा अघिकै वा अर्कै कुनै नामको खाताबाट <span class='plainlinks'>[$1 फेरि प्रवेश गर्न]</span> पनि सक्नुहुन्छ।
 याद राख्नुहोस् तपाईंले ब्राउजरको स्मरण भण्डार खालि नगर्दासम्म कुनै पृष्ठहरूमा तपाईं अझै प्रवेश गरिराखेको देखाउन सक्छ।",
 'welcomecreation' => '== स्वागतम् , $1! ==
 तपाँईको खाता खोलिएको छ। [[Special:Preferences|{{SITENAME}} preferences]]मा आफ्ना अभिरुचिहरू परिवर्तन गर्न नबिर्सिनुहोला।',
@@ -1041,8 +1041,6 @@ $1",
 'search-interwiki-caption' => 'भगिनी आयोजना',
 'search-interwiki-default' => '$1 नतिजाहरु:',
 'search-interwiki-more' => '(अझै)',
-'search-mwsuggest-enabled' => 'सुझाव सहितको',
-'search-mwsuggest-disabled' => 'सुझाव बाहेकको',
 'search-relatedarticle' => 'सम्बन्धित',
 'mwsuggest-disable' => 'AJAX सुझाव निस्क्रिय पार्नुहोस्',
 'searcheverything-enable' => 'सबै नेमस्पेसेजहरुमा खोज्नुहोस्',
@@ -1302,7 +1300,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'right-userrights' => 'प्रयोगकर्ताका अधिकारहरु सम्पादन गर्ने',
 'right-userrights-interwiki' => 'अरु विकिहरुमा प्रयोगकर्ताहरुको अधिकार सम्पादन गर्ने',
 'right-siteadmin' => 'डेटाबेसको ताल्चामार्ने र ताल्चाखोल्ने',
-'right-override-export-depth' => 'गहिराइ ५ सम्मको लिंकगरिएका पृष्ठहरु सहित निर्यात गर्ने',
+'right-override-export-depth' => 'गहिराइ ५ सम्मको लिंक गरिएका पृष्ठहरु सहित निर्यात गर्ने',
 'right-sendemail' => 'अन्य प्रयोगकर्ताहरुलाई इमेल गर्ने',
 'right-passwordreset' => 'पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस',
 
index 715a509..d9cd17d 100644 (file)
@@ -43,304 +43,303 @@ $digitTransformTable = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'लिङ्कतेत अन्दरलाइन यानादिसँ:',
-'tog-justify'                 => 'अनुच्छेद धंकादिसँ',
-'tog-hideminor'               => 'न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ',
-'tog-extendwatchlist'         => 'वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ',
-'tog-usenewrc'                => 'एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)',
-'tog-numberheadings'          => 'अटो-ल्याखँ हेडिङ',
-'tog-showtoolbar'             => 'सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)',
-'tog-editondblclick'          => 'दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)',
-'tog-editsection'             => '[सम्पादन] लिङ्कं सेक्सन सम्पादन यायेज्युगु यानादिसँ',
+'tog-underline' => 'लिङ्कतेत अन्दरलाइन यानादिसँ:',
+'tog-justify' => 'अनुच्छेद धंकादिसँ',
+'tog-hideminor' => 'न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ',
+'tog-extendwatchlist' => 'वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ',
+'tog-usenewrc' => 'एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)',
+'tog-numberheadings' => 'अटो-ल्याखँ हेडिङ',
+'tog-showtoolbar' => 'सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)',
+'tog-editondblclick' => 'दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)',
+'tog-editsection' => '[सम्पादन] लिङ्कं सेक्सन सम्पादन यायेज्युगु यानादिसँ',
 'tog-editsectiononrightclick' => 'सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)',
-'tog-showtoc'                 => 'कन्टेण्टया धलः क्यनादिसँ (३गु स्वया अप्व शिर्षक दुगु पौया निंति)',
-'tog-rememberpassword'        => 'जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations'          => 'जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ',
-'tog-watchdefault'            => 'जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ',
-'tog-watchmoves'              => 'जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ',
-'tog-watchdeletion'           => 'जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ',
-'tog-minordefault'            => 'सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ',
-'tog-previewontop'            => 'सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
-'tog-previewonfirst'          => 'न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
-'tog-nocache'                 => 'पौ क्याशिङ (caching) डिजेबल यानादिसँ',
-'tog-enotifwatchlistpages'    => 'जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
-'tog-enotifusertalkpages'     => 'जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
-'tog-enotifminoredits'        => 'पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ',
-'tog-enotifrevealaddr'        => 'जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ',
-'tog-shownumberswatching'     => 'स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ',
-'tog-fancysig'                => 'कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)',
-'tog-externaleditor'          => 'डिफल्टं एक्स्टर्नल एडिटर छ्यलादिसँ (एक्स्पर्टतेगु निंतिं जक्क, छिगु कम्प्युटरय् विषेश सेटिङ माः)',
-'tog-externaldiff'            => 'एक्स्टर्नल डिफ् (diff) डिफल्टं छ्यलादिसँ (एक्स्पर्टतेगु निंतिं जक्क, छिगु कम्प्युटरय् विषेश सेटिङ माः)',
-'tog-showjumplinks'           => '"जम्प टु" एसिसिबिलिटी लिङ्क इनेबल यानादिसँ',
-'tog-uselivepreview'          => 'लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)',
-'tog-forceeditsummary'        => 'सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ',
-'tog-watchlisthideown'        => 'जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ',
-'tog-watchlisthidebots'       => 'वाचलिस्टं बोत सम्पादन सुचुकादिसँ',
-'tog-watchlisthideminor'      => 'वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ',
-'tog-watchlisthideliu'        => 'वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ',
-'tog-watchlisthideanons'      => 'वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ',
-'tog-nolangconversion'        => 'भेरियन्ट (variant) कन्भर्जन डिसेबल यानादिसँ',
-'tog-ccmeonemails'            => 'जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ',
-'tog-diffonly'                => 'पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते',
-'tog-showhiddencats'          => 'सुचुकातगु पुचःत क्यनादिसँ',
-'tog-noconvertlink'           => 'लिङ्क शिर्षक हिलेज्या डिजेबल यानादिसँ',
-
-'underline-always'  => 'न्ह्याबिलें',
-'underline-never'   => 'नेभर',
+'tog-showtoc' => 'कन्टेण्टया धलः क्यनादिसँ (३गु स्वया अप्व शिर्षक दुगु पौया निंति)',
+'tog-rememberpassword' => 'जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ',
+'tog-watchdefault' => 'जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ',
+'tog-watchmoves' => 'जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ',
+'tog-watchdeletion' => 'जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ',
+'tog-minordefault' => 'सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ',
+'tog-previewontop' => 'सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
+'tog-previewonfirst' => 'न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ',
+'tog-nocache' => 'पौ क्याशिङ (caching) डिजेबल यानादिसँ',
+'tog-enotifwatchlistpages' => 'जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
+'tog-enotifusertalkpages' => 'जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ',
+'tog-enotifminoredits' => 'पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ',
+'tog-enotifrevealaddr' => 'जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ',
+'tog-shownumberswatching' => 'स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ',
+'tog-fancysig' => 'कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)',
+'tog-externaleditor' => 'डिफल्टं एक्स्टर्नल एडिटर छ्यलादिसँ (एक्स्पर्टतेगु निंतिं जक्क, छिगु कम्प्युटरय् विषेश सेटिङ माः)',
+'tog-externaldiff' => 'एक्स्टर्नल डिफ् (diff) डिफल्टं छ्यलादिसँ (एक्स्पर्टतेगु निंतिं जक्क, छिगु कम्प्युटरय् विषेश सेटिङ माः)',
+'tog-showjumplinks' => '"जम्प टु" एसिसिबिलिटी लिङ्क इनेबल यानादिसँ',
+'tog-uselivepreview' => 'लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)',
+'tog-forceeditsummary' => 'सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ',
+'tog-watchlisthideown' => 'जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ',
+'tog-watchlisthidebots' => 'वाचलिस्टं बोत सम्पादन सुचुकादिसँ',
+'tog-watchlisthideminor' => 'वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ',
+'tog-watchlisthideliu' => 'वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ',
+'tog-watchlisthideanons' => 'वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ',
+'tog-ccmeonemails' => 'जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ',
+'tog-diffonly' => 'पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते',
+'tog-showhiddencats' => 'सुचुकातगु पुचःत क्यनादिसँ',
+'tog-noconvertlink' => 'लिङ्क शिर्षक हिलेज्या डिजेबल यानादिसँ',
+
+'underline-always' => 'न्ह्याबिलें',
+'underline-never' => 'नेभर',
 'underline-default' => 'डिफल्ट ब्राउज यानादिसँ',
 
 # Dates
-'sunday'        => 'आइतबाः',
-'monday'        => 'सोमबाः',
-'tuesday'       => 'मङ्गलबाः',
-'wednesday'     => 'बुधबाः',
-'thursday'      => 'बिहिबाः',
-'friday'        => 'शुक्रबाः',
-'saturday'      => 'शनिबाः',
-'sun'           => 'आइत',
-'mon'           => 'सोम',
-'tue'           => 'मङ्गल',
-'wed'           => 'बुध',
-'thu'           => 'बिहि',
-'fri'           => 'शुक्र',
-'sat'           => 'शनि',
-'january'       => 'ज्यानुवरी',
-'february'      => 'फेब्रुवरी',
-'march'         => 'मार्च',
-'april'         => 'अप्रिल',
-'may_long'      => 'मे',
-'june'          => 'जुन',
-'july'          => 'जुलाइ',
-'august'        => 'अगस्ट',
-'september'     => 'सेप्टेम्बर',
-'october'       => 'अक्टोबर',
-'november'      => 'नोभेम्बर',
-'december'      => 'डिसेम्बर',
-'january-gen'   => 'ज्यानुवरी',
-'february-gen'  => 'फ्रेब्रुवरी',
-'march-gen'     => 'मार्च',
-'april-gen'     => 'अप्रिल',
-'may-gen'       => 'मे',
-'june-gen'      => 'जुन',
-'july-gen'      => 'जुलाइ',
-'august-gen'    => 'अगस्ट',
+'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'           => 'डिस',
+'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|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $2 सकलय् बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःतः}} दु।}}',
-'category-subcat-count-limited'  => 'थ्व पुचले बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःत}} दु।',
-'category-article-count'         => '{{PLURAL:$2|थ्व पुचले क्वे बियातःगु पौ दु।|$2 सकलय् थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।}}',
+'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|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $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 पौस}} थ्व पुचले दु।',
-'category-file-count'            => '{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}',
+'category-file-count' => '{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}',
 
-'about'         => 'विषयक',
-'article'       => 'कण्टेण्ट पौ',
+'about' => 'विषयक',
+'article' => 'कण्टेण्ट पौ',
 'moredotdotdot' => 'अप्व॰॰॰',
-'mypage'        => 'जिगु पौ',
-'mytalk'        => 'जिगु खं',
-'anontalk'      => 'थ्व IPया निंतिं खँल्हाबल्हा',
-'navigation'    => 'परिवहन',
-'and'           => '&#32;व',
+'mypage' => 'जिगु पौ',
+'mytalk' => 'जिगु खं',
+'anontalk' => 'थ्व IPया निंतिं खँल्हाबल्हा',
+'navigation' => 'परिवहन',
+'and' => '&#32;व',
 
 # Cologne Blue skin
-'qbfind'  => 'मालादिसँ',
-'qbedit'  => 'सम्पादन',
-'faq'     => 'आपालं न्यनिगु न्ह्यसः (FAQ)',
+'qbfind' => 'मालादिसँ',
+'qbedit' => 'सम्पादन',
+'faq' => 'आपालं न्यनिगु न्ह्यसः (FAQ)',
 'faqpage' => 'Project:आपालं न्यनिगु न्ह्यसःत (FAQ)',
 
-'returnto'         => '$1य् लिहाँझासँ।',
-'tagline'          => '{{SITENAME}}नं',
-'help'             => 'ग्वहालि',
-'search'           => 'मालादिसँ',
-'searchbutton'     => 'मालादिसँ',
-'go'               => 'झासँ',
-'searcharticle'    => 'झासँ',
-'history'          => 'पौया इतिहास',
-'history_short'    => 'इतिहास',
-'updatedmarker'    => 'जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट',
+'returnto' => '$1य् लिहाँझासँ।',
+'tagline' => '{{SITENAME}}नं',
+'help' => 'ग्वहालि',
+'search' => 'मालादिसँ',
+'searchbutton' => 'मालादिसँ',
+'go' => 'झासँ',
+'searcharticle' => 'झासँ',
+'history' => 'पौया इतिहास',
+'history_short' => 'इतिहास',
+'updatedmarker' => 'जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट',
 'printableversion' => 'ध्वायेज्युगु संस्करण',
-'permalink'        => 'स्थायी लिङ्क',
-'print'            => 'ध्वानादिसँ',
-'edit'             => 'सम्पादन',
-'editthispage'     => 'थ्व पौ सम्पादन यानादिसं',
-'newpage'          => 'न्हुगु पौ',
+'permalink' => 'स्थायी लिङ्क',
+'print' => 'ध्वानादिसँ',
+'edit' => 'सम्पादन',
+'editthispage' => 'थ्व पौ सम्पादन यानादिसं',
+'newpage' => 'न्हुगु पौ',
 'talkpagelinktext' => 'खँल्हाबँल्हा',
-'specialpage'      => 'विषेश पौ',
-'personaltools'    => 'निजी ज्याब्व',
-'talk'             => 'खँलाबँला',
-'toolbox'          => 'ज्याब्व सन्दुक',
-'projectpage'      => 'ज्याखँ पौ क्येनादिसँ',
-'otherlanguages'   => 'मेमेगु भाषाय्',
-'jumptosearch'     => 'मालादिसँ',
+'specialpage' => 'विषेश पौ',
+'personaltools' => 'निजी ज्याब्व',
+'talk' => 'खँलाबँला',
+'toolbox' => 'ज्याब्व सन्दुक',
+'projectpage' => 'ज्याखँ पौ क्येनादिसँ',
+'otherlanguages' => 'मेमेगु भाषाय्',
+'jumptosearch' => 'मालादिसँ',
 
 # 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'             => 'मू पौ',
+'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:गुप्तता नियम',
+'policy-url' => 'Project:नीति',
+'portal' => 'सामाजिक मूलुखा',
+'portal-url' => 'Project:सामाजिक मूलुखा',
+'privacy' => 'दुबिस्ता नियम',
+'privacypage' => 'Project:गुप्तता नियम',
 
-'badaccess'        => 'पर्मिसन इरर',
+'badaccess' => 'पर्मिसन इरर',
 'badaccess-group0' => 'छिं अनुरोध यानादिगु ज्या छिं याये मछिं।',
 'badaccess-groups' => 'छिं अनुरोध यानादिगु ज्या {{PLURAL:$2|पुचः|पुचःतः}}: $1या छ्यलामिं जक्क याये दु।',
 
-'versionrequired'     => 'मिडियाविकिया $1 संस्करण माःगु',
+'versionrequired' => 'मिडियाविकिया $1 संस्करण माःगु',
 'versionrequiredtext' => 'थ्व पौ छ्यले यात मिडियाविकिया $1 संस्करण माः।
 स्वयादिसँ [[विशेष:संस्करण|संस्करण पौ]]।',
 
-'ok'                      => 'ज्यु',
-'newmessageslink'         => 'न्हुगु सन्देश',
-'newmessagesdifflink'     => 'न्हापाया हिलेज्या',
+'ok' => 'ज्यु',
+'newmessageslink' => 'न्हुगु सन्देश',
+'newmessagesdifflink' => 'न्हापाया हिलेज्या',
 'youhavenewmessagesmulti' => '$1य् छित न्हुगु सन्देश वगु दु',
-'editsection'             => 'सम्पादन',
-'editold'                 => 'सम्पादन',
-'editsectionhint'         => 'खण्ड सम्पादन: $1',
-'showtoc'                 => 'क्यनादिसँ',
+'editsection' => 'सम्पादन',
+'editold' => 'सम्पादन',
+'editsectionhint' => 'खण्ड सम्पादन: $1',
+'showtoc' => 'क्यनादिसँ',
 
 # 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-main' => 'पौ',
+'nstab-user' => 'छ्य्‌लामि पौ',
+'nstab-media' => 'मिडिया पौ',
+'nstab-special' => 'विशेष',
+'nstab-project' => 'ज्याझ्वः पौ',
+'nstab-image' => 'फाइल',
 'nstab-mediawiki' => 'सन्देश',
-'nstab-template'  => 'टेम्प्लेट',
-'nstab-help'      => 'ग्वहालि पौ',
-'nstab-category'  => 'पुचः',
+'nstab-template' => 'टेम्प्लेट',
+'nstab-help' => 'ग्वहालि पौ',
+'nstab-category' => 'पुचः',
 
 # Main script and global functions
-'nosuchaction'      => 'थन्यागु ज्या मदु',
-'nosuchactiontext'  => 'URLनं या धाःगु ज्या विकिं मस्यु',
+'nosuchaction' => 'थन्यागु ज्या मदु',
+'nosuchactiontext' => 'URLनं या धाःगु ज्या विकिं मस्यु',
 'nosuchspecialpage' => 'थन्यागु विशेष पौ मदु',
 'nospecialpagetext' => '<strong>छिं मदुगु विशेष पौया माग तयादिल।</strong>
 
 अस्थित्वय् दुगु विशेष पौया धलः [[विशेष:विशेषपौ|{{int:specialpages}}]]य् दु।',
 
 # General errors
-'databaseerror'   => 'डेटाबेस इरर',
-'dberrortext'     => 'छगू डेटाबेस क्वेरी सिन्ट्याक्स इरर जूगु दु।
+'databaseerror' => 'डेटाबेस इरर',
+'dberrortext' => 'छगू डेटाबेस क्वेरी सिन्ट्याक्स इरर जूगु दु।
 थ्व इररं सफ्टवेयरय् bug दूगु इंगीत यायेफु।
 थ्व स्वया न्हः कोशिस जूगु डेटाबेस क्वेरी
 "<tt>$2</tt>" फंक्सनया
 <blockquote><tt>$1</tt></blockquote> ख।
 MySQL नं इरर "<tt>$3: $4</tt>" क्यंगु दु।',
 'laggedslavemode' => 'चेतावनी: पतिइ न्हुगु अपदेत मदेफु ।',
-'readonly'        => 'देताबेस संरक्षित',
+'readonly' => 'देताबेस संरक्षित',
 'enterlockreason' => 'पौ कुनातयेगुया निंतिं कारण बियादिसँ, नापं पौ गब्ले चायेकिगु जुइफु उकिया अनुमान नं बियादिसँ',
-'readonlytext'    => 'थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।
+'readonlytext' => 'थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।
 
 थ्व डेटाबेस कुनाःतम्ह प्रबन्धकं थ्व वर्णन ब्यूगु दु: $1',
-'internalerror'   => 'इन्तरनल इरर',
-'viewsource'      => 'स्रोत स्वयादिसँ',
+'internalerror' => 'इन्तरनल इरर',
+'viewsource' => 'स्रोत स्वयादिसँ',
 
 # Login and logout pages
-'welcomecreation'         => '== लसकुस, $1! ==
+'welcomecreation' => '== लसकुस, $1! ==
 छिगु खाता चायेके धुंकल।
 छिगु [[Special:Preferences|{{SITENAME}} प्राथमिकता]] हिलिगु लुमंकादिसँ।',
-'yourname'                => 'छ्य्‌लामि नां:',
-'yourpassword'            => 'दुथखँग्वः (पासवर्द):',
-'yourpasswordagain'       => 'दुथखँग्वः हानं तियादिसँ:',
-'yourdomainname'          => 'छिगु दोमेन:',
-'login'                   => 'दुहां वनेगु',
+'yourname' => 'छ्य्‌लामि नां:',
+'yourpassword' => 'दुथखँग्वः (पासवर्द):',
+'yourpasswordagain' => 'दुथखँग्वः हानं तियादिसँ:',
+'yourdomainname' => 'छिगु दोमेन:',
+'login' => 'दुहां वनेगु',
 'nav-login-createaccount' => 'दुहां वनेगु / खाता चायेकिगु',
-'userlogin'               => 'दुहां वनेगु / खाता चायेकिगु',
-'logout'                  => 'पिने झासँ',
-'userlogout'              => 'पिने झासँ',
-'nologinlink'             => 'खाता न्ह्यथनादिसँ',
-'createaccount'           => 'खाता चायेकादिसँ',
-'gotaccountlink'          => 'दुहां झासँ',
-'loginsuccesstitle'       => 'लग इन सफल जुल',
-'accountcreated'          => 'खाता न्ह्येथन',
-'loginlanguagelabel'      => 'भाषा: $1',
+'userlogin' => 'दुहां वनेगु / खाता चायेकिगु',
+'logout' => 'पिने झासँ',
+'userlogout' => 'पिने झासँ',
+'nologinlink' => 'खाता न्ह्यथनादिसँ',
+'createaccount' => 'खाता चायेकादिसँ',
+'gotaccountlink' => 'दुहां झासँ',
+'loginsuccesstitle' => 'लग इन सफल जुल',
+'accountcreated' => 'खाता न्ह्येथन',
+'loginlanguagelabel' => 'भाषा: $1',
 
 # Edit pages
-'summary'       => 'सारांश:',
-'savearticle'   => 'पौ मुंकादिसं',
-'preview'       => 'स्वयादिसं',
-'newarticle'    => '(न्हु)',
-'note'          => "'''होस यानादिसँ:'''",
-'previewnote'   => "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
-'editing'       => '$1 सम्पादन जुयाच्वँगु दु',
-'editconflict'  => 'सम्पादन द्वंगु दु: $1',
-'yourtext'      => 'छिगु आखः',
+'summary' => 'सारांश:',
+'savearticle' => 'पौ मुंकादिसं',
+'preview' => 'स्वयादिसं',
+'newarticle' => '(न्हु)',
+'note' => "'''होस यानादिसँ:'''",
+'previewnote' => "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
+'editing' => '$1 सम्पादन जुयाच्वँगु दु',
+'editconflict' => 'सम्पादन द्वंगु दु: $1',
+'yourtext' => 'छिगु आखः',
 'storedversion' => 'स्वथनातगु संस्करण',
 
 # History pages
-'revisionasof'     => '$1 तक्कया संस्करण',
+'revisionasof' => '$1 तक्कया संस्करण',
 'previousrevision' => '←पुलांगु संस्करण',
 
 # Search results
 'searchhelp-url' => 'Help:धलःपौ',
-'searchrelated'  => 'स्वापू दुःगु',
-'searchall'      => 'सकल',
-'powersearch'    => 'मालादिसँ',
+'searchrelated' => 'स्वापू दुःगु',
+'searchall' => 'सकल',
+'powersearch' => 'मालादिसँ',
 
 # Preferences page
-'mypreferences'  => 'जिगु प्राथमिकता',
+'mypreferences' => 'जिगु प्राथमिकता',
 'changepassword' => 'पासवर्द हिलादिसँ',
 'prefs-datetime' => 'दिं व ई',
 'prefs-personal' => 'छ्य्‌लामि प्रोफाइल',
-'prefs-rc'       => 'न्हुगु हिलेज्या',
-'saveprefs'      => 'स्वथनादिसँ',
-'youremail'      => 'इ-मेल:',
-'username'       => 'छ्य्‌लामि नां:',
-'yourrealname'   => 'वास्तविक नां:',
-'yourlanguage'   => 'भाषा:',
-'email'          => 'इ-मेल',
+'prefs-rc' => 'न्हुगु हिलेज्या',
+'saveprefs' => 'स्वथनादिसँ',
+'youremail' => 'इ-मेल:',
+'username' => 'छ्य्‌लामि नां:',
+'yourrealname' => 'वास्तविक नां:',
+'yourlanguage' => 'भाषा:',
+'email' => 'इ-मेल',
 
 # User rights
 'userrights-user-editname' => 'छपू छ्य्‌लामि नां तयादिसँ:',
 
 # Groups
 'group-user' => 'छ्य्‌लामित',
-'group-bot'  => 'बोत',
+'group-bot' => 'बोत',
 
 # Recent changes
 'recentchanges' => 'न्हुगु हिलेज्या',
-'show'          => 'क्यनादिसँ',
+'show' => 'क्यनादिसँ',
 
 # Upload
 'upload' => 'संचिका चढ़ाएँ',
 
 # File description page
 'file-anchor-link' => 'फाइल',
-'filehist-user'    => 'छ्य्‌लामि',
+'filehist-user' => 'छ्य्‌लामि',
 
 # Random page
 'randompage' => 'छगु च्वसुइ येंकादिसं',
@@ -354,9 +353,9 @@ MySQL नं इरर "<tt>$3: $4</tt>" क्यंगु दु।',
 'newpages-username' => 'छ्येलेमि नां:',
 
 # Special:AllPages
-'allpages'       => 'सकल पौत',
-'nextpage'       => 'मेगु पौ ($1)',
-'allarticles'    => 'सकल च्वसुत',
+'allpages' => 'सकल पौत',
+'nextpage' => 'मेगु पौ ($1)',
+'allarticles' => 'सकल च्वसुत',
 'allpagessubmit' => 'झासँ',
 
 # Special:Categories
@@ -366,7 +365,7 @@ MySQL नं इरर "<tt>$3: $4</tt>" क्यंगु दु।',
 'restriction-edit' => 'सम्पादन',
 
 # Namespace form on various pages
-'namespace'      => 'नेमस्पेस:',
+'namespace' => 'नेमस्पेस:',
 'blanknamespace' => '(मू)',
 
 # Contributions
@@ -381,56 +380,56 @@ MySQL नं इरर "<tt>$3: $4</tt>" क्यंगु दु।',
 'movereason' => 'कारण:',
 
 # Tooltip help for the actions
-'tooltip-n-mainpage'              => 'मू पौ भ्रमण यानादिसँ',
-'tooltip-n-portal'                => 'ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु',
-'tooltip-n-currentevents'         => 'जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ',
-'tooltip-n-recentchanges'         => 'थ्व विकिया न्हुगु हिलेज्याया धलः।',
-'tooltip-n-randompage'            => 'न्ह्याःगु छगू पौ क्यनादिसँ',
-'tooltip-n-help'                  => 'खँ सीकिगु थाय्।',
-'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-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-n-mainpage' => 'मू पौ भ्रमण यानादिसँ',
+'tooltip-n-portal' => 'ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु',
+'tooltip-n-currentevents' => 'जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ',
+'tooltip-n-recentchanges' => 'थ्व विकिया न्हुगु हिलेज्याया धलः।',
+'tooltip-n-randompage' => 'न्ह्याःगु छगू पौ क्यनादिसँ',
+'tooltip-n-help' => 'खँ सीकिगु थाय्।',
+'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-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-recreate'                => 'थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ',
-'tooltip-upload'                  => 'अपलोड न्ह्यथनादिसँ',
-'tooltip-rollback'                => '"रोलब्याकं" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।',
-'tooltip-undo'                    => '"Undo" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।
+'tooltip-watch' => 'थ्व पौयात छिगु वाचलिस्टय् तनादिसँ',
+'tooltip-recreate' => 'थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ',
+'tooltip-upload' => 'अपलोड न्ह्यथनादिसँ',
+'tooltip-rollback' => '"रोलब्याकं" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।',
+'tooltip-undo' => '"Undo" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।
 थुकिलिं सारांशय् कारण तनेछिंकी।',
 
 # Stylesheets
-'common.css'      => '/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */',
-'standard.css'    => '/* थन तःगु CSS नं स्ट्याण्डर्ड स्किनया छ्य्‌लामितेत प्रभावित याइ */',
-'nostalgia.css'   => '/* थन तःगु CSS नं नोस्ट्याल्जिया स्किनया छ्य्‌लामितेत असर याइ */',
+'common.css' => '/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */',
+'standard.css' => '/* थन तःगु CSS नं स्ट्याण्डर्ड स्किनया छ्य्‌लामितेत प्रभावित याइ */',
+'nostalgia.css' => '/* थन तःगु CSS नं नोस्ट्याल्जिया स्किनया छ्य्‌लामितेत असर याइ */',
 'cologneblue.css' => '/* थन तःगु CSS नं कोलोन ब्लु स्किनया छ्य्‌लामितेत असर याइ */',
-'monobook.css'    => '/* थन तःगु CSS नं मोनोबुक स्किनया छ्य्‌लामितेत असर याइ */',
-'myskin.css'      => '/* थन तःगु CSS नं माइस्किन स्किनया छ्य्‌लामितेत असर याइ */',
-'chick.css'       => '/* थन तःगु CSS नं चिक स्किनया छ्य्‌लामितेत असर याइ */',
-'simple.css'      => '/* थन तःगु CSS नं सिम्पल स्किनया छ्य्‌लामितेत असर याइ */',
-'modern.css'      => '/* थन तःगु CSS नं मोडर्न स्किनया छ्य्‌लामितेत असर याइ */',
-'print.css'       => '/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */',
-'handheld.css'    => '/* थन तःगु CSS नं $wgHandheldStyle आधारित ह्याण्डहेल्ड यन्त्रयात असर याइ */',
+'monobook.css' => '/* थन तःगु CSS नं मोनोबुक स्किनया छ्य्‌लामितेत असर याइ */',
+'myskin.css' => '/* थन तःगु CSS नं माइस्किन स्किनया छ्य्‌लामितेत असर याइ */',
+'chick.css' => '/* थन तःगु CSS नं चिक स्किनया छ्य्‌लामितेत असर याइ */',
+'simple.css' => '/* थन तःगु CSS नं सिम्पल स्किनया छ्य्‌लामितेत असर याइ */',
+'modern.css' => '/* थन तःगु CSS नं मोडर्न स्किनया छ्य्‌लामितेत असर याइ */',
+'print.css' => '/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */',
+'handheld.css' => '/* थन तःगु CSS नं $wgHandheldStyle आधारित ह्याण्डहेल्ड यन्त्रयात असर याइ */',
 
 # Attribution
 'others' => 'मेमेगु',
index 3c14a80..bc49067 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Aho Tapu',
-'monday'        => 'Aho Gofua',
-'tuesday'       => 'Aho Ua',
-'wednesday'     => 'Aho Lotu',
-'thursday'      => 'Aho Tuloto',
-'friday'        => 'Aho Falaile',
-'saturday'      => 'Aho Faiumu',
-'january'       => 'Ianuali',
-'february'      => 'Fepuali',
-'march'         => 'Masi',
-'april'         => 'Apelila',
-'may_long'      => 'Me',
-'june'          => 'Iuni',
-'july'          => 'Iulai',
-'august'        => 'Aokuso',
-'september'     => 'Sepetema',
-'october'       => 'Oketopa',
-'november'      => 'Novema',
-'december'      => 'Tesemo',
-'january-gen'   => 'Ianuali',
-'february-gen'  => 'Fepuali',
-'march-gen'     => 'Masi',
-'april-gen'     => 'Apelila',
-'may-gen'       => 'Me',
-'june-gen'      => 'Iuni',
-'july-gen'      => 'Iulai',
-'august-gen'    => 'Aokuso',
+'sunday' => 'Aho Tapu',
+'monday' => 'Aho Gofua',
+'tuesday' => 'Aho Ua',
+'wednesday' => 'Aho Lotu',
+'thursday' => 'Aho Tuloto',
+'friday' => 'Aho Falaile',
+'saturday' => 'Aho Faiumu',
+'january' => 'Ianuali',
+'february' => 'Fepuali',
+'march' => 'Masi',
+'april' => 'Apelila',
+'may_long' => 'Me',
+'june' => 'Iuni',
+'july' => 'Iulai',
+'august' => 'Aokuso',
+'september' => 'Sepetema',
+'october' => 'Oketopa',
+'november' => 'Novema',
+'december' => 'Tesemo',
+'january-gen' => 'Ianuali',
+'february-gen' => 'Fepuali',
+'march-gen' => 'Masi',
+'april-gen' => 'Apelila',
+'may-gen' => 'Me',
+'june-gen' => 'Iuni',
+'july-gen' => 'Iulai',
+'august-gen' => 'Aokuso',
 'september-gen' => 'Sepetema',
-'october-gen'   => 'Oketopa',
-'november-gen'  => 'Novema',
-'december-gen'  => 'Tesemo',
-'may'           => 'Me',
-
-'article'    => 'Tohi Tala',
-'cancel'     => 'Tiaki',
-'mytalk'     => 'Haaku tutala',
+'october-gen' => 'Oketopa',
+'november-gen' => 'Novema',
+'december-gen' => 'Tesemo',
+'may' => 'Me',
+
+'article' => 'Tohi Tala',
+'cancel' => 'Tiaki',
+'mytalk' => 'Haaku tutala',
 'navigation' => 'Navikati',
 
 # Cologne Blue skin
-'qbedit'         => 'Fakahakohako',
+'qbedit' => 'Fakahakohako',
 'qbspecialpages' => 'Tau Lau Mahuiga',
 
-'help'             => 'Lagomatai',
-'search'           => 'Kumi',
-'searchbutton'     => 'Kumi',
-'go'               => 'Fano',
-'searcharticle'    => 'Fano',
-'history_short'    => 'Liu onoono atu ki tua',
+'help' => 'Lagomatai',
+'search' => 'Kumi',
+'searchbutton' => 'Kumi',
+'go' => 'Fano',
+'searcharticle' => 'Fano',
+'history_short' => 'Liu onoono atu ki tua',
 'printableversion' => 'Mitaki lolomi',
-'permalink'        => 'Matutakiaga mautumau',
-'edit'             => 'Fakahakohako',
-'delete'           => 'Tamate',
-'protect'          => 'Puipui',
-'talk'             => 'Fakatutala',
-'toolbox'          => 'Puha Mena Gahua',
-'otherlanguages'   => 'Ke he falu vagahau',
+'permalink' => 'Matutakiaga mautumau',
+'edit' => 'Fakahakohako',
+'delete' => 'Tamate',
+'protect' => 'Puipui',
+'talkpagelinktext' => 'Tutala',
+'talk' => 'Fakatutala',
+'toolbox' => 'Puha Mena Gahua',
+'otherlanguages' => 'Ke he falu vagahau',
 'jumptonavigation' => 'navikati',
-'jumptosearch'     => 'kumi',
+'jumptosearch' => 'kumi',
 
 # 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'            => 'Hagaao ke he {{SITENAME}}',
-'currentevents'        => 'Tau Fakaholoaga Mogonei',
-'edithelp'             => 'Lagomatai ke he Fakahakohako',
-'mainpage'             => 'Matapatu Lau',
+'aboutsite' => 'Hagaao ke he {{SITENAME}}',
+'aboutpage' => 'Project: Hagaao',
+'currentevents' => 'Tau Fakaholoaga Mogonei',
+'edithelp' => 'Lagomatai ke he Fakahakohako',
+'helppage' => 'Help: Ke lata mo e tau mena i loto',
+'mainpage' => 'Matapatu Lau',
 'mainpage-description' => 'Matapatu Lau',
-'portal'               => 'Maaga ke Matutaki',
-'privacy'              => 'Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata',
+'portal' => 'Maaga ke Matutaki',
+'portal-url' => 'Project:Ko e lau auloa ma maaga',
+'privacy' => 'Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata',
 
-'youhavenewmessages'      => 'Fai $1 ($2).',
-'newmessageslink'         => 'tau tohi foou',
+'youhavenewmessages' => 'Fai $1 ($2).',
+'newmessageslink' => 'tau tohi foou',
 'youhavenewmessagesmulti' => 'Fai tohi foou a koe he $1',
-'editsection'             => 'fakahakohako',
-'editold'                 => 'fakahakohako',
+'editsection' => 'fakahakohako',
+'editold' => 'fakahakohako',
+'editsectionhint' => 'Hiki e vala e: $1',
+'red-link-title' => '$1 (nakai fai lau pihia i i loto e)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'Lau',
 'nstab-user' => 'Lau he tagata',
 
 # General errors
 'viewsource' => 'Kitekite ke mouaga',
 
 # Login and logout pages
-'welcomecreation'         => '== Fakalofa atu, kua fiafia ke hu mai $1 ==
+'welcomecreation' => '== Fakalofa atu, kua fiafia ke hu mai $1 ==
 Kua talaga e haau a poko.
 Ua nimo ke hiki e haau tau [[Special:Preferences|manako {{SITENAME}}]].',
-'yourname'                => 'Matahigoa he tagata:',
-'yourpassword'            => 'Kupu fufu:',
-'yourpasswordagain'       => 'Liu lolomi e kupu fufu:',
-'remembermypassword'      => 'Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                   => 'Hu ki loto',
+'yourname' => 'Matahigoa he tagata:',
+'yourpassword' => 'Kupu fufu:',
+'yourpasswordagain' => 'Liu lolomi e kupu fufu:',
+'remembermypassword' => 'Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Hu ki loto',
 'nav-login-createaccount' => 'Hu ki loto / talaga e poko',
-'userlogin'               => 'Hu ki loto / talaga e poko',
-'logout'                  => 'Hu mai ki tua',
-'userlogout'              => 'Hu mai ki tua',
-'notloggedin'             => 'Ai la hu ki loto',
-'createaccount'           => 'Talaga e poko',
-'gotaccountlink'          => 'Hu ki loto',
+'userlogin' => 'Hu ki loto / talaga e poko',
+'logout' => 'Hu mai ki tua',
+'userlogout' => 'Hu mai ki tua',
+'notloggedin' => 'Ai la hu ki loto',
+'createaccount' => 'Talaga e poko',
+'gotaccountlink' => 'Hu ki loto',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Matahigoa he tagata',
 
 # Edit pages
-'summary'      => 'Fakakatoakatoa:',
-'minoredit'    => 'Ko e fakahakohako fakatote',
-'watchthis'    => 'Onoono e lau e',
-'savearticle'  => 'Taofi e lau',
-'showpreview'  => 'Fakakite e foliga',
-'showdiff'     => 'Fakakite e tau hikihiki',
+'summary' => 'Fakakatoakatoa:',
+'minoredit' => 'Ko e fakahakohako fakatote',
+'watchthis' => 'Onoono e lau e',
+'savearticle' => 'Taofi e lau',
+'showpreview' => 'Fakakite e foliga',
+'showdiff' => 'Fakakite e tau hikihiki',
 'loginreqlink' => 'hu ki loto',
 
 # History pages
-'currentrev'          => 'Kitekiteaga mogonei',
+'currentrev' => 'Kitekiteaga mogonei',
 'currentrevisionlink' => 'Kitekiteaga mogonei',
 
+# Diffs
+'editundo' => 'Liuaki',
+
 # Preferences page
-'mypreferences'     => 'Haaku a tau manako',
-'prefsnologin'      => 'Ai la hu ki loto',
-'prefs-rc'          => 'Hikihikiaga mogoia',
+'mypreferences' => 'Haaku a tau manako',
+'prefsnologin' => 'Ai la hu ki loto',
+'prefs-rc' => 'Hikihikiaga mogoia',
 'searchresultshead' => 'Kumi',
-'youremail'         => 'Meli hila:',
-'username'          => 'Matahigoa he tagata:',
-'email'             => 'Meli hila',
+'youremail' => 'Meli hila:',
+'username' => 'Matahigoa he tagata:',
+'email' => 'Meli hila',
 
 # Recent changes
 'recentchanges' => 'Hikihikiaga mogoia',
-'hist'          => 'Liu onoono atu ki tua',
+'hist' => 'Liu onoono atu ki tua',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Falu hikihiki',
-'recentchangeslinked-feed'    => 'Falu hikihiki',
+'recentchangeslinked' => 'Falu hikihiki',
+'recentchangeslinked-feed' => 'Falu hikihiki',
 'recentchangeslinked-toolbox' => 'Falu hikihiki',
 
 # Upload
-'upload'            => 'Fakafano e faila',
-'uploadbtn'         => 'Fakafano e faila',
-'uploadnologin'     => 'Ai la hu ki loto',
-'filedesc'          => 'Fakakatoakatoa',
+'upload' => 'Fakafano e faila',
+'uploadbtn' => 'Fakafano e faila',
+'uploadnologin' => 'Ai la hu ki loto',
+'filedesc' => 'Fakakatoakatoa',
 'fileuploadsummary' => 'Fakakatoakatoa:',
-'watchthisupload'   => 'Onoono e lau e',
+'watchthisupload' => 'Onoono e lau e',
 
 # File description page
 'filehist-deleteone' => 'tamate',
@@ -162,13 +172,13 @@ Ua nimo ke hiki e haau tau [[Special:Preferences|manako {{SITENAME}}]].',
 # Random page
 'randompage' => 'Lau fifili',
 
-'brokenredirects-edit'   => 'fakahakohako',
+'brokenredirects-edit' => 'fakahakohako',
 'brokenredirects-delete' => 'tamate',
 
 # Miscellaneous special pages
 'newpages-username' => 'Matahigoa he tagata:',
-'move'              => 'Une',
-'movethispage'      => 'Une e lau e',
+'move' => 'Une',
+'movethispage' => 'Une e lau e',
 
 # Book sources
 'booksources-go' => 'Fano',
@@ -177,10 +187,10 @@ Ua nimo ke hiki e haau tau [[Special:Preferences|manako {{SITENAME}}]].',
 'linksearch-ok' => 'Kumi',
 
 # Watchlist
-'watchlist'     => 'Ko e haaku lau kitekite',
-'mywatchlist'   => 'Ko e haaku lau kitekite',
-'watchnologin'  => 'Ai la hu ki loto',
-'watch'         => 'Kitekite',
+'watchlist' => 'Ko e haaku lau kitekite',
+'mywatchlist' => 'Ko e haaku lau kitekite',
+'watchnologin' => 'Ai la hu ki loto',
+'watch' => 'Kitekite',
 'watchthispage' => 'Onoono e lau e',
 
 # Delete
@@ -198,7 +208,7 @@ Ua nimo ke hiki e haau tau [[Special:Preferences|manako {{SITENAME}}]].',
 
 # Contributions
 'contributions' => 'Tau lagomatai tagata',
-'mycontris'     => 'Haaku a tau lagomatai',
+'mycontris' => 'Haaku a tau lagomatai',
 
 'sp-contributions-submit' => 'Kumi',
 
@@ -206,26 +216,45 @@ Ua nimo ke hiki e haau tau [[Special:Preferences|manako {{SITENAME}}]].',
 'whatlinkshere' => 'Ko e tau matutakiaga he mena e',
 
 # Block/unblock
-'ipbreason'          => 'Kakano:',
+'ipbreason' => 'Kakano:',
 'ipblocklist-submit' => 'Kumi',
 
 # Move page
 'movenologin' => 'Ai la hu ki loto',
-'move-watch'  => 'Onoono e lau e',
-'movedto'     => 'kua une ke he',
-'movereason'  => 'Kakano:',
+'move-watch' => 'Onoono e lau e',
+'movedto' => 'kua une ke he',
+'movereason' => 'Kakano:',
 
 # Namespace 8 related
 'allmessages' => 'Tau fakailoaga',
 
 # Tooltip help for the actions
 'tooltip-pt-preferences' => 'Haaku a tau manako',
-'tooltip-pt-logout'      => 'Hu mai ki tua',
-'tooltip-p-logo'         => 'Matapatu Lau',
+'tooltip-pt-login' => 'Kua lata ia koe ke loko ini, kae pule ni e a koe, ai pehe ko e masi a koe ke loko ini',
+'tooltip-pt-logout' => 'Hu mai ki tua',
+'tooltip-ca-talk' => 'Tutala ke he tau matapatu lau',
+'tooltip-ca-edit' => 'Maeke ia koe ke hiki, uta kehe mo e lalafi atu falu mena ke he lau nei.  Fakamolemole ti fakaaoga e PREVIEW patani to taofi mau.',
+'tooltip-search' => 'Kumi {{SITENAME}}',
+'tooltip-search-fulltext' => 'Kumi ke he tau lau oti e kupu e',
+'tooltip-p-logo' => 'Matapatu Lau',
+'tooltip-n-mainpage-description' => 'Fano ke he matapatu lau',
+'tooltip-n-portal' => 'Hagao ke he gahua lahi, ko e heigoa kua lata a koe ke taute, mo e moua mai i fe e tau mena',
+'tooltip-n-currentevents' => 'Kumi e tau vala tala kehekehe hagao ke he tau mena tutupu',
+'tooltip-n-recentchanges' => 'Hae e tau hikihiki foou he wiki',
+'tooltip-n-randompage' => 'Tuku mai noa ni e ha lau',
+'tooltip-n-help' => 'Ko e matakavi ke kumi ki ai',
+'tooltip-t-whatlinkshere' => 'Ko e tau lau wiki oti ne fai matutaki mai ke he lau e',
+'tooltip-t-upload' => 'Fakahu ki loto e tau faila',
+'tooltip-t-specialpages' => 'Ko e tau lau oti kua kehekehe',
 
 # Special:NewFiles
 'ilsubmit' => 'Kumi',
 
+# Bad image list
+'bad_image_list' => 'Ko e tau mena ni ne fakakite mai ka onoono ki ai (ko e tau laini ne kamata aki e *).
+Ko e liniki fakamua he laini ko e liniki ke he faila kelea.
+Ko e tau liniki foki i lalo he laini taha ko e tau laini fifili pauaki, i.e. ko e tau lau ne fai faila i loto he laini ia.',
+
 # Multipage image navigation
 'imgmultigo' => 'Fano!',
 
index 08d9d37..40952c6 100644 (file)
@@ -95,151 +95,153 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__GEENKOP__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'namespacenumber'         => array( '1', 'NAAMRUIMTENUMMER', 'NAMESPACENUMBER' ),
-       'talkspace'               => array( '1', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ONDERWERPPAGINANAAME', 'ARTIKELPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'BERICHT:', 'MSG:' ),
-       'subst'                   => array( '0', 'VERV:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'VEILIGVERV:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'BERICHTNW', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatuur', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatuur=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'rechts', 'right' ),
-       'img_left'                => array( '1', 'links', 'left' ),
-       'img_none'                => array( '1', 'geen', 'none' ),
-       'img_center'              => array( '1', 'gecentreerd', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'omkaderd', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'kaderloos', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'rand', 'border' ),
-       'img_baseline'            => array( '1', 'grondlijn', 'baseline' ),
-       'img_top'                 => array( '1', 'boven', 'top' ),
-       'img_text_top'            => array( '1', 'tekst-boven', 'text-top' ),
-       'img_middle'              => array( '1', 'midden', 'middle' ),
-       'img_bottom'              => array( '1', 'beneden', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                => array( '1', 'verwijzing=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'SITENAAM', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALEURL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ARTIKELPAD', 'ARTICLEPATH' ),
-       'servername'              => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SCRIPTPAD', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'STIJLPAD', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GESLACHT:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__GEENPAGINANAAMCONVERSIE__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'HUIDIGEDVDW', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'PLAATSELIJKEDVDW', 'LOKALEDVDW', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'VERSIEID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VERSIEDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VERSIEDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VERSIEMAAND', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'VERSIEMAAND1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'VERSIEJAAR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'MEERVOUD:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'VOLLEDIGEURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
-       'canonicalurl'            => array( '0', 'CANOIEKEURL:', 'CANONICALURL:' ),
-       'canonicalurle'           => array( '0', 'CANONIEKEURLE:', 'CANONICALURLE:' ),
-       'lcfirst'                 => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KL:', 'LC:' ),
-       'uc'                      => array( '0', 'HL:', 'UC:' ),
-       'raw'                     => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'V', 'R' ),
-       'newsectionlink'          => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#TAAL:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
-       'padright'                => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
-       'special'                 => array( '0', 'speciaal', 'special' ),
-       'speciale'                => array( '0', 'speciaale', 'speciale' ),
-       'defaultsort'             => array( '1', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'BESTANDSPAD:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'label', 'tag' ),
-       'hiddencat'               => array( '1', '__VERBORGENCAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__GEENINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'datumopmaak', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PAD', 'PATH' ),
-       'url_query'               => array( '0', 'ZOEKOPDRACHT', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'geenfout', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'nietvervangen', 'noreplace' ),
+       'redirect'                  => array( '0', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__GEENKOP__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALEMAAND1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NAAMRUIMTENUMMER', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ONDERWERPPAGINANAAME', 'ARTIKELPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'BERICHT:', 'MSG:' ),
+       'subst'                     => array( '0', 'VERV:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'VEILIGVERV:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'BERICHTNW', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatuur', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatuur=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'rechts', 'right' ),
+       'img_left'                  => array( '1', 'links', 'left' ),
+       'img_none'                  => array( '1', 'geen', 'none' ),
+       'img_center'                => array( '1', 'gecentreerd', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'omkaderd', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'kaderloos', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'rand', 'border' ),
+       'img_baseline'              => array( '1', 'grondlijn', 'baseline' ),
+       'img_top'                   => array( '1', 'boven', 'top' ),
+       'img_text_top'              => array( '1', 'tekst-boven', 'text-top' ),
+       'img_middle'                => array( '1', 'midden', 'middle' ),
+       'img_bottom'                => array( '1', 'beneden', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-beneden', 'text-bottom' ),
+       'img_link'                  => array( '1', 'verwijzing=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'SITENAAM', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'nse'                       => array( '0', 'NRE:', 'NSE:' ),
+       'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKELPAD', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'PAGINAID', 'PAGEID' ),
+       'servername'                => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SCRIPTPAD', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'STIJLPAD', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GESLACHT:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__GEENPAGINANAAMCONVERSIE__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'HUIDIGEDVDW', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'PLAATSELIJKEDVDW', 'LOKALEDVDW', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'VERSIEID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VERSIEDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VERSIEDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VERSIEMAAND', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'VERSIEMAAND1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'VERSIEJAAR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'VOLLEDIGEURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'CANOIEKEURL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'CANONIEKEURLE:', 'CANONICALURLE:' ),
+       'lcfirst'                   => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KL:', 'LC:' ),
+       'uc'                        => array( '0', 'HL:', 'UC:' ),
+       'raw'                       => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'V', 'R' ),
+       'newsectionlink'            => array( '1', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'HUIDIGETIJDSTEMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'PLAATSELIJKETIJDSTEMPEL', 'LOKALETIJDSTEMPEL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
+       'padright'                  => array( '0', 'RECHTSOPVULLEN', 'PADRIGHT' ),
+       'special'                   => array( '0', 'speciaal', 'special' ),
+       'speciale'                  => array( '0', 'speciaale', 'speciale' ),
+       'defaultsort'               => array( '1', 'STANDAARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'BESTANDSPAD:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'label', 'tag' ),
+       'hiddencat'                 => array( '1', '__VERBORGENCAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__GEENINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'datumopmaak', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PAD', 'PATH' ),
+       'url_query'                 => array( '0', 'ZOEKOPDRACHT', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'geenfout', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'nietvervangen', 'noreplace' ),
 );
 
 $specialPageAliases = array(
@@ -288,6 +290,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEzoeken', 'MIME-zoeken' ),
        'Mostcategories'            => array( 'MeesteCategorieën' ),
        'Mostimages'                => array( 'MeesteVerwezenBestanden', 'MeesteBestanden', 'MeesteAfbeeldingen' ),
+       'Mostinterwikis'            => array( 'MeesteInterwikiverwijzingen' ),
        'Mostlinked'                => array( 'MeestVerwezenPaginas', 'MeestVerwezenPagina\'s', 'MeestVerwezen' ),
        'Mostlinkedcategories'      => array( 'MeestVerwezenCategorieën' ),
        'Mostlinkedtemplates'       => array( 'MeestVerwezenSjablonen' ),
@@ -504,7 +507,7 @@ $messages = array(
 'vector-action-protect' => 'Beveiligen',
 'vector-action-undelete' => 'Terugplaatsen',
 'vector-action-unprotect' => 'Beveiliging wijzigen',
-'vector-simplesearch-preference' => 'Verbeterde zoeksuggesties inschakelen (alleen voor het uiterlijk Vector)',
+'vector-simplesearch-preference' => 'Vereenvoudigd zoeken inschakelen (alleen voor het uiterlijk Vector)',
 'vector-view-create' => 'Aanmaken',
 'vector-view-edit' => 'Bewerken',
 'vector-view-history' => 'Geschiedenis weergeven',
@@ -730,10 +733,11 @@ Probeer het over een aantal minuten opnieuw.',
 Bewerken is 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 en is beveiligd om misbruik te voorkomen.',
+'protectedinterface' => "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.
+Om vertalingen voor alle wiki's toe te voegen of te wijzigen, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
 'editinginterface' => "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.
-Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen.
-Overweeg voor vertalingen om [//translatewiki.net/wiki/Main_Page?setlang=nl translatewiki.net] te gebruiken, het vertaalproject voor MediaWiki.",
+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.",
 '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",
@@ -759,7 +763,7 @@ De opgegeven reden is "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''U bent nu afgemeld.'''
 
-U kunt {{SITENAME}} nu anoniem gebruiken of weer [[Special:UserLogin|aanmelden]] als dezelfde of een andere gebruiker.
+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.
@@ -1033,7 +1037,7 @@ Als u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special
 U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.',
 'noarticletext-nopermission' => 'Deze pagina bevat geen tekst.
 U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s of
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>.',
+<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.
@@ -1306,7 +1310,8 @@ 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-reason-dropdown' => '* Veel voorkomende redenen voor verwijderen
 ** Auteursrechtenschending
-** Onbetamelijke persoonlijke gegevens
+** Onbetamelijke reactie of persoonlijke gegevens
+** Onbetamelijke gebruikersnaam
 ** Potentieel lasterlijke gegevens',
 'revdelete-otherreason' => 'Andere reden:',
 'revdelete-reasonotherlist' => 'Andere reden',
@@ -1407,8 +1412,6 @@ Probeer een andere zoekopdracht.',
 'search-interwiki-caption' => 'Zusterprojecten',
 'search-interwiki-default' => '$1 resultaten:',
 'search-interwiki-more' => '(meer)',
-'search-mwsuggest-enabled' => 'met suggesties',
-'search-mwsuggest-disabled' => 'geen suggesties',
 'search-relatedarticle' => 'Gerelateerd',
 'mwsuggest-disable' => 'Suggesties via AJAX uitschakelen',
 'searcheverything-enable' => 'In alle naamruimten zoeken',
@@ -1508,7 +1511,7 @@ Hier volgt een willekeurig gegenereerde waarde die u kunt gebruiken: $1',
 'timezoneregion-indian' => 'Indische Oceaan',
 'timezoneregion-pacific' => 'Stille Oceaan',
 'allowemail' => 'E-mail van andere gebruikers toestaan',
-'prefs-searchoptions' => 'Zoekinstellingen',
+'prefs-searchoptions' => 'Zoeken',
 'prefs-namespaces' => 'Naamruimten',
 'defaultns' => 'Anders in de volgende naamruimten zoeken:',
 'default' => 'standaard',
@@ -1760,7 +1763,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'recentchangeslinked-toolbox' => 'Verwante wijzigingen',
 'recentchangeslinked-title' => 'Wijzigingen verwant aan "$1"',
 'recentchangeslinked-noresult' => "Er zijn in de opgegeven periode geen bewerkingen geweest op de pagina's waarheen vanaf hier verwezen wordt.",
-'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of vanaf pagina's in een aangegeven pagina een categorie.
+'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",
@@ -1948,7 +1951,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-internal' => 'Er is een onbekende fout opgetreden in het opslagbackend "$1".',
 'backend-fail-contenttype' => 'Het inhoudstype van het bestand om in de opslag "$1" op te slaan kon niet bepaald worden.',
 'backend-fail-batchsize' => 'Taak met $1 {{PLURAL:$1|bestandshandeling|bestandshandelingen}} in het opslagbackend; de limiet is $2 {{PLURAL:$2|handeling|handelingen}}.',
-'backend-fail-usable' => 'Het was niet mogelijk naar het bestand $1 te schrijven vanwege onvoldoende rechten of niet-aanwezige mappen of containers.',
+'backend-fail-usable' => 'Het was niet mogelijk naar het bestand $1 te schrijven of eruit te lezen vanwege onvoldoende rechten of niet-aanwezige mappen of containers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Het was niet mogelijk een verbinding te maken met de journaldatabase voor het opslagbackend "$1".',
@@ -2085,6 +2088,7 @@ U kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].',
 'shared-repo' => 'een gedeelde mediadatabank',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => "/ * De CSS die hier geplaatst wordt, wordt opgenomen in de bestandsbeschrijvingspagina en wordt ook opgenomen op externe wiki's (via externe repositories) * /",
+'upload-disallowed-here' => 'U kunt deze afbeelding helaas niet overschrijven.',
 
 # File reversion
 'filerevert' => '$1 terugdraaien',
@@ -2795,7 +2799,7 @@ Zie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.',
 'ipblocklist-empty' => 'De blokkeerlijst is leeg.',
 'ipblocklist-no-results' => 'Dit IP-adres of deze gebruikersnaam is niet geblokkeerd.',
 'blocklink' => 'blokkeren',
-'unblocklink' => 'deblokkeren',
+'unblocklink' => 'blokkade opheffen',
 'change-blocklink' => 'blokkade wijzigen',
 'contribslink' => 'bijdragen',
 'emaillink' => 'e-mail verzenden',
@@ -3077,7 +3081,6 @@ Een tijdelijke map is niet aanwezig.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript testen',
-'javascripttest-disabled' => 'Deze functie is uitgeschakeld in deze wiki.',
 'javascripttest-title' => 'Tests uitvoeren voor $1',
 'javascripttest-pagetext-noframework' => 'Deze pagina is gereserveerd voor het uitvoeren van JavaScripttesten.',
 'javascripttest-pagetext-unknownframework' => 'Onbekend testframework "$1".',
@@ -3242,10 +3245,10 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-authors' => 'Totaal aantal verschillende auteurs',
 'pageinfo-recent-edits' => 'Recent aantal bewerkingen (binnen de afgelopen $1).',
 'pageinfo-recent-authors' => 'Recent aantal verschillende auteurs',
-'pageinfo-restriction' => 'Paginabeveiliging (<code>$1</code>)',
 '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-toolboxlink' => 'Paginagegevens',
 
 # Skin names
 'skinname-standard' => 'Klassiek',
@@ -3300,6 +3303,7 @@ $1',
 'file-info-size-pages' => "$1 × $2 pixels, bestandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|pagina|pagina's}}",
 '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',
 'show-big-image' => 'Volledige resolutie',
 'show-big-image-preview' => 'Grootte van deze voorvertoning: $1.',
 'show-big-image-other' => 'Andere {{PLURAL:$2|resolutie|resoluties}}: $1.',
@@ -3309,6 +3313,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.''",
 
 # Special:NewFiles
 'newimages' => 'Nieuwe bestanden',
@@ -3825,6 +3831,7 @@ 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]',
 'scarytranscludetoolong' => '[De URL is te lang]',
 
 # Delete conflict
@@ -4119,6 +4126,10 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'feedback-bugcheck' => 'Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.',
 'feedback-bugnew' => 'Heb ik gecontroleerd; nieuw probleem melden',
 
+# Search suggestions
+'searchsuggest-search' => 'Zoeken',
+'searchsuggest-containing' => 'bevat...',
+
 # API errors
 'api-error-badaccess-groups' => 'U mag geen bestanden uploaden in deze wiki.',
 'api-error-badtoken' => 'Interne fout: het token klopt niet.',
index 270bd02..663aa93 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** ‪Nederlands (informeel)‬ (‪Nederlands (informeel)‬)
+/** Nederlands (informeel)‎ (Nederlands (informeel)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -23,11 +23,11 @@ $1',
 
 'badaccess-group0' => 'Je hebt geen rechten om de gevraagde handeling uit te voeren.',
 
-'youhavenewmessages'      => 'Je hebt $1 ($2).',
+'youhavenewmessages' => 'Je hebt $1 ($2).',
 'youhavenewmessagesmulti' => 'Je hebt nieuwe berichten op $1',
 
 # Main script and global functions
-'nosuchactiontext'  => 'De opdracht in de URL is ongeldig.
+'nosuchactiontext' => 'De opdracht in de URL is ongeldig.
 Mogelijk heb je een typefout gemaakt in de URL of een onjuiste verwijzing gevolgd.
 Het kan ook wijzen op een fout in de software van {{SITENAME}}.',
 'nospecialpagetext' => '<strong>Je hebt een onbestaande speciale pagina opgevraagd.</strong>
@@ -35,7 +35,7 @@ Het kan ook wijzen op een fout in de software van {{SITENAME}}.',
 Een lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].',
 
 # General errors
-'missing-article'     => 'In de database is geen inhoud aangetroffen voor de pagina "$1" die er wel zou moeten zijn ($2).
+'missing-article' => 'In de database is geen inhoud aangetroffen voor de pagina "$1" die er wel zou moeten zijn ($2).
 
 Dit kan voorkomen als je een verouderde verwijzing naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.
 
@@ -44,36 +44,36 @@ Maak hiervan melding bij een [[Special:ListUsers/sysop|systeembeheerder]] van {{
 'actionthrottledtext' => 'Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt.
 De limiet is overschreden.
 Probeer het over een aantal minuten opnieuw.',
-'viewsourcetext'      => 'Je kunt de brontekst van deze pagina bekijken en kopiëren:',
-'editinginterface'    => "'''Waarschuwing:''' Je bewerkt een pagina die gebruikt wordt door de software.
+'viewsourcetext' => 'Je kunt de brontekst van deze pagina bekijken en kopiëren:',
+'editinginterface' => "'''Waarschuwing:''' Je bewerkt een pagina die gebruikt wordt door de software.
 Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen.
 Overweeg voor vertalingen om [//translatewiki.net/wiki/Main_Page?setlang=nl translatewiki.net] te gebruiken, het vertalingsproject voor MediaWiki.",
-'namespaceprotected'  => "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
+'namespaceprotected' => "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
 
 # Login and logout pages
-'logouttext'                 => "'''Je bent nu afgemeld.'''
+'logouttext' => "'''Je bent nu afgemeld.'''
 
 Je kunt {{SITENAME}} nu anoniem gebruiken of weer [[Special:UserLogin|aanmelden]] als dezelfde of een andere gebruiker.
 Mogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van uw browser leegt.",
-'welcomecreation'            => '== Welkom, $1! ==
+'welcomecreation' => '== Welkom, $1! ==
 Je gebruiker is geregistreerd.
 Vergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.',
-'yourpasswordagain'          => 'Geef je wachtwoord opnieuw in:',
-'yourdomainname'             => 'Je domein:',
-'externaldberror'            => 'Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming uw externe gebruiker bij te werken.',
-'loginprompt'                => 'Je moet cookies ingeschakeld hebben om je te kunnen aanmelden bij {{SITENAME}}.',
-'gotaccount'                 => "Heb je al een gebruikersnaam? '''$1'''.",
-'nocookiesnew'               => 'De gebruiker is geregistreerd, maar niet aangemeld.
+'yourpasswordagain' => 'Geef je wachtwoord opnieuw in:',
+'yourdomainname' => 'Je domein:',
+'externaldberror' => 'Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming uw externe gebruiker bij te werken.',
+'loginprompt' => 'Je moet cookies ingeschakeld hebben om je te kunnen aanmelden bij {{SITENAME}}.',
+'gotaccount' => "Heb je al een gebruikersnaam? '''$1'''.",
+'nocookiesnew' => 'De gebruiker is geregistreerd, maar niet aangemeld.
 {{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.
 Schakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.',
-'nocookieslogin'             => '{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.
+'nocookieslogin' => '{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.
 Cookies zijn uitgeschakeld in je browser.
 Schakel deze optie aan en probeer het opnieuw.',
-'noname'                     => 'Je hebt geen geldige gebruikersnaam opgegeven.',
-'loginsuccess'               => "'''Je bent nu aangemeld bij {{SITENAME}} als \"\$1\".'''",
-'nouserspecified'            => 'Je dient een gebruikersnaam op te geven.',
-'password-name-match'        => 'Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.',
-'passwordremindertext'       => 'Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek
+'noname' => 'Je hebt geen geldige gebruikersnaam opgegeven.',
+'loginsuccess' => "'''Je bent nu aangemeld bij {{SITENAME}} als \"\$1\".'''",
+'nouserspecified' => 'Je dient een gebruikersnaam op te geven.',
+'password-name-match' => 'Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.',
+'passwordremindertext' => 'Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek
 gedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}
 ($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker "$2":
 "$3". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw
@@ -83,36 +83,36 @@ Je tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.
 Als iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het
 wachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht
 dan en blijf je bestaande wachtwoord gebruiken.',
-'noemailcreate'              => 'Je moet een geldig e-mailadres opgeven',
-'passwordsent'               => 'Het wachtwoord is verzonden naar het e-mailadres voor "$1".
+'noemailcreate' => 'Je moet een geldig e-mailadres opgeven',
+'passwordsent' => 'Het wachtwoord is verzonden naar het e-mailadres voor "$1".
 Meld je aan nadat je het hebt ontvangen.',
-'blocked-mailpassword'       => 'Je IP-adres is geblokkeerd voor het maken van wijzigingen.
+'blocked-mailpassword' => 'Je IP-adres is geblokkeerd voor het maken van wijzigingen.
 Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.',
-'eauthentsent'               => 'Er is een bevestigingse-mail naar het opgegeven e-mailadres gezonden.
+'eauthentsent' => 'Er is een bevestigingse-mail naar het opgegeven e-mailadres gezonden.
 Volg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is.
 Tot die tijd kunnen er geen e-mails naar het e-mailadres gezonden worden.',
 'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag {{PLURAL:$1|al 1 gebruiker|al $1 gebruikers}} geregistreerd, wat het maximale aantal in deze periode is.
 Daarom kun je als vanaf jouw IP-adres op dit moment geen nieuwe gebruiker registreren.',
-'emailauthenticated'         => 'Je e-mailadres is bevestigd op $2 om $3.',
-'emailnotauthenticated'      => 'Je e-mailadres is <strong>niet bevestigd</strong>.
+'emailauthenticated' => 'Je e-mailadres is bevestigd op $2 om $3.',
+'emailnotauthenticated' => 'Je e-mailadres is <strong>niet bevestigd</strong>.
 Je ontvangt geen e-mail voor de onderstaande functies.',
-'noemailprefs'               => 'Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.',
-'emailconfirmlink'           => 'Bevestig je e-mailadres',
-'createaccount-text'         => 'Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam "$2" en jouw e-mailadres.
+'noemailprefs' => 'Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.',
+'emailconfirmlink' => 'Bevestig je e-mailadres',
+'createaccount-text' => 'Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam "$2" en jouw e-mailadres.
 Het wachtwoord voor "$2" is "$3".
 Meld je aan en wijzig je wachtwoord.
 
 Negeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.',
-'login-throttled'            => 'Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.
+'login-throttled' => 'Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.
 Wacht even voordat je het opnieuw probeert.',
-'suspicious-userlogout'      => 'Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.',
+'suspicious-userlogout' => 'Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.',
 
 # Change password dialog
-'resetpass_announce'      => 'Je bent aangemeld met een tijdelijke code die je per e-mail is toegezonden.
+'resetpass_announce' => 'Je bent aangemeld met een tijdelijke code die je per e-mail is toegezonden.
 Voer een nieuw wachtwoord in om het aanmelden te voltooien:',
-'resetpass_success'       => 'Je wachtwoord is gewijzigd.
+'resetpass_success' => 'Je wachtwoord is gewijzigd.
 Bezig met aanmelden…',
-'resetpass-no-info'       => 'Je dient aangemeld zijn voordat je deze pagina kunt gebruiken.',
+'resetpass-no-info' => 'Je dient aangemeld zijn voordat je deze pagina kunt gebruiken.',
 'resetpass-wrong-oldpass' => 'Het huidige of tijdelijke wachtwoord is ongeldig.
 Mogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.',
 
@@ -120,16 +120,16 @@ Mogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aan
 'sig_tip' => 'Je handtekening met datum en tijd',
 
 # Edit pages
-'anoneditwarning'                  => "'''Waarschuwing:''' je bent niet aangemeld.
+'anoneditwarning' => "'''Waarschuwing:''' je bent niet aangemeld.
 Je IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.",
-'anonpreviewwarning'               => "''Je bent niet aangemeld.''
+'anonpreviewwarning' => "''Je bent niet aangemeld.''
 ''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''",
-'missingsummary'                   => "'''Herinnering:''' je hebt geen samenvatting opgegeven voor je bewerking.
+'missingsummary' => "'''Herinnering:''' je hebt geen samenvatting opgegeven voor je bewerking.
 Als je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
-'missingcommenttext'               => 'Plaats je opmerking hieronder.',
-'missingcommentheader'             => "'''Let op:''' Je hebt geen onderwerp/kop voor deze opmerking opgegeven.
+'missingcommenttext' => 'Plaats je opmerking hieronder.',
+'missingcommentheader' => "'''Let op:''' Je hebt geen onderwerp/kop voor deze opmerking opgegeven.
 Als je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp/kop opgeslagen.",
-'blockedtext'                      => '\'\'\'Je gebruiker of IP-adres is geblokkeerd.\'\'\'
+'blockedtext' => '\'\'\'Je gebruiker of IP-adres is geblokkeerd.\'\'\'
 
 De blokkade is uitgevoerd door $1.
 De opgegeven reden is \'\'$2\'\'.
@@ -142,7 +142,7 @@ Je kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beh
 Je kunt geen gebruik maken van de functie "Deze gebruiker e-mailen", tenzij je een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.
 Je huidige IP-adres is $3 en het blokkadenummer is #$5.
 Vermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.',
-'autoblockedtext'                  => 'Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.
+'autoblockedtext' => 'Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.
 De opgegeven reden is:
 
 :\'\'$2\'\'
@@ -157,169 +157,168 @@ Je kunt geen gebruik maken van de functie "Deze gebruiker e-mailen", tenzij je e
 
 Je huidige IP-adres is $3 en het blokkadenummer is #$5.
 Vermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.',
-'whitelistedittext'                => "Je moet $1 om pagina's te bewerken.",
-'confirmedittext'                  => 'Je moet je e-mailadres bevestigen voor je kunt bewerken.
+'whitelistedittext' => "Je moet $1 om pagina's te bewerken.",
+'confirmedittext' => 'Je moet je e-mailadres bevestigen voor je kunt bewerken.
 Voer je e-mailadres in en bevestig het via [[Special:Preferences|je voorkeuren]].',
-'nosuchsectiontext'                => 'Je probeerde een subkopje te bewerken dat niet bestaat.
+'nosuchsectiontext' => 'Je probeerde een subkopje te bewerken dat niet bestaat.
 Wellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.',
-'loginreqpagetext'                 => "Je moet je $1 om andere pagina's te kunnen bekijken.",
-'newarticletext'                   => "Deze pagina bestaat niet.
+'loginreqpagetext' => "Je moet je $1 om andere pagina's te kunnen bekijken.",
+'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 je browser als je 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 hetzij geen gebruikersnaam heeft, hetzij deze niet gebruikt.
 Daarom wordt het IP-adres ter identificatie gebruikt.
 Het is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.
 Mogelijk ontvang je hier berichten die niet voor je bedoeld zijn.
 Als je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
-'noarticletext'                    => 'Deze pagina bevat geen tekst.
+'noarticletext' => 'Deze pagina bevat geen tekst.
 Je kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.',
-'noarticletext-nopermission'       => 'Deze pagina bevat geen tekst.
+'noarticletext-nopermission' => 'Deze pagina bevat geen tekst.
 Je kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s of
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>.',
-'userpage-userdoesnotexist'        => 'Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker "<nowiki>$1</nowiki>").
+'userpage-userdoesnotexist' => 'Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker "<nowiki>$1</nowiki>").
 Controleer of je deze pagina wel wilt aanmaken/bewerken.',
-'clearyourcache'                   => "'''Let op! Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.'''
-
-'''Mozilla / Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Huidige pagina vernieuwen'' klikt of typ ''Ctrl-F5'' of ''Ctrl-R'' (''Command-R'' op eenMac);
-'''Konqueror: '''klik ''Reload'' of typ ''F5;''
-'''Opera:''' leeg je cache in ''Extra → Voorkeuren;''
-'''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of type ''Ctrl-F5.''",
-'usercssyoucanpreview'             => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
-'userjsyoucanpreview'              => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
-'usercsspreview'                   => "'''Dit is alleen een voorvertoning van je persoonlijke CSS.
+'clearyourcache' => "'''Let op!''' Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.
+* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)
+* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)
+* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''
+* '''Opera:''' leeg je cache in ''Extra → Voorkeuren''",
+'usercssyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
+'userjsyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
+'usercsspreview' => "'''Dit is alleen een voorvertoning van je persoonlijke CSS.
 Deze is nog niet opgeslagen!'''",
-'userjspreview'                    => "'''Let op: je test nu je persoonlijke JavaScript.'''
+'userjspreview' => "'''Let op: je test nu je persoonlijke JavaScript.'''
 '''De pagina is niet opgeslagen!'''",
-'userinvalidcssjstitle'            => "'''Waarschuwing:''' er is geen skin \"\$1\".
+'userinvalidcssjstitle' => "'''Waarschuwing:''' er is geen skin \"\$1\".
 Let op: je eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.",
-'previewnote'                      => "'''Let op: dit is een controlepagina; je tekst is niet opgeslagen!'''",
-'previewconflict'                  => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.',
-'session_fail_preview'             => "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.
+'previewnote' => "'''Let op: dit is een controlepagina; je tekst is niet opgeslagen!'''",
+'previewconflict' => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.',
+'session_fail_preview' => "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.
 Probeer het opnieuw.
 Als het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
-'session_fail_preview_html'        => "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''
+'session_fail_preview_html' => "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''
 
 ''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''
 
 '''Als dit een legitieme bewerking is, probeer het dan opnieuw.
 Als het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
-'token_suffix_mismatch'            => "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.
+'token_suffix_mismatch' => "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.
 De bewerking is geweigerd om verminking van de paginatekst te voorkomen.
 Dit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.'''",
-'explainconflict'                  => "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.
+'explainconflict' => "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.
 In het bovenste deel van het venster staat de tekst van de huidige pagina.
 Je bewerking staat in het onderste gedeelte.
 Je dient je bewerkingen in te voegen in de bestaande tekst.
 '''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.",
-'yourtext'                         => 'Je tekst',
-'nonunicodebrowser'                => "'''WAARSCHUWING: Je browser kan niet goed overweg met unicode.
+'yourtext' => 'Je tekst',
+'nonunicodebrowser' => "'''WAARSCHUWING: Je browser kan niet goed overweg met unicode.
 Hiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII karakters worden in het bewerkingsveld weergegeven als hexadecimale codes.'''",
-'editingold'                       => "'''WAARSCHUWING!
+'editingold' => "'''WAARSCHUWING!
 Je bewerkt een oude versie van deze pagina.
 Als je je bewerking opslaat, gaan alle wijzigingen die na deze versie gemaakt zijn verloren.'''",
-'copyrightwarning'                 => "Opgelet: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).
+'copyrightwarning' => "Opgelet: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).
 Als je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor ‘Pagina opslaan’.<br />
 Hierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />
 '''GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAAR TOESTEMMING VOOR HEBT!'''",
-'copyrightwarning2'                => "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.
+'copyrightwarning2' => "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.
 Als je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />
 Je belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).
 '''GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ JE DAARVOOR TOESTEMMING HEBT!'''",
-'longpageerror'                    => "'''FOUT: de tekst die je hebt toegevoegd is $1 kilobyte groot, wat groter is dan het maximum van $2 kilobyte.
+'longpageerror' => "'''FOUT: de tekst die je hebt toegevoegd is $1 kilobyte groot, wat groter is dan het maximum van $2 kilobyte.
 Opslaan is niet mogelijk.'''",
-'readonlywarning'                  => "'''WAARSCHUWING: De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud, dus je kunt deze nu niet opslaan.
+'readonlywarning' => "'''WAARSCHUWING: De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud, dus je kunt deze nu niet opslaan.
 Het is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.'''
 
 Een beheerder heeft de database geblokkeerd om de volgende reden: $1",
-'nocreatetext'                     => "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.
+'nocreatetext' => "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.
 Je kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].",
-'nocreate-loggedin'                => "Je hebt geen rechten om nieuwe pagina's te maken.",
-'permissionserrorstext'            => 'Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:',
+'nocreate-loggedin' => "Je hebt geen rechten om nieuwe pagina's te maken.",
+'permissionserrorstext' => 'Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:',
 'permissionserrorstext-withaction' => 'Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:',
-'recreate-moveddeleted-warn'       => "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''
+'recreate-moveddeleted-warn' => "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''
 
 Overweeg of het terecht is dat je verder werkt aan deze pagina.
 Voor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
-'edit-no-change'                   => 'Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.',
+'edit-no-change' => 'Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.',
 
 # Revision deletion
-'rev-deleted-text-unhide'     => "Deze versie van de pagina is '''verwijderd'''.
+'rev-deleted-text-unhide' => "Deze versie van de pagina is '''verwijderd'''.
 Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].
 Als beheerder kun je  [$1 deze versie bekijken] als je wil.",
-'rev-suppressed-text-unhide'  => "Deze paginaversie is '''onderdrukt'''.
+'rev-suppressed-text-unhide' => "Deze paginaversie is '''onderdrukt'''.
 Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].
 Als beheerder kun je [$1 de verschillen bekijken] als je wil.",
-'rev-deleted-text-view'       => "Deze bewerking is '''verwijderd'''.
+'rev-deleted-text-view' => "Deze bewerking is '''verwijderd'''.
 Als beheerder kun je deze zien;
 er kunnen details aanwezig zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-'rev-suppressed-text-view'    => "Deze paginaversie is '''onderdrukt'''.
+'rev-suppressed-text-view' => "Deze paginaversie is '''onderdrukt'''.
 Als beheerder kun je deze bekijken;
 achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].",
-'rev-deleted-no-diff'         => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.
+'rev-deleted-no-diff' => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.
 Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
-'rev-suppressed-no-diff'      => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
-'rev-deleted-unhide-diff'     => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.
+'rev-suppressed-no-diff' => "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
+'rev-deleted-unhide-diff' => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.
 Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].
 Als beheerder kun je [$1 de verschillen bekijken] als je wil.",
-'rev-suppressed-unhide-diff'  => "Een van de versies in deze verschillen is '''onderdrukt'''.
+'rev-suppressed-unhide-diff' => "Een van de versies in deze verschillen is '''onderdrukt'''.
 Achtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].
 Als beheerder kunt je [$1 deze versie bekijken] als je wil.",
-'rev-deleted-diff-view'       => "Een van de versies voor de verschillen die je hebt opgevraagd, is '''verwijderd'''.
+'rev-deleted-diff-view' => "Een van de versies voor de verschillen die je hebt opgevraagd, is '''verwijderd'''.
 Jij kunt deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderlogboek].",
-'rev-suppressed-diff-view'    => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd, is '''onderdrukt'''.
+'rev-suppressed-diff-view' => "Een van de bewerkingen voor de verschillen die je hebt opgevraagd, is '''onderdrukt'''.
 Als beheerder kun je deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
-'revdelete-nooldid-text'      => 'Je hebt geen doelversie(s) voor deze handeling opgegeven, de aangegeven versie bestaat niet of je probeert de laatste versie te verbergen.',
-'revdelete-nologtype-text'    => 'Je hebt geen logboektype opgegeven om deze handeling op uit te voeren.',
-'revdelete-nologid-text'      => 'Je hebt ofwel geen doellogboekregel opgegeven of de aangegeven logboekregel bestaat niet.',
+'revdelete-nooldid-text' => 'Je hebt geen doelversie(s) voor deze handeling opgegeven, de aangegeven versie bestaat niet of je probeert de laatste versie te verbergen.',
+'revdelete-nologtype-text' => 'Je hebt geen logboektype opgegeven om deze handeling op uit te voeren.',
+'revdelete-nologid-text' => 'Je hebt ofwel geen doellogboekregel opgegeven of de aangegeven logboekregel bestaat niet.',
 'revdelete-show-file-confirm' => 'Weet je zeker dat u de verwijderde versie van het bestand "<nowiki>$1</nowiki>" van $2 om $3 wilt bekijken?',
-'revdelete-confirm'           => 'Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].',
-'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-confirm' => 'Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].',
+'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".
 Je 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 bij het wijzigen van het object van $1 om $2 uur: dit object is gemarkeerd als "beschermd".
 Je hebt geen toegang tot dit object.',
-'revdelete-only-restricted'   => 'Er is een fout opgetreden bij het verbergen van het item van $1, $2: je 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 bij het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.',
 
 # History merging
 'mergehistory-header' => 'Via deze pagina kun je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen.
 Zorg dat deze wijziging de geschiedenisdoorlopendheid van de pagina behoudt.',
 
 # Search results
-'searchsubtitle'        => 'Je zocht naar \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|pagina\'s die beginnen met "$1"]] {{int:pipe-separator}}[[Special:WhatLinksHere/$1|pagina\'s die verwijzen naar "$1"]])',
+'searchsubtitle' => 'Je zocht naar \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|pagina\'s die beginnen met "$1"]] {{int:pipe-separator}}[[Special:WhatLinksHere/$1|pagina\'s die verwijzen naar "$1"]])',
 'searchsubtitleinvalid' => "Je hebt gezocht naar '''$1'''",
-'search-suggest'        => 'Bedoelde je: $1',
-'nonefound'             => "'''Opmerking''': standaard worden niet alle naamruimten doorzocht.
+'search-suggest' => 'Bedoelde je: $1',
+'nonefound' => "'''Opmerking''': standaard worden niet alle naamruimten doorzocht.
 Als je in uw zoekopdracht als voorvoegsel \"''all:''\" gebruikt worden alle pagina's doorzocht (inclusief overlegpagina's, sjablonen, enzovoort).
 Je kunt ook een naamruimte als voorvoegsel gebruiken.",
-'searchdisabled'        => 'Zoeken in {{SITENAME}} is niet mogelijk.
+'searchdisabled' => 'Zoeken in {{SITENAME}} is niet mogelijk.
 Je kunt gebruik maken van Google.
 De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
 
 # Preferences page
-'prefsnologintext'           => 'Je moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld]</span> zijn om je voorkeuren te kunnen instellen.',
+'prefsnologintext' => 'Je moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld]</span> zijn om je voorkeuren te kunnen instellen.',
 'prefs-help-watchlist-token' => 'Door hier een geheime sleutel in te vullen wordt een RSS-feed voor je volglijst aangemaakt.
 Iedereen die deze sleutel kent kan je volglijst lezen, dus kies een veilige sleutel.
 Hier volgt een willekeurig gegenereerde waarde die je kunt gebruiken: $1',
-'savedprefs'                 => 'Je voorkeuren zijn opgeslagen.',
-'prefs-reset-intro'          => 'Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.
+'savedprefs' => 'Je voorkeuren zijn opgeslagen.',
+'prefs-reset-intro' => 'Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.
 Deze handeling kan niet ongedaan gemaakt worden.',
-'youremail'                  => 'Je e-mailadres:',
-'prefs-help-signature'       => 'Reacties op de overlegpagina\'s worden meestal ondertekend met "<nowiki>~~~~</nowiki>".
+'youremail' => 'Je e-mailadres:',
+'prefs-help-signature' => 'Reacties op de overlegpagina\'s worden meestal ondertekend met "<nowiki>~~~~</nowiki>".
 De tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.',
-'badsiglength'               => 'Uw ondertekening is te lang.
+'badsiglength' => 'Uw ondertekening is te lang.
 Deze moet minder dan $1 {{PLURAL:$1|karakters|karakters}} bevatten.',
-'prefs-help-realname'        => 'Echte naam is optioneel, als je deze opgeeft kan deze naam gebruikt worden om je erkenning te geven voor uw werk.',
-'prefs-help-email'           => 'E-mailadres is optioneel, maar maakt het mogelijk om je jouw wachtwoord te e-mailen als je het bent vergeten.
+'prefs-help-realname' => 'Echte naam is optioneel, als je deze opgeeft kan deze naam gebruikt worden om je erkenning te geven voor uw werk.',
+'prefs-help-email' => 'E-mailadres is optioneel, maar maakt het mogelijk om je jouw wachtwoord te e-mailen als je het bent vergeten.
 Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een verwijzing op je gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.',
 
 # User rights
-'userrights-groups-help'      => 'Je kunt de groepen wijzigen waar deze gebruiker lid van is.
+'userrights-groups-help' => 'Je kunt de groepen wijzigen waar deze gebruiker lid van is.
 * Een aangekruist vakje betekent dat de gebruiker lid is van de groep.
 * Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.
 * Een "*" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.',
-'userrights-no-interwiki'     => "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
-'userrights-nologin'          => 'Je moet jezelf [[Special:UserLogin|aanmelden]] met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.',
-'userrights-notallowed'       => 'Je hebt geen rechten om gebruikersrechten toe te wijzen.',
-'userrights-changeable-col'   => 'Groepen die je kunt beheren',
+'userrights-no-interwiki' => "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
+'userrights-nologin' => 'Je moet jezelf [[Special:UserLogin|aanmelden]] met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.',
+'userrights-notallowed' => 'Je hebt geen rechten om gebruikersrechten toe te wijzen.',
+'userrights-changeable-col' => 'Groepen die je kunt beheren',
 'userrights-unchangeable-col' => 'Groepen die je niet kunt beheren',
 
 # Recent changes linked
@@ -327,41 +326,41 @@ Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via e
 Pagina's die op [[Special:Watchlist|je volglijst]] staan worden '''vet''' weergegeven.",
 
 # Upload
-'uploadnologintext'           => 'Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.',
-'empty-file'                  => 'Het bestand dat je probeerde te uploaden had geen inhoud.',
-'file-too-large'              => 'Het bestand dat je probeerde te uploaden was te groot.',
-'hookaborted'                 => 'De wijziging die je probeerde te maken is afgebroken door een uitbreidingshook.',
-'emptyfile'                   => 'Het bestand dat je hebt geüpload lijkt leeg te zijn.
+'uploadnologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.',
+'empty-file' => 'Het bestand dat je probeerde te uploaden had geen inhoud.',
+'file-too-large' => 'Het bestand dat je probeerde te uploaden was te groot.',
+'hookaborted' => 'De wijziging die je probeerde te maken is afgebroken door een uitbreidingshook.',
+'emptyfile' => 'Het bestand dat je hebt geüpload lijkt leeg te zijn.
 Dit zou kunnen komen door een typefout in de bestandsnaam.
 Ga na of je dit bestand werkelijk bedoelde te uploaden.',
-'fileexists'                  => "Er bestaat al een bestand met deze naam.
-Controleer '''<tt>[[:$1]]</tt>''' als je niet zeker weet of je het huidige bestand wilt overschrijven.
-[[$1|thumb]]",
-'filepageexists'              => "De beschrijvingspagina voor dit bestand bestaat al op '''<tt>[[:$1]]</tt>''', maar er bestaat geen bestand met deze naam.
+'fileexists' => 'Er bestaat al een bestand met deze naam.
+Controleer <strong>[[:$1]]</strong> als je niet zeker weet of je 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 je hebt opgegeven zal niet op de beschrijvingspagina verschijnen.
-Bewerk de pagina handmatig om je beschrijving daar weer te geven. [[$1|miniatuur]]",
-'file-thumbnail-no'           => "De bestandsnaam begint met '''<tt>$1</tt>'''.
+Bewerk de pagina handmatig om je beschrijving daar weer te geven. [[$1|miniatuur]]',
+'file-thumbnail-no' => "De bestandsnaam begint met <strong>$1</strong>.
 Het lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.
 Als je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.
 Wijzig anders de bestandsnaam.",
-'fileexists-forbidden'        => 'Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.
+'fileexists-forbidden' => 'Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.
 Upload je bestand onder een andere naam.
 [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'Er bestaat al een bestand met deze naam bij de gedeelte bestanden.
 Als je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam.
 [[File:$1|thumb|center|$1]]',
-'file-deleted-duplicate'      => 'Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.
+'file-deleted-duplicate' => 'Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.
 Raadpleeg het verwijderingslogboek voordat je verder gaat.',
-'uploadfromurl-queued'        => 'Je upload is in de wachtrij geplaatst.',
-'filewasdeleted'              => 'Er is eerder een bestand met deze naam verwijderd.
+'uploadfromurl-queued' => 'Je upload is in de wachtrij geplaatst.',
+'filewasdeleted' => 'Er is eerder een bestand met deze naam verwijderd.
 Raadpleeg het $1 voordat je het opnieuw toevoegt.',
-'filename-bad-prefix'         => "De naam van het bestand dat je aan het uploaden bent begint met '''\"\$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.
+'filename-bad-prefix' => "De naam van het bestand dat je aan het uploaden bent begint met '''\"\$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.
 Kies een duidelijke naam voor je bestand.",
-'upload-success-msg'          => 'Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]',
-'upload-failure-msg'          => 'Er was een probleem met je upload van [$2]:
+'upload-success-msg' => 'Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]',
+'upload-failure-msg' => 'Er was een probleem met je upload van [$2]:
 
 $1',
-'upload-warning-msg'          => 'Er was een probleem met je upload van [$2].
+'upload-warning-msg' => 'Er was een probleem met je upload van [$2].
 Ga terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.',
 
 # img_auth script messages
@@ -370,7 +369,7 @@ Je server is niet ingesteld om deze informatie door te geven.
 Misschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.
 Zie https://www.mediawiki.org/wiki/Manual:Image_Authorization voor meer informatie.',
 'img-auth-nologinnWL' => 'Je bent niet aangemeld en "$1" staat niet op de witte lijst.',
-'img-auth-isdir'      => 'Je probeert de map "$1" te benaderen.
+'img-auth-isdir' => 'Je probeert de map "$1" te benaderen.
 Alleen toegang tot bestanden is toegestaan.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -387,12 +386,12 @@ Je kunt het misschien proberen als het minder druk is.',
 'filerevert-intro' => "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].",
 
 # File deletion
-'filedelete-intro'     => "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
+'filedelete-intro' => "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
 'filedelete-intro-old' => "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.",
 
 # Miscellaneous special pages
 'notargettext' => 'Je hebt niet opgegeven voor welke pagina of gebruiker u deze handeling wilt uitvoeren.',
-'nopagetext'   => 'De pagina die je wilt hernoemen bestaat niet.',
+'nopagetext' => 'De pagina die je wilt hernoemen bestaat niet.',
 
 # Book sources
 'booksources-text' => 'Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:',
@@ -402,28 +401,28 @@ Je kunt het misschien proberen als het minder druk is.',
 Je kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).',
 
 # E-mail user
-'mailnologintext'      => 'Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.',
-'emailpagetext'        => 'Via dit formulier kun je een e-mail aan deze gebruiker verzenden.
+'mailnologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.',
+'emailpagetext' => 'Via dit formulier kun je een e-mail aan deze gebruiker verzenden.
 Het e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt.
 De ontvanger kan dus direct naar je reageren.',
 'usermaildisabledtext' => 'Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki',
-'emailccsubject'       => 'Kopie van je bericht aan $1: $2',
-'emailsenttext'        => 'Je e-mail is verzonden.',
+'emailccsubject' => 'Kopie van je bericht aan $1: $2',
+'emailsenttext' => 'Je e-mail is verzonden.',
 
 # Watchlist
-'nowatchlist'          => 'Je volglijst is leeg.',
-'watchlistanontext'    => 'Om je volglijst te bekijken of te bewerken moet je je $1.',
-'watchnologintext'     => 'Je dient [[Special:UserLogin|aangemeld]] te zijn om je volglijst te bewerken.',
-'addedwatchtext'       => "De pagina \"[[:\$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].
+'nowatchlist' => 'Je volglijst is leeg.',
+'watchlistanontext' => 'Om je volglijst te bekijken of te bewerken moet je je $1.',
+'watchnologintext' => 'Je dient [[Special:UserLogin|aangemeld]] te zijn om je volglijst te bewerken.',
+'addedwatchtext' => "De pagina \"[[:\$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].
 Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op [[Special:Watchlist|je volglijst]] vermeld en worden '''vet''' weergegeven in de [[Special:RecentChanges|lijst van recente wijzigingen]].",
-'removedwatchtext'     => 'De pagina "[[:$1]]" is van [[Special:Watchlist|je volglijst]] verwijderd.',
-'watchnochange'        => "Geen van de pagina's op je volglijst is in deze periode bewerkt.",
-'watchlist-details'    => "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
+'removedwatchtext' => 'De pagina "[[:$1]]" is van [[Special:Watchlist|je volglijst]] verwijderd.',
+'watchnochange' => "Geen van de pagina's op je volglijst is in deze periode bewerkt.",
+'watchlist-details' => "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
 'wlheader-showupdated' => "* Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven",
-'watchlistcontains'    => "Er {{PLURAL:$1|staat 1 pagina|staan $1 pagina's}} op je volglijst.",
+'watchlistcontains' => "Er {{PLURAL:$1|staat 1 pagina|staan $1 pagina's}} op je volglijst.",
 
 'enotif_lastvisited' => 'Zie $1 voor alle wijzigingen sinds je laatste bezoek.',
-'enotif_body'        => 'Beste $WATCHINGUSERNAME,
+'enotif_body' => 'Beste $WATCHINGUSERNAME,
 
 De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR, zie $PAGETITLE_URL voor de huidige versie.
 
@@ -450,7 +449,7 @@ Feedback en andere assistentie:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
-'historywarning'    => "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
+'historywarning' => "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
 'confirmdeletetext' => 'Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis.
 Bevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].',
 
@@ -460,47 +459,47 @@ Je handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat u
 Ga een pagina terug, laad die pagina opnieuw en probeer het nog eens.',
 
 # Protect
-'protect-text'           => "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
+'protect-text' => "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
 'protect-locked-blocked' => "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent.
 Hier zijn de huidige instellingen voor de pagina '''$1''':",
-'protect-locked-access'  => "Je hebt geen rechten om het beveiligingsniveau te wijzigen.
+'protect-locked-access' => "Je hebt geen rechten om het beveiligingsniveau te wijzigen.
 Dit zijn de huidige instellingen voor de pagina '''$1''':",
-'protect-cantedit'       => 'Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.',
+'protect-cantedit' => 'Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.',
 
 # Undelete
-'undeletehistory'            => 'Als je een pagina terugplaatst, worden alle versies hersteld.
+'undeletehistory' => 'Als je een pagina terugplaatst, worden alle versies hersteld.
 Als er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.',
-'undeleterevision-missing'   => 'Ongeldige of missende versie.
+'undeleterevision-missing' => 'Ongeldige of missende versie.
 Mogelijk heb je een verkeerde verwijzing of is de versie hersteld of verwijderd uit het archief.',
 'undelete-show-file-confirm' => 'Weet je zeker dat je een verwijderde versie van het bestand "<nowiki>$1</nowiki>" van $2 om $3 wil bekijken?',
 
 # Block/unblock
-'ipb-needreblock'             => '$1 is al geblokkeerd.
+'ipb-needreblock' => '$1 is al geblokkeerd.
 Wil je de instellingen wijzigen?',
-'proxyblockreason'            => 'Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.
+'proxyblockreason' => 'Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.
 Neem contact op met je Internet-provider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.',
-'sorbsreason'                 => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.',
+'sorbsreason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.',
 'sorbs_create_account_reason' => 'Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.
 Je kunt geen gebruiker registreren.',
-'cant-block-while-blocked'    => 'Je kunt andere gebruikers niet blokkeren terwijl je zelf geblokkeerd bent.',
-'cant-see-hidden-user'        => "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.
+'cant-block-while-blocked' => 'Je kunt andere gebruikers niet blokkeren terwijl je zelf geblokkeerd bent.',
+'cant-see-hidden-user' => "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.
 Omdat je het recht 'hideuser' niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.",
-'ipbblocked'                  => 'Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent',
-'ipbnounblockself'            => 'Je mag jezelf niet deblokkeren',
+'ipbblocked' => 'Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent',
+'ipbnounblockself' => 'Je mag jezelf niet deblokkeren',
 
 # Developer tools
-'lockdbtext'        => "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
+'lockdbtext' => "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
 
 Bevestig dat je deze handeling wilt uitvoeren en dat je 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.
+'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 je deze handeling wil uitvoeren.",
-'locknoconfirm'     => 'Je hebt je keuze niet bevestigd via het vinkvakje.',
+'locknoconfirm' => 'Je hebt je keuze niet bevestigd via het vinkvakje.',
 'lockdbsuccesstext' => 'De database is afgesloten.<br />
 Vergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.',
 
 # Move page
-'movepagetext'            => "Door middel van het onderstaande formulier kun je een pagina hernoemen.
+'movepagetext' => "Door middel van het onderstaande formulier kun je 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.
@@ -512,18 +511,18 @@ Een pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaa
 '''WAARSCHUWING!'''
 Voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.
 Zorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
-'movepagetalktext'        => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':
+'movepagetalktext' => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':
 * De overlegpagina onder de nieuwe naam al bestaat;
 * Je het onderstaande vinkje deselecteert.",
-'moveuserpage-warning'    => "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.
+'moveuserpage-warning' => "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.
 Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
-'movenologintext'         => 'Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.',
-'movenotallowed'          => "Je hebt geen rechten om pagina's te hernoemen.",
-'movenotallowedfile'      => 'Je hebt geen rechten om bestanden te hernoemen.',
-'cant-move-user-page'     => "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
-'cant-move-to-user-page'  => 'Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.',
+'movenologintext' => 'Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.',
+'movenotallowed' => "Je hebt geen rechten om pagina's te hernoemen.",
+'movenotallowedfile' => 'Je hebt geen rechten om bestanden te hernoemen.',
+'cant-move-user-page' => "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
+'cant-move-to-user-page' => 'Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.',
 'cantmove-titleprotected' => 'Je kunt geen pagina naar deze paginaam hernoemen, omdat deze paginanaam beveiligd is tegen het aanmaken ervan.',
-'delete_and_move_text'    => '==Verwijdering nodig==
+'delete_and_move_text' => '==Verwijdering nodig==
 Onder de naam "[[:$1]]" bestaat al een pagina.
 Wil je deze verwijderen om plaats te maken voor de te hernoemen pagina?',
 
@@ -543,20 +542,20 @@ Ga naar [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//tran
 'importtext' => 'Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt, sla de uitvoer op je eigen systeem op, en voeg die daarna hier toe.',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'      => 'Jouw gebruikerspagina',
-'tooltip-pt-anonuserpage'  => 'Gebruikerspagina voor je IP-adres',
-'tooltip-pt-mytalk'        => 'Jouw overlegpagina',
-'tooltip-pt-watchlist'     => "Overzicht van pagina's die je volgt",
-'tooltip-pt-mycontris'     => 'Overzicht van je bijdragen',
-'tooltip-pt-login'         => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
-'tooltip-pt-anonlogin'     => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
-'tooltip-ca-edit'          => 'Je kunt deze pagina bewerken.
+'tooltip-pt-userpage' => 'Jouw gebruikerspagina',
+'tooltip-pt-anonuserpage' => 'Gebruikerspagina voor je IP-adres',
+'tooltip-pt-mytalk' => 'Jouw overlegpagina',
+'tooltip-pt-watchlist' => "Overzicht van pagina's die je volgt",
+'tooltip-pt-mycontris' => 'Overzicht van je bijdragen',
+'tooltip-pt-login' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
+'tooltip-pt-anonlogin' => 'Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht',
+'tooltip-ca-edit' => 'Je kunt deze pagina bewerken.
 Gebruik de voorbeeldweergaveknop alvorens te bewaren.',
-'tooltip-ca-viewsource'    => 'Deze pagina is beveiligd.
+'tooltip-ca-viewsource' => 'Deze pagina is beveiligd.
 Je kunt wel de broncode bekijken.',
 'tooltip-ca-nstab-special' => 'Dit is een speciale pagina, je kunt de pagina zelf niet bewerken',
-'tooltip-save'             => 'Je wijzigingen opslaan',
-'tooltip-watch'            => 'Deze pagina aan je volglijst toevoegen',
+'tooltip-save' => 'Je wijzigingen opslaan',
+'tooltip-watch' => 'Deze pagina aan je volglijst toevoegen',
 
 # Metadata
 'notacceptable' => 'De wikiserver kan de gegevens niet leveren in een vorm die je browser kan lezen.',
@@ -572,25 +571,25 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'mediawarning' => "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.",
 
 # E-mail address confirmation
-'confirmemail_noemail'      => 'Je hebt geen geldig e-mailadres ingegeven in je [[Special:Preferences|gebruikersvoorkeuren]].',
-'confirmemail_text'         => '{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken.
+'confirmemail_noemail' => 'Je hebt geen geldig e-mailadres ingegeven in je [[Special:Preferences|gebruikersvoorkeuren]].',
+'confirmemail_text' => '{{SITENAME}} eist bevestiging van je e-mailadres voordat je 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 je e-mailadres te bevestigen.',
-'confirmemail_pending'      => 'Er is al een bevestigingsbericht aan je verzonden.
+'confirmemail_pending' => 'Er is al een bevestigingsbericht aan je verzonden.
 Als je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.',
-'confirmemail_oncreate'     => 'Er is een bevestigingscode naar je e-mailadres verzonden.
+'confirmemail_oncreate' => 'Er is een bevestigingscode naar je e-mailadres verzonden.
 Deze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.',
-'confirmemail_sendfailed'   => '{{SITENAME}} kon je bevestigingscode niet verzenden.
+'confirmemail_sendfailed' => '{{SITENAME}} kon je bevestigingscode niet verzenden.
 Controleer je e-mailadres op ongeldige tekens.
 
 Het e-mailprogramma meldde: $1',
-'confirmemail_needlogin'    => 'Je moet $1 om je e-mailadres te bevestigen.',
-'confirmemail_success'      => 'Je e-mailadres is bevestigd.
+'confirmemail_needlogin' => 'Je moet $1 om je e-mailadres te bevestigen.',
+'confirmemail_success' => 'Je e-mailadres is bevestigd.
 Je kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.',
-'confirmemail_loggedin'     => 'Je e-mailadres is nu bevestigd.',
-'confirmemail_error'        => 'Er is iets verkeerd gegaan tijdens het opslaan van je bevestiging.',
-'confirmemail_body'         => 'Iemand, waarschijnlijk jijzelf, met het IP-adres $1,
+'confirmemail_loggedin' => 'Je e-mailadres is nu bevestigd.',
+'confirmemail_error' => 'Er is iets verkeerd gegaan tijdens het opslaan van je bevestiging.',
+'confirmemail_body' => 'Iemand, waarschijnlijk jijzelf, met het IP-adres $1,
 heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}.
 
 Open de volgende verwijzing in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:
@@ -617,23 +616,23 @@ De bevestigingscode vervalt op $4.',
 
 # Delete conflict
 'deletedwhileediting' => "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!",
-'confirmrecreate'     => "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:
+'confirmrecreate' => "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:
 : ''$2''
 Bevestig dat je de pagina opnieuw wilt aanmaken.",
 
 # Watchlist editor
-'watchlistedit-numitems'       => 'Je volglijst bevat {{PLURAL:$1|1 pagina|$1 pagina’s}}, zonder overlegpagina’s.',
-'watchlistedit-noitems'        => 'Je volglijst bevat geen pagina’s.',
+'watchlistedit-numitems' => 'Je volglijst bevat {{PLURAL:$1|1 pagina|$1 pagina’s}}, zonder overlegpagina’s.',
+'watchlistedit-noitems' => 'Je volglijst bevat geen pagina’s.',
 'watchlistedit-normal-explain' => 'Hieronder worden de pagina’s op je volglijst weergegeven.
 Klik op het vierkantje ernaast en daarna op "{{int:Watchlistedit-normal-submit}}" om een pagina te verwijderen.
 Je kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].',
-'watchlistedit-normal-done'    => 'Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina’s}} verwijderd van je volglijst:',
-'watchlistedit-raw-explain'    => 'Hieronder staan pagina’s op je volglijst.
+'watchlistedit-normal-done' => 'Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina’s}} verwijderd van je volglijst:',
+'watchlistedit-raw-explain' => 'Hieronder staan pagina’s op je volglijst.
 Je kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.
 Eén pagina per regel.
 Als je klaar bent, klik dan op "{{int:Watchlistedit-raw-submit}}".
 Je kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].',
-'watchlistedit-raw-done'       => 'Jr volglijst is bijgewerkt.',
+'watchlistedit-raw-done' => 'Jr volglijst is bijgewerkt.',
 
 # Special:Version
 'version-license-info' => 'MediaWiki is vrije software; je 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 - zo je wilt - enige latere versie.
index c41342f..5856cf6 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Norwegian Nynorsk (‪norsk (nynorsk)‬)
+/** Norwegian Nynorsk (norsk (nynorsk)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -99,74 +99,97 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#omdiriger', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__INGAINNHALDSLISTE__', '__INGENINNHOLDSLISTE__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__INKJEGALLERI__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ALLTIDINNHALDSLISTE__', '__ALLTIDINNHOLDSLISTE__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INNHALDSLISTE__', '__INNHOLDSLISTE__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__INGABOLKENDRING__', '__INGABOLKREDIGERING__', '__INGENDELENDRING__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MÅNADNO', 'MÅNEDNÅ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'MÅNADNONAMN', 'MÅNEDNÅNAVN', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MÅNADNOKORT', 'MÅNEDNÅKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DAGNO', 'DAGNÅ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DAGNO2', 'DAGNÅ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DAGNONAMN', 'DAGNÅNAVN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ÅRNO', 'ÅRNÅ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TIDNO', 'TIDNÅ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TIMENO', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'SIDETAL', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'INNHALDSSIDETAL', 'INNHOLDSSIDETALL', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'FILTAL', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BRUKARTAL', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTIVEBRUKARAR', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ENDRINGSTAL', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'SIDENAMN', 'SIDENAVN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIDENAMNE', 'SIDENAVNE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAMNEROM', 'NAVNEROM', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'FULLTSIDENAMN', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'UNDERSIDENAMN', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'HOVUDSIDENAMN', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'DISKUSJONSSIDENAMN', 'TALKPAGENAME' ),
-       'subst'                   => array( '0', 'LIMINN:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'IKWIKMELD:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mini', 'miniatyr', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'miniatyr=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'høgre', 'høyre', 'right' ),
-       'img_left'                => array( '1', 'venstre', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       'img_width'               => array( '1', '$1pk', '$1px' ),
-       'img_center'              => array( '1', 'sentrum', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ),
-       'img_link'                => array( '1', 'lenkje=$1', 'lenkja=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NETTSTADNAMN', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALLENKJE:', 'LOKALLENKE:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALLENKJEE:', 'LOKALLENKEE:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'TENAR', 'TJENER', 'SERVER' ),
-       'servername'              => array( '0', 'TENARNAMN', 'TJENERNAVN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSTIG', 'SKRIPTSTI', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KJØNN:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'VEKENRNO', 'UKENRNÅ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'VEKEDAGNRNO', 'UKEDAGNRNÅ', 'CURRENTDOW' ),
-       'revisionid'              => array( '1', 'VERSJONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'VERSJONSDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'VERSJONSDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'VERSJONSMÅNAD', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'VERSJONSMÅNAD1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'VERSJONSÅR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VERSJONSTIDSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'VERSJONSBRUKAR', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'FLEIRTAL:', 'PLURAL:' ),
-       'currentversion'          => array( '1', 'VERSJONNO', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INNHALDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SIDERINAMNEROM', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ADMINTAL', 'ADMINISTRATORTAL', 'NUMBEROFADMINS' ),
-       'filepath'                => array( '0', 'FILSTIG', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__GØYMDKAT__', '__LØYNDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDERIKAT', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'protectionlevel'         => array( '1', 'VERNENIVÅ', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#omdiriger', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__INGAINNHALDSLISTE__', '__INGENINNHOLDSLISTE__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__INKJEGALLERI__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ALLTIDINNHALDSLISTE__', '__ALLTIDINNHOLDSLISTE__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INNHALDSLISTE__', '__INNHOLDSLISTE__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__INGABOLKENDRING__', '__INGABOLKREDIGERING__', '__INGENDELENDRING__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MÅNADNO', 'MÅNEDNÅ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'MÅNADNONAMN', 'MÅNEDNÅNAVN', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MÅNADNOKORT', 'MÅNEDNÅKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DAGNO', 'DAGNÅ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DAGNO2', 'DAGNÅ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DAGNONAMN', 'DAGNÅNAVN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ÅRNO', 'ÅRNÅ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TIDNO', 'TIDNÅ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TIMENO', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'SIDETAL', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'INNHALDSSIDETAL', 'INNHOLDSSIDETALL', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'FILTAL', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BRUKARTAL', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTIVEBRUKARAR', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ENDRINGSTAL', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'VISINGSTAL', 'TALPÅVISINGAR', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDENAMN', 'SIDENAVN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIDENAMNE', 'SIDENAVNE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAMNEROM', 'NAVNEROM', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'FULLTSIDENAMN', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'UNDERSIDENAMN', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'HOVUDSIDENAMN', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'DISKUSJONSSIDENAMN', 'TALKPAGENAME' ),
+       'msg'                       => array( '0', 'MLD:', 'MSG:' ),
+       'subst'                     => array( '0', 'LIMINN:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'TRYGGLIMINN:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'IKWIKMELD:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'miniatyr', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'miniatyr=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'høgre', 'høyre', 'right' ),
+       'img_left'                  => array( '1', 'venstre', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_width'                 => array( '1', '$1pk', '$1px' ),
+       'img_center'                => array( '1', 'sentrum', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'rammelaus', 'frameless' ),
+       'img_page'                  => array( '1', 'side=$1', 'side_$1', 'page=$1', 'page $1' ),
+       'img_link'                  => array( '1', 'lenkje=$1', 'lenkja=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NETTSTADNAMN', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALLENKJE:', 'LOKALLENKE:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALLENKJEE:', 'LOKALLENKEE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ARTIKKELSTIG', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'SIDEID', 'PAGEID' ),
+       'server'                    => array( '0', 'TENAR', 'TJENER', 'SERVER' ),
+       'servername'                => array( '0', 'TENARNAMN', 'TJENERNAVN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSTIG', 'SKRIPTSTI', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIKK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KJØNN:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'VEKENRNO', 'UKENRNÅ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'VEKEDAGNRNO', 'UKEDAGNRNÅ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALVEKE', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'VERSJONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VERSJONSDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VERSJONSDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VERSJONSMÅNAD', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'VERSJONSMÅNAD1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'VERSJONSÅR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VERSJONSTIDSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'VERSJONSBRUKAR', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'FLEIRTAL:', 'PLURAL:' ),
+       'lcfirst'                   => array( '0', 'LFYRST:', 'LFØRST:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'SFYRST:', 'SFØRST:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'SMÅ:', 'LC:' ),
+       'uc'                        => array( '0', 'STORE:', 'UC:' ),
+       'displaytitle'              => array( '1', 'VISTITTEL', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'VERSJONNO', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INNHALDSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SIDERINAMNEROM', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ADMINTAL', 'ADMINISTRATORTAL', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATTAL', 'FORMATNUM' ),
+       'special'                   => array( '0', 'spesial', 'special' ),
+       'filepath'                  => array( '0', 'FILSTIG', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'merke', 'tag' ),
+       'hiddencat'                 => array( '1', '__GØYMDKAT__', '__LØYNDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDERIKAT', 'SIDERIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDESTORLEIK', 'PAGESIZE' ),
+       'protectionlevel'           => array( '1', 'VERNENIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'datoformat', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'STIG', 'PATH' ),
+       'pagesincategory_all'       => array( '0', 'alle', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'sider', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'underkategoriar', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'filer', 'files' ),
 );
 
 $namespaceNames = array(
@@ -294,7 +317,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Gøym patruljerte endringar i lista over siste endringar',
 'tog-newpageshidepatrolled' => 'Gøym patruljerte sider frå lista over nye sider',
 'tog-extendwatchlist' => 'Utvid overvakingslista til å vise alle endringane, ikkje berre dei siste',
-'tog-usenewrc' => 'Bruk utvida funksjonalitet på lista over siste endringar (krev JavaScript)',
+'tog-usenewrc' => 'Grupper endringar etter side i siste endringane og på overvakingslista mi (krev JavaScript)',
 'tog-numberheadings' => 'Vis nummererte overskrifter',
 'tog-showtoolbar' => 'Vis endringsknappar (JavaScript)',
 'tog-editondblclick' => 'Endre sider med dobbeltklikk (JavaScript)',
@@ -302,17 +325,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Endre avsnitt ved å høgreklikke på avsnittsoverskrift (JavaScript)',
 'tog-showtoc' => 'Vis innhaldsliste (for sider med meir enn tre bolkar)',
 'tog-rememberpassword' => 'Hugs innlogginga mi med denne nettlesaren (for høgst {{PLURAL:$1|éin dag|$1 dagar}})',
-'tog-watchcreations' => 'Legg til sidene eg opprettar på overvakingslista mi',
-'tog-watchdefault' => 'Legg til sidene eg endrar på overvakingslista mi',
-'tog-watchmoves' => 'Legg til sidene eg flyttar på overvakingslista mi',
-'tog-watchdeletion' => 'Legg til sidene eg slettar på overvakingslista mi',
+'tog-watchcreations' => 'Legg til sidene eg opprettar og filene eg lastar opp på overvakingslista mi',
+'tog-watchdefault' => 'Legg til sidene og filene eg endrar på overvakingslista mi',
+'tog-watchmoves' => 'Legg til sidene og filene eg flytter på overvakingslista mi',
+'tog-watchdeletion' => 'Legg til sidene og filene eg slettar på overvakingslista mi',
 'tog-minordefault' => 'Merk endringar som «småplukk» som standard',
 'tog-previewontop' => 'Vis førehandsvisinga før endringsboksen',
 'tog-previewonfirst' => 'Førehandsvis første endring',
 'tog-nocache' => 'Deaktiver nettlesaren sitt mellomlager («cache»)',
-'tog-enotifwatchlistpages' => 'Send e-post når dei overvaka sidene mine vert endra',
+'tog-enotifwatchlistpages' => 'Send meg ein e-post når ei side eller ei fil på overvakingslista mi vert endra',
 'tog-enotifusertalkpages' => 'Send e-post når brukarsida mi vert endra',
-'tog-enotifminoredits' => 'Send e-post også for småplukk',
+'tog-enotifminoredits' => 'Send meg e-post sjølv for mindre endringar på sider og filer',
 'tog-enotifrevealaddr' => 'Vis e-postadressa mi i endrings-e-post',
 'tog-shownumberswatching' => 'Vis kor mange som overvakar sida',
 'tog-oldsig' => 'Noverande signatur:',
@@ -324,7 +347,7 @@ $messages = array(
 'tog-uselivepreview' => 'Bruk levande førehandsvising (eksperimentelt JavaScript)',
 'tog-forceeditsummary' => 'Spør meg når eg ikkje har skrive noko i endringssamandraget',
 'tog-watchlisthideown' => 'Gøym endringane mine i overvakingslista',
-'tog-watchlisthidebots' => 'Gøym endringar gjort av robotar i overvakingslista',
+'tog-watchlisthidebots' => 'Gøym endringar gjorde av robotar i overvakingslista',
 'tog-watchlisthideminor' => 'Gøym småplukk i overvakingslista',
 'tog-watchlisthideliu' => 'Gøym endringar av innlogga brukarar i overvakingslista.',
 'tog-watchlisthideanons' => 'Gøym endringar av anonyme brukarar i overvakingslista.',
@@ -448,7 +471,7 @@ $messages = array(
 'vector-action-protect' => 'Vern',
 'vector-action-undelete' => 'Gjenopprett',
 'vector-action-unprotect' => 'Endra vern',
-'vector-simplesearch-preference' => 'Slå på betra søkjeframlegg (einast i Vector-drakta)',
+'vector-simplesearch-preference' => 'Slå på forenkla søkjefelt (berre for Vector-drakta)',
 'vector-view-create' => 'Opprett',
 'vector-view-edit' => 'Endre',
 'vector-view-history' => 'Sjå historikken',
@@ -554,6 +577,10 @@ $1',
 'youhavenewmessages' => 'Du har $1 ($2).',
 'newmessageslink' => 'nye meldingar',
 'newmessagesdifflink' => 'sjå skilnad',
+'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan bruker| $3 brukarar}} ($2).',
+'youhavenewmessagesmanyusers' => 'Du har $1 frå mange brukarar ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ei ny melding|nye meldingar}}',
+'newmessagesdifflinkplural' => 'siste {{PLURAL:$1|endringa|endringane}}',
 'youhavenewmessagesmulti' => 'Du har nye meldingar på $1',
 'editsection' => 'endre',
 'editold' => 'endre',
@@ -638,6 +665,8 @@ Meld gjerne problemet til ein [[Special:ListUsers/sysop|administrator]] og oppgj
 'cannotdelete' => 'Kunne ikkje slette sida eller fila «$1».
 Ho kan allereie vere sletta av andre.',
 'cannotdelete-title' => 'Kan ikkje sletta sida «$1»',
+'delete-hook-aborted' => 'Slettinga vart avbroten av ein funksjon.
+Funksjonen oppgav inga årsak.',
 'badtitle' => 'Feil i tittelen',
 'badtitletext' => 'Den ønskte tittelen var ulovleg, tom eller feillenkja frå ein annan wiki. Kanskje inneheld han eitt eller fleire teikn som ikkje kan brukast i sidetitlar.',
 'perfcached' => 'Dei følgjande dataa er frå mellomlageret åt tenaren og er ikkje utan vidare oppdatert. Høgst {{PLURAL:$1|eitt resultat er tilgjengeleg|$1 resultat er tilgjengelege}} i mellomlageret.',
@@ -651,8 +680,11 @@ Ho kan allereie vere sletta av andre.',
 'protectedpagetext' => 'Denne sida er verna for å hindre endring.',
 '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 som er brukt av brukargrensesnittet for programvara, og er difor låst for å hindre hærverk.',
-'editinginterface' => "'''Åtvaring:''' Du endrar på ei side som inneheld tekst som er brukt av brukargrensesnittet for programvara. Endringar på denne sida påverkar utsjånaden til sida for dei andre brukarane. Dersom du ynskjer å setje om, ver venleg og vurder å bruke [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for omsetjing av MediaWiki.",
+'protectedinterface' => 'Denne sida inneheld tekst nytta av brukargrensesnittet for programvara på wikien, og er låst for å hindra hærverk.
+For å leggja til eller endra omsetjingar for alle wikiar, gjer vel å nytta [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for lokalisering av MediaWiki.',
+'editinginterface' => "'''Åtvaring:''' Du endrar på ei side som inneheld tekst nytta av brukargrensesnittet for programvara.
+Endringar på denne sida påverkar utsjånaden til brukargrensesnittet for dei andre brukarane av wikien.
+For å leggja til eller endra omsetjingar, gjer vel å nytta [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for lokalisering av MediaWiki.",
 'sqlhidden' => '(SQL-førespurnaden er gøymd)',
 'cascadeprotected' => 'Denne sida er verna mot endring fordi ho er inkludert i {{PLURAL:$1|den opplista sida|dei opplista sidene}} som har djupvern slått på:
 $2',
@@ -662,8 +694,13 @@ $2',
 'ns-specialprotected' => 'Sider i {{ns:special}}-namnerommet kan ikkje endrast.',
 'titleprotected' => "Denne sidetittelen er verna mot oppretting av [[User:$1|$1]].
 Grunnen som er gjeven er: ''$2''.",
+'filereadonlyerror' => 'Kan ikkje endra fila «$1» av di filsamlinga «$2» er skriveverna.
+
+Administratoren som låste filsamlinga oppgav den fylgjande årsaka: «$3».',
 'invalidtitle-knownnamespace' => 'Ugyldig tittel med namnerommet «$2» og teksten «$3»',
 'invalidtitle-unknownnamespace' => 'Ugyldig tittel med ukjend namneromstal $1 og teksten «$2»',
+'exception-nologin' => 'Ikkje innlogga',
+'exception-nologin-text' => 'Sida eller handlinga krev at du er innlogga på wikien.',
 
 # Virus scanner
 'virus-badscanner' => "Dårleg konfigurasjon: ukjend virusskanner: ''$1''",
@@ -673,7 +710,7 @@ Grunnen som er gjeven er: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Du er no utlogga.'''
 
-Du kan no halde fram å bruke {{SITENAME}} anonymt, eller du kan [[Special:UserLogin|logge inn att]]  med same kontoen eller ein annan brukar kan logge inn.
+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.
@@ -684,6 +721,7 @@ Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.',
 'remembermypassword' => 'Hugs innlogginga mi på denne datamaskinen (høgst {{PLURAL:$1|éin dag|$1 dagar}})',
 'securelogin-stick-https' => 'Fortset HTTPS-tilkopling etter innlogging.',
 'yourdomainname' => 'Domenet ditt',
+'password-change-forbidden' => 'Du kan ikkje endra passord på denne wikien.',
 'externaldberror' => 'Det var anten ein ekstern databasefeil i tilgjengekontrollen, eller du har ikkje løyve til å oppdatere den eksterne kontoen din.',
 'login' => 'Logg inn',
 'nav-login-createaccount' => 'Lag brukarkonto / logg inn',
@@ -793,16 +831,23 @@ Du kan allereie ha byta passordet, eller ha bede om å få eit nytt mellombels p
 'passwordreset-capture-help' => 'Huk av her dersom du vil sjå eposten (med førebels passord) i tillegg til at han blir sendt til brukaren.',
 'passwordreset-email' => '↓E-postadresse:',
 'passwordreset-emailtitle' => '↓Kontodetaljar på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Nokon (sannsynleg deg, frå IP-adresse $1) ba om ei påminning om kontodetaljane dine for {{SITENAME}} ($4). Følgjane brukar {{PLURAL:$3|brukar|brukarar}} er assosiert med denne epost-adressa:
+'passwordreset-emailtext-ip' => 'Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:
+
+$2
+
+{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.
+Du bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.',
+'passwordreset-emailtext-user' => 'Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:
 
 $2
 
-{{PLURAL:$3|Dette førebelse passordet|Desse førebelse passorda}} vil løpe ut om {{PLURAL:$5|ein dag|$5 dagar}}.
-Du bør logge inn og velje eit nytt passord no. Dersom nokon andre kom med denne førespurnaden, eller dersom du hugsar ditt opprinnelege passord, og du ikkje ynskjar å endre det, kan du ignorere denne eposten, og halde fram med å bruke ditt gamle passord.',
+{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.
+Du bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.',
 'passwordreset-emailelement' => '↓Brukarnamn: $1
 Mellombels passord: $2',
 'passwordreset-emailsent' => '↓Ei påminning har vorte sendt på e-post.',
 'passwordreset-emailsent-capture' => 'Eposten under er sendt ut som ei påminning.',
+'passwordreset-emailerror-capture' => 'Ein påminnings-e-post vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til brukaren: $1',
 
 # Special:ChangeEmail
 'changeemail' => '↓Endre e-postadresse',
@@ -839,12 +884,12 @@ Mellombels passord: $2',
 'summary' => 'Samandrag:',
 'subject' => 'Emne/overskrift:',
 'minoredit' => 'Småplukk',
-'watchthis' => 'Overvak denne sida',
-'savearticle' => 'Lagre',
+'watchthis' => 'Overvak sida',
+'savearticle' => 'Lagra sida',
 'preview' => 'Førehandsvising',
 'showpreview' => 'Førehandsvis',
 'showlivepreview' => 'Levande førehandsvising',
-'showdiff' => 'Vis skilnad',
+'showdiff' => 'Vis skilnader',
 'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga. IP-adressa di vert lagra i historikken for sida.",
 'anonpreviewwarning' => "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta førd opp i endringshistorikken til denne sida.''",
 'missingsummary' => "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.",
@@ -854,9 +899,9 @@ Dersom du trykkjer «{{int:savearticle}}» ein gong til, vert endringa di lagra
 'summary-preview' => 'Førehandsvising av endringssamandraget:',
 'subject-preview' => 'Førehandsvising av emne/overskrift:',
 'blockedtitle' => 'Brukaren er blokkert',
-'blockedtext' => "'''Brukarnamnet ditt eller IP-adressa di er blokkert frå endring'''
+'blockedtext' => "'''Brukarnamnet ditt eller IP-adressa di er blokkert'''
 
-Blokkeringa vart gjort av $1.
+Blokkeringa vart gjord av $1.
 Denne grunnen vart gjeven: ''$2''.
 
 * Blokkeringa byrja: $8
@@ -866,7 +911,7 @@ Denne grunnen vart gjeven: ''$2''.
 Du kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa.
 Ver merksam på at du ikkje kan bruke «send e-post til brukar»-funksjonen så lenge du ikkje har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]]. Du kan heller ikkje bruke funksjonen dersom du er blokkert frå å sende e-post.
 IP-adressa di er $3, og blokkeringsnummeret er $5.
-Ver venleg og opplys om dette ved eventuelle førespurnader.",
+Tak med alle opplysningane over ved eventuelle førespurnader.",
 'autoblockedtext' => "IP-adressa di er automatisk blokkert fordi ho vart brukt av ein annan brukar som vart blokkert av $1. Grunne til dette vart gjeve som: ''$2''.
 
 * Blokkeringa byrja: $8
@@ -899,11 +944,15 @@ Passordet for den nye kontoen kan verta endra på ''[[Special:ChangePassword|end
 '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.
-Du kan [[Special:Search/{{PAGENAME}}|søkja etter denne sidetittelen]] i andre sider, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]
+Du kan [[Special:Search/{{PAGENAME}}|søkja etter sidetittelen]] i andre sider, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]
 eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} endra denne sida]</span>.',
 'noarticletext-nopermission' => 'Der er nett no ikkje noko tekst på denne sida.
-Du kan [[Special:Search/{{PAGENAME}}|søkja etter tittelen på denne sida]] på andre sider,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sjå loggføringar med tilknytting]</span>.',
+Du kan [[Special:Search/{{PAGENAME}}|søkja etter sidetittelen]] i andre sider
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]</span>, men du har ikkje løyve til å oppretta denne sida.',
+'missing-revision' => 'Versjonen #$1 av sida med namnet «{{PAGENAME}}» finst ikkje.
+
+Dette skriv seg som oftast frå at ei forelda historikklenkje vart fylgd til ei side som er sletta.
+Detaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].',
 'userpage-userdoesnotexist' => 'Brukarkontoen «<nowiki>$1</nowiki>» finst ikkje. Vil du verkeleg opprette/endre denne sida?',
 'userpage-userdoesnotexist-view' => 'Brukarkontoen «$1» er ikkje oppretta.',
 'blocked-notice-logextract' => 'Denne brukaren er for tida blokkert.
@@ -974,7 +1023,7 @@ Det siste loggelementet er oppgjeve under som referanse:",
 'titleprotectedwarning' => "'''Åtvaring: Denne sida er verna, så berre [[Special:ListGroupRights|nokre brukarar]] kan opprette henne.'''
 Det siste loggelementet er oppgjeve under som referanse:",
 'templatesused' => '{{PLURAL:$1|Mal|Malar}} som er brukte på denne sida:',
-'templatesusedpreview' => '{{PLURAL:$1|Mal|Malar}} som er brukte i denne førehandsvisinga:',
+'templatesusedpreview' => '{{PLURAL:$1|Mal som er brukt|Malar som er brukte}} i førehandsvisinga:',
 'templatesusedsection' => '{{PLURAL:$1|Mal|Malar}} som er brukte i denne bolken:',
 'template-protected' => '(verna)',
 'template-semiprotected' => '(delvis verna)',
@@ -1001,6 +1050,7 @@ Det ser ut til at ho er sletta.',
 'edit-conflict' => 'Endringskonflikt.',
 'edit-no-change' => 'Redigeringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
 'edit-already-exists' => 'Kunne ikkje opprette ny side fordi ho alt eksisterer.',
+'defaultmessagetext' => 'Standard meldingstekst',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Åtvaring: Denne sida inneheld for mange prosesskrevande parserfunksjonar.
@@ -1016,10 +1066,17 @@ Desse parameterane har vorte utelatne.',
 'parser-template-loop-warning' => 'Malløkka oppdaga: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Malen er inkludert for mange gonger ($1)',
 'language-converter-depth-warning' => 'Språkomformaren si djubdegrense vart overstege ($1)',
+'node-count-exceeded-category' => 'Sider der talet på knutepunkt er overskride',
+'node-count-exceeded-warning' => 'Sida har overskride talet på knutepunkt',
+'expansion-depth-exceeded-category' => 'Sider der utvidingsdjupna er overskriden',
+'expansion-depth-exceeded-warning' => 'Sida har overskride utvidingsdjupna',
+'parser-unstrip-loop-warning' => 'Det vart oppdaga ei løkke i Unstrip-funksjonen',
+'parser-unstrip-recursion-limit' => 'Rekursjonsgrensa for Unstrip-funksjonen er overskriden ($1)',
+'converter-manual-rule-error' => 'Det vart oppdaga ein feil i ein manuell språkkonverteringsregel',
 
 # "Undo" feature
 'undo-success' => 'Endringa kan attenderullast. Ver venleg og sjå over skilnadene nedanfor for å vere sikker på at du vil attenderulle. Deretter kan du lagre attenderullinga.',
-'undo-failure' => 'Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjort i mellomtida.',
+'undo-failure' => 'Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjorde i mellomtida.',
 'undo-norev' => 'Endringa kunne ikkje fjernast fordi han ikkje finst eller vart sletta',
 'undo-summary' => 'Rullar attende versjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])',
 
@@ -1240,8 +1297,6 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 'search-interwiki-caption' => 'Systerprosjekt',
 'search-interwiki-default' => '$1-resultat:',
 'search-interwiki-more' => '(meir)',
-'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 namneroma',
@@ -1340,7 +1395,7 @@ Her er det framlegg til eit tal som kan nyttast, tilfelleleg henta fram: $1',
 'timezoneregion-indian' => 'Indiahavet',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillat e-post frå andre brukarar',
-'prefs-searchoptions' => 'Søkjealternativ',
+'prefs-searchoptions' => 'Søk',
 'prefs-namespaces' => 'Namnerom',
 'defaultns' => 'Søk elles i desse namneromma:',
 'default' => 'standard',
@@ -1464,6 +1519,7 @@ Dette kan ikkje tilbakestillast.',
 'right-writeapi' => 'Redigere via API',
 'right-delete' => 'Slette sider',
 'right-bigdelete' => 'Slette sider med lange historikkar',
+'right-deletelogentry' => 'Sletta og attoppretta visse loggoppføringar',
 'right-deleterevision' => 'Slette og gjenopprette enkeltendringar av sider',
 'right-deletedhistory' => 'Sjå sletta sidehistorikk utan tilhøyrande sidetekst',
 'right-deletedtext' => 'Sjå sletta tekst og endringar i høve til sletta versjonar',
@@ -1477,13 +1533,13 @@ Dette kan ikkje tilbakestillast.',
 'right-ipblock-exempt' => 'Kan gjere endringar frå blokkerte IP-adresser',
 'right-proxyunbannable' => 'Kan gjere endringar frå blokkerte proxyar',
 'right-unblockself' => 'Avblokkera seg sjølve',
-'right-protect' => 'Endre vernenivå<!-- og redigera beskyttete sider-->',
+'right-protect' => 'Endra vernenivå og verna sider',
 'right-editprotected' => 'Endre verna sider',
 'right-editinterface' => 'Redigere brukargrensesnittet',
 'right-editusercssjs' => 'Endre andre brukarar sine CSS- og JS-filer',
 'right-editusercss' => 'Endre andre brukarar sine CSS-filer',
 'right-edituserjs' => 'Endre andre brukarar sine JS-filer',
-'right-rollback' => 'Raskt tilbakestille den siste brukaren som har endra ei viss side',
+'right-rollback' => 'Snøgt rulla attende endringane til den siste brukaren som endra ei viss side',
 'right-markbotedits' => 'Markere tilbakerullingar som robotendringar',
 'right-noratelimit' => 'Vert ikkje påverka av snøggleiksgrenser',
 'right-import' => 'Importere sider frå andre wikiar',
@@ -1525,13 +1581,14 @@ Dette kan ikkje tilbakestillast.',
 'action-writeapi' => 'bruke skrive-API',
 'action-delete' => 'slette denne sida',
 'action-deleterevision' => 'slette denne endringa',
-'action-deletedhistory' => 'sjå slettehistorikken til denne sida',
+'action-deletedhistory' => 'sjå slettehistorikken til sida',
 'action-browsearchive' => 'søke i sletta sider',
 'action-undelete' => 'attopprette denne sida',
 'action-suppressrevision' => 'sjå og attopprette denne skjulte endringa',
 'action-suppressionlog' => 'sjå denne private loggen',
 'action-block' => 'blokkere denne brukaren frå å gjere endringar',
-'action-protect' => 'endre vernenivået til denne sida',
+'action-protect' => 'endre vernenivået til sida',
+'action-rollback' => 'snøgt rulla attende endringane til den siste brukaren som endra ei viss side',
 'action-import' => 'importere denne sida frå ein annan wiki',
 'action-importupload' => 'importere denne sida frå ei opplasta fil',
 'action-patrol' => 'merke andre endringar av andre brukar som patruljert',
@@ -1549,11 +1606,11 @@ Dette kan ikkje tilbakestillast.',
 'recentchanges-legend' => 'Alternativ for siste endringar',
 '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' => 'Denne endringa oppretta ei ny side',
+'recentchanges-label-newpage' => 'Endringa oppretta ei ny side',
 'recentchanges-label-minor' => 'Dette er ei mindre endring',
 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
-'recentchanges-label-unpatrolled' => 'Denne endringa er ikkje patruljert enno',
-'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} gjort {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
+'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.",
 'rcnotefrom' => "Nedanfor vert opp til '''$1''' endringar sidan  ''' $2''' viste.",
 'rclistfrom' => 'Vis nye endringar sidan $1',
 'rcshowhideminor' => '$1 småplukk',
@@ -1573,6 +1630,7 @@ Dette kan ikkje tilbakestillast.',
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|Éin brukar|$1 brukarar}} overvakar]',
 'rc_categories' => 'Avgrens til kategoriar (skilde med «|»)',
 'rc_categories_any' => 'Alle',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte}} etter endringa',
 'newsectionsummary' => '/* $1 */ ny bolk',
 'rc-enhanced-expand' => 'Vis detaljar (krev JavaScript)',
 'rc-enhanced-hide' => 'Skjul detaljar',
@@ -1584,7 +1642,7 @@ Dette kan ikkje tilbakestillast.',
 'recentchangeslinked-toolbox' => 'Relaterte endringar',
 'recentchangeslinked-title' => 'Endringar relaterte til «$1»',
 'recentchangeslinked-noresult' => 'Det er ikkje gjort endringar på sidene som var lenkja hit i den oppgjevne perioden.',
-'recentchangeslinked-summary' => "Denne spesialsida inneheld alle endringane som er gjort på sider som vert ''lenkja til'' frå denne (eller på sider i ein viss kategori). Dei av sidene du har på [[Special:Watchlist|overvakingslista]] di er '''utheva'''.",
+'recentchangeslinked-summary' => "Dette er ei liste over nylege endringar som er gjorde på sider som vert lenkja til frå ei oppgjeven side (eller på medlemer av ein oppgjeven kategori). Sider på [[Special:Watchlist|overvakingslista di]] er '''utheva'''.",
 'recentchangeslinked-page' => 'Sidenamn:',
 'recentchangeslinked-to' => 'Vis endringar på sider som lenkjer til den gitte sida i staden',
 
@@ -1632,19 +1690,19 @@ For å bruke ei fil på ei side, bruk ei lenkje på eit liknande format:
 'filetype-bad-ie-mime' => 'Kan ikkje lasta opp fila då Internet Explorer ville merka ho som "$1", ein ikkje-tillate og potensielt farleg filtype.',
 'filetype-unwanted-type' => "«'''.$1'''» er ein uynskt filtype.
 {{PLURAL:$3|Føretrekt filtype er|Føretrekte filtypar er}} $2.",
-'filetype-banned-type' => "«'''.$1'''» er ikkje ein tillaten filtype.
-{{PLURAL:$3|Tillaten filtype er|Tillatne filtypar er}} $2.",
+'filetype-banned-type' => "'''«.$1»''' er ikkje {{PLURAL:$4|ein tillaten filtype|tillatne filtypar}}.
+{{PLURAL:$3|Tillaten filtype|Tillatne filtypar}} er $2.",
 'filetype-missing' => 'Fila har inga ending (som t.d. «.jpg»).',
 'empty-file' => 'Fila du leverte var tom.',
 'file-too-large' => 'Fila du leverte var for stor.',
 'filename-tooshort' => 'Filnamnet er for kort.',
 'filetype-banned' => 'Denne filtypen er ikkje tillaten.',
 'verification-error' => 'Denne fila klarde ikkje verifiseringsprossesen.',
-'hookaborted' => "Endringane du prøvde gjere blei avbrotne av ei ''extension hook''.",
+'hookaborted' => 'Endringa du freista vart avbroten av ei utviding.',
 'illegal-filename' => 'Filnamnet er ikkje tillate.',
 'overwrite' => 'Det er ikkje tillate å skriva over ei eksisterande fil.',
 'unknown-error' => 'Det oppstod ein ukjend feil.',
-'tmp-create-error' => 'Kunne ikkje opprette midlertidig fil.',
+'tmp-create-error' => 'Kunne ikkje oppretta mellombels fil.',
 'tmp-write-error' => 'Feil ved skriving av midlertidig fil.',
 'large-file' => 'Det er tilrådd at filene ikkje er større enn $1, denne fila er $2.',
 'largefileserver' => 'Denne fila er større enn det tenaren tillèt.',
@@ -1726,9 +1784,32 @@ $1',
 'upload-http-error' => 'Ein HTTP-feil oppstod: $1',
 
 # File backend
+'backend-fail-stream' => 'Kunne ikkje strøyma fila «$1».',
+'backend-fail-backup' => 'Kunne ikkje tryggingskopiera fila «$1».',
+'backend-fail-notexists' => 'Fila $1 finst ikkje.',
+'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-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».',
+'backend-fail-move' => 'Kunne ikkje flytta fila «$1» til «$2».',
+'backend-fail-opentemp' => 'Kunne ikkje opna mellombels fil.',
+'backend-fail-writetemp' => 'Kunne ikkje skriva til mellombels fil.',
+'backend-fail-closetemp' => 'Kunne ikkje lata att mellombels fil.',
+'backend-fail-read' => 'Kunne ikkje lesa fila «$1».',
+'backend-fail-create' => 'Kunne ikkje oppretta fila «$1».',
+
+# Lock manager
+'lockmanager-fail-releaselock' => 'Kunne ikkje løysa låsen for «$1».',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'Den oppgjevne fila var ikkje ei ZIP-fil',
+'zip-bad' => 'Fila er ei skadd eller på annan måte uleseleg ZIP-fil.
+Ho kan ikkje tryggingskontrollerast.',
+
+# Special:UploadStash
+'uploadstash-refresh' => 'Oppdater fillista',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Tilgjenge avslått',
@@ -1772,7 +1853,8 @@ For best tryggleik, er img_auth.php sett ut av funksjon.',
 'upload_source_file' => ' (ei fil på datamaskina di)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Denne spesialsida viser alle opplasta filer. Dei sist opplasta filene vert viste på toppen som standard. Klikk på ei kolonneoverskrift for å byte sorteringsmetode.',
+'listfiles-summary' => 'Spesialsida viser alle opplasta filer.
+Når ho er filtrert etter brukar, vert berre filene der brukaren lasta opp den siste versjonen viste.',
 'listfiles_search_for' => 'Søk etter filnamn:',
 'imgfile' => 'fil',
 'listfiles' => 'Filliste',
@@ -1781,7 +1863,7 @@ For best tryggleik, er img_auth.php sett ut av funksjon.',
 'listfiles_name' => 'Namn',
 'listfiles_user' => 'Brukar',
 'listfiles_size' => 'Storleik',
-'listfiles_description' => 'Beskriving',
+'listfiles_description' => 'Skildring',
 'listfiles_count' => 'Versjonar',
 
 # File description page
@@ -1820,6 +1902,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'uploadnewversion-linktext' => 'Last opp ny versjon av denne fila',
 'shared-repo-from' => 'frå $1',
 'shared-repo' => 'eit sams fillager',
+'upload-disallowed-here' => 'Diverre kan du ikkje overskriva dette biletet.',
 
 # File reversion
 'filerevert' => 'Rulla attende $1',
@@ -1898,7 +1981,9 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 
 'disambiguations' => 'Sider som lenkjer til fleirtydingssider',
 'disambiguationspage' => 'Template:Fleirtyding',
-'disambiguations-text' => "Sidene nedanfor har lenkje til ei '''fleirtydingsside'''. Dei bør ha lenkje til det rette oppslagsordet i staden for.<br />Sider vert handsama som fleirtydingssider dersom dei inneheld ein mal som har lenkje på [[MediaWiki:Disambiguationspage]].",
+'disambiguations-text' => "Dei fylgjande sidene inneheld minst éi lenkje til ei '''fleirtydingsside'''.
+Dei bør kan henda lenkja til ei meir passande side i staden.<br />
+Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja til frå [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Doble omdirigeringar',
 'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. <del>Overstrykne</del> liner har vorte retta på.',
@@ -1921,13 +2006,14 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategoriar}}',
+'ninterwikis' => '{{PLURAL:$1|éin interwiki|$1 interwikiar}}',
 'nlinks' => '{{PLURAL:$1|Éi lenkje|$1 lenkjer}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
 'nrevisions' => '{{PLURAL:$1|Éin versjon|$1 versjonar}}',
 'nviews' => '{{PLURAL:$1|Éi vising|$1 visingar}}',
 'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}',
 'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}',
-'specialpage-empty' => 'Denne sida er tom.',
+'specialpage-empty' => 'Det er ingen resultat for denne rapporten.',
 'lonelypages' => 'Foreldrelause sider',
 'lonelypagestext' => 'Følgjande sider er ikkje lenkja til på andre sider på {{SITENAME}}.',
 'uncategorizedpages' => 'Ukategoriserte sider',
@@ -1947,8 +2033,10 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'mostlinkedtemplates' => 'Mest brukte malar',
 'mostcategories' => 'Sidene med flest kategoriar',
 'mostimages' => 'Mest brukte filer',
+'mostinterwikis' => 'Sidene med flest interwikiar',
 'mostrevisions' => 'Sidene med flest endringar',
 'prefixindex' => 'Alle sider med forstaving',
+'prefixindex-namespace' => 'Alle sider med førefeste ($1-namnerommet)',
 'shortpages' => 'Korte sider',
 'longpages' => 'Lange sider',
 'deadendpages' => 'Blindvegsider',
@@ -1971,7 +2059,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'ancientpages' => 'Eldste sider',
 'move' => 'Flytt',
 'movethispage' => 'Flytt denne sida',
-'unusedimagestext' => 'Dei fylgjande filene finst, men vert ikkje nytta på noka sida.
+'unusedimagestext' => 'Dei fylgjande filene finst, men vert ikkje nytta på noka side.
 Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan filene vera nytta aktivt trass i at dei er lista opp her.',
 'unusedcategoriestext' => 'Dei følgjande kategorisidene er oppretta, sjølv om ingen artikkel eller kategori brukar dei.',
 'notargettitle' => 'Inkje mål',
@@ -1981,6 +2069,7 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 'pager-newer-n' => '{{PLURAL:$1|nyare|nyare $1}}',
 'pager-older-n' => '{{PLURAL:$1|eldre|eldre $1}}',
 'suppress' => 'Historikkfjerning',
+'querypage-disabled' => 'Spesialsida er slegen av for skuld yting.',
 
 # Book sources
 'booksources' => 'Bokkjelder',
@@ -2002,12 +2091,12 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 # Special:AllPages
 'allpages' => 'Alle sider',
 'alphaindexline' => '$1 til $2',
-'nextpage' => 'Neste sida ($1)',
+'nextpage' => 'Neste side ($1)',
 'prevpage' => 'Førre sida ($1)',
 'allpagesfrom' => 'Vis sider frå:',
 'allpagesto' => 'Vis sider til og med:',
 'allarticles' => 'Alle sider',
-'allinnamespace' => 'Alle sider ($1 namnerom)',
+'allinnamespace' => 'Alle sider ($1-namnerommet)',
 'allnotinnamespace' => 'Alle sider (ikkje i $1-namnerommet)',
 'allpagesprev' => 'Førre',
 'allpagesnext' => 'Neste',
@@ -2018,6 +2107,8 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 'allpages-hide-redirects' => 'Gøym omdirigeringar',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du ser på ei mellomlagra versjon av sida, som kan vera opp til $1 gamal.',
+'cachedspecial-viewing-cached-ts' => 'Du ser på ein mellomlagra versjon av sida, som ikkje tarv vera heilt oppdatert.',
 'cachedspecial-refresh-now' => 'Sjå siste.',
 
 # Special:Categories
@@ -2084,6 +2175,8 @@ Sjå òg [[Special:WantedCategories|ønska kategoriar]].',
 'mailnologin' => 'Inga avsendaradresse',
 'mailnologintext' => 'Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.',
 'emailuser' => 'Send e-post åt denne brukaren',
+'emailuser-title-target' => 'Send epost åt {{GENDER:$1|brukaren}}',
+'emailuser-title-notarget' => 'Send e-post åt brukar',
 'emailpage' => 'Send e-post åt brukar',
 'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne brukaren.
 E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukke opp i «frå»-feltet på denne e-posten, så mottakaren er i stand til å svare.',
@@ -2111,6 +2204,10 @@ E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukk
 'emailsenttext' => 'E-posten er sendt.',
 'emailuserfooter' => 'E-posten vart sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.',
 
+# User Messenger
+'usermessage-summary' => 'Lèt att ei systemmelding.',
+'usermessage-editor' => 'Systembodbringar',
+
 # Watchlist
 'watchlist' => 'Overvakingsliste',
 'mywatchlist' => 'Overvakingslista mi',
@@ -2126,7 +2223,7 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 'removewatch' => 'Fjerna frå overvakingslista',
 'removedwatchtext' => 'Sida «[[:$1]]» er fjerna frå [[Special:Watchlist|overvakingslista di]].',
 'watch' => 'Overvak',
-'watchthispage' => 'Overvak denne sida',
+'watchthispage' => 'Overvak sida',
 'unwatch' => 'Fjern overvaking',
 'unwatchthispage' => 'Fjern overvaking',
 'notanarticle' => 'Ikkje innhaldsside',
@@ -2148,7 +2245,7 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 'unwatching' => 'Fjernar frå overvakinglista...',
 
 'enotif_mailer' => '{{SITENAME}}-endringsmeldingssendar',
-'enotif_reset' => 'Merk alle sider som vitja',
+'enotif_reset' => 'Merk alle sidene som vitja',
 'enotif_newpagetext' => 'Dette er ei ny side.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-brukar',
 'changed' => 'endra',
@@ -2222,13 +2319,13 @@ Tilbakemeldingar og anna hjelp:
 'rollbacklinkcount-morethan' => 'rulla 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 rulle attende den siste endringa av [[$1]] gjort av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) fordi nokon andre alt har endra sida att eller fjerna endringa.
+'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.
 
-Den siste endringa vart gjort av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Den siste endringa vart gjord av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Samandraget for endringa var: «''$1''».",
-'revertpage' => 'Attenderulla endring gjort av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til tidlegare versjon endra av [[User:$1|$1]]',
+'revertpage' => 'Attenderulla endring gjord av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjonen av [[User:$1|$1]]',
 'revertpage-nouser' => 'Tilbakestilte endringar av (brukarnamn fjerna) til den siste versjonen av [[User:$1|$1]]',
-'rollback-success' => 'Rulla attende endringane av $1, tilbake til siste versjon av $2.',
+'rollback-success' => 'Rulla attende endringane av $1, attende til siste versjonen av $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Feil med omgangen.',
@@ -2245,6 +2342,7 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 'protect-title' => 'Vernar «$1»',
 'protect-title-notallowed' => 'Sjå vernenivået til «$1»',
 'prot_1movedto2' => '«[[$1]]» flytt til «[[$2]]»',
+'protect-badnamespace-title' => 'Namnerommet kan ikkje vernast',
 'protect-legend' => 'Stadfest vern',
 'protectcomment' => 'Grunngjeving:',
 'protectexpiry' => 'Endar:',
@@ -2446,6 +2544,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'unblockiptext' => 'Bruk skjemaet nedanfor for å oppheve blokkeringa av ein tidlegare blokkert brukar.',
 'ipusubmit' => 'Opphev blokkering',
 'unblocked' => 'Blokkeringa av [[User:$1|$1]] er oppheva',
+'unblocked-range' => '$1 vart avblokkert',
 'unblocked-id' => 'Blokkering $1 er oppheva',
 'blocklist' => 'Blokkerte brukarar',
 'ipblocklist' => 'Blokkerte IP-adresser og brukarnamn',
@@ -2458,6 +2557,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'blocklist-target' => 'Mål',
 'blocklist-expiry' => 'Endar',
 'blocklist-by' => 'Blokkerande admin',
+'blocklist-params' => 'Blokkeringsparametrar',
 'blocklist-reason' => 'Årsak',
 'ipblocklist-submit' => 'Søk',
 'ipblocklist-localblock' => 'Lokal blokkering',
@@ -2544,23 +2644,24 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 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.
 
 <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.",
-'movepagetext-noredirectfixer' => "Ved å bruke skjemaet under kan du få omdøypt ei side og flytt heile historikken til det nye namnet. 
-Den gamle tittelen vil omdirigere til den nye tittelen. 
-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-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. 
+Du er ansvarleg for at alle lenkjene stadig peikar dit det er meininga at dei skal føra.
 
-Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen, om ho då ikkje er ei omdirigeringsside utan endringshistorikk. Dette vil seie at du kan flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, og at du ikkje kan skriva over ei side som finst.
+Merk at sida '''ikkje''' vert flytt dersom det alt finst ei side med den nye tittelen, om ho då ikkje er tom eller ei omdirigeringsside utan endringshistorikk.
+Dette vil seia at du kan døypa om ei side til det gamle namnet hennar om du gjer ein feil, og dessutan at du ikkje kan skriva over ei side som finst.
 
-<b>ÅTVARING!</b>
+'''ÅTVARING!'''
 Dette kan vera ei drastisk og uventa endring for ei populær side;
-ver sikker på at du skjøner konsekvensane av dette før du fortset.",
-'movepagetalktext' => "Den tilhøyrande diskusjonssida, om ho finst, vil automatisk bli flytt med sida '''med mindre:'''
-*Du flytter sida til eit anna namnerom, eller
-*Du fjernar merkinga i boksen nedanfor.
+ver viss på at du skjøner konsekvensane av flyttinga før du held fram.",
+'movepagetalktext' => "Den tilhøyrande diskusjonssida, om ho finst, vert automatisk flytt med sida '''minder:'''
+*ei ikkje-tom diskusjonsside alt finst under det nye namnet, eller
+*du fjernar avhakinga i boksen nedanfor.
 
-I desse falla lyt du flytte eller flette saman sida manuelt.",
+I desse falla lyt du flytta eller fletta sida manuelt, om ynskeleg.",
 'movearticle' => 'Flytt side:',
-'moveuserpage-warning' => "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vil verta flytt og at brukarnamnet '''ikkje''' vert endra.",
+'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',
 'movenologintext' => 'Du lyt vera registrert brukar og vera [[Special:UserLogin|innlogga]] for å flytte ei side.',
 'movenotallowed' => 'Du har ikkje tilgang til å flytte sider.',
@@ -2568,7 +2669,7 @@ I desse falla lyt du flytte eller flette saman sida manuelt.",
 'cant-move-user-page' => 'Du har ikkje løyve til å flytte brukarsider (bortsett frå undersider).',
 'cant-move-to-user-page' => 'Du har ikkje løyve til å flytte brukarsider (bortsett frå undersider).',
 'newtitle' => 'Til ny tittel:',
-'move-watch' => 'Overvak denne sida',
+'move-watch' => 'Overvak sida',
 'movepagebtn' => 'Flytt side',
 'pagemovedsub' => 'Flyttinga er gjennomførd',
 'movepage-moved' => "'''«$1» er flytt til «$2»'''",
@@ -2627,6 +2728,7 @@ Dette kan så importerast til ein annan wiki som brukar MediaWiki-programvara gj
 For å eksportere sider, skriv inn titlar i tekstboksen under, ein tittel per linje, og velg om du vil ha berre noverande versjon, eller alle versjonar i historikken.
 
 Dersom du berre vil ha noverande versjon, kan du også bruke ei lenkje, til dømes [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for sida «[[{{MediaWiki:Mainpage}}]]».',
+'exportall' => 'Eksporter alle sider',
 'exportcuronly' => 'Berre eksporter siste versjonen, ikkje med heile historikken.',
 'exportnohistory' => "----
 '''Merk:''' Å eksportere heile sidehistorikkar gjennom dette skjemaet er slått av grunna problem med ytinga.",
@@ -2663,6 +2765,8 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'thumbnail_error' => 'Feil ved oppretting av miniatyrbilete: $1',
 'djvu_page_error' => 'DjVu-sida er utanfor rekkjevidd',
 'djvu_no_xml' => 'Klarte ikkje hente inn XML for DjVu-fila',
+'thumbnail-temp-create' => 'Kan ikkje oppretta mellombels fil for miniatyrbilete',
+'thumbnail-dest-create' => 'Kunne ikkje lagra miniatyrbiletet til lagringsmålet',
 'thumbnail_invalid_params' => 'Ugyldige miniatyrparameterar',
 'thumbnail_dest_directory' => 'Klarte ikkje å opprette målmappe',
 'thumbnail_image-type' => 'Bilettypen er ikkje stødd',
@@ -2706,6 +2810,9 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'import-invalid-interwiki' => 'Kan ikkje importera frå den valde wikien.',
 'import-error-edit' => '«$1» blei ikkje importert av di du ikkje har løyve til å redigere henne.',
 'import-error-create' => 'Side $1 blei ikkje importert av di du ikkje har løyve til å redigere henne.',
+'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 log
 'importlogpage' => 'Importeringslogg',
@@ -2715,6 +2822,15 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'import-logentry-interwiki' => 'overførte $1 mellom wikiar',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|Éin versjon|$1 versjonar}} frå $2',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript-utrøyning',
+'javascripttest-title' => 'Køyrer $1-utrøyningar',
+'javascripttest-pagetext-noframework' => 'Sida er reservert for køyring av JavaScript-utrøyningar.',
+'javascripttest-pagetext-unknownframework' => 'Ukjent utrøyningsrammeverk: «$1».',
+'javascripttest-pagetext-frameworks' => 'Vel eitt av dei fylgjande utrøyningsrammeverka: $1',
+'javascripttest-pagetext-skins' => 'Vel ei drakt som utrøyningane skal køyrast med:',
+'javascripttest-qunit-intro' => 'Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Brukarsida di',
 'tooltip-pt-anonuserpage' => 'Brukarsida for ip-adressa du endrar under',
@@ -2730,14 +2846,14 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-ca-edit' => 'Du kan endre denne sida. Bruk førehandsvisings-knappen før du lagrar.',
 'tooltip-ca-addsection' => 'Start ein ny bolk',
 'tooltip-ca-viewsource' => 'Denne sida er verna, men du kan sjå kjeldeteksten.',
-'tooltip-ca-history' => 'Eldre versjonar av denne sida',
+'tooltip-ca-history' => 'Eldre versjonar av sida',
 'tooltip-ca-protect' => 'Vern denne sida',
 'tooltip-ca-unprotect' => 'Endra vernet av sida',
 'tooltip-ca-delete' => 'Slett denne sida',
 'tooltip-ca-undelete' => 'Attopprett denne sida',
 'tooltip-ca-move' => 'Flytt denne sida',
-'tooltip-ca-watch' => 'Legg denne sida til i overvakingslista di',
-'tooltip-ca-unwatch' => 'Fjern denne sida frå overvakingslista di',
+'tooltip-ca-watch' => 'Legg til sida i overvakingslista di',
+'tooltip-ca-unwatch' => 'Fjern sida frå overvakingslista di',
 'tooltip-search' => 'Søk gjennom {{SITENAME}}',
 'tooltip-search-go' => 'Gå til ei side med dette namnet om ho finst',
 'tooltip-search-fulltext' => 'Søk etter sider som inneheld denne teksten',
@@ -2746,7 +2862,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-n-mainpage-description' => 'Gå til hovudsida',
 'tooltip-n-portal' => 'Om prosjektet, kva du kan gjera, kvar du finn saker og ting',
 'tooltip-n-currentevents' => 'Aktuelt',
-'tooltip-n-recentchanges' => 'Liste over dei siste endringane som er gjort på wikien.',
+'tooltip-n-recentchanges' => 'Liste over dei siste endringane som er gjorde på wikien.',
 'tooltip-n-randompage' => 'Vis ei tilfeldig side',
 'tooltip-n-help' => 'Hjelp til å bruke alle funksjonane.',
 'tooltip-t-whatlinkshere' => 'Liste over alle wikisidene som har lenkjer hit',
@@ -2770,11 +2886,12 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-ca-nstab-help' => 'Vis hjelpeside',
 'tooltip-ca-nstab-category' => 'Vis kategoriside',
 'tooltip-minoredit' => 'Merk dette som småplukk',
-'tooltip-save' => 'Lagre endringane dine',
+'tooltip-save' => 'Lagra endringane dine',
 'tooltip-preview' => 'Førehandsvis endringane dine, bruk denne funksjonen før du lagrar!',
-'tooltip-diff' => 'Vis skilnaden mellom din versjon og lagra versjon, utan å lagre.',
+'tooltip-diff' => 'Sjå kva endringar du gjorde i teksten',
 'tooltip-compareselectedversions' => 'Sjå endringane mellom dei valde versjonane av denne sida.',
-'tooltip-watch' => 'Legg denne sida til i overvakingslista di [alt-w]',
+'tooltip-watch' => 'Legg sida til i overvakingslista di [alt-w]',
+'tooltip-watchlistedit-normal-submit' => 'Fjerna titlar',
 'tooltip-watchlistedit-raw-submit' => 'Oppdater overvakingslista',
 'tooltip-recreate' => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
 'tooltip-upload' => 'Start opplastinga',
@@ -2829,14 +2946,36 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'spambot_username' => 'MediaWiki si spamopprydding',
 'spam_reverting' => 'Attenderullar til siste versjon utan lenkje til $1',
 'spam_blanking' => 'Alle versjonar inneheldt lenkje til $1, tømmer sida',
+'spam_deleting' => 'Alle versjonane inneheldt lenkjer til $1, slettar.',
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-header-edits' => 'Endringar',
+'pageinfo-header-basic' => 'Grunnleggjande informasjon',
+'pageinfo-header-edits' => 'Endringshistorikk',
+'pageinfo-header-restrictions' => 'Sidevern',
+'pageinfo-header-properties' => 'Sideeigenskapar',
+'pageinfo-display-title' => 'Visingstittel',
+'pageinfo-default-sort' => 'Standard sorteringsnykel',
+'pageinfo-length' => 'Sidelengd (i byte)',
+'pageinfo-article-id' => 'Side-ID',
+'pageinfo-robot-policy' => 'Søkjemotorstode',
+'pageinfo-robot-index' => 'Kan indekserast',
+'pageinfo-robot-noindex' => 'Kan ikkje indekserast',
 'pageinfo-views' => 'Tal på visningar',
-'pageinfo-watchers' => 'Antal overvakarar',
-'pageinfo-edits' => 'Tal på endringar',
-'pageinfo-authors' => 'Tal på forskjellege forfattarar',
+'pageinfo-watchers' => 'Tal på overvakarar av sida',
+'pageinfo-redirects-name' => 'Omdirigeringar til sida',
+'pageinfo-subpages-name' => 'Undersider av sida',
+'pageinfo-firstuser' => 'Sideopprettar',
+'pageinfo-firsttime' => 'Dato for opprettinga av sida',
+'pageinfo-lastuser' => 'Siste forfattaren',
+'pageinfo-lasttime' => 'Dato for siste endringa',
+'pageinfo-edits' => 'Totalt tal på endringar',
+'pageinfo-authors' => 'Totalt tal på ulike forfattarar',
+'pageinfo-recent-edits' => 'Tal på nylege endringar (innan dei siste $1)',
+'pageinfo-recent-authors' => 'Tal på nylege forfattarar',
+'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)',
 
 # Skin names
 'skinname-standard' => 'Klassisk',
@@ -2886,6 +3025,7 @@ $1',
 'widthheightpage' => '$1 × $2, {{PLURAL:$3|éi side|$3 sider}}',
 'file-info' => 'filstorleik: $1, MIME-type: $2',
 'file-info-size' => '$1 × $2 pikslar, filstorleik: $3, MIME-type: $4',
+'file-info-size-pages' => '$1 × $2 pikslar, filstorleik: $3, MIME-type: $4, {{PLURAL:$5|éi side|$5 sider}}',
 'file-nohires' => 'Høgare oppløysing er ikkje tilgjengeleg.',
 'svg-long-desc' => 'SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3',
 'show-big-image' => 'Full oppløysing',
@@ -3078,12 +3218,20 @@ Andre er gøymde som standard.
 'exif-headline' => 'Overskrift',
 'exif-credit' => 'Opphavrettseigar/filgjevar',
 'exif-source' => 'Kjelde',
+'exif-urgency' => 'Prioritet',
+'exif-objectcycle' => 'Tid på dagen mediet er meint for',
+'exif-contact' => 'Kontaktinformasjon',
 'exif-writer' => 'Forfattar',
 'exif-languagecode' => 'Språk',
 'exif-iimversion' => 'IIM-versjon',
 'exif-iimcategory' => 'Kategori',
 'exif-lens' => 'Objektiv',
 'exif-cameraownername' => 'Eigar av kameraet',
+'exif-label' => 'Merkelapp',
+'exif-rating' => 'Vurdering (av 5)',
+'exif-copyrighted' => 'Opphavsrettsstode',
+'exif-copyrightowner' => 'Opphavsrettseigar',
+'exif-usageterms' => 'Bruksvilkår',
 'exif-pngfilecomment' => 'PNG-filkommentar',
 'exif-disclaimer' => 'Atterhald',
 'exif-contentwarning' => 'Innholdsåtvaring',
@@ -3185,6 +3333,8 @@ Andre er gøymde som standard.
 'exif-sensingmethod-7' => 'Trilinær sensor',
 'exif-sensingmethod-8' => 'Fargesekvensiell lineærsensor',
 
+'exif-filesource-3' => 'Digitalt stillbiletekamera',
+
 'exif-scenetype-1' => 'Direkte fotografert bilete',
 
 'exif-customrendered-0' => 'Normal prosess',
@@ -3253,18 +3403,31 @@ Andre er gøymde som standard.
 'exif-gpsdestdistance-m' => 'Miles',
 'exif-gpsdestdistance-n' => 'Nautiske mil',
 
+'exif-gpsdop-excellent' => 'Utmerkt ($1)',
 'exif-gpsdop-good' => 'God ($1)',
+'exif-gpsdop-moderate' => 'Moderat ($1)',
+'exif-gpsdop-poor' => 'Dårleg ($1)',
+
+'exif-objectcycle-a' => 'Berre morgon',
+'exif-objectcycle-p' => 'Berre kveld',
+'exif-objectcycle-b' => 'Både morgon og kveld',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Verkeleg retning',
 'exif-gpsdirection-m' => 'Magnetisk retning',
 
+'exif-ycbcrpositioning-1' => 'Sentrert',
+
+'exif-dc-contributor' => 'Bidragsytarar',
 'exif-dc-date' => 'Dato(ar)',
 'exif-dc-publisher' => 'Utgjevar',
+'exif-dc-relation' => 'Skylde medium',
 'exif-dc-rights' => 'Rettar',
 '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 underhaldning',
@@ -3364,17 +3527,17 @@ Du må stadfeste at du verkeleg vil nyopprette denne sida.",
 
 # Multipage image navigation
 'imgmultipageprev' => '← førre sida',
-'imgmultipagenext' => 'neste sida →',
+'imgmultipagenext' => 'neste side →',
 'imgmultigo' => 'Gå!',
 'imgmultigoto' => 'Gå til sida $1',
 
 # Table pager
 'ascending_abbrev' => 'stigande',
 'descending_abbrev' => 'synkande',
-'table_pager_next' => 'Neste sida',
+'table_pager_next' => 'Neste side',
 'table_pager_prev' => 'Førre sida',
-'table_pager_first' => 'Fyrste side',
-'table_pager_last' => 'Siste side',
+'table_pager_first' => 'Fyrste sida',
+'table_pager_last' => 'Siste sida',
 'table_pager_limit' => 'Vis $1 element per side',
 'table_pager_limit_label' => 'Element per side:',
 'table_pager_limit_submit' => 'Gå',
@@ -3436,6 +3599,7 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-specialpages' => 'Spesialsider',
 'version-parserhooks' => 'Parsertillegg',
 'version-variables' => 'Variablar',
+'version-antispam' => 'Hindring av spam',
 'version-skins' => 'Draktar',
 'version-other' => 'Anna',
 'version-mediahandlers' => 'Mediahandsamarar',
@@ -3452,6 +3616,9 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-software' => 'Installert programvare',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versjon',
+'version-entrypoints' => 'URL-ar til inngangspunkt',
+'version-entrypoints-header-entrypoint' => 'Inngangspunkt',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Filsti',
@@ -3476,10 +3643,10 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'specialpages' => 'Spesialsider',
 'specialpages-note' => '----
 * Vanlege spesialsider.
-* <strong class="mw-specialpagerestricted">Spesialsider med avgrensa tilgang.</strong>',
+* <span class="mw-specialpagerestricted">Spesialsider med avgrensa tilgang.</span>',
 'specialpages-group-maintenance' => 'Vedlikehaldsrapportar',
 'specialpages-group-other' => 'Andre spesialsider',
-'specialpages-group-login' => 'Innlogging / registrering',
+'specialpages-group-login' => 'Logga inn / oppretta brukarkonto',
 'specialpages-group-changes' => 'Siste endringar og loggar',
 'specialpages-group-media' => 'Medierapportar og opplastingar',
 'specialpages-group-users' => 'Brukarar og brukartilgangar',
@@ -3525,6 +3692,9 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'compare-rev1' => 'Versjon 1',
 'compare-rev2' => 'Versjon 2',
 'compare-submit' => 'Samanlikna',
+'compare-invalid-title' => 'Tittelen du oppgav er ugild.',
+'compare-title-not-exists' => 'Tittelen du oppgav finst ikkje.',
+'compare-revision-not-exists' => 'Versjonen du oppgav finst ikkje.',
 
 # Database error messages
 'dberr-header' => 'Denne wikien har eit problem',
@@ -3580,6 +3750,8 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'newuserlog-byemail' => 'passordet er sendt på e-post',
 
 # Feedback
+'feedback-bugornote' => 'Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].
+Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på sida «[$3 $2]», i lag med brukarnamnet ditt og kva for nettlesar du nyttar.',
 'feedback-subject' => 'Emne:',
 'feedback-message' => 'Melding:',
 'feedback-cancel' => 'Bryt av',
@@ -3590,9 +3762,17 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'feedback-error3' => 'Feil: Saknar svar frå API',
 'feedback-thanks' => 'Takk! Attendemeldinga di er lagd inn på sida «[$2 $1]».',
 'feedback-close' => 'Gjort',
+'feedback-bugcheck' => 'Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].',
+'feedback-bugnew' => 'Eg såg etter. Rapporter ein ny feil',
+
+# Search suggestions
+'searchsuggest-search' => 'Søk',
+'searchsuggest-containing' => 'som inneheld …',
 
 # API errors
 'api-error-badaccess-groups' => 'Du har ikkje løyve til å lasta opp filer til wikien.',
+'api-error-badtoken' => 'Intern feil: ugild token.',
+'api-error-copyuploaddisabled' => 'Opplasting etter URL er avslege på tenaren.',
 'api-error-duplicate' => 'Det finst {{PLURAL:$1|[$2 ei anna fil]|[$2 andre filer]}} på nettstaden med same innhaldet.',
 'api-error-duplicate-archive' => 'Det fanst {{PLURAL:$1|[$2 ei anna fil]|[$2 andre filer]}} på nettstaden med det same innhaldet, men {{PLURAL:$1|ho|dei}} vart sletta.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Tvifelt fil|Tvifelte filer}} som alt er sletta',
@@ -3600,19 +3780,27 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'api-error-empty-file' => 'Fila du sende var tom.',
 'api-error-emptypage' => 'Det er ikkje tillate å oppretta nye tomme sider.',
 'api-error-fetchfileerror' => 'Intern feil: Noko gjekk gale då fila vart henta.',
+'api-error-fileexists-forbidden' => 'Ei fil med namnet «$1» finst alt, og kan ikkje skrivast over.',
+'api-error-fileexists-shared-forbidden' => 'Ei fil med namnet «$1» finst alt i den delte filsamlinga, og kan ikkje skrivast over.',
 'api-error-file-too-large' => 'Fila du sende var for stor.',
 'api-error-filename-tooshort' => 'Filnamnet er for stutt.',
 'api-error-filetype-banned' => 'Denne filtypen er ikkje tillaten.',
-'api-error-filetype-banned-type' => '$1 er ikkje ein tillaten filtype. {{PLURAL:$3|Tillaten filtype er|Tillatne filtypar er}} $2.',
+'api-error-filetype-banned-type' => '$1 er ikkje {{PLURAL:$4|ein tillaten filtype|tillatne filtypar}}. {{PLURAL:$3|Tillaten filtype|Tillatne filtypar}} er $2.',
 'api-error-filetype-missing' => 'Fila saknar ei ending.',
+'api-error-hookaborted' => 'Endringa du freista vart avbroten av ei utviding.',
 'api-error-http' => 'Intern feil: kan ikkje kopla til tenaren.',
 'api-error-illegal-filename' => 'Filnamnet er ikkje tillate.',
 'api-error-internal-error' => 'Intern feil: Noko gjekk gale med handsaminga av opplastinga di til wikien.',
 'api-error-invalid-file-key' => 'Intern feil: Fila vart ikkje funnen i mellombels lagringsplass.',
+'api-error-missingparam' => 'Intern feil: det saknar parametrar i førespurnaden.',
+'api-error-missingresult' => 'Intern feil: kunne ikkje avgjera om koperinga var vellukka.',
 'api-error-mustbeloggedin' => 'Du lyt vera innlogga for å lasta opp filer.',
+'api-error-mustbeposted' => 'Intern feil: førespurnad krev HTTP POST.',
 'api-error-noimageinfo' => 'Opplastinga gjekk greitt, men tenaren gav oss ikkje noko informasjon om fila.',
+'api-error-nomodule' => 'Intern feil: ingen opplastingsmodul er vald.',
 'api-error-ok-but-empty' => 'Intern feil: ikkje noko svar frå tenaren.',
 'api-error-overwrite' => 'Det er ikkje tillate å skriva over filer som alt finst.',
+'api-error-stashfailed' => 'Intern feil: tenaren greidde ikkje å lagra ei mellombels fil.',
 'api-error-timeout' => 'Tenaren svara ikkje innan tida svar var venta.',
 'api-error-unclassified' => 'Det oppstod ein ukjend feil.',
 'api-error-unknown-code' => 'Ukjend feil: «$1»',
index 210e0eb..5a67f1f 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'sundie',
-'monday'        => 'lundie',
-'tuesday'       => 'mardie',
-'wednesday'     => 'merkurdie',
-'thursday'      => 'jodie',
-'friday'        => 'venerdie',
-'saturday'      => 'saturdie',
-'sun'           => 'sun',
-'mon'           => 'lun',
-'tue'           => 'mar',
-'wed'           => 'mer',
-'thu'           => 'jod',
-'fri'           => 'ven',
-'sat'           => 'sat',
-'january'       => 'januare',
-'february'      => 'februare',
-'march'         => 'marte',
-'april'         => 'aprile',
-'may_long'      => 'maye',
-'june'          => 'june',
-'july'          => 'julie',
-'august'        => 'auguste',
-'september'     => 'septembre',
-'october'       => 'oktobre',
-'november'      => 'novembre',
-'december'      => 'desembre',
-'january-gen'   => 'de januare',
-'february-gen'  => 'de februare',
-'march-gen'     => 'de marte',
-'april-gen'     => 'de aprile',
-'may-gen'       => 'de maye',
-'june-gen'      => 'de june',
-'july-gen'      => 'de julie',
-'august-gen'    => 'de auguste',
+'sunday' => 'sundie',
+'monday' => 'lundie',
+'tuesday' => 'mardie',
+'wednesday' => 'merkurdie',
+'thursday' => 'jodie',
+'friday' => 'venerdie',
+'saturday' => 'saturdie',
+'sun' => 'sun',
+'mon' => 'lun',
+'tue' => 'mar',
+'wed' => 'mer',
+'thu' => 'jod',
+'fri' => 'ven',
+'sat' => 'sat',
+'january' => 'januare',
+'february' => 'februare',
+'march' => 'marte',
+'april' => 'aprile',
+'may_long' => 'maye',
+'june' => 'june',
+'july' => 'julie',
+'august' => 'auguste',
+'september' => 'septembre',
+'october' => 'oktobre',
+'november' => 'novembre',
+'december' => 'desembre',
+'january-gen' => 'de januare',
+'february-gen' => 'de februare',
+'march-gen' => 'de marte',
+'april-gen' => 'de aprile',
+'may-gen' => 'de maye',
+'june-gen' => 'de june',
+'july-gen' => 'de julie',
+'august-gen' => 'de auguste',
 'september-gen' => 'de septembre',
-'october-gen'   => 'de oktobre',
-'november-gen'  => 'de novembre',
-'december-gen'  => 'de desembre',
-'jan'           => 'jan',
-'feb'           => 'feb',
-'mar'           => 'mar',
-'apr'           => 'apr',
-'may'           => 'maye',
-'jun'           => 'jun',
-'jul'           => 'jul',
-'aug'           => 'aug',
-'sep'           => 'sep',
-'oct'           => 'okt',
-'nov'           => 'nov',
-'dec'           => 'des',
+'october-gen' => 'de oktobre',
+'november-gen' => 'de novembre',
+'december-gen' => 'de desembre',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'maye',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'des',
 
 # Categories related messages
-'pagecategories'  => '{{PLURAL:$1|Kategorie|Kategories}}',
+'pagecategories' => '{{PLURAL:$1|Kategorie|Kategories}}',
 'category_header' => 'Artikles in kategorie "$1"',
-'subcategories'   => 'Subkategories',
+'subcategories' => 'Subkategories',
 
-'about'         => 'Pri',
-'article'       => 'Pagine de kontenaje',
-'newwindow'     => '(aperta in novi fenestre)',
-'cancel'        => 'Nihilisa',
+'about' => 'Pri',
+'article' => 'Pagine de kontenaje',
+'newwindow' => '(aperta in novi fenestre)',
+'cancel' => 'Nihilisa',
 'moredotdotdot' => 'Plu...',
-'mypage'        => 'Men pagine',
-'mytalk'        => 'Men parla-pagine',
-'anontalk'      => 'Parlo por disi IP',
-'navigation'    => 'Navigatione',
-'and'           => '&#32;e',
+'mypage' => 'Men pagine',
+'mytalk' => 'Men parla-pagine',
+'anontalk' => 'Parlo por disi IP',
+'navigation' => 'Navigatione',
+'and' => '&#32;e',
 
 # Cologne Blue skin
-'qbfind'         => 'Trova',
-'qbedit'         => 'Modifika',
-'qbpageoptions'  => 'Disi pagine',
-'qbmyoptions'    => 'Men pagines',
+'qbfind' => 'Trova',
+'qbedit' => 'Modifika',
+'qbpageoptions' => 'Disi pagine',
+'qbmyoptions' => 'Men pagines',
 'qbspecialpages' => 'Spesial pagines',
 
 # Vector skin
 'vector-action-delete' => 'Ekarta',
-'vector-view-edit'     => 'Modifika',
-'vector-view-view'     => 'Lekte',
-
-'returnto'         => 'Rivada a $1.',
-'tagline'          => 'Fro {{SITENAME}}',
-'help'             => 'Helpo',
-'search'           => 'Sercha',
-'searchbutton'     => 'Sercha',
-'go'               => 'Vada',
-'searcharticle'    => 'Vada',
-'history'          => 'Historie del pagine',
-'history_short'    => 'Historie',
+'vector-view-edit' => 'Modifika',
+'vector-view-view' => 'Lekte',
+
+'returnto' => 'Rivada a $1.',
+'tagline' => 'Fro {{SITENAME}}',
+'help' => 'Helpo',
+'search' => 'Sercha',
+'searchbutton' => 'Sercha',
+'go' => 'Vada',
+'searcharticle' => 'Vada',
+'history' => 'Historie del pagine',
+'history_short' => 'Historie',
 'printableversion' => 'Printindi versione',
-'permalink'        => 'Permananti linke',
-'print'            => 'Printa',
-'edit'             => 'Immodifika',
-'editthispage'     => 'Modifika disi pagine',
-'delete'           => 'Ekarta',
-'deletethispage'   => 'Ekarta disi pagine',
-'protect'          => 'Protekte',
-'protectthispage'  => 'Protekte disi pagine',
-'newpage'          => 'Novi pagine',
-'talkpage'         => 'Diskuse disi pagine',
+'permalink' => 'Permananti linke',
+'print' => 'Printa',
+'edit' => 'Immodifika',
+'editthispage' => 'Modifika disi pagine',
+'delete' => 'Ekarta',
+'deletethispage' => 'Ekarta disi pagine',
+'protect' => 'Protekte',
+'protectthispage' => 'Protekte disi pagine',
+'newpage' => 'Novi pagine',
+'talkpage' => 'Diskuse disi pagine',
 'talkpagelinktext' => 'Diskusione',
-'specialpage'      => 'Spesial Pagine',
-'articlepage'      => 'Regarda pagine de kontenaje',
-'talk'             => 'Diskusione',
-'toolbox'          => 'Utensiles',
-'userpage'         => 'Vida useren pagine',
-'imagepage'        => 'Regarda imajal pagine',
-'mediawikipage'    => 'Regarda mesajal pagine',
-'templatepage'     => 'Vida shablonal pagine',
-'categorypage'     => 'Regarda kategorial pagine',
-'otherlanguages'   => 'Altri lingues',
-'lastmodifiedat'   => 'Disi pagine blid lastim modifika: $2 ye $1.',
+'specialpage' => 'Spesial Pagine',
+'articlepage' => 'Regarda pagine de kontenaje',
+'talk' => 'Diskusione',
+'toolbox' => 'Utensiles',
+'userpage' => 'Vida useren pagine',
+'imagepage' => 'Regarda imajal pagine',
+'mediawikipage' => 'Regarda mesajal pagine',
+'templatepage' => 'Vida shablonal pagine',
+'categorypage' => 'Regarda kategorial pagine',
+'otherlanguages' => 'Altri lingues',
+'lastmodifiedat' => 'Disi pagine blid lastim modifika: $2 ye $1.',
 'jumptonavigation' => 'navigatione',
-'jumptosearch'     => 'sercha',
+'jumptosearch' => 'sercha',
 
 # 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'            => 'Pri {{SITENAME}}',
-'aboutpage'            => 'Project:Pri',
-'currentevents'        => 'Nuni eventes',
-'currentevents-url'    => 'Project:Nuni eventes',
-'edithelp'             => 'Helpo pri modifiko de pagines',
-'helppage'             => 'Help:Kontenaje',
-'mainpage'             => 'Chefi pagine',
+'aboutsite' => 'Pri {{SITENAME}}',
+'aboutpage' => 'Project:Pri',
+'currentevents' => 'Nuni eventes',
+'currentevents-url' => 'Project:Nuni eventes',
+'edithelp' => 'Helpo pri modifiko de pagines',
+'helppage' => 'Help:Kontenaje',
+'mainpage' => 'Chefi pagine',
 'mainpage-description' => 'Chefi pagine',
-'portal'               => 'Li komun chambre',
-'portal-url'           => 'Project:Li komun chambre',
+'portal' => 'Li komun chambre',
+'portal-url' => 'Project:Li komun chambre',
 
 'badaccess' => 'Permisione erore',
 
-'youhavenewmessages'      => 'Vu have $1 ($2).',
-'newmessageslink'         => 'novi mesajes',
-'newmessagesdifflink'     => 'lasti chanjo',
+'youhavenewmessages' => 'Vu have $1 ($2).',
+'newmessageslink' => 'novi mesajes',
+'newmessagesdifflink' => 'lasti chanjo',
 'youhavenewmessagesmulti' => 'Vu have novi mesajes pri $1',
-'editsection'             => 'modifika',
-'editold'                 => 'modifika',
-'editlink'                => 'modifika',
-'restorelink'             => '{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}',
-'red-link-title'          => '$1 (pagine non exista)',
+'editsection' => 'modifika',
+'editold' => 'modifika',
+'editlink' => 'modifika',
+'restorelink' => '{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}',
+'red-link-title' => '$1 (pagine non exista)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Artikle',
-'nstab-user'      => 'Useren pagine',
-'nstab-special'   => 'Spesial pagine',
-'nstab-project'   => 'Projetal pagine',
+'nstab-main' => 'Artikle',
+'nstab-user' => 'Useren pagine',
+'nstab-special' => 'Spesial pagine',
+'nstab-project' => 'Projetal pagine',
 'nstab-mediawiki' => 'Mesaje',
-'nstab-template'  => 'Shablone',
-'nstab-help'      => 'Helpo-pagine',
-'nstab-category'  => 'Kategorie',
+'nstab-template' => 'Shablone',
+'nstab-help' => 'Helpo-pagine',
+'nstab-category' => 'Kategorie',
 
 # General errors
-'error'        => 'Erore',
-'badtitle'     => 'Mali title',
+'error' => 'Erore',
+'badtitle' => 'Mali title',
 'badtitletext' => 'Li pregati pagine esed non-valid, vakui, o non-korektim linkat inter-lingue o inter-wiki title. Lu povud kontena un o plusi karakteres kel on non pove usa in titles.',
 
 # Login and logout pages
-'logouttext'                 => "'''Vu es nun eksignatat.'''
+'logouttext' => "'''Vu es nun eksignatat.'''
 
 Vu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.",
-'yourname'                   => 'Usere-nome:',
-'yourpassword'               => 'Pasa-vorde:',
-'remembermypassword'         => 'Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                      => 'Ensignata',
-'loginprompt'                => 'Vu mus lasa cookies de ensignata en {{SITENAME}}.',
-'userlogin'                  => 'Ensignata / krea usere-registre',
-'logout'                     => 'Eksignata',
-'userlogout'                 => 'Eksignata',
-'notloggedin'                => 'Non ensignatat',
-'nologin'                    => "Ob vu non have registre? '''$1'''.",
-'nologinlink'                => 'Krea usere-registre',
-'gotaccountlink'             => 'Ensignata',
-'loginerror'                 => 'Erore de ensignato',
-'loginsuccesstitle'          => 'Ensignato suksesosi',
-'loginsuccess'               => "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"\$1\".'''",
-'mailmypassword'             => 'E-posta men pasa-vorde',
+'yourname' => 'Usere-nome:',
+'yourpassword' => 'Pasa-vorde:',
+'remembermypassword' => 'Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Ensignata',
+'loginprompt' => 'Vu mus lasa cookies de ensignata en {{SITENAME}}.',
+'userlogin' => 'Ensignata / krea usere-registre',
+'logout' => 'Eksignata',
+'userlogout' => 'Eksignata',
+'notloggedin' => 'Non ensignatat',
+'nologin' => "Ob vu non have registre? '''$1'''.",
+'nologinlink' => 'Krea usere-registre',
+'gotaccountlink' => 'Ensignata',
+'loginerror' => 'Erore de ensignato',
+'loginsuccesstitle' => 'Ensignato suksesosi',
+'loginsuccess' => "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"\$1\".'''",
+'mailmypassword' => 'E-posta men pasa-vorde',
 'acct_creation_throttle_hit' => 'Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.
 As a result, visitors using this IP address cannot create any more accounts at the moment.',
-'accountcreated'             => 'Registre kreat',
-'accountcreatedtext'         => 'Li usere-registre por $1 ha bli krea.',
+'accountcreated' => 'Registre kreat',
+'accountcreatedtext' => 'Li usere-registre por $1 ha bli krea.',
 
 # Edit page toolbar
-'bold_sample'  => 'Diki texte',
+'bold_sample' => 'Diki texte',
 'image_sample' => 'Exemple.jpg',
 
 # Edit pages
-'summary'       => 'Resume:',
-'minoredit'     => 'Dise es mikri modifiko',
-'watchthis'     => 'Observa disi pagine',
-'savearticle'   => 'Spara pagine',
-'showpreview'   => 'Montra previdatu',
-'showdiff'      => 'Montra chanjos',
+'summary' => 'Resume:',
+'minoredit' => 'Dise es mikri modifiko',
+'watchthis' => 'Observa disi pagine',
+'savearticle' => 'Spara pagine',
+'showpreview' => 'Montra previdatu',
+'showdiff' => 'Montra chanjos',
 'loginreqtitle' => 'Ensignato Postulat',
-'loginreqlink'  => 'ensignata',
-'accmailtitle'  => 'Pasa-vorde sendat.',
-'accmailtext'   => 'Li pasa-vorde por "$1" ha bli senda a $2.',
-'yourtext'      => 'Vun texte',
+'loginreqlink' => 'ensignata',
+'accmailtitle' => 'Pasa-vorde sendat.',
+'accmailtext' => 'Li pasa-vorde por "$1" ha bli senda a $2.',
+'yourtext' => 'Vun texte',
 
 # History pages
-'currentrev'          => 'Nuni revisione',
+'currentrev' => 'Nuni revisione',
 'currentrevisionlink' => 'Nuni revisione',
-'histfirst'           => 'Maxim frui',
-'histlast'            => 'Maxim resenti',
+'histfirst' => 'Maxim frui',
+'histlast' => 'Maxim resenti',
 
 # Revision feed
-'history-feed-title'       => 'Historie de revisiones',
+'history-feed-title' => 'Historie de revisiones',
 'history-feed-description' => 'Historie de revisiones de disi pagine sur li wiki',
-'history-feed-empty'       => 'Li petit pagine non exista.
+'history-feed-empty' => 'Li petit pagine non exista.
 Forsan lu ha bli ekarta fro li wiki, o rinomat.
 Proba [[Special:Search|sercho sur li wiki]] por relatet pagines.',
 
 # Diffs
-'lineno'                  => 'Linie $1:',
+'lineno' => 'Linie $1:',
 'compareselectedversions' => 'Kompara selektet versiones',
 
 # Search results
-'searchresults'         => 'Resultes de sercho',
-'searchresulttext'      => 'Por plu multi informatione pri sercho {{SITENAME}}, vida [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle'        => "Vu serchad '''[[:$1]]'''",
+'searchresults' => 'Resultes de sercho',
+'searchresulttext' => 'Por plu multi informatione pri sercho {{SITENAME}}, vida [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => "Vu serchad '''[[:$1]]'''",
 'searchsubtitleinvalid' => "Vu serchad '''$1'''",
-'prevn'                 => 'lasti {{PLURAL:$1|$1}}',
-'nextn'                 => 'sekuenti {{PLURAL:$1|$1}}',
-'viewprevnext'          => 'Vida ($1 {{int:pipe-separator}} $2) ($3).',
-'searchhelp-url'        => 'Help:Kontenaje',
-'search-result-size'    => '$1 ({{PLURAL:$2|1 vorde|$2 vordes}})',
-'showingresults'        => "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
-'showingresultsnum'     => "Montrant subu {{PLURAL:$3|'''1''' result|'''$3''' results}} komensant fro #'''$2'''.",
-'powersearch'           => 'Sercha',
+'prevn' => 'lasti {{PLURAL:$1|$1}}',
+'nextn' => 'sekuenti {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Vida ($1 {{int:pipe-separator}} $2) ($3).',
+'searchhelp-url' => 'Help:Kontenaje',
+'search-result-size' => '$1 ({{PLURAL:$2|1 vorde|$2 vordes}})',
+'showingresults' => "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
+'showingresultsnum' => "Montrant subu {{PLURAL:$3|'''1''' result|'''$3''' results}} komensant fro #'''$2'''.",
+'powersearch' => 'Sercha',
 
 # Preferences page
-'preferences'           => 'Preferos',
-'mypreferences'         => 'Men preferos',
-'prefsnologin'          => 'Non ensignatat',
-'prefsnologintext'      => 'Vu mus es <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensignatat] por determina useren preferos.',
-'prefs-rc'              => 'Resenti chanjos',
-'searchresultshead'     => 'Sercha',
+'preferences' => 'Preferos',
+'mypreferences' => 'Men preferos',
+'prefsnologin' => 'Non ensignatat',
+'prefsnologintext' => 'Vu mus es <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensignatat] por determina useren preferos.',
+'prefs-rc' => 'Resenti chanjos',
+'searchresultshead' => 'Sercha',
 'timezoneregion-africa' => 'Afrika',
 
 # Recent changes
-'nchanges'        => '$1 {{PLURAL:$1|chanjo|chanjos}}',
-'recentchanges'   => 'Resenti chanjos',
-'rcnote'          => "Subu es {{PLURAL:$1| '''1''' chanje|li lasti '''$1''' chanjes}} in li lasti {{PLURAL:$2|die|'''$2''' dies}}, fro $4, $5.",
+'nchanges' => '$1 {{PLURAL:$1|chanjo|chanjos}}',
+'recentchanges' => 'Resenti chanjos',
+'rcnote' => "Subu es {{PLURAL:$1| '''1''' chanje|li lasti '''$1''' chanjes}} in li lasti {{PLURAL:$2|die|'''$2''' dies}}, fro $4, $5.",
 'rcshowhideminor' => '$1 minori modifikos',
 'rcshowhideanons' => '$1 anonimi useres',
-'rcshowhidemine'  => '$1 men modifikos',
-'rclinks'         => 'Montra lasti $1 chanjes in lasti $2 dies<br />$3',
-'hist'            => 'hist',
-'hide'            => 'Kasha',
-'show'            => 'Montra',
+'rcshowhidemine' => '$1 men modifikos',
+'rclinks' => 'Montra lasti $1 chanjes in lasti $2 dies<br />$3',
+'hist' => 'hist',
+'hide' => 'Kasha',
+'show' => 'Montra',
 'minoreditletter' => 'm',
-'newpageletter'   => 'N',
+'newpageletter' => 'N',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Afini chanjos',
-'recentchangeslinked-feed'    => 'Afini chanjos',
+'recentchangeslinked' => 'Afini chanjos',
+'recentchangeslinked-feed' => 'Afini chanjos',
 'recentchangeslinked-toolbox' => 'Afini chanjos',
 
 # Upload
-'upload'            => 'Enporta',
-'uploadnologin'     => 'Non ensignatat',
-'filedesc'          => 'Resume',
+'upload' => 'Enporta',
+'uploadnologin' => 'Non ensignatat',
+'filedesc' => 'Resume',
 'fileuploadsummary' => 'Resume:',
-'watchthisupload'   => 'Observa disi pagine',
+'watchthisupload' => 'Observa disi pagine',
 
 # Special:ListFiles
-'listfiles_search_for'  => 'Sercha imaje nome:',
-'listfiles_name'        => 'Nome',
-'listfiles_user'        => 'Usere',
-'listfiles_size'        => 'Grandeso (bites)',
+'listfiles_search_for' => 'Sercha imaje nome:',
+'listfiles_name' => 'Nome',
+'listfiles_user' => 'Usere',
+'listfiles_size' => 'Grandeso (bites)',
 'listfiles_description' => 'Deskriptione',
 
 # File description page
 'filehist-user' => 'Usere',
-'imagelinks'    => 'Linkes',
+'imagelinks' => 'Linkes',
 
 # Random page
 'randompage' => 'Arbitriari pagine',
 
-'brokenredirects'      => 'Rupteti ri-adresos',
-'brokenredirectstext'  => 'Li sekuenti ri-adresos linka a non-existanti pagines:',
+'brokenredirects' => 'Rupteti ri-adresos',
+'brokenredirectstext' => 'Li sekuenti ri-adresos linka a non-existanti pagines:',
 'brokenredirects-edit' => 'editja',
 
 'fewestrevisions' => 'Artikles kun minim multi revisiones',
 
 # Miscellaneous special pages
-'ncategories'             => '$1 {{PLURAL:$1|kategorie|kategories}}',
-'lonelypages'             => 'Pagines kel non bli kupla',
-'lonelypagestext'         => 'Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.',
-'uncategorizedpages'      => 'Pagines sin kategorie',
+'ncategories' => '$1 {{PLURAL:$1|kategorie|kategories}}',
+'lonelypages' => 'Pagines kel non bli kupla',
+'lonelypagestext' => 'Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.',
+'uncategorizedpages' => 'Pagines sin kategorie',
 'uncategorizedcategories' => 'Kategories sin kategorie',
-'uncategorizedimages'     => 'Imajes sin kategorie',
-'popularpages'            => 'Popular pagines',
-'mostcategories'          => 'Artikles kun maxim multi kategories',
-'mostrevisions'           => 'Artikles kun maxim multi revisiones',
-'shortpages'              => 'Kurti pagines',
-'longpages'               => 'Longi pagines',
-'deadendpages'            => 'Pagines sin kuplures',
-'listusers'               => 'Liste de useres',
-'newpages'                => 'Novi pagines',
-'ancientpages'            => 'Maxim ansieni pagines',
-'move'                    => 'Mova',
-'movethispage'            => 'Mova (rinomisa) disi pagine',
+'uncategorizedimages' => 'Imajes sin kategorie',
+'popularpages' => 'Popular pagines',
+'mostcategories' => 'Artikles kun maxim multi kategories',
+'mostrevisions' => 'Artikles kun maxim multi revisiones',
+'shortpages' => 'Kurti pagines',
+'longpages' => 'Longi pagines',
+'deadendpages' => 'Pagines sin kuplures',
+'listusers' => 'Liste de useres',
+'newpages' => 'Novi pagines',
+'ancientpages' => 'Maxim ansieni pagines',
+'move' => 'Mova',
+'movethispage' => 'Mova (rinomisa) disi pagine',
 
 # Book sources
-'booksources'               => 'Libral fontes',
+'booksources' => 'Libral fontes',
 'booksources-search-legend' => 'Sercha libral fontes',
-'booksources-go'            => 'Vada',
+'booksources-go' => 'Vada',
 
 # Special:Log
 'specialloguserlabel' => 'Usere:',
 
 # Special:AllPages
-'allpages'          => 'Omni pagines',
-'alphaindexline'    => '$1 a $2',
-'allarticles'       => 'Omni artikles',
-'allinnamespace'    => 'Omni pagines ($1 nome-spatie)',
+'allpages' => 'Omni pagines',
+'alphaindexline' => '$1 a $2',
+'allarticles' => 'Omni artikles',
+'allinnamespace' => 'Omni pagines ($1 nome-spatie)',
 'allnotinnamespace' => 'Omni pagines (non in $1 nome-spatie)',
-'allpagesprev'      => 'Antei',
-'allpagesnext'      => 'Sekuenti',
-'allpagessubmit'    => 'Vada',
+'allpagesprev' => 'Antei',
+'allpagesnext' => 'Sekuenti',
+'allpagessubmit' => 'Vada',
 
 # Special:Categories
-'categories'         => 'Kategories',
+'categories' => 'Kategories',
 'categoriespagetext' => 'Li sekuenti {{PLURAL:$1|kategorie|kategories}} exista in li wiki.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
@@ -345,39 +345,39 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'linksearch-ok' => 'Sercha',
 
 # Watchlist
-'watchlist'       => 'Men liste de observos',
-'mywatchlist'     => 'Men liste de observos',
-'nowatchlist'     => 'Vu have nuli koses in vun liste de observos.',
-'watchnologin'    => 'Non ensignatat',
-'addedwatchtext'  => "Li pagine \"[[:\$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].
+'watchlist' => 'Men liste de observos',
+'mywatchlist' => 'Men liste de observos',
+'nowatchlist' => 'Vu have nuli koses in vun liste de observos.',
+'watchnologin' => 'Non ensignatat',
+'addedwatchtext' => "Li pagine \"[[:\$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].
 Futuri chanjos a disi pagine e lun asosiati Parla-pagine sal bli lista tilok, e li pagine sal apari '''diki''' in li [[Special:RecentChanges|liste de resenti chanjos]] por ke on trova lu plu fasilim.
 
 Si vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserva\" in li lateral kolumne.",
-'watch'           => 'Observa',
-'watchthispage'   => 'Observa disi pagine',
-'unwatch'         => 'Desobserva',
+'watch' => 'Observa',
+'watchthispage' => 'Observa disi pagine',
+'unwatch' => 'Desobserva',
 'unwatchthispage' => 'Des-observa disi pagine',
 
-'changed'            => 'chanjati',
+'changed' => 'chanjati',
 'enotif_lastvisited' => 'Regarda $1 por vida omni chanjes depos vun lasti visite.',
 
 # Delete
-'confirm'         => 'Konfirma',
-'excontent'       => "kontenaje esed: '$1'",
+'confirm' => 'Konfirma',
+'excontent' => "kontenaje esed: '$1'",
 'excontentauthor' => "kontenaje esed: '$1' (e li soli kontribuere esed '[[Special:Contributions/$2|$2]]')",
-'exblank'         => 'pagine esed vakui',
-'actioncomplete'  => 'Akto kompleti',
-'dellogpage'      => 'Loge de ekartos',
-'dellogpagetext'  => 'Subu es liste del maxim resenti ekartos.',
-'deletionlog'     => 'registre de ekartos',
-'deletecomment'   => 'Resone:',
+'exblank' => 'pagine esed vakui',
+'actioncomplete' => 'Akto kompleti',
+'dellogpage' => 'Loge de ekartos',
+'dellogpagetext' => 'Subu es liste del maxim resenti ekartos.',
+'deletionlog' => 'registre de ekartos',
+'deletecomment' => 'Resone:',
 
 # Rollback
 'revertpage' => 'Riverted modifikos da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); restaurad lasti versione da [[User:$1|$1]]',
 
 # Protect
-'prot_1movedto2'      => '[[$1]] movat a [[$2]]',
-'protect-legend'      => 'Konfirma protektione',
+'prot_1movedto2' => '[[$1]] movat a [[$2]]',
+'protect-legend' => 'Konfirma protektione',
 'protect-level-sysop' => 'Sisopes nur',
 
 # Namespace form on various pages
@@ -385,64 +385,64 @@ Si vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserv
 
 # Contributions
 'contributions' => 'Useren kontributiones',
-'mycontris'     => 'Men kontributiones',
+'mycontris' => 'Men kontributiones',
 
 'sp-contributions-newbies' => 'Montra kontributiones nur de novi useres',
-'sp-contributions-talk'    => 'Diskusione',
-'sp-contributions-search'  => 'Sercha kontributiones',
-'sp-contributions-submit'  => 'Sercha',
+'sp-contributions-talk' => 'Diskusione',
+'sp-contributions-search' => 'Sercha kontributiones',
+'sp-contributions-submit' => 'Sercha',
 
 # What links here
-'whatlinkshere'       => 'Tum kel kupla hir',
-'whatlinkshere-page'  => 'Pagine:',
+'whatlinkshere' => 'Tum kel kupla hir',
+'whatlinkshere-page' => 'Pagine:',
 'whatlinkshere-links' => '← linkes',
 
 # Block/unblock
-'ipbreason'    => 'Resone:',
+'ipbreason' => 'Resone:',
 'badipaddress' => 'Non-valid IP adrese',
 'contribslink' => 'Kontributiones',
 
 # Move page
-'movearticle'             => 'Mova pagine',
-'movenologin'             => 'Non ensignatat',
-'move-watch'              => 'Observa disi pagine',
-'movedto'                 => 'movat a',
-'movereason'              => 'Resone:',
-'delete_and_move'         => 'Ekarta e mova',
+'movearticle' => 'Mova pagine',
+'movenologin' => 'Non ensignatat',
+'move-watch' => 'Observa disi pagine',
+'movedto' => 'movat a',
+'movereason' => 'Resone:',
+'delete_and_move' => 'Ekarta e mova',
 'delete_and_move_confirm' => 'Yes, ekarta li pagine',
-'delete_and_move_reason'  => 'Ekartat por fa spatie por movo "[[$1]]"',
+'delete_and_move_reason' => 'Ekartat por fa spatie por movo "[[$1]]"',
 
 # Namespace 8 related
-'allmessages'        => 'Sisteme mesajes',
-'allmessagesname'    => 'Nome',
+'allmessages' => 'Sisteme mesajes',
+'allmessagesname' => 'Nome',
 'allmessagesdefault' => 'Non-spesifikati texte',
 'allmessagescurrent' => 'Nuni texte',
-'allmessagestext'    => 'Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.',
+'allmessagestext' => 'Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.',
 
 # Tooltip help for the actions
-'tooltip-pt-mytalk'      => 'Vun parla-pagine',
+'tooltip-pt-mytalk' => 'Vun parla-pagine',
 'tooltip-pt-preferences' => 'Men preferos',
-'tooltip-pt-logout'      => 'Eksignata',
-'tooltip-p-logo'         => 'Chefi pagine',
+'tooltip-pt-logout' => 'Eksignata',
+'tooltip-p-logo' => 'Chefi pagine',
 
 # Special:NewFiles
 'ilsubmit' => 'Sercha',
-'bydate'   => 'segun date',
+'bydate' => 'segun date',
 
 # EXIF tags
-'exif-imagewidth'       => 'Larjeso',
-'exif-imagelength'      => 'Alteso',
+'exif-imagewidth' => 'Larjeso',
+'exif-imagelength' => 'Alteso',
 'exif-imagedescription' => 'Title de imaje',
-'exif-imageuniqueid'    => 'Unik imaje ID',
+'exif-imageuniqueid' => 'Unik imaje ID',
 
 # Auto-summaries
 'autosumm-replace' => "Remplasant pagine kun '$1'",
 'autoredircomment' => 'Ri-adresant a [[$1]]',
-'autosumm-new'     => 'Novi pagine: $1',
+'autosumm-new' => 'Novi pagine: $1',
 
 # Special:Version
-'version'                  => 'Versione',
-'version-specialpages'     => 'Spesial pagines',
+'version' => 'Versione',
+'version-specialpages' => 'Spesial pagines',
 'version-software-version' => 'Versione',
 
 # Special:SpecialPages
index 94b5b1f..edc5210 100644 (file)
@@ -32,14 +32,14 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'currentmonth'            => array( '1', 'KGWEDI_BJALE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'LEINA_KGWEDI_BJALE', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'LEHONO_LETSATSI', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'LEHONO_LETSATSI2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'LEHONO_LETSATSILEINA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NGWAGA_BJALE', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NAKO_BJALE', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'IRI_BJALE', 'CURRENTHOUR' ),
+       'currentmonth'              => array( '1', 'KGWEDI_BJALE', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'LEINA_KGWEDI_BJALE', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'LEHONO_LETSATSI', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'LEHONO_LETSATSI2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'LEHONO_LETSATSILEINA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NGWAGA_BJALE', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NAKO_BJALE', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'IRI_BJALE', 'CURRENTHOUR' ),
 );
 
 $messages = array(
@@ -60,9 +60,9 @@ $messages = array(
 'tog-previewontop' => 'Bontšha Ponopele pele ga lepokisi la diphetogo',
 'tog-previewonfirst' => 'Bontšha Ponopeleka phetogo ya pele',
 'tog-nocache' => "Thibela go tsenya matlakala go segakolodi (''cache'')",
-'tog-enotifwatchlistpages' => 'Nromele molaetša ge letlaka leo ke le tlhapetšego le eba le diphetogo',
+'tog-enotifwatchlistpages' => 'Nthomele molaetša ge letlaka leo ke le tlhapetšego le eba le diphetogo',
 'tog-enotifusertalkpages' => 'Nromele molaetša ge letlakala la Dipoledišano laka le fetoga',
-'tog-enotifminoredits' => 'Nromele email ge goba le diphetogo tše nnyenyane go matlakala',
+'tog-enotifminoredits' => 'Ethomele e-mail ge goba le diphetogo tše nnyenyane go matlakala',
 'tog-enotifrevealaddr' => 'Bonagatša email atrese go temošo tša poso',
 'tog-shownumberswatching' => 'Laetša palo bašomiši bao ba tlhapetšego',
 'tog-fancysig' => 'Tsaeno ya gose fihliwe',
@@ -195,8 +195,8 @@ $messages = array(
 'protect' => 'Lota',
 'protect_change' => 'Fetola go lotega',
 'protectthispage' => 'Lota letlakala le',
-'unprotect' => 'Tloša go lota',
-'unprotectthispage' => 'Tloša go lota letlakaleng',
+'unprotect' => 'Fetola go lota',
+'unprotectthispage' => 'Fetola go lota letlakaleng',
 'newpage' => 'Letlakala le lempsha',
 'talkpage' => 'Rêrišana ka letlakala le',
 'talkpagelinktext' => 'Bolela',
@@ -224,6 +224,7 @@ $messages = array(
 'jumpto' => 'Taboga go:',
 'jumptonavigation' => 'Tšweletšo',
 'jumptosearch' => 'fetleka',
+'pool-errorunknown' => 'Phošo yago setsebege',
 
 # 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' => 'Mabapi le {{SITENAME}}',
@@ -256,6 +257,7 @@ $messages = array(
 'youhavenewmessages' => 'O na le $1 ($2).',
 'newmessageslink' => 'ya melaetša ye mefsa',
 'newmessagesdifflink' => 'phetogo ya mafelelo',
+'newmessagesdifflinkplural' => 'l{{PLURAL:$1|Phetogo tša|Diphetogo ya}}go feta',
 'youhavenewmessagesmulti' => 'O nale melaetša ye mefsa go $1',
 'editsection' => 'lokiša',
 'editold' => 'fetola',
@@ -454,7 +456,8 @@ oka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a man
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka "logs"],
  goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.',
 'note' => "'''Ela hloko:'''",
-'previewnote' => "'''Ye ke Taetšo ya sebopego sa letlakala fela; diphetogo ga di ya bolokwa!'''",
+'previewnote' => "'''Elelwa gore ye ke taetšo ya sebopego sa letlakala fela.'''
+Diphetogo tša gago ga šetšo di bolokwa!",
 'editing' => 'O fetola $1',
 'editingsection' => 'Phetolo ya $1 (sekgoba)',
 'editingcomment' => 'O fetola $1 (sekgao se sempsha)',
@@ -541,7 +544,7 @@ fetola tshenolo',
 'revertmerge' => 'Tloša kopaganyo',
 
 # Diffs
-'history-title' => 'Histori ya diphetogo tša "$1"',
+'history-title' => 'Poeletšo ya diphetogo tša "$1"',
 'lineno' => 'Mothalo $1:',
 'compareselectedversions' => 'Bapetša diphapang tšeo di kgethilwego',
 'editundo' => 'dirolla',
@@ -582,8 +585,6 @@ fetola tshenolo',
 'search-interwiki-caption' => 'Diprojeke tša moloko',
 'search-interwiki-default' => '$1 diphetho:',
 'search-interwiki-more' => '(gape)',
-'search-mwsuggest-enabled' => 'le dikakanyo',
-'search-mwsuggest-disabled' => 'ga go dikakanyo',
 'searchrelated' => 'tswalana',
 'searchall' => 'tšohle',
 'showingresultsheader' => "{{PLURAL:$5|Sepheto '''$1''' tša '''$3'''|Dipheto '''$1 - $2''' tša '''$3'''}} tša '''$4'''",
@@ -834,10 +835,10 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 'booksources-go' => 'Sepela',
 
 # Special:Log
-'specialloguserlabel' => 'Mošomiši:',
-'speciallogtitlelabel' => 'Thaetlele:',
+'specialloguserlabel' => 'Modiri:',
+'speciallogtitlelabel' => 'Thaetlele (goba mošumiši):',
 'log' => "Di-''log''",
-'all-logs-page' => "Di-''log'' kamoka",
+'all-logs-page' => "Di-''log'' tša bohle ka moka",
 
 # Special:AllPages
 'allpages' => 'Matlakala ka moka',
@@ -858,7 +859,7 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 'deletedcontributions-title' => 'Diabe tša mošomiši tšeo di phumutšwego',
 
 # Special:LinkSearch
-'linksearch' => 'Dihlomaganyo tša ntle',
+'linksearch' => 'Fehleka dihlomaganyo tša ntle',
 'linksearch-ok' => 'Fetleka',
 'linksearch-line' => '$1 e kgokaganywa gotšwa $2',
 
@@ -875,9 +876,9 @@ Matlakala ago ba [[Special:Watchlist|lenanong la gago la matlakala ditlhapetšo]
 'emailuser' => 'Romela mošomiši yo molaetša',
 'emailpage' => 'Romela email go mošomiši',
 'noemailtitle' => 'Gago email atrese',
-'emailfrom' => 'Go tšwa go',
-'emailsubject' => 'Sebolelwa',
-'emailmessage' => 'Molaetša',
+'emailfrom' => 'Go tšwa go:',
+'emailsubject' => 'Sebolelwa:',
+'emailmessage' => 'Molaetša:',
 'emailsend' => 'Romela',
 'emailccme' => 'Nromela kopi ya melaetša.',
 'emailccsubject' => 'Kopi ya molaetša wa gago goya go $1: $2',
@@ -931,7 +932,7 @@ Lebelela $2 go hweetša sedi ka diphulo tša bjale.',
 
 # Rollback
 'rollbacklink' => 'bošetša morago',
-'editcomment' => "Ahlaahlo ya phetogo ke : \"''\$1''\".",
+'editcomment' => "Ahlaahlo ya phetogo e bile : \"''\$1''\".",
 
 # Protect
 'protectlogpage' => "''Log'' yago lota",
@@ -955,7 +956,7 @@ Seemo sa go lota ga letlakala '''$1''':",
 'protect-expiring' => 'fetatšatši ke $1 (UTC)',
 'protect-cascade' => 'Lota matlakala, akaretša le letlakala le (go lota ka kakaretšo)',
 'protect-cantedit' => 'Ga o kgone go fetola tekano ya bolotego letlakaleng le, ka ge o sena tumello yago bofetola.',
-'protect-expiry-options' => '2 diiri:2 hours,1 letšatši:1 day,3 matšatši:3 days,1 beke:1 week,2 dibeke:2 weeks,1 kgwedi:1 month,3 digkwedi:3 months,6 dikgwedi:6 months,1 ngwaga:1 year,ga efele:infinite',
+'protect-expiry-options' => 'iri:1 hour, letšatš1:1 day,beke:1 week,dibeke tše 2:2 weeks,kgwedi:1 month,dikgwedi tše 3:3 months,dikgwedi tše 6:6 months,ngwaga:1 year,gosefele (infinite):infinite',
 'restriction-type' => 'Tumello:',
 'restriction-level' => 'Seemo sago Lota:',
 
@@ -991,7 +992,7 @@ Seemo sa go lota ga letlakala '''$1''':",
 'sp-contributions-newbies' => 'Laetša diabe tša bašumiši ba bafsa fela',
 'sp-contributions-newbies-sub' => 'Tša tšhupaleloko tše mphsa',
 'sp-contributions-blocklog' => "''Log'' yago thiba",
-'sp-contributions-deleted' => 'Diabe tša mošomiši tšeo di phumutšwego',
+'sp-contributions-deleted' => 'diabe tša mošomiši tšeo di phumutšwego',
 'sp-contributions-uploads' => 'di-"upload"',
 'sp-contributions-logs' => "Di-''log''",
 'sp-contributions-talk' => 'Poledišano',
index 9ca3c85..5a17c91 100644 (file)
@@ -35,190 +35,190 @@ $datePreferences = false;
 
 $messages = array(
 # Dates
-'sunday'        => 'Damóogo',
-'monday'        => 'Damóo biiskání',
-'tuesday'       => 'Damóodóó naakiską́o',
-'wednesday'     => 'Damóodóó tágí jį́',
-'thursday'      => "Damóodóó dį́į́' yiską́o",
-'friday'        => "Nda'iiníísh",
-'saturday'      => 'Yiską́ damóo',
-'january'       => 'Yas Niłtʼees',
-'february'      => 'Atsá Biyáázh',
-'march'         => 'Wóózhchʼį́į́d',
-'april'         => 'Tʼą́ą́chil',
-'may_long'      => 'Tʼą́ą́tsoh',
-'june'          => 'Yaʼiishjááshchilí',
-'july'          => 'Yaʼiishjáástsoh',
-'august'        => 'Biniʼantʼą́ą́tsʼózí',
-'september'     => 'Biniʼantʼą́ą́tsoh',
-'october'       => 'Ghąąjį',
-'november'      => 'Níłchʼitsʼósí',
-'december'      => 'Níłchʼitsoh',
-'january-gen'   => 'Yas Niłtʼees',
-'february-gen'  => 'Atsá Biyáázh',
-'march-gen'     => 'Wóózhchʼį́į́d',
-'april-gen'     => 'Tʼą́ą́chil',
-'may-gen'       => 'Tʼą́ą́tsoh',
-'june-gen'      => 'Yaʼiishjááshchilí',
-'july-gen'      => 'Yaʼiishjáástsoh',
-'august-gen'    => 'Biniʼantʼą́ą́tsʼózí',
+'sunday' => 'Damóogo',
+'monday' => 'Damóo biiskání',
+'tuesday' => 'Damóodóó naakiską́o',
+'wednesday' => 'Damóodóó tágí jį́',
+'thursday' => "Damóodóó dį́į́' yiską́o",
+'friday' => "Nda'iiníísh",
+'saturday' => 'Yiską́ damóo',
+'january' => 'Yas Niłtʼees',
+'february' => 'Atsá Biyáázh',
+'march' => 'Wóózhchʼį́į́d',
+'april' => 'Tʼą́ą́chil',
+'may_long' => 'Tʼą́ą́tsoh',
+'june' => 'Yaʼiishjááshchilí',
+'july' => 'Yaʼiishjáástsoh',
+'august' => 'Biniʼantʼą́ą́tsʼózí',
+'september' => 'Biniʼantʼą́ą́tsoh',
+'october' => 'Ghąąjį',
+'november' => 'Níłchʼitsʼósí',
+'december' => 'Níłchʼitsoh',
+'january-gen' => 'Yas Niłtʼees',
+'february-gen' => 'Atsá Biyáázh',
+'march-gen' => 'Wóózhchʼį́į́d',
+'april-gen' => 'Tʼą́ą́chil',
+'may-gen' => 'Tʼą́ą́tsoh',
+'june-gen' => 'Yaʼiishjááshchilí',
+'july-gen' => 'Yaʼiishjáástsoh',
+'august-gen' => 'Biniʼantʼą́ą́tsʼózí',
 'september-gen' => 'Biniʼantʼą́ą́tsoh',
-'october-gen'   => 'Ghąąjį',
-'november-gen'  => 'Níłchʼitsʼósí',
-'december-gen'  => 'Níłchʼitsoh',
-'jan'           => 'Ynts',
-'feb'           => 'Atsb',
-'mar'           => 'Wozh',
-'apr'           => 'Tchi',
-'may'           => 'Ttso',
-'jun'           => 'Yjsh',
-'jul'           => 'Yjts',
-'aug'           => 'Btsz',
-'sep'           => 'Btsx',
-'oct'           => 'Ghąj',
-'nov'           => 'Ntss',
-'dec'           => 'Ntsx',
+'october-gen' => 'Ghąąjį',
+'november-gen' => 'Níłchʼitsʼósí',
+'december-gen' => 'Níłchʼitsoh',
+'jan' => 'Ynts',
+'feb' => 'Atsb',
+'mar' => 'Wozh',
+'apr' => 'Tchi',
+'may' => 'Ttso',
+'jun' => 'Yjsh',
+'jul' => 'Yjts',
+'aug' => 'Btsz',
+'sep' => 'Btsx',
+'oct' => 'Ghąj',
+'nov' => 'Ntss',
+'dec' => 'Ntsx',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}',
-'category_header'        => 'Naaltsoos biiʼ sinilí "$1" biyiʼ dahólónígíí',
-'subcategories'          => 'Hanálzhoʼí',
-'hidden-categories'      => '{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}',
-'category-subcat-count'  => '{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}',
+'pagecategories' => '{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}',
+'category_header' => 'Naaltsoos biiʼ sinilí "$1" biyiʼ dahólónígíí',
+'subcategories' => 'Hanálzhoʼí',
+'hidden-categories' => '{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}',
+'category-subcat-count' => '{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}',
 'category-article-count' => "{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ.|{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ|'''$2 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ dahólǫ}} - ($1)}}",
 'listingcontinuesabbrev' => 'nááná...',
 
-'cancel'     => 'tʼóó ánássįįh',
-'mytalk'     => 'haneʼ shichʼįʼ ályaaígíí',
+'cancel' => 'tʼóó ánássįįh',
+'mytalk' => 'haneʼ shichʼįʼ ályaaígíí',
 'navigation' => 'naaltsoosígíí',
 
-'errorpagetitle'   => 'adziih',
-'tagline'          => "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
-'help'             => 'Anáʼálwoʼ',
-'search'           => 'hanishtá nisin',
-'searchbutton'     => 'tʼáá yíní átʼéegi',
-'searcharticle'    => 'díí saad tʼéiyá',
-'history'          => 'łahgo ályaaígíí',
-'history_short'    => 'łahgo ályaaígíí',
+'errorpagetitle' => 'adziih',
+'tagline' => "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
+'help' => 'Anáʼálwoʼ',
+'search' => 'hanishtá nisin',
+'searchbutton' => 'tʼáá yíní átʼéegi',
+'searcharticle' => 'díí saad tʼéiyá',
+'history' => 'łahgo ályaaígíí',
+'history_short' => 'łahgo ályaaígíí',
 'printableversion' => '"Print" áshłééh nisin',
-'permalink'        => 'Díí naaltsoos bi-"url"',
-'edit'             => 'Łahgo áshłééh',
-'create'           => 'áshłééh nisin',
-'editthispage'     => 'díí naaltsoos łahgo áshłééh',
-'delete'           => 'sisxé (delete)',
-'protect'          => "bich'ą́ą́h iishááh nisin (protect)",
-'newpage'          => 'Naaltsoos ániidí',
-'talkpage'         => 'díí kweʼé naaltsoos baa yáshtiʼ nisin',
+'permalink' => 'Díí naaltsoos bi-"url"',
+'edit' => 'Łahgo áshłééh',
+'create' => 'áshłééh nisin',
+'editthispage' => 'díí naaltsoos łahgo áshłééh',
+'delete' => 'sisxé (delete)',
+'protect' => "bich'ą́ą́h iishááh nisin (protect)",
+'newpage' => 'Naaltsoos ániidí',
+'talkpage' => 'díí kweʼé naaltsoos baa yáshtiʼ nisin',
 'talkpagelinktext' => 'bichʼįʼ yáshtiʼ',
-'specialpage'      => 'Naaltsoos spéshelígíí',
-'personaltools'    => 'bee naashnishí',
-'talk'             => 'baa yáshtiʼ nisin',
-'views'            => 'naaltsoosígíí',
-'toolbox'          => 'bee naʼanishí',
-'otherlanguages'   => 'saad',
-'redirectedfrom'   => '("$1"dę́ę́ʼ)',
-'redirectpagesub'  => 'dah astsihígíí',
-'lastmodifiedat'   => 'Díí naaltsoos $1/$2 łahgo ályaa.',
+'specialpage' => 'Naaltsoos spéshelígíí',
+'personaltools' => 'bee naashnishí',
+'talk' => 'baa yáshtiʼ nisin',
+'views' => 'naaltsoosígíí',
+'toolbox' => 'bee naʼanishí',
+'otherlanguages' => 'saad',
+'redirectedfrom' => '("$1"dę́ę́ʼ)',
+'redirectpagesub' => 'dah astsihígíí',
+'lastmodifiedat' => 'Díí naaltsoos $1/$2 łahgo ályaa.',
 
 # 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}} baa haneʼ',
-'aboutpage'            => 'Project: baa haneʼ',
-'copyright'            => 'Díí naaltsoos bikáaʼgi saad shijaaʼígíí "$1" beehazʼą́ąnii bikʼehgo choidííłįįł',
-'edithelp'             => 'anáʼálwoʼ',
-'edithelppage'         => 'Help:Haitʼéegoshąʼ naaltsoos łahgo áshłééh?',
-'helppage'             => 'Help:Bee hadítʼéhígíí',
-'mainpage'             => 'Íiyisíí Naaltsoos',
+'aboutsite' => '{{SITENAME}} baa haneʼ',
+'aboutpage' => 'Project: baa haneʼ',
+'copyright' => 'Díí naaltsoos bikáaʼgi saad shijaaʼígíí "$1" beehazʼą́ąnii bikʼehgo choidííłįįł',
+'edithelp' => 'anáʼálwoʼ',
+'edithelppage' => 'Help:Haitʼéegoshąʼ naaltsoos łahgo áshłééh?',
+'helppage' => 'Help:Bee hadítʼéhígíí',
+'mainpage' => 'Íiyisíí Naaltsoos',
 'mainpage-description' => 'Íiyisíí Naaltsoos',
 
-'retrievedfrom'      => '"$1" bitsʼą́ą́dę́ę́ʼ',
+'retrievedfrom' => '"$1" bitsʼą́ą́dę́ę́ʼ',
 'youhavenewmessages' => 'Háíshį́į́ $1 nichʼįʼ áyiilaa. <small>($2)</small>',
-'newmessageslink'    => 'haneʼ ániidígíí',
-'editsection'        => 'łahgo áshłééh',
-'editold'            => 'łahgo áshłééh',
-'editlink'           => 'łahgo áshłééh',
-'viewsourcelink'     => 'XML yishʼį́ nisin',
-'toc'                => 'bikáaʼgi hólónígíí',
-'showtoc'            => 'yishʼį́ nisin',
-'hidetoc'            => 'doo yishʼį́ nisin da',
-'site-rss-feed'      => '$1 biRSS Feed',
-'site-atom-feed'     => '$1 biAtom Feed',
-'page-rss-feed'      => '"$1" biRSS Feed',
-'page-atom-feed'     => '"$1" biAtom Feed',
-'red-link-title'     => '$1 (ádin)',
+'newmessageslink' => 'haneʼ ániidígíí',
+'editsection' => 'łahgo áshłééh',
+'editold' => 'łahgo áshłééh',
+'editlink' => 'łahgo áshłééh',
+'viewsourcelink' => 'XML yishʼį́ nisin',
+'toc' => 'bikáaʼgi hólónígíí',
+'showtoc' => 'yishʼį́ nisin',
+'hidetoc' => 'doo yishʼį́ nisin da',
+'site-rss-feed' => '$1 biRSS Feed',
+'site-atom-feed' => '$1 biAtom Feed',
+'page-rss-feed' => '"$1" biRSS Feed',
+'page-atom-feed' => '"$1" biAtom Feed',
+'red-link-title' => '$1 (ádin)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'naaltsoos',
-'nstab-user'      => 'choyoołʼįįhí binaaltsoos',
-'nstab-special'   => 'Naaltsoos spéshelígíí',
-'nstab-project'   => 'wikiibíídiiya binaaltsoos',
-'nstab-image'     => 'eʼelyaaígíí',
+'nstab-main' => 'naaltsoos',
+'nstab-user' => 'choyoołʼįįhí binaaltsoos',
+'nstab-special' => 'Naaltsoos spéshelígíí',
+'nstab-project' => 'wikiibíídiiya binaaltsoos',
+'nstab-image' => 'eʼelyaaígíí',
 'nstab-mediawiki' => 'haneʼ',
-'nstab-template'  => 'bee álnééhí',
-'nstab-help'      => 'anáʼálwoʼ',
-'nstab-category'  => 'Naaltsoos biiʼ sinilí',
+'nstab-template' => 'bee álnééhí',
+'nstab-help' => 'anáʼálwoʼ',
+'nstab-category' => 'Naaltsoos biiʼ sinilí',
 
 # General errors
 'missingarticle-rev' => '(łahgo ályaaígíí #$1)',
-'viewsource'         => 'XML yishʼį́ nisin',
+'viewsource' => 'XML yishʼį́ nisin',
 
 # Login and logout pages
-'yourname'                => 'Choyoołʼįįhí bizhiʼ:',
-'yourpassword'            => 'Passwordígíí:',
-'remembermypassword'      => 'shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'yourname' => 'Choyoołʼįįhí bizhiʼ:',
+'yourpassword' => 'Passwordígíí:',
+'remembermypassword' => 'shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})',
 'nav-login-createaccount' => 'Log in / accountígíí ádíílííł',
-'nologinlink'             => 'Accountígíí ádíílííł',
-'mailmypassword'          => 'passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)',
+'nologinlink' => 'Accountígíí ádíílííł',
+'mailmypassword' => 'passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)',
 
 # Edit page toolbar
-'link_sample'    => 'Linkígíí',
+'link_sample' => 'Linkígíí',
 'extlink_sample' => 'http://www.example.com linkígíí',
 
 # Edit pages
-'minoredit'              => 'tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa',
-'watchthis'              => 'shinááł nisin',
-'savearticle'            => '✔ bee lą́ ashłeeh',
-'preview'                => 'dooleełígíí',
-'showpreview'            => 'dooleełígíí yishʼį́ nisin',
-'showdiff'               => 'łahgo áshłaaígíí yishʼį́ nisin',
-'anoneditwarning'        => "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
-'newarticle'             => '(Naaltsoos ániidí)',
-'previewnote'            => "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''
+'minoredit' => 'tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa',
+'watchthis' => 'shinááł nisin',
+'savearticle' => '✔ bee lą́ ashłeeh',
+'preview' => 'dooleełígíí',
+'showpreview' => 'dooleełígíí yishʼį́ nisin',
+'showdiff' => 'łahgo áshłaaígíí yishʼį́ nisin',
+'anoneditwarning' => "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
+'newarticle' => '(Naaltsoos ániidí)',
+'previewnote' => "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''
 ::<small>'''(This is only a preview.)'''</small>",
-'editing'                => '"$1" łahgo áshłééh...',
-'templatesused'          => '"bee álnééhé" naaltsoos bikáaʼgi hólǫ́:',
-'templatesusedpreview'   => '"bee álnééhé" naaltsoos bikáaʼgi dooleełígíí:',
-'template-protected'     => '(administratorsígíí tʼéiyá)',
+'editing' => '"$1" łahgo áshłééh...',
+'templatesused' => '"bee álnééhé" naaltsoos bikáaʼgi hólǫ́:',
+'templatesusedpreview' => '"bee álnééhé" naaltsoos bikáaʼgi dooleełígíí:',
+'template-protected' => '(administratorsígíí tʼéiyá)',
 'template-semiprotected' => '(chodayoołʼįįhí doo ééhozinii díí naaltsoos doo łahgo ádayóleʼ átʼée da)',
-'hiddencategories'       => 'Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:',
+'hiddencategories' => 'Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:',
 
 # History pages
-'viewpagelogs'        => 'logsígíí yishʼį́ nisin',
-'nohistory'           => '"łahgo ályaaígíí" doo hólǫ́ǫ da/ádin.',
-'currentrev-asof'     => 'kʼadígíí ($1)',
-'revisionasof'        => '$1 yę́ędą́ą́ʼ',
+'viewpagelogs' => 'logsígíí yishʼį́ nisin',
+'nohistory' => '"łahgo ályaaígíí" doo hólǫ́ǫ da/ádin.',
+'currentrev-asof' => 'kʼadígíí ($1)',
+'revisionasof' => '$1 yę́ędą́ą́ʼ',
 'currentrevisionlink' => 'kʼadígíí',
-'cur'                 => 'kʼadígíí',
-'histfirst'           => 'bee hodeeshzhiizh',
-'histlast'            => 'bee nihoolʼá',
+'cur' => 'kʼadígíí',
+'histfirst' => 'bee hodeeshzhiizh',
+'histlast' => 'bee nihoolʼá',
 
 # Revision deletion
 'rev-delundel' => 'yishʼį́ nisin/doo yishʼį́ nisin da',
 
 # Diffs
 'history-title' => 'łahgo ályaaígíí: "$1"',
-'editundo'      => 'ńdíídleeł!',
+'editundo' => 'ńdíídleeł!',
 
 # Search results
-'searchresulttext'      => '{{SITENAME}} bikáaʼgi haʼnitáhígíí bíhoołʼaahgo biniiyé [[{{MediaWiki:Helppage}}|{{int:help}}]] yidíiłtah.',
-'searchsubtitle'        => '\'\'\'[[:$1]]\'\'\' hanínítą́ą́ʼ ([[Special:Prefixindex/$1|naaltsoos "$1" wolyéhígíí tʼáá ałtso]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" baa atiinígíí tʼáá ałtso]])',
+'searchresulttext' => '{{SITENAME}} bikáaʼgi haʼnitáhígíí bíhoołʼaahgo biniiyé [[{{MediaWiki:Helppage}}|{{int:help}}]] yidíiłtah.',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' hanínítą́ą́ʼ ([[Special:Prefixindex/$1|naaltsoos "$1" wolyéhígíí tʼáá ałtso]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" baa atiinígíí tʼáá ałtso]])',
 'searchsubtitleinvalid' => "'''$1''' hanínítą́ą́ʼ",
-'notitlematches'        => 'naaltsoos ádin',
-'viewprevnext'          => '($1) ($2) ($3) shinááł',
-'search-result-size'    => '$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})',
-'search-redirect'       => '("$1"dę́ę́ʼ)',
-'search-suggest'        => '"$1" hainítáásh shį́į́?',
+'notitlematches' => 'naaltsoos ádin',
+'viewprevnext' => '($1) ($2) ($3) shinááł',
+'search-result-size' => '$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})',
+'search-redirect' => '("$1"dę́ę́ʼ)',
+'search-suggest' => '"$1" hainítáásh shį́į́?',
 'search-interwiki-more' => '(nááná...)',
-'powersearch-redir'     => 'dah astsihígíí yishʼį́ nisin.',
+'powersearch-redir' => 'dah astsihígíí yishʼį́ nisin.',
 
 # Preferences page
 'mypreferences' => 'siłkidígíí',
@@ -229,51 +229,51 @@ $messages = array(
 'grouppage-sysop' => '{{ns:project}}:Administratorsígíí',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}',
-'recentchanges'                  => 'Áníídí łahgo ályaaígíí',
+'nchanges' => '$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}',
+'recentchanges' => 'Áníídí łahgo ályaaígíí',
 'recentchanges-feed-description' => 'áníídí łahgo ályaaígíí',
-'rcnote'                         => "{{PLURAL:$2|jį́į́dą́ą́ʼ |}} {{PLURAL:$1|'''1''' łahgo ályaaígíí tʼéiyá|'''$1''' łahgo ályaaígíí}}, {{PLURAL:$2||'''$2di''' yiskánídą́ą́ʼ kojįʼ, }} ($5, $4)",
-'rcshowhideminor'                => 'naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1',
-'rcshowhidebots'                 => "''bots''ígíí $1",
-'rcshowhideliu'                  => 'chodayoołʼįįhí ééhozinígíí $1',
-'rcshowhideanons'                => 'chodayoołʼįįhí doo ééhozinii (IP) $1',
-'rcshowhidemine'                 => 'akʼeʼshełchínígíí $1',
-'rclinks'                        => '*($1) łahgo ályaaígíí
+'rcnote' => "{{PLURAL:$2|jį́į́dą́ą́ʼ |}} {{PLURAL:$1|'''1''' łahgo ályaaígíí tʼéiyá|'''$1''' łahgo ályaaígíí}}, {{PLURAL:$2||'''$2di''' yiskánídą́ą́ʼ kojįʼ, }} ($5, $4)",
+'rcshowhideminor' => 'naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1',
+'rcshowhidebots' => "''bots''ígíí $1",
+'rcshowhideliu' => 'chodayoołʼįįhí ééhozinígíí $1',
+'rcshowhideanons' => 'chodayoołʼįįhí doo ééhozinii (IP) $1',
+'rcshowhidemine' => 'akʼeʼshełchínígíí $1',
+'rclinks' => '*($1) łahgo ályaaígíí
 *($2) yiskánídą́ą́ʼ kojįʼ <br />
 $3',
-'hist'                           => 'łgá',
-'hide'                           => 'doo yishʼį́ nisin da.',
-'show'                           => 'yishʼį́ nisin.',
-'minoreditletter'                => 'tʼ',
-'newpageletter'                  => 'NÁ',
+'hist' => 'łgá',
+'hide' => 'doo yishʼį́ nisin da.',
+'show' => 'yishʼį́ nisin.',
+'minoreditletter' => 'tʼ',
+'newpageletter' => 'NÁ',
 
 # Recent changes linked
 'recentchangeslinked-page' => 'naaltsoos:',
 
 # Upload
-'upload'        => 'Eʼelyaaígíí biiʼ hééł áshłééh nisin',
+'upload' => 'Eʼelyaaígíí biiʼ hééł áshłééh nisin',
 'uploadedimage' => '"[[$1]]" biiʼ hééł áyiilaa',
 
 # File description page
-'filehist'            => 'łahgo ályaaígíí',
-'filehist-current'    => 'kʼadígíí',
-'filehist-thumb'      => 'thumbnailígíí',
-'filehist-thumbtext'  => 'thumbnailígíí ($1)',
-'filehist-user'       => 'Choyoołʼįįhí',
+'filehist' => 'łahgo ályaaígíí',
+'filehist-current' => 'kʼadígíí',
+'filehist-thumb' => 'thumbnailígíí',
+'filehist-thumbtext' => 'thumbnailígíí ($1)',
+'filehist-user' => 'Choyoołʼįįhí',
 'filehist-dimensions' => 'naaniigo/náásee',
-'filehist-comment'    => 'haneʼ',
-'imagelinks'          => 'naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí',
-'linkstoimage'        => '{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:',
-'sharedupload'        => 'Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.',
+'filehist-comment' => 'haneʼ',
+'imagelinks' => 'naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí',
+'linkstoimage' => '{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:',
+'sharedupload' => 'Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}',
-'newpages'     => 'Naaltsoos ániidí',
-'move'         => 'hidishnááh nisin',
+'nbytes' => '$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}',
+'newpages' => 'Naaltsoos ániidí',
+'move' => 'hidishnááh nisin',
 'movethispage' => 'díí naaltsoos hidishnááh nisin',
 
 # Special:AllPages
-'allpages'    => 'naaltsoosígíí tʼáá ałtso',
+'allpages' => 'naaltsoosígíí tʼáá ałtso',
 'allarticles' => 'naaltsoosígíí tʼáá ałtso',
 
 # Special:LinkSearch
@@ -283,96 +283,96 @@ $3',
 'emailuser' => 'E-mail bichʼįʼ áshłééh nisin',
 
 # Watchlist
-'watchlist'         => 'bikʼi déshʼį́į́ʼígíí',
-'mywatchlist'       => 'bikʼi déshʼį́į́ʼígíí',
-'addedwatchtext'    => "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:\$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
-'removedwatchtext'  => '"[[:$1]]" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.',
-'watch'             => 'bikʼi déshʼį́į́ʼ nisin',
-'watchthispage'     => 'díí naaltsoos bikʼi déshʼį́į́ʼ nisin',
-'unwatch'           => 'doo bikʼi déshʼį́įʼ nisin da',
+'watchlist' => 'bikʼi déshʼį́į́ʼígíí',
+'mywatchlist' => 'bikʼi déshʼį́į́ʼígíí',
+'addedwatchtext' => "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:\$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
+'removedwatchtext' => '"[[:$1]]" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.',
+'watch' => 'bikʼi déshʼį́į́ʼ nisin',
+'watchthispage' => 'díí naaltsoos bikʼi déshʼį́į́ʼ nisin',
+'unwatch' => 'doo bikʼi déshʼį́įʼ nisin da',
 'watchlist-details' => '{{PLURAL:$1|$1 naaltsoos|$1 naaltsoos}} bikʼi díníʼį́į́ʼ',
-'wlshowlast'        => '<small>
+'wlshowlast' => '<small>
 * ( $1 ) ahééʼílkidę́ędą́ą́ʼ kojįʼ
 * ( $2 ) yiskánídą́ą́ʼ kojįʼ
 * ( $3 )</small>',
 'watchlist-options' => '✔',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => '(...)',
+'watching' => '(...)',
 'unwatching' => '(...)',
 
 # Protect
-'protectedarticle'          => '"[[$1]]" bichʼą́ą́h ííyá.',
+'protectedarticle' => '"[[$1]]" bichʼą́ą́h ííyá.',
 'modifiedarticleprotection' => '"[[$1]]" biprotection level łahgo ályaa',
 
 # Namespace form on various pages
-'namespace'      => 'Naaltsoos bizhiʼ:',
-'invert'         => 'binaashii',
+'namespace' => 'Naaltsoos bizhiʼ:',
+'invert' => 'binaashii',
 'blanknamespace' => '(Íiyisíí)',
 
 # Contributions
-'contributions'       => 'akʼeʼeeshchínígíí',
+'contributions' => 'akʼeʼeeshchínígíí',
 'contributions-title' => '$1 akʼeʼeeshchínígíí',
-'mycontris'           => 'akʼeʼshełchínígíí',
-'contribsub2'         => '$1 akʼeʼeeshchínígíí ($2)',
-'uctop'               => '(← bee nihoolʼá)',
+'mycontris' => 'akʼeʼshełchínígíí',
+'contribsub2' => '$1 akʼeʼeeshchínígíí ($2)',
+'uctop' => '(← bee nihoolʼá)',
 
-'sp-contributions-newbies'  => 'ádaaniidí akʼeʼeeshchínígíí tʼéiyá',
-'sp-contributions-search'   => 'akʼeʼeeshchínígíí hanishtá nisin',
+'sp-contributions-newbies' => 'ádaaniidí akʼeʼeeshchínígíí tʼéiyá',
+'sp-contributions-search' => 'akʼeʼeeshchínígíí hanishtá nisin',
 'sp-contributions-username' => 'IP/Choyoołʼįįhí bizhiʼ:',
-'sp-contributions-submit'   => 'hanishtá',
+'sp-contributions-submit' => 'hanishtá',
 
 # What links here
-'whatlinkshere'            => 'linksígíí díí naaltsoos baa atiin',
-'whatlinkshere-title'      => 'linksígíí "$1" baa atiin',
-'whatlinkshere-page'       => 'Naaltsoos:',
-'linkshere'                => "'''[[:$1]]''' baa atiinígíí:",
-'nolinkshere'              => "'''\"[[:\$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
-'nolinkshere-ns'           => "'''\"[[:\$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
-'isredirect'               => 'dah astsihígíí',
-'istemplate'               => 'bee álnééhí',
-'isimage'                  => 'eʼelyaaígíí',
-'whatlinkshere-prev'       => '{{PLURAL:$1|←|← $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|→|→ $1}}',
-'whatlinkshere-links'      => '← linkígíí',
+'whatlinkshere' => 'linksígíí díí naaltsoos baa atiin',
+'whatlinkshere-title' => 'linksígíí "$1" baa atiin',
+'whatlinkshere-page' => 'Naaltsoos:',
+'linkshere' => "'''[[:$1]]''' baa atiinígíí:",
+'nolinkshere' => "'''\"[[:\$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+'nolinkshere-ns' => "'''\"[[:\$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+'isredirect' => 'dah astsihígíí',
+'istemplate' => 'bee álnééhí',
+'isimage' => 'eʼelyaaígíí',
+'whatlinkshere-prev' => '{{PLURAL:$1|←|← $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|→|→ $1}}',
+'whatlinkshere-links' => '← linkígíí',
 'whatlinkshere-hideredirs' => 'dah astsihígíí $1',
-'whatlinkshere-hidetrans'  => 'transclusions $1',
-'whatlinkshere-hidelinks'  => 'linksígíí $1',
-'whatlinkshere-filters'    => 'bee agháʼníldéhí',
+'whatlinkshere-hidetrans' => 'transclusions $1',
+'whatlinkshere-hidelinks' => 'linksígíí $1',
+'whatlinkshere-filters' => 'bee agháʼníldéhí',
 
 # Block/unblock
-'contribslink'  => 'akʼeʼeeshchínígíí',
+'contribslink' => 'akʼeʼeeshchínígíí',
 'blocklogentry' => '[[$1]] bichʼą́ą́h niiníyá ($2 $3)',
 
 # Move page
-'movearticle'    => 'naaltsoos:',
-'newtitle'       => 'naaltsoos bizhiʼ ániidí:',
-'move-watch'     => 'shinááł',
-'movepagebtn'    => '✔ bee lą́ ashłeeh',
+'movearticle' => 'naaltsoos:',
+'newtitle' => 'naaltsoos bizhiʼ ániidí:',
+'move-watch' => 'shinááł',
+'movepagebtn' => '✔ bee lą́ ashłeeh',
 'movepage-moved' => '\'\'\'"$1" kʼad "$2" wolyé\'\'\'',
-'revertmove'     => 'ńdíídleeł!',
+'revertmove' => 'ńdíídleeł!',
 
 # Skin names
 'skinname-monobook' => "NaaltsoosŁáa'ígíí",
 
 # Metadata
-'metadata'          => 'Metadataígíí',
-'metadata-expand'   => 'yishʼį́ nisin',
+'metadata' => 'Metadataígíí',
+'metadata-expand' => 'yishʼį́ nisin',
 'metadata-collapse' => 'doo yishʼį́ nisin da',
 
 # External editor support
-'edit-externally'      => "''external application''ígíí choinishʼįįhgo díí eʼelyaaígíí łahgo áshłééh nisin.",
+'edit-externally' => "''external application''ígíí choinishʼįįhgo díí eʼelyaaígíí łahgo áshłééh nisin.",
 'edit-externally-help' => '([//www.mediawiki.org/wiki/Manual:External_editors anáʼálwoʼ] (Bilagáanakʼehjí))',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tʼáá ałtso',
 'namespacesall' => 'tʼáá ałtso',
-'monthsall'     => 'tʼáá ałtso',
+'monthsall' => 'tʼáá ałtso',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'łahgo ályaaígíí yishʼį́ nisin',
 'watchlisttools-edit' => 'naaltsoos bikʼi déshʼį́į́ʼígíí bikáaʼgi hólónígíí yishʼį́ dóó łahgo áshłééh nisin',
-'watchlisttools-raw'  => 'XML yishʼį́ dóó łahgo áshłééh nisin',
+'watchlisttools-raw' => 'XML yishʼį́ dóó łahgo áshłééh nisin',
 
 # Special:SpecialPages
 'specialpages' => 'Naaltsoos spéshelígíí',
index 845395a..f27be7b 100644 (file)
@@ -146,130 +146,130 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__CAPDETAULA__', '__PASCAPDESOMARI__', '__PASCAPDETDM__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__CAPDEGALARIÁ__', '__CAPDEGALARIA__', '__PASCAPDEDEGALARIÁ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORÇARTAULA__', '__FORÇARSOMARI__', '__FORÇARTDM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TAULA__', '__SOMARI__', '__TDM__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__SECCIONNONEDITABLA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__PASCAPDENTÈSTA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESCORRENT', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NOMMESCORRENT', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NOMGENMESCORRENT', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ABREVMESCORRENT', 'ABREVMESACTUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'JORNCORRENT', 'JORNACTUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'JORNCORRENT2', 'JORNACTUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMJORNCORRENT', 'NOMJORNACTUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANNADACORRENTA', 'ANNADAACTUALA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DATACORRENTA', 'DATAACTUALA', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACORRENTA', 'ORAACTUALA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'NOMMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NOMGENMESLOCAL', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ABREVMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'JORNLOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'JORNLOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMJORNLOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANNADALOCALA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ORARILOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NOMBREPAGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NOMBREFICHIÈRS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NOMBREUTILIZAIRES', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NOMBREUTILIZAIRESACTIUS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NOMBREEDICIONS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NOMBREVISTAS', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMPAGINAX', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ESPACINOMENATGE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ESPACINOMENATGEX', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ESPACIDISCUSSION', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ESPACIDISCUSSIONX', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ESPACISUBJECTE', 'ESPACISUBJÈCTE', 'ESPACIARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ESPACISUBJECTEX', 'ESPACISUBJÈCTEX', 'ESPACIARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMPAGINACOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMPAGINACOMPLETX', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMSOSPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMSOSPAGINAX', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMBASADEPAGINA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMBASADEPAGINAX', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMPAGINADISCUSSION', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMPAGINADISCUSSIONX', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMPAGINASUBJECTE', 'NOMPAGINASUBJÈCTE', 'NOMPAGINAARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMPAGINASUBJECTEX', 'NOMPAGINASUBJÈCTEX', 'NOMPAGINAARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'vinheta', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'vinheta=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'drecha', 'dreta', 'right' ),
-       'img_left'                => array( '1', 'esquèrra', 'senèstra', 'gaucha', 'left' ),
-       'img_none'                => array( '1', 'neant', 'nonrés', 'none' ),
-       'img_center'              => array( '1', 'centrat', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'quadre', 'enquagrat', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'sens_quadre', 'frameless' ),
-       'img_upright'             => array( '1', 'redreça', 'redreça$1', 'redreça $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'bordadura', 'border' ),
-       'img_baseline'            => array( '1', 'linha_de_basa', 'baseline' ),
-       'img_sub'                 => array( '1', 'indici', 'ind', 'sub' ),
-       'img_super'               => array( '1', 'exp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'naut', 'top' ),
-       'img_text_top'            => array( '1', 'naut-tèxte', 'naut-txt', 'text-top' ),
-       'img_middle'              => array( '1', 'mitan', 'middle' ),
-       'img_bottom'              => array( '1', 'bas', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'bas-tèxte', 'bas-txt', 'text-bottom' ),
-       'img_link'                => array( '1', 'ligam=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMSIT', 'NOMSITE_NOMSITI', 'SITENAME' ),
-       'ns'                      => array( '0', 'ESPACEN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCALA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALAX:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINESCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GENRE:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'SETMANACORRENTA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'JDSCORRENT', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SETMANALOCALA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'NUMÈROVERSION', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DATAVERSION', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DATAVERSION2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESREVISION', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANNADAREVISION', 'ANREVISION', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ORAREVISION', 'REVISIONTIMESTAMP' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETAX:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'INITMINUS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'INITMAJUS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUS:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
-       'raw'                     => array( '0', 'LINHA:', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'AFICHARTÍTOL', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'BRUT', 'B', 'R' ),
-       'newsectionlink'          => array( '1', '__LIGAMSECCIONNOVÈLA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__PASCAPDELIGAMSECCIONNOVÈLA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIONACTUALA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ENCÒDAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'ENCÒDAANCÒRA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'INSTANTACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'MARCADIRECCION', 'MARCADIR', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LENGA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LENGACONTENGUT', 'LENGCONTENGUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASDINSESPACI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'BORRATGEESQUÈRRA', 'PADLEFT' ),
-       'padright'                => array( '0', 'BORRATGEDRECHA', 'PADRIGHT' ),
-       'special'                 => array( '0', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ORDENA:', 'CLAUDETRIADA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMIN:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'balisa', 'tag' ),
-       'hiddencat'               => array( '1', '__CATAMAGADA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASDINSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TALHAPAGINA', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__PASCAPDINDÈX__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__REDIRECCIONESTATICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVÈLDEPROTECCION', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__CAPDETAULA__', '__PASCAPDESOMARI__', '__PASCAPDETDM__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__CAPDEGALARIÁ__', '__CAPDEGALARIA__', '__PASCAPDEDEGALARIÁ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORÇARTAULA__', '__FORÇARSOMARI__', '__FORÇARTDM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TAULA__', '__SOMARI__', '__TDM__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__SECCIONNONEDITABLA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__PASCAPDENTÈSTA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESCORRENT', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NOMMESCORRENT', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NOMGENMESCORRENT', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ABREVMESCORRENT', 'ABREVMESACTUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'JORNCORRENT', 'JORNACTUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JORNCORRENT2', 'JORNACTUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMJORNCORRENT', 'NOMJORNACTUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANNADACORRENTA', 'ANNADAACTUALA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DATACORRENTA', 'DATAACTUALA', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORACORRENTA', 'ORAACTUALA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'NOMMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NOMGENMESLOCAL', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ABREVMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'JORNLOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'JORNLOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMJORNLOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANNADALOCALA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ORARILOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NOMBREPAGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NOMBREARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBREFICHIÈRS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBREUTILIZAIRES', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NOMBREUTILIZAIRESACTIUS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBREEDICIONS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NOMBREVISTAS', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMPAGINAX', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ESPACINOMENATGE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ESPACINOMENATGEX', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ESPACIDISCUSSION', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ESPACIDISCUSSIONX', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ESPACISUBJECTE', 'ESPACISUBJÈCTE', 'ESPACIARTICLE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ESPACISUBJECTEX', 'ESPACISUBJÈCTEX', 'ESPACIARTICLEX', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMPAGINACOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMPAGINACOMPLETX', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMSOSPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMSOSPAGINAX', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMBASADEPAGINA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMBASADEPAGINAX', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMPAGINADISCUSSION', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMPAGINADISCUSSIONX', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMPAGINASUBJECTE', 'NOMPAGINASUBJÈCTE', 'NOMPAGINAARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMPAGINASUBJECTEX', 'NOMPAGINASUBJÈCTEX', 'NOMPAGINAARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'vinheta', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'vinheta=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'drecha', 'dreta', 'right' ),
+       'img_left'                  => array( '1', 'esquèrra', 'senèstra', 'gaucha', 'left' ),
+       'img_none'                  => array( '1', 'neant', 'nonrés', 'none' ),
+       'img_center'                => array( '1', 'centrat', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'quadre', 'enquagrat', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'sens_quadre', 'frameless' ),
+       'img_upright'               => array( '1', 'redreça', 'redreça$1', 'redreça $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'bordadura', 'border' ),
+       'img_baseline'              => array( '1', 'linha_de_basa', 'baseline' ),
+       'img_sub'                   => array( '1', 'indici', 'ind', 'sub' ),
+       'img_super'                 => array( '1', 'exp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'naut', 'top' ),
+       'img_text_top'              => array( '1', 'naut-tèxte', 'naut-txt', 'text-top' ),
+       'img_middle'                => array( '1', 'mitan', 'middle' ),
+       'img_bottom'                => array( '1', 'bas', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'bas-tèxte', 'bas-txt', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ligam=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMSIT', 'NOMSITE_NOMSITI', 'SITENAME' ),
+       'ns'                        => array( '0', 'ESPACEN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCALA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALAX:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINESCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GENRE:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'SETMANACORRENTA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'JDSCORRENT', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SETMANALOCALA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'JDSLOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'NUMÈROVERSION', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DATAVERSION', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DATAVERSION2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESREVISION', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANNADAREVISION', 'ANREVISION', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ORAREVISION', 'REVISIONTIMESTAMP' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETAX:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'INITMINUS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'INITMAJUS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUS:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUS:', 'CAPIT:', 'UC:' ),
+       'raw'                       => array( '0', 'LINHA:', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'AFICHARTÍTOL', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'BRUT', 'B', 'R' ),
+       'newsectionlink'            => array( '1', '__LIGAMSECCIONNOVÈLA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__PASCAPDELIGAMSECCIONNOVÈLA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIONACTUALA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ENCÒDAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ENCÒDAANCÒRA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'INSTANTACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'INSTANTLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'MARCADIRECCION', 'MARCADIR', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LENGA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LENGACONTENGUT', 'LENGCONTENGUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASDINSESPACI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNOMBRE', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'BORRATGEESQUÈRRA', 'PADLEFT' ),
+       'padright'                  => array( '0', 'BORRATGEDRECHA', 'PADRIGHT' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENA:', 'CLAUDETRIADA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMIN:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'balisa', 'tag' ),
+       'hiddencat'                 => array( '1', '__CATAMAGADA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASDINSCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TALHAPAGINA', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__PASCAPDINDÈX__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__REDIRECCIONESTATICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVÈLDEPROTECCION', 'PROTECTIONLEVEL' ),
 );
 
 $datePreferences = array(
@@ -679,7 +679,7 @@ Lo motiu avançat es « ''$2'' ».",
 # Login and logout pages
 'logouttext' => "'''Ara, sètz desconnect{{GENDER:||at|ada}}..'''
 
-Podètz contunhar d'utilizar {{SITENAME}} anonimament, o vos podètz [[Special:UserLogin|tornar connectar]] jol meteis nom o amb un autre nom.
+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.
@@ -1222,8 +1222,6 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori
 'search-interwiki-caption' => 'Projèctes fraires',
 'search-interwiki-default' => '$1 resultats :',
 'search-interwiki-more' => '(mai)',
-'search-mwsuggest-enabled' => 'amb suggestions',
-'search-mwsuggest-disabled' => 'sens suggestion',
 'search-relatedarticle' => 'Relatat',
 'mwsuggest-disable' => 'Desactivar las suggestions AJAX',
 'searcheverything-enable' => 'Recercar dins totes los espacis de noms',
@@ -3449,4 +3447,8 @@ Picatz lo nom del fichièr sens lo prefix « {{ns:file}}: »",
 'revdelete-unrestricted' => 'restriccions levadas pels administrators',
 'newuserlog-byemail' => 'senhal mandat per corrièr electronic',
 
+# Search suggestions
+'searchsuggest-search' => 'Recercar',
+'searchsuggest-containing' => 'que conten...',
+
 );
index 2d6516a..61c1e36 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'    => 'Dilbata',
-'monday'    => 'Wiixata',
-'tuesday'   => 'Qibxata',
+'sunday' => 'Dilbata',
+'monday' => 'Wiixata',
+'tuesday' => 'Qibxata',
 'wednesday' => 'Roobii',
-'thursday'  => 'Kamiisa',
-'friday'    => 'Jimaata',
-'saturday'  => 'Sanbata',
-'sun'       => 'Dil',
-'mon'       => 'Wix',
-'tue'       => 'Qib',
-'wed'       => 'Rob',
-'thu'       => 'Kam',
-'fri'       => 'Jim',
-'sat'       => 'San',
-'january'   => 'Amajjii',
-'february'  => 'Guraandhala',
-'march'     => 'Bitooteessa',
-'april'     => 'Elba',
-'may_long'  => 'Caamsa',
-'june'      => 'Waxabajjii',
-'july'      => 'Adooleessa',
-'august'    => 'Hagayya',
+'thursday' => 'Kamiisa',
+'friday' => 'Jimaata',
+'saturday' => 'Sanbata',
+'sun' => 'Dil',
+'mon' => 'Wix',
+'tue' => 'Qib',
+'wed' => 'Rob',
+'thu' => 'Kam',
+'fri' => 'Jim',
+'sat' => 'San',
+'january' => 'Amajjii',
+'february' => 'Guraandhala',
+'march' => 'Bitooteessa',
+'april' => 'Elba',
+'may_long' => 'Caamsa',
+'june' => 'Waxabajjii',
+'july' => 'Adooleessa',
+'august' => 'Hagayya',
 'september' => 'Fuulbana',
-'october'   => 'Onkololeessa',
-'november'  => 'Sadaasa',
-'december'  => 'Muddee',
+'october' => 'Onkololeessa',
+'november' => 'Sadaasa',
+'december' => 'Muddee',
 
-'about'   => "Wa'ee",
+'about' => "Wa'ee",
 'article' => 'Kutaa',
-'and'     => '&#32;fi',
+'and' => '&#32;fi',
 
-'help'          => 'Qarqarsa',
-'go'            => 'Fufi',
-'history'       => 'Seena',
+'help' => 'Qarqarsa',
+'go' => 'Fufi',
+'history' => 'Seena',
 'history_short' => 'Seena',
-'edit'          => 'Barressu',
+'edit' => 'Barressu',
 
 # 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'            => "Wa'ee {{SITENAME}}",
-'aboutpage'            => "Project:Wa'ee",
-'currentevents'        => 'Gocha amma',
-'edithelp'             => 'Qarqarsa Barressu',
-'mainpage'             => 'Fuula Dura',
+'aboutsite' => "Wa'ee {{SITENAME}}",
+'aboutpage' => "Project:Wa'ee",
+'currentevents' => 'Gocha amma',
+'edithelp' => 'Qarqarsa Barressu',
+'mainpage' => 'Fuula Dura',
 'mainpage-description' => 'Fuula Dura',
 
 # Login and logout pages
-'yourname'           => 'Maqaa-Tajajilamma:',
-'yourdomainname'     => 'Maqaa domain kankee:',
-'gotaccountlink'     => 'Seenu',
-'accountcreated'     => 'Accountiin banamerra',
+'yourname' => 'Maqaa-Tajajilamma:',
+'yourdomainname' => 'Maqaa domain kankee:',
+'gotaccountlink' => 'Seenu',
+'accountcreated' => 'Accountiin banamerra',
 'loginlanguagelabel' => 'Afaan: $1',
 
 # Edit pages
@@ -74,7 +74,7 @@ $messages = array(
 # Preferences page
 'yourrealname' => 'Maqaa Dhugaa:',
 'yourlanguage' => 'Afaan:',
-'yourvariant'  => 'Jijjirama:',
+'yourvariant' => 'Jijjirama:',
 
 # Upload
 'upload' => 'File Galchu',
@@ -90,7 +90,7 @@ $messages = array(
 
 # Delete
 'actioncomplete' => 'Gochaan dhumattera',
-'deletecomment'  => 'Sababa:',
+'deletecomment' => 'Sababa:',
 
 # Block/unblock
 'ipbreason' => 'Sababa:',
@@ -99,7 +99,7 @@ $messages = array(
 'movereason' => 'Sababa:',
 
 # Namespace 8 related
-'allmessagesname'      => 'Maqaa',
+'allmessagesname' => 'Maqaa',
 'allmessages-language' => 'Afaan:',
 
 );
index 4254e2b..6f4779d 100644 (file)
@@ -174,84 +174,84 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ଲେଉଟାଣି', '#REDIRECT' ),
-       'noeditsection'           => array( '0', '_ବଦଳା_ନହେବାଶ୍ରେଣୀ_', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'ଏବେକାର_ମାସ', 'ଏବେର_ମାସ୨', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ଏବେର_ମାସ', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସାଧାରଣ', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ଏବେକାର_ଦିନ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ଏବେକାର_ଦିନ୨', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ଏବେକାର_ଦିନ_ନାଆଁ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ଏବେକାର_ବର୍ଷ', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ଏବେକାର_ସମୟ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ଏବେକାର_ଘଣ୍ଟା', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ଏବେର_ମାସ୧', 'ସ୍ଥାନୀୟ_ମାସ୨', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ଏବେକାର_ମାସ୧', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ମାସ୧ର_ନାଆଁ', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ସ୍ଥାନୀୟ_ମାସ୧_ନାଆଁ_ସାଧାରଣ', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ସ୍ଥାନୀୟ_ମାସର୧_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'Local_ଦିନ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ସ୍ଥାନୀୟ_ଦିନ୨', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ଦିନ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ସ୍ଥାନୀୟ_ବର୍ଷ', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ସ୍ଥାନୀୟ_ସମୟ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ସ୍ଥାନୀୟ_ଘଣ୍ଟା', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ପୃଷ୍ଠା_ସଂଖ୍ୟା', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ଲେଖା_ସଂଖ୍ୟା', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ଫାଇଲ_ସଂଖ୍ୟା', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ବ୍ୟବାହାରକାରୀ_ସଂଖ୍ୟା', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ସଚଳ_ବ୍ୟବାହାରକାରୀଙ୍କ_ସଂଖ୍ୟା', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ବଦଳ_ସଂଖ୍ୟା', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'କେତେଥର_ଦେଖାଯାଇଛି', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ପୃଷ୍ଠା_ନାଆଁ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ପୃଷ୍ଠା_ନାମକାରଣକାରୀ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ନେମସ୍ପେସ', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ନେମସ୍ପେସକାରୀ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ଟକସ୍ପେସ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ଟକସ୍ପେସକାରୀ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ବିଷୟସ୍ପେସ', 'ଲେଖାସ୍ପେସ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'msg'                     => array( '0', 'ମେସେଜ:', 'MSG:' ),
-       'img_manualthumb'         => array( '1', 'ନଖଦେଖଣା=$1', 'ଦେଖଣା=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'ଡାହାଣ', 'right' ),
-       'img_left'                => array( '1', 'ବାଆଁ', 'left' ),
-       'img_none'                => array( '1', 'କିଛି_ନୁହେଁ', 'none' ),
-       'img_width'               => array( '1', '$1_ପିକସେଲ', '$1px' ),
-       'img_center'              => array( '1', 'କେନ୍ଦ୍ର', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ଫ୍ରେମକରା', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'ଫ୍ରେମନଥିବା', 'frameless' ),
-       'img_border'              => array( '1', 'ବର୍ଡର', 'border' ),
-       'img_baseline'            => array( '1', 'ବେସଲାଇନ', 'baseline' ),
-       'img_top'                 => array( '1', 'ଉପର', 'top' ),
-       'img_text_top'            => array( '1', 'ଲେଖା-ଉପର', 'text-top' ),
-       'img_middle'              => array( '1', 'ମଝି', 'middle' ),
-       'img_bottom'              => array( '1', 'ତଳ', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'ଲେଖା-ତଳ', 'text-bottom' ),
-       'img_link'                => array( '1', 'ଲିଙ୍କ=$1', 'link=$1' ),
-       'articlepath'             => array( '0', 'ଲେଖାର_ପଥ', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'ସର୍ଭର', 'SERVER' ),
-       'grammar'                 => array( '0', 'ବ୍ୟାକରଣ', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ଲିଙ୍ଗ', 'GENDER:' ),
-       'plural'                  => array( '0', 'ବହୁବଚନ:', 'PLURAL:' ),
-       'raw'                     => array( '0', 'କଞ୍ଚା', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ଦେଖଣାନାଆଁ', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '_ନୂଆବିଭାଗଲିଙ୍କ_', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_ନୂଆ_ବିଭାଗ_ନକରିବା_ଲିଙ୍କ_', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ନଗଦ_ରିଭିଜନ', 'CURRENTVERSION' ),
-       'numberofadmins'          => array( '1', 'ପରିଛାମାନଙ୍କତାଲିକା', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'ବାଆଁପ୍ୟାଡ଼', 'PADLEFT' ),
-       'padright'                => array( '0', 'ଡାହାଣପ୍ୟାଡ଼', 'PADRIGHT' ),
-       'special'                 => array( '0', 'ବିଶେଷ', 'special' ),
-       'filepath'                => array( '0', 'ଫାଇଲରାହା:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ଟାଗ', 'tag' ),
-       'hiddencat'               => array( '1', '_ଲୁଚିଥିବାବିଭାଗ_', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'ଫରଦଆକାର', 'PAGESIZE' ),
-       'protectionlevel'         => array( '1', 'ପ୍ରତିରକ୍ଷାସ୍ତର', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'ତାରିଖରପ୍ରକାର', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ବାଟ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ଉଇକି', 'WIKI' ),
-       'url_query'               => array( '0', 'ପ୍ରଶ୍ନ', 'QUERY' ),
+       'redirect'                  => array( '0', '#ଲେଉଟାଣି', '#REDIRECT' ),
+       'noeditsection'             => array( '0', '_ବଦଳା_ନହେବାଶ୍ରେଣୀ_', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ଏବେକାର_ମାସ', 'ଏବେର_ମାସ୨', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ଏବେର_ମାସ', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସାଧାରଣ', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ଏବେକାର_ମାସ_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ଏବେକାର_ଦିନ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ଏବେକାର_ଦିନ୨', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ଏବେକାର_ଦିନ_ନାଆଁ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ଏବେକାର_ବର୍ଷ', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ଏବେକାର_ସମୟ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ଏବେକାର_ଘଣ୍ଟା', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ଏବେର_ମାସ୧', 'ସ୍ଥାନୀୟ_ମାସ୨', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ଏବେକାର_ମାସ୧', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ମାସ୧ର_ନାଆଁ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ସ୍ଥାନୀୟ_ମାସ୧_ନାଆଁ_ସାଧାରଣ', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ସ୍ଥାନୀୟ_ମାସର୧_ନାଆଁ_ସଂକ୍ଷିପ୍ତ', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'Local_ଦିନ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ସ୍ଥାନୀୟ_ଦିନ୨', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ଦିନ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ସ୍ଥାନୀୟ_ବର୍ଷ', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ସ୍ଥାନୀୟ_ସମୟ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ସ୍ଥାନୀୟ_ଘଣ୍ଟା', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ପୃଷ୍ଠା_ସଂଖ୍ୟା', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ଲେଖା_ସଂଖ୍ୟା', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ଫାଇଲ_ସଂଖ୍ୟା', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ବ୍ୟବାହାରକାରୀ_ସଂଖ୍ୟା', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ସଚଳ_ବ୍ୟବାହାରକାରୀଙ୍କ_ସଂଖ୍ୟା', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ବଦଳ_ସଂଖ୍ୟା', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'କେତେଥର_ଦେଖାଯାଇଛି', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ପୃଷ୍ଠା_ନାଆଁ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ପୃଷ୍ଠା_ନାମକାରଣକାରୀ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ନେମସ୍ପେସ', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ନେମସ୍ପେସକାରୀ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ଟକସ୍ପେସ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ଟକସ୍ପେସକାରୀ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ବିଷୟସ୍ପେସ', 'ଲେଖାସ୍ପେସ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'msg'                       => array( '0', 'ମେସେଜ:', 'MSG:' ),
+       'img_manualthumb'           => array( '1', 'ନଖଦେଖଣା=$1', 'ଦେଖଣା=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'ଡାହାଣ', 'right' ),
+       'img_left'                  => array( '1', 'ବାଆଁ', 'left' ),
+       'img_none'                  => array( '1', 'କିଛି_ନୁହେଁ', 'none' ),
+       'img_width'                 => array( '1', '$1_ପିକସେଲ', '$1px' ),
+       'img_center'                => array( '1', 'କେନ୍ଦ୍ର', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ଫ୍ରେମକରା', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'ଫ୍ରେମନଥିବା', 'frameless' ),
+       'img_border'                => array( '1', 'ବର୍ଡର', 'border' ),
+       'img_baseline'              => array( '1', 'ବେସଲାଇନ', 'baseline' ),
+       'img_top'                   => array( '1', 'ଉପର', 'top' ),
+       'img_text_top'              => array( '1', 'ଲେଖା-ଉପର', 'text-top' ),
+       'img_middle'                => array( '1', 'ମଝି', 'middle' ),
+       'img_bottom'                => array( '1', 'ତଳ', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'ଲେଖା-ତଳ', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ଲିଙ୍କ=$1', 'link=$1' ),
+       'articlepath'               => array( '0', 'ଲେଖାର_ପଥ', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'ସର୍ଭର', 'SERVER' ),
+       'grammar'                   => array( '0', 'ବ୍ୟାକରଣ', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ଲିଙ୍ଗ', 'GENDER:' ),
+       'plural'                    => array( '0', 'ବହୁବଚନ:', 'PLURAL:' ),
+       'raw'                       => array( '0', 'କଞ୍ଚା', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ଦେଖଣାନାଆଁ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '_ନୂଆବିଭାଗଲିଙ୍କ_', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '_ନୂଆ_ବିଭାଗ_ନକରିବା_ଲିଙ୍କ_', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ନଗଦ_ରିଭିଜନ', 'CURRENTVERSION' ),
+       'numberofadmins'            => array( '1', 'ପରିଛାମାନଙ୍କତାଲିକା', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'ବାଆଁପ୍ୟାଡ଼', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ଡାହାଣପ୍ୟାଡ଼', 'PADRIGHT' ),
+       'special'                   => array( '0', 'ବିଶେଷ', 'special' ),
+       'filepath'                  => array( '0', 'ଫାଇଲରାହା:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ଟାଗ', 'tag' ),
+       'hiddencat'                 => array( '1', '_ଲୁଚିଥିବାବିଭାଗ_', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'ଫରଦଆକାର', 'PAGESIZE' ),
+       'protectionlevel'           => array( '1', 'ପ୍ରତିରକ୍ଷାସ୍ତର', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'ତାରିଖରପ୍ରକାର', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ବାଟ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ଉଇକି', 'WIKI' ),
+       'url_query'                 => array( '0', 'ପ୍ରଶ୍ନ', 'QUERY' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -322,15 +322,15 @@ $messages = array(
 'thursday' => 'ଗୁରୁବାର',
 'friday' => 'ଶୁକ୍ରବାର',
 'saturday' => 'ଶନିବାର',
-'sun' => 'ରବିବାର',
-'mon' => 'ସୋମବାର',
-'tue' => 'ମଙ୍ଗଳବାର',
-'wed' => 'ବୁଧବାର',
-'thu' => 'ଗୁରୁବାର',
-'fri' => 'ଶୁକ୍ରବାର',
-'sat' => 'ଶନିବାର',
+'sun' => 'ରବି',
+'mon' => 'ସୋମ',
+'tue' => 'ମଙ୍ଗଳ',
+'wed' => 'ବୁଧ',
+'thu' => 'ଗୁରୁ',
+'fri' => 'ଶୁକ୍ର',
+'sat' => 'ଶନି',
 'january' => 'ଜାନୁଆରୀ',
-'february' => 'ଫà­\87ବà­\83ଆରୀ',
+'february' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'march' => 'ମାର୍ଚ୍ଚ',
 'april' => 'ଅପ୍ରେଲ',
 'may_long' => 'ମଇ',
@@ -342,7 +342,7 @@ $messages = array(
 'november' => 'ନଭେମ୍ବର',
 'december' => 'ଡିସେମ୍ବର',
 'january-gen' => 'ଜାନୁଆରୀ',
-'february-gen' => 'ଫà­\87ବà­\83ଆରୀ',
+'february-gen' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'march-gen' => 'ମାର୍ଚ୍ଚ',
 'april-gen' => 'ଅପ୍ରେଲ',
 'may-gen' => 'ମଇ',
@@ -354,7 +354,7 @@ $messages = array(
 'november-gen' => 'ନଭେମ୍ବର',
 'december-gen' => 'ଡିସେମ୍ବର',
 'jan' => 'ଜାନୁଆରୀ',
-'feb' => 'ଫà­\87ବà­\83ଆରୀ',
+'feb' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
 'mar' => 'ମାର୍ଚ୍ଚ',
 'apr' => 'ଅପ୍ରେଲ',
 'may' => 'ମଇ',
@@ -520,7 +520,9 @@ $1',
 'youhavenewmessages' => 'ଆପଣଙ୍କର $1 ($2).',
 'newmessageslink' => 'ନୂଆ ମେସେଜ',
 'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
+'youhavenewmessagesfromusers' => 'ଆପଣଙ୍କର {{PLURAL:$3|another user|$3 users}} ($2)ରୁ $1 ଅଛି ।',
 'youhavenewmessagesmanyusers' => 'ଆପଣଙ୍କର ବହୁତ ବ୍ୟବହାରକାରୀ($2)ମାନଙ୍କଠାରୁ $1 ଅଛି ।',
+'newmessageslinkplural' => '{{PLURAL:$1|a new message|ନୂଆ ମେସେଜ}}',
 'newmessagesdifflinkplural' => 'ଶେଷ{{PLURAL:$1|change|changes}}',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
 'editsection' => 'ସମ୍ପାଦନା',
@@ -573,12 +575,11 @@ $1',
 # General errors
 'error' => 'ଭୁଲ',
 'databaseerror' => 'ଡାଟାବେସରେ ଭୁଲ',
-'dberrortext' => 'ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜା ଭୁଲ ଟିଏ ହୋଇଅଛି ।
-ଏହା ଏହି ସଫ୍ଟବେରରେ ଭୁଲଟିଏକୁ ମଧ୍ୟ ସୂଚାଇପାରେ ।
-ଶେଷ ଥର ଖୋଜାଯାଇଥିବା ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜାଟି ଥିଲା:
-"<tt>$2</tt>" କାମ ଭିତରୁ
-<blockquote><tt>$1</tt></blockquote> ।
-ଡାଟାବେସ ଫେରନ୍ତା ଭୁଲ "<tt>$3: $4</tt>".',
+'dberrortext' => 'ଏହା ଏହି ସଫ୍ଟବେରରେ ଭୁଲଟିଏକୁ ମଧ୍ୟ ସୂଚାଇପାରେ ।
+ଶେଷଥର ଖୋଜାଯାଇଥିବା ଡାଟାବେସ ପ୍ରଶ୍ନଟି ଥିଲା:
+<blockquote><code>$1</code></blockquote>
+ ଯାହାକି "<code>$2</code>"ରୁ ଥିଲା
+ଡାଟାବେସରେ ହୋଇଥିବା ଭୁଲ ହେଉଛି "<samp>$3: $4</samp>"।',
 'dberrortextcl' => 'ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜା ଭୁଲଟିଏ ହୋଇଅଛି ।
 ଶେଷ ଖୋଜା ଡାଟାବେସ ପ୍ରଶ୍ନଟି ଥିଲା:
 "$1"
@@ -647,6 +648,11 @@ $2',
 'ns-specialprotected' => 'ବିଶେଷ ପୃଷ୍ଠାସବୁକୁ ବଦଳାଯାଇପାରିବ ନାହିଁ ।',
 'titleprotected' => 'ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।
 ଏହାର କାରଣ ହେଲା "\'\'$2\'\'" ।',
+'filereadonlyerror' => 'ଫାଇଲ ଧାରକ "$2"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।
+
+ଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: "$3"',
+'invalidtitle-knownnamespace' => '"$2" ନେମ୍ସ୍ପେସ ଏବଂ "$3" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
+'invalidtitle-unknownnamespace' => '"$1" ନେମ୍ସ୍ପେସ ଏବଂ "$2" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
 'exception-nologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'exception-nologin-text' => 'ଏହା କରିବାକୁ ହେଲେ ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଲଗଇନ କରିବାକୁ ପଡିବ ।',
 
@@ -658,7 +664,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ଆପଣ ଲଗାଆଉଟ କରିଦେଲେ'''
 
-ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା [[Special:UserLogin|ଆଉଥରେ]] ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ ।
+ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା <span class='plainlinks'>[$1 ଆଉଥରେ]</span> ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ ।
 ଜାଣିରଖନ୍ତୁ, କିଛି ପୃଷ୍ଠା ଲଗାଆଉଟ କଲାପରେ ବି ଆଗପରି ଦେଖାଯାଇପାରେ, ଆପଣ ବ୍ରାଉଜର କାସକୁ ହଟାଇଲା ଯାଏଁ ଏହା ଏମିତି ରହିବ ।",
 'welcomecreation' => '== $1!, ଆପଣଙ୍କ ଖାତାଟି ତିଆରି ହୋଇଗଲା==
 ତେବେ, ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
@@ -928,6 +934,10 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି],
 କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରନ୍ତି]</span> ।',
+'missing-revision' => '"{{PAGENAME}}" ନାମରେ ଥିବା ପୃଷ୍ଠାଟିର #$1 ପୁନରାବୃତ୍ତି ନାହିଁ ।
+
+ପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।
+ଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।',
 'userpage-userdoesnotexist' => 'ଇଉଜର ଖାତା "$1" ଟି ତିଆରି କରାଯାଇନାହିଁ ।
 ଆପଣ ଏହି ପୃଷ୍ଠାଟିକୁ ତିଆରି କରିବାକୁ ଚାହାନ୍ତି କି ନାହିଁ ଦୟାକରି ପରଖି ନିଅନ୍ତୁ ।',
 'userpage-userdoesnotexist-view' => 'ଇଉଜର ନାମ "$1"ଟି ତିଆରି କରାଯାଇ ନାହିଁ ।',
@@ -937,7 +947,6 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 * '''Firefox / Safari:''' ''Reload'' କଲାବେଳେ ''Shift'' ଧରି, କିମ୍ବା ''Ctrl-F5'' ବା ''Ctrl-R'' (Macରେ ''⌘-R'') ଦବାନ୍ତୁ
 * '''Google Chrome:''' ''Ctrl-Shift-R'' (Macରେ ''⌘-Shift-R'') ଦବାନ୍ତୁ
 * '''Internet Explorer:'''  ''Refresh'' କଲାବେଳେ ''Ctrl'' ଦବାନ୍ତୁ, କିମ୍ବା ''Ctrl-F5'' ଦବାନ୍ତୁ
-* '''Konqueror:''' ''Reload'' ଦବାନ୍ତୁ କିମ୍ବା ''F5'' ଦବାନ୍ତୁ
 * '''Opera:''' ''Tools → Preferences''ରେ ଅସ୍ଥାୟୀ ସ୍ମୃତି ସଫା କରିଦିଅନ୍ତୁ",
 'usercssyoucanpreview' => "'''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ CSS ସାଇତିବା ଆଗରୁ \"{{int:showpreview}}\" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ ।",
 'userjsyoucanpreview' => "'''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ ଜାଭାସ୍କ୍ରିପ୍ଟ (JavaScript) ସାଇତିବା ଆଗରୁ \"{{int:showpreview}}\" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ ।",
@@ -1054,6 +1063,13 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'parser-template-loop-warning' => 'ଛାଞ୍ଚ ଲୁପ (Template loop) ଦେଖିବାକୁ ମିଳିଲା: [[$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' => 'ଅଜଣା ଚକ୍ରର ସୀମା ଅତ୍ୟଧିକ ହୋଇଗଲା ($1)',
+'converter-manual-rule-error' => 'ଆପେ ଆପେ ଭାଷା ପରିବର୍ତ୍ତନ ନିଯମରେ ଭୁଲ ଅଛି',
 
 # "Undo" feature
 'undo-success' => 'ଏହି ସମ୍ପାଦନା ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ।
@@ -1284,8 +1300,6 @@ $1",
 'search-interwiki-caption' => 'ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ',
 'search-interwiki-default' => '$1 ଫଳାଫଳ:',
 'search-interwiki-more' => '(ଅଧିକ)',
-'search-mwsuggest-enabled' => 'ମତାମତ ସହ',
-'search-mwsuggest-disabled' => 'ମତାମତ ନାହିଁ',
 'search-relatedarticle' => 'ଯୋଡ଼ା',
 'mwsuggest-disable' => 'AJAX ମତାମତକୁ ଅଚଳ କରାଇବେ',
 'searcheverything-enable' => 'ସବୁଗୁଡ଼ିକ ନେମସ୍ପେସରେ ଖୋଜିବେ',
@@ -1332,6 +1346,7 @@ $1",
 'prefs-beta' => 'ଆଗ ବିଶେଷତାମାନ',
 'prefs-datetime' => 'ତାରିଖ ଓ ସମୟ',
 'prefs-labs' => 'ପରଖଶାଳା ସୁବିଧାସବୁ',
+'prefs-user-pages' => 'ବ୍ୟବହାରକାରୀଙ୍କର ପୃଷ୍ଠାଗୁଡିକ',
 'prefs-personal' => 'ସଭ୍ୟ ପ୍ରଫାଇଲ',
 'prefs-rc' => 'ନଗଦ ବଦଳ',
 'prefs-watchlist' => 'ଦେଖଣା ତାଲିକା',
@@ -2128,6 +2143,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'allpagesbadtitle' => 'ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଅଲଗା ଭାଷାର ବ୍ୟବହାର କରାଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ଉପସର୍ଗ ଦିଆଯାଇଛି ।
 ଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ଶିରୋନାମା ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।',
 'allpages-bad-ns' => '{{SITENAME}}ରେ "$1" ନେମସ୍ପେସଟିଏ ନାହିଁ ।',
+'allpages-hide-redirects' => 'ପୁନଃପ୍ରେରଣସମୂହକୁ ଲୁଚାଇବେ',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'ନୂତନତମ ଦେଖନ୍ତୁ ।',
@@ -2199,6 +2215,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'mailnologin' => 'ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ',
 'mailnologintext' => 'ଆପଣ ନିଜ [[Special:Preferences|ପସନ୍ଦସବୁ]]ରେ [[Special:UserLogin|ଲଗ ଇନ]] କରିଥିଲେ ଓ ନିଜର ଏକ ସଚଳ ଇ-ମେଲ ଠିକଣା ଥିଲେ ଯାଇ ବାକି ସବୁ ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ ପଠାଇପାରିବେ ।',
 'emailuser' => 'ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ',
+'emailuser-title-notarget' => 'ବ୍ୟବହାରକାରୀ କୁ ଇ-ମେଲ',
 'emailpage' => 'ଇ-ମେଲ ବ୍ୟବହାରକାରୀ',
 'emailpagetext' => 'ତଳେ ଥିବା ଫର୍ମ ବ୍ୟବହାର କରି ଆପଣ ଏହି ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ କରିପାରିବେ ।
 [[Special:Preferences|ଆପଣଙ୍କ ପସନ୍ଦ]]ରେ ଥିବା ଇ-ମେଲ ଠିକଣା ପ୍ରେରକ ଭାବରେ ଦେଖାଯିବ, ତେଣୁ ଚିଠି ପାଇଥିବା ସଭ୍ୟ ଆପଣଙ୍କୁ ସିଧା ସଳଖ ଉତ୍ତର ଦେଇପାରିବ ।',
@@ -2894,9 +2911,6 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 'import-logentry-interwiki' => '$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା',
 'import-logentry-interwiki-detail' => '$2 ଭିତରୁ $1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}',
 
-# JavaScriptTest
-'javascripttest-disabled' => 'ଏହି ଉଇକିରେ ଏହି ବ୍ୟବସ୍ଥାଟିକୁ ସଚଳ କରାଯାଇନାହି ।',
-
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା',
 'tooltip-pt-anonuserpage' => 'ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି',
@@ -2994,6 +3008,7 @@ MediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା 
 # Info page
 'pageinfo-title' => '"$1"ର ବିବରଣୀ',
 'pageinfo-header-edits' => 'ବଦଳସବୁ',
+'pageinfo-article-id' => 'ପୃଷ୍ଠା ଆଇଡ଼ି',
 'pageinfo-views' => 'ଦେଖଣା ସଂଖ୍ୟା',
 'pageinfo-watchers' => 'ଦେଖଣାହାରି ସଂଖ୍ୟା',
 'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
@@ -3835,6 +3850,9 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'feedback-bugcheck' => 'ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।',
 'feedback-bugnew' => 'ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।',
 
+# Search suggestions
+'searchsuggest-search' => 'ଖୋଜିବା',
+
 # API errors
 'api-error-badaccess-groups' => 'ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।',
 'api-error-badtoken' => 'ଭିତର ଅସୁବିଧା: ଖରାପ ଟୋକନ ।',
@@ -3875,6 +3893,11 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 '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|year|years}}',
 'duration-decades' => '$1 {{PLURAL:$1|decade|decades}',
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
index 90e0b43..b81f83a 100644 (file)
@@ -50,14 +50,40 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Recentchanges'             => array( 'Фæстаг_ивдтытæ' ),
+       'Activeusers'               => array( 'АктивонАрхайджытæ' ),
+       'Allmessages'               => array( 'ФыстæджытæИууылдæр' ),
+       'Allpages'                  => array( 'ФæрстæИууылдæр' ),
+       'Blankpage'                 => array( 'АфтидФарс' ),
+       'Block'                     => array( 'Блок' ),
+       'Blockme'                   => array( 'НыблокМæКæн' ),
+       'Booksources'               => array( 'ЧингуытыРавзæрæнтæ' ),
+       'BrokenRedirects'           => array( 'ЦъæлРарвыстытæ' ),
+       'Categories'                => array( 'Категоритæ' ),
+       'ChangeEmail'               => array( 'EmailИвын' ),
+       'ChangePassword'            => array( 'ПарольИвын' ),
+       'ComparePages'              => array( 'ФæрстæАбарын' ),
+       'Confirmemail'              => array( 'EmailБæлвырдКæнын' ),
+       'Contributions'             => array( 'Бавæрд' ),
+       'CreateAccount'             => array( 'АккаунтСкæнын' ),
+       'DeletedContributions'      => array( 'ХафтБавæрд' ),
+       'Mycontributions'           => array( 'МæБавæрд' ),
+       'Mypage'                    => array( 'МæФарс' ),
+       'Mytalk'                    => array( 'МæНыхас' ),
+       'Myuploads'                 => array( 'МæБавгæд' ),
+       'Newimages'                 => array( 'НогФайлтæ' ),
+       'Newpages'                  => array( 'НогФæрстæ' ),
+       'Preferences'               => array( 'Фадæттæ' ),
+       'Randompage'                => array( 'ÆрхаугæФарс' ),
+       'Recentchanges'             => array( 'ФæстагИвдтытæ' ),
+       'Search'                    => array( 'Агурын' ),
+       'Watchlist'                 => array( 'Цæстдард' ),
 );
 
 
 $magicWords = array(
-       'redirect'                => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'img_right'               => array( '1', 'рахиз', 'справа', 'right' ),
-       'img_left'                => array( '1', 'галиу', 'слева', 'left' ),
+       'redirect'                  => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'img_right'                 => array( '1', 'рахиз', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'галиу', 'слева', 'left' ),
 );
 
 $linkTrail = '/^((?:[a-z]|а|æ|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я|“|»)+)(.*)$/sDu';
@@ -221,7 +247,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' => 'Истори',
@@ -329,6 +355,10 @@ $1',
 'youhavenewmessages' => 'Райстай $1 ($2).',
 'newmessageslink' => 'ног фыстæгтæ',
 'newmessagesdifflink' => 'фæстаг ивд',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Æндæр архайæгæй|$3 архайæгæй}} дæм $1 æрцыд ($2).',
+'youhavenewmessagesmanyusers' => 'Бирæ архайæгæй дæм $1 æрцыдис ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ног фыстæг|ног фыстæджытæ}}',
+'newmessagesdifflinkplural' => 'фæстаг {{PLURAL:$1|ивд|ивдтытæ}}',
 'youhavenewmessagesmulti' => 'Дæумæ æрцыдис ног фыстæджытæ {{grammar:genitive|$1}}',
 'editsection' => 'ивын',
 'editold' => 'ивын',
@@ -383,9 +413,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"
@@ -442,10 +472,11 @@ $1',
 'protectedpagetext' => 'Ацы фарс у ивынæй æхгæд.',
 'viewsourcetext' => 'Ацы фарсы код фенæн æмæ халдих кæнæн ис:',
 'viewyourtext' => "Дæ бон у фенын æмæ скопи кæнын ацы фарсмæ '''цы ивдтытæ сарæзтай''', уыдон бындур текст :",
-'protectedinterface' => 'Ацы фарсы ис софты интерфейсы текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.',
-'editinginterface' => "'''Сындæг:''' Ды ивыс фарс, кæм ис софты интерфейсы текст.
-Ацы фарсы фæивд фæзындзæн алы архайæджы интерфейсыл дæр.
-Тæлмац кæнынæн, дæ хорзæхæй, фен [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], MediaWiki тæлмацгæнæн проект.",
+'protectedinterface' => 'Ацы фарсы ис ацы викийы софты интерфейсæн текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.
+Алы викийы тæлмæцтæ ивынæн, дæ хорзæхæй, архай [//translatewiki.net/ translatewiki.net-æй], кæцы у MediaWiki-йы локализацигæнæн проект.',
+'editinginterface' => "'''Сындæг:''' Ды ивыс ахæм фарс, кæм ис софты интерфейсы текст.
+Ацы фарсы фæивд фæзындзæн ацы викийы алы архайæджы интерфейсыл дæр.
+Алы викийы тæлмæцтæ ивынæн, дæ хорзæхæй, архай [//translatewiki.net/ translatewiki.net-æй], кæцы у MediaWiki-йы локализацигæнæн проект.",
 'sqlhidden' => '(SQL домæн æмбæхст у)',
 'cascadeprotected' => 'Ацы фарс ивынæй æхгæд у уымæн æмæ у æфтыд бындæр цы "каскадон" хъахъхъонд {{PLURAL:$1|фарс ис, уырдæм|фæрстæ сты, уыдонмæ}}:
 $2',
@@ -471,7 +502,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Ныр дæ æддæмæ хызт.'''
 
-Дæ бон у дарддæр архайай {{grammar:genitive|{{SITENAME}}}} æнæномæй, æви та [[Special:UserLogin|фæстæмæ бахизын]] раздæры номæй кæнæ та æндæр номæй.
+Дæ бон у дарддæр архайай {{grammar:genitive|{{SITENAME}}}} æнæномæй, æви та <span class='plainlinks'>[$1 фæстæмæ бахизын]</span> раздæры номæй кæнæ та æндæр номæй.
 Дæ сæры дар æмæ иуæй иу фæрстæ гæнæн ис æвдыст цæуой афтæ, цымæ нырмæ дæр нæ рахызтæ. Уый тыххæй дæ браузеры кеш сафтид кæн.",
 'welcomecreation' => '== Ӕгас цу, $1! ==
 Дæ аккаунт арæзт æрцыдис.
@@ -482,6 +513,7 @@ $2',
 'remembermypassword' => 'Бахъуыды мæ кæнæд ашы браузеры (максимум $1 {{PLURAL:$1|бонмæ|бонмæ}})',
 'securelogin-stick-https' => 'Дарддæр дæр HTTPS-ы уылты, бахизыны фæстæ',
 'yourdomainname' => 'Дæ домен:',
+'password-change-forbidden' => 'Дæ бон нæу пароль фæивын ацы викийы.',
 'externaldberror' => 'Кæнæ аутентификацийы рарддоны рæдыд æрцыдис, кæнæ та дæуæн нæй бар снæуæг кæнын дæ æддаг аккаунт.',
 'login' => 'Бахизын',
 'nav-login-createaccount' => 'Бахизын / срегистраци кæнын',
@@ -713,19 +745,26 @@ $2
 'loginreqlink' => 'бахизын',
 'loginreqpagetext' => 'Дæуæн хъæуы $1 цæмæй æндæр фæрстæ кæсай.',
 'accmailtitle' => 'Пароль рарвыст у.',
+'accmailtext' => "[[User talk:$1|{{grammar:dative|$1}}]] халæй ист пароль æрвыст æрцыд $2-мæ.
+
+Ацы ног аккаунты пароль гæнæн ис фæивын ''[[Special:ChangePassword|пароль ивæн варсыл]]'' бахизыны фæстæ.",
 'newarticle' => '(Ног)',
 'newarticletext' => 'Ды ныххæцыдтæ ахæм æрвитæныл, кæй фарс нырмæ нæй.
 Фарс бакæнынæн байдай фыссын дæлдæр цы къæртт ис, уым (кæс [[{{MediaWiki:Helppage}}|æххуысы фарс]] фылдæр базонынæн).',
+'anontalkpagetext' => "----''Ай у æнæном архайæджы ныхасы фарс. Ацы архайæг нырмæ нæ срегистраци кодта, кæнæ та йæ аккаунтæй нæ архайы.
+Уый тыххæй мах пайда кæнæм йæ IP адрисæй, цæмæй-иу æй бæрæг кæнæм.
+Ахæм IP адристæй гæнæн ис архайой цалдæр архайæджы.
+Кæд ды æнæном архайæг дæ æмæ дæм цыдæр зæгъæлы фыстæджытæ цæуы, уæд, дæ хорзæхæй, [[Special:UserLogin/signup|бакæн аккаунт]] кæнæ [[Special:UserLogin|бахиз системæмæ]], цæмæй дæ мауал хæццæ кæной æндæр æнæном архайджытимæ.''",
 'noarticletext' => 'Ацы фарсы нырмæ текст нæй.
 Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты],
 кæнæ [{{fullurl:{{FULLPAGENAME}}|action=edit}} скæнын ацы фарс]</span>.',
 'noarticletext-nopermission' => 'Ацы фарсы нырмæ текст нæй.
-Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты
-кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>.',
+Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты, кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>, фæлæ дын йæ саразыны бар нæй.',
 'note' => "'''Бафиппай:'''",
 'previewnote' => "'''Зон æй, æмæ ай у æрмæстдæр разбакаст.'''
 Дæ ивдтытæ нырмæ æвæрд не рцыдысты!",
+'continue-editing' => 'Дарддæр ивын',
 'editing' => 'Ивд цæуы $1',
 'editingsection' => 'Ивыс $1 (фарсы хай)',
 'editconflict' => 'Ивыны конфликт: $1',
@@ -802,7 +841,7 @@ $2
 'revertmerge' => 'Ахицæн кæнын',
 
 # Diffs
-'history-title' => '"$1" фарсы фæлтæрты истори',
+'history-title' => '"$1", йæ фæлтæрты истори',
 'lineno' => 'Рæнхъ $1:',
 'compareselectedversions' => 'Абарын æвзæрст фæлтæртæ',
 'editundo' => 'раивын',
@@ -839,8 +878,6 @@ $2
 'search-suggest' => 'Кæд мыййаг агурыс: $1',
 'search-interwiki-caption' => 'Æфсымæрон проекттæ',
 'search-interwiki-more' => '(нодзы)',
-'search-mwsuggest-enabled' => 'æмбарынгæнæнтимæ',
-'search-mwsuggest-disabled' => 'æнæ æмбарынгæнæнтæ',
 'searchrelated' => 'хæстæг',
 'searchall' => 'иууылдæр',
 'showingresultsheader' => "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуджытæ '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
@@ -1570,6 +1607,10 @@ $3',
 'feedback-close' => 'Æххæст',
 
 # API errors
+'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' => 'Мидæггаг рæдыд: Серверæй дзуапп нæй.',
index a3b6053..c5bd9e6 100644 (file)
  * @author Sukh
  * @author Surinder.wadhawan
  * @author TariButtar
+ * @author Xqt
  * @author Ævar Arnfjörð Bjarmason
  * @author לערי ריינהארט
  */
 
 $namespaceNames = array(
        NS_MEDIA            => 'ਮੀਡੀਆ',
-       NS_SPECIAL          => 'ਖਾਸ',
-       NS_TALK             => 'à¨\9aਰà¨\9aਾ',
-       NS_USER             => 'ਮà©\88à¨\82ਬਰ',
-       NS_USER_TALK        => 'ਮà©\88à¨\82ਬਰ_à¨\9aਰà¨\9aਾ',
-       NS_PROJECT_TALK     => '$1_à¨\9aਰà¨\9aਾ',
+       NS_SPECIAL          => 'à¨\96਼ਾਸ',
+       NS_TALK             => 'à¨\97ੱਲ-ਬਾਤ',
+       NS_USER             => 'ਵਰਤà©\8cà¨\82à¨\95ਾਰ',
+       NS_USER_TALK        => 'ਵਰਤà©\8cà¨\82à¨\95ਾਰ_à¨\97ੱਲ-ਬਾਤ',
+       NS_PROJECT_TALK     => '$1_à¨\97ੱਲ-ਬਾਤ',
        NS_FILE             => 'ਤਸਵੀਰ',
-       NS_FILE_TALK        => 'ਤਸਵà©\80ਰ_à¨\9aਰà¨\9aਾ',
-       NS_MEDIAWIKI        => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95ਿ',
-       NS_MEDIAWIKI_TALK   => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95ਿ_à¨\9aਰà¨\9aਾ',
-       NS_TEMPLATE         => 'ਨਮà©\82ਨਾ',
-       NS_TEMPLATE_TALK    => 'ਨਮà©\82ਨਾ_à¨\9aਰà¨\9aਾ',
+       NS_FILE_TALK        => 'ਤਸਵà©\80ਰ_à¨\97ੱਲ-ਬਾਤ',
+       NS_MEDIAWIKI        => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95à©\80',
+       NS_MEDIAWIKI_TALK   => 'ਮà©\80ਡà©\80à¨\86ਵਿà¨\95à©\80_à¨\97ੱਲ-ਬਾਤ',
+       NS_TEMPLATE         => 'ਫਰਮਾ',
+       NS_TEMPLATE_TALK    => 'ਫਰਮਾ_à¨\97ੱਲ-ਬਾਤ',
        NS_HELP             => 'ਮਦਦ',
-       NS_HELP_TALK        => 'ਮਦਦ_à¨\9aਰà¨\9aਾ',
+       NS_HELP_TALK        => 'ਮਦਦ_à¨\97ੱਲ-ਬਾਤ',
        NS_CATEGORY         => 'ਸ਼੍ਰੇਣੀ',
-       NS_CATEGORY_TALK    => 'ਸ਼੍ਰੇਣੀ_ਚਰਚਾ',
+       NS_CATEGORY_TALK    => 'ਸ਼੍ਰੇਣੀ_ਗੱਲ-ਬਾਤ',
+);
+
+$namespaceAliases = array(
+       'ਖਾਸ' => NS_SPECIAL,
+       'ਚਰਚਾ' => NS_TALK,
+       'ਮੈਂਬਰ' => NS_USER,
+       'ਮੈਂਬਰ_ਚਰਚਾ' => NS_USER_TALK,
+       '$1_ਚਰਚਾ' => NS_PROJECT_TALK,
+       'ਤਸਵੀਰ_ਚਰਚਾ' => NS_FILE_TALK,
+       'ਮੀਡੀਆਵਿਕਿ' => NS_MEDIAWIKI,
+       'ਮੀਡੀਆਵਿਕਿ_ਚਰਚਾ' => NS_MEDIAWIKI_TALK,
+       'ਨਮੂਨਾ' => NS_TEMPLATE,
+       'ਨਮੂਨਾ_ਚਰਚਾ' => NS_TEMPLATE_TALK,
+       'ਮਦਦ_ਚਰਚਾ' => NS_HELP_TALK,
+       'ਸ਼੍ਰੇਣੀ_ਚਰਚਾ' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( 'ਸਰਗਰਮ_ਵਰਤੌਂਕਾਰ' ),
+       'Blankpage'                 => array( 'ਖਾਲੀ_ਸਫ਼ਾ' ),
+       'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਉਣਾ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਆਈ_ਪੀ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਵਰਤੌਂਕਾਰ' ),
+       'Listusers'                 => array( 'ਵਰਤੌਂਕਾਰਾਂ_ਦੀ_ਸੂਚੀ' ),
 );
 
 $digitTransformTable = array(
@@ -64,29 +87,29 @@ $messages = array(
 'tog-hidepatrolled' => 'ਮੌਨਜੁਦਾ ਬਦਲਾਬ ਮੈ ਸੈ ਸਹੀਤਕ ਬਦਲਾਬ ਕੌ ਛੁਪਾ ਕਰ ਰਖੇ.',
 'tog-newpageshidepatrolled' => 'ਨਵੀ ਸੁਚੀ ਮੈ ਸੈ ਗਸ਼ਤ ਪਰਚੇ ਕੌ ਛੁਪਾਏ.',
 'tog-extendwatchlist' => 'ਸਾਰੀ ਨਵੀ ਤਬਦੀਲੀਆ ਹੀ ਨਹੀ ,ਪੂਰਾਣੀ ਤਬਦੀਲੀਆ ਨੂੰ ਵੀ ਨਵੀ ਸੂਚੀ ਵਿਚ ਵਧਾ ਕੈ ਸ਼ਾਮੀਲ ਕਰੌ.',
-'tog-usenewrc' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ ਲਿਸਟ ਵਿਚ ਤਬਦੀਲੀਆਂ ਸਫ਼ੇ ਮੁਤਾਬਕ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-usenewrc' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਸਫ਼ੇ ਮੁਤਾਬਕ ਤਬਦੀਲੀਆਂ ਦੇ ਗਰੁੱਪ ਬਣਾਓ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ',
 'tog-showtoolbar' => 'ਐਡਿਟ ਟੂਲਬਾਰ ਵੇਖੋ (JavaScript)',
-'tog-editondblclick' => 'ਦà©\8bਹਰà©\87 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨²à¨¼ à¨¸à¨«à¨¼à¨¾ ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-editsection' => '[ਸà©\8bਧà©\8b] à¨²à¨¿à©°à¨\95ਾà¨\82 à¨\9c਼ਰà©\80à¨\8f à¨¸à©\88à¨\95ਸ਼ਨ à¨¸à©\8bਧ à¨¯à©\8bà¨\97 ਕਰੋ',
+'tog-editondblclick' => 'ਦà©\82ਹਰà©\87 à¨\95ਲਿੱà¨\95 à¨¨à¨¾à¨²à¨¼ à¨¸à¨«à¨¼à©\87 ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-editsection' => '[ਸà©\8bਧà©\8b] à¨²à¨¿à©°à¨\95ਾà¨\82 à¨\9c਼ਰà©\80à¨\8f à¨¸à©\88à¨\95ਸ਼ਨ à¨¸à©\8bਧ à¨\9aਾਲà©\82 ਕਰੋ',
 '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 à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdefault' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à©\8bਧà©\87 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±ਚ ਪਾਓ',
-'tog-watchmoves' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¬à¨¦à¨²à©\87 à¨¸à¨¿à¨°à¨²à©\87à¨\96ਾà¨\82 à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¹à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨®à©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±ਚ ਪਾਓ',
-'tog-minordefault' => 'ਸਾਰà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
+'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਨਵੇਂ ਸਫ਼ੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
+'tog-watchdefault' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à©\8bਧà©\87 à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
+'tog-watchmoves' => 'ਮੇਰੇ ਵੱਲੋਂ ਬਦਲੇ ਸਿਰਲੇਖਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
+'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨®à¨¿à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
+'tog-minordefault' => 'ਸਾਰà©\87 à¨«à©\87ਰ-ਬਦਲਾà¨\82 â\80\99ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tog-previewontop' => 'ਐਡਿਟ ਬਕਸੇ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
 'tog-previewonfirst' => 'ਪਹਿਲੇ ਐਡਿਟ ਉੱਤੇ ਝਲਕ ਵੇਖਾਓ',
 'tog-nocache' => 'ਬਰਾਊਜ਼ਰ ਸਫ਼ਾ ਕੈਸ਼ ਕਰਨਾ ਬੰਦ ਕਰੋ',
 'tog-enotifwatchlistpages' => 'ਜਦੋਂ ਮੇਰੀ ਵਾਚ-ਲਿਸਟ ਵਿਚ ਦਰਜ ਕੋਈ ਸਫ਼ਾ ਬਦਲਿਆ ਜਾਵੇ ਯਾ ਮਿਸਲ ਬਦਲੀ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈਮੇਲ ਭੇਜੋ',
 'tog-enotifusertalkpages' => 'ਜਦੋਂ ਮੇਰਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ ਬਦਲਿਆ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'tog-enotifminoredits' => 'ਸਫ਼ਿਆਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੀ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tog-enotifrevealaddr' => 'à¨\9cਾਣà©\82 à¨\95ਰਵਾà¨\89ਣ ਵਾਲ਼ੀਆਂ ਈ-ਮੇਲਾਂ ਵਿਚ ਮੇਰਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਕਰੋ',
+'tog-enotifrevealaddr' => 'à¨\87ਤਲਾਹ à¨¦à©\87ਣ ਵਾਲ਼ੀਆਂ ਈ-ਮੇਲਾਂ ਵਿਚ ਮੇਰਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਕਰੋ',
 'tog-shownumberswatching' => 'ਨਜ਼ਰ ਰੱਖ ਰਹੇ ਮੈਂਬਰਾਂ ਦੀ ਗਿਣਤੀ ਵਖਾਓ',
 'tog-oldsig' => 'ਮੌਜੂਦਾ ਦਸਤਖਤ:',
-'tog-fancysig' => 'ਦਸਤà¨\96਼ਤ à¨¨à©\82à©° à¨µà¨¿à¨\95à©\80ਲਿà¨\96ਤ à¨¦à©\87 à¨¤à©\8cਰ à¨¤à©\87 ਵਰਤੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
+'tog-fancysig' => 'ਦਸਤà¨\96਼ਤ à¨¨à©\82à©° à¨¬à¨¤à©\8cਰ à¨µà¨¿à¨\95à©\80ਲਿà¨\96ਤ ਵਰਤੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
 'tog-externaleditor' => 'ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਾਹਰੀ ਸੋਧਕ ਵਰਤੋ (ਸਿਰਫ਼ ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
 www.mediawiki.org/wiki/
 Manual:External_editors More
@@ -95,16 +118,15 @@ information.])',
 ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ
 ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
 www.mediawiki.org/wiki/
-Manual:External_editors More
-information.])',
+Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'tog-showjumplinks' => '"ਇਸ ਤੇ ਜਾਓ" ਦੇ ਲਿੰਕ ਦਿਖਾਣਾ ਸਮਰੱਥ ਕਰੋ',
 'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ) (ਤਜਰਬੇਕਾਰੀ)',
 'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦਾਖ਼ਲ ਕਰਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰਦਾਰ ਕਰੋ',
-'tog-watchlisthideown' => 'ਮà©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨®à©\87ਰà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨¹à¨\9fਾਓ',
-'tog-watchlisthidebots' => 'ਮà©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨°à©\8bਬਾà¨\9f à¨¦à¨¿à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨¹à¨\9fਾਓ',
-'tog-watchlisthideminor' => 'à¨\9bà©\8bà¨\9fà©\87 à¨¸à©\8bਧ à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨¤à©\8bà¨\82 à¨\93ਹਲà©\87 à¨°à©±à¨\96à©\8b',
-'tog-watchlisthideliu' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨²à¨¾à¨\97 à¨\87ਨ à¨\95à©\80ਤà©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 ਲੁਕਾਓ',
-'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੀਆਂ ਕੀਤੀਆਂ ਸੋਧਾਂ ਲੁਕਾਓ',
+'tog-watchlisthideown' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨®à©\87ਰà©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾਓ',
+'tog-watchlisthidebots' => 'ਮà©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨¬à©\8bà¨\9fਾà¨\82 à¨¦à©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾਓ',
+'tog-watchlisthideminor' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨\9bà©\8bà¨\9fà©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾà¨\93',
+'tog-watchlisthideliu' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨²à¨¾à¨\97 à¨\87ਨ à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\87 à¨\95à©\80ਤà©\87 à¨«à©\87ਰ-ਬਦਲ ਲੁਕਾਓ',
+'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
 'tog-watchlisthidepatrolled' => 'ਵੇਖੀਆਂ ਜਾ ਚੁੱਕੀਆਂ ਸੋਧਾਂ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲੁਕਾਓ',
 'tog-ccmeonemails' => 'ਜੋ ਈ-ਮੇਲਾਂ ਮੈਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਭੇਜਦਾ ਹਾਂ ਓਹਨਾਂ ਦੀਆਂ ਨਕਲਾਂ ਮੈਨੂੰ ਭੇਜੋ',
 'tog-diffonly' => 'ਫ਼ਰਕਾਂ ਤੋਂ ਹੇਠ ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਨਾ ਵਖਾਓ',
@@ -175,43 +197,43 @@ information.])',
 'dec' => 'ਦਿਸੰਬਰ',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|à¨\95à©\88à¨\9fਾà¨\97ਰà©\80|à¨\95à©\88à¨\9fਾਗਰੀਆਂ}}',
-'category_header' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 "$1" à¨µà¨¿à©±ਚ ਲੇਖ',
-'subcategories' => 'ਸਬ-à¨\95à©\88à¨\9fਾਗਰੀਆਂ',
-'category-media-header' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 "$1" à¨µà¨¿à©±ਚ ਮੀਡੀਆ',
-'category-empty' => "''à¨\87ਸ à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 à¨µà¨¿à©±à¨\9a à¨\87ਸ à¨µà©\87ਲ਼à©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨²à©\87à¨\96 ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
-'hidden-categories' => '{{PLURAL:$1|ਲà©\81à¨\95à©\80ਵà©\80à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣà©\80|ਲà©\81à¨\95ਵà©\80à¨\82à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ}}',
-'hidden-category-category' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ',
-'category-subcat-count' => '{{ਕੁੱਲ $2 ਸ਼੍ਰੇਣੀਆਂ ਵਿਚੋਂ, PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼ ਹੇਠ ਲਿਖੀ ਸ਼੍ਰੇਣੀ ਹੈ| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ {{PLURAL:$1|ਉਪ ਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}',
-'category-subcat-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|à¨\89ਪ-ਸ਼à©\8dਰà©\87ਣà©\80 à¨¹à©\88।|$1 à¨\89ਪ-ਸ਼à©\8dਰà©\87ਣà©\80à¨\86à¨\82 à¨¹à¨¨à¥¤}}',
-'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 à¨¸à¨«à¨¼à©\87}} à¨¹à¨¨}}',
-'category-article-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨à¥¤}}',
-'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88।| à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨à¥¤}}}}',
-'category-file-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨à¥¤}}',
+'pagecategories' => '{{PLURAL:$1|à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80|à¨\95à©\88à¨\9fà©\87ਗਰੀਆਂ}}',
+'category_header' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 "$1" à¨µà¨¿ਚ ਲੇਖ',
+'subcategories' => 'ਸਬ-à¨\95à©\88à¨\9fà©\87ਗਰੀਆਂ',
+'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ਰੀਆਂ}}',
+'hidden-category-category' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ',
+'category-subcat-count' => 'ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ, ਕੁੱਲ $2 ਵਿਚੋਂ, {{PLURAL:$2|ਸਿਰਫ਼ ਇਹ ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|ਇਹ {{PLURAL:$1|ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|$1 ਸਬ-ਕੈਟੇਗਰੀਆਂ ਹਨ}}}}।',
+'category-subcat-count-limited' => 'à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਸਬ-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨¹à©\88|$1 à¨¸à¨¬-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80à¨\86à¨\82 à¨¹à¨¨}}।',
+'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 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨}}}}।',
+'category-article-count-limited' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨}}।',
+'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨}}}}।',
+'category-file-count-limited' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨}}।',
 'listingcontinuesabbrev' => 'ਜਾਰੀ',
 'index-category' => 'ਤਤਕਰੇ ਵਾਲ਼ੇ ਸਫ਼ੇ',
-'noindex-category' => 'à¨\95à©\8dਰਮਸà©\82à¨\9aà©\80 à¨°à¨¹à¨¿à¨¤ ਸਫ਼ੇ',
+'noindex-category' => 'ਬਿਨਾà¨\82 à¨¤à¨¤à¨\95ਰà©\87 à¨µà¨¾à¨²à¨¼à©\87 ਸਫ਼ੇ',
 'broken-file-category' => 'ਟੁੱਟੇ ਹੋਏ ਫ਼ਾਈਲ ਜੋੜਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 
 'about' => 'ਇਸ ਬਾਰੇ',
-'article' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©\87à¨\9c',
+'article' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾',
 'newwindow' => '(ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਦੀ ਹੈ)',
 'cancel' => 'ਰੱਦ ਕਰੋ',
 'moredotdotdot' => 'ਹੋਰ...',
-'mypage' => 'ਮà©\87ਰਾ à¨ªà©\87à¨\9c',
-'mytalk' => 'ਮੇਰੀ ਗੱਲਬਾਤ',
-'anontalk' => 'à¨\87ਹ IP à¨²à¨\88 à¨\97ੱਲਬਾਤ',
+'mypage' => 'ਮà©\87ਰਾ à¨¸à¨«à¨¼à¨¾',
+'mytalk' => 'ਮੇਰੀ ਗੱਲ-ਬਾਤ',
+'anontalk' => 'à¨\87ਸ IP à¨²à¨\88 à¨\97ੱਲ-ਬਾਤ',
 'navigation' => 'ਰਹਿਨੁਮਾਈ',
 'and' => '&#32;ਅਤੇ',
 
 # Cologne Blue skin
-'qbfind' => 'ਖੋਜ',
+'qbfind' => 'ਖੋਜ',
 'qbbrowse' => 'ਬਰਾਊਜ਼',
 'qbedit' => 'ਸੋਧ',
-'qbpageoptions' => 'à¨\87ਹ à¨ªà©\87à¨\9c',
+'qbpageoptions' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾',
 'qbpageinfo' => 'ਭਾਗ',
-'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨ªà©\87à¨\9c',
-'qbspecialpages' => 'à¨\96ਾਸ à¨ªà©\87à¨\9c',
+'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨¸à¨«à¨¼à©\87',
+'qbspecialpages' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
 'faq' => 'ਅਕਸਰ ਪੁੱਛੇ ਜਾਣ ਵਾਲ਼ੇ ਸਵਾਲ',
 'faqpage' => 'Project:ਸਵਾਲ-ਜਵਾਬ',
 
@@ -219,8 +241,8 @@ information.])',
 'vector-action-addsection' => 'ਮਜ਼ਮੂਨ ਜੋੜੋ',
 'vector-action-delete' => 'ਮਿਟਾਓ',
 'vector-action-move' => 'ਭੇਜੋ',
-'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ à¨¬à¨£à¨¾à¨\93',
-'vector-action-undelete' => 'ਹà¨\9fਾà¨\89ਣਾ à¨µà¨¾à¨ªà¨¸',
+'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ à¨\95ਰà©\8b',
+'vector-action-undelete' => 'à¨\85ਣ-ਮਿà¨\9fਾà¨\89ਣਾ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'vector-simplesearch-preference' => 'ਵਾਧੂ ਖੋਜ ਸਲਾਹਾਂ ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
@@ -242,47 +264,47 @@ information.])',
 'searcharticle' => 'ਜਾਓ',
 'history' => 'ਸਫ਼ੇ ਦਾ ਅਤੀਤ',
 'history_short' => 'ਅਤੀਤ',
-'updatedmarker' => 'ਮà©\87ਰà©\87 à¨\86à¨\96ਰà©\80 à¨\96à©\8bਲà©\8dਹਣ à¨¬à¨¾à¨¦ à¨\85ੱਪਡà©\87à¨\9f',
+'updatedmarker' => 'ਮà©\87ਰà©\80 à¨\86à¨\96਼ਰà©\80 à¨«à©\87ਰà©\80 à¨¤à©\8bà¨\82 à¨¬à¨¾à¨\85ਦ à¨¬à¨¦à¨²à©\87 à¨\97à¨\8f',
 'printableversion' => 'ਛਪਣਯੋਗ ਵਰਜਨ',
 'permalink' => 'ਪੱਕਾ ਲਿੰਕ',
-'print' => 'ਪਰਿੰà¨\9f à¨\95ਰੋ',
+'print' => 'à¨\9bਾਪੋ',
 'view' => 'ਵੇਖੋ',
 'edit' => 'ਬਦਲੋ',
 'create' => 'ਬਣਾਓ',
-'editthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c ਸੋਧੋ',
+'editthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ ਸੋਧੋ',
 'create-this-page' => 'ਇਹ ਸਫ਼ਾ ਬਣਾਓ',
 'delete' => 'ਮਿਟਾਓ',
-'deletethispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c à¨¹ਟਾਓ',
-'undelete_short' => 'ਅਣ-ਹਟਾਓ {{PLURAL:$1|one edit|$1 edits}}',
+'deletethispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¿ਟਾਓ',
+'undelete_short' => '{{PLURAL:$1|ਇੱਕ ਸੋਧ|$1 ਸੋਧਾਂ}} ਅਣ-ਮਿਟਾਓ',
 'viewdeleted_short' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
 'protect_change' => 'ਤਬਦੀਲੀ',
-'protectthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c ਸੁਰੱਖਿਅਤ ਕਰੋ',
+'protectthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'unprotectthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c਼ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
+'unprotectthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à©\87 ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'newpage' => 'ਨਵਾਂ ਸਫ਼ਾ',
-'talkpage' => 'à¨\87ਸ à¨ªà©\87à¨\9c à¨¬à¨¾à¨°à©\87 à¨\9aਰà¨\9aਾ',
-'talkpagelinktext' => 'ਗੱਲਬਾਤ',
-'specialpage' => 'à¨\96ਾਸ à¨ªà©\87à¨\9c',
+'talkpage' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¬à¨¾à¨°à©\87 à¨\9aਰà¨\9aਾ à¨\95ਰà©\8b',
+'talkpagelinktext' => 'ਗੱਲ-ਬਾਤ',
+'specialpage' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
 'personaltools' => 'ਨਿੱਜੀ ਸੰਦ',
-'postcomment' => 'ਨਵਾà¨\82 à¨­à¨¾à¨\97',
-'articlepage' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©\87à¨\9c ਵੇਖੋ',
+'postcomment' => 'ਨਵਾà¨\82 à¨¸à©\88à¨\95ਸ਼ਨ',
+'articlepage' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'talk' => 'ਚਰਚਾ',
 'views' => 'ਵੇਖੋ',
 'toolbox' => 'ਸੰਦ ਬਕਸਾ',
-'userpage' => 'ਯà©\82à¨\9c਼ਰ à¨ªà©\87à¨\9c ਵੇਖੋ',
-'projectpage' => 'ਪਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨ªà©\87à¨\9c ਵੇਖੋ',
-'imagepage' => 'ਫਾà¨\87ਲ à¨ªà©\87à¨\9c ਵੇਖੋ',
+'userpage' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'projectpage' => 'ਪà©\8dਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'imagepage' => 'ਫ਼ਾà¨\88ਲ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'mediawikipage' => 'ਸੁਨੇਹਾ ਪੇਜ ਵੇਖੋ',
-'templatepage' => 'à¨\9fà©\88ਪਲà©\87à¨\9f à¨ªà©\87à¨\9c ਵੇਖੋ',
-'viewhelppage' => 'ਮੱਦਦ à¨ªà©\87à¨\9c ਵੇਖੋ',
-'categorypage' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 à¨ªà©\87à¨\9c ਵੇਖੋ',
+'templatepage' => 'ਫਰਮਾ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'viewhelppage' => 'ਮਦਦ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'categorypage' => 'à¨\95à©\88à¨\9fà©\88à¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'viewtalkpage' => 'ਚਰਚਾ ਵੇਖੋ',
 'otherlanguages' => 'ਹੋਰ ਜ਼ਬਾਨਾਂ ਵਿਚ',
 'redirectedfrom' => '($1 ਤੋਂ ਰੀ-ਡਿਰੈਕਟ)',
-'redirectpagesub' => 'ਰੀ-ਡਿਰੈਕਟ ਪੇਜ',
+'redirectpagesub' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
 'lastmodifiedat' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ ਸੋਧਿਆ ਗਿਆ ਸੀ।',
-'viewcount' => 'à¨\87ਹ à¨ªà©\87à¨\9c à¨\85ਸà©\88ੱਸ à¨\95à©\80ਤਾ à¨\97ਿà¨\86 {{PLURAL:$1|à¨\87ੱà¨\95ਵਾਰ|$1 à¨µà¨¾à¨°}}.',
+'viewcount' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ {{PLURAL:$1|à¨\87ੱà¨\95 à¨µà¨¾à¨°|$1 à¨µà¨¾à¨°}} à¨µà©\87à¨\96ਿà¨\86 à¨\97ਿà¨\86।',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਇਸ ’ਤੇ ਜਾਓ:',
 'jumptonavigation' => 'ਰਹਿਨੁਮਾਈ',
@@ -293,7 +315,7 @@ information.])',
 $1',
 'pool-timeout' => 'ਲੌਕ ਲਈ ਉਡੀਕ ਦਾ ਵਕਤ ਖ਼ਤਮ ਹੋ ਗਿਆ ਹੈ',
 'pool-queuefull' => 'ਪੂਲ ਕਤਾਰ ਪੂਰੀ ਲੱਦੀ ਹੈ',
-'pool-errorunknown' => 'ਅਣਜਾਣ ਗਲਤੀ',
+'pool-errorunknown' => 'à¨\85ਣà¨\9cਾਣ à¨\97਼ਲਤà©\80',
 
 # 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}} ਬਾਰੇ',
@@ -328,15 +350,15 @@ $1',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
 'newmessagesdifflink' => 'ਆਖ਼ਰੀ ਤਬਦੀਲੀ',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|à¨\87à¨\95  à¨®à©\88à¨\82ਬਰ|$3 à¨®à©\88à¨\82ਬਰਾà¨\82}} à¨µà©±à¨²à©\8bà¨\82 à¨¤à©\81ਹਾਨà©\82à©° $1 ($2)',
-'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨®à©\88à¨\82ਬਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
-'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}}',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|à¨\87ੱà¨\95 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ|$3 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82}} à¨µà©±à¨²à©\8bà¨\82 à¨¤à©\81ਹਾਨà©\82à©° $1 ($2)।',
+'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
+'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
 'newmessagesdifflinkplural' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}',
-'youhavenewmessagesmulti' => 'ਤੁਹਾਨੂੰ ਨਵੇਂ ਸੁਨੇਹੇ $1 ਉੱਤੇ ਹਨ',
+'youhavenewmessagesmulti' => '$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ',
 'editsection' => 'ਸੋਧ',
 'editold' => 'ਸੋਧੋ',
 'viewsourceold' => 'ਸਰੋਤ ਵੇਖੋ',
-'editlink' => 'ਸੋਧ',
+'editlink' => 'ਸੋਧ',
 'viewsourcelink' => 'ਸਰੋਤ ਵੇਖੋ',
 'editsectionhint' => 'ਸ਼ੈਕਸ਼ਨ ਸੋਧ: $1',
 'toc' => 'ਲਿਸਟ',
@@ -344,11 +366,11 @@ $1',
 'hidetoc' => 'ਓਹਲੇ',
 'collapsible-collapse' => 'ਸਮੇਟੋ',
 'collapsible-expand' => 'ਫੈਲਾਓ',
-'thisisdeleted' => 'ਵੇਖੋ ਜਾਂ $1 ਰੀਸਟੋਰ?',
-'viewdeleted' => '$1 à¨µà©\87à¨\96ਣਾ?',
+'thisisdeleted' => '$1 ਵੇਖੋ ਜਾਂ ਮੁੜ ਬਹਾਲ ਕਰੋ',
+'viewdeleted' => '$1 à¨µà©\87à¨\96ਣà©\80à¨\86à¨\82 à¨¹à¨¨?',
 'restorelink' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਹੋਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਹੋਈਆਂ ਸੋਧਾਂ}}',
 'feedlinks' => 'ਫੀਡ:',
-'feed-invalid' => 'ਸਬਸà¨\95à©\8dਰਿਪਸ਼ਨ à¨«à¨¼à©\80ਡ à¨¦à©\80 à¨\85ਵà©\88ਧ ਕਿਸਮ',
+'feed-invalid' => 'ਸਬਸà¨\95à©\8dਰਿਪਸ਼ਨ à¨«à¨¼à©\80ਡ à¨¦à©\80 à¨\97਼ਲਤ ਕਿਸਮ',
 'feed-unavailable' => 'ਸੰਸਥਾਵਾਂ  ਸਮੱਗਰੀ ਦਾ ਆਧੁਨਕੀਕਰਣ ਉਪਲਬਧ ਨਹੀਂ',
 'site-rss-feed' => '$1 RSS ਫੀਡ',
 'site-atom-feed' => '$1 ਐਟਮ ਫੀਡ',
@@ -360,29 +382,28 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ਲੇਖ',
-'nstab-user' => 'ਮà©\88à¨\82ਬਰ ਸਫ਼ਾ',
-'nstab-media' => 'ਮà©\80ਡਿà¨\86 à¨ªà©\87à¨\9c',
+'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਸਫ਼ਾ',
+'nstab-media' => 'ਮà©\80ਡà©\80à¨\86 à¨¸à¨«à¨¼à¨¾',
 'nstab-special' => 'ਖ਼ਾਸ ਸਫ਼ਾ',
 'nstab-project' => 'ਪ੍ਰੋਜੈਕਟ ਸਫ਼ਾ',
 'nstab-image' => 'ਫ਼ਾਈਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
-'nstab-template' => 'ਸਾà¨\82à¨\9aਾ',
+'nstab-template' => 'ਫਰਮਾ',
 'nstab-help' => 'ਮੱਦਦ ਪੇਜ',
-'nstab-category' => 'à¨\95à©\88à¨\9fਾਗਰੀ',
+'nstab-category' => 'à¨\95à©\88à¨\9fà©\87ਗਰੀ',
 
 # Main script and global functions
-'nosuchaction' => 'à¨\95à©\8bà¨\88 à¨\87à©°à¨\9d à¨¦à¨¾ à¨\90à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82',
+'nosuchaction' => 'à¨\90ਸਾ à¨\95à©\8bà¨\88 à¨\90à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88',
 'nosuchactiontext' => 'URL ਦੁਆਰਾ ਦੱਸਿਆ ਕੰਮ ਗ਼ਲਤ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਸੀਂ URL ਸਹੀ ਨਹੀਂ ਲਿਖਿਆ ਜਾਂ ਕਿਸੇ ਗ਼ਲਤ ਲਿੰਕ ਤੇ ਆਏ ਹੋ।
 ਇਹ ਵੀ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ {{SITENAME}} ਦੁਆਰੇ ਵਰਤੇ ਜਾਂਦੇ ਸਾਫ਼ਟਵੇਅਰ ਵਿਚਲੀ ਗ਼ਲਤੀ ਵੱਲ ਇਸ਼ਾਰਾ ਹੋਵੇ।',
-'nosuchspecialpage' => 'ਕੋਈ ਇੰਝ ਦਾ ਖਾਸ ਪੇਜ ਨਹੀਂ',
-'nospecialpagetext' => '<strong>ਤੁਸੀਂ ਇੱਕ ਅਵੈਧ ਖਾਸ ਪੇਜ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ।</strong>
-
-A list of valid special pages can be found at [[Special:SpecialPages]].',
+'nosuchspecialpage' => 'ਐਸਾ ਕੋਈ ਖ਼ਾਸ ਸਫ਼ਾ ਨਹੀਂ ਹੈ',
+'nospecialpagetext' => '<strong>ਤੁਸੀਂ ਇੱਕ ਗ਼ਲਤ ਖ਼ਾਸ ਸਫ਼ੇ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਹੈ।</strong>
+ਸਹੀ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ [[Special:SpecialPages|{{int:specialpages}}]] ’ਤੇ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।',
 
 # General errors
-'error' => 'ਗਲਤੀ',
-'databaseerror' => 'ਡਾà¨\9fਾਬà©\87ਸ à¨\97ਲਤੀ',
+'error' => 'à¨\97਼ਲਤà©\80',
+'databaseerror' => 'ਡà©\88à¨\9fਾਬà©\87ਸ à¨\97਼ਲਤੀ',
 'dberrortext' => 'ਡੈਟਾਬੇਸ ਪੁ੍ਛ ਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤਾਂ ਦੀ ਤਰੁੱਟੀ ਮਿਲੀ ਹੈ।
 ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁ੍ੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
 ਇਸ ਗਣਿਤਫ਼ਲ "<tt>$2</tt>" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: <blockquote><tt>$1</tt></blockquote.
@@ -402,8 +423,8 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'missingarticle-rev' => '(ਬਦਲਾਅ#: $1)',
 'missingarticle-diff' => '(ਫ਼ਰਕ: $1, $2)',
 'readonly_lag' => 'ਜਦੌਂ ਤਕ ਅਧੀਨ ਡੇਟਾਬੇਸ ਸਰਵਰ ਸੁਤੰਤਰ ਡੈਟਾਬੇਸ ਸਰਵਰ ਦੀ ਪਕੜ ਵਿਚ ਨਹੀਂ ਆ ਜਾਂਦੇ ਡੈਟਾਬੇਸ ਸਵੈ ਜਕੜਿਆ ਗਿਆ ਹੈ।',
-'internalerror' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ',
-'internalerror_info' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ: $1',
+'internalerror' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\97਼ਲਤà©\80',
+'internalerror_info' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\97਼ਲਤà©\80: $1',
 'fileappenderrorread' => 'ਅੰਤਕਾ ਜੋੜਨ ਲਗਿਆਂ "$1"ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।',
 'fileappenderror' => "''$1'' ''$2'' ਨਾਲ਼ ਜੋੜਿਆ ਨਹੀ ਜਾ ਸਕਦਾ",
 'filecopyerror' => "'''$1''' ਫ਼ਾਈਲ '''$2''' ਵਿਚ ਨਕਲ ਨਹੀਂ ਹੋ ਸਕੀ।",
@@ -412,8 +433,8 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'directorycreateerror' => "''$1'' ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।",
 'filenotfound' => "ਫ਼ਾਈਲ ''$1'' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ।",
 'fileexistserror' => 'ਮਿਸਲ "$1" ਤੇ ਲਿਖ ਨਹੀਂ ਸਕਦੇ: ਮਿਸਲ ਹੌਂਦ ਵਿਚ ਹੈ।',
-'unexpected' => 'ਨਾ-ਸੰਭਾਵਿਤ à¨\97ਣਿਤਫ਼ਲ',
-'formerror' => 'ਦà©\8bਸ਼:ਫ਼ਾਰਮ ਪੇਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
+'unexpected' => 'à¨\85ਣà¨\89ਮà©\80ਦਿà¨\86 à¨®à©\81ੱਲ: "$1"="$2"।',
+'formerror' => 'à¨\97਼ਲਤà©\80ਫ਼ਾਰਮ ਪੇਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
 'badarticleerror' => 'ਇਹ ਕਾਰਵਾਈ ਇਸ ਸਫ਼ੇ ਤੇ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।',
 'cannotdelete' => "ਫ਼ਾਈਲ ਜਾਂ ਸਫ਼ਾ ''$1'' ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।
 ਸ਼ਾਇਦ ਕੋਈ ਪਹਿਲਾਂ ਹੀ ਇਸਨੂੰ ਮਿਟਾ ਚੁੱਕਾ ਹੈ।",
@@ -423,20 +444,21 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'badtitle' => 'ਗ਼ਲਤ ਸਿਰਲੇਖ',
 'badtitletext' => 'ਤੁਹਾਡਾ ਦਰਖ਼ਾਸਤਸ਼ੁਦਾ ਸਿਰਲੇਖ ਨਾਕਾਬਿਲ, ਖ਼ਾਲੀ ਜਾਂ ਗ਼ਲਤ ਜੁੜਿਆ ਹੋਇਆ inter-languagd ਜਾਂ inter-wiki ਸਿਰਲੇਖ ਹੈ। ਇਹ ਵੀ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਸ ਵਿਚ ਇਕ-ਦੋ ਅੱਖਰ ਐਸੇ ਹੋਣ ਜੋ ਸਿਰਲੇਖ ਵਿਚ ਵਰਤੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
 'viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
-'protectedpagetext' => 'ਇਸ ਪੰਨੇ ਨੂੰ ਐਡਿਟ ਕਰਨ ਦੀ ਮਨਾਹੀ ਹੈ।',
-'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਦਾ ਸੋਮਾ ਦੇਖ ਸਕਦੇ ਹੋ ਤੇ ਉਸ ਦਾ ਉਤਾਰਾ ਵੀ ਲੈ ਸਕਦੇ ਹੋ।',
-'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਬਾਰੇ " ਆਪਣੇ ਸੰਪਾਦਨਾਂ " ਨੂੰ ਦੇਖ ਸਕਦੇ ਹੋ ਤੇ ਉਨ੍ਹਾਂ ਦਾ ਉਤਾਰਾ ਵਿ ਲੈ ਸਕਦੇ ਹੋ।',
+'viewsource-title' => '$1 ਲਈ ਸਰੋਤ ਵੇਖੋ',
+'protectedpagetext' => 'ਇਹ ਸਫ਼ਾ ਫੇਰ-ਬਦਲ ਕਰਨ ਖ਼ਿਲਾਫ਼ ਸੁਰੱਖਿਅਤ ਹੈ।',
+'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
+'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਕੀਤੀਆਂ "ਆਪਣੀਆਂ ਸੋਧਾਂ" ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'protectedinterface' => 'ਇਹ ਪੰਨਾ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦਾ ਮੂਲ ਪਾਠ ਹੈ ,ਅਤੇ ਦੁਰਵਰਤੌਂ ਤੌਂ ਬਚਾਅ ਲਈ ਰਾਖਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।',
 'editinginterface' => "'''ਚਿਤਾਵਨੀ''' ਤੁਸੀਂ ਐਸੇ ਪੰਨੇ ਨੂੰ ਬਦਲ ਰਹੇ ਹੋ ਜੋ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦੇ ਮੂਲ ਪਾਠ ਲਈ ਵਰਤਿਆ ਗਿਆ ਹੈ।
 ਇਸ ਪੰਨੇ ਦੇ ਬਦਲਾਅ ਦੁਸਰੇ ਵਰਤੋਂ ਕਰਣ ਵਾਲਿਆਂ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਇੰਟਰਫਲੇਸ ਦੀ ਸ਼ਕਲ ਤੇ ਅਸਰ ਪਾ ਦੇਣਗੇ।ਅਨੁਵਾਦ ਕਰਣ ਲਈ ,ਕਿਰਪਾ ਕਰਕੇ [//translatewiki.net/wiki/Main_Page?setlang=pa ਟ੍ਰਾਂਸਲੇਟਵਿਕੀ.ਨੈਟ] ਦੀ ਵਰਤੌਂ ਕਰੋ,ਇਹ ਮੀਡੀਆਵਿਕੀ ਦੀ ਸਥਾਨਕੀਕਰਣ ਯੋਜਨਾ ਹੈ।",
-'namespaceprotected' => "ਤà©\81ਹਾਨà©\82à©° '''$1''' à¨¥à¨¾à¨\82-ਨਾਮ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨µà¨¿à¨\9a à¨¸à©\8bਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+'namespaceprotected' => "ਤà©\81ਹਾਨà©\82à©° '''$1''' à¨¥à¨¾à¨\82-ਨਾਮ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨µà¨¿à¨\9a à¨«à©\87ਰ-ਬਦਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
 'customcssprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
 'customjsprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
-'ns-specialprotected' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à©\87 à¨¸à©\8bਧà©\87 à¨¨à¨¹à©\80à¨\82 à¨\9cਾ ਸਕਦੇ।',
+'ns-specialprotected' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 â\80\99à¨\9a à¨«à©\87ਰ-ਬਦਲ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b ਸਕਦੇ।',
 'titleprotected' => 'ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, "\'\'$2\'\'"।',
 'invalidtitle-knownnamespace' => 'ਥਾਂ-ਨਾਮ "$2" ਅਤੇ ਲਿਖਤ "$3" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ',
 'exception-nologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ',
-'exception-nologin-text' => 'ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ਤੇ ਲਾਗਇਨ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।',
+'exception-nologin-text' => 'ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ’ਤੇ ਲਾਗਇਨ ਕੀਤਾ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।',
 
 # Virus scanner
 'virus-unknownscanner' => 'ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:',
@@ -458,7 +480,7 @@ Note that some pages may continue to be displayed as if you were still logged in
 'login' => 'ਲਾਗ ਇਨ',
 'nav-login-createaccount' => 'ਲਾਗ ਇਨ/ਖਾਤਾ ਬਣਾਓ',
 'loginprompt' => 'ਤੁਹਾਨੂੰ {{SITENAME}} ’ਤੇ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਯੋਗ ਕਰਨੇ ਜ਼ਰੂਰੀ ਹਨ।',
-'userlogin' => 'ਲਾà¨\97 à¨\87ਨ/à¨\96ਾਤਾ à¨\96à©\8bਲà©\8dਹà©\8b',
+'userlogin' => 'ਲਾà¨\97 à¨\87ਨ/à¨\96ਾਤਾ à¨¬à¨£à¨¾à¨\93',
 'userloginnocreate' => 'ਲਾਗ ਇਨ',
 'logout' => 'ਲਾਗ ਆਉਟ',
 'userlogout' => 'ਲਾਗ ਆਉਟ',
@@ -466,20 +488,20 @@ Note that some pages may continue to be displayed as if you were still logged in
 'nologin' => 'ਖਾਤਾ ਨਹੀਂ ਹੈ? $1।',
 'nologinlink' => 'ਖਾਤਾ ਬਣਾਓ',
 'createaccount' => 'ਖਾਤਾ ਬਣਾਓ',
-'gotaccount' => "ਖਾਤਾ ਹੈ? '''$1'''।",
+'gotaccount' => 'ਖਾਤਾ ਪਹਿਲਾਂ ਹੀ ਹੈ? $1',
 'gotaccountlink' => 'ਲਾਗ ਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
-'createaccountmail' => 'ਈਮੇਲ ਨਾਲ',
+'createaccountmail' => 'ਈ-ਮੇਲ ਜ਼ਰੀਏ',
 'createaccountreason' => 'ਕਾਰਨ:',
 'badretype' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।',
 'userexists' => 'ਇਹ ਮੈਂਬਰ-ਨਾਮ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ’ਚ ਹੈ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਵੱਖਰਾ ਮੈਂਬਰ-ਨਾਮ ਵਰਤੋਂ।',
-'loginerror' => 'ਲਾਗਇਨ ਗਲਤੀ',
-'createaccounterror' => 'à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
+'loginerror' => 'ਲਾà¨\97à¨\87ਨ à¨\97਼ਲਤà©\80',
+'createaccounterror' => 'à¨\96ਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
 'nocookiesnew' => 'ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.',
 'nocookieslogin' => '{{SITENAME}} ਯੂਜ਼ਰਾਂ ਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਵਰਤਦੀ ਹੈ। ਤੁਹਾਡੇ ਕੂਕੀਜ਼ ਆਯੋਗ ਕੀਤੇ ਹੋਏ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਯੋਗ ਕਰਕੇ ਮੁੜ ਟਰਾਈ ਕਰੋ।',
-'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨µà©\88ਧ à¨¯à©\82à¨\9c਼ਰ ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
-'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨¸à¨«à¨¼à¨² à¨°à¨¿à¨¹à¨¾',
+'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
+'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨\95ਾਮਯਾਬ',
 'loginsuccess' => "'''ਤੁਸੀਂ {{SITENAME}} ਉੱਤੇ \"\$1\" ਵਾਂਗ ਲਾਗਇਨ ਕਰ ਚੁੱਕੇ ਹੋ।'''",
 'nosuchuser' => '!"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਜੋੜ ਧਿਆਨ ਨਾਲ ਚੈਕ ਕਰੋ ਉਪਰ ਹੇਠਾਂ ਦਾ ਕੇਸ ਵਰਤਣ ਨਾਲ ਫ਼ਰਕ ਪੈਂਦਾ ਹੈ ਜਾਂ [[Special:UserLogin/signup|ਨਵਾਂ ਖਾਤਾ ਬਣਾਓ]]',
 'nosuchusershort' => '"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਵੀ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਧਿਆਨ ਨਾਲ ਚੈੱਕ ਕਰੋ।',
@@ -508,16 +530,18 @@ Note that some pages may continue to be displayed as if you were still logged in
 'throttled-mailpassword' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਇੱਕ ਘੰਟੇ|$1 ਘੰਟਿਆਂ}} ਵਿਚ ਇੱਕ ਪਾਸਵਰਡ ਯਾਦ-ਦਹਾਨੀ ਪਹਿਲਾਂ ਹੀ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।
 ਗ਼ਲਤ ਵਰਤੋਂ ਤੋਂ ਬਚਣ ਲਈ, {{PLURAL:$1|ਇੱਕ ਘੰਟੇ|$1 ਘੰਟਿਆਂ}} ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਹੀ ਪਾਸਵਰਡ ਯਾਦ-ਦਹਾਨੀ ਭੇਜੀ ਜਾਂਦੀ ਹੈ।',
 'mailerror' => 'ਈਮੇਲ ਭੇਜਣ ਦੌਰਾਨ ਗਲਤੀ: $1',
-'acct_creation_throttle_hit' => 'ਅਫਸੋਸ ਹੈ, ਪਰ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ $1 ਅਕਾਊਂਟ ਬਣਾ ਚੁੱਕੇ ਹੋ। ਤੁਸੀਂ ਹੋਰ ਨਹੀਂ ਬਣਾ ਸਕਦੇ।',
-'emailauthenticated' => 'ਤੁਹਾਡਾ ਈਮੇਲ ਐਡਰੈੱਸ $1 ਉੱਤੇ ਪਰਮਾਣਿਤ ਕੀਤਾ ਗਿਆ ਹੈ।',
+'acct_creation_throttle_hit' => 'ਤੁਹਾਡਾ IP ਪਤਾ ਵਰਤ ਕੇ ਆਉਣ ਵਾਲ਼ਿਆਂ ਨੇ ਆਖ਼ਰੀ ਦਿਨਾਂ ਵਿਚ ਇਸ ਵਿਕੀ ’ਤੇ {{PLURAL:$1|੧ ਖਾਤਾ ਬਣਾਇਆ ਹੈ|$1 ਖਾਤੇ ਬਣਾਏ ਹਨ}} ਜੋ ਕਿ, ਹਾਲ ਦੀ ਘੜੀ, ਖਾਤੇ ਬਣਾਉਣ ਦੀ ਆਖ਼ਰੀ ਹੱਦ ਹੈ।
+ਨਤੀਜੇ ਵਜੋਂ ਇਸ IP ਪਤੇ ਨੂੰ ਵਰਤਣ ਵਾਲ਼ੇ ਫ਼ਿਲਹਾਲ ਹੋਰ ਖਾਤੇ ਨਹੀਂ ਬਣਾ ਸਕਦੇ।',
+'emailauthenticated' => 'ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ $2 ਨੂੰ $1 ’ਤੇ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ।',
 'emailnotauthenticated' => 'ਤੁਹਾਡਾ ਈਮੇਲ ਐਡਰੈੱਸ ਹਾਲੇ ਪਰਮਾਣਿਤ ਨਹੀਂ ਹੈ। ਹੇਠ ਦਿੱਤੇ ਫੀਚਰਾਂ ਲਈ ਕੋਈ ਵੀ ਈਮੇਲ ਨਹੀਂ ਭੇਜੀ ਜਾਵੇਗੀ।',
-'noemailprefs' => 'ਇਹ ਫੀਚਰ ਵਰਤਣ ਲਈ ਇੱਕ ਈਮੇਲ ਐਡਰੈੱਸ ਦਿਓ।।',
-'emailconfirmlink' => 'ਆਪਣਾ ਈ-ਮੇਲ ਐਡਰੈੱਸ ਕਨਫਰਮ ਕਰੋ।',
-'invalidemailaddress' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਠੀਕ ਫਾਰਮੈਟ ਨਹੀਂ ਜਾਪਦਾ ਹੈ। ਇੱਕ ਠੀਕ ਫਾਰਮੈਟ ਵਿੱਚ ਦਿਓ ਜਾਂ ਇਹ ਖੇਤਰ ਖਾਲੀ ਛੱਡ ਦਿਓ।',
+'noemailprefs' => 'ਇਹਨਾਂ ਸਹੂਲਤਾਂ ਦੀ ਵਰਤੋਂ ਲਈ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿਚ ਇਕ ਈ-ਮੇਲ ਪਤਾ ਦਿਓ।',
+'emailconfirmlink' => 'ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰੋ',
+'invalidemailaddress' => 'ਈ-ਮੇਲ ਪਤਾ ਕਬੂਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਸਹੀ ਅੰਦਾਜ਼ ਵਿਚ ਲਿਖਿਆ ਨਹੀਂ ਜਾਪਦਾ ਹੈ।
+ਸਹੀ ਅੰਦਾਜ਼ ਵਿਚ ਦਿਓ ਜਾਂ ਇਹ ਖ਼ਾਨਾ ਖ਼ਾਲੀ ਛੱਡ ਦਿਓ।',
 'cannotchangeemail' => 'ਇਸ ਵਿਕੀ ਤੇ ਈ-ਮੇਲ ਪਤੇ ਬਦਲੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
 'emaildisabled' => 'ਇਹ ਸਾਈਟ ਈ-ਮੇਲਾਂ ਨਹੀਂ ਭੇਜ ਸਕਦੀ।',
-'accountcreated' => 'à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ',
-'accountcreatedtext' => '$1 à¨²à¨\88 à¨¯à©\82à¨\9c਼ਰ à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ ਗਿਆ।',
+'accountcreated' => 'à¨\96ਾਤਾ ਬਣਾਇਆ',
+'accountcreatedtext' => '$1 à¨²à¨\88 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\96ਾਤਾ ਬਣਾਇਆ ਗਿਆ।',
 'createaccount-title' => '{{SITENAME}} ਲਈ ਅਕਾਊਂਟ ਬਣਾਉਣਾ',
 'createaccount-text' => 'ਕਿਸੇ ਨੇ "$2" ਮੈਂਬਰ-ਨਾਮ ਅਤੇ "$3" ਪਾਸਵਰਡ ਨਾਲ਼ {{SITENAME}} ($4) ਤੇ, ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਵਰਤਦੇ ਹੋਏ, ਖਾਤਾ ਬਣਾਇਆ ਹੈ।
 ਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲਣਾ ਚਾਹੀਦਾ ਹੈ।
@@ -614,10 +638,10 @@ $2
 'anonpreviewwarning' => "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
 'missingsummary' => "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
 'missingcommenttext' => 'ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।',
-'summary-preview' => 'ਸੰà¨\96à©\87ਪ ਝਲਕ:',
+'summary-preview' => 'ਸà©\8bਧ à¨¸à¨¾à¨° à¨¦à©\80 ਝਲਕ:',
 'subject-preview' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ ਝਲਕ:',
 'blockedtitle' => 'ਯੂਜ਼ਰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ',
-'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨®à©\88à¨\82ਬਰ-ਨਾà¨\82 à¨\9cਾà¨\82 IP à¨ªà¨¤à©\87 à¨\89ੱਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
+'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¨à¨¾à¨\82 à¨\9cਾà¨\82 IP à¨ªà¨¤à©\87 â\80\99ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
 
 ਪਾਬੰਦੀ $1 ਨੇ ਲਾਈ ਹੈ।
 ਦਿੱਤਾ ਗਿਆ ਕਾਰਨ ਇਹ ਹੈ, ''$2''।
@@ -629,7 +653,7 @@ $2
 ਪਾਬੰਦੀ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ ਤੁਸੀਂ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ
 [[{{MediaWiki:Grouppage-
 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 à¨\85ਤà©\87 ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।
+ਤà©\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 ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।
 ਤੁਹਾਡਾ ਚਾਲੂ IP ਪਤਾ $3 ਹੈ,
 ਅਤੇ ਪਾਬੰਦੀ ਪਤਾ #$5 ਹੈ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਕਿਸੇ ਵੀ ਸਵਾਲ ਜਾਂ ਪੁੱਛ-ਗਿੱਛ ਵਿਚ ਇਹ ਉੱਪਰਲੀ ਤਫ਼ਸੀਲ ਜ਼ਰੂਰ ਸ਼ਾਮਲ ਕਰੋ।",
@@ -637,18 +661,19 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'whitelistedittext' => 'ਪੇਜ ਸੋਧਣ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।',
 'confirmedittext' => 'ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰਨਾ ਪਵੇਗਾ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੀਆਂ [[Special:Preferences|ਖਾਤਾ ਪਸੰਦਾ]] ਜ਼ਰੀਏ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦਿਓ ਅਤੇ ਤਸਦੀਕ ਕਰੋ।',
-'nosuchsectiontitle' => 'à¨\87à©°à¨\9d à¨¦à¨¾ à¨\95à©\8bà¨\88 à¨¸à¨¼à©\88à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88।',
+'nosuchsectiontitle' => 'ਸà©\88à¨\95ਸ਼ਨ à¨²à©±à¨­à¨¿à¨\86 à¨¨à¨¹à©\80à¨\82 à¨\9cਾ à¨¸à¨\95ਦਾ',
 'nosuchsectiontext' => 'ਤੁਸੀਂ ਨਾ-ਮੌਜੂਦ ਸੈਕਸ਼ਨ ਨੂੰ ਸੋਧਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਸਫ਼ੇ ਨੂੰ ਵੇਖਣ ਦੇ ਦੌਰਾਨ ਇਹ ਮਿਟਾਇਆ ਜਾਂ ਇਸਦਾ ਸਿਰਲੇਖ ਬਦਲਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
 'loginreqtitle' => 'ਲਾਗਇਨ ਚਾਹੀਦਾ ਹੈ',
 'loginreqlink' => 'ਲਾਗਇਨ',
 'loginreqpagetext' => 'ਹੋਰ ਪੇਜ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।',
 'accmailtitle' => 'ਪਾਸਵਰਡ ਭੇਜਿਆ।',
-'accmailtext' => '"$1" ਲਈ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਗਿਆ।',
+'accmailtext' => "[[User talk:$1|$1]] ਲਈ ਰਲ਼ਵੇਂ ਤੌਰ ’ਤੇ ਬਣਿਆ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।
+ਇਸ ਨਵੇਂ ਖਾਤੇ ਲਈ ਲਾਗਇਨ ਕਰਨ ਤੋਂ ਬਾਅਦ ''[[Special:ChangePassword|ਪਾਸਵਰਡ ਬਦਲੋ]]'' ’ਤੇ ਜਾ ਕੇ ਪਾਸਵਰਡ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
 'newarticle' => '(ਨਵਾਂ)',
-'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨²à¨¿à©°à¨\95 à¨°à¨¾à¨¹à©\80à¨\82 à¨\87ਸ à¨¸à¨«à¨¼à©\87 â\80\99ਤà©\87 à¨ªà©\81ੱà¨\9cੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
-ਸਫ਼ਾ ਬਣਾਉਣ ਲਈ ਹੇਠ ਦਿੱਤੇ ਖ਼ਾਨੇ ਵਿਚ ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ। (ਹੋਰ ਮਦਦ ਲਈ [[{{MediaWiki:Helppage}}|ਮਦਦ ਸਫ਼ਾ]] ਵੇਖੋ)
-à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97਼ਲਤà©\80 à¨¨à¨¾à¨²à¨¼ à¨\87ੱਥà©\87 à¨\86à¨\8f à¨¹à©\8b à¨¤à¨¾à¨\82 à¨\86ਪਣà©\87 à¨¬à¨°à¨¾à¨\8aà¨\9c਼ਰ à¨¦à©\87 ''ਪਿੱà¨\9bà©\87'' (back) ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
+'newarticletext' => "ਤà©\81ਸà©\80à¨\82 à¨\95ਿਸà©\87 à¨\90ਸà©\87 à¨¸à¨«à¨¼à©\87 à¨¦à©\87 à¨²à¨¿à©°à¨\95 â\80\99ਤੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
+ਸਫ਼ਾ ਬਣਾਉਣ ਲਈ ਹੇਠ ਦਿੱਤੇ ਖ਼ਾਨੇ ਵਿਚ ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ। (ਹੋਰ ਮਦਦ ਲਈ [[{{MediaWiki:Helppage}}|ਮਦਦ ਸਫ਼ਾ]] ਵੇਖੋ)
+à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\97਼ਲਤà©\80 à¨¨à¨¾à¨²à¨¼ à¨\87ੱਥà©\87 à¨\86à¨\8f à¨¹à©\8b à¨¤à¨¾à¨\82 à¨\86ਪਣà©\87 à¨¬à©\8dਰਾà¨\8aà¨\9c਼ਰ à¨¦à©\87 '''ਪਿੱà¨\9bà©\87''' ਬਟਨ ’ਤੇ ਕਲਿੱਕ ਕਰੋ।",
 'anontalkpagetext' => "----''ਇਹ ਇਕ ਗੁਮਨਾਮ ਮੈਂਬਰ ਲਈ ਇਕ ਚਰਚਾ ਸਫ਼ਾ ਹੈ ਜਿਸਨੇ ਹਾਲੇ ਖਾਤਾ ਨਹੀ ਬਣਾਇਆ ਜਾਂ ਉਸਨੂੰ ਵਰਤ ਨਹੀਂ ਰਿਹਾ।
 ਇਸ ਵਾਸਤੇ ਸਾਡੇ ਕੋਲ ਉਸਨੂੰ ਪਛਾਨਣ ਲਈ IP ਪਤਾ ਹੈ।
 ਇਕ IP ਪਤਾ ਕਈ ਵਰਤਣ ਵਾਲ਼ਿਆਂ ਦੁਆਰਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
@@ -672,13 +697,13 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 '''ਇਹ ਹਾਲੇ ਸਾਂਭੀ ਨਹੀਂ ਗਈ ਹੈ!'''",
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => 'ਯਾਦ ਰੱਖੋ ਇਹ ਸਿਰਫ਼ ਇੱਕ ਝਲਕ ਹੈ; ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!',
+'previewnote' => "'''ਯਾਦ ਰੱਖੋ ਇਹ ਸਿਰਫ਼ ਇਕ ਝਲਕ ਹੈ।''' ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸਾਂਭੀਆਂ ਨਹੀਂ ਗਈਆਂ!",
 'continue-editing' => 'ਸੋਧਣਾ ਜਾਰੀ ਰੱਖੋ',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
 'editing' => '$1 ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ',
 'creating' => '$1 ਬਣਾ ਰਹੇ ਹੋ',
 'editingsection' => '$1 ਜ਼ੇਰੇ ਸੁਧਾਈ ਹੈ (ਸ਼ੈਕਸ਼ਨ)',
-'editingcomment' => '$1 (ਟਿੱਪਣੀ) ਸੋਧ',
+'editingcomment' => '$1 ਸੋਧ ਰਹੇ ਹੋ (ਨਵਾਂ ਸੈਕਸ਼ਨ)',
 'editconflict' => 'ਅਪਵਾਦ ਟਿੱਪਣੀ: $1',
 'yourtext' => 'ਤੁਹਾਡਾ ਟੈਕਸਟ',
 'storedversion' => 'ਸੰਭਾਲਿਆ ਵਰਜਨ',
@@ -700,7 +725,7 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'templatesusedsection' => 'ਇਹ ਸ਼ੈਕਸ਼ਨ ਵਿੱਚ ਟੈਪਲੇਟ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
 'template-protected' => '(ਸੁਰੱਖਿਅਤ)',
 'template-semiprotected' => '(ਨੀਮ-ਸੁਰੱਖਿਅਤ)',
-'hiddencategories' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|1 ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
+'hiddencategories' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1| ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|
 $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
 'nocreatetitle' => 'ਸਫ਼ਾ ਬਣਾਉਣ ਦੀ ਹੱਦ ਹੈ',
 'nocreatetext' => '{{SITENAME}} ਨੇ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਤੇ ਰੋਕ ਲਾਈ ਹੋਈ ਹੈ।
@@ -764,14 +789,14 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 '''({{int:cur}})''' = ਨਵੇਂ ਰੀਵਿਜ਼ਨ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:last}})''' = ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਸੋਧ।",
 'history-fieldset-title' => 'ਅਤੀਤ ’ਤੇ ਨਜ਼ਰ ਮਾਰੋ',
 'history-show-deleted' => 'ਸਿਰਫ਼ ਮਿਟਾਏ ਗਏ',
-'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾ',
+'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
 'historysize' => '($1 ਬਾਈਟ)',
 'historyempty' => '(ਖਾਲੀ)',
 
 # Revision feed
 'history-feed-title' => 'ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
-'history-feed-description' => 'ਵਿਕੀ ਤੇ ਇਸ ਸਫ਼ੇ ਦਾ ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
+'history-feed-description' => 'ਵਿਕੀ ਤੇ ਇਸ ਸਫ਼ੇ ਦਾ ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
 'history-feed-item-nocomment' => '$1 ਤੋਂ $2 ’ਤੇ',
 'history-feed-empty' => 'ਦਰਖ਼ਾਸਤਸ਼ੁਦਾ ਸਫ਼ਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।
 ਸ਼ਾਇਦ ਇਸਨੂੰ ਵਿਕੀ ਤੋਂ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ ਜਾਂ ਨਾਮ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ।
@@ -841,7 +866,9 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergehistory-from' => 'ਸਰੋਤ ਸਫ਼ਾ:',
 'mergehistory-list' => 'ਰਲ਼ਾਉਣਯੋਗ ਸੋਧ ਅਤੀਤ',
 'mergehistory-go' => 'ਰਲ਼ਾਉਣਯੋਗ ਸੋਧਾਂ ਵਖਾਓ',
+'mergehistory-submit' => 'ਰੀਵਿਜ਼ਨਾਂ ਰਲ਼ਾਓ',
 'mergehistory-empty' => 'ਕੋਈ ਰੀਵਿਜ਼ਨ ਰਲ਼ਾਈ ਨਹੀ ਜਾ ਸਕਦੀ।',
+'mergehistory-success' => '[[:$1]] {{PLURAL:|ਦੀ|ਦੀਆਂ}} $3 {{PLURAL:$3|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਕਾਮਯਾਬੀ ਨਾਲ਼ [[:$2]] ਵਿਚ {{PLURAL:$3|ਰਲ਼ਾਈ|ਰਲ਼ਾਈਆਂ}}।',
 'mergehistory-no-source' => 'ਸਰੋਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'mergehistory-autocomment' => '[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ',
 'mergehistory-comment' => '[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ: $3',
@@ -855,7 +882,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergelogpagetext' => 'ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।',
 
 # Diffs
-'history-title' => '"$1" ਦੇ ਰੀਵਿਜ਼ਨ ਦਾ ਅਤੀਤ',
+'history-title' => '"$1" ਦੇ  ਸੁਧਾਰਾਂ ਦਾ ਅਤੀਤ',
 'difference-title' => '"$1" ਦੇ ਰੀਵਿਜ਼ਨਾਂ ਵਿਚ ਫ਼ਰਕ',
 'difference-title-multipage' => 'ਸਫ਼ਿਆਂ "$1" ਅਤੇ "$2" ਵਿਚ ਫ਼ਰਕ',
 'difference-multipage' => '(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)',
@@ -897,14 +924,14 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'searchprofile-everything-tooltip' => 'ਸਭ ਚੀਜ਼ਾਂ ਖੋਜੋ (ਗੱਲਬਾਤ ਸਫ਼ਿਆਂ ਸਮੇਤ)',
 'searchprofile-advanced-tooltip' => 'ਆਪਣੇ ਬਣਾਏ ਨਾਮ-ਥਾਂਵਾਂ ਵਿਚ ਖੋਜੋ',
 'search-result-size' => '$1 ({{PLURAL:$2|੧ ਸ਼ਬਦ|$2 ਸ਼ਬਦ}})',
+'search-result-category-size' => '{{PLURAL:$1|੧ ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|੧ ਉਪ-ਸ਼੍ਰੇਣੀ|$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-mwsuggest-enabled' => 'ਸੁਝਾਆਵਾਂ ਨਾਲ',
-'search-mwsuggest-disabled' => 'ਕੋਈ ਸੁਝਾਅ ਨਹੀਂ',
 'search-relatedarticle' => 'ਸਬੰਧਿਤ',
 'mwsuggest-disable' => 'AJAX ਸਲਾਹਾਂ ਬੰਦ ਕਰੋ',
 'searcheverything-enable' => 'ਸਾਰੇ ਥਾਂ-ਨਾਂਵਾਂ ਵਿਚ ਖੋਜੋ',
@@ -935,7 +962,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'mypreferences' => 'ਮੇਰੀਆਂ ਪਸੰਦਾਂ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
 'prefsnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
-'prefsnologintext' => 'ਯà©\82à¨\9c਼ਰ à¨ªà¨¸à©°à¨¦ à¨¸à©\88ੱà¨\9f à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਹਾਨà©\82à©° [[Special:UserLogin|logged in]] ਕਰਨਾ ਪਵੇਗਾ।',
+'prefsnologintext' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà¨¸à©°à¨¦à¨¾à¨\82 à¨¸à©\88ੱà¨\9f à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਹਾਨà©\82à©° <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} à¨²à¨¾à¨\97à¨\87ਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
 'changepassword' => 'ਪਾਸਵਰਡ ਬਦਲੋ',
 'prefs-skin' => 'ਸਕਿਨ',
 'skin-preview' => 'ਝਲਕ',
@@ -971,7 +998,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'timezonelegend' => 'ਸਮਾਂ ਖੇਤਰ:',
 'localtime' => 'ਲੋਕਲ ਸਮਾਂ:',
 'timezoneuseserverdefault' => 'ਸਰਵਰ ਡਿਫਾਲਟ ਵਰਤੋਂ',
-'servertime' => 'ਸਰਵਰ à¨\9fਾà¨\88ਮ',
+'servertime' => 'ਸਰਵਰ à¨¦à¨¾ à¨\9fਾà¨\88ਮ:',
 'guesstimezone' => 'ਬਰਾਊਜ਼ਰ ਤੋਂ ਭਰੋ',
 'timezoneregion-africa' => 'ਅਫ਼ਰੀਕਾ',
 'timezoneregion-america' => 'ਅਮਰੀਕਾ',
@@ -984,7 +1011,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'timezoneregion-indian' => 'ਹਿੰਦ ਮਹਾਂਸਾਗਰ',
 'timezoneregion-pacific' => 'ਪ੍ਰਸ਼ਾਂਤ ਮਹਾਂਸਾਗਰ',
 'allowemail' => 'ਹੋਰ ਯੂਜ਼ਰਾਂ ਤੋਂ ਈਮੇਲ ਯੋਗ ਕਰੋ',
-'prefs-searchoptions' => 'ਖੋਜ ਇਖ਼ਤਿਆਰ',
+'prefs-searchoptions' => 'à¨\96à©\8bà¨\9c à¨¦à©\87 à¨\87à¨\96਼ਤਿà¨\86ਰ',
 'prefs-namespaces' => 'ਥਾਂ-ਨਾਮ',
 'defaultns' => 'ਨਹੀਂ ਤਾਂ ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾਂ ਵਿਚ ਖੋਜੋ:',
 'default' => 'ਡਿਫਾਲਟ',
@@ -994,11 +1021,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'youremail' => 'ਈ-ਮੇਲ:',
 'username' => 'ਯੂਜ਼ਰ ਨਾਂ:',
 'uid' => 'ਯੂਜ਼ਰ ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
+'prefs-registration' => 'ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਵਕਤ:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
 'yourlanguage' => 'ਭਾਸ਼ਾ:',
 'yournick' => 'ਛੋਟਾ ਨਾਂ:',
 'prefs-help-signature' => 'ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ ਉੱਤੇ ਟਿੱਪਣੀਆਂ ਦੇ ਆਖ਼ਰ ਵਿਚ "<nowiki>~~~~</nowiki>" ਲਾਓ ਜੋ ਤੁਹਾਡੇ ਦਸਤਖ਼ਤ ਅਤੇ ਵਕਤ ਦੀ ਮੋਹਰ ਵਿਚ ਤਬਦੀਲ ਹੋ ਜਾਵੇਗਾ।',
-'badsiglength' => 'à¨\9bà©\8bà¨\9fਾ à¨¨à¨¾à¨\82 (Nickname) à¨¬à¨¹à©\81ਤ à¨²à©°à¨®à¨¾ à¨¹à©\8b à¨\97ਿà¨\86 à¨¹à©\88, à¨\87ਹ $1 à¨\85ੱà¨\96ਰਾà¨\82 à¨¤à©\8bà¨\82 à¨\98ੱà¨\9f à¨\9aਾਹà©\80ਦਾ à¨¹à©\88।',
+'badsiglength' => 'ਦਸਤà¨\96਼ਤ à¨¬à¨¹à©\81ਤ à¨²à©°à¨¬à¨¾ à¨¹à©\8b à¨\97ਿà¨\86 à¨¹à©\88। à¨\87ਹ {{PLURAL:$1|à¨\85ੱà¨\96ਰ|à¨\85ੱà¨\96ਰਾà¨\82}} à¨¤à©\8bà¨\82 à¨²à©°à¨¬à¨¾ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bਣਾ à¨\9aਾਹà©\80ਦਾ।',
 'yourgender' => 'ਲਿੰਗ:',
 'gender-unknown' => 'ਜ਼ਾਹਿਰ ਨਹੀਂ ਕੀਤਾ',
 'gender-male' => 'ਮਰਦ',
@@ -1039,26 +1068,30 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Groups
 'group' => 'ਗਰੁੱਪ:',
-'group-user' => 'ਮà©\88à¨\82ਬਰ',
+'group-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'group-autoconfirmed' => 'ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ',
 'group-bot' => 'ਬੋਟ',
 'group-all' => '(ਸਭ)',
 
-'group-user-member' => 'ਮੈਂਬਰ',
+'group-user-member' => '{{GENDER:$1|ਵਰਤੋਂਕਾਰ}}',
+'group-bot-member' => 'ਬੋਟ',
 
 # Rights
 'right-read' => 'ਸਫ਼ੇ ਪੜ੍ਹਨਾ',
 'right-edit' => 'ਸਫ਼ੇ ਸੋਧ',
 'right-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣਾ (ਜੋ ਚਰਚਾ ਸਫ਼ੇ ਨਾ ਹੋਣ)',
 'right-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣਾ',
+'right-createaccount' => 'ਨਵੇਂ ਖਾਤੇ ਬਣਾਉਣਾ',
 'right-minoredit' => 'ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ',
 'right-move' => 'ਸਫ਼ੇ ਭੇਜਣਾ',
+'right-movefile' => 'ਫ਼ਾਈਲਾਂ ਦੇ ਨਾਂ ਬਦਲਣਾ',
 'right-upload' => 'ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨਾ',
 'right-autoconfirmed' => 'ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ',
 'right-delete' => 'ਸਫ਼ੇ ਹਟਾਓ',
 'right-bigdelete' => 'ਵੱਡੇ ਅਤੀਤਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਮਿਟਾਉਣੇ',
 'right-browsearchive' => 'ਮਿਟਾਏ ਗਏ ਸਫ਼ੇ ਖੋਜਣਾ',
 'right-undelete' => 'ਸਫ਼ੇ ਨੂੰ ਅਣ-ਮਿਟਾਇਆ ਕਰਨਾ',
+'right-suppressionlog' => 'ਪ੍ਰਾਈਵੇਟ ਚਿੱਠੇ ਵੇਖਣਾ',
 'right-block' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-blockemail' => 'ਮੈਂਬਰ ਦੇ ਈ-ਮੇਲ ਭੇਜਣ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-hideuser' => 'ਮੈਂਬਰ-ਨਾਂ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਅਤੇ ਇਸਨੂੰ ਲੋਕਾਂ ਤੋਂ ਲੁਕਾਉਣਾ',
@@ -1077,7 +1110,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'ਇਹ ਸਫ਼ਾ ਪੜ੍ਹਨ',
-'action-edit' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¸à©\8bਧੋ',
+'action-edit' => 'à¨\87ਹ à¨¸à¨«à¨¼à©\87 â\80\99à¨\9a à¨«à©\87ਰ-ਬਦਲ à¨\95ਰੋ',
 'action-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ',
 'action-createaccount' => 'ਮੈਂਬਰ ਖਾਤਾ ਬਣਾਉਣ',
@@ -1100,13 +1133,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'nchanges' => '$1 {{PLURAL:$1|ਤਬਦੀਲੀ|
 ਤਬਦੀਲੀਆਂ}}',
 'recentchanges' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ',
-'recentchanges-legend' => 'ਤਾà¨\9c਼ਾ à¨¬à¨¦à¨²à¨¾à¨\85 à¨\9aà©\8bਣਾà¨\82',
-'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ਪਰ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਅਦੇਖੇ ਜਾ ਸਕਦੇ ਹਨ।',
+'recentchanges-legend' => 'ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\87 à¨\87à¨\96਼ਤਿà¨\86ਰ',
+'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
 'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ਹੀ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
 'recentchanges-label-newpage' => 'ਇਹ ਸੋਧ ਨੇ ਨਵਾਂ ਸਫ਼ਾ ਬਣਾਇਆ ਹੈ',
 'recentchanges-label-minor' => 'ਇਹ ਛੋਟੀ ਸੋਧ ਹੈ',
 'recentchanges-label-bot' => 'ਇਹ ਸੋਧ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
-'recentchanges-label-unpatrolled' => 'à¨\87ਸ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¦à©\80 à¨\85à¨\9cà©\87 à¨¨à¨¿à¨\97ਰਾਨà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bà¨\88',
+'recentchanges-label-unpatrolled' => 'à¨\87ਹ à¨«à©\87ਰ-ਬਦਲ à¨¹à¨¾à¨²à©\87 à¨µà©\87à¨\96ਿà¨\86 à¨¨à¨¹à©\80à¨\82 à¨\97ਿà¨\86',
 'rcnote' => "$4, $5 ਤੱਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਦਿਨ|'''$2''' ਦਿਨਾਂ}} ਵਿਚ {{PLURAL:$1|'''1''' ਤਬਦੀਲੀ ਹੋਈ ਹੈ।|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੀਆਂ) ਤਬਦੀਲੀਆਂ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
 'rclistfrom' => '$1 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਦਿਖਾਓ',
@@ -1130,7 +1163,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Recent changes linked
 'recentchangeslinked' => 'ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-feed' => 'ਸਬੰਧਿਤ à¨¬à¨¦à¨²à¨¾à¨\85',
+'recentchangeslinked-feed' => 'ਸਬੰਧਤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
 'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-title' => '"$1" ਨਾਲ਼ ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-noresult' => 'ਜੁੜੇ ਸਫਿਆਂ ’ਤੇ, ਦਿੱਤੇ ਸਮੇਂ ’ਚ ਕੋਈ ਤਬਦੀਲੀ ਨਹੀਂ ਹੋਈ।',
@@ -1149,7 +1182,7 @@ to upload files.',
 'upload-recreate-warning' => "'''ਖ਼ਬਰਦਾਰ: ਇਸ ਨਾਮ ਦੀ ਫ਼ਾਈਲ ਮਿਟਾਈ ਜਾਂ ਹੋਰ ਨਾਮ ਤੇ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।'''
 ਮਿਟਾਉਣ ਅਤੇ ਭੇਜੇ ਜਾਣ ਦਾ ਚਿੱਠਾ ਸਹੂਲਤ ਲਈ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
 'uploadlog' => 'ਅੱਪਲੋਡ ਲਾਗ',
-'uploadlogpage' => 'ਅੱਪਲੋਡ ਦਾ ਚਿੱਠਾ',
+'uploadlogpage' => 'ਅੱਪਲੋਡਾਂ ਦਾ ਚਿੱਠਾ',
 'filename' => 'ਫਾਇਲ ਨਾਂ',
 'filedesc' => 'ਸਾਰ',
 'fileuploadsummary' => 'ਸੰਖੇਪ:',
@@ -1164,9 +1197,9 @@ to upload files.',
 'filename-tooshort' => 'ਫ਼ਾਈਲ ਬਹੁਤ ਛੋਟੀ ਹੈ।',
 'filetype-banned' => 'ਇਸ ਕਿਸਮ ਦੀ ਫ਼ਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।',
 'illegal-filename' => 'ਇਸ ਫ਼ਾਈਲ-ਨਾਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
-'fileexists' => 'à¨\87ਹ à¨«à¨¾à¨\87ਲ à¨¨à¨¾à¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹à©\80 à¨®à©\8cà¨\9cà©\82ਦ à¨¹à©\88। à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\87ਹ à¨¬à¨¦à¨²à¨£ à¨¬à¨¾à¨°à©\87 à¨\9cਾਣਦà©\87 ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]',
+'fileexists' => 'à¨\87ਹ à¨«à¨¾à¨\87ਲ à¨¨à¨¾à¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹à©\80 à¨®à©\8cà¨\9cà©\82ਦ à¨¹à©\88। à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\87ਹ à¨¬à¨¦à¨²à¨£ à¨¬à¨¾à¨°à©\87 à¨¦à©\8dਰਿà©\9c ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]',
 'fileexists-extension' => 'ਇਸ ਨਾਂ ਨਾਲ ਰਲਦੀ ਫਾਇਲ ਮੌਜੂਦ ਹੈ: [[$2|thumb]]
-* ਅੱਪਲੋਡ ਕੀਤੀ ਫਾਇਲ ਦਾ ਨਾਂ: <strong>[[:$1]]</strong>
+* à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80 à¨\9cਾà¨\82ਦà©\80 à¨«à¨¾à¨\87ਲ à¨¦à¨¾ à¨¨à¨¾à¨\82: <strong>[[:$1]]</strong>
 * ਮੌਜੂਦ ਫਾਇਲ ਦਾ ਨਾਂ: <strong>[[:$2]]</strong>
 ਇੱਕ ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ',
 'file-exists-duplicate' => 'ਇਹ ਫ਼ਾਈਲ {{PLURAL:$1|ਇਸ ਫ਼ਾਈਲ|ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ}} ਦੀ ਨਕਲ ਹੈ:',
@@ -1179,7 +1212,7 @@ to upload files.',
 'sourcefilename' => 'ਸੋਰਸ ਫਾਇਲ ਨਾਂ:',
 'upload-maxfilesize' => 'ਫ਼ਾਈਲ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਅਕਾਰ: $1',
 'upload-description' => 'ਫ਼ਾਈਲ ਦਾ ਵੇਰਵਾ',
-'watchthisupload' => 'à¨\87ਸ à¨«à¨¾à¨\87ਲ à¨¨à©\82à©° à¨µà¨¾à¨\9a à¨\95ਰੋ',
+'watchthisupload' => 'à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ੋ',
 'upload-success-subj' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ',
 'upload-warning-subj' => 'ਅੱਪਲੋਡ ਚੇਤਾਵਨੀ',
 
@@ -1208,7 +1241,7 @@ to upload files.',
 'upload-curl-error28' => 'ਅੱਪਲੋਡ ਟਾਈਮ-ਆਉਟ',
 
 'license' => 'ਲਾਈਸੈਂਸਿੰਗ:',
-'license-header' => 'ਲਾà¨\88ਸੰਸ',
+'license-header' => 'ਲਾà¨\88ਸà©\88à¨\82ਸ',
 'nolicense' => 'ਕੁਝ ਵੀ ਚੁਣਿਆ',
 'license-nopreview' => '(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)',
 'upload_source_file' => ' (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)',
@@ -1318,6 +1351,8 @@ to upload files.',
 'statistics-users-active-desc' => 'ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।',
 'statistics-mostpopular' => 'ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਪੇਜ',
 
+'disambiguationspage' => 'Template:ਗੁੰਝਲ ਖੋਲ੍ਹ',
+
 'doubleredirects' => 'ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ',
 
 'brokenredirectstext' => 'ਇਹ ਰਿਡਿਰੈਕਟ ਨਾ-ਮੌਜੂਦ ਸਫ਼ਿਆਂ ’ਤੇ ਜੋੜਦੇ ਹਨ:',
@@ -1357,9 +1392,9 @@ to upload files.',
 'prefixindex' => 'ਇਸ ਅਗੇਤਰ ਵਾਲ਼ੇ ਸਾਰੇ ਸਫ਼ੇ',
 'shortpages' => 'ਛੋਟੇ ਪੇਜ',
 'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
-'usercreated' => '$1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 {{GENDER:$3|ਰà¨\9aਿਆ}}',
+'usercreated' => '$1 à¨¨à©\82à©° $2 â\80\99ਤà©\87 {{GENDER:$3|ਬਣਾà¨\87ਆ}}',
 'newpages' => 'ਨਵੇਂ ਸਫ਼ੇ',
-'newpages-username' => 'ਯà©\82à¨\9c਼ਰ ਨਾਂ:',
+'newpages-username' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾਂ:',
 'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
 'move' => 'ਭੇਜੋ',
 'movethispage' => 'ਇਹ ਪੇਜ ਭੇਜੋ',
@@ -1618,7 +1653,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Contributions
 'contributions' => 'ਮੈਂਬਰ ਯੋਗਦਾਨ',
-'contributions-title' => '$1 à¨²à¨\88 à¨®à©\88à¨\82ਬਰ ਯੋਗਦਾਨ',
+'contributions-title' => '$1 à¨¦à©\87 ਯੋਗਦਾਨ',
 'mycontris' => 'ਮੇਰਾ ਯੋਗਦਾਨ',
 'contribsub2' => '$1 ($2) ਲਈ',
 'uctop' => '(ਟੀਸੀ)',
@@ -1636,17 +1671,17 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨¯à©\82à¨\9c਼ਰ à¨¨à¨¾à¨\82:',
+'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¨à¨¾à¨®:',
 'sp-contributions-toponly' => 'ਸਿਰਫ਼ ਉਹੀ ਸੋਧਾਂ ਵਖਾਓ ਜੋ ਸਭ ਤੋਂ ਨਵੀਂਆਂ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
 # What links here
 'whatlinkshere' => 'ਕਿਹੜੇ (ਸਫ਼ੇ) ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
-'whatlinkshere-title' => '$1 à¨¨à¨¾à¨²à¨¼ à¨\9cà©\8bà©\9cਦੇ ਸਫ਼ੇ',
+'whatlinkshere-title' => '$1 à¨¨à¨¾à¨²à¨¼ à¨\9cà©\8bà©\9cਨ à¨µà¨¾à¨²à¨¼ੇ ਸਫ਼ੇ',
 'whatlinkshere-page' => 'ਸਫਾ:',
 'linkshere' => "ਇਹ ਸਫ਼ੇ '''[[:$1]]''' ਨਾਲ਼ ਜੋੜਦੇ ਹਨ:",
 'nolinkshere' => "ਕੋਈ ਵੀ ਸਫ਼ਾ '''[[:$1]]''' ਨਾਲ਼ ਨਹੀਂ ਜੋੜਦਾ।",
-'isredirect' => 'ਰੀ-ਡਿਰੈਕਟ ਸਫ਼ਾ',
+'isredirect' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
 'istemplate' => 'ਟਾਕਰਾ ਕਰੋ',
 'isimage' => 'ਫ਼ਾਈਲ ਦਾ ਲਿੰਕ',
 'whatlinkshere-prev' => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
@@ -1735,7 +1770,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'move-page-legend' => 'ਪੇਜ ਮੂਵ ਕਰੋ',
 'movearticle' => 'ਸਫ਼ਾ ਭੇਜੋ:',
 'movenologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਹੋ',
-'movenologintext' => 'à¨\87ੱà¨\95 à¨ªà©\87à¨\9c à¨®à©\82ਵ à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਸà©\80à¨\82 à¨°à¨\9cਿਸà¨\9fਰਡ à¨®à©\88à¨\82ਬਰ à¨¹à©\8bਣà©\87 à¨\9aਾਹà©\80ਦà©\87 à¨¹à©\8b à¨\85ਤà©\87 [[Special:UserLogin|ਲਾà¨\97ਡ ਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
+'movenologintext' => 'à¨\87à¨\95 à¨¸à¨«à¨¼à©\87 à¨¦à¨¾ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¬à¨¦à¨²à¨£ à¨²à¨\88 à¨¤à©\81ਸà©\80à¨\82 à¨°à¨\9cਿਸà¨\9fਰਡ à¨®à©\88à¨\82ਬਰ à¨¹à©\8bਣà©\87 à¨\9aਾਹà©\80ਦà©\87 à¨¹à©\8b à¨\85ਤà©\87 [[Special:UserLogin|ਲਾà¨\97ਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
 'newtitle' => 'ਨਵੇਂ ਟਾਈਟਲ ਲਈ:',
 'move-watch' => 'ਸਰੋਤ ਤੇ ਟਾਰਗੇਟ ਸਫ਼ੇ ਉੱਤੇ ਨਿਗਰਾਨੀ ਰੱਖੋ',
 'movepagebtn' => 'ਸਫ਼ਾ ਭੇਜੋ',
@@ -1746,7 +1781,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਹੋਰ ਨਾਮ ਚੁਣੋ।',
 'movedto' => 'ਮੂਵ ਕੀਤਾ',
 'movepage-page-moved' => 'ਸਫ਼ਾ $1 ਨੂੰ $2 ’ਤੇ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
-'movelogpage' => 'ਭà©\87à¨\9cà©\87 à¨\9cਾਣ ਦਾ ਚਿੱਠਾ',
+'movelogpage' => 'ਸਿਰਲà©\87à¨\96 à¨¬à¨¦à¨²à©\80 ਦਾ ਚਿੱਠਾ',
 'movereason' => 'ਕਾਰਨ:',
 'revertmove' => 'ਰੱਦ ਕਰੋ',
 'delete_and_move' => 'ਹਟਾਓ ਅਤੇ ਮੂਵ ਕਰੋ',
@@ -1793,8 +1828,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'import-logentry-upload-detail' => '$1 ਰੀਵਿਜ਼ਨ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨®à©\88à¨\82ਬਰ ਸਫ਼ਾ',
-'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਗੱਲਬਾਤ ਸਫ਼ਾ',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਸਫ਼ਾ',
+'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ',
 'tooltip-pt-preferences' => 'ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ',
 'tooltip-pt-watchlist' => 'ਓਹਨਾਂ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
 'tooltip-pt-mycontris' => 'ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਲਿਸਟ',
@@ -1843,7 +1878,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-ca-nstab-template' => 'ਸਾਂਚਾ ਵੇਖੋ',
 'tooltip-ca-nstab-help' => 'ਮੱਦਦ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-category' => 'ਕੈਟਾਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
-'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à¨²à©\80 à¨¦à©\87 à¨¤à©\8cਰ â\80\99ਤà©\87 ਨਿਸ਼ਾਨ ਲਾਓ',
+'tooltip-minoredit' => 'à¨\87ਸ â\80\99ਤà©\87 à¨¬à¨¤à©\8cਰ à¨\9bà©\8bà¨\9fà©\80 à¨¤à¨¬à¨¦à©\80ਲà©\80 ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
 'tooltip-preview' => 'ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ!',
 'tooltip-diff' => 'ਤੁਹਾਡੇ ਦੁਆਰਾ ਲਿਖਤ ਵਿਚ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਵਖਾਉਂਦਾ ਹੈ',
@@ -1868,9 +1903,9 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'spamprotectiontitle' => 'Spam ਸੁਰੱਖਿਆ ਫਿਲਟਰ',
 
 # Info page
-'pageinfo-header-edits' => 'ਸੋਧਾਂ',
-'pageinfo-watchers' => 'ਨà¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²à¨¼ਿਆਂ ਦੀ ਗਿਣਤੀ',
-'pageinfo-edits' => 'ਸà©\8bਧਾà¨\82 à¨¦à©\80 à¨\97ਿਣਤà©\80',
+'pageinfo-header-edits' => 'ਸੋਧਾਂ ਦਾ ਅਤੀਤ',
+'pageinfo-watchers' => 'ਸਫ਼à©\87 â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²ਿਆਂ ਦੀ ਗਿਣਤੀ',
+'pageinfo-edits' => 'à¨\95à©\81ੱਲ à¨¸à©\8bਧਾà¨\82',
 
 # Skin names
 'skinname-standard' => 'ਕਲਾਸਿਕ',
@@ -1893,7 +1928,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'show-big-image' => 'ਪੂਰਾ ਰੈਜ਼ੋਲੇਸ਼ਨ',
 
 # Special:NewFiles
-'newimages' => 'ਨਵà©\80à¨\86à¨\82 à¨«à¨¾à¨\87ਲਾਂ ਦੀ ਗੈਲਰੀ',
+'newimages' => 'ਨਵà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾਂ ਦੀ ਗੈਲਰੀ',
 'noimages' => 'ਵੇਖਣ ਲਈ ਕੁਝ ਨਹੀਂ',
 'ilsubmit' => 'ਖੋਜ',
 'bydate' => 'ਮਿਤੀ ਨਾਲ',
@@ -1962,11 +1997,11 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'confirmemail_send' => 'ਇੱਕ ਪੁਸ਼ਟੀ ਕੋਡ ਭੇਜੋ',
 'confirmemail_sent' => 'ਪੁਸ਼ਟੀ ਈਮੇਲ ਭੇਜੀ ਗਈ।',
 'confirmemail_invalid' => 'ਗਲਤ ਪੁਸ਼ਟੀ ਕੋਡ ਹੈ। ਕੋਡ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੋ ਸਕਦੀ ਹੈ।',
-'confirmemail_loggedin' => 'ਹà©\81ਣ à¨¤à©\81ਹਾਡਾ à¨\88ਮà©\87ਲ à¨\90ਡਰà©\88ੱਸ à¨\9aà©\88ੱà¨\95 (confirmed) à¨¹à©\8b à¨\97ਿà¨\86 ਹੈ।',
+'confirmemail_loggedin' => 'ਤà©\81ਹਾਡਾ à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¹à©\81ਣ à¨¤à¨¸à¨¦à©\80à¨\95 à¨¹à©\8b à¨\9aà©\81ੱà¨\95ਾ ਹੈ।',
 'confirmemail_subject' => '{{SITENAME}} ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
 
 # Scary transclusion
-'scarytranscludetoolong' => '[ਅਫਸੋਸ ਹੈ ਕਿ URL ਬਹੁਤ ਲੰਮਾ ਹੈ]',
+'scarytranscludetoolong' => '[URL ਬਹੁਤ ਲੰਬਾ ਹੈ]',
 
 # Delete conflict
 'recreate' => 'ਮੁੜ-ਬਣਾਓ',
@@ -1991,8 +2026,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'table_pager_empty' => 'ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ',
 
 # Auto-summaries
-'autosumm-blank' => 'ਪà©\87à¨\9c à¨¨à©\82à©° à¨\96ਾਲà©\80 à¨\95ਰ à¨¦à¨¿à©±ਤਾ',
-'autosumm-new' => '$1 ਨਾਲ ਪੇਜ ਬਣਾਇਆ',
+'autosumm-blank' => 'ਸਫ਼à©\87 à¨¨à©\82à©° à¨\96਼ਾਲà©\80 à¨\95à©\80ਤਾ',
+'autosumm-new' => '"$1" ਨਾਲ਼ ਸਫ਼ਾ ਬਣਾਇਆ',
 
 # Live preview
 'livepreview-loading' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…',
@@ -2013,10 +2048,10 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:SpecialPages
 'specialpages' => 'ਖ਼ਾਸ ਸਫ਼ੇ',
-'specialpages-group-login' => 'ਲਾਗ ਇਨ / ਅਕਾਊਂਟ ਬਣਾਓ',
+'specialpages-group-login' => 'ਲਾਗਇਨ / ਖਾਤਾ ਬਣਾਓ',
 
 # Special:BlankPage
-'blankpage' => 'à¨\96਼ਾਲà©\80 à¨ªà©\87à¨\9c',
+'blankpage' => 'à¨\96਼ਾਲà©\80 à¨¸à¨«à¨¼à¨¾',
 
 # External image whitelist
 'external_image_whitelist' => " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>
@@ -2036,4 +2071,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'htmlform-reset' => 'ਬਦਲਾਅ ਵਾਪਸ ਲਵੋ',
 'htmlform-selectorother-other' => 'ਹੋਰ',
 
+# Search suggestions
+'searchsuggest-search' => 'ਖੋਜ',
+
 );
index 2e95644..7e4e2a5 100644 (file)
@@ -16,97 +16,97 @@ $messages = array(
 'tog-enotifwatchlistpages' => 'Manpa-awit na e-mail ed siak no abalo may sakey ya bolong ya babantayan ko',
 
 'underline-always' => 'Naynay',
-'underline-never'  => 'Andin-balot',
+'underline-never' => 'Andin-balot',
 
 # Categories related messages
 'category_header' => 'Saray artikulo ed category ya "$1"',
 
-'about'    => 'Nipakar ed',
-'article'  => 'Bolong na laman',
-'cancel'   => 'I-tonda',
-'mypage'   => 'Say bolong ko',
-'mytalk'   => 'Say tongtongan ko',
+'about' => 'Nipakar ed',
+'article' => 'Bolong na laman',
+'cancel' => 'I-tonda',
+'mypage' => 'Say bolong ko',
+'mytalk' => 'Say tongtongan ko',
 'anontalk' => 'Tongtongan para ed sayan IP',
-'and'      => '&#32;san',
+'and' => '&#32;san',
 
 # Cologne Blue skin
-'qbpageoptions'  => 'Ayan bolong',
+'qbpageoptions' => 'Ayan bolong',
 'qbspecialpages' => 'Niduma ran Bolobolong',
 
-'returnto'          => 'Impawel ed $1.',
-'help'              => 'Tolong',
-'search'            => 'Anapen',
-'searchbutton'      => 'Anapen',
-'go'                => 'Ula',
-'searcharticle'     => 'Ula',
-'history'           => 'Awaran na sayan bolong',
-'history_short'     => 'awaran na sayan bolong',
-'printableversion'  => 'Naigalot ya bersion',
-'permalink'         => 'Masiansian gawing',
-'edit'              => 'Baloen o dagdagan',
-'delete'            => 'Buralen',
-'deletethispage'    => 'Buralen so ayan page',
-'protect'           => 'Iyagel',
-'protectthispage'   => 'Iyagel yan bolong',
-'unprotect'         => 'aga la iyagel',
+'returnto' => 'Impawel ed $1.',
+'help' => 'Tolong',
+'search' => 'Anapen',
+'searchbutton' => 'Anapen',
+'go' => 'Ula',
+'searcharticle' => 'Ula',
+'history' => 'Awaran na sayan bolong',
+'history_short' => 'awaran na sayan bolong',
+'printableversion' => 'Naigalot ya bersion',
+'permalink' => 'Masiansian gawing',
+'edit' => 'Baloen o dagdagan',
+'delete' => 'Buralen',
+'deletethispage' => 'Buralen so ayan page',
+'protect' => 'Iyagel',
+'protectthispage' => 'Iyagel yan bolong',
+'unprotect' => 'aga la iyagel',
 'unprotectthispage' => 'Aga la iyagel yan bolong',
-'newpage'           => 'Balon bolong',
-'talkpage'          => 'Pantongtongan yan bolong',
-'specialpage'       => 'Niduman Bolong',
-'articlepage'       => 'Nengnengen so content page',
-'talk'              => 'Tongtongan',
-'userpage'          => 'Basaen so bolong na manag-usar',
-'mediawikipage'     => 'Nengnengen so bolong na pakabat',
-'viewhelppage'      => 'Nengnengen so bolong na tolong',
-'categorypage'      => 'Nengnengen so bolong na saray category',
-'viewtalkpage'      => 'Nengnengen so tongtongan',
-'otherlanguages'    => 'Diad arom ran salita',
-'lastmodifiedat'    => 'Say ayan bolong: otet ya binalo nen $2, $1.',
-'protectedpage'     => 'Iyayagel yan bolong',
-'jumptosearch'      => 'anapen',
+'newpage' => 'Balon bolong',
+'talkpage' => 'Pantongtongan yan bolong',
+'specialpage' => 'Niduman Bolong',
+'articlepage' => 'Nengnengen so content page',
+'talk' => 'Tongtongan',
+'userpage' => 'Basaen so bolong na manag-usar',
+'mediawikipage' => 'Nengnengen so bolong na pakabat',
+'viewhelppage' => 'Nengnengen so bolong na tolong',
+'categorypage' => 'Nengnengen so bolong na saray category',
+'viewtalkpage' => 'Nengnengen so tongtongan',
+'otherlanguages' => 'Diad arom ran salita',
+'lastmodifiedat' => 'Say ayan bolong: otet ya binalo nen $2, $1.',
+'protectedpage' => 'Iyayagel yan bolong',
+'jumptosearch' => 'anapen',
 
 # 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'            => 'Nipakar ed {{SITENAME}}',
-'aboutpage'            => 'Project:Nipaakar',
-'currentevents'        => 'Saray nagagawa natan',
-'currentevents-url'    => 'Project:Saray nagagawa natan',
-'edithelp'             => 'Tolong nipakar ed panagbalo na artikulo',
-'helppage'             => 'Help:Saray Laman',
-'mainpage'             => 'Arapan ya Bolong',
+'aboutsite' => 'Nipakar ed {{SITENAME}}',
+'aboutpage' => 'Project:Nipaakar',
+'currentevents' => 'Saray nagagawa natan',
+'currentevents-url' => 'Project:Saray nagagawa natan',
+'edithelp' => 'Tolong nipakar ed panagbalo na artikulo',
+'helppage' => 'Help:Saray Laman',
+'mainpage' => 'Arapan ya Bolong',
 'mainpage-description' => 'Arapan ya Bolong',
-'portal'               => 'Pwerta na komyunidad',
-'portal-url'           => 'Project:Pwerta na Komyunidad',
+'portal' => 'Pwerta na komyunidad',
+'portal-url' => 'Project:Pwerta na Komyunidad',
 
 'badaccess-group0' => 'Agmo sarag ya gaween so action ya kekerewen mo.',
 
-'youhavenewmessages'      => 'Walay $1 ($2).',
-'newmessageslink'         => 'balo ran pakabat',
-'newmessagesdifflink'     => 'sampot ya binalo',
+'youhavenewmessages' => 'Walay $1 ($2).',
+'newmessageslink' => 'balo ran pakabat',
+'newmessagesdifflink' => 'sampot ya binalo',
 'youhavenewmessagesmulti' => 'Walay balo ran pakabat mo ed $1',
-'viewdeleted'             => 'Nengnengen so $1?',
+'viewdeleted' => 'Nengnengen so $1?',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-user'      => 'Bolong na manag-usar',
+'nstab-user' => 'Bolong na manag-usar',
 'nstab-mediawiki' => 'Pakabat',
 
 # General errors
 'badarticleerror' => 'Aga sarag ya gaween so ayan action ed sayan bolong.',
-'cannotdelete'    => 'Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)',
-'badtitle'        => 'Aga sarag ya titulo',
-'viewsource'      => 'Nengnengen so pinanlapuan',
-'viewsourcetext'  => 'Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:',
+'cannotdelete' => 'Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)',
+'badtitle' => 'Aga sarag ya titulo',
+'viewsource' => 'Nengnengen so pinanlapuan',
+'viewsourcetext' => 'Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:',
 
 # Login and logout pages
-'yourdomainname'             => 'Say domain mo',
-'login'                      => 'Onloob',
-'logout'                     => 'Paway',
-'userlogout'                 => 'Paway',
-'createaccount'              => 'Mangawa na account',
-'gotaccountlink'             => 'Onloob',
-'badretype'                  => 'Aga parehas so en-type mo ran password.',
+'yourdomainname' => 'Say domain mo',
+'login' => 'Onloob',
+'logout' => 'Paway',
+'userlogout' => 'Paway',
+'createaccount' => 'Mangawa na account',
+'gotaccountlink' => 'Onloob',
+'badretype' => 'Aga parehas so en-type mo ran password.',
 'acct_creation_throttle_hit' => 'Sorry, nangawala ka la na $1 account. Agka la makapangawa na account.',
-'accountcreated'             => 'Agawa so account',
-'accountcreatedtext'         => 'Agawa la so user account para $1.',
+'accountcreated' => 'Agawa so account',
+'accountcreatedtext' => 'Agawa la so user account para $1.',
 
 # Change password dialog
 'newpassword' => 'Balon password:',
@@ -115,23 +115,23 @@ $messages = array(
 'link_tip' => 'Gawing ed loob',
 
 # Edit pages
-'minoredit'         => 'Melag yan edit.',
-'watchthis'         => 'Bantayan yan bolong',
-'preview'           => 'Nengnengen',
-'showdiff'          => 'Ipanengneng so binalo',
-'anoneditwarning'   => "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
-'blockedtitle'      => 'Sebel ed sayan manag-usar',
-'blockednoreason'   => 'anggapon katunungan so inter',
+'minoredit' => 'Melag yan edit.',
+'watchthis' => 'Bantayan yan bolong',
+'preview' => 'Nengnengen',
+'showdiff' => 'Ipanengneng so binalo',
+'anoneditwarning' => "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
+'blockedtitle' => 'Sebel ed sayan manag-usar',
+'blockednoreason' => 'anggapon katunungan so inter',
 'whitelistedittext' => 'Nakaukulan mo ya $1 umpian nabalo o nadagdagan ray bolobolong.',
-'loginreqtitle'     => 'Nakaukulan kan Onloob',
-'loginreqlink'      => 'onloob',
-'loginreqpagetext'  => 'Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.',
-'accmailtitle'      => 'Say Password impawet la.',
-'accmailtext'       => 'Empawet ed $2 so password para ed $1.',
-'newarticle'        => '(Balo)',
-'editing'           => 'Babaloen so $1',
-'yourdiff'          => 'Saray niduma',
-'copyrightwarning'  => "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).
+'loginreqtitle' => 'Nakaukulan kan Onloob',
+'loginreqlink' => 'onloob',
+'loginreqpagetext' => 'Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.',
+'accmailtitle' => 'Say Password impawet la.',
+'accmailtext' => 'Empawet ed $2 so password para ed $1.',
+'newarticle' => '(Balo)',
+'editing' => 'Babaloen so $1',
+'yourdiff' => 'Saray niduma',
+'copyrightwarning' => "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).
 No ag mo labay ya say inkorit mo ed sarag ya baloen odino ibonog ed anggan siopa, ag mo ipapalima dia.<br />
 San ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya public domain odino parehas ya libren resource.
 '''AG MANPALIMA NA KIMEY YA WALAY COPYRIGHT TO YA ANGGAPOY ABOLOY!'''",
@@ -140,54 +140,51 @@ San ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya pu
 'cantcreateaccounttitle' => 'Aga makagawa na account',
 
 # History pages
-'last'      => 'sampot',
+'last' => 'sampot',
 'histfirst' => 'Sankaunaan',
-'histlast'  => 'Sankautetan',
-
-# Diffs
-'difference' => '(Say niduma diad saray revision)',
+'histlast' => 'Sankautetan',
 
 # Search results
-'searchsubtitle'        => "'''[[:$1]]''' so inanap mo.",
+'searchsubtitle' => "'''[[:$1]]''' so inanap mo.",
 'searchsubtitleinvalid' => "'''$1''' so inanap mo.",
-'searchhelp-url'        => 'Help:Saray Laman',
-'powersearch'           => 'Anapen',
+'searchhelp-url' => 'Help:Saray Laman',
+'powersearch' => 'Anapen',
 
 # Quickbar
 'qbsettings-none' => 'Anggapo',
 
 # Preferences page
-'mypreferences'     => 'Saray preference ko',
-'changepassword'    => 'Salatan so password',
-'datedefault'       => 'Anggapoy preference',
-'prefs-datetime'    => 'Bilang na agew san oras',
-'prefs-rc'          => 'Sampot ran binalo',
-'prefs-watchlist'   => 'Listaan na babantayan',
-'prefs-editing'     => 'Babaloen',
+'mypreferences' => 'Saray preference ko',
+'changepassword' => 'Salatan so password',
+'datedefault' => 'Anggapoy preference',
+'prefs-datetime' => 'Bilang na agew san oras',
+'prefs-rc' => 'Sampot ran binalo',
+'prefs-watchlist' => 'Listaan na babantayan',
+'prefs-editing' => 'Babaloen',
 'searchresultshead' => 'Anapen',
-'yourrealname'      => 'Tuwan ngaran:',
-'badsiglength'      => 'Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.',
+'yourrealname' => 'Tuwan ngaran:',
+'badsiglength' => 'Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.',
 
 # User rights
 'userrights-user-editname' => 'Isulat so username:',
 
 # Recent changes
 'recentchanges' => 'Sampot ran binalo',
-'hide'          => 'Yamot',
-'show'          => 'Ipanengneng',
+'hide' => 'Yamot',
+'show' => 'Ipanengneng',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Kabiangan ran binalo',
-'recentchangeslinked-feed'    => 'Kabiangan ran binalo',
+'recentchangeslinked' => 'Kabiangan ran binalo',
+'recentchangeslinked-feed' => 'Kabiangan ran binalo',
 'recentchangeslinked-toolbox' => 'Kabiangan ran binalo',
 
 # Upload
-'upload'          => 'Mangisigep na file',
-'uploadlog'       => 'Isigep so log',
-'filesource'      => 'Pinanlapuan:',
-'uploadedfiles'   => 'Insegep ran file',
-'badfilename'     => 'Binalo so ngaran na file, umpian "$1" so balon ngaran to.',
-'sourcefilename'  => 'Filename na pinanlapuan:',
+'upload' => 'Mangisigep na file',
+'uploadlog' => 'Isigep so log',
+'filesource' => 'Pinanlapuan:',
+'uploadedfiles' => 'Insegep ran file',
+'badfilename' => 'Binalo so ngaran na file, umpian "$1" so balon ngaran to.',
+'sourcefilename' => 'Filename na pinanlapuan:',
 'watchthisupload' => 'Bantayan yan bolong',
 
 # Special:ListFiles
@@ -203,127 +200,127 @@ San ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya pu
 'unusedtemplateswlh' => 'arom ran gawing',
 
 # Random page
-'randompage'         => 'Random ya bolong',
+'randompage' => 'Random ya bolong',
 'randompage-nopages' => 'Anggapoy bolong ya wadya ed ayan namespace.',
 
-'withoutinterwiki'         => 'Saray bolobolong ya anggapoy gawing ya language',
+'withoutinterwiki' => 'Saray bolobolong ya anggapoy gawing ya language',
 'withoutinterwiki-summary' => 'Anggapoy gawin paulad version na arum ran salita so ontombok ran bolobolong:',
 
 # Miscellaneous special pages
-'shortpages'     => 'Antikey ran bolong',
-'longpages'      => 'Andokoy ran bolong',
+'shortpages' => 'Antikey ran bolong',
+'longpages' => 'Andokoy ran bolong',
 'protectedpages' => 'Iyayagel ran bolobolong',
-'newpages'       => 'Balo ran bolong',
-'ancientpages'   => 'Sankadaanan ran bolobolong',
-'move'           => 'Iyales',
-'movethispage'   => 'Iyales yan bolong',
+'newpages' => 'Balo ran bolong',
+'ancientpages' => 'Sankadaanan ran bolobolong',
+'move' => 'Iyales',
+'movethispage' => 'Iyales yan bolong',
 
 # Book sources
-'booksources'               => 'Saray liblibron pinanlapuan',
+'booksources' => 'Saray liblibron pinanlapuan',
 'booksources-search-legend' => 'Mananap na saray libron pinanlapuan',
-'booksources-go'            => 'Ula',
+'booksources-go' => 'Ula',
 
 # Special:Log
 'all-logs-page' => 'Amin ran log',
 
 # Special:AllPages
-'allpages'          => 'Amin ya bolobolong',
-'alphaindexline'    => '$1 anggad $2',
-'nextpage'          => 'Ontombok ya page ($1)',
-'allpagesfrom'      => 'Ipanengneng ray bolobolong ya manlapod:',
-'allarticles'       => 'Amin ran bolobolong',
-'allinnamespace'    => 'Amin ya bolobolong ($1 namespace)',
+'allpages' => 'Amin ya bolobolong',
+'alphaindexline' => '$1 anggad $2',
+'nextpage' => 'Ontombok ya page ($1)',
+'allpagesfrom' => 'Ipanengneng ray bolobolong ya manlapod:',
+'allarticles' => 'Amin ran bolobolong',
+'allinnamespace' => 'Amin ya bolobolong ($1 namespace)',
 'allnotinnamespace' => 'Amin ya bolobolong (anggapo ed namespace ya $1)',
-'allpagesprev'      => 'Enbeneg',
-'allpagesnext'      => 'Ontombok',
-'allpagessubmit'    => 'Ula',
-'allpagesprefix'    => 'Ipanengneng so saray bolobolong ya walay prefix:',
+'allpagesprev' => 'Enbeneg',
+'allpagesnext' => 'Ontombok',
+'allpagessubmit' => 'Ula',
+'allpagesprefix' => 'Ipanengneng so saray bolobolong ya walay prefix:',
 
 # Special:LinkSearch
-'linksearch'     => 'Anapen ramay gawing ed web',
+'linksearch' => 'Anapen ramay gawing ed web',
 'linksearch-pat' => 'Anapen so pattern:',
-'linksearch-ok'  => 'Anapen',
+'linksearch-ok' => 'Anapen',
 
 # E-mail user
-'emailuser'     => 'E-mail so ayan user',
-'emailfrom'     => 'Manlapud',
-'emailto'       => 'Para ed',
-'emailmessage'  => 'Pakabat',
-'emailsend'     => 'Paawit',
-'emailsent'     => 'Say e-mail impawet la',
+'emailuser' => 'E-mail so ayan user',
+'emailfrom' => 'Manlapud',
+'emailto' => 'Para ed',
+'emailmessage' => 'Pakabat',
+'emailsend' => 'Paawit',
+'emailsent' => 'Say e-mail impawet la',
 'emailsenttext' => 'Impawit la so e-mail message mo.',
 
 # Watchlist
-'mywatchlist'    => 'Listaan na babantayan ko',
-'watchnologin'   => 'Agka ni akaloob',
+'mywatchlist' => 'Listaan na babantayan ko',
+'watchnologin' => 'Agka ni akaloob',
 'addedwatchtext' => "Impila so bolong ya \"[[:\$1]]\" diad [[Special:Watchlist|listaan na babantayan]] mo. Isulat diman so saray ontombok ran idagdag o panagbalo ed sayan bolong san diad bolong na tongtongan. San akasulat ran '''mapatnag''' (bolded) ed [[Special:RecentChanges|listaan na saray sampot ran binalo]] umpian mas maganom ya nanengneng.
 
 No labay mon ekalen may bolong diad listaan na babantayan, tapik mo labat so \"ekalen ed babantayan\" (unwatch) diad gilig ya bar.",
-'watch'          => 'bantayan',
-'watchthispage'  => 'Bantayan yan bolong',
+'watch' => 'bantayan',
+'watchthispage' => 'Bantayan yan bolong',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'Babantayan...',
 
 'enotif_newpagetext' => 'Balo yan bolong.',
-'changed'            => 'asalatan',
-'created'            => 'agawa',
+'changed' => 'asalatan',
+'created' => 'agawa',
 
 # Delete
-'deletepage'     => 'Buralen so bolong',
-'confirm'        => 'Paletan',
-'exblank'        => 'Anggapoy laman na bolong',
+'deletepage' => 'Buralen so bolong',
+'confirm' => 'Paletan',
+'exblank' => 'Anggapoy laman na bolong',
 'actioncomplete' => 'Asumpal lan agawa',
-'deletedtext'    => 'Abural lay "$1".
+'deletedtext' => 'Abural lay "$1".
 Pinengneng so $2 para ed listaan na saray abural ran balo.',
-'deletecomment'  => 'Katonongan',
+'deletecomment' => 'Katonongan',
 
 # Protect
-'prot_1movedto2'      => 'say [[$1]] enyales paula ed [[$2]]',
-'protect-legend'      => 'Palitaen so pangiyagel',
+'prot_1movedto2' => 'say [[$1]] enyales paula ed [[$2]]',
+'protect-legend' => 'Palitaen so pangiyagel',
 'protect-level-sysop' => 'Sysops labat',
 
 # Undelete
-'undelete'               => 'Nengnengen so inekal ran bolobolong',
-'viewdeletedpage'        => 'Nengnengen so inekal ran bolong',
-'undelete-search-box'    => 'Anapen ramay binural ran bolobolong',
+'undelete' => 'Nengnengen so inekal ran bolobolong',
+'viewdeletedpage' => 'Nengnengen so inekal ran bolong',
+'undelete-search-box' => 'Anapen ramay binural ran bolobolong',
 'undelete-search-prefix' => 'Ipanengneng ray bolobolong ya mangagapo ed:',
 'undelete-search-submit' => 'Anapen',
 
 # Contributions
 'contributions' => 'Saray contribution na user',
-'mycontris'     => 'Saray entolong ko',
-'year'          => 'Taon:',
+'mycontris' => 'Saray entolong ko',
+'year' => 'Taon:',
 
 'sp-contributions-newbies-sub' => 'Para balo ran account',
-'sp-contributions-submit'      => 'Anapen',
+'sp-contributions-submit' => 'Anapen',
 
 # What links here
-'whatlinkshere'       => 'Antoray akaturo dia',
+'whatlinkshere' => 'Antoray akaturo dia',
 'whatlinkshere-title' => 'Saray bolong ya aka-gawing ed $1',
-'whatlinkshere-page'  => 'Bolong:',
+'whatlinkshere-page' => 'Bolong:',
 
 # Block/unblock
-'blockip'            => 'Isara ed para ayan manag-usar',
-'ipbreason'          => 'Katonongan',
+'blockip' => 'Isara ed para ayan manag-usar',
+'ipbreason' => 'Katonongan',
 'ipbreasonotherlist' => 'Arom ya katonongan',
-'ipbsubmit'          => 'Isebel ed sayan manag-usar',
-'badipaddress'       => 'Aga nayarin IP address',
-'ipusubmit'          => 'Aga la isebel so ayan address',
-'ipblocklist'        => 'Listaan na saray sebel ran IP address san username',
+'ipbsubmit' => 'Isebel ed sayan manag-usar',
+'badipaddress' => 'Aga nayarin IP address',
+'ipusubmit' => 'Aga la isebel so ayan address',
+'ipblocklist' => 'Listaan na saray sebel ran IP address san username',
 'ipblocklist-submit' => 'Anapen',
-'expiringblock'      => 'nabalang no $1 $2',
-'blocklink'          => 'isara',
-'contribslink'       => 'saray entolong to',
+'expiringblock' => 'nabalang no $1 $2',
+'blocklink' => 'isara',
+'contribslink' => 'saray entolong to',
 
 # Move page
-'move-page-legend'        => 'Iyales so bolong',
-'movearticle'             => 'Iyales so bolong',
-'movepagebtn'             => 'Iyales so bolong',
-'pagemovedsub'            => 'Asumpal lan inyales',
-'articleexists'           => 'Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.',
-'movereason'              => 'Katonongan',
-'delete_and_move'         => 'Buralen san iyales',
+'move-page-legend' => 'Iyales so bolong',
+'movearticle' => 'Iyales so bolong',
+'movepagebtn' => 'Iyales so bolong',
+'pagemovedsub' => 'Asumpal lan inyales',
+'articleexists' => 'Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.',
+'movereason' => 'Katonongan',
+'delete_and_move' => 'Buralen san iyales',
 'delete_and_move_confirm' => 'On, buralen yan page',
 
 # Export
@@ -331,7 +328,7 @@ Pinengneng so $2 para ed listaan na saray abural ran balo.',
 'export-addcat' => 'Iyarom',
 
 # Namespace 8 related
-'allmessages'     => 'Saray pakabat na oksoy',
+'allmessages' => 'Saray pakabat na oksoy',
 'allmessagesname' => 'Ngaran',
 'allmessagestext' => 'Aya so listaan na amin ya pakabat na oksoy ya naanap ed MediaWiki namespace.',
 
@@ -342,14 +339,14 @@ Pinengneng so $2 para ed listaan na saray abural ran balo.',
 'importnotext' => 'Andilugan odino anggapoy laman ton text',
 
 # Tooltip help for the actions
-'tooltip-pt-logout'          => 'Paway',
-'tooltip-ca-viewsource'      => 'Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.',
-'tooltip-ca-protect'         => 'Iyagel yan bolong',
-'tooltip-ca-move'            => 'Iyales so ayan bolong',
-'tooltip-search'             => 'Anapen {{SITENAME}}',
-'tooltip-p-logo'             => 'Arapan ya Bolong',
-'tooltip-t-specialpages'     => 'Listaan na amin ran niduman bolobolong',
-'tooltip-ca-nstab-user'      => 'Nengnengen so bolong na manag-usar',
+'tooltip-pt-logout' => 'Paway',
+'tooltip-ca-viewsource' => 'Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.',
+'tooltip-ca-protect' => 'Iyagel yan bolong',
+'tooltip-ca-move' => 'Iyales so ayan bolong',
+'tooltip-search' => 'Anapen {{SITENAME}}',
+'tooltip-p-logo' => 'Arapan ya Bolong',
+'tooltip-t-specialpages' => 'Listaan na amin ran niduman bolobolong',
+'tooltip-ca-nstab-user' => 'Nengnengen so bolong na manag-usar',
 'tooltip-ca-nstab-mediawiki' => 'Nengnengen so pakabat na oksoy',
 
 # Attribution
@@ -364,14 +361,14 @@ Pinengneng so $2 para ed listaan na saray abural ran balo.',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'amin',
 'namespacesall' => 'amin',
-'monthsall'     => 'amin',
+'monthsall' => 'amin',
 
 # E-mail address confirmation
-'confirmemail'           => 'Kumpirmaen so E-mail address',
-'confirmemail_sent'      => 'Empawet so confirmation e-mail.',
+'confirmemail' => 'Kumpirmaen so E-mail address',
+'confirmemail_sent' => 'Empawet so confirmation e-mail.',
 'confirmemail_needlogin' => 'Nakaukulan mo ya $1 umpian nakompirma so email address mo.',
-'confirmemail_success'   => 'Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.',
-'confirmemail_loggedin'  => 'Akompira la so e-mail address mo.',
+'confirmemail_success' => 'Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.',
+'confirmemail_loggedin' => 'Akompira la so e-mail address mo.',
 
 # Delete conflict
 'deletedwhileediting' => 'Pasakbay: Abural yan bolong nen ginapuan mon baloen!',
@@ -381,24 +378,24 @@ Pinengneng so $2 para ed listaan na saray abural ran balo.',
 
 # Multipage image navigation
 'imgmultipagenext' => 'ontombok ya bolong →',
-'imgmultigo'       => 'Ula!',
+'imgmultigo' => 'Ula!',
 
 # Table pager
-'table_pager_next'         => 'Ontombok ya bolong',
-'table_pager_prev'         => 'Embeneg ya bolong',
-'table_pager_first'        => 'Unaan ya bolong',
-'table_pager_last'         => 'Otet ya bolong',
+'table_pager_next' => 'Ontombok ya bolong',
+'table_pager_prev' => 'Embeneg ya bolong',
+'table_pager_first' => 'Unaan ya bolong',
+'table_pager_last' => 'Otet ya bolong',
 'table_pager_limit_submit' => 'Ula',
 
 # Auto-summaries
-'autosumm-blank'   => 'Ekalen so amin ya laman na bolong',
+'autosumm-blank' => 'Ekalen so amin ya laman na bolong',
 'autosumm-replace' => "Salatan yan bolong na '$1'",
 'autoredircomment' => 'Ituturo paulad [[$1]]',
-'autosumm-new'     => 'Balon bolong: $1',
+'autosumm-new' => 'Balon bolong: $1',
 
 # Live preview
 'livepreview-loading' => 'Ilulugan…',
-'livepreview-ready'   => 'Ilulugan… Akaparaan!',
+'livepreview-ready' => 'Ilulugan… Akaparaan!',
 
 # Special:SpecialPages
 'specialpages' => 'Niduma ran bolobolong',
index 3d3d16b..96176c0 100644 (file)
@@ -773,8 +773,6 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 'search-interwiki-caption' => 'Kapatad a proyektu',
 'search-interwiki-default' => '$1 linual/resulta:',
 'search-interwiki-more' => '(dakal pa)',
-'search-mwsuggest-enabled' => 'maki munikala',
-'search-mwsuggest-disabled' => 'alang munikala',
 'search-relatedarticle' => 'Kamaganak',
 'mwsuggest-disable' => 'Patdan la reng munikalang AJAX',
 'searchrelated' => 'kaugne',
index bcc2e57..45b2e9d 100644 (file)
 
 $messages = array(
 'underline-always' => 'Semper',
-'underline-never'  => 'Niunka',
+'underline-never' => 'Niunka',
 
 # Dates
-'sunday'    => 'djadomingu',
-'monday'    => 'djaluna',
-'tuesday'   => 'djamars',
+'sunday' => 'djadomingu',
+'monday' => 'djaluna',
+'tuesday' => 'djamars',
 'wednesday' => 'djarason',
-'thursday'  => 'djaweps',
-'friday'    => 'djabièrne',
-'saturday'  => 'djasabra',
-'january'   => 'yanüari',
-'february'  => 'febrüari',
-'march'     => 'mart',
-'april'     => 'aprel',
-'may_long'  => 'mei',
-'june'      => 'yüni',
-'july'      => 'yüli',
-'august'    => 'ougùstùs',
+'thursday' => 'djaweps',
+'friday' => 'djabièrne',
+'saturday' => 'djasabra',
+'january' => 'yanüari',
+'february' => 'febrüari',
+'march' => 'mart',
+'april' => 'aprel',
+'may_long' => 'mei',
+'june' => 'yüni',
+'july' => 'yüli',
+'august' => 'ougùstùs',
 'september' => 'sèptèmber',
-'october'   => 'òktober',
-'november'  => 'novèmber',
-'december'  => 'desèmber',
-'jan'       => 'yan',
-'feb'       => 'feb',
-'mar'       => 'mrt',
-'apr'       => 'apr',
-'may'       => 'mei',
-'jun'       => 'yün',
-'jul'       => 'yül',
-'aug'       => 'oug',
-'sep'       => 'sep',
-'oct'       => 'okt',
-'nov'       => 'nov',
-'dec'       => 'des',
+'october' => 'òktober',
+'november' => 'novèmber',
+'december' => 'desèmber',
+'jan' => 'yan',
+'feb' => 'feb',
+'mar' => 'mrt',
+'apr' => 'apr',
+'may' => 'mei',
+'jun' => 'yün',
+'jul' => 'yül',
+'aug' => 'oug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'des',
 
 # Categories related messages
 'category_header' => 'Artíkulonan den kategoria "$1"',
-'subcategories'   => 'Supkategorianan',
+'subcategories' => 'Supkategorianan',
 
-'about'         => 'Info',
-'article'       => 'Artíkulo',
-'cancel'        => 'Kanselá',
+'about' => 'Info',
+'article' => 'Artíkulo',
+'cancel' => 'Kanselá',
 'moredotdotdot' => 'Mas...',
-'mypage'        => 'Mi página',
-'mytalk'        => 'Mi diskushon',
-'anontalk'      => 'Diskushon pa e IP aki',
-'navigation'    => 'Nabegashon',
-'and'           => '&#32;i',
+'mypage' => 'Mi página',
+'mytalk' => 'Mi diskushon',
+'anontalk' => 'Diskushon pa e IP aki',
+'navigation' => 'Nabegashon',
+'and' => '&#32;i',
 
 # Cologne Blue skin
-'faq'     => 'Preguntanan mas Puntrá',
+'faq' => 'Preguntanan mas Puntrá',
 'faqpage' => 'Project:Preguntanan mas Puntrá',
 
-'errorpagetitle'    => 'Eror',
-'returnto'          => 'Bai bèk $1.',
-'tagline'           => 'Di {{SITENAME}}',
-'help'              => 'Ayudo',
-'search'            => 'Buska',
-'history'           => 'Historia di página',
-'history_short'     => 'Historia',
-'edit'              => 'Editá',
-'editthispage'      => 'Editá e página aki',
-'delete'            => 'Kita',
-'protect'           => 'Protehá',
-'unprotect'         => 'stop di protehá',
+'errorpagetitle' => 'Eror',
+'returnto' => 'Bai bèk $1.',
+'tagline' => 'Di {{SITENAME}}',
+'help' => 'Ayudo',
+'search' => 'Buska',
+'history' => 'Historia di página',
+'history_short' => 'Historia',
+'edit' => 'Editá',
+'editthispage' => 'Editá e página aki',
+'delete' => 'Kita',
+'protect' => 'Protehá',
+'unprotect' => 'stop di protehá',
 'unprotectthispage' => 'Stop di protehá e página aki',
-'talkpagelinktext'  => 'Papia',
-'specialpage'       => 'Página Spesial',
-'personaltools'     => 'Hèrmèntnan Personal',
-'postcomment'       => 'Sekshon Nobo',
-'articlepage'       => 'Wak página di kontenido',
-'talk'              => 'Diskushon',
-'views'             => 'Kantidat di biaha mirá',
-'toolbox'           => 'Kaha di Hèrmènt',
-'userpage'          => 'Wak página di uzadó',
-'projectpage'       => 'Wak página di e proyekto',
-'imagepage'         => 'Mira página di e dokumento',
-'mediawikipage'     => 'Mira paginanan di mensahe',
-'templatepage'      => 'Mira malchi di e página',
-'viewhelppage'      => 'Mira página di yudansa',
-'categorypage'      => 'Mira e página di kategoria',
-'viewtalkpage'      => 'Wak diskushon',
-'otherlanguages'    => 'Na otro idioma',
-'redirectedfrom'    => '(Bo a yega akinan pa via di e página $1)',
-'redirectpagesub'   => 'Página ku ta sirbi komo portal',
-'lastmodifiedat'    => 'E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.',
-'viewcount'         => 'E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.',
-'protectedpage'     => 'Página Protehá',
-'jumpto'            => 'Bai na:',
-'jumptonavigation'  => 'Nabegashon',
-'jumptosearch'      => 'Buska',
+'talkpagelinktext' => 'Papia',
+'specialpage' => 'Página Spesial',
+'personaltools' => 'Hèrmèntnan Personal',
+'postcomment' => 'Sekshon Nobo',
+'articlepage' => 'Wak página di kontenido',
+'talk' => 'Diskushon',
+'views' => 'Kantidat di biaha mirá',
+'toolbox' => 'Kaha di Hèrmènt',
+'userpage' => 'Wak página di uzadó',
+'projectpage' => 'Wak página di e proyekto',
+'imagepage' => 'Mira página di e dokumento',
+'mediawikipage' => 'Mira paginanan di mensahe',
+'templatepage' => 'Mira malchi di e página',
+'viewhelppage' => 'Mira página di yudansa',
+'categorypage' => 'Mira e página di kategoria',
+'viewtalkpage' => 'Wak diskushon',
+'otherlanguages' => 'Na otro idioma',
+'redirectedfrom' => '(Bo a yega akinan pa via di e página $1)',
+'redirectpagesub' => 'Página ku ta sirbi komo portal',
+'lastmodifiedat' => 'E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.',
+'viewcount' => 'E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.',
+'protectedpage' => 'Página Protehá',
+'jumpto' => 'Bai na:',
+'jumptonavigation' => 'Nabegashon',
+'jumptosearch' => 'Buska',
 
 # 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'            => 'Tokante {{SITENAME}}',
-'aboutpage'            => 'Project:Info',
-'copyright'            => 'E kontenido ta disponibel bou di $1.',
-'copyrightpage'        => '{{ns:project}}:Derechinan di outor',
-'currentevents'        => 'Eventonan aktual',
-'currentevents-url'    => 'Project:Eventonan aktual',
-'disclaimers'          => 'Deklarashon di Liberashon for di Responsabilidatnan',
-'disclaimerpage'       => 'Project:Deklarashon di Liberashon for di Responsabilidat General',
-'edithelp'             => 'Ayudo ku editamentu',
-'edithelppage'         => 'Help:Kon pa editá artíkulo',
-'helppage'             => 'Help:Kontenido',
-'mainpage'             => 'Página Prinsipal',
+'aboutsite' => 'Tokante {{SITENAME}}',
+'aboutpage' => 'Project:Info',
+'copyright' => 'E kontenido ta disponibel bou di $1.',
+'copyrightpage' => '{{ns:project}}:Derechinan di outor',
+'currentevents' => 'Eventonan aktual',
+'currentevents-url' => 'Project:Eventonan aktual',
+'disclaimers' => 'Deklarashon di Liberashon for di Responsabilidatnan',
+'disclaimerpage' => 'Project:Deklarashon di Liberashon for di Responsabilidat General',
+'edithelp' => 'Ayudo ku editamentu',
+'edithelppage' => 'Help:Kon pa editá artíkulo',
+'helppage' => 'Help:Kontenido',
+'mainpage' => 'Página Prinsipal',
 'mainpage-description' => 'Página Prinsipal',
-'policy-url'           => 'Project:Pólisa',
-'portal'               => 'Portal di komunidat',
-'portal-url'           => 'Project:Portal di komunidat',
-'privacy'              => 'Pólisa di Privasidat',
-'privacypage'          => 'Project:Pólisa di Privasidat',
+'policy-url' => 'Project:Pólisa',
+'portal' => 'Portal di komunidat',
+'portal-url' => 'Project:Portal di komunidat',
+'privacy' => 'Pólisa di Privasidat',
+'privacypage' => 'Project:Pólisa di Privasidat',
 
-'badaccess'        => 'Eror di outorisashon',
+'badaccess' => 'Eror di outorisashon',
 'badaccess-group0' => 'Bo no tin outorisashon pa ehekutá e akshon ku bo a skohe.',
 
-'youhavenewmessages'      => 'Bo tin $1 ($2).',
-'newmessageslink'         => 'mensahe nobo',
+'youhavenewmessages' => 'Bo tin $1 ($2).',
+'newmessageslink' => 'mensahe nobo',
 'youhavenewmessagesmulti' => 'Bo tin mensahe nobo riba $1',
-'editsection'             => 'editá',
-'toc'                     => 'Kontenido',
-'showtoc'                 => 'mustra',
-'hidetoc'                 => 'skonde',
+'editsection' => 'editá',
+'toc' => 'Kontenido',
+'showtoc' => 'mustra',
+'hidetoc' => 'skonde',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Artíkulo',
-'nstab-user'      => 'Página personal',
-'nstab-media'     => 'Media',
-'nstab-special'   => 'Spesial',
-'nstab-image'     => 'Imagen',
+'nstab-main' => 'Artíkulo',
+'nstab-user' => 'Página personal',
+'nstab-media' => 'Media',
+'nstab-special' => 'Spesial',
+'nstab-image' => 'Imagen',
 'nstab-mediawiki' => 'Mensahe',
-'nstab-template'  => 'Predefinishon',
-'nstab-help'      => 'Ayudo',
-'nstab-category'  => 'Kategoria',
+'nstab-template' => 'Predefinishon',
+'nstab-help' => 'Ayudo',
+'nstab-category' => 'Kategoria',
 
 # Main script and global functions
 'nosuchspecialpage' => 'E página spesial no ta eksistí',
@@ -156,86 +156,86 @@ $messages = array(
 Bo por haña un lista di tur [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error'         => 'Eror',
+'error' => 'Eror',
 'internalerror' => 'Eror interno',
-'cannotdelete'  => 'No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)',
-'badtitle'      => 'Título inválido',
-'badtitletext'  => 'E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.',
-'viewsource'    => 'Wak fuente',
+'cannotdelete' => 'No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)',
+'badtitle' => 'Título inválido',
+'badtitletext' => 'E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.',
+'viewsource' => 'Wak fuente',
 
 # Login and logout pages
-'welcomecreation'            => '== Bon bini, $1! ==
+'welcomecreation' => '== Bon bini, $1! ==
 Bo kuenta ta trahá.
 No lubidá di kambia bo [[Special:Preferences|{{SITENAME}} preferensianan]].',
-'yourname'                   => 'Nòmber di uzadó',
-'yourpassword'               => 'Kontraseña',
-'yourpasswordagain'          => 'Hinka kontraseña atrobe',
-'remembermypassword'         => 'Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'userlogin'                  => 'Traha un kuenta nobo òf outentiká',
-'userlogout'                 => 'Terminá sesion',
-'badretype'                  => 'E kontraseñanan hinká no ta kuadra.',
-'wrongpassword'              => 'Kontraseña no ta korekto. Por fabor purba atrobe.',
-'wrongpasswordempty'         => 'Kontraseña tabata bashí. Por fabor purba atrobe.',
+'yourname' => 'Nòmber di uzadó',
+'yourpassword' => 'Kontraseña',
+'yourpasswordagain' => 'Hinka kontraseña atrobe',
+'remembermypassword' => 'Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'userlogin' => 'Traha un kuenta nobo òf outentiká',
+'userlogout' => 'Terminá sesion',
+'badretype' => 'E kontraseñanan hinká no ta kuadra.',
+'wrongpassword' => 'Kontraseña no ta korekto. Por fabor purba atrobe.',
+'wrongpasswordempty' => 'Kontraseña tabata bashí. Por fabor purba atrobe.',
 'acct_creation_throttle_hit' => 'Bishitantenan na uzando bo IP adrès a traha $1 kuenta den e último 24 ora, lokual ta e máksimo permití den e periodo aki. Esaki ta nifiká ku hendenan uzando e IP adrès aki no por traha mas kuenta na e momentu aki.',
-'emailauthenticated'         => 'Bo e-mail adrès tabata outentiká riba $1.',
-'emailnotauthenticated'      => 'Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.',
-'emailconfirmlink'           => 'Konfirmá bo e-mail adrès.',
-'accountcreated'             => 'Kuenta trahá',
-'accountcreatedtext'         => 'E kuenta di uzadó pa $1 tabata trahá.',
+'emailauthenticated' => 'Bo e-mail adrès tabata outentiká riba $1.',
+'emailnotauthenticated' => 'Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.',
+'emailconfirmlink' => 'Konfirmá bo e-mail adrès.',
+'accountcreated' => 'Kuenta trahá',
+'accountcreatedtext' => 'E kuenta di uzadó pa $1 tabata trahá.',
 
 # Edit pages
-'watchthis'        => 'Observá e página aki',
-'anoneditwarning'  => 'Bo no a outentiká bo mes.
+'watchthis' => 'Observá e página aki',
+'anoneditwarning' => 'Bo no a outentiká bo mes.
 Bo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e historia di kambionan hasí na e página aki.',
-'blockedtitle'     => 'Uzadó ta blokiá',
-'confirmedittext'  => 'Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].',
-'accmailtitle'     => 'Kontraseña mandá.',
-'accmailtext'      => "E kontraseña pa '$1' tabata mandá pa $2.",
-'newarticle'       => '(Nobo)',
+'blockedtitle' => 'Uzadó ta blokiá',
+'confirmedittext' => 'Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].',
+'accmailtitle' => 'Kontraseña mandá.',
+'accmailtext' => "E kontraseña pa '$1' tabata mandá pa $2.",
+'newarticle' => '(Nobo)',
 'anontalkpagetext' => "----''Esaki ta e página di diskushon pa un uzadó anonimo ku no a traha un kuenta ahinda, òf no sa uza e. Ta pa e rason aki nos tin ku uza IP adrès pa identifiká e persona. Diferente uzadó por uza e IP adrès aki. Si bo ta un uzadó anonimo i ta sinti ku komentario irelevante tabata mandá pa bo, por fabor [[Special:UserLogin|registrá un kuenta nobo òf outentiká bo mes]] pa evitá konfushon den futuro.''",
-'yourtext'         => 'Bo teksto',
-'yourdiff'         => 'Diferensianan',
+'yourtext' => 'Bo teksto',
+'yourdiff' => 'Diferensianan',
 
 # History pages
-'currentrev'          => 'Revishon aktual',
+'currentrev' => 'Revishon aktual',
 'currentrevisionlink' => 'wak revishon aktual',
-'cur'                 => 'akt',
-'next'                => 'siguiente',
-'last'                => 'prev',
-'histlegend'          => 'Leyenda: (akt) = diferensia ku vershon aktual,
+'cur' => 'akt',
+'next' => 'siguiente',
+'last' => 'prev',
+'histlegend' => 'Leyenda: (akt) = diferensia ku vershon aktual,
 (prev) = diferensia ku vershon previo, m = editashon menor',
-'histfirst'           => 'Promé',
-'histlast'            => 'Último',
+'histfirst' => 'Promé',
+'histlast' => 'Último',
 
 # Search results
-'nextn'          => 'siguiente {{PLURAL:$1|$1}}',
+'nextn' => 'siguiente {{PLURAL:$1|$1}}',
 'searchhelp-url' => 'Help:Kontenido',
 
 # Preferences page
-'preferences'    => 'Preferensianan',
-'mypreferences'  => 'Mi preferensianan',
+'preferences' => 'Preferensianan',
+'mypreferences' => 'Mi preferensianan',
 'changepassword' => 'Kambia kontraseña',
 'timezonelegend' => 'Zona di tempu',
-'allowemail'     => 'Akseptá e-mail di otro uzadó',
-'youremail'      => 'E-mail:',
-'username'       => 'Nòmber di uzadó:',
-'uid'            => 'ID di uzadó:',
-'yourrealname'   => 'Nòmber berdadero:',
-'yourlanguage'   => 'Idioma:',
-'yourvariant'    => 'Variante:',
-'yournick'       => 'Nòmber di kariño:',
-'badsig'         => 'Firma inválido; kontrolá e HTML uzá.',
+'allowemail' => 'Akseptá e-mail di otro uzadó',
+'youremail' => 'E-mail:',
+'username' => 'Nòmber di uzadó:',
+'uid' => 'ID di uzadó:',
+'yourrealname' => 'Nòmber berdadero:',
+'yourlanguage' => 'Idioma:',
+'yourvariant' => 'Variante:',
+'yournick' => 'Nòmber di kariño:',
+'badsig' => 'Firma inválido; kontrolá e HTML uzá.',
 
 # Recent changes
-'recentchanges'     => 'Kambionan resien',
-'recentchangestext' => 'Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.',
-'rclistfrom'        => 'Mustra kambionan nobo kuminsando for di $1',
-'rcshowhideminor'   => '$1 kambionan menor',
-'rcshowhidebots'    => '$1 botnan',
-'rcshowhideanons'   => '$1 uzadónan anonimo',
-'rclinks'           => 'Mustra último $1 kambionan den último $2 dianan<br />$3',
-'hide'              => 'Skonde',
-'show'              => 'Mustra',
+'recentchanges' => 'Kambionan resien',
+'recentchanges-summary' => 'Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.',
+'rclistfrom' => 'Mustra kambionan nobo kuminsando for di $1',
+'rcshowhideminor' => '$1 kambionan menor',
+'rcshowhidebots' => '$1 botnan',
+'rcshowhideanons' => '$1 uzadónan anonimo',
+'rclinks' => 'Mustra último $1 kambionan den último $2 dianan<br />$3',
+'hide' => 'Skonde',
+'show' => 'Mustra',
 
 # File description page
 'file-anchor-link' => 'Imagen',
@@ -244,76 +244,76 @@ Bo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e
 'unwatchedpages' => 'Páginanan no observá',
 
 # Statistics
-'statistics'              => 'Estadístika',
+'statistics' => 'Estadístika',
 'statistics-header-users' => 'Estadístika di uzadónan',
 
 # Miscellaneous special pages
-'ncategories'             => '$1 {{PLURAL:$1|kategoria|kategorianan}}',
-'uncategorizedpages'      => 'Páginanan no kategorisá',
+'ncategories' => '$1 {{PLURAL:$1|kategoria|kategorianan}}',
+'uncategorizedpages' => 'Páginanan no kategorisá',
 'uncategorizedcategories' => 'Kategorianan no kategorisá',
-'unusedcategories'        => 'Kategorianan no uzá',
-'wantedcategories'        => 'Kategorianan deseá',
-'wantedpages'             => 'Páginanan deseá',
-'ancientpages'            => 'Páginanan mas bieu',
-'unusedcategoriestext'    => 'E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.',
+'unusedcategories' => 'Kategorianan no uzá',
+'wantedcategories' => 'Kategorianan deseá',
+'wantedpages' => 'Páginanan deseá',
+'ancientpages' => 'Páginanan mas bieu',
+'unusedcategoriestext' => 'E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.',
 
 # Special:Log
 'alllogstext' => 'Esaki ta un bista kombiná di registronan.
 Bo por skohe un tipo di registro tambe, òf filtrá e bista ku un nòmber di uzadó òf un título di un artíkulo.',
 
 # Special:AllPages
-'allpages'          => 'Tur página',
-'alphaindexline'    => '$1 pa $2',
-'allpagesfrom'      => 'Mustra páginanan kuminsando na:',
-'allarticles'       => 'Tur artíkulo',
-'allinnamespace'    => 'Tur página (dominio $1)',
+'allpages' => 'Tur página',
+'alphaindexline' => '$1 pa $2',
+'allpagesfrom' => 'Mustra páginanan kuminsando na:',
+'allarticles' => 'Tur artíkulo',
+'allinnamespace' => 'Tur página (dominio $1)',
 'allnotinnamespace' => 'Tur página (no den dominio di $1)',
-'allpagesprev'      => 'Anterior',
-'allpagesnext'      => 'Siguiente',
-'allpagesprefix'    => 'Mustra páginanan kuminsando ku e prefiho:',
+'allpagesprev' => 'Anterior',
+'allpagesnext' => 'Siguiente',
+'allpagesprefix' => 'Mustra páginanan kuminsando ku e prefiho:',
 
 # Special:Categories
-'categories'         => 'Kategorianan',
+'categories' => 'Kategorianan',
 'categoriespagetext' => 'Esaki ta e kategorianan ku ta eksistí den {{SITENAME}}.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
 
 # E-mail user
-'emailuser'       => 'Manda e-mail pa e uzadó aki',
-'emailpage'       => 'Manda e-mail',
-'emailpagetext'   => 'E formulario aki lo manda un e-mail pa e uzadò aki.
+'emailuser' => 'Manda e-mail pa e uzadó aki',
+'emailpage' => 'Manda e-mail',
+'emailpagetext' => 'E formulario aki lo manda un e-mail pa e uzadò aki.
 Bo e-mail adrès (manera ta pará den bo preferensianan) lo aparesé den e e-mail pa e resipiente por respondé na bo direktamente.',
 'defemailsubject' => 'E-mail di {{SITENAME}}',
-'emailfrom'       => 'Di:',
-'emailto'         => 'Pa:',
-'emailsubject'    => 'Tópiko:',
-'emailmessage'    => 'Mensahe:',
-'emailsend'       => 'Manda',
-'emailsent'       => 'E-mail mandá',
-'emailsenttext'   => 'Bo e-mail tabata mandá.',
+'emailfrom' => 'Di:',
+'emailto' => 'Pa:',
+'emailsubject' => 'Tópiko:',
+'emailmessage' => 'Mensahe:',
+'emailsend' => 'Manda',
+'emailsent' => 'E-mail mandá',
+'emailsenttext' => 'Bo e-mail tabata mandá.',
 
 # Watchlist
-'watchlist'         => 'Mi lista di observashon',
-'nowatchlist'       => 'Bo lista di observashon ta bashí.',
-'watchnologintext'  => 'Bo mester [[Special:UserLogin|outentiká bo mes]] pa modifiká bo lista di observashon.',
-'addedwatchtext'    => "E página \"[[:\$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].
+'watchlist' => 'Mi lista di observashon',
+'nowatchlist' => 'Bo lista di observashon ta bashí.',
+'watchnologintext' => 'Bo mester [[Special:UserLogin|outentiká bo mes]] pa modifiká bo lista di observashon.',
+'addedwatchtext' => "E página \"[[:\$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].
 Lo lista kambionan hasí na e página aki i su página di diskushon einan,
 i e página lo aparesé '''vet''' den e [[Special:RecentChanges|lista di kambionan resien]] pa
 e ta mas fásil pa bo mira.
 
 Si despues bo ke kita e página for di bo lista di observashon, primi \"Stop di observá\" den e menú ariba.",
-'watch'             => 'Observá',
-'watchthispage'     => 'Observá e página aki',
-'unwatch'           => 'Stop di observá',
-'unwatchthispage'   => 'Stop di observá',
+'watch' => 'Observá',
+'watchthispage' => 'Observá e página aki',
+'unwatch' => 'Stop di observá',
+'unwatchthispage' => 'Stop di observá',
 'watchlistcontains' => 'Bo lista di observashon tin $1 {{PLURAL:$1|página|páginanan}}.',
-'wlshowlast'        => 'Mustra último $1 oranan $2 dianan $3',
+'wlshowlast' => 'Mustra último $1 oranan $2 dianan $3',
 
 'changed' => 'kambiá',
 'created' => 'trahá',
 
 # Delete
-'confirm'        => 'Konfirmá',
+'confirm' => 'Konfirmá',
 'actioncomplete' => 'Akshon kompletá',
 
 # Protect
@@ -324,28 +324,28 @@ Si despues bo ke kita e página for di bo lista di observashon, primi \"Stop di
 'undelete' => 'Wak páginanan kitá',
 
 # Namespace form on various pages
-'invert'         => 'Invertí selekshon',
+'invert' => 'Invertí selekshon',
 'blanknamespace' => '(Prinsipal)',
 
 # Contributions
 'contributions' => 'Kontribushonnan di uzadó',
-'mycontris'     => 'Mi kontribushonnan',
+'mycontris' => 'Mi kontribushonnan',
 
 # What links here
 'whatlinkshere' => 'Kiko ta link aki',
 
 # Block/unblock
-'blockip'            => 'Blokia uzadó',
-'badipaddress'       => 'IP adrès ta inválido',
-'blockipsuccesssub'  => 'Blokeo eksitoso',
+'blockip' => 'Blokia uzadó',
+'badipaddress' => 'IP adrès ta inválido',
+'blockipsuccesssub' => 'Blokeo eksitoso',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] tabata blokiá.<br />
 Wak e [[Special:BlockList|lista di blokeonan]] pa wak tur blokeo aktivo.',
-'unblockip'          => 'Desblokia uzadó',
-'blocklink'          => 'blokia',
-'unblocklink'        => 'desblokia',
-'contribslink'       => "kontrib'nan",
-'autoblocker'        => 'Bo tabata outomatikamente blokiá pasombra "[[User:$1|$1]]" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: "\'\'\'$2\'\'\'"',
-'unblocklogentry'    => 'a desblokia $1',
+'unblockip' => 'Desblokia uzadó',
+'blocklink' => 'blokia',
+'unblocklink' => 'desblokia',
+'contribslink' => "kontrib'nan",
+'autoblocker' => 'Bo tabata outomatikamente blokiá pasombra "[[User:$1|$1]]" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: "\'\'\'$2\'\'\'"',
+'unblocklogentry' => 'a desblokia $1',
 
 # Move page
 'articleexists' => 'Tin un página ku e título ei kaba, òf e
@@ -353,37 +353,37 @@ título ku bo a skohe no ta válido.
 Por fabor skohe un otro título.',
 
 # Namespace 8 related
-'allmessages'        => 'Mensahenan di sistema',
-'allmessagesname'    => 'Nòmber',
+'allmessages' => 'Mensahenan di sistema',
+'allmessagesname' => 'Nòmber',
 'allmessagesdefault' => 'Teksto predeterminá',
 'allmessagescurrent' => 'Teksto aktual',
-'allmessagestext'    => 'Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.',
+'allmessagestext' => 'Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.',
 
 # Attribution
 'anonymous' => 'Uzadó(nan) anonimo di {{SITENAME}}',
 
 # Browsing diffs
 'previousdiff' => '← Diferensia anterior',
-'nextdiff'     => 'Siguiente diferensia →',
+'nextdiff' => 'Siguiente diferensia →',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tur',
 'namespacesall' => 'tur',
 
 # E-mail address confirmation
-'confirmemail'           => 'Konfirmá e-mail adrès',
-'confirmemail_text'      => 'Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.
+'confirmemail' => 'Konfirmá e-mail adrès',
+'confirmemail_text' => 'Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.
 Primi e boton abou pa manda un e-mail di konfirmashon pa bo e-mail adrès.
 Ora bo haña e e-mail, bo ta sigui e instrukshonnan aden.
 Pa kontrolá si bo ta konfirmá kaba, wak bo preferensianan.',
-'confirmemail_send'      => 'Manda un kódigo di konfirmashon via e-mail.',
-'confirmemail_sent'      => 'E-mail pa konfirmashon mandá.',
-'confirmemail_invalid'   => 'Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.',
+'confirmemail_send' => 'Manda un kódigo di konfirmashon via e-mail.',
+'confirmemail_sent' => 'E-mail pa konfirmashon mandá.',
+'confirmemail_invalid' => 'Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.',
 'confirmemail_needlogin' => 'Bo mester $1 pa konfirmá bo e-mail adrès.',
-'confirmemail_success'   => 'Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.',
-'confirmemail_loggedin'  => 'Bo e-mail adrès ta konfirmá.',
-'confirmemail_subject'   => '{{SITENAME}}: Konfirmashon di e-mail adrès',
-'confirmemail_body'      => 'Un hende, probablemente abo, di IP adrès $1, a registrá e
+'confirmemail_success' => 'Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.',
+'confirmemail_loggedin' => 'Bo e-mail adrès ta konfirmá.',
+'confirmemail_subject' => '{{SITENAME}}: Konfirmashon di e-mail adrès',
+'confirmemail_body' => 'Un hende, probablemente abo, di IP adrès $1, a registrá e
 kuenta "$2" ku e e-mail adrès aki riba {{SITENAME}}.
 
 Pa konfirmá ku e kuenta aki en berdat ta di bo i pa aktivá
index 4fd4af0..c0f167d 100644 (file)
@@ -461,8 +461,6 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 'search-interwiki-caption' => 'Proujé analocq',
 'search-interwiki-default' => '$1 résultats:',
 'search-interwiki-more' => '(pus)',
-'search-mwsuggest-enabled' => 'aveuc avanches',
-'search-mwsuggest-disabled' => "mie d'avanches",
 '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.",
 'powersearch' => 'Érvue avanchée',
 'powersearch-legend' => 'Érvue avanchée',
index 9806086..7943edb 100644 (file)
@@ -412,8 +412,6 @@ Paesswatt fer nau: $2',
 'search-interwiki-caption' => 'Schweschder Projects',
 'search-interwiki-default' => '$1 Results:',
 'search-interwiki-more' => '(weidere)',
-'search-mwsuggest-enabled' => 'mit Vorschläch',
-'search-mwsuggest-disabled' => 'kee Vorschläch',
 'searchall' => 'all',
 'powersearch' => 'Guck uff',
 'powersearch-ns' => 'Guck uff in Blatznaame:',
@@ -1020,4 +1018,7 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 # Feedback
 'feedback-message' => 'Melding:',
 
+# Search suggestions
+'searchsuggest-search' => 'Uffgucke',
+
 );
index b0e023c..aa4e5f9 100644 (file)
@@ -16,224 +16,224 @@ $fallback = 'de';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Links unjastritje:',
-'tog-justify'                 => 'Tatjst em Blocksautz',
-'tog-hideminor'               => 'Tjliene Endarunge ute latste Tiet nich wiese',
-'tog-extendwatchlist'         => 'Moak dee Oppaussied-List jrata en wies aula Endarunge',
-'tog-usenewrc'                => 'Betre Doastalinj (JavaScript es needich)',
-'tog-numberheadings'          => 'Ewaschrefte automatisch numerere',
-'tog-showtoolbar'             => 'Instrumente-Leist wiese (JavaScript)',
-'tog-editondblclick'          => 'Siede mett Dobbeltklick beoabeide (JavaScript)',
-'tog-editsection'             => 'Links tom Beoabeide von eenzelne Aufschnette wiese',
+'tog-underline' => 'Links unjastritje:',
+'tog-justify' => 'Tatjst em Blocksautz',
+'tog-hideminor' => 'Tjliene Endarunge ute latste Tiet nich wiese',
+'tog-extendwatchlist' => 'Moak dee Oppaussied-List jrata en wies aula Endarunge',
+'tog-usenewrc' => 'Betre Doastalinj (JavaScript es needich)',
+'tog-numberheadings' => 'Ewaschrefte automatisch numerere',
+'tog-showtoolbar' => 'Instrumente-Leist wiese (JavaScript)',
+'tog-editondblclick' => 'Siede mett Dobbeltklick beoabeide (JavaScript)',
+'tog-editsection' => 'Links tom Beoabeide von eenzelne Aufschnette wiese',
 'tog-editsectiononrightclick' => 'Eenzelne Aufschnette mett eenem Rajsch-Klick beoabeide (JavaScript)',
-'tog-showtoc'                 => 'Wies dee List mettem Enhault (fe Siede mett meea aus dree Ewaschrefte)',
-'tog-rememberpassword'        => 'Login bewoare, dee Brucka blift aun disem Computer aunjemaldt',
-'tog-previewontop'            => 'Wies Preview bowe em Beoabeide-Fensta',
-'tog-showhiddencats'          => "Wies fe'stoakne Kategorien",
+'tog-showtoc' => 'Wies dee List mettem Enhault (fe Siede mett meea aus dree Ewaschrefte)',
+'tog-rememberpassword' => 'Login bewoare, dee Brucka blift aun disem Computer aunjemaldt',
+'tog-previewontop' => 'Wies Preview bowe em Beoabeide-Fensta',
+'tog-showhiddencats' => "Wies fe'stoakne Kategorien",
 
 'underline-always' => 'Emma',
-'underline-never'  => 'Nienijch',
+'underline-never' => 'Nienijch',
 
 # Dates
-'sunday'        => 'Sindach',
-'monday'        => 'Mondach',
-'tuesday'       => 'Dinjsdach',
-'wednesday'     => 'Medwäakj',
-'thursday'      => 'Donnadach',
-'friday'        => 'Friedach',
-'saturday'      => 'Sinowent',
-'sun'           => 'Sin',
-'mon'           => 'Mon',
-'tue'           => 'Din',
-'wed'           => 'Med',
-'thu'           => 'Don',
-'fri'           => 'Fri',
-'sat'           => 'Sow',
-'january'       => 'Jaunwoa',
-'february'      => 'Feebawoa',
-'march'         => 'Moats',
-'april'         => 'Aprell',
-'may_long'      => 'Mei',
-'june'          => 'Jüni',
-'july'          => 'Jüli',
-'august'        => 'August',
-'september'     => 'Septamba',
-'october'       => 'Oktooba',
-'november'      => 'Nowamba',
-'december'      => 'Deetsamba',
-'january-gen'   => 'Jaunwoa',
-'february-gen'  => 'Feebawoa',
-'march-gen'     => 'Moats',
-'april-gen'     => 'Aprell',
-'may-gen'       => 'Mei',
-'june-gen'      => 'Jüni',
-'july-gen'      => 'Jüli',
-'august-gen'    => 'August',
+'sunday' => 'Sindach',
+'monday' => 'Mondach',
+'tuesday' => 'Dinjsdach',
+'wednesday' => 'Medwäakj',
+'thursday' => 'Donnadach',
+'friday' => 'Friedach',
+'saturday' => 'Sinowent',
+'sun' => 'Sin',
+'mon' => 'Mon',
+'tue' => 'Din',
+'wed' => 'Med',
+'thu' => 'Don',
+'fri' => 'Fri',
+'sat' => 'Sow',
+'january' => 'Jaunwoa',
+'february' => 'Feebawoa',
+'march' => 'Moats',
+'april' => 'Aprell',
+'may_long' => 'Mei',
+'june' => 'Jüni',
+'july' => 'Jüli',
+'august' => 'August',
+'september' => 'Septamba',
+'october' => 'Oktooba',
+'november' => 'Nowamba',
+'december' => 'Deetsamba',
+'january-gen' => 'Jaunwoa',
+'february-gen' => 'Feebawoa',
+'march-gen' => 'Moats',
+'april-gen' => 'Aprell',
+'may-gen' => 'Mei',
+'june-gen' => 'Jüni',
+'july-gen' => 'Jüli',
+'august-gen' => 'August',
 'september-gen' => 'Septamba',
-'october-gen'   => 'Oktooba',
-'november-gen'  => 'Nowamba',
-'december-gen'  => 'Deetsamba',
-'jan'           => 'Jau',
-'feb'           => 'Fee',
-'mar'           => 'Moa',
-'apr'           => 'Apr',
-'may'           => 'Mei',
-'jun'           => 'Jun',
-'jul'           => 'Jul',
-'aug'           => 'Aug',
-'sep'           => 'Sep',
-'oct'           => 'Okt',
-'nov'           => 'Now',
-'dec'           => 'Dez',
+'october-gen' => 'Oktooba',
+'november-gen' => 'Nowamba',
+'december-gen' => 'Deetsamba',
+'jan' => 'Jau',
+'feb' => 'Fee',
+'mar' => 'Moa',
+'apr' => 'Apr',
+'may' => 'Mei',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Aug',
+'sep' => 'Sep',
+'oct' => 'Okt',
+'nov' => 'Now',
+'dec' => 'Dez',
 
 # Categories related messages
-'pagecategories'           => '{{PLURAL:$1|Kategorie|Kategorien}}',
-'category_header'          => 'Siede in Kategorie "$1"',
-'category-media-header'    => 'Bilda in Kategorie "$1"',
-'hidden-categories'        => "{{PLURAL:$1|Fe'stoakne Kategorie|Fe'stoakne Kategorien}}",
+'pagecategories' => '{{PLURAL:$1|Kategorie|Kategorien}}',
+'category_header' => 'Siede in Kategorie "$1"',
+'category-media-header' => 'Bilda in Kategorie "$1"',
+'hidden-categories' => "{{PLURAL:$1|Fe'stoakne Kategorie|Fe'stoakne Kategorien}}",
 'hidden-category-category' => "Fe'stoakne Kategorien",
 
-'about'         => 'Äwa',
-'newwindow'     => '(got in en nie Fensta op)',
-'cancel'        => 'Aufbräakje',
+'about' => 'Äwa',
+'newwindow' => '(got in en nie Fensta op)',
+'cancel' => 'Aufbräakje',
 'moredotdotdot' => 'Mea...',
-'mypage'        => 'Miene Sied',
-'mytalk'        => 'Miene Beredsied',
-'anontalk'      => 'Beredsied fe dise IP',
-'navigation'    => 'Navigatioon',
-'and'           => '&#32;onn',
+'mypage' => 'Miene Sied',
+'mytalk' => 'Miene Beredsied',
+'anontalk' => 'Beredsied fe dise IP',
+'navigation' => 'Navigatioon',
+'and' => '&#32;onn',
 
 # Cologne Blue skin
-'qbfind'         => 'finje',
-'qbedit'         => 'Endre',
-'qbpageoptions'  => 'Dise Sied',
-'qbmyoptions'    => 'Miene Siede',
+'qbfind' => 'finje',
+'qbedit' => 'Endre',
+'qbpageoptions' => 'Dise Sied',
+'qbmyoptions' => 'Miene Siede',
 'qbspecialpages' => "Opp'poate Siede",
 
-'errorpagetitle'   => 'Fäla',
-'returnto'         => 'Trigj no $1.',
-'tagline'          => 'Fonn {{SITENAME}}',
-'help'             => 'Help',
-'search'           => 'Setje',
-'searchbutton'     => 'Setje',
-'go'               => 'Go',
-'searcharticle'    => 'Sied',
-'history'          => "Siedeje'schijchte",
-'history_short'    => 'Jeschicht',
-'updatedmarker'    => 'fresch jemoakt',
+'errorpagetitle' => 'Fäla',
+'returnto' => 'Trigj no $1.',
+'tagline' => 'Fonn {{SITENAME}}',
+'help' => 'Help',
+'search' => 'Setje',
+'searchbutton' => 'Setje',
+'go' => 'Go',
+'searcharticle' => 'Sied',
+'history' => "Siedeje'schijchte",
+'history_short' => 'Jeschicht',
+'updatedmarker' => 'fresch jemoakt',
 'printableversion' => 'Drekdoastalinj',
-'permalink'        => 'Bestendja Link',
-'print'            => 'Drek',
-'edit'             => 'Endre',
-'create'           => 'Moak',
-'editthispage'     => 'Endre dise Sied',
+'permalink' => 'Bestendja Link',
+'print' => 'Drek',
+'edit' => 'Endre',
+'create' => 'Moak',
+'editthispage' => 'Endre dise Sied',
 'create-this-page' => 'Moak dise Sied',
-'delete'           => 'Lasche',
-'deletethispage'   => 'Dise Sied lasche',
-'protect'          => "be'schutse",
-'newpage'          => 'Nie Sied',
-'talkpage'         => 'Beräd de Sied',
+'delete' => 'Lasche',
+'deletethispage' => 'Dise Sied lasche',
+'protect' => "be'schutse",
+'newpage' => 'Nie Sied',
+'talkpage' => 'Beräd de Sied',
 'talkpagelinktext' => 'Beredsied',
-'specialpage'      => 'Spezialsied',
-'personaltools'    => 'Perseenliche Instrumente',
-'postcomment'      => 'Kommentar moake',
-'talk'             => 'Beredsied',
-'views'            => 'Aunsechte',
-'toolbox'          => 'Instrumente',
-'userpage'         => 'Brucka-Sied',
-'projectpage'      => 'Meta-Sied',
-'imagepage'        => 'Datei-Sied',
-'mediawikipage'    => 'Enhault wiese',
-'templatepage'     => 'Sied mett Dokumentenvorlagen wiese',
-'viewhelppage'     => 'Help-Sied wiese',
-'categorypage'     => 'Kategorie-Sied wiese',
-'viewtalkpage'     => 'Diskussioon',
-'otherlanguages'   => 'In aundre Sproake',
-'redirectedfrom'   => '(wieda jeleidt von $1)',
-'redirectpagesub'  => 'Sied tom Wiedaleide',
-'lastmodifiedat'   => "Dise Sied word aum $1, klock $2 daut latzte Mol je'endat.",
-'protectedpage'    => 'Sied mett besondrem Schutz',
-'jumpto'           => 'Sprinj no:',
+'specialpage' => 'Spezialsied',
+'personaltools' => 'Perseenliche Instrumente',
+'postcomment' => 'Kommentar moake',
+'talk' => 'Beredsied',
+'views' => 'Aunsechte',
+'toolbox' => 'Instrumente',
+'userpage' => 'Brucka-Sied',
+'projectpage' => 'Meta-Sied',
+'imagepage' => 'Datei-Sied',
+'mediawikipage' => 'Enhault wiese',
+'templatepage' => 'Sied mett Dokumentenvorlagen wiese',
+'viewhelppage' => 'Help-Sied wiese',
+'categorypage' => 'Kategorie-Sied wiese',
+'viewtalkpage' => 'Diskussioon',
+'otherlanguages' => 'In aundre Sproake',
+'redirectedfrom' => '(wieda jeleidt von $1)',
+'redirectpagesub' => 'Sied tom Wiedaleide',
+'lastmodifiedat' => "Dise Sied word aum $1, klock $2 daut latzte Mol je'endat.",
+'protectedpage' => 'Sied mett besondrem Schutz',
+'jumpto' => 'Sprinj no:',
 'jumptonavigation' => 'Navigatioon',
-'jumptosearch'     => 'Setje',
+'jumptosearch' => 'Setje',
 
 # 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'            => 'Äwa {{SITENAME}}',
-'aboutpage'            => 'Project:Äwa',
-'copyright'            => 'Enhault es to habe unja $1.',
-'currentevents'        => 'Aktuelle Sache',
-'currentevents-url'    => 'Project:Aktuelle Sache',
-'disclaimers'          => 'Impressum',
-'disclaimerpage'       => 'Project:Impressum',
-'edithelp'             => 'Help tom Beoabeide',
-'edithelppage'         => 'Help:Help tom Beoabeide',
-'helppage'             => 'Help:Enhault',
-'mainpage'             => 'Hauptsied',
+'aboutsite' => 'Äwa {{SITENAME}}',
+'aboutpage' => 'Project:Äwa',
+'copyright' => 'Enhault es to habe unja $1.',
+'currentevents' => 'Aktuelle Sache',
+'currentevents-url' => 'Project:Aktuelle Sache',
+'disclaimers' => 'Impressum',
+'disclaimerpage' => 'Project:Impressum',
+'edithelp' => 'Help tom Beoabeide',
+'edithelppage' => 'Help:Help tom Beoabeide',
+'helppage' => 'Help:Enhault',
+'mainpage' => 'Hauptsied',
 'mainpage-description' => 'Hauptsied',
-'policy-url'           => 'Project:Policy',
-'portal'               => 'Jemeenschauftsportal',
-'portal-url'           => 'Project:Jemeenschauftsportal',
-'privacy'              => 'Doteschutz',
-'privacypage'          => 'Project:Doteschutz',
+'policy-url' => 'Project:Policy',
+'portal' => 'Jemeenschauftsportal',
+'portal-url' => 'Project:Jemeenschauftsportal',
+'privacy' => 'Doteschutz',
+'privacypage' => 'Project:Doteschutz',
 
-'badaccess'        => 'Nich utretjende Rajchte',
+'badaccess' => 'Nich utretjende Rajchte',
 'badaccess-group0' => 'Du hast nich daut needje Rajcht fe dise Aktioon.',
 
 'versionrequired' => 'Versioon $1 von MediaWiki es needich',
 
-'retrievedfrom'           => 'Von "$1"',
-'youhavenewmessages'      => 'Dü hast $1 ($2).',
-'newmessageslink'         => 'Niee Norechte',
-'newmessagesdifflink'     => "Latztet mol je'endat",
+'retrievedfrom' => 'Von "$1"',
+'youhavenewmessages' => 'Dü hast $1 ($2).',
+'newmessageslink' => 'Niee Norechte',
+'newmessagesdifflink' => "Latztet mol je'endat",
 'youhavenewmessagesmulti' => 'Du hast niee Norechte bie $1',
-'editsection'             => 'Beoabeide',
-'editold'                 => 'endre',
-'editsectionhint'         => 'Aufschnett beoabeide: $1',
-'toc'                     => 'Enhault',
-'showtoc'                 => 'wiese',
-'hidetoc'                 => "fe'stäakje",
-'thisisdeleted'           => '$1 seene ooda wada trajchtmoake?',
-'viewdeleted'             => '$1 wiese?',
-'feed-invalid'            => 'Abonnement-Typ es nich rechtich.',
-'feed-unavailable'        => 'Daut jefft tjeene Feeds',
-'site-rss-feed'           => '$1 RSS-Feed',
-'site-atom-feed'          => '$1 Atom-Feed',
-'page-rss-feed'           => 'RSS Feed fe "$1"',
-'page-atom-feed'          => 'Atom-Feed fe "$1"',
-'feed-atom'               => 'Atom',
-'red-link-title'          => '$1 (Sied noch nich jemoakt)',
+'editsection' => 'Beoabeide',
+'editold' => 'endre',
+'editsectionhint' => 'Aufschnett beoabeide: $1',
+'toc' => 'Enhault',
+'showtoc' => 'wiese',
+'hidetoc' => "fe'stäakje",
+'thisisdeleted' => '$1 seene ooda wada trajchtmoake?',
+'viewdeleted' => '$1 wiese?',
+'feed-invalid' => 'Abonnement-Typ es nich rechtich.',
+'feed-unavailable' => 'Daut jefft tjeene Feeds',
+'site-rss-feed' => '$1 RSS-Feed',
+'site-atom-feed' => '$1 Atom-Feed',
+'page-rss-feed' => 'RSS Feed fe "$1"',
+'page-atom-feed' => 'Atom-Feed fe "$1"',
+'feed-atom' => 'Atom',
+'red-link-title' => '$1 (Sied noch nich jemoakt)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Sied',
-'nstab-user'      => 'Bruckasied',
-'nstab-media'     => 'Media',
-'nstab-special'   => 'Besondre Sied
+'nstab-main' => 'Sied',
+'nstab-user' => 'Bruckasied',
+'nstab-media' => 'Media',
+'nstab-special' => 'Besondre Sied
 Spezial',
-'nstab-project'   => 'Portalsied',
-'nstab-image'     => 'Datei',
+'nstab-project' => 'Portalsied',
+'nstab-image' => 'Datei',
 'nstab-mediawiki' => 'Norejcht',
-'nstab-help'      => 'Helpsied',
-'nstab-category'  => 'Kategorie',
+'nstab-help' => 'Helpsied',
+'nstab-category' => 'Kategorie',
 
 # Main script and global functions
-'nosuchaction'      => 'Soone Aktioon jefft et nich',
-'nosuchactiontext'  => 'Dee Aktioon von dise URL woat von MediaWiki nich unjastett.',
+'nosuchaction' => 'Soone Aktioon jefft et nich',
+'nosuchactiontext' => 'Dee Aktioon von dise URL woat von MediaWiki nich unjastett.',
 'nosuchspecialpage' => 'Soone Spezialsied jefft et nich',
 'nospecialpagetext' => '<strong>Dee oppjeroopde Spezialsied jefft et nich.</strong>
 
 Aula bruckboare Spezialsiede send bie [[Special:SpecialPages|{{int:specialpages}}]] to finje.',
 
 # General errors
-'error'           => 'Fehla',
-'databaseerror'   => 'Fehla enne Dotebank',
-'dberrortext'     => 'Daut gauf een Syntaxfehla biem Opproope vonne Dotebank.
+'error' => 'Fehla',
+'databaseerror' => 'Fehla enne Dotebank',
+'dberrortext' => 'Daut gauf een Syntaxfehla biem Opproope vonne Dotebank.
 Doa kaun een Probleem enne Software senne.
 Daut latzte Opproope vonne Dotebank we:
 <blockquote><tt>$1</tt></blockquote>
 ute Funktioon "<tt>$2</tt>".
 MySQL mald dem Fehla "<tt>$3: $4</tt>".',
 'laggedslavemode' => 'Oppjepausst: Dee jewesne Sied es nich onbedinjt dee latzte Versioon.',
-'readonly'        => 'Dotebank es jeschlote',
+'readonly' => 'Dotebank es jeschlote',
 'enterlockreason' => 'Nan bitte een Grunt doafea, wurom dee Dotebank jeschlote saul en saj, woolang daut onjefea diere saul',
 'missing-article' => 'Dee Database haft nich dem Tatjst von eene Sied jefunge, woone hee haud finje sullt, mettem Nome "$1" $2.
 
@@ -241,27 +241,27 @@ Dit tjemm jeweenlich soo, wan een oola nich jelaschda Link jebruckt worde es.
 
 Wan daut nich soo es, dan es doa vleicht een Fehla enne Software.
 Bitte schriew eene Notiz aun [[Special:ListUsers/sysop|administrator]], en lot dem dee URL weete.',
-'badtitle'        => 'Schlajchta Titel',
+'badtitle' => 'Schlajchta Titel',
 
 # Login and logout pages
-'yourname'                => 'Bruckanome:',
-'yourpassword'            => 'Pauswot:',
+'yourname' => 'Bruckanome:',
+'yourpassword' => 'Pauswot:',
 'nav-login-createaccount' => 'Aunmalde',
-'loginprompt'             => 'Tom Aunmalde motte Cookies bie {{SITENAME}} aktiviet senne.',
-'userlogin'               => 'Aunmalde',
-'logout'                  => 'Rut hia',
-'userlogout'              => 'Rut hia',
-'notloggedin'             => 'Nich aunjemaldt',
-'nologin'                 => "Hast tjeen Bruckakonto? '''$1'''.",
-'nologinlink'             => 'Nieet Bruckakonto moake',
-'createaccount'           => 'Bruckakonto moake',
-'gotaccount'              => "Hast aul een Bruckakonto? '''$1'''.",
-'gotaccountlink'          => 'Aunmalde',
-'createaccountmail'       => 'Ewa Email',
-'badretype'               => 'Dee beid Pauswed stemme nich ewaeen.',
-'userexists'              => 'Dem Bruckanome haft aul wea.
+'loginprompt' => 'Tom Aunmalde motte Cookies bie {{SITENAME}} aktiviet senne.',
+'userlogin' => 'Aunmalde',
+'logout' => 'Rut hia',
+'userlogout' => 'Rut hia',
+'notloggedin' => 'Nich aunjemaldt',
+'nologin' => "Hast tjeen Bruckakonto? '''$1'''.",
+'nologinlink' => 'Nieet Bruckakonto moake',
+'createaccount' => 'Bruckakonto moake',
+'gotaccount' => "Hast aul een Bruckakonto? '''$1'''.",
+'gotaccountlink' => 'Aunmalde',
+'createaccountmail' => 'Ewa Email',
+'badretype' => 'Dee beid Pauswed stemme nich ewaeen.',
+'userexists' => 'Dem Bruckanome haft aul wea.
 Bitte nemm eenen aundren.',
-'loginlanguagelabel'      => 'Sproak: $1',
+'loginlanguagelabel' => 'Sproak: $1',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Bruckernome:',
@@ -270,32 +270,32 @@ Bitte nemm eenen aundren.',
 'media_tip' => 'Datei-Link',
 
 # Edit pages
-'summary'              => 'Toofotinj:',
-'subject'              => 'Teema:',
-'minoredit'            => 'Dit es eene tjliene Endanis.',
-'watchthis'            => 'Paus op dise Sied op',
-'savearticle'          => 'Sied bewoare',
-'preview'              => 'Preview',
-'showpreview'          => 'Wies Preview',
-'showlivepreview'      => 'Live-Preview',
-'showdiff'             => 'Endanisse wiese',
-'anoneditwarning'      => "'''Paus opp:''' Du best nich aunjemaldt. Diene IP-Adras woat enne Versioonsjeschicht oppbewoat en es emma to seene.",
-'missingsummary'       => "'''Dentj draun:''' Du hast tjeene Toopfotinj jemoakt. Wan du wada opp Bewoare klickst, woat diene Endanis ohne Toopfotinj ewanohme.",
-'missingcommenttext'   => 'Bitte schriew eene korte Toopfotinj.',
+'summary' => 'Toofotinj:',
+'subject' => 'Teema:',
+'minoredit' => 'Dit es eene tjliene Endanis.',
+'watchthis' => 'Paus op dise Sied op',
+'savearticle' => 'Sied bewoare',
+'preview' => 'Preview',
+'showpreview' => 'Wies Preview',
+'showlivepreview' => 'Live-Preview',
+'showdiff' => 'Endanisse wiese',
+'anoneditwarning' => "'''Paus opp:''' Du best nich aunjemaldt. Diene IP-Adras woat enne Versioonsjeschicht oppbewoat en es emma to seene.",
+'missingsummary' => "'''Dentj draun:''' Du hast tjeene Toopfotinj jemoakt. Wan du wada opp Bewoare klickst, woat diene Endanis ohne Toopfotinj ewanohme.",
+'missingcommenttext' => 'Bitte schriew eene korte Toopfotinj.',
 'missingcommentheader' => "'''Dentj draun:''' Du hast tjeen Teema em Plautz \"Teema\" jeschrewe. Wan du wada opp Sied Bewoare klickst, woat diene Oabeit ohne Teema bewoat.",
-'summary-preview'      => 'Toopfotinj-Preview:',
-'subject-preview'      => 'Teema-Preview:',
-'blockedtitle'         => 'Dis Brucka es jeblockt.',
-'newarticle'           => '(Nie)',
-'template-protected'   => "(be'schutst)",
+'summary-preview' => 'Toopfotinj-Preview:',
+'subject-preview' => 'Teema-Preview:',
+'blockedtitle' => 'Dis Brucka es jeblockt.',
+'newarticle' => '(Nie)',
+'template-protected' => "(be'schutst)",
 
 # History pages
-'revisionasof'  => 'Versioon von $1',
+'revisionasof' => 'Versioon von $1',
 'revision-info' => 'Versioon von $1 von $2',
-'cur'           => 'dise',
-'last'          => 'latste',
-'page_first'    => 'easchte',
-'page_last'     => 'latste',
+'cur' => 'dise',
+'last' => 'latste',
+'page_first' => 'easchte',
+'page_last' => 'latste',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 omm $2',
@@ -304,79 +304,77 @@ Bitte nemm eenen aundren.',
 'rev-delundel' => 'wies/vestopp',
 
 # Diffs
-'lineno'   => 'Lien $1:',
+'lineno' => 'Lien $1:',
 'editundo' => 'trigjsate',
 
 # Search results
-'searchresults'             => 'Setj Resultaute',
-'searchresults-title'       => 'Setj Resultaute fe "$1"',
-'searchsubtitle'            => 'Du sochst \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|all pages starting with "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
-'prevn'                     => '{{PLURAL:$1|$1}} ferhäa',
-'nextn'                     => 'näakjste {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Tjitj ($1 {{int:pipe-separator}} $2) ($3)',
-'searchhelp-url'            => 'Help:Enhault',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 Wot|$2 Wed}})',
-'search-mwsuggest-enabled'  => 'mett Veaschlag',
-'search-mwsuggest-disabled' => 'Tjeen Veaschlag',
-'powersearch'               => 'Bätre Sääk',
-'powersearch-legend'        => 'Betret Setje',
-'powersearch-field'         => 'Setj no',
+'searchresults' => 'Setj Resultaute',
+'searchresults-title' => 'Setj Resultaute fe "$1"',
+'searchsubtitle' => 'Du sochst \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|all pages starting with "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
+'prevn' => '{{PLURAL:$1|$1}} ferhäa',
+'nextn' => 'näakjste {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Tjitj ($1 {{int:pipe-separator}} $2) ($3)',
+'searchhelp-url' => 'Help:Enhault',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Wot|$2 Wed}})',
+'powersearch' => 'Bätre Sääk',
+'powersearch-legend' => 'Betret Setje',
+'powersearch-field' => 'Setj no',
 
 # Preferences page
-'preferences'          => 'Ennstalinje',
-'mypreferences'        => 'Miene Ennstalinje',
-'youremail'            => 'Email:',
-'username'             => 'Bruckanome:',
-'uid'                  => 'Brucka-ID:',
+'preferences' => 'Ennstalinje',
+'mypreferences' => 'Miene Ennstalinje',
+'youremail' => 'Email:',
+'username' => 'Bruckanome:',
+'uid' => 'Brucka-ID:',
 'prefs-memberingroups' => 'Mettjliet von {{PLURAL:$1|group|groups}}:',
-'yourrealname'         => 'Ajchta Nome:',
-'yourlanguage'         => 'Sproak:',
+'yourrealname' => 'Ajchta Nome:',
+'yourlanguage' => 'Sproak:',
 
 # Recent changes
-'nchanges'        => '$1 {{PLURAL:$1|Endaniss|Endanisse}}',
-'recentchanges'   => 'Nieste Endanisse',
+'nchanges' => '$1 {{PLURAL:$1|Endaniss|Endanisse}}',
+'recentchanges' => 'Nieste Endanisse',
 'rcshowhideminor' => '$1 kjleene Endanisse',
 'rcshowhideanons' => '$1 nomeloose Bruckasch',
-'rcshowhidemine'  => '$1 miene Endanisse',
-'rclinks'         => 'Wies de latste $1 Endanisse in de latste $2 Doag<br />$3',
-'diff'            => 'Unjascheet',
-'hist'            => 'Jeschicht',
-'hide'            => "Fe'stäakje",
-'show'            => 'Wiese',
+'rcshowhidemine' => '$1 miene Endanisse',
+'rclinks' => 'Wies de latste $1 Endanisse in de latste $2 Doag<br />$3',
+'diff' => 'Unjascheet',
+'hist' => 'Jeschicht',
+'hide' => "Fe'stäakje",
+'show' => 'Wiese',
 'minoreditletter' => 'k',
-'newpageletter'   => 'N',
-'boteditletter'   => 'b',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'          => 'Endarunge aun velinkte Siede',
-'recentchangeslinked-feed'     => 'Endarunge aun velinkte Siede',
-'recentchangeslinked-toolbox'  => 'Endarunge aun velinkte Siede',
-'recentchangeslinked-title'    => 'Endarunge aun Siede, woone von "$1" velinkt send',
+'recentchangeslinked' => 'Endarunge aun velinkte Siede',
+'recentchangeslinked-feed' => 'Endarunge aun velinkte Siede',
+'recentchangeslinked-toolbox' => 'Endarunge aun velinkte Siede',
+'recentchangeslinked-title' => 'Endarunge aun Siede, woone von "$1" velinkt send',
 'recentchangeslinked-noresult' => 'Em utjesochten Tietrum es aun dee velinkte Siede nuscht aundasch jemoakt worde.',
-'recentchangeslinked-summary'  => "Dit es eene List mette latzte Endarunge aune velinkte Siede (ooda bie Kategorien von Mettjlieda von dise Kategorie). Dee Siede opp diene [[Special:Watchlist|your watchlist]] woare '''fat''' jewese.",
-'recentchangeslinked-page'     => 'Siednome:',
-'recentchangeslinked-to'       => 'Wies Endarunge opp Siede, woone mett dise Sied velinkt send',
+'recentchangeslinked-summary' => "Dit es eene List mette latzte Endarunge aune velinkte Siede (ooda bie Kategorien von Mettjlieda von dise Kategorie). Dee Siede opp diene [[Special:Watchlist|your watchlist]] woare '''fat''' jewese.",
+'recentchangeslinked-page' => 'Siednome:',
+'recentchangeslinked-to' => 'Wies Endarunge opp Siede, woone mett dise Sied velinkt send',
 
 # Upload
-'upload'                     => 'Nopplode',
-'uploadbtn'                  => 'Datei nopplode',
-'reuploaddesc'               => 'Stopp Nopplode en tridj no dee Nopplode-Sied',
-'uploadnologin'              => 'Nich aunjemaldt',
-'uploadnologintext'          => 'Du mottst [[Special:UserLogin|aunjemaldt senne]], wan Dateie nopplode wellst.',
-'upload_directory_missing'   => 'Dee Nopplode-Vetetjnis ($1) fehlt en kunn vom Webserver nich jemoakt woare.',
+'upload' => 'Nopplode',
+'uploadbtn' => 'Datei nopplode',
+'reuploaddesc' => 'Stopp Nopplode en tridj no dee Nopplode-Sied',
+'uploadnologin' => 'Nich aunjemaldt',
+'uploadnologintext' => 'Du mottst [[Special:UserLogin|aunjemaldt senne]], wan Dateie nopplode wellst.',
+'upload_directory_missing' => 'Dee Nopplode-Vetetjnis ($1) fehlt en kunn vom Webserver nich jemoakt woare.',
 'upload_directory_read_only' => 'Dee Webserver haft tjeene Schriewrajchte fe daut Nopplode-Vetetjnis ($1).',
-'uploaderror'                => 'Fehla biem Nopplode',
+'uploaderror' => 'Fehla biem Nopplode',
 
 # Special:ListFiles
 'listfiles_user' => 'Brucker',
 
 # File description page
-'file-anchor-link'    => 'Datei',
-'filehist'            => 'Dokument-Jeschicht',
-'filehist-datetime'   => 'Tiet',
-'filehist-user'       => 'Brucker',
+'file-anchor-link' => 'Datei',
+'filehist' => 'Dokument-Jeschicht',
+'filehist-datetime' => 'Tiet',
+'filehist-user' => 'Brucker',
 'filehist-dimensions' => 'Moten',
-'imagelinks'          => 'Links',
+'imagelinks' => 'Links',
 
 # MIME search
 'mimesearch' => 'MIME-Säkj',
@@ -395,87 +393,87 @@ Bitte nemm eenen aundren.',
 'brokenredirects' => "Ka'put Wiedawiesinj",
 
 # Miscellaneous special pages
-'nbytes'            => '$1 {{PLURAL:$1|Byte|Bytes}}',
-'nlinks'            => '$1 {{PLURAL:$1|Link|Links}}',
-'wantedpages'       => 'Needijche Siede',
-'shortpages'        => 'Korte Siede',
-'longpages'         => 'Lange Siede',
-'protectedpages'    => "Be'schutste Siede",
-'newpages'          => 'Nie Siede',
+'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}',
+'nlinks' => '$1 {{PLURAL:$1|Link|Links}}',
+'wantedpages' => 'Needijche Siede',
+'shortpages' => 'Korte Siede',
+'longpages' => 'Lange Siede',
+'protectedpages' => "Be'schutste Siede",
+'newpages' => 'Nie Siede',
 'newpages-username' => 'Bruckernome:',
-'ancientpages'      => 'Ellste Siede',
+'ancientpages' => 'Ellste Siede',
 
 # Special:Log
-'specialloguserlabel'  => 'Brucker:',
+'specialloguserlabel' => 'Brucker:',
 'speciallogtitlelabel' => 'Tietel:',
-'all-logs-page'        => 'Aule Berejchte',
+'all-logs-page' => 'Aule Berejchte',
 
 # Special:AllPages
-'allpages'       => 'Aule Siede',
+'allpages' => 'Aule Siede',
 'alphaindexline' => '$1 bott $2',
-'allpagesfrom'   => 'Wies Siede fonn auf:',
-'allarticles'    => 'Aule Siede',
+'allpagesfrom' => 'Wies Siede fonn auf:',
+'allarticles' => 'Aule Siede',
 
 # Watchlist
-'mywatchlist'   => 'Miene Oppaussied',
-'watch'         => 'Oppausse',
+'mywatchlist' => 'Miene Oppaussied',
+'watch' => 'Oppausse',
 'watchthispage' => 'Op dise Sied oppausse',
-'unwatch'       => 'Nijch mea oppausse',
+'unwatch' => 'Nijch mea oppausse',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Oppausse...',
+'watching' => 'Oppausse...',
 'unwatching' => 'Nijch mea oppausse......',
 
 # Delete
-'deleteotherreason'     => 'Aundra Grunt:',
+'deleteotherreason' => 'Aundra Grunt:',
 'deletereasonotherlist' => 'Aundre Grunt',
 
 # Rollback
 'rollbacklink' => 'trigj rolle',
 
 # Protect
-'protectexpiry'          => 'Ütgontiet:',
+'protectexpiry' => 'Ütgontiet:',
 'protect-expiry-options' => '2 Stunde:2 hours,1 Dach:1 day,1 Wäakj:1 week,2 Wäakje:2 weeks,1 Moonat:1 month,3 Moonate:3 months,6 Moonate:6 months,1 Joa:1 year,one Enj:infinite',
-'restriction-type'       => "Er'laubniss:",
+'restriction-type' => "Er'laubniss:",
 
 # Namespace form on various pages
-'namespace'      => 'Nomerum:',
+'namespace' => 'Nomerum:',
 'blanknamespace' => '(Haupt)',
 
 # Contributions
 'mycontris' => 'Mien Biedroage',
-'uctop'     => '(bowe)',
-'month'     => 'Fonn Moonat (onn ferdäm):',
-'year'      => 'Fonn Joa (onn ferdäm):',
+'uctop' => '(bowe)',
+'month' => 'Fonn Moonat (onn ferdäm):',
+'year' => 'Fonn Joa (onn ferdäm):',
 
 'sp-contributions-talk' => 'Beredsied',
 
 # What links here
-'whatlinkshere'       => 'Links opp dise Sied',
+'whatlinkshere' => 'Links opp dise Sied',
 'whatlinkshere-title' => 'Siede, woone opp "$1" eenen Link habe',
-'whatlinkshere-page'  => 'Sied:',
-'linkshere'           => "Dee neachste Siede habe eenen Link opp '''[[:$1]]''':",
-'nolinkshere'         => "Tjeene Sied haft eenen Link opp '''[[:$1]]'''.",
-'nolinkshere-ns'      => "Tjeene Siede habe eenen Link opp '''[[:$1]]''' em utjesochten Nomesrum.",
-'isredirect'          => 'Wiedaleid-Sied',
-'istemplate'          => 'Vealoag-Enbinje (Inklusioon)',
-'isimage'             => 'Dotei-Link',
+'whatlinkshere-page' => 'Sied:',
+'linkshere' => "Dee neachste Siede habe eenen Link opp '''[[:$1]]''':",
+'nolinkshere' => "Tjeene Sied haft eenen Link opp '''[[:$1]]'''.",
+'nolinkshere-ns' => "Tjeene Siede habe eenen Link opp '''[[:$1]]''' em utjesochten Nomesrum.",
+'isredirect' => 'Wiedaleid-Sied',
+'istemplate' => 'Vealoag-Enbinje (Inklusioon)',
+'isimage' => 'Dotei-Link',
 'whatlinkshere-links' => '← Links',
 
 # Block/unblock
-'ipboptions'       => '2 Stunde:2 hours,1 Dach:1 day,3 Doag:3 days,1 Wäakj:1 week,2 Wäakje:2 weeks,1 Moonat:1 month,3 Moonate:3 months,6 Moonate:6 months,1 Joa:1 year,one Enj:infinite',
-'blocklink'        => 'blocke',
-'unblocklink'      => 'frie jewe',
+'ipboptions' => '2 Stunde:2 hours,1 Dach:1 day,3 Doag:3 days,1 Wäakj:1 week,2 Wäakje:2 weeks,1 Moonat:1 month,3 Moonate:3 months,6 Moonate:6 months,1 Joa:1 year,one Enj:infinite',
+'blocklink' => 'blocke',
+'unblocklink' => 'frie jewe',
 'change-blocklink' => 'Daut Blocke endre',
-'contribslink'     => 'Biedrachs',
-'autoblocker'      => 'Automatisch jeblockt, wiels diene IP-Adras soo es aus bie "[[User:$1|$1]]".
+'contribslink' => 'Biedrachs',
+'autoblocker' => 'Automatisch jeblockt, wiels diene IP-Adras soo es aus bie "[[User:$1|$1]]".
 Dee Grunt es: "$2"',
-'blocklogpage'     => 'Block-Logbok',
-'blocklogentry'    => 'haft [[$1]] jeblockt fe dee Tiet $2 $3',
+'blocklogpage' => 'Block-Logbok',
+'blocklogentry' => 'haft [[$1]] jeblockt fe dee Tiet $2 $3',
 'reblock-logentry' => "haft dee Block-Enstalinj fe [[$1]] je'endat fe dee Tiet $2 $3",
 
 # Move page
-'newtitle'   => 'No nie Tietel:',
+'newtitle' => 'No nie Tietel:',
 'move-watch' => 'Opp dise Sied oppausse',
 'movereason' => 'Grunt:',
 'revertmove' => 'trigj dreie',
@@ -487,115 +485,115 @@ Dee Grunt es: "$2"',
 'thumbnail-more' => 'Vejratre',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Diene Bruckersied',
-'tooltip-pt-mytalk'               => 'Diene Beredsied',
-'tooltip-pt-preferences'          => 'Miene Ennstalinje',
-'tooltip-pt-watchlist'            => 'List fonn Siede, op de du oppausst, waut sikj endat',
-'tooltip-pt-mycontris'            => 'List fonn diene Biedroage',
-'tooltip-pt-login'                => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
-'tooltip-pt-anonlogin'            => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
-'tooltip-pt-logout'               => 'Rut hia',
-'tooltip-ca-talk'                 => 'Diskussioon ewa dem Ennhault vonne Sied',
-'tooltip-ca-edit'                 => 'Du kaunst dise Sied beoabeide. Bitte verrem Bewoare dee Eschtmolseene-Funktioon brucke.',
-'tooltip-ca-addsection'           => 'Eenen Kommentar to dise Diskussioon biedroage.',
-'tooltip-ca-viewsource'           => 'Dise Sied blifft bewoat. Du kaunst die dem Tjwaltatjst aunseene.',
-'tooltip-ca-history'              => 'Ellre Versioone von dise Sied.',
-'tooltip-ca-protect'              => "Dise Sied be'schutse",
-'tooltip-ca-delete'               => 'Dise Sied lasche',
-'tooltip-ca-undelete'             => 'Moak dee Sied wada soo, aus see verrem Lasche utleet.',
-'tooltip-ca-move'                 => 'Dise Sied veschuwe',
-'tooltip-ca-watch'                => 'Dise Sied bie miene Oppaussied-Liste doatoo doone',
-'tooltip-ca-unwatch'              => 'Dise Sied vonne perseenliche Oppaussied-Liste fot nehme',
-'tooltip-search'                  => 'Setje op {{SITENAME}}',
-'tooltip-search-go'               => 'Go opp dee Sied, woone jenau disem Nome haft',
-'tooltip-search-fulltext'         => 'Setj no Siede mett soonem Tatjst',
-'tooltip-n-mainpage'              => 'Besäkj de Hauptsied',
-'tooltip-n-mainpage-description'  => 'Besetj dee Hauptsied',
-'tooltip-n-portal'                => 'Ewa daut Portal, waut du doone kaunst, woo waut to finje es',
-'tooltip-n-currentevents'         => 'Hinjagruntinformatioone ewa aktuelle Sache finje',
-'tooltip-n-recentchanges'         => 'List mette latste Endanisse em Wiki.',
-'tooltip-n-randompage'            => 'Wies eene toofaulje Sied',
-'tooltip-n-help'                  => 'Helpsied wiese',
-'tooltip-t-whatlinkshere'         => 'List mett aula Siede, woone hia han wiese',
-'tooltip-t-recentchangeslinked'   => 'Latste Endanisse aun Siede, woone mett dise eenen Link habe',
-'tooltip-feed-rss'                => 'RSS-Feed fe dise Sied',
-'tooltip-feed-atom'               => 'Atom-Feed fe dise Sied',
-'tooltip-t-contributions'         => 'List mett Biedroag von disem Brucka wiese',
-'tooltip-t-emailuser'             => 'Eene Email aun disem Brucka schetje',
-'tooltip-t-upload'                => 'Dateie nopplode',
-'tooltip-t-specialpages'          => 'List mett aula Spezialsiede',
-'tooltip-t-print'                 => 'Dretjboare Versioon von dise Sied',
-'tooltip-t-permalink'             => 'Bestendja Link no dise Versioon vonne Sied',
-'tooltip-ca-nstab-main'           => 'Sied-Ennhault wiese',
-'tooltip-ca-nstab-user'           => 'Bruckasied wiese',
-'tooltip-ca-nstab-media'          => 'Mediensied wiese',
-'tooltip-ca-nstab-special'        => "Dit es eene Spezialsied. Dee kaun nich je'endat woare.",
-'tooltip-ca-nstab-project'        => 'Portalsied wiese',
-'tooltip-ca-nstab-image'          => 'Datei-Sied wiese',
-'tooltip-ca-nstab-mediawiki'      => 'Systeem-Tatjst wiese',
-'tooltip-ca-nstab-template'       => 'Vorlage/Template wiese',
-'tooltip-ca-nstab-help'           => 'Helpsied wiese',
-'tooltip-ca-nstab-category'       => 'Kategorie-Sied wiese',
-'tooltip-minoredit'               => "Dise Ve'endrung aus tjlien markiere",
-'tooltip-save'                    => 'Endarunge bewoare',
-'tooltip-preview'                 => 'Verut-Aunsecht vonne Endarunge aun dise Sied. Bitte verrem Bewoare brucke!',
-'tooltip-diff'                    => 'Endarunge aum Tajst wiese',
+'tooltip-pt-userpage' => 'Diene Bruckersied',
+'tooltip-pt-mytalk' => 'Diene Beredsied',
+'tooltip-pt-preferences' => 'Miene Ennstalinje',
+'tooltip-pt-watchlist' => 'List fonn Siede, op de du oppausst, waut sikj endat',
+'tooltip-pt-mycontris' => 'List fonn diene Biedroage',
+'tooltip-pt-login' => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
+'tooltip-pt-anonlogin' => 'Aunmalde wudd scheen senne, es oba nich onbedinjt needich.',
+'tooltip-pt-logout' => 'Rut hia',
+'tooltip-ca-talk' => 'Diskussioon ewa dem Ennhault vonne Sied',
+'tooltip-ca-edit' => 'Du kaunst dise Sied beoabeide. Bitte verrem Bewoare dee Eschtmolseene-Funktioon brucke.',
+'tooltip-ca-addsection' => 'Eenen Kommentar to dise Diskussioon biedroage.',
+'tooltip-ca-viewsource' => 'Dise Sied blifft bewoat. Du kaunst die dem Tjwaltatjst aunseene.',
+'tooltip-ca-history' => 'Ellre Versioone von dise Sied.',
+'tooltip-ca-protect' => "Dise Sied be'schutse",
+'tooltip-ca-delete' => 'Dise Sied lasche',
+'tooltip-ca-undelete' => 'Moak dee Sied wada soo, aus see verrem Lasche utleet.',
+'tooltip-ca-move' => 'Dise Sied veschuwe',
+'tooltip-ca-watch' => 'Dise Sied bie miene Oppaussied-Liste doatoo doone',
+'tooltip-ca-unwatch' => 'Dise Sied vonne perseenliche Oppaussied-Liste fot nehme',
+'tooltip-search' => 'Setje op {{SITENAME}}',
+'tooltip-search-go' => 'Go opp dee Sied, woone jenau disem Nome haft',
+'tooltip-search-fulltext' => 'Setj no Siede mett soonem Tatjst',
+'tooltip-n-mainpage' => 'Besäkj de Hauptsied',
+'tooltip-n-mainpage-description' => 'Besetj dee Hauptsied',
+'tooltip-n-portal' => 'Ewa daut Portal, waut du doone kaunst, woo waut to finje es',
+'tooltip-n-currentevents' => 'Hinjagruntinformatioone ewa aktuelle Sache finje',
+'tooltip-n-recentchanges' => 'List mette latste Endanisse em Wiki.',
+'tooltip-n-randompage' => 'Wies eene toofaulje Sied',
+'tooltip-n-help' => 'Helpsied wiese',
+'tooltip-t-whatlinkshere' => 'List mett aula Siede, woone hia han wiese',
+'tooltip-t-recentchangeslinked' => 'Latste Endanisse aun Siede, woone mett dise eenen Link habe',
+'tooltip-feed-rss' => 'RSS-Feed fe dise Sied',
+'tooltip-feed-atom' => 'Atom-Feed fe dise Sied',
+'tooltip-t-contributions' => 'List mett Biedroag von disem Brucka wiese',
+'tooltip-t-emailuser' => 'Eene Email aun disem Brucka schetje',
+'tooltip-t-upload' => 'Dateie nopplode',
+'tooltip-t-specialpages' => 'List mett aula Spezialsiede',
+'tooltip-t-print' => 'Dretjboare Versioon von dise Sied',
+'tooltip-t-permalink' => 'Bestendja Link no dise Versioon vonne Sied',
+'tooltip-ca-nstab-main' => 'Sied-Ennhault wiese',
+'tooltip-ca-nstab-user' => 'Bruckasied wiese',
+'tooltip-ca-nstab-media' => 'Mediensied wiese',
+'tooltip-ca-nstab-special' => "Dit es eene Spezialsied. Dee kaun nich je'endat woare.",
+'tooltip-ca-nstab-project' => 'Portalsied wiese',
+'tooltip-ca-nstab-image' => 'Datei-Sied wiese',
+'tooltip-ca-nstab-mediawiki' => 'Systeem-Tatjst wiese',
+'tooltip-ca-nstab-template' => 'Vorlage/Template wiese',
+'tooltip-ca-nstab-help' => 'Helpsied wiese',
+'tooltip-ca-nstab-category' => 'Kategorie-Sied wiese',
+'tooltip-minoredit' => "Dise Ve'endrung aus tjlien markiere",
+'tooltip-save' => 'Endarunge bewoare',
+'tooltip-preview' => 'Verut-Aunsecht vonne Endarunge aun dise Sied. Bitte verrem Bewoare brucke!',
+'tooltip-diff' => 'Endarunge aum Tajst wiese',
 'tooltip-compareselectedversions' => 'Unjascheede wiese tweschen dee beid jewehlde Versioone von dise Sied.',
-'tooltip-watch'                   => 'Doo dise Sied bie diene Oobacht-List doatoo',
-'tooltip-recreate'                => 'Moak dee Sied wada fresh, uck wan se wea jelascht haft.',
-'tooltip-upload'                  => 'Nopplode aunfange',
-'tooltip-rollback'                => '"Rollback" dreit dee Endarung(e) von dise Sied mett eenem Klick wada tridj bettem latsten Biedrach.',
-'tooltip-undo'                    => 'Moakt bloos dise eene Endarung tridj en wiest daut Resultaut en eenem Eschtmolseene-Fensta, doamett enne Toopfotinj een Grunt jenant woare kaun.',
+'tooltip-watch' => 'Doo dise Sied bie diene Oobacht-List doatoo',
+'tooltip-recreate' => 'Moak dee Sied wada fresh, uck wan se wea jelascht haft.',
+'tooltip-upload' => 'Nopplode aunfange',
+'tooltip-rollback' => '"Rollback" dreit dee Endarung(e) von dise Sied mett eenem Klick wada tridj bettem latsten Biedrach.',
+'tooltip-undo' => 'Moakt bloos dise eene Endarung tridj en wiest daut Resultaut en eenem Eschtmolseene-Fensta, doamett enne Toopfotinj een Grunt jenant woare kaun.',
 
 # Stylesheets
-'common.css'      => '/* CSS opp dise Sted woat opp aula Skins wirtje */',
-'standard.css'    => '/* CSS opp dise Sted wirtjt opp dem Standard-Skin */',
-'nostalgia.css'   => '/* CSS opp dise Sted wirtjt opp daut Nostalgia-Skin */',
+'common.css' => '/* CSS opp dise Sted woat opp aula Skins wirtje */',
+'standard.css' => '/* CSS opp dise Sted wirtjt opp dem Standard-Skin */',
+'nostalgia.css' => '/* CSS opp dise Sted wirtjt opp daut Nostalgia-Skin */',
 'cologneblue.css' => '/* CSS opp dise Sted wirtjt opp daut Keloonsch-Blau-Skin */',
-'monobook.css'    => '/* CSS opp dise Sted wirtjt opp daut Monobook-Skin */',
-'myskin.css'      => '/* CSS opp dise Sted wirtjt opp daut MySkin-Skin */',
-'chick.css'       => '/* CSS opp dise Sted wirtjt opp daut Chick-Skin */',
-'simple.css'      => '/* CSS opp dise Sted wirtjt opp daut Simple-Skin */',
-'modern.css'      => '/* CSS opp dise Sted wirtjt opp daut Modern-Skin */',
-'print.css'       => '/* CSS opp dise Sted woat daut Utkome vom Dretje aundasch moake */',
+'monobook.css' => '/* CSS opp dise Sted wirtjt opp daut Monobook-Skin */',
+'myskin.css' => '/* CSS opp dise Sted wirtjt opp daut MySkin-Skin */',
+'chick.css' => '/* CSS opp dise Sted wirtjt opp daut Chick-Skin */',
+'simple.css' => '/* CSS opp dise Sted wirtjt opp daut Simple-Skin */',
+'modern.css' => '/* CSS opp dise Sted wirtjt opp daut Modern-Skin */',
+'print.css' => '/* CSS opp dise Sted woat daut Utkome vom Dretje aundasch moake */',
 
 # Scripts
-'common.js'      => '/* Daut neachste JavaScript woat fe aula Brucka jelode. */',
-'standard.js'    => '/* Daut neachste JavaScript woat fe Brucka mett Standard-Skin jelode. */',
-'nostalgia.js'   => '/* Daut neachste JavaScript woat fe Brucka mett Nostalgie-Skin jelode. */',
+'common.js' => '/* Daut neachste JavaScript woat fe aula Brucka jelode. */',
+'standard.js' => '/* Daut neachste JavaScript woat fe Brucka mett Standard-Skin jelode. */',
+'nostalgia.js' => '/* Daut neachste JavaScript woat fe Brucka mett Nostalgie-Skin jelode. */',
 'cologneblue.js' => '/* Daut neachste JavaScript woat fe Brucka mett Keloonsch-Blau-Skin jelode */',
-'monobook.js'    => '/* Daut neachste JavaScript woat fe Brucka mett Monobook-Skin jelode */',
-'myskin.js'      => '/* Daut neachste JavaScript woat fe Brucka mett MySkin-Skin jelode */',
-'chick.js'       => '/* Daut neachste JavaScript woat fe Brucka mett Chick-Skin jelode */',
-'simple.js'      => '/* Daut neachste JavaScript woat fe Brucka mett Eenfach-Skin jelode */',
-'modern.js'      => '/* Daut neachste JavaScript woat fe Brucka mett Modern-Skin jelode. */',
+'monobook.js' => '/* Daut neachste JavaScript woat fe Brucka mett Monobook-Skin jelode */',
+'myskin.js' => '/* Daut neachste JavaScript woat fe Brucka mett MySkin-Skin jelode */',
+'chick.js' => '/* Daut neachste JavaScript woat fe Brucka mett Chick-Skin jelode */',
+'simple.js' => '/* Daut neachste JavaScript woat fe Brucka mett Eenfach-Skin jelode */',
+'modern.js' => '/* Daut neachste JavaScript woat fe Brucka mett Modern-Skin jelode. */',
 
 # Metadata
 'notacceptable' => 'Dee Wiki-Server kaun dee Dote nich soo reedmoake, daut dien Jereetschauft dee lese kaun.',
 
 # Attribution
-'anonymous'        => 'Onbekaunda Brucka {{PLURAL:$1|user|users}} von {{SITENAME}}',
-'siteuser'         => '{{SITENAME}}-Brucka $1',
+'anonymous' => 'Onbekaunda Brucka {{PLURAL:$1|user|users}} von {{SITENAME}}',
+'siteuser' => '{{SITENAME}}-Brucka $1',
 'lastmodifiedatby' => "Dise Sied word daut latste Mol aum $1, Klock $2 von $3 je'endat.",
-'othercontribs'    => 'Oppe Gruntloag vonne Oabeit von $1.',
-'others'           => 'aundre',
-'siteusers'        => '{{SITENAME}}-{{PLURAL:$2|user|users}} $1',
-'creditspage'      => 'Siede-Informatioone',
-'nocredits'        => 'Fe dise Sied send tjeene Informatioone to habe.',
+'othercontribs' => 'Oppe Gruntloag vonne Oabeit von $1.',
+'others' => 'aundre',
+'siteusers' => '{{SITENAME}}-{{PLURAL:$2|user|users}} $1',
+'creditspage' => 'Siede-Informatioone',
+'nocredits' => 'Fe dise Sied send tjeene Informatioone to habe.',
 
 # Spam protection
 'spamprotectiontitle' => 'Spamschutzfilta',
-'spamprotectiontext'  => 'Dee Sied, woone du bewoare wullst, word vom Spamschutzfilta blockiet.
+'spamprotectiontext' => 'Dee Sied, woone du bewoare wullst, word vom Spamschutzfilta blockiet.
 Daut woat aun eenem Link lidje, woona no eene externe Sied wiest.',
 'spamprotectionmatch' => 'Dee foljenda Tatjst word vom Spamfilta jefunge: $1',
-'spambot_username'    => 'MediaWiki Spam-Uborka (Opprieme)',
-'spam_reverting'      => 'Latste Versioon ohne Links no $1 wada trajcht jemoakt.',
-'spam_blanking'       => 'Aule Versioone haude Links no $1, reed jemoakt',
+'spambot_username' => 'MediaWiki Spam-Uborka (Opprieme)',
+'spam_reverting' => 'Latste Versioon ohne Links no $1 wada trajcht jemoakt.',
+'spam_blanking' => 'Aule Versioone haude Links no $1, reed jemoakt',
 
 # Patrolling
-'markaspatrolleddiff'   => 'Aus kontrolliet markere',
-'markaspatrolledtext'   => 'Dise Sied aus kontrolliet markere',
-'markedaspatrolled'     => 'Aus kontrolliet markiet',
+'markaspatrolleddiff' => 'Aus kontrolliet markere',
+'markaspatrolledtext' => 'Dise Sied aus kontrolliet markere',
+'markedaspatrolled' => 'Aus kontrolliet markiet',
 'markedaspatrolledtext' => 'Dee utjewehlde Sied-Versioon es aus kontrolliet markiet.',
 
 # Bad image list
@@ -609,7 +607,7 @@ Bloos items, woone mett eenem * aunfange, woare jenome. Dee eschta Link no dem *
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'aule',
 'namespacesall' => 'aule',
-'monthsall'     => 'aule',
+'monthsall' => 'aule',
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsiede',
index 4e90283..7ccd26f 100644 (file)
@@ -305,8 +305,6 @@ Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 'search-interwiki-caption' => 'Schweschterprojekt',
 'search-interwiki-default' => '$1 Ergebnis:',
 'search-interwiki-more' => '(meh)',
-'search-mwsuggest-enabled' => 'mid Vorschläch',
-'search-mwsuggest-disabled' => 'kää Vorschläch',
 '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.",
 'powersearch' => 'Erwaiterte Such',
 'powersearch-legend' => 'Erwaiterte Such',
@@ -765,4 +763,7 @@ Annere Metadate sinn standardmäßig versteckelt.
 # Feedback
 'feedback-close' => 'Erledischd',
 
+# Search suggestions
+'searchsuggest-search' => 'Suche',
+
 );
index 54a64ee..106b248 100644 (file)
 
 $messages = array(
 # Dates
-'january'      => 'Jaenyuweri',
-'february'     => 'Febyuweri',
-'march'        => 'Maach',
-'april'        => 'Ieprel',
-'may_long'     => 'Mieh',
-'june'         => 'Juun',
-'july'         => 'Juulai',
-'january-gen'  => 'Jaenyuweri',
+'january' => 'Jaenyuweri',
+'february' => 'Febyuweri',
+'march' => 'Maach',
+'april' => 'Ieprel',
+'may_long' => 'Mieh',
+'june' => 'Juun',
+'july' => 'Juulai',
+'january-gen' => 'Jaenyuweri',
 'february-gen' => 'Febyuweri',
-'march-gen'    => 'Maach',
-'april-gen'    => 'Ieprel',
-'may-gen'      => 'Mieh',
-'june-gen'     => 'Juun',
-'july-gen'     => 'Juulai',
-'may'          => 'Mieh',
+'march-gen' => 'Maach',
+'april-gen' => 'Ieprel',
+'may-gen' => 'Mieh',
+'june-gen' => 'Juun',
+'july-gen' => 'Juulai',
+'may' => 'Mieh',
 
-'help'          => 'Hiiwp',
+'help' => 'Hiiwp',
 'history_short' => 'Histrei',
-'edit'          => 'Edet',
-'talk'          => 'diskushun',
+'edit' => 'Edet',
+'talk' => 'diskushun',
 
 # 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).
-'currentevents'        => 'Dem Kurent Iwent',
-'currentevents-url'    => 'Project:Dem Kurent Iwent',
-'helppage'             => 'Help:Dem Kontent',
-'mainpage'             => 'Mien Paij',
+'currentevents' => 'Dem Kurent Iwent',
+'currentevents-url' => 'Project:Dem Kurent Iwent',
+'helppage' => 'Help:Dem Kontent',
+'mainpage' => 'Mien Paij',
 'mainpage-description' => 'Mien Paij',
-'portal'               => "Trii'nohlij",
+'portal' => "Trii'nohlij",
 
 'editold' => 'edet',
 
@@ -57,8 +57,8 @@ $messages = array(
 'recentchanges' => 'Dem Riisent Chayng',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Dem Riilated Chayng',
-'recentchangeslinked-feed'    => 'Dem Riilated Chayng',
+'recentchangeslinked' => 'Dem Riilated Chayng',
+'recentchangeslinked-feed' => 'Dem Riilated Chayng',
 'recentchangeslinked-toolbox' => 'Dem Riilated Chayng',
 
 # Upload
index fd6dbce..ac63621 100644 (file)
@@ -206,90 +206,90 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PATRZ', '#PRZEKIERUJ', '#TAM', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSPISU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERII__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SPIS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ),
-       'currentday'              => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'NAZWADNIA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUALNYROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUALNYCZAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUALNAGODZINA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MIESIĄC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'MIESIĄCNAZWA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'MIESIĄCNAZWAD', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'MIESIĄCNAZWASKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DZIEŃ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DZIEŃ2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'DZIEŃTYGODNIA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ROK', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'CZAS', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'GODZINA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'STRON', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ARTYKUŁÓW', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'PLIKÓW', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'UŻYTKOWNIKÓW', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'LICZBAAKTYWNYCHUŻYTKOWNIKÓW', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'EDYCJI', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NAZWASTRONY', 'PAGENAME' ),
-       'namespace'               => array( '1', 'NAZWAPRZESTRZENI', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'DYSKUSJA', 'TALKSPACE' ),
-       'fullpagename'            => array( '1', 'PELNANAZWASTRONY', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'NAZWAPODSTRONY', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'BAZOWANAZWASTRONY', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'NAZWASTRONYDYSKUSJI', 'TALKPAGENAME' ),
-       'subst'                   => array( '0', 'podst:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'mały', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mały=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'prawo', 'right' ),
-       'img_left'                => array( '1', 'lewo', 'left' ),
-       'img_none'                => array( '1', 'brak', 'none' ),
-       'img_center'              => array( '1', 'centruj', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'ramka', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezramki', 'bez_ramki', 'frameless' ),
-       'img_page'                => array( '1', 'strona=$1', 'page=$1', 'page $1' ),
-       'img_border'              => array( '1', 'tło', 'border' ),
-       'img_top'                 => array( '1', 'góra', 'top' ),
-       'img_middle'              => array( '1', 'środek', 'middle' ),
-       'img_bottom'              => array( '1', 'dół', 'bottom' ),
-       'sitename'                => array( '1', 'PROJEKT', 'SITENAME' ),
-       'ns'                      => array( '0', 'PN:', 'NS:' ),
-       'articlepath'             => array( '0', 'ŚCIEŻKAARTYKUŁÓW', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'SERWER', 'SERVER' ),
-       'servername'              => array( '0', 'NAZWASERWERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ŚCIEŻKASKRYPTU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ODMIANA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'PŁEĆ:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'AKTUALNYTYDZIEŃ', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'TYDZIEŃROKU', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DZIEŃTYGODNIANR', 'LOCALDOW' ),
-       'plural'                  => array( '0', 'MNOGA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PEŁNYURL', 'FULLURL:' ),
-       'lcfirst'                 => array( '0', 'ZMAŁEJ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MAŁE:', 'LC:' ),
-       'uc'                      => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ),
-       'displaytitle'            => array( '1', 'WYŚWIETLANYTYTUŁ', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKNOWEJSEKCJI__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'AKTUALNAWERSJA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#JĘZYK:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'ADMINISTRATORÓW', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'DOLEWEJ', 'PADLEFT' ),
-       'padright'                => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
-       'special'                 => array( '0', 'specjalna', 'special' ),
-       'defaultsort'             => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ROZMIARSTRONY', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKSUJ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NIEINDEKSUJ__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', '__POZIOMZABEZPIECZEŃ__', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'ŚCIEŻKA', 'PATH' ),
-       'url_query'               => array( '0', 'ZAPYTANIE', 'QUERY' ),
+       'redirect'                  => array( '0', '#PATRZ', '#PRZEKIERUJ', '#TAM', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSPISU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERII__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SPIS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ),
+       'currentday'                => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'NAZWADNIA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUALNYROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUALNYCZAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUALNAGODZINA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MIESIĄC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'MIESIĄCNAZWA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'MIESIĄCNAZWAD', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'MIESIĄCNAZWASKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DZIEŃ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DZIEŃ2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'DZIEŃTYGODNIA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ROK', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'CZAS', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'GODZINA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'STRON', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ARTYKUŁÓW', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'PLIKÓW', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'UŻYTKOWNIKÓW', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'LICZBAAKTYWNYCHUŻYTKOWNIKÓW', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'EDYCJI', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NAZWASTRONY', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'NAZWAPRZESTRZENI', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'DYSKUSJA', 'TALKSPACE' ),
+       'fullpagename'              => array( '1', 'PELNANAZWASTRONY', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'NAZWAPODSTRONY', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'BAZOWANAZWASTRONY', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'NAZWASTRONYDYSKUSJI', 'TALKPAGENAME' ),
+       'subst'                     => array( '0', 'podst:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'mały', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mały=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'prawo', 'right' ),
+       'img_left'                  => array( '1', 'lewo', 'left' ),
+       'img_none'                  => array( '1', 'brak', 'none' ),
+       'img_center'                => array( '1', 'centruj', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'ramka', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezramki', 'bez_ramki', 'frameless' ),
+       'img_page'                  => array( '1', 'strona=$1', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', 'tło', 'border' ),
+       'img_top'                   => array( '1', 'góra', 'top' ),
+       'img_middle'                => array( '1', 'środek', 'middle' ),
+       'img_bottom'                => array( '1', 'dół', 'bottom' ),
+       'sitename'                  => array( '1', 'PROJEKT', 'SITENAME' ),
+       'ns'                        => array( '0', 'PN:', 'NS:' ),
+       'articlepath'               => array( '0', 'ŚCIEŻKAARTYKUŁÓW', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'SERWER', 'SERVER' ),
+       'servername'                => array( '0', 'NAZWASERWERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ŚCIEŻKASKRYPTU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ODMIANA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'PŁEĆ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'AKTUALNYTYDZIEŃ', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'TYDZIEŃROKU', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DZIEŃTYGODNIANR', 'LOCALDOW' ),
+       'plural'                    => array( '0', 'MNOGA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PEŁNYURL', 'FULLURL:' ),
+       'lcfirst'                   => array( '0', 'ZMAŁEJ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MAŁE:', 'LC:' ),
+       'uc'                        => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ),
+       'displaytitle'              => array( '1', 'WYŚWIETLANYTYTUŁ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKNOWEJSEKCJI__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'AKTUALNAWERSJA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#JĘZYK:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'ADMINISTRATORÓW', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'DOLEWEJ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
+       'special'                   => array( '0', 'specjalna', 'special' ),
+       'defaultsort'               => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ROZMIARSTRONY', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKSUJ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NIEINDEKSUJ__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', '__POZIOMZABEZPIECZEŃ__', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'ŚCIEŻKA', 'PATH' ),
+       'url_query'                 => array( '0', 'ZAPYTANIE', 'QUERY' ),
 );
 
 $messages = array(
@@ -451,7 +451,7 @@ $messages = array(
 'vector-action-protect' => 'Zabezpiecz',
 'vector-action-undelete' => 'Odtwórz',
 'vector-action-unprotect' => 'Zmień zabezpieczenie',
-'vector-simplesearch-preference' => 'Włącz zaawansowane podpowiedzi wyszukiwania (tylko dla skórki Wektor)',
+'vector-simplesearch-preference' => 'Włącz uproszczony pasek wyszukiwania (tylko dla skórki Wektor)',
 'vector-view-create' => 'Utwórz',
 'vector-view-edit' => 'Edytuj',
 'vector-view-history' => 'Wyświetl historię',
@@ -671,10 +671,11 @@ Zapytanie: $2',
 'protectedpagetext' => 'Wyłączono możliwość edycji tej strony.',
 'viewsourcetext' => 'Tekst źródłowy strony można podejrzeć i skopiować.',
 'viewyourtext' => "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
-'protectedinterface' => 'Ta strona zawiera tekst interfejsu oprogramowania, dlatego możliwość jej edycji została zablokowana.',
+'protectedinterface' => 'Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.
+By dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.',
 'editinginterface' => "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.
-Zmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników.
-Rozważ wykonanie tłumaczenia na [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowanym projekcie lokalizacji oprogramowania MediaWiki.",
+Zmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.
+By dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowany projekt lokalizacji oprogramowania MediaWiki.",
 'sqlhidden' => '(ukryto zapytanie SQL)',
 'cascadeprotected' => 'Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:
 $2',
@@ -700,7 +701,7 @@ Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''Nie jesteś już zalogowany.'''
 
-Możesz kontynuować pracę w {{GRAMMAR:MS.lp|{{SITENAME}}}} jako niezarejestrowany użytkownik albo [[Special:UserLogin|zalogować się ponownie]] jako ten sam lub inny użytkownik.
+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.
@@ -960,9 +961,9 @@ Jeśli jesteś anonimowym użytkownikiem i uważasz, że zamieszczone tu komenta
 'noarticletext' => 'Brak strony o tym tytule.
 Możesz [[Special:Search/{{PAGENAME}}|poszukać „{{PAGENAME}}” na innych stronach]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać log] lub [{{fullurl:{{FULLPAGENAME}}|action=edit}} utworzyć tę stronę]</span>.',
-'noarticletext-nopermission' => 'Na tej stronie nie ma jeszcze artykułu.
+'noarticletext-nopermission' => 'Ta strona nie posiada jeszcze zawartości.
 Możesz [[Special:Search/{{PAGENAME}}|wyszukać ten tytuł]] w treści innych stron
-lub <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać powiązane logi].</span>',
+lub <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać powiązane dzienniki]</span>, ale nie masz uprawnień do utworzenia tej strony',
 'missing-revision' => 'Wersja #$1 strony "{{PAGENAME}}" nie istnieje.
 
 Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powód usunięcia znajduje się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze].',
@@ -1226,7 +1227,9 @@ Proszę sprawdzić rejestr operacji.',
 'revdelete-only-restricted' => 'Nie można ukryć elementu z $2, $1 przed administratorami bez określenia jednej z pozostałych opcji ukrywania.',
 'revdelete-reason-dropdown' => '* Najczęstsze powody usunięcia
 ** Naruszenie praw autorskich
-** Informacja naruszająca prywatność',
+** Niestosowny komentarz lub informacja naruszająca prywatność
+** Niestosowna nazwa użytkownika
+** Potencjalnie oszczercza informacja',
 'revdelete-otherreason' => 'Inny lub dodatkowy powód:',
 'revdelete-reasonotherlist' => 'Inny powód',
 'revdelete-edit-reasonlist' => 'Edycja listy powodów usunięcia pliku',
@@ -1324,8 +1327,6 @@ Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powó
 'search-interwiki-caption' => 'Projekty siostrzane',
 'search-interwiki-default' => 'Wyniki dla $1:',
 'search-interwiki-more' => '(więcej)',
-'search-mwsuggest-enabled' => 'z dynamicznymi propozycjami',
-'search-mwsuggest-disabled' => 'bez dynamicznych propozycji',
 'search-relatedarticle' => 'Pokrewne',
 'mwsuggest-disable' => 'Wyłącz dynamiczne podpowiedzi',
 'searcheverything-enable' => 'Szukaj we wszystkich przestrzeniach nazw',
@@ -1423,7 +1424,7 @@ Wygenerowany losowo klucz, którego możesz użyć to $1',
 'timezoneregion-indian' => 'Ocean Indyjski',
 'timezoneregion-pacific' => 'Ocean Spokojny',
 'allowemail' => 'Zgadzam się, by inni użytkownicy mogli przesyłać do mnie e‐maile',
-'prefs-searchoptions' => 'Opcje wyszukiwania',
+'prefs-searchoptions' => 'Szukaj',
 'prefs-namespaces' => 'Przestrzenie nazw',
 'defaultns' => 'Albo przeszukuj przestrzenie nazw:',
 'default' => 'domyślnie',
@@ -1439,7 +1440,7 @@ Tej operacji nie można później cofnąć.',
 'username' => 'Nazwa użytkownika',
 'uid' => 'ID użytkownika',
 'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup}}',
-'prefs-registration' => 'Moment rejestracji',
+'prefs-registration' => 'Data rejestracji',
 'yourrealname' => 'Imię i nazwisko',
 'yourlanguage' => 'Język interfejsu',
 'yourvariant' => 'Wariant języka treści',
@@ -1668,9 +1669,9 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'rc-old-title' => 'oryginalnie utworzono jako "$1"',
 
 # Recent changes linked
-'recentchangeslinked' => 'Zmiany w dolinkowanych',
-'recentchangeslinked-feed' => 'Zmiany w dolinkowanych',
-'recentchangeslinked-toolbox' => 'Zmiany w dolinkowanych',
+'recentchangeslinked' => 'Zmiany w linkowanych',
+'recentchangeslinked-feed' => 'Zmiany w linkowanych',
+'recentchangeslinked-toolbox' => 'Zmiany w linkowanych',
 'recentchangeslinked-title' => 'Zmiany w linkowanych z „$1”',
 'recentchangeslinked-noresult' => 'Nie było żadnych zmian na (zależnie od ustawień) linkowanych lub linkujących stronach w wybranym okresie.',
 'recentchangeslinked-summary' => "Poniżej znajduje się lista ostatnich zmian na stronach linkowanych z podanej strony (lub we wszystkich stronach należących do podanej kategorii).
@@ -1854,7 +1855,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'backend-fail-internal' => 'Wystąpił nieznany błąd w wewnętrznych funkcjach magazynowania "$1".',
 'backend-fail-contenttype' => 'Nie można określić typ zawartości pliku do przechowywania w "$1".',
 'backend-fail-batchsize' => 'Wewnętrzne funkcje magazynowania otrzymały $1 {{PLURAL:$1|operację|operacje|operacji}} na pliku; limit to $2 {{PLURAL:$2|operacja|operacje|operacji}}.',
-'backend-fail-usable' => 'Nie można zapisać pliku $1 ze względu na niewystarczające uprawnienia lub brak katalogów/kontenerów.',
+'backend-fail-usable' => 'Nie można zapisać lub czytać z pliku "$1" ze względu na niewystarczające uprawnienia lub brak katalogów/kontenerów.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nie można połączyć się z bazą danych dziennika dla backendu magazynowania "$1".',
@@ -1987,6 +1988,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',
+'upload-disallowed-here' => 'Niestety, nie możesz nadpisać tego pliku.',
 
 # File reversion
 'filerevert' => 'Przywracanie $1',
@@ -2962,7 +2964,6 @@ Brak katalogu dla plików tymczasowych.',
 
 # JavaScriptTest
 'javascripttest' => 'Testowanie JavaScript',
-'javascripttest-disabled' => 'Ta funkcja nie została włączona na tej wiki.',
 'javascripttest-title' => 'Uruchamianie testów $1',
 'javascripttest-pagetext-noframework' => 'Ta strona jest zarezerwowana dla wykonywania testów JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Nieznany framework testowania „$1”.',
@@ -3099,11 +3100,11 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-header-edits' => 'Historia edycji',
 'pageinfo-header-restrictions' => 'Zmień zabezpieczenie',
 'pageinfo-header-properties' => 'Właściwości strony',
-'pageinfo-display-title' => 'Wyświetl tytuł',
+'pageinfo-display-title' => 'Wyświetlany tytuł',
 'pageinfo-default-sort' => 'Domyślny klucz sortowania',
 'pageinfo-length' => 'Długość strony (w bajtach)',
 'pageinfo-article-id' => 'Identyfikator strony',
-'pageinfo-robot-policy' => 'Stan wyszukiwarki',
+'pageinfo-robot-policy' => 'Status w wyszukiwarce',
 'pageinfo-robot-index' => 'Indeksowalne',
 'pageinfo-robot-noindex' => 'Nieindeksowalne',
 'pageinfo-views' => 'Odsłon',
@@ -3119,10 +3120,9 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-authors' => 'Całkowita liczba autorów',
 'pageinfo-recent-edits' => 'Liczba ostatnich edycji (w przeciągu $1)',
 'pageinfo-recent-authors' => 'Liczba ostatnich autorów',
-'pageinfo-restriction' => 'Zabezpieczenie strony (<code>$1</code>)',
 'pageinfo-magic-words' => 'Magiczne {{PLURAL:$1|słowo|słowa|słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukryte kategorie}} ($1)',
-'pageinfo-templates' => 'Transkludowan{{PLURAL:$1|y szablon|e szablony}} ($1)',
+'pageinfo-templates' => 'Wykorzystywan{{PLURAL:$1|y szablon|e szablony}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Standardowa',
@@ -3177,6 +3177,7 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'file-info-size-pages' => '$1 × $2 pikseli, rozmiar pliku: $3, typ MIME: $4, $5 {{PLURAL:$5|strona|strony|stron}}',
 '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',
 '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.',
@@ -3186,6 +3187,8 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'file-info-png-looped' => 'zapętlony',
 'file-info-png-repeat' => 'powtarzany $1 {{PLURAL:$1|raz|razy}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|klatka|klatki|klatek}}',
+'file-no-thumb-animation' => "'''Uwaga: z powodu ograniczeń technicznych miniaturki tego pliku nie bedą animowane.'''",
+'file-no-thumb-animation-gif' => "'''Uwaga: z powodu ograniczeń technicznych miniaturki plików GIF o wysokiej rozdzielczości – takich jak ten – nie bedą animowane.'''",
 
 # Special:NewFiles
 'newimages' => 'Najnowsze pliki',
@@ -4032,6 +4035,10 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'feedback-bugcheck' => 'Świetnie! Tylko sprawdź, czy nie jest już jednym ze [$1 znanych błędów].',
 'feedback-bugnew' => '{{GENDER:|Sprawdziłem|Sprawdziłam}}. Zgłoś nowy błąd',
 
+# Search suggestions
+'searchsuggest-search' => 'Szukaj',
+'searchsuggest-containing' => 'zawierające...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nie masz uprawnień aby przesyłać pliki do tej wiki.',
 'api-error-badtoken' => 'Błąd wewnętrzny – żeton wykorzystywany do identyfikacji użytkownika jest nieprawidłowy.',
index 1446555..4643c41 100644 (file)
@@ -199,7 +199,7 @@ $messages = array(
 'vector-action-protect' => 'Protegg',
 'vector-action-undelete' => 'Arcùpera',
 'vector-action-unprotect' => 'Cangé la protession',
-'vector-simplesearch-preference' => "Abilité ij sugeriment d'arserca ameliorà (mach për la pel Vector)",
+'vector-simplesearch-preference' => "Abilité la bara d'arserca semplificà (mach për la pel Vector)",
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Modìfica',
 'vector-view-history' => 'Varda stòria',
@@ -360,12 +360,12 @@ Na lista ëd pàgine speciaj bon-e a peul esse trovà ambelessì [[Special:Speci
 # General errors
 'error' => 'Eror',
 'databaseerror' => 'Eror ant la base dat',
-'dberrortext' => 'A l\'é capitaje n\'eror ëd sintassi ant la domanda mandà a la base dat.
-Sòn a peul vorèj dì n\'eror ant ël programa.
-L\'ùltima domanda mandà a la base dat a l\'é stàita:
+'dberrortext' => "A l'é capitaje n'eror ëd sintassi ant la domanda mandà a la base dij dat.
+Sòn a peul vorèj dì n'eror ant ël programa.
+L'ùltima arcesta mandà a la base dij dat a l'é stàita:
 <blockquote><tt>$1</tt></blockquote>
-da \'nt la funsion "<tt>$2</tt>".
-La base dat a l\'ha dane andré n\'eror "<tt>$3: $4</tt>".',
+da 'nt la funsion «<tt>$2</tt>».
+La base dij dat a l'ha dàit n'eror «<tt>$3: $4</tt>».",
 'dberrortextcl' => 'A-i é staje n\'eror ant la sintassi d\'anterogassion dla base dat.
 L\'ùltima anterogassion a l\'é stàita:
 "$1"
@@ -419,8 +419,10 @@ Arcesta: $2',
 'protectedpagetext' => "Sta pàgina-sì a l'è stàita blocà për evité che a-j faso dle modìfiche.",
 '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 chèich-cò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.",
-'editinginterface' => "'''Dossman!''' A l'é dapress ch'a-i travaja ansima a na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. Le modìfiche fàite ambelessì a-j bogio l'antërfacia a tuti j'utent. Se sò but a l'é col ëd fé na tradussion, për piasì ch'a considerà la possibilità dë dovré [//translatewiki.net/wiki/Main_Page?setlang=pms translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
+'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.",
+'editinginterface' => "'''Dossman!''' A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. 
+Le modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki. 
+Për gionté o cangé dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
 'sqlhidden' => "(l'anterogassion SQL a l'é stërmà)",
 'cascadeprotected' => 'Ant sta pàgina-sì as peulo pa fé ëd modìfiche, përché a-i intra ant {{PLURAL:$1|la pàgina|le pàgine}} butà sot a protession con la fonsion "a tombé" viscà ansima a: $2',
 'namespaceprotected' => "A l'ha nen ël përmess dë feje dle modìfiche a le pàgine dlë spassi nominal '''$1'''.",
@@ -443,10 +445,10 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 'virus-unknownscanner' => 'antivìrus nen conossù:',
 
 # Login and logout pages
-'logouttext' => "'''A l'é sortù da 'nt ël sistema.'''
+'logouttext' => "'''A l'é surtì da 'nt ël sistema.'''
 
-A peul tiré anans a dovré {{SITENAME}} coma Utent anonim, ò pura a peul [[Special:UserLogin|rintré torna ant ël sistema]] con l'istess stranòm che a dovrava prima, ò con un diferent.
-Ch'a nòta che chèich pàgine a peulo continué a esse visualisà com s'a fussa ancó ant ël sistema, fin ch'a scancela pa la cache ëd sò navigador.",
+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à.
 Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENAME}}]].',
@@ -694,9 +696,9 @@ S'it ses sì për eror, sgnaca ël boton '''andaré''' ëd tò navigador.",
 'noarticletext' => 'Al moment costa pàgina a l\'é veuida.
 It peule [[Special:Search/{{PAGENAME}}|sërché costa vos]] andrinta a d\'àutre pàgine, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sërché ant ij registr colegà],
 o purament [{{fullurl:{{FULLPAGENAME}}|action=edit}} modìfiché la pàgina adess]</span>.',
-'noarticletext-nopermission' => 'Al moment a-i é pa gnun test an sta pàgina-sì.
-It peule [[Special:Search/{{PAGENAME}}|sërché sto tìtol ëd pàgina-sì]] an d\'àutre pàgine,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sërché j\'argistrassion colegà]</span>.',
+'noarticletext-nopermission' => "Al moment a-i é gnun test ansima a costa pàgina.
+A peul [[Special:Search/{{PAGENAME}}|sërché ës tìtol ëd pàgina]] an d'àutre pàgine,
+o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sërché j'argistrassion colegà]</span>, ma a l'ha pa ël përmess ëd creé costa pàgina.",
 'missing-revision' => "La revision #\$1 dla pàgina ciamà \"{{PAGENAME}}\" a esist pa.
 
 Sòn a l'é normalment causà da l'andèje dapress a na vej liura stòrica a na pàgina ch'a l'é stàita scancelà. Ij detaj a peulo esse trovà ant ël [registr ëd jë scancelament ëd {{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}].",
@@ -959,7 +961,9 @@ It peule pa vëddlo.',
 'revdelete-only-restricted' => "Eror an stërmand l'element datà $2, $1: it peule pa vieté la vista d'element a j'aministrator sensa ëdcò selessioné un-a dj'àutre opsion ëd visibilità.",
 'revdelete-reason-dropdown' => "*Rason sòlite dë scancelassion
 ** Violassion dël drit d'autor
-** Anformassion përsonaj pa aproprià",
+** Coment o anformassion përsonaj pa aproprià
+** Nòm utent pa aproprià
+** Anformassion potensialment difamatòria",
 'revdelete-otherreason' => 'Àutra rason o adissional:',
 'revdelete-reasonotherlist' => 'Àutra rason',
 'revdelete-edit-reasonlist' => 'Modifiché la rason ëd lë scancelament',
@@ -1057,8 +1061,6 @@ Sòn a l'é normalment causà da l'andèje dapress a na veja liura stòrica a na
 'search-interwiki-caption' => 'Proget frej',
 'search-interwiki-default' => 'Arzultà da $1:',
 'search-interwiki-more' => '(ëd pì)',
-'search-mwsuggest-enabled' => 'con sugeriment',
-'search-mwsuggest-disabled' => 'gnun sugeriment',
 'search-relatedarticle' => 'Corelà',
 'mwsuggest-disable' => 'Disabilité ij sugeriment AJAX',
 'searcheverything-enable' => 'Sërché ant tùit jë spassi nominaj',
@@ -1155,7 +1157,7 @@ Ambelessì a-i é un valor generà a asar che a peul dovré: $1",
 'timezoneregion-indian' => 'Océan Indian',
 'timezoneregion-pacific' => 'Océan Passìfich',
 'allowemail' => "Lassa che j'àutri utent am mando ëd mëssagi ëd pòsta eletrònica",
-'prefs-searchoptions' => "Opsion d'arserca",
+'prefs-searchoptions' => 'Sërca',
 'prefs-namespaces' => 'Spassi nominaj',
 'defaultns' => 'Dësnò, sërché an costi spassi nominaj-sì:',
 'default' => 'stàndard',
@@ -1587,7 +1589,7 @@ Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:Li
 'backend-fail-internal' => "N'eror pa conossù a l'é rivaje ant ël dispositiv ëd memòria «$1».",
 'backend-fail-contenttype' => "As peul pa determinesse la sòrt ëd contnù dl'archivi da memorisé a «$1».",
 'backend-fail-batchsize' => "Ël dispositiv ëd memòria a l'ha dàit un total ëd $1 {{PLURAL:$1|operassion|operassion}} d'archivi; ël lìmit a l'é $2 {{PLURAL:$1|operassion|operassion}}.",
-'backend-fail-usable' => "As peul pa scrivse l'archivi $1 a motiv ëd drit insuficent o liste/contnidor mancant.",
+'backend-fail-usable' => 'As peul pa les-se o scrivse l\'archivi "$1" a motiv ëd drit insuficent o liste/contnidor mancant.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossìbil coleghesse a la base ëd dàit ëd lë scartari për ël terminal ëd memorisassion «$1».',
@@ -1720,7 +1722,7 @@ Peul desse ch'a veula modifiché la descrission dzora soa [pàgina ëd descrissi
 'shared-repo-from' => 'da $1',
 'shared-repo' => "n'archivi condivis",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
-'upload-disallowed-here' => 'Për maleur it peule pa dzorscrive sta figura.',
+'upload-disallowed-here' => 'Për maleur a peul pa rampiassé sta figura.',
 
 # File reversion
 'filerevert' => "Buté torna $1 tanme ch'a l'era",
@@ -1858,7 +1860,7 @@ Adess a l'é na ridiression a [[$2]].",
 'mostlinkedtemplates' => 'Stamp pì dovrà',
 'mostcategories' => 'Artìcoj che a son marcà an pì categorìe',
 'mostimages' => 'Figure pì dovrà',
-'mostinterwikis' => 'Pagine con pi antërwiki',
+'mostinterwikis' => "Pàgine con pi 'd liure antërwiki",
 'mostrevisions' => 'Artìcoj pì modificà',
 'prefixindex' => "Tute le pàgine ch'a ancamin-o con",
 'prefixindex-namespace' => 'Tute le pàgine con prefiss ($1 spassi nominal)',
@@ -2005,7 +2007,7 @@ A peulo ess-ie d'[[{{MediaWiki:Listgrouprights-helppage}}|anformassion adissiona
 'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]]
 e avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
 'emailuser' => "Mandeje un mëssagi eletrònich a st'utent-sì",
-'emailuser-title-target' => 'Manda e-mail a sto {{GENDER:$1|utent}}',
+'emailuser-title-target' => 'Mandé un mëssagi ëd pòsta eletrònica a cost {{GENDER:$1|utent}}',
 'emailuser-title-notarget' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
 'emailpage' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
 'emailpagetext' => "A peule dovré ël formolari sì-sota për mandé un mëssagi ëd pòsta eletrònica a st'utent-sì.
@@ -2698,7 +2700,6 @@ Për piasì, ch'a preuva torna.",
 
 # JavaScriptTest
 'javascripttest' => 'Preuva ëd JavaScript',
-'javascripttest-disabled' => "Sta funsion-sì a l'é pa stàita abilità ansima a costa wiki.",
 'javascripttest-title' => 'Fé dle preuve $1',
 'javascripttest-pagetext-noframework' => "Costa pàgina a l'é arservà për fé dle preuve JavaScript.",
 'javascripttest-pagetext-unknownframework' => 'Strutura ëd preuva pa conossùa «$1».',
@@ -2739,42 +2740,42 @@ A peul visualisene la sorgiss",
 'tooltip-n-mainpage-description' => "Andé a la pàgina d'intrada",
 'tooltip-n-portal' => 'Rësguard al proget, lòn che a peul fé, andoa trové còsa.',
 'tooltip-n-currentevents' => 'Informassion ansima a lòn che a-i riva.',
-'tooltip-n-recentchanges' => 'Lista dj',
+'tooltip-n-recentchanges' => "Lista dj'ùltime modìfiche an sla wiki",
 'tooltip-n-randompage' => 'Carié na pàgina basta che a sia.',
 'tooltip-n-help' => 'Ël pòst për capì.',
 'tooltip-t-whatlinkshere' => 'Lista ëd tute le pàgine dla wiki che a men-o ambelessì.',
 'tooltip-t-recentchangeslinked' => 'Ùltime modìfiche dle pàgine andoa as peul andesse da costa.',
-'tooltip-feed-rss' => 'RSS feed për sta pàgina-sì.',
-'tooltip-feed-atom' => 'Atom feed për sta pàgina-sì.',
-'tooltip-t-contributions' => 'Vardé la lista dle contribussion dë st',
-'tooltip-t-emailuser' => 'Mandeje un messagi ëd pòsta a st',
-'tooltip-t-upload' => 'Carié archivi ëd figure ò son.',
+'tooltip-feed-rss' => 'Fluss RSS për costa pàgina',
+'tooltip-feed-atom' => 'Fluss Atom për costa pàgina.',
+'tooltip-t-contributions' => 'Vardé la lista dle contribussion ëd cost utent',
+'tooltip-t-emailuser' => "Mandeje un mëssagi ëd pòsta a st'utent",
+'tooltip-t-upload' => "Carié n'archivi ëd figure ò son.",
 'tooltip-t-specialpages' => 'Lista ëd tute le pàgine speciaj.',
 'tooltip-t-print' => 'Version bon-a da stampé dë sta pàgina',
-'tooltip-t-permalink' => 'Anliura fissa a sta version-i dla pàgina',
+'tooltip-t-permalink' => 'Anliura fissa a sta version- dla pàgina',
 'tooltip-ca-nstab-main' => 'Vardé la pàgina ëd contnù.',
 'tooltip-ca-nstab-user' => 'Vardé la pàgina Utent.',
-'tooltip-ca-nstab-media' => 'Vardé la pàgina dl',
-'tooltip-ca-nstab-special' => 'Costa a l',
+'tooltip-ca-nstab-media' => 'Vardé la pàgina dël mojen',
+'tooltip-ca-nstab-special' => "Costa a l'é na pàgina special, a peul nen modifichela.",
 'tooltip-ca-nstab-project' => 'Vardé la pàgina proteta.',
-'tooltip-ca-nstab-image' => 'Vardé la pàgina dl',
-'tooltip-ca-nstab-mediawiki' => 'Vardé ël messagi ëd sistema.',
+'tooltip-ca-nstab-image' => "Vardé la pàgina dl'archivi",
+'tooltip-ca-nstab-mediawiki' => 'Vardé ël mëssagi ëd sistema.',
 'tooltip-ca-nstab-template' => 'Vardé lë stamp.',
-'tooltip-ca-nstab-help' => 'Vardé la pàgina d',
+'tooltip-ca-nstab-help' => "Vardé la pàgina d'agiut",
 'tooltip-ca-nstab-category' => 'Vardé la pàgina dla categorìa.',
-'tooltip-minoredit' => 'Marca sossì coma modìfica cita',
-'tooltip-save' => 'Salva le modìfiche',
+'tooltip-minoredit' => 'Marché sòn coma modìfica cita',
+'tooltip-save' => 'Salvé le modìfiche',
 'tooltip-preview' => 'Preuva dle modìfiche (mej sempe fela, prima che fé che salvé!)',
-'tooltip-diff' => "Fame vëdde che modìfiche che i l'hai faje al test.",
-'tooltip-compareselectedversions' => 'Fame ël paragon dle diferense antra le version selessionà.',
-'tooltip-watch' => 'Gionta sta pàgina-sì a la lista dle ròbe che im ten-o sot euj',
+'tooltip-diff' => "A fa vëdde le modìfiche che a l'ha faje al test",
+'tooltip-compareselectedversions' => 'Fé ël paragon dle diferense antra le version selessionà.',
+'tooltip-watch' => 'Gionté sta pàgina-sì a la lista dle ròbe che im ten-o sot euj',
 'tooltip-watchlistedit-normal-submit' => 'Gavé via ij tìtoj',
-'tooltip-watchlistedit-raw-submit' => 'Agiorné la Lista',
-'tooltip-recreate' => 'Creé torna la pàgina contut che a la sia staita scancelà',
+'tooltip-watchlistedit-raw-submit' => "Agiorné la lista dle ròbe ch'as ten-o sot-euj",
+'tooltip-recreate' => 'Creé torna la pàgina contut che a la sia stàita scancelà',
 'tooltip-upload' => 'Anandiesse a carié',
-'tooltip-rollback' => '"Rollback" a scansela con un clich le modìfiche fàite a costa pagina da l\'ùltim contribudor',
-'tooltip-undo' => '"Undo" a scansela costa modìfica e a deurb la fnestra ëd modìfica an manera ëd vardé prima.
-At lassa gionté na spiegassion ëd la modìfica.',
+'tooltip-rollback' => "«Tiré andré» a gava con un colp ëd rat le modìfiche fàite a costa pàgina da l'ùltim contributor",
+'tooltip-undo' => "«Buté 'me ch'a l'era» a scancela costa modìfica e a deurb la fnestra ëd modìfica an manera ëd preuva.
+A lassa gionté na spiegassion ant ël resumé.",
 'tooltip-preferences-save' => 'Salvé ij sò gust',
 'tooltip-summary' => 'Anserì un curt resumé',
 
@@ -2787,127 +2788,127 @@ At lassa gionté na spiegassion ëd la modìfica.',
 'monobook.js' => "/* Ës messagi-sì as dovrìa pa pì dovrelo; a sò pòst ch'a dòvra [[MediaWiki:common.js]] */",
 
 # Metadata
-'notacceptable' => 'Ël server dla wiki a-i la fa pa a provëdde dij dat ant na forma che sò programa local a peula lese.',
+'notacceptable' => 'Ës servent ëd la wiki a-i la fa pa a fornì dij dat ant na forma che sò programa local a peula lese.',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|Utent|Utent}} anònim ëd {{SITENAME}}',
 'siteuser' => '$1, utent ëd {{SITENAME}}',
-'anonuser' => '{{SITENAME}} utent anònim $1',
-'lastmodifiedatby' => "Sta pàgina-sì a l'é staita modificà l'ùltima vira al $2, $1 da $3.",
+'anonuser' => "l'utent anònim $1 ëd {{SITENAME}}",
+'lastmodifiedatby' => "Costa pàgina-sì a l'é staita modificà l'ùltima vira a $2, $1 da $3.",
 'othercontribs' => 'Basà ant sëj travaj ëd $1.',
 'others' => 'àutri',
 'siteusers' => '$1, {{PLURAL:$2|utent|utent}} ëd {{SITENAME}}',
 'anonusers' => '{{SITENAME}} {{PLURAL:$2|utent|utent}} anònim $1',
-'creditspage' => 'Credit dla pàgina',
-'nocredits' => 'A-i é pa gnun crédit për sta pagina-sì.',
+'creditspage' => 'Paternità dla pàgina',
+'nocredits' => "A-i é gnun-a anformassion d'atribussion disponìbil për costa pàgina.",
 
 # Spam protection
 'spamprotectiontitle' => 'Filtror dla rumenta',
-'spamprotectiontext' => "La pàgina che a vorìa salvé a l'é staita blocà dal filtror dla rumenta.
+'spamprotectiontext' => "Ël test che a vorìa salvé a l'é stàit blocà dal filtror dla rumenta.
 Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit estern ëd coj blocà.",
 'spamprotectionmatch' => "Cost-sì a l'é ël test che a l'é restà ciapà andrinta al filtror dla rumenta: $1",
 'spambot_username' => 'MediaWiki - trigomiro che a-j dà deuit a la rumenta',
-'spam_reverting' => "Buta andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
-'spam_blanking' => "Pàgina dësveujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
-'spam_deleting' => 'Tute le revision a contnisìo dle liure a $1, scancelament',
+'spam_reverting' => "Butà andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
+'spam_blanking' => "Pàgina dësvujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
+'spam_deleting' => 'Scancelà, dagià che tute le revision a contnisìo dle liure a $1',
 
 # Info page
-'pageinfo-title' => 'Anformassion për "$1"',
+'pageinfo-title' => 'Anformassion për «$1»',
 'pageinfo-header-basic' => 'Anformassion ëd base',
 'pageinfo-header-edits' => 'Modìfiche',
-'pageinfo-header-restrictions' => 'Protession ëd pagina',
-'pageinfo-header-properties' => 'Proprietà ëd pagina',
-'pageinfo-display-title' => 'Visualisa tìtol',
+'pageinfo-header-restrictions' => 'Protession ëd la pàgina',
+'pageinfo-header-properties' => 'Proprietà ëd la pàgina',
+'pageinfo-display-title' => 'Tìtol visualisà',
 'pageinfo-default-sort' => "ciav d'ordinament për sòlit",
-'pageinfo-length' => 'Lunghëssa ëd pagina (an byte)',
+'pageinfo-length' => 'Longheur ëd la pàgina (an byte)',
 'pageinfo-article-id' => 'Identificativ ëd la pàgina',
 'pageinfo-robot-policy' => "Stat dël motor d'arserca",
-'pageinfo-robot-index' => 'Andicisàbil',
-'pageinfo-robot-noindex' => 'Pa andicisàbil',
+'pageinfo-robot-index' => 'Indesàbil',
+'pageinfo-robot-noindex' => 'Nen indesàbil',
 'pageinfo-views' => 'Nùmer ëd vìsite',
-'pageinfo-watchers' => "Vàire ch'a ten-o sot-euj la pàgina",
-'pageinfo-redirects-name' => 'Rediression a sta pagina-sì',
-'pageinfo-subpages-name' => 'Sotpagine dë sta pagina',
-'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|rediression|rediression}}; $3 {{PLURAL:$3|non-rediression|non-rediression}})',
-'pageinfo-firstuser' => 'Creator ëd la pagina',
-'pageinfo-firsttime' => 'Data ëd creassion ëd la pagina',
-'pageinfo-lastuser' => 'Ultim editor',
+'pageinfo-watchers' => "Vàire utent ch'a ten-o sot-euj la pàgina",
+'pageinfo-redirects-name' => 'Ridiression a sta pàgina-sì',
+'pageinfo-subpages-name' => 'Sot-pàgine ëd costa pàgina',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ridiression|ridiression}}; $3 {{PLURAL:$3|nen ridiression|nen ridiression}})',
+'pageinfo-firstuser' => 'Creator ëd la pàgina',
+'pageinfo-firsttime' => 'Data ëd creassion ëd la pàgina',
+'pageinfo-lastuser' => 'Ùltim contributor',
 'pageinfo-lasttime' => "Data ëd l'ùltima modìfica",
 'pageinfo-edits' => 'Nùmer ëd modìfiche',
 'pageinfo-authors' => "Nùmer d'autor diferent",
-'pageinfo-recent-edits' => "Nùmer ëd modìfiche recente (an drinta a j'ùltim $1)",
-'pageinfo-recent-authors' => "Nùmer recent d'autor diferent",
-'pageinfo-restriction' => 'Protession ëd pagina (<code>$1</code>)',
-'pageinfo-magic-words' => '{{PLURAL:$1|Paròla màgic|Paròle màgiche}} ($1)',
+'pageinfo-recent-edits' => "Nùmer ëd modìfiche recente (ant j'ùltim $1)",
+'pageinfo-recent-authors' => "Nùmer d'autor diferent recent",
+'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' => 'Trascludù {{PLURAL:$1|stamp|stamp}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
+'pageinfo-toolboxlink' => 'Anformassion an sla pàgina',
 
 # Patrolling
-'markaspatrolleddiff' => 'Marca coma verificà',
-'markaspatrolledtext' => "Marca st'artìcol-sì coma verificà",
+'markaspatrolleddiff' => 'Marc coma verificà',
+'markaspatrolledtext' => 'Marché costa pàgina coma verificà',
 'markedaspatrolled' => 'Marca dla verìfica butà',
 'markedaspatrolledtext' => "La version selessionà ëd [[:$1]] a l'é staita marcà coma verificà.",
 'rcpatroldisabled' => "Verìfica dj'ùltime modìfiche disabilità",
 'rcpatroldisabledtext' => "La possibilità ëd verifichè j'ùltime modìfiche a l'é disabilità.",
-'markedaspatrollederror' => 'As peul pa marchè verificà',
-'markedaspatrollederrortext' => 'A venta che a specìfica che version che a veul marchè verificà.',
-'markedaspatrollederror-noautopatrol' => 'A l\'ha nen ël përmess dë marchesse soe modìfiche coma "controlà".',
+'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à».",
 
 # Patrol log
 'patrol-log-page' => 'Registr dij contròj',
-'patrol-log-header' => "Sto sì a l'é un registr ëd le revision verificà.",
+'patrol-log-header' => "Cost-sì a l'é un registr ëd le revision controlà.",
 'log-show-hide-patrol' => '$1 registr verificà',
 
 # Image deletion
 'deletedrevision' => 'Veja version scancelà $1',
 'filedeleteerror-short' => "Eror ën scanceland l'archivi: $1",
-'filedeleteerror-long' => "A son ësta-ie dj'eror ën scanceland l'archivi:
+'filedeleteerror-long' => "A-i son ësta-ie dj'eror ën scanceland l'archivi:
 
 $1",
-'filedelete-missing' => 'L\'archivi "$1" as peul pa dëscancelesse, për via ch\'a-i é nen.',
-'filedelete-old-unregistered' => 'La revision d\'archivi specificà "$1" ant la base dat a-i é nen.',
-'filedelete-current-unregistered' => 'Ant la base dat l\'archivi "$1" ch\'a l\'é specificasse a-i é pa.',
-'filedelete-archive-read-only' => 'Ël servent dla Ragnà a peul pa scriv-ie ant ël dossié dj\'archivi "$1".',
+'filedelete-missing' => "L'archivi «$1» as peul pa dëscancelesse, për via ch'a-i é nen.",
+'filedelete-old-unregistered' => "La revision d'archivi specificà «$1» ant la base dij dat a-i é nen.",
+'filedelete-current-unregistered' => "Ant la base dij dat l'archivi «$1» ch'a l'é specificasse a-i é pa.",
+'filedelete-archive-read-only' => "Ël servent dla Ragnà a peul pa scriv-ie ant ël dossié d'archiviassion «$1».",
 
 # Browsing diffs
-'previousdiff' => '← Diferensa pì veja',
-'nextdiff' => 'Modìfica pì neuva →',
+'previousdiff' => '← Modìfica precedenta',
+'nextdiff' => 'Modìfica apress →',
 
 # Media information
 'mediawarning' => "'''Atension!''': st'archivi-sì a podrìa avèj andrinta dël còdes butà-lì da cheidun për fé ëd darmagi.
-An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a sò sistema.",
-'imagemaxsize' => "Lìmit ëd la dimension ëd la figura:<br /> ''(për pàgine ëd descrission dij file)''",
+An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a sò sistema.",
+'imagemaxsize' => "Lìmit ëd la dimension ëd le plance:<br /> ''(për le pàgine ëd descrission dj'archivi)''",
 'thumbsize' => 'Amzura dle figurin-e:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pàgina|pàgine}}',
 'file-info' => "amzura dl'archivi: $1, sòrt MIME: $2",
-'file-info-size' => '$1 × $2 pixel, amzure: $3, sòrt MIME: $4',
+'file-info-size' => '$1 × $2 pontin, amzure: $3, sòrt MIME: $4',
 'file-info-size-pages' => "$1 × $2 pontin, dimension ëd l'archivi: $3, sòrt MIME: $4, $5 {{PLURAL:$5|pàgina|pàgine}}",
 'file-nohires' => 'Gnun-a risolussion pì bela disponìbil.',
-'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pixel, amzura dl'archivi: $3",
-'svg-long-desc-animated' => "Archivi SVG animà, nominalment $1 × $2 pixel, amzura dl'archivi: $3",
-'show-big-image' => 'Version a amzura pijn-a',
+'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",
+'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.',
 'show-big-image-size' => '$1 × $2 pontin',
-'file-info-gif-looped' => 'ciclà',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|fnesta|fneste}}',
+'file-info-gif-looped' => 'an sicl',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|quàder|quàder}}',
 'file-info-png-looped' => 'an sìrcol',
-'file-info-png-repeat' => 'sonà $1 {{PLURAL:$1|vira|vire}}',
+'file-info-png-repeat' => 'fàit andé $1 {{PLURAL:$1|vira|vire}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|quàder|quàder}}',
-'file-no-thumb-animation' => "'''Nòta: Për limitassion técniche, le miniadure dë sto archivi a saran pa animà.'''",
+'file-no-thumb-animation' => "'''Nòta: Për dle limitassion técniche, le miniadure ëd s'archivi a saran pa animà.'''",
 'file-no-thumb-animation-gif' => "'''Nòta: Për limitassion técniche, le miniadure ëd figure GIF a àuta arzolussion com costa a saran pa animà.'''",
 
 # Special:NewFiles
-'newimages' => 'Galerìa ëd figure e son neuv',
-'imagelisttext' => "Ambelessì sota a-i é {{PLURAL:$1|l'ùnica figura che a-i sia|na lista ëd '''$1''' figure, ordinà për $2}}.",
+'newimages' => 'Galarìa ëd figure e son neuv',
+'imagelisttext' => "Ambelessì-sota a-i é {{PLURAL:$1|l'ùnica figura che a-i sia|na lista ëd '''$1''' figure, ordinà $2}}.",
 'newimages-summary' => "Sta pàgina special-sì a la smon j'ùltim archivi carià.",
 'newimages-legend' => 'Filtror',
-'newimages-label' => 'Nòm dël file (o ëd part dël file):',
+'newimages-label' => "Nòm ëd l'archivi (o na soa part):",
 'showhidebots' => '($1 trigomiro)',
 'noimages' => 'Pa gnente da vëdde.',
-'ilsubmit' => 'Sërca',
+'ilsubmit' => 'Arserché',
 'bydate' => 'për data',
-'sp-newimages-showfrom' => "Smon j'ùltim archivi multimojen a anandiesse da $2 dël $1",
+'sp-newimages-showfrom' => "Smon-e j'ùltim archivi multimojen a anandiesse da $2 dël $1",
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|un second|$1 second}}',
@@ -2919,14 +2920,14 @@ An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a
 # Bad image list
 'bad_image_list' => "La forma a l'é costa-sì:
 
-As ten-o bon-e mach le liste pontà (cole faite ëd righe ch'as ancamin-o për *). La prima anliura ëd minca riga a l'ha da mné a n'archivi multimojen nen bon.
+As ten-o bon-e mach le liste pontà (cole fàite ëd righe ch'as ancamin-o për *). La prima anliura ëd minca riga a l'ha da mné a n'archivi multimojen nen bon.
 J'anliure ch'a-i ven-o dapress, ant sla midema riga, as conto për ecession (visadì, për pàgine andova st'archivi as peul butesse).",
 
 # Metadata
 'metadata' => 'Dat adissionaj',
-'metadata-help' => "Costi-sì a son dij dat adissionaj, che a l'é belfé che a sio stait giontà da la màchina fotogràfica digital ò pura da lë scanner che a l'é stiat dovrà për creé la figura digital. Se la figura a fussa mai staita modificà da 'nt soa forma original, a podrìa ëdcò riveje che chèich detaj a fussa ancò butà coma ant l'original, donca sensa pa ten-e cont ëd le modìfiche.",
-'metadata-expand' => 'Most-me tùit ij dat',
-'metadata-collapse' => 'Stërma ij dat adissionaj',
+'metadata-help' => "St'archivi a conten dj'anformassion adissionaj, che a l'é belfé che a sio stait giontà da la màchina fotogràfica digital ò pura dal digitalisatorr che a l'é stàit dovrà për creé la figura digital. Se la figura a fussa mai stàita modificà da 'nt soa forma original, a podrìa ëdcò riveje che chèich detaj a fusso ancor butà coma ant l'original, donca sensa ten-e cont ëd le modìfiche.",
+'metadata-expand' => 'Smon-e ij dat adissionaj',
+'metadata-collapse' => 'Stërmé ij dat adissionaj',
 'metadata-fields' => "Ij camp dij metadat ëd la figura listà ant ës messagi-sì a saran ësmonù ant la visualisassion ëd la pàgina dla figura quand la tàula dij metadat a l'é stërmà.
 J'àutri a saran stërmà coma stàndard.
 * make
@@ -2948,13 +2949,13 @@ J'àutri a saran stërmà coma stàndard.
 'exif-imagelength' => 'Autëssa',
 'exif-bitspersample' => 'Bit për campion',
 'exif-compression' => 'Schema ëd compression',
-'exif-photometricinterpretation' => 'Composission dij pixel',
+'exif-photometricinterpretation' => 'Composission dij pontin',
 'exif-orientation' => 'Orientament',
 'exif-samplesperpixel' => 'Nùmer ëd component',
 'exif-planarconfiguration' => 'Sistemassion dij dat',
 'exif-ycbcrsubsampling' => 'Rapòrt ëd campionament antra Y e C',
 'exif-ycbcrpositioning' => 'Posissionament Y e C',
-'exif-xresolution' => 'Risolussion orizontal',
+'exif-xresolution' => 'Risolussion orisontal',
 'exif-yresolution' => 'Risolussion vertical',
 'exif-stripoffsets' => 'Posission dij dat dla figura',
 'exif-rowsperstrip' => 'Nùmer ëd righe për banda',
@@ -2963,8 +2964,8 @@ J'àutri a saran stërmà coma stàndard.
 'exif-jpeginterchangeformatlength' => 'Byte ëd dat an formà JPEG',
 'exif-whitepoint' => 'Pont cromàtich dël bianch',
 'exif-primarychromaticities' => 'Coordinà cromàtiche dij color primari',
-'exif-ycbcrcoefficients' => 'Coeficent dla matriss ëd trasformassion dlë spassi color',
-'exif-referenceblackwhite' => "Pàira ëd valor d'arferiment për bianch e nèir",
+'exif-ycbcrcoefficients' => 'Coefissient dla matris ëd trasformassion dlë spassi dij color',
+'exif-referenceblackwhite' => "Cobia ëd valor d'arferiment për bianch e nèir",
 'exif-datetime' => 'Data e ora dle modìfiche',
 'exif-imagedescription' => 'Tìtol dla figura',
 'exif-make' => 'Fabricant dla màchina fotogràfica ò videocàmera',
@@ -2974,13 +2975,13 @@ J'àutri a saran stërmà coma stàndard.
 'exif-copyright' => "Titolar dël drit d'autor",
 'exif-exifversion' => 'Version dël formà Exif',
 'exif-flashpixversion' => 'A riva a la version Flashpix',
-'exif-colorspace' => 'Spassi color',
-'exif-componentsconfiguration' => 'Sust ëd vira component',
+'exif-colorspace' => 'Spassi dij color',
+'exif-componentsconfiguration' => 'Significà ëd minca component',
 'exif-compressedbitsperpixel' => 'Sistema ëd compression dle figure',
 'exif-pixelydimension' => 'Larghëssa dla figura',
 'exif-pixelxdimension' => 'Autëssa dla figura',
 'exif-usercomment' => 'Nòte lìbere',
-'exif-relatedsoundfile' => 'Archivi audio colegà',
+'exif-relatedsoundfile' => 'Archivi sonor colegà',
 'exif-datetimeoriginal' => 'Data e ora dla generassion dij dat',
 'exif-datetimedigitized' => 'Data e ora dla digitalisassion',
 'exif-subsectime' => 'Data, ora e frassion ëd second',
@@ -2988,41 +2989,41 @@ J'àutri a saran stërmà coma stàndard.
 'exif-subsectimedigitized' => 'Data e ora ëd digitalisassion, con frassion ëd second',
 'exif-exposuretime' => "Temp d'esposission",
 'exif-exposuretime-format' => '$1 sec ($2)',
-'exif-fnumber' => "Nùmer d'F",
+'exif-fnumber' => 'Duvertura',
 'exif-exposureprogram' => "Programa d'esposission",
-'exif-spectralsensitivity' => 'Sensibilità dë spetro',
+'exif-spectralsensitivity' => 'Sensibilità spetral',
 'exif-isospeedratings' => 'Sensibilità ISO',
-'exif-shutterspeedvalue' => 'Temp dë scat APEX',
-'exif-aperturevalue' => 'Diaframa APEX',
+'exif-shutterspeedvalue' => "Temp dë scat ëd l'APEX",
+'exif-aperturevalue' => "Diaframa ëd l'APEX",
 'exif-brightnessvalue' => 'Luminosità APEX',
 'exif-exposurebiasvalue' => "Coression dl'esposission",
-'exif-maxaperturevalue' => 'Apertura màssima',
+'exif-maxaperturevalue' => 'Duvertura màssima',
 'exif-subjectdistance' => 'Distansa dël soget',
 'exif-meteringmode' => "Càlcol dl'espossision",
 'exif-lightsource' => "Sorgiss d'anluminassion",
-'exif-flash' => 'Flash',
-'exif-focallength' => 'Lunghëssa focal dle lent',
+'exif-flash' => 'Lòsna',
+'exif-focallength' => 'Longheur focal dle lent',
 'exif-subjectarea' => "Spassi d'anquadratura dël soget",
-'exif-flashenergy' => 'Potensa dël flash',
-'exif-focalplanexresolution' => 'Resolussion dla coordinà X ant sël pian dla focal',
-'exif-focalplaneyresolution' => 'Resolussion dla coordinà Y ant sël pian dla focal',
+'exif-flashenergy' => 'Energìa dla lòsna',
+'exif-focalplanexresolution' => 'Arzolussion dla coordinà X ant sël pian dla focal',
+'exif-focalplaneyresolution' => 'Arzolussion dla coordinà Y ant sël pian dla focal',
 'exif-focalplaneresolutionunit' => "Unità d'amzura për ël pian dla focal",
 'exif-subjectlocation' => 'Posission dël soget',
 'exif-exposureindex' => "Ìndes dl'esposission",
-'exif-sensingmethod' => 'Metod ëd campionament',
+'exif-sensingmethod' => 'Métod ëd campionament',
 'exif-filesource' => "Sorgiss dl'archivi",
 'exif-scenetype' => "Sòrt d'anquadratura",
 'exif-customrendered' => 'Process dla figura particolar',
 'exif-exposuremode' => "Modalità dl'esposission",
 'exif-whitebalance' => 'Balansa dël bianch',
-'exif-digitalzoomratio' => 'Rapòrt ëd lë zoom digital',
-'exif-focallengthin35mmfilm' => 'Lunghëssa focal an film da 35 mm',
+'exif-digitalzoomratio' => "Rapòrt ëd l'avzinament digital",
+'exif-focallengthin35mmfilm' => 'Longheur focal an na pelìcola da 35 mm',
 'exif-scenecapturetype' => 'Sistema ëd campionament',
-'exif-gaincontrol' => 'Contròl ëd sienari',
+'exif-gaincontrol' => 'Contròl dël senari',
 'exif-contrast' => 'Contrast',
 'exif-saturation' => 'Saturassion',
 'exif-sharpness' => 'Definission dij bòrd',
-'exif-devicesettingdescription' => "Nòm dla configurassion dl'aparechiatura",
+'exif-devicesettingdescription' => "Descrission dla configurassion dl'angign",
 'exif-subjectdistancerange' => 'Ragg ëd distansa dël soget',
 'exif-imageuniqueid' => 'Identificator ùnich dla figura',
 'exif-gpsversionid' => 'Version dël GPS',
@@ -3037,7 +3038,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-gpsstatus' => 'Condission dël ricevitor',
 'exif-gpsmeasuremode' => "Sistema d'amzura",
 'exif-gpsdop' => "Precision dl'amzura",
-'exif-gpsspeedref' => "Unità d'amzura për la velocità",
+'exif-gpsspeedref' => "Unità d'amzura për l'andi",
 'exif-gpsspeed' => 'Velocità dël ricevitor GPS',
 'exif-gpstrackref' => 'Arferiment për la diression dël moviment',
 'exif-gpstrack' => 'Diression dël moviment',
@@ -3049,7 +3050,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-gpsdestlongituderef' => 'Arferiment për la longitùdin dla destinassion',
 'exif-gpsdestlongitude' => 'Longitùdin dla destinassion',
 'exif-gpsdestbearingref' => "Arferiment për l'orientament a destinassion",
-'exif-gpsdestbearing' => 'Orientament anvers a la destinassion',
+'exif-gpsdestbearing' => 'Orientament vers la destinassion',
 'exif-gpsdestdistanceref' => "Arferiment për la lontanansa da 'nt la destinassion",
 'exif-gpsdestdistance' => "Lontanansa da 'nt la destinassion",
 'exif-gpsprocessingmethod' => 'Nòm dël sistema ëd process an GPS',
@@ -3060,7 +3061,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-keywords' => 'Paròle ciav',
 'exif-worldregioncreated' => "Region dël mond anté che la fòto a l'é stàita pijà",
 'exif-countrycreated' => "Pais anté che la fòto a l'é stàita fàita",
-'exif-countrycodecreated' => "Còdes dëlpais anté che la fòto a l'é stàita pijà",
+'exif-countrycodecreated' => "Còdes dël pais anté che la fòto a l'é stàita pijà",
 'exif-provinceorstatecreated' => "Provinsa o stat anté che la fòto a l'é stàita pijà",
 'exif-citycreated' => "Sità anté che la fòto a l'é stàita pijà",
 'exif-sublocationcreated' => "Borgh ëd la sità anté che la fòto a l'é stàita pijà",
@@ -3077,7 +3078,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-source' => 'Sorgiss',
 'exif-editstatus' => 'Stat ëd modìfica dla figura',
 'exif-urgency' => 'Pressa',
-'exif-fixtureidentifier' => 'Nòm utiss',
+'exif-fixtureidentifier' => 'Nòm element arcorent',
 'exif-locationdest' => 'Locassion fotografà',
 'exif-locationdestcode' => 'Còdes ëd la locassion fotografà',
 'exif-objectcycle' => "Ora dël di ëd destinassion d'ës mojen",
@@ -3093,7 +3094,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-identifier' => 'Identificator',
 'exif-lens' => 'Lent dovrà',
 'exif-serialnumber' => 'Nùmer serial ëd la màchina fotogràfica',
-'exif-cameraownername' => 'Padron ëd la màchina fotogràfica',
+'exif-cameraownername' => 'Propietari ëd la màchina fotogràfica',
 'exif-label' => 'Tichëtta',
 'exif-datetimemetadata' => "Quand ij metadat a son stàit modificà l'ùltima vira",
 'exif-nickname' => 'Nòm anformal ëd la figura',
@@ -3101,12 +3102,12 @@ J'àutri a saran stërmà coma stàndard.
 'exif-rightscertificate' => 'Sertificà ëd gestion dij drit',
 'exif-copyrighted' => "Stat dël drit d'autor",
 'exif-copyrightowner' => "Titolar dël drit d'autor",
-'exif-usageterms' => "Termo d'usagi",
-'exif-webstatement' => "Diciarassion an linia dël drit d'autor",
-'exif-originaldocumentid' => 'ID unìvoch dël document original',
+'exif-usageterms' => "Condission d'utilisassion",
+'exif-webstatement' => "Diciarassion ëd drit d'autor an linia",
+'exif-originaldocumentid' => 'Identificativ ùnich dël papé original',
 'exif-licenseurl' => "Anliura ëd la licensa dij drit d'autor",
-'exif-morepermissionsurl' => 'Anformassion an sle license alternativa',
-'exif-attributionurl' => "Quand as deuvra torna cost travaj, për piasì ch'a-j buta l'anliura a",
+'exif-morepermissionsurl' => 'Anformassion an sle license alternative',
+'exif-attributionurl' => "An dovrand n'àutra vira cost travaj, për piasì ch'a-j buta l'anliura a",
 'exif-preferredattributionname' => "Quand as deuvra torna cost travaj, për piasì dé l'arconossiment a",
 'exif-pngfilecomment' => "Coment ëd l'archivi PNG",
 'exif-disclaimer' => 'Avis',
@@ -3422,6 +3423,7 @@ Cost còdes ëd conferma a scad ai \$4.",
 # 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]",
 
 # Delete conflict
@@ -3712,6 +3714,10 @@ Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà gi
 '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.",
 
+# Search suggestions
+'searchsuggest-search' => 'Arserca',
+'searchsuggest-containing' => 'contenent ...',
+
 # API errors
 'api-error-badaccess-groups' => "Chiel a peul pa carié d'archivi su sta wiki.",
 'api-error-badtoken' => 'Eror antern: sìmbol pa bon.',
index 57d9886..22e90e8 100644 (file)
@@ -411,8 +411,8 @@ $messages = array(
 
 # Login and logout pages
 'logouttext' => "'''تسی لاگ آؤٹ ہوگۓ او.'''
-تسی   {{SITENAME}} نوں گمنامی چ ورت سکدے او یا تسی [[Special:UserLogin|لاگ ان دوبارہ]] ہوجاؤ اوسے ناں توں یا وکھرے ورتن والے توں۔ اے گل چیتے رکھنا جے کج صفیاں تے تسی لاگ ان دسے جاؤگے جدوں تک تسی اپنے براؤزر دے کاشے نوں صاف ناں کرلو۔
-You can continue to use {{SITENAME}} anonymously, or you can [[Special:UserLogin|log in again]] as the same or as a different user.
+تسی   {{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! ==
 تواڈا کھاتا بن گیا اے۔
@@ -1002,8 +1002,6 @@ $1",
 'search-interwiki-caption' => 'رلدے ویونت',
 'search-interwiki-default' => '$1 نتارے:',
 'search-interwiki-more' => '(اور)',
-'search-mwsuggest-enabled' => 'صلاع دے نال',
-'search-mwsuggest-disabled' => 'کوئی صلاع نئیں',
 'search-relatedarticle' => 'جڑیاں',
 'mwsuggest-disable' => 'اجاکس مشورے نکارہ کرو',
 'searcheverything-enable' => 'ہر ناں چ لبو',
@@ -2616,7 +2614,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript ٹیسٹنگ',
-'javascripttest-disabled' => 'ایس وکی تے ایہ کم نئیں چلدا۔',
 'javascripttest-title' => 'ٹیسٹ  $1 چلدا اے۔',
 'javascripttest-pagetext-noframework' => 'ایہ صفہ JavaScript  ٹیسٹاں لئی بچایا گیا اے۔',
 'javascripttest-pagetext-unknownframework' => '"$1" انجانا ٹیسٹنگ فریمورک۔',
@@ -3561,6 +3558,10 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 'feedback-bugcheck' => 'بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔',
 'feedback-bugnew' => 'میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔',
 
+# Search suggestions
+'searchsuggest-search' => 'کھوج',
+'searchsuggest-containing' => 'بند کر ریا اے۔۔۔',
+
 # API errors
 'api-error-badaccess-groups' => 'تھوانوں ایس وکی تے فائلاں چڑھان دی اجازت نئیں۔',
 'api-error-badtoken' => 'اندر دی غلطی: برا ٹوکن',
index 01d87f0..d7331b9 100644 (file)
@@ -607,8 +607,6 @@ $messages = array(
 'search-interwiki-caption' => 'Αδερφικά έργα',
 'search-interwiki-default' => '$1 αποτελέσματα:',
 'search-interwiki-more' => '(πλέα)',
-'search-mwsuggest-enabled' => 'με οδηγίας',
-'search-mwsuggest-disabled' => 'θίχως οδηγίας',
 'searchall' => 'ούλαι',
 'nonefound' => "'''Σημείωση:''' Κανονικά ολίγα περιοχάς ονοματίων αραεύκουνταν μαναχόν. Βαλέστεν ''all:'' ασην λέξην εμπροστά για ίνεται το αράεμαν σ'όλεα τα σελίδας (και σελίδας καλατσεματί, πρότυπα κλπ.) ή βαλέστεν ους πρόθεμαν την περιοχήν ονοματίων π'θέλετε για να αραεύετε εκαικά.",
 'powersearch' => 'Αναλυτικόν αράεμαν',
@@ -1445,4 +1443,7 @@ $messages = array(
 'htmlform-reset' => "Κλώσον τ'αλλαγάς",
 'htmlform-selectorother-other' => 'Άλλον',
 
+# Search suggestions
+'searchsuggest-search' => 'Αράεμαν',
+
 );
index 840efbc..7571d87 100644 (file)
@@ -376,7 +376,7 @@ Drēudisnas pagrintinsna: "$2".',
 # Login and logout pages
 'logouttext' => "'''Tū assei teinū izgūbun.'''
 
-Tū mazzi ēmpirsin sadīntun tērpautun {{SITENAME}} kāigi niengūbuns tērpautajs, anga [[Special:UserLogin|enēitwei etkūmps]] kāigi šis sūbs anga kits tērpautajs.
+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.
@@ -824,8 +824,6 @@ Nawigaciōnis autengīsenin terpausnā naikinna etrīnksenin en kōlunei.',
 'search-interwiki-caption' => 'Paligwāi prōjaktai',
 'search-interwiki-default' => 'Rezultātai per $1:',
 'search-interwiki-more' => '(tūls)',
-'search-mwsuggest-enabled' => 'sen nadāsnans',
-'search-mwsuggest-disabled' => 'šlāit nadāsnans',
 'search-relatedarticle' => 'Ristan',
 'mwsuggest-disable' => 'Izklaūjais AJAX nadāsnans',
 'searcheverything-enable' => 'Laukīs en wisēimans tītelin plattibins',
index 606ec0d..d7cf926 100644 (file)
@@ -95,64 +95,64 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'notoc'                   => array( '0', '__بی‌نيولک__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__بی‌نندارتونه__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__نيوليکداره__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__نيوليک__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__بی‌برخې__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'روانه_مياشت', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'دروانې_مياشت_نوم', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'دروانې_مياشت_لنډون', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'نن', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'نن۲', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'دننۍورځې_نوم', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'سږکال', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'داوخت', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'دم_ګړۍ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'سيمه_يزه_مياشت', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'دسيمه_يزې_مياشت_نوم', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'دسيمه_يزې_مياشت_لنډون', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'سيمه_يزه_ورځ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'سيمه_يزه_ورځ۲', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'دسيمه_يزې_ورځ_نوم', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'سيمه_يزکال', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'سيمه_يزوخت', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'سيمه_يزه_ګړۍ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'دمخونوشمېر', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'دليکنوشمېر', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ددوتنوشمېر', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'دکارونکوشمېر', 'NUMBEROFUSERS' ),
-       'pagename'                => array( '1', 'دمخ_نوم', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'دمخ_نښه', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'نوم_تشيال', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'د_نوم_تشيال_نښه', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'دخبرواترو_تشيال', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'دخبرواترو_تشيال_نښه', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'دسکالوتشيال', 'دليکنې_تشيال', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'دسکالوتشيال_نښه', 'دليکنې_تشيال_نښه', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'دمخ_بشپړنوم', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'دمخ_بشپړنوم_نښه', 'FULLPAGENAMEE' ),
-       'msg'                     => array( '0', 'پیغام:', 'پ:', 'MSG:' ),
-       'img_thumbnail'           => array( '1', 'بټنوک', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'ښي', 'right' ),
-       'img_left'                => array( '1', 'کيڼ', 'left' ),
-       'img_none'                => array( '1', 'هېڅ', 'none' ),
-       'img_center'              => array( '1', 'مېنځ،_center', 'center', 'centre' ),
-       'sitename'                => array( '1', 'دوېبځي_نوم', 'SITENAME' ),
-       'server'                  => array( '0', 'پالنګر', 'SERVER' ),
-       'servername'              => array( '0', 'دپالنګر_نوم', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'ګرامر:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'روانه_اوونۍ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'داوونۍورځ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'سيمه_يزه_اوونۍ', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'جمع:', 'PLURAL:' ),
-       'language'                => array( '0', '#ژبه:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'ځانګړی', 'special' ),
-       'hiddencat'               => array( '1', '__پټه_وېشنيزه__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'مخکچه', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ليکلړ__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__بې_ليکلړ__', '__NOINDEX__' ),
-       'protectionlevel'         => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ),
+       'notoc'                     => array( '0', '__بی‌نيولک__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__بی‌نندارتونه__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__نيوليکداره__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__نيوليک__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__بی‌برخې__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'روانه_مياشت', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'دروانې_مياشت_نوم', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'دروانې_مياشت_لنډون', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'نن', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'نن۲', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'دننۍورځې_نوم', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'سږکال', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'داوخت', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'دم_ګړۍ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'سيمه_يزه_مياشت', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'دسيمه_يزې_مياشت_نوم', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'دسيمه_يزې_مياشت_لنډون', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'سيمه_يزه_ورځ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'سيمه_يزه_ورځ۲', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'دسيمه_يزې_ورځ_نوم', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'سيمه_يزکال', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'سيمه_يزوخت', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'سيمه_يزه_ګړۍ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'دمخونوشمېر', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'دليکنوشمېر', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ددوتنوشمېر', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'دکارونکوشمېر', 'NUMBEROFUSERS' ),
+       'pagename'                  => array( '1', 'دمخ_نوم', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'دمخ_نښه', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'نوم_تشيال', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'د_نوم_تشيال_نښه', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'دخبرواترو_تشيال', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'دخبرواترو_تشيال_نښه', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'دسکالوتشيال', 'دليکنې_تشيال', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'دسکالوتشيال_نښه', 'دليکنې_تشيال_نښه', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'دمخ_بشپړنوم', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'دمخ_بشپړنوم_نښه', 'FULLPAGENAMEE' ),
+       'msg'                       => array( '0', 'پیغام:', 'پ:', 'MSG:' ),
+       'img_thumbnail'             => array( '1', 'بټنوک', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'ښي', 'right' ),
+       'img_left'                  => array( '1', 'کيڼ', 'left' ),
+       'img_none'                  => array( '1', 'هېڅ', 'none' ),
+       'img_center'                => array( '1', 'مېنځ،_center', 'center', 'centre' ),
+       'sitename'                  => array( '1', 'دوېبځي_نوم', 'SITENAME' ),
+       'server'                    => array( '0', 'پالنګر', 'SERVER' ),
+       'servername'                => array( '0', 'دپالنګر_نوم', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'ګرامر:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'روانه_اوونۍ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'داوونۍورځ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'سيمه_يزه_اوونۍ', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
+       'language'                  => array( '0', '#ژبه:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'ځانګړی', 'special' ),
+       'hiddencat'                 => array( '1', '__پټه_وېشنيزه__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'مخکچه', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ليکلړ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__بې_ليکلړ__', '__NOINDEX__' ),
+       'protectionlevel'           => array( '1', 'ژغورکچه', 'PROTECTIONLEVEL' ),
 );
 
 $rtl = true;
@@ -402,7 +402,7 @@ $1',
 'portal' => 'د ټولنې تانبه',
 'portal-url' => 'Project:د ټولنې تانبه',
 'privacy' => 'د پټنتيا تګلاره',
-'privacypage' => 'Project:د Ù\85حرÙ\85Ù\8aت_تګلاره',
+'privacypage' => 'Project:د Ù¾Ù¼Ù\86تÙ\8aا تګلاره',
 
 'badaccess' => 'د لاسرسۍ تېروتنه',
 'badaccess-group0' => 'تاسې د غوښتل شوې کړنې د ترسره کولو اجازه نه لرۍ.',
@@ -417,6 +417,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' => 'سمول',
@@ -437,6 +441,7 @@ $1',
 'site-atom-feed' => '$1 د اټوم کتنه',
 'page-rss-feed' => '"$1" د آر اس اس کتنه',
 'page-atom-feed' => 'د "$1" د اټوم کتنې',
+'feed-atom' => 'اټوم',
 'feed-rss' => 'آر اس اس',
 'red-link-title' => '$1 (تر اوسه پورې نه شته)',
 'sort-descending' => 'مخښکته اوډل',
@@ -497,12 +502,15 @@ $1',
 'badtitle' => 'ناسم سرليک',
 'badtitletext' => 'ستاسې د غوښتل شوي مخ سرليک سم نه وو، يا مو د سرليک ځای تش وو او يا هم د ژبو خپلمنځي تړنې څخه يا د ويکي ګانو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.
 کېدای شي چې ستاسې په ورکړ شوي سرليک کې يو يا څو داسې توري وي چې د سرليک په توګه بايد و نه کارېږي.',
+'querypage-no-updates' => 'د دې مخ اوسمهالېدنې ناچارن شوي.
+په ښکاره توګه د دې ځای اومتوک به نه وي تازه شوي.',
 'viewsource' => 'سرچينه کتل',
 'viewsource-title' => 'د $1 سرچينه کتل',
 'actionthrottled' => 'د دې کړنې مخنيوی وشو',
 'protectedpagetext' => 'دا مخ د بدلون او سمون د مخنيوي په تکل تړل شوی دی.',
 'viewsourcetext' => 'تاسې د دې مخ سرچينه کتلی او لمېسلی شی:',
-'protectedinterface' => 'په همدې مخ کې د پوستکالي د ليدنمخ متن دی او دا متن د ناسمو کارولو د مخنيوي په تکل تړل شوی.',
+'protectedinterface' => 'دا مخ د دې ويکي د ساوترې د ليدنمخ متن لري، او د ورانکارۍ په خاطر ژغورل شوی.
+په ټولو ويکي ګانو کې د ژباړې د ورګډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.',
 'editinginterface' => "'''ګواښنه:''' تاسو په يوه داسې مخ کې بدلون راولی کوم چې د يوې پوستکالی د ليدنمخ متن په توګه کارېږي.
 په همدې مخ کې بدلون راوستل به د نورو کارنانو د ليدنمخ بڼه اغېزمنه کړي.
 د ژباړې لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده او د همدې پر کارولو غور وکړی.",
@@ -513,6 +521,7 @@ $1',
 'ns-specialprotected' => 'ځانګړي مخونو کې سمون او بدلون نه شی راوستلای.',
 'titleprotected' => 'د [[User:$1|$1]] لخوا د دې سرليک د جوړېدلو مخنيوی شوی.
 او د دې کړنې سبب "\'\'$2\'\'" ورکړ شوی.',
+'exception-nologin' => 'غونډال کې نه ياست ننوتي',
 
 # Virus scanner
 'virus-badscanner' => "بده سازېدنه: د ويروس ناڅرګنده ځيرڅار: ''$1''",
@@ -522,11 +531,11 @@ $1',
 # Login and logout pages
 'logouttext' => "'''تاسې اوس د غونډال نه ووتلی.'''
 
-تاسې کولای شی چې د کارن-نوم نه پرته په ورکنومي توګه {{SITENAME}} وکاروی، او يا هم په همدې او يا کوم بل کارن-نوم، يو ځل [[Special:UserLogin|بيا غونډال ته ورننوځۍ]].
+تاسې کولای شی چې د کارن-نوم نه پرته په ورکنومي توګه {{SITENAME}} وکاروی، او يا هم په همدې او يا کوم بل کارن-نوم، يو ځل <span class='plainlinks'>[$1 بيا غونډال ته ورننوځۍ]</span>.
 دا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
-'welcomecreation' => '==$1 ښه راغلاست! ==
+'welcomecreation' => '==$1 ښه راغلۍ! ==
 
-ستاسې ګڼون جوړ شو. لطفاً د [[Special:Preferences|{{SITENAME}} غوره توبونو]] ټاکل مو مه هېروی.',
+ستاسې ګڼون جوړ شو. لطفاً د خپلو [[Special:Preferences|{{SITENAME}} غوره توبونو]] ټاکل مو مه هېروی.',
 'yourname' => 'کارن-نوم:',
 'yourpassword' => 'پټنوم:',
 'yourpasswordagain' => 'پټنوم بيا وليکه',
@@ -586,7 +595,7 @@ $1',
 که چېرته تاسې نه پرته کوم بل چا دغه غوښتنه کړې وي او يا هم تاسې ته خپل پټنوم در پزړه شوی وي او تاسې خپل اصلي پټنوم بدلول نه غواړۍ، نو تاسې همدا پيغام بابېزه وګڼۍ او د پخوا په څېر خپل اصلي پټنوم وکاروی.',
 'noemail' => 'د "$1" کارن لپاره هېڅ کومه برېښليک پته نه ده ثبته شوې.',
 'noemailcreate' => 'تاسې ته پکار ده چې يوه سمه برېښليک پته وليکۍ',
-'passwordsent' => 'د "$1" لپاره يو نوی پټنوم د هغه/هغې د برېښليک پتې ته ولېږل شو.
+'passwordsent' => 'د "$1" لپاره يو نوی پټنوم د اړونده کارن برېښليک پتې ته ولېږل شو.
 لطفاً کله چې پټنوم مو ترلاسه کړ نو بيا غونډال ته ننوځۍ.',
 'blocked-mailpassword' => 'ستاسې په IP پتې بنديز لګېدلی او تاسې نه شی کولای چې ليکنې وکړی، په همدې توګه تاسې نه شی کولای چې د پټنوم د پرځای کولو کړنې وکاروی دا ددې لپاره چې د وراني مخنيوی وشي.',
 'eauthentsent' => 'ستاسې ورکړ شوې برېښليک پتې ته مو يو تاييدي برېښليک درولېږه.
@@ -594,13 +603,14 @@ $1',
 'mailerror' => 'د برېښليک د لېږلو ستونزه: $1',
 'acct_creation_throttle_hit' => 'د همدې ويکي کارنانو په وروستيو ورځو کې ستاسې د IP پتې په کارولو سره {{PLURAL:$1|1 ګڼون|$1 ګڼونونه}} جوړ کړي، چې دا په همدې مودې کې د ګڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.
 نو په همدې خاطر د اوس لپاره د همدې IP پتې کارنان نه شي کولای چې نور ګڼونونه جوړ کړي.',
-'emailauthenticated' => 'ستاسو برېښليک پته په $2 نېټه په $3 بجو د منلو وړ وګرځېده.',
-'emailnotauthenticated' => 'ستاسو د برېښليک پته لا تر اوسه پورې د منلو وړ نه ده ګرځېدلې. د اړوندو بېلوونکو نښو په هکله تاسو ته هېڅ کوم برېښليک نه لېږل کېږي.',
+'emailauthenticated' => 'ستاسې برېښليک پته په $2 نېټه په $3 بجو د منلو وړ وګرځېده.',
+'emailnotauthenticated' => 'لا تر اوسه ستاسې برېښليک پته د منلو وړ نه ده ګرځېدلې. د لاندې ځانګړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.',
 'noemailprefs' => 'ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.',
 'emailconfirmlink' => 'د خپل د برېښليک پتې پخلی وکړی',
 'invalidemailaddress' => 'دا برېښليک پته نه منل کېږي، دا ځکه چې دا پته يوه ناکره بڼه لري.
 لطفاً د يوې کره بڼې پته وليکۍ او يا هم دا ځای تش پرېږدۍ.',
 'cannotchangeemail' => 'پدې ويکي کې د ګڼون برېښليک پتې نشي بدلېدلی.',
+'emaildisabled' => 'دا وېبځی د برېښليک لېږلو چارو څخه برخمن نه دی.',
 'accountcreated' => 'ګڼون مو جوړ شو.',
 'accountcreatedtext' => 'د $1 لپاره يو ګڼون جوړ شو.',
 'createaccount-title' => 'د {{SITENAME}} د ګڼون جوړېدنه',
@@ -609,8 +619,14 @@ $1',
 
 که چېرته دا کړنه په تېروتنه کې شوی وي نو تاسې کولای شی چې دا پيغام بابېزه وګڼۍ.',
 'usernamehasherror' => 'کارن-نوم نشي کېدلای چې کرښکې لوښې ولري',
+'login-throttled' => 'تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.
+لطفاً د بيا هڅې نه مخکې يو څو شېبې تم شۍ.',
+'login-abort-generic' => 'غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو',
 'loginlanguagelabel' => 'ژبه: $1',
 
+# E-mail sending
+'user-mail-no-addy' => 'د يوې برېښليک پتې پرته د برېښليک لېږلو هڅه شوې.',
+
 # Change password dialog
 'resetpass' => 'پټنوم بدلول',
 'resetpass_header' => 'د ګڼون پټنوم بدلول',
@@ -621,7 +637,7 @@ $1',
 'resetpass_success' => 'ستاسې پټنوم په برياليتوب سره بدل شو!
 اوس غونډال کې د ورننوتلو په حال کې يو ...',
 'resetpass_forbidden' => 'پټنومونه مو نه شي بدلېدلای',
-'resetpass-no-info' => 'همدې مخ ته د لاسرسي موندلو پخاطر تاسې ته پکار ده چې لومړی غونډال ته ورننوځۍ.',
+'resetpass-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'resetpass-submit-loggedin' => 'پټنوم بدلول',
 'resetpass-submit-cancel' => 'ناګارل',
 'resetpass-wrong-oldpass' => 'لنډمهال او يا هم اوسنی پټنوم مو ناسم دی',
@@ -631,6 +647,8 @@ $1',
 'passwordreset' => 'پټنوم بياپرځايول',
 'passwordreset-text' => 'د دې لپاره چې ستاسې د ګڼون بشپړې څرګندنې دربرېښليک شي نو دا فورمه ډکه کړۍ.',
 'passwordreset-legend' => 'پټنوم بياپرځايول',
+'passwordreset-disabled' => 'په دې ويکي پټنوم بياپرځای کولو کړنه ناچارنه شوې.',
+'passwordreset-pretext' => '{{PLURAL:$1||د لاندې اومتوک يوه برخه مالومات وليکۍ}}',
 'passwordreset-username' => 'کارن-نوم:',
 'passwordreset-domain' => 'شپول:',
 'passwordreset-capture' => 'د پايلې برېښليک کتل غواړې؟',
@@ -644,6 +662,7 @@ $1',
 # Special:ChangeEmail
 'changeemail' => 'برېښليک پته بدلول',
 'changeemail-header' => 'د ګڼون برېښليک پته بدلول',
+'changeemail-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
 'changeemail-none' => '(هېڅ)',
@@ -711,7 +730,7 @@ $1',
 ستاسې IP پته $3 ده او ستاسې د بنديز پېژند #$5 دی.
 د بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.',
 'blockednoreason' => 'هېڅ سبب نه دی ورکړ شوی',
-'whitelistedittext' => 'ددې لپاره چې سمادول ترسره کړی تاسو بايد $1.',
+'whitelistedittext' => 'د مخونو د سمون لپاره بايد $1 کېښکاږۍ.',
 'nosuchsectiontitle' => 'برخه و نه موندل شوه',
 'nosuchsectiontext' => 'تاسې د يوې داسې برخې د سمون هڅه کړې چې تر اوسه پورې نشته.
 کېدای هغه مهال چې تاسې د دې مخ نه کتنه کوله، همدا برخه کوم بل ځای ته لېږدل شوې او يا هم ړنګه شوې وي.',
@@ -728,19 +747,17 @@ $1',
 تاسې کولای شی چې په نورو مخونو کې [[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' => 'دم مهال په دې کارن بنديز لګېدلی.
 دلته لاندې د بنديز تازه يادښت د سرچينې په توګه ورکړ شوی:',
-'clearyourcache' => "'''يادونه:''' د غوره توبونو د خوندي کولو وروسته، ددې لپاره چې تاسو خپل سر ته رسولي ونجونه وګورۍ نو پکار ده چې د خپل بروزر ساتل شوې حافظه تازه کړی. 
-* '''Ù\85Ù\88زÛ\90Ù\84ا/ Ù\81اÙ\8aرÙ\81اکس/ Ø³Ù\81رÙ\8a:''' Ù¾Ù\87 Ø¯Û\90 Ú©ØªÙ\86Ù\85Ù\84 Ú©Û\90 Ø¯ ''Reload'' Ø¯ Ù¼Ú©Ù\88Ù\87Ù\84Ù\88 Ù¾Ù\87 Ù\88خت Ø¯ ''Shift'' ØªÚ¼Û\8d Ù\86Ù\8aÙ\88Ù\84Û\90 Ù\88ساتÛ\8cØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 ''Ctrl-F5'' Ù\8aا ''Ctrl-R'' تڼۍ کېښکاږۍ (په Apple Mac کمپيوټر باندې ''⌘-R'' کېښکاږۍ)
+'clearyourcache' => "'''يادښت:''' د غوره توبونو د خوندي کولو وروسته، خپل د کتنمل (بروزر) ساتل شوې حافظه تازه کړی.
+* '''Ù\81اÙ\8aرÙ\81اکس/ Ø³Ù\81رÙ\8a:''' Ù¾Ù\87 Ø¯Û\90 Ú©ØªÙ\86Ù\85Ù\84 Ú©Û\90 Ø¯ ''Reload'' Ø¯ Ù¼Ú©Ù\88Ù\87Ù\84Ù\88 Ù¾Ù\87 Ù\88خت Ø¯ ''Shift'' ØªÚ¼Û\8d Ù\86Ù\8aÙ\88Ù\84Û\90 Ù\88ساتÛ\8cØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 ''Ctrl-F5'' Ù\8aا ''Ctrl-R''تڼۍ کېښکاږۍ (په Apple Mac کمپيوټر باندې ''⌘-R'' کېښکاږۍ)
 * '''ګووګل کروم:''' په دې کتنمل کې د ''Ctrl-Shift-R'' تڼۍ کېښکاږۍ (د مک لپاره ''⌘-Shift-R'')
 * '''انټرنټ اېکسپلورر:''' په دې کتنمل کې د ''Refresh'' د ټکوهلو په وخت کې د ''Ctrl'' تڼۍ کېښکاږلې ونيسۍ، او يا هم د ''Ctrl-F5'' تڼۍ کېښکاږۍ
-* '''کانکوېرور:''' په دې کتنمل کې د يواځې د ''Reload'' تڼۍ ټکوهۍ، او يا ''F5'' کېښکاږۍ
 * '''اوپرا''': په دې کتنمل کې د خپل براوزر ساتل شوې حافظه پدې توګه سپينولی شی ''Tools→Preferences''",
 'usercsspreview' => "'''هېر مو نشي چې دا يوازې ستاسې د کارن CSS مخليدنه ده.'''
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
@@ -754,7 +771,7 @@ $1',
 ستاسې لخوا ترسره شوي بدلونونه لا تر اوسه پورې نه دي خوندي شوي!!",
 'editing' => 'د $1 سمونه',
 'creating' => '$1 جوړېدنې کې دی',
-'editingsection' => 'سمونه $1 (برخه)',
+'editingsection' => '$1 (برخه) په سمېدنې کې دی',
 'editingcomment' => 'د $1 سمون (نوې برخه)',
 'editconflict' => 'په سمادولو کې خنډ: $1',
 'yourtext' => 'ستاسو متن',
@@ -817,7 +834,7 @@ $1',
 
 # History pages
 'viewpagelogs' => 'د دې مخ يادښتونه کتل',
-'nohistory' => 'ددې مخ لپاره د سمادېدنې هېڅ کوم پېښليک نه شته.',
+'nohistory' => 'ددې مخ د سمون کوم پېښليک نه شته.',
 'currentrev' => 'اوسنۍ بڼه',
 'currentrev-asof' => 'د $1 پورې تازه بڼه',
 'revisionasof' => 'د $1 بڼه',
@@ -875,7 +892,7 @@ $1',
 'revdelete-reason-dropdown' => '*د ړنګولو ټولګړي سببونه
 ** د خپرېدو د رښتو سرغړونه
 ** ناسم شخصي مالومات
-** Potentially libelous information',
+** پارونکي او بلواګر مالومات',
 'revdelete-otherreason' => 'بل/اضافي سبب:',
 'revdelete-reasonotherlist' => 'بل سبب',
 'revdelete-edit-reasonlist' => 'د ړنګولو سببونه سمول',
@@ -926,7 +943,7 @@ $1',
 'searchhelp-url' => 'Help:لړليک',
 'searchprofile-articles' => 'مېنځپانګيز مخونه',
 'searchprofile-project' => 'د لارښود او پروژې مخونه',
-'searchprofile-images' => 'Multimedia',
+'searchprofile-images' => 'ګڼرسنۍ',
 'searchprofile-everything' => 'هرڅه',
 'searchprofile-advanced' => 'پرمختللی',
 'searchprofile-articles-tooltip' => 'په $1 کې پلټل',
@@ -943,17 +960,16 @@ $1',
 'search-interwiki-caption' => 'خورلڼې پروژې',
 'search-interwiki-default' => '$1 پايلې:',
 'search-interwiki-more' => '(نور)',
-'search-mwsuggest-enabled' => 'د وړانديزونو سره',
-'search-mwsuggest-disabled' => 'له وړانديزونو نه پرته',
 'search-relatedarticle' => 'اړونده',
 'mwsuggest-disable' => 'د AJAX وړانديزونه ناچارن کول',
 'searcheverything-enable' => 'په ټولو نوم-تشيالونو کې پلټل',
 'searchrelated' => 'اړونده',
 'searchall' => 'ټول',
+'showingresults' => "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
 'showingresultsheader' => "د «'''$4'''» لپاره {{PLURAL:$5|له '''$1''' نه تر '''$3''' پايله|له '''$1 نه تر $2''' پايلې، ټولې پايلې '''$3''' }}",
 'nonefound' => "'''يادښت''': يوازې يو څو نوم-تشيالونو په تلواليزه توګه پلټل کېږي.
 د ''ټول:'' مختاړي په کارولو سره به ستاسې د پلټنې لپاره، په ټوله مېنځپانګه کې پلټنه وشي (د خبرواترو، کينډۍ او نورو مخونو په ګډون), او يا هم د خپلې خوښې نوم-تشيال د مختاړي په توګه وکاروۍ.",
-'search-nonefound' => 'د ØºÙ\88Ú\9aتÙ\86Û\90 Ø³Ø±Ù\87 Ø³Ù\85 اړونده پايلې و نه موندل شوې.',
+'search-nonefound' => 'ستاسÛ\90 Ø¯ØºÙ\88Ú\9aتÙ\86Û\90 اړونده پايلې و نه موندل شوې.',
 'powersearch' => 'ژوره پلټنه',
 'powersearch-legend' => 'ژوره پلټنه',
 'powersearch-ns' => 'په نوم-تشيالونو کې پلټنه:',
@@ -988,7 +1004,7 @@ $1',
 'prefs-personal' => 'د کارن پېژنليک',
 'prefs-rc' => 'وروستي بدلونونه',
 'prefs-watchlist' => 'کتنلړ',
-'prefs-watchlist-days' => 'د Ù\88رÚ\81Ù\88 Ø´Ù\85Û\90ر Ú\86Û\90 Ù¾Ù\87 Ú©ØªÙ\84Ù\8a Ù\84Ú\93Ù\84Ù\8aÚ© کې به ښکاري:',
+'prefs-watchlist-days' => 'د Ù\88رÚ\81Ù\88 Ø´Ù\85Û\90ر Ú\86Û\90 Ù¾Ù\87 Ú©ØªÙ\86Ù\84Ú\93 کې به ښکاري:',
 'prefs-watchlist-days-max' => 'حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}',
 'prefs-watchlist-edits-max' => 'د شمېر اکثر بريد: 1000',
 'prefs-misc' => 'بېلابېل',
@@ -1008,9 +1024,10 @@ $1',
 'resultsperpage' => 'په هر مخ کې د پايلو شمېر:',
 'stub-threshold-disabled' => 'ناچارن',
 'recentchangesdays' => 'د هغو ورځو شمېر وټاکی چې په وروستي بدلونو کې يې ليدل غواړی:',
+'recentchangesdays-max' => 'حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}',
 'recentchangescount' => 'د هغو سمونو شمېر چې په تلواليزه بڼه ښکاره بايد شي:',
 'prefs-help-recentchangescount' => 'پدې کې د وروستني بدلونونو، د مخونو د پېښليکونو او يادښتونه شامل دي.',
-'savedprefs' => 'ستاسÙ\88 ØºÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\87 Ø®Ù\88Ù\86دÙ\8a Ø´Ù\88Ù\87.',
+'savedprefs' => 'غÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\87 Ù\85Ù\88 Ø®Ù\88Ù\86دÙ\8a Ø´Ù\88Ù\84.',
 'timezonelegend' => 'د وخت سيمه:',
 'localtime' => 'سيمه ايز وخت:',
 'timezoneuseserverdefault' => 'د ويکي تلواليزه بڼه کارول ($1)',
@@ -1023,13 +1040,13 @@ $1',
 'timezoneregion-antarctica' => 'انټارکټيکا',
 'timezoneregion-arctic' => 'آرکټيک',
 'timezoneregion-asia' => 'آسيا',
-'timezoneregion-atlantic' => 'د Ø§Ø·Ù\84س Ø³Ù\85Ù\86در',
+'timezoneregion-atlantic' => 'اطلس سمندر',
 'timezoneregion-australia' => 'آسټراليا',
 'timezoneregion-europe' => 'اروپا',
 'timezoneregion-indian' => 'هندی سمندر',
 'timezoneregion-pacific' => 'غلی سمندر',
 'allowemail' => 'د نورو کارنانو لخوا د برېښليک رالېږل چارن کړه',
-'prefs-searchoptions' => 'د پلټلو خوښنې',
+'prefs-searchoptions' => 'پلټنه',
 'prefs-namespaces' => 'نوم-تشيالونه',
 'defaultns' => 'او يا هم په دغو نوم-تشيالونو کې پلټل:',
 'default' => 'تلواليز',
@@ -1054,7 +1071,7 @@ $1',
 'gender-male' => 'نارينه',
 'gender-female' => 'ښځه',
 'email' => 'برېښليک',
-'prefs-help-realname' => 'د Ø§ØµÙ\84Ù\8a Ù\86Ù\88Ù\85 Ù\84Ù\8aÚ©Ù\84 Ø³ØªØ§Ø³Ù\88 Ù¾Ù\87 Ø®Ù\88Ú\9aÙ\87 Ø¯Û\8c Ø®Ù\88 Ú©Ù\87 ØªØ§Ø³Ù\88 Ø®Ù¾Ù\84 Ø§ØµÙ\84Ù\8a Ù\86Ù\88Ù\85 Ù\88ټاکÛ\8d Ù¾Ø¯Û\90 Ø³Ø±Ù\87 Ø¨Ù\87 Ø³ØªØ§Ø³Ù\88 Ù¼Ù\88Ù\84 Ú©Ø§Ø±Ù\88Ù\86Ù\87 Ø§Ù\88 Ù\88Ù\86Ú\89Û\90 Ø³ØªØ§Ø³Ù\88 د نوم په اړوندولو کې وکارېږي.',
+'prefs-help-realname' => 'د Ø¢Ø± Ù\86Ù\88Ù\85 Ù\84Ù\8aÚ©Ù\84 Ø³ØªØ§Ø³Û\90 Ù¾Ù\87 Ø®Ù\88Ú\9aÙ\87 Ø¯Û\8c Ø®Ù\88 Ú©Ù\87 ØªØ§Ø³Û\90 Ø®Ù¾Ù\84 Ø¢Ø± Ù\86Ù\88Ù\85 Ù\88ټاکÛ\8d Ù¾Ø¯Û\90 Ø³Ø±Ù\87 Ø¨Ù\87 Ø³ØªØ§Ø³Û\90 Ù¼Ù\88Ù\84 Ú©Ø§Ø±Ù\88Ù\86Ù\87 Ø§Ù\88 Ù\88Ù\86Ú\89Û\90 Ø³ØªØ§Ø³Û\90 د نوم په اړوندولو کې وکارېږي.',
 'prefs-help-email' => 'د برېښليک ورکړه ستاسې په خوښه ده، خو په ورکړې سره به يې د يوه نوي پټنوم د لېږلو چار آسانه کړي هغه هم کله چې تاسې نه خپل پټنوم هېر شوی وي.',
 'prefs-help-email-others' => 'تاسې دا هم کولای شی چې وټاکۍ چې نور کارنان ستاسې د خبرو اترو او يا کارن مخ د يوې تړنې له لارې تاسې سره برېښليکي اړيکه ونيسي.
 د اړيکو ټينګولو په وخت کې به ستاسې برېښليک پته نورو کارنانو ته نه ښکاري.',
@@ -1220,7 +1237,7 @@ $1',
 'upload' => 'دوتنه پورته کول',
 'uploadbtn' => 'دوتنه پورته کول',
 'uploadnologin' => 'غونډال کې نه ياست ننوتي',
-'uploadnologintext' => 'ددې لپاره چې دوتنې پورته کړای شۍ، تاسو ته پکار ده چې لومړی غونډال کې [[Special:UserLogin|ننوتنه]] ترسره کړی.',
+'uploadnologintext' => 'د دوتنو د پورته کولو لپاره بايد غونډال کې [[Special:Userlogin|ننوځۍ]].',
 'uploaderror' => 'د پورته کولو ستونزه',
 'uploadtext' => "د دوتنې د پورته کېدو لپاره لاندينی چوکاټ وکاروۍ.
 که چېرته د پخونيو پورته شويو دوتنو کتل او پلټل غواړۍ نو [[Special:FileList|د پورته شويو دوتنو لړليک]] ته ورشۍ، [[Special:Log/upload|د (بيا) پورته شويو دوتنو يادښتونه]] او [[Special:Log/delete|د ړنګېدو يادښتونه]] هم کتلای شی.
@@ -1266,9 +1283,11 @@ $1',
 که تاسې بيا هم د خپلې دوتنې پورته کول غواړۍ، نو لطفاً بېرته وګرځۍ او همدغه دوتنه بيا په يوه نوي نوم پورته کړی.
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'همدا دوتنه د {{PLURAL:$1|لاندينۍ دوتنې|لاندينيو دوتنو}} غبرګه لمېسه ده:',
+'uploadwarning' => 'د پورته کولو ګواښ',
 'savefile' => 'دوتنه خوندي کړه',
 'uploadedimage' => '"[[$1]]" پورته شوه',
 'uploaddisabled' => 'پورته کول ناچارن شوي',
+'uploaddisabledtext' => 'د دوتنې پورته کولو آسانتياوې ناچارن شوي.',
 'uploadvirus' => 'دا دوتنه ويروس لري! تفصيل: $1',
 'upload-source' => 'سرچينيزه دوتنه',
 'sourcefilename' => 'د سرچينيزې دوتنې نوم:',
@@ -1280,6 +1299,7 @@ $1',
 'watchthisupload' => 'همدا دوتنه کتل',
 'upload-success-subj' => 'دوتنه پورته کېدل په برياليتوب سره ترسره شو',
 'upload-failure-subj' => 'د پورته کېدو ستونزه',
+'upload-warning-subj' => 'د پورته کولو ګواښ',
 
 'upload-file-error' => 'کورنۍ ستونزه',
 'upload-unknown-size' => 'ناڅرګنده کچه',
@@ -1351,6 +1371,7 @@ $1',
 'sharedupload-desc-here' => 'دا دوتنه د $1 لخوا خپرېږې او کېدای شي چې دا په نورو پروژو هم کارېدلې وي.
 د دوتنې د کارېدنې لا نور مالومات د [$2 دوتنې د څرګندنو په مخ] لاندې ښودل شوی.',
 'filepage-nofile' => 'په دې نوم کومه دوتنه نشته.',
+'filepage-nofile-link' => 'په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].',
 'uploadnewversion-linktext' => 'د همدغې دوتنې نوې بڼه پورته کول',
 'shared-repo-from' => 'د $1 لخوا',
 
@@ -1361,6 +1382,7 @@ $1',
 # File deletion
 'filedelete' => '$1 ړنګول',
 'filedelete-legend' => 'دوتنه ړنګول',
+'filedelete-intro' => "تاسې د '''[[Media:$1|$1]]''' دوتنې او د ورسره ټول پېښليک د ړنګولو په حال کې ياست.",
 'filedelete-comment' => 'سبب:',
 'filedelete-submit' => 'ړنګول',
 'filedelete-success' => "'''$1''' ړنګ شو.",
@@ -1409,6 +1431,7 @@ $1',
 'statistics-views-total' => 'ټولټال کتنې',
 'statistics-users' => 'ثبت شوي [[Special:ListUsers|کارنان]]',
 'statistics-users-active' => 'فعاله کارنان',
+'statistics-users-active-desc' => 'هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې',
 'statistics-mostpopular' => 'تر ټولو ډېر کتل شوي مخونه',
 
 'disambiguations' => 'د مبهمو مخونو سره تړلي مخونه',
@@ -1421,6 +1444,7 @@ $1',
 'brokenredirects-delete' => 'ړنګول',
 
 'withoutinterwiki' => 'د ژبې د تړنو بې برخې مخونه',
+'withoutinterwiki-summary' => 'لانديني مخونه د نورو ژبو بڼو سره تړنې نه لري.',
 'withoutinterwiki-legend' => 'مختاړی',
 'withoutinterwiki-submit' => 'ښکاره کول',
 
@@ -1453,6 +1477,7 @@ $1',
 'mostlinkedtemplates' => 'د ډېرو تړنو کينډۍ',
 'mostcategories' => 'د ګڼو وېشنيزو مخونه',
 'mostimages' => 'د ډېرو تړنو انځورونه',
+'mostinterwikis' => 'د ډېرو خپلمنځي تړنو مخونه',
 'mostrevisions' => 'ډېر کتلي مخونه',
 'prefixindex' => 'د مختاړيو ټول مخونه',
 'prefixindex-namespace' => 'د مختاړي ټول مخونه ($1 نومتشيال)',
@@ -1464,7 +1489,7 @@ $1',
 'protectedpages-indef' => 'يوازې بې پايه ژغورنې',
 'protectedpages-cascade' => 'يوازې ځوړاوبيزې ژغورنې',
 'protectedtitles' => 'ژغورلي سرليکونه',
-'listusers' => 'د کارن لړليک',
+'listusers' => 'کارن لړليک',
 'listusers-editsonly' => 'يوازې هغه کارنان چې سمونونه يې کړي ښکاره کول',
 'listusers-creationsort' => 'د جوړېدو د نېټې له مخې اوډل',
 'usereditcount' => '{{PLURAL:$1|سمون|سمونونه}}',
@@ -1474,6 +1499,7 @@ $1',
 'ancientpages' => 'تر ټولو زاړه مخونه',
 'move' => 'لېږدول',
 'movethispage' => 'دا مخ ولېږدوه',
+'unusedimagestext' => 'دا لاندينۍ دوتنې په هېڅ کوم مخ کې نه دي ټومبېدلي. لطفاً په پام کې وساتۍ چې نور وېبځايونه به د دغو دوتنو له يو دوتنې سره يو راسن يو آر ال (URL) ولري او لا تر اوسه به دوتنه د فعالې کارېدنې سره سره دلته پرته وي.',
 'notargettitle' => 'بې موخې',
 'pager-newer-n' => '{{PLURAL:$1|نوی 1|نوي $1}}',
 'pager-older-n' => '{{PLURAL:$1|زوړ 1|زاړه $1}}',
@@ -1508,6 +1534,7 @@ $1',
 'allpagesprefix' => 'هغه مخونه ښکاره کړه چې مختاړی يې وي:',
 'allpagesbadtitle' => 'ورکړ شوی سرليک سم نه دی او يا هم د ژبو او يا د بېلابېلو ويکي ګانو مختاړی لري. ستاسو په سرليک کې يو يا څو داسې ابېڅې دي کوم چې په سرليک کې نه شي کارېدلی.',
 'allpages-bad-ns' => '{{SITENAME}} د "$1" په نامه هېڅ کوم نوم-تشيال نه لري.',
+'allpages-hide-redirects' => 'مخ ګرځونې پټول',
 
 # Special:Categories
 'categories' => 'وېشنيزې',
@@ -1519,8 +1546,8 @@ $1',
 'special-categories-sort-abc' => 'د ابېڅو له مخې اوډل',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'د کارونکي ونډې ړنګې شوې',
-'deletedcontributions-title' => 'د کارونکي ونډې ړنګې شوې',
+'deletedcontributions' => 'ړنګې شوې ونډې',
+'deletedcontributions-title' => 'ړنګې شوې ونډې',
 'sp-deletedcontributions-contribs' => 'ونډې',
 
 # Special:LinkSearch
@@ -1538,8 +1565,10 @@ $1',
 
 # Special:ActiveUsers
 'activeusers' => 'د فعالو کارنانو لړليک',
+'activeusers-intro' => 'دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.',
 'activeusers-count' => 'په {{PLURAL:$2|تېرې|تېرو}} {{PLURAL:$3|ورځ|$3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
 'activeusers-from' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
+'activeusers-hidebots' => 'روباټونه پټول',
 'activeusers-hidesysops' => 'پازوالان پټول',
 'activeusers-noresult' => 'کارن و نه موندل شو.',
 
@@ -1565,6 +1594,8 @@ $1',
 # E-mail user
 'mailnologin' => 'هېڅ کومه لېږل شوې پته نشته',
 'emailuser' => 'کارن ته برېښليک لېږل',
+'emailuser-title-target' => 'دې {{GENDER:$1|کارن}} ته برېښليک لېږل',
+'emailuser-title-notarget' => 'کارن ته برېښليک لېږل',
 'emailpage' => 'کارن ته برېښليک لېږل',
 'defemailsubject' => 'د "$1" کارن لخوا د {{SITENAME}} برېښليک',
 'usermaildisabled' => 'د کارن برېښليک ناچارند دی',
@@ -1585,7 +1616,7 @@ $1',
 'emailccsubject' => '$1 ته ستاسو د پيغام لمېسه: $2',
 'emailsent' => 'برېښليک مو ولېږل شو',
 'emailsenttext' => 'ستاسو برېښليکي پيغام ولېږل شو.',
-'emailuserfooter' => 'همدا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "همدې کارونکي ته برېښليک لېږل" د کړنې په مرسته لېږل شوی دی.',
+'emailuserfooter' => 'دا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "کارن ته برېښليک لېږل" د کړنې په مرسته لېږل شوی.',
 
 # User Messenger
 'usermessage-summary' => 'د غونډال پيغام پرېښودل.',
@@ -1595,10 +1626,10 @@ $1',
 'watchlist' => 'زما کتنلړ',
 'mywatchlist' => 'زما کتنلړ',
 'watchlistfor2' => 'د $1 لپاره $2',
-'nowatchlist' => 'ستاسو په کتلي لړليک کې هېڅ نه شته.',
+'nowatchlist' => 'ستاسې کتنلړ کې څه نه شته.',
 'watchlistanontext' => 'د خپل کتنلړ د توکو د سمولو او کتلو لپاره $1 ترسره کړۍ.',
 'watchnologin' => 'غونډال کې نه ياست ننوتي.',
-'watchnologintext' => 'ددÛ\90 Ù\84پارÙ\87 Ú\86Û\90 Ø®Ù¾Ù\84 Ú©ØªÙ\84 Ø´Ù\88Ù\8a Ù\84Ú\93Ù\84Ù\8aÚ© Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ù\86Ù\88 ØªØ§Ø³Ù\88 ØªÙ\87 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ù\84Ù\88Ù\85Ú\93Û\8c ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 [[Special:UserLogin|Ù\86Ù\86Ù\88تÙ\86Ù\87]] ØªØ±Ø³Ø±Ù\87 Ú©Ú\93Û\8c.',
+'watchnologintext' => 'ددÛ\90 Ù\84پارÙ\87 Ú\86Û\90 Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ù\86Ù\88 ØªØ§Ø³Ù\88 ØªÙ\87 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ù\84Ù\88Ù\85Ú\93Û\8c ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 [[Special:UserLogin|Ù\88رÙ\86Ù\86Ù\88Ú\81Û\8d]].',
 'addwatch' => 'کتنلړ کې ورګډول',
 'addedwatchtext' => "د \"[[:\$1]]\" په نوم يو مخ ستاسې [[Special:Watchlist|کتنلړ]] کې ورګډ شو.
 په راتلونکې کې چې په دغه مخ او د ده د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاره شي،
@@ -1615,6 +1646,8 @@ $1',
 'wlheader-enotif' => 'د برېښليک له لارې خبرول چارن شوی.*',
 'wlheader-showupdated' => "* هغه مخونه چې وروستی ځل ستاسو د کتلو نه وروسته بدلون موندلی په '''روڼ''' ليک نښه شوي.",
 'watchlistcontains' => 'ستاسې کتنلړ $1 {{PLURAL:$1|مخ|مخونه}} لري.',
+'iteminvalidname' => "د '$1' توکي سره ستونزه، ناسم نوم ...",
+'wlnote' => "دلته لاندې {{PLURAL:$1|وروستی بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2|تېر يوه ساعت|تېرو '''$2''' ساعتونو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
 'wlshowlast' => 'وروستي $1 ساعتونه $2 ورځې $3 ښکاره کړه',
 'watchlist-options' => 'د کتنلړ خوښنې',
 
@@ -1703,6 +1736,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protectexpiry' => 'د پای نېټه:',
 'protect_expiry_invalid' => 'د پای وخت ناسم دی.',
 'protect_expiry_old' => 'د پای وخت په تېرمهال کې دی.',
+'protect-unchain-permissions' => 'د لا ژغورلو خوښنې پرانيستل',
 'protect-text' => "تاسې کولای شی چې د '''$1''' مخ لپاره د ژغورلو کچه همدلته وګورۍ او بدلون پکې راولی.",
 'protect-locked-access' => "ستاسې ګڼون دا اجازه نه لري چې د پاڼو د ژغورنې په کچه کې بدلون راولي.
 دلته د '''$1''' مخ لپاره اوسني شته امستنې دي:",
@@ -1736,7 +1770,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pagesize' => '(بايټونه)',
 
 # Restrictions (nouns)
-'restriction-edit' => 'سÙ\85Ù\88Ù\86',
+'restriction-edit' => 'سÙ\85Ù\88Ù\84',
 'restriction-move' => 'لېږدول',
 'restriction-create' => 'جوړول',
 'restriction-upload' => 'پورته کول',
@@ -1750,13 +1784,14 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'undelete' => 'ړنګ شوي مخونه کتل',
 'undeletepage' => 'ړنګ شوي مخونه کتل او بېرته پرځای کول',
 'viewdeletedpage' => 'ړنګ شوي مخونه کتل',
-'undeletebtn' => 'بېرته پرځای کول',
+'undeletebtn' => 'بيازېرمل',
 'undeletelink' => 'کتل/بيازېرمل',
 'undeleteviewlink' => 'کتل',
 'undeletereset' => 'بياايښودل',
 'undeleteinvert' => 'ټاکنې سرچپه کول',
 'undeletecomment' => 'سبب:',
 'undeletedfiles' => '{{PLURAL:$1|1 دوتنه بيازېرمه شوه|$1 دوتنې بيازېرمه شوې}}',
+'undelete-header' => 'د وروستيو ړنګو شوو مخونو لپاره [[Special:Log/delete|د ړنګولو يادښت]] وګورۍ.',
 'undelete-search-box' => 'ړنګ شوي مخونه لټول',
 'undelete-search-prefix' => 'هغه مخونه ښکاره کړه چې پېلېږي په:',
 'undelete-search-submit' => 'پلټل',
@@ -1774,13 +1809,13 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'mycontris' => 'زما ونډې',
 'contribsub2' => 'د $1 لپاره ($2)',
 'uctop' => '(سرپاڼه)',
-'month' => 'Ù\84Ù\87 Ù¼Ø§Ú©Ù\84Û\90 Ù\85Ù\8aاشتÛ\90 Ù\86Ù\87 Ø±Ø§Ù¾Ø¯Û\90Ø®Ù\88ا (اÙ\88 ØªØ± Ø¯Û\90 پخواني):',
-'year' => 'له ټاکلي کال نه راپدېخوا (او تر دې پخواني):',
+'month' => 'Ù\84Ù\87 Ù\85Ù\8aاشتÛ\90 Ø¯ (اÙ\88 پخواني):',
+'year' => 'له کال د (او پخواني):',
 
 'sp-contributions-newbies' => 'د نوو ګڼونونو ونډې ښکاره کول',
 'sp-contributions-newbies-sub' => 'د نوو ګڼونونو لپاره',
 'sp-contributions-blocklog' => 'د بنديز يادښت',
-'sp-contributions-deleted' => 'د کارن ونډې ړنګې شوې',
+'sp-contributions-deleted' => 'ړنګې شوې ونډې',
 'sp-contributions-uploads' => 'پورته کېدنې',
 'sp-contributions-logs' => 'يادښتونه',
 'sp-contributions-talk' => 'خبرې اترې',
@@ -1873,7 +1908,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'contribslink' => 'ونډې',
 'emaillink' => 'برېښليک لېږل',
 'autoblocker' => 'په اتوماتيک ډول ستاسو مخنيوی شوی دا ځکه چې ستاسو IP پته وروستی ځل د "[[User:$1|$1]]" له خوا کارېدلې. او د $1 د مخنيوي سبب دا دی: "$2"',
-'blocklogpage' => 'د مخنيوي يادښت',
+'blocklogpage' => 'د بنديز يادښت',
 'blocklogentry' => 'په [[$1]] بنديز لګېدلی چې د بنديز د پای وخت يې $2 $3 دی',
 'unblocklogentry' => 'بنديز ليرې شو $1',
 'block-log-flags-anononly' => 'يواځې ورکنومي کارنان',
@@ -1908,6 +1943,16 @@ $UNWATCHURL  نه ليدنه وکړۍ
 '''ګواښنه!'''
 يوه نوي نوم ته د مخونو د نوم بدلون کېدای شي چې په نامتو مخونو کې بنسټيزه او نه اټکل کېدونکی بدلونونه رامېنځ ته کړي;
 مخکې له دې نه چې پرمخ ولاړ شی، لطفاُ لومړی خپل ځان په دې ډاډه کړی چې تاسې ددغې کړنې په پايلو ښه پوهېږۍ.",
+'movepagetext-noredirectfixer' => "د لاندينۍ فورمې په کارولو سره تاسې د يوه مخ نوم بدلولی شی، چې په همدې توګه به د يوه مخ ټول پېښليک د هغه د نوي نوم سرليک ته ولېږدېږي.
+د يوه مخ، پخوانی نوم به د نوي نوم ورګرځونکی مخ وګرځي او نوي سرليک ته به وګرځولی شي.
+
+[[Special:BrokenRedirects|د ماتو مخ ګرځونو]] يا [[Special:DoubleRedirects|دوه ځلي مخ ګرځونو]] د ستونزو د پېښېدو په خاطر ځان ډاډه کړی چې ستاسې مخ ګرځونې ماتې يا دوه ځله نه وي.
+دا ستاسې پازه ده چې ځان په دې هم ډاډمن کړی چې آيا هغه تړنې کوم چې د يو مخ سره پکار دي چې وي، همداسې په پرله پسې توګه پېيلي او خپل د موخې ځايونو سره اړونده دي که نه.
+
+په ياد مو اوسه چې يو مخ به '''هېڅکله''' و نه لېږدېږي که چېرته د پخوا نه په هماغه نوم يو بل مخ شتون ولري، خو که چېرته يو مخ تش وه او يا هم يوه مخ ګرځونه چې پېښليک کې يې بدلون نه وي راغلی. نو دا په دې مانا ده چې تاسې کولای شی چې د يو مخ نوم بېرته هماغه پخواني نوم ته بدل کړی چې د پخوا نه يې درلوده، که چېرته تاسې تېرووځۍ نو په داسې حال کې تاسې نه شی کولای چې د يوه مخ پر سر يو څه وليکۍ.
+
+'''ګواښنه!'''
+يوه نوي نوم ته د مخونو د نوم بدلون کېدای شي چې په نامتو مخونو کې بنسټيزه او نه اټکل کېدونکي بدلونونه رامېنځ ته کړي; مخکې له دې نه چې پرمخ ولاړ شی، لطفاُ لومړی خپل ځان په دې ډاډه کړی چې تاسې ددغې کړنې په پايلو ښه پوهېږۍ.",
 'movepagetalktext' => "همدې مخ ته اړونده د خبرواترو مخ هم په اتوماتيک ډول لېږدول کېږي '''خو که چېرته:'''
 *په نوي نوم د پخوا نه د خبرواترو يو مخ شتون ولري، او يا هم
 *تاسې ته لاندې ورکړ شوی څلورڅنډی په نښه شوی وي.
@@ -1962,7 +2007,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'allmessagesdefault' => 'ټاکل شوی متن',
 'allmessagescurrent' => 'اوسنی متن',
 'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
-که چېرته تاسو د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ويډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] نه ليدنه وکړۍ.',
+که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ويډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] نه ليدنه وکړۍ.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
 'allmessages-filter-legend' => 'چاڼګر',
 'allmessages-filter-unmodified' => 'نابدلېدلي',
@@ -1979,6 +2024,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # Special:Import
 'import-interwiki-source' => 'سرچينيز ويکي/مخ:',
+'import-interwiki-history' => 'د دې مخ د پېښليک ټولې بڼې لمېسل',
 'import-interwiki-templates' => 'ټولې کينډۍ نغاړل',
 'import-interwiki-namespace' => 'د موخې نوم-تشيال:',
 'import-upload-filename' => 'د دوتنې نوم:',
@@ -1997,7 +2043,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-pt-watchlist' => 'د هغه مخونو لړليک چې تاسې يې د بدلون لپاره څاری',
 'tooltip-pt-mycontris' => 'ستاسې د ونډو لړليک',
 'tooltip-pt-login' => 'تاسې ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.',
-'tooltip-pt-anonlogin' => 'تاسÙ\88 ØªÙ\87 Ù¾Ù\87 ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 Ø¯ Ù\86Ù\86Ù\88تÙ\86Û\90 سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.',
+'tooltip-pt-anonlogin' => 'تاسÙ\88 ØªÙ\87 Ù¾Ù\87 ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 Ø¯ Ù\86Ù\86Ù\88تÙ\84Ù\88 سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.',
 'tooltip-pt-logout' => 'وتل',
 'tooltip-ca-talk' => 'د مخ د مېنځپانګې په اړه خبرې اترې',
 'tooltip-ca-edit' => 'تاسې همدا مخ سمولای شی. لطفاً د ليکنې د خوندي کولو دمخه، د همدې ليکنې مخليدنه وګورۍ.',
@@ -2054,6 +2100,12 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-preferences-save' => 'غوره توبونه خوندي کول',
 'tooltip-summary' => 'يو لنډ لنډيز کښل',
 
+# Stylesheets
+'vector.css' => '/* د CSS هره بڼه چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */',
+
+# Scripts
+'vector.js' => '/* د جاوا هر يو سکرېپټ چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */',
+
 # Attribution
 'anonymous' => 'د {{SITENAME}} {{PLURAL:$1|ورکنومی کارن|ورکنومي کارنان}}',
 'siteuser' => 'د {{SITENAME}} کارن $1',
@@ -2066,10 +2118,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # Info page
 'pageinfo-title' => 'د "$1" مالومات',
-'pageinfo-header-edits' => 'سÙ\85Ù\88Ù\86Ù\88Ù\86Ù\87',
+'pageinfo-header-edits' => 'د Ø³Ù\85Ù\88Ù\86 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ©',
 'pageinfo-views' => 'د کتنو شمېر',
-'pageinfo-watchers' => 'د کتونکو شمېر',
-'pageinfo-edits' => 'د سمونونو شمېر',
+'pageinfo-watchers' => 'د مخ د کتونکو شمېر',
+'pageinfo-edits' => 'د ټولو سمونونو شمېر',
 
 # Skin names
 'skinname-standard' => 'کلاسيک',
@@ -2080,12 +2132,16 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'skinname-chick' => 'شيک',
 'skinname-simple' => 'ساده',
 'skinname-modern' => 'نوی',
+'skinname-vector' => 'وېکټور',
 
 # Patrolling
 'markaspatrolledtext' => 'دا مخ څارل شوی په نخښه کول',
 
 # Image deletion
 'filedeleteerror-short' => 'د دوتنې د ړنګولو ستونزه: $1',
+'filedeleteerror-long' => 'د دوتنې په ړنګولو کې تېروتنې پېښې شوې:
+
+$1',
 
 # Browsing diffs
 'previousdiff' => 'تېر توپير ←',
@@ -2155,7 +2211,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-imagewidth' => 'سوروالی',
 'exif-imagelength' => 'لوړوالی',
 'exif-datetime' => 'د دوتنې د بدلون وخت او نېټه',
-'exif-imagedescription' => 'د Ø§Ù\86Ú\81Ù\88ر Ø³Ø±Ù\84Ù\8aÚ©',
+'exif-imagedescription' => 'انځور سرليک',
 'exif-make' => 'د کامرې جوړونکی',
 'exif-model' => 'د کامرې ماډل',
 'exif-software' => 'کارېدلې ساوترۍ',
@@ -2164,7 +2220,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-colorspace' => 'رنګ تشيال',
 'exif-pixelydimension' => 'د انځور سور',
 'exif-pixelxdimension' => 'د انځور جګوالی',
-'exif-usercomment' => 'د Ú©Ø§Ø±Ù\88Ù\86Ú©Ù\8a تبصرې',
+'exif-usercomment' => 'د Ú©Ø§Ø±Ù\86 تبصرې',
 'exif-relatedsoundfile' => 'اړونده غږيزه دوتنه',
 'exif-datetimedigitized' => 'د ګڼياليز کېدنې وخت او نېټه',
 'exif-fnumber' => 'F شمېره',
@@ -2330,7 +2386,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # E-mail address confirmation
 'confirmemail' => 'د برېښليک پتې پخلی وکړی',
-'confirmemail_noemail' => 'تاسو يوه سمه برېښناليک پته نه ده ثبته کړې مهرباني وکړی [[Special:Preferences|د کارونکي غوره توبونه]] کې مو بدلون راولی.',
+'confirmemail_noemail' => 'تاسې يوه سمه برېښليک پته نه ده ثبته کړې مهرباني وکړی [[Special:Preferences|د کارن غوره توبونه]] مو بدل کړۍ.',
 'confirmemail_send' => 'يو تاييدي کوډ لېږل',
 'confirmemail_sent' => 'تاييدي برېښليک ولېږل شو.',
 'confirmemail_oncreate' => 'ستاسو د برېښناليک پتې ته يو تاييدي کوډ درولېږل شو.
@@ -2366,6 +2422,11 @@ $5
 'confirm-watch-button' => 'ښه',
 'confirm-unwatch-button' => 'ښه',
 
+# Separators for various lists, etc.
+'percent' => '$1%',
+'parentheses' => '($1)',
+'brackets' => '[$1]',
+
 # Multipage image navigation
 'imgmultipageprev' => '← پخوانی مخ',
 'imgmultipagenext' => 'راتلونکی مخ →',
@@ -2390,6 +2451,17 @@ $5
 'autoredircomment' => '[[$1]] ته وګرځولی شو',
 'autosumm-new' => 'د "$1" تورو مخ جوړ شو',
 
+# Size units
+'size-bytes' => '$1 بايټ',
+'size-kilobytes' => '$1 کيلوبايټ',
+'size-megabytes' => '$1 مېګابايټ',
+'size-gigabytes' => '$1 ګېګابايټ',
+'size-terabytes' => '$1 ټېرابايټ',
+'size-petabytes' => '$1 پېبي بايټ',
+'size-exabytes' => '$1 اېکسبي بايټ',
+'size-zetabytes' => '$1 زېبي بايټ',
+'size-yottabytes' => '$1 يوبي بايټ',
+
 # Live preview
 'livepreview-loading' => 'برسېرېدنې کې دی...',
 'livepreview-ready' => 'برسېرېدنه ... چمتو ده!',
@@ -2427,6 +2499,28 @@ $5
 'iranian-calendar-m11' => 'سلواغه',
 'iranian-calendar-m12' => 'کب',
 
+# Hijri month names
+'hijri-calendar-m1' => 'محرم',
+'hijri-calendar-m2' => 'صفر',
+'hijri-calendar-m3' => 'ربيع الاول',
+'hijri-calendar-m4' => 'ربيع الثاني',
+'hijri-calendar-m5' => 'جمادى الاولى',
+'hijri-calendar-m6' => 'جمادى الثانية',
+'hijri-calendar-m7' => 'رجب',
+'hijri-calendar-m8' => 'شعبان',
+'hijri-calendar-m9' => 'رمضان',
+'hijri-calendar-m10' => 'شوال',
+'hijri-calendar-m11' => 'ذو القعدة',
+'hijri-calendar-m12' => 'ذو الحجة',
+
+# Hebrew month names
+'hebrew-calendar-m1' => 'تيشري',
+'hebrew-calendar-m2' => 'حشوان',
+'hebrew-calendar-m3' => 'كيسليف',
+'hebrew-calendar-m4' => 'تيفيت',
+'hebrew-calendar-m5' => 'شيفات',
+'hebrew-calendar-m6' => 'آدار',
+
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|خبرې اترې]])',
 
@@ -2471,9 +2565,11 @@ $5
 * نورماله ځانګړي مخونه.
 * <strong class="mw-specialpagerestricted">محدوده ځانګړي مخونه.</strong>
 * <span class="mw-specialpagecached">رانيولي ځانګړي مخونه (کېدای شي منسوخ شوی وي).</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' => 'د مخونو لړليک',
@@ -2538,6 +2634,7 @@ $5
 'logentry-move-move' => '$1 د $3 مخ $4 ته ولېږداوه',
 'logentry-newusers-newusers' => '$1 يو کارن ګڼون جوړ کړ',
 'logentry-newusers-create' => '$1 يو کارن ګڼون جوړ کړ',
+'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول جوړ شو',
 'newuserlog-byemail' => 'پټنوم مو برېښليک ته درولېږه',
 
 # Feedback
@@ -2546,6 +2643,9 @@ $5
 'feedback-cancel' => 'ناګارل',
 'feedback-close' => 'ترسره شو',
 
+# Search suggestions
+'searchsuggest-search' => 'پلټل',
+
 # API errors
 'api-error-duplicate-popup-title' => 'غبرګونې {{PLURAL:$1|دوتنه|دوتنې}}.',
 'api-error-empty-file' => 'کومه دوتنه چې تاسې دلته سپارلې هغه تشه ده.',
index 4f6d8e1..cc58d37 100644 (file)
@@ -195,117 +195,117 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'direita', 'right' ),
-       'img_left'                => array( '1', 'esquerda', 'left' ),
-       'img_none'                => array( '1', 'nenhum', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'semmoldura', 'semborda', 'frameless' ),
-       'img_page'                => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'borda', 'border' ),
-       'img_baseline'            => array( '1', 'linhadebase', 'baseline' ),
-       'img_top'                 => array( '1', 'acima', 'top' ),
-       'img_middle'              => array( '1', 'meio', 'middle' ),
-       'img_bottom'              => array( '1', 'abaixo', 'bottom' ),
-       'img_link'                => array( '1', 'ligação=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
-       'gender'                  => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
-       'revisionuser'            => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
-       'uc'                      => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
-       'displaytitle'            => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'direita', 'right' ),
+       'img_left'                  => array( '1', 'esquerda', 'left' ),
+       'img_none'                  => array( '1', 'nenhum', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'semmoldura', 'semborda', 'frameless' ),
+       'img_page'                  => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'borda', 'border' ),
+       'img_baseline'              => array( '1', 'linhadebase', 'baseline' ),
+       'img_top'                   => array( '1', 'acima', 'top' ),
+       'img_middle'                => array( '1', 'meio', 'middle' ),
+       'img_bottom'                => array( '1', 'abaixo', 'bottom' ),
+       'img_link'                  => array( '1', 'ligação=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
+       'gender'                    => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
+       'revisionuser'              => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
+       'uc'                        => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
+       'displaytitle'              => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
 );
 
 $messages = array(
@@ -690,7 +690,7 @@ Consulta: $2',
 'protectedpagetext' => 'Esta página foi protegida contra novas edições.',
 '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.',
+'protectedinterface' => 'Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.',
 'editinginterface' => "'''Aviso:''' Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afectarão a aparência da interface de utilizador para os outros utilizadores. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projecto destinado à 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 protecção "em cascata" activada):
@@ -717,7 +717,7 @@ O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
 # Login and logout pages
 'logouttext' => "'''Já não está autenticado.'''
 
-Pode continuar a utilizar a {{SITENAME}} anonimamente, ou pode [[Special:UserLogin|autenticar-se novamente]] com o mesmo nome de utilizador ou com um nome de utilizador diferente.
+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.
@@ -976,8 +976,7 @@ Pode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras p
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.',
 'noarticletext-nopermission' => 'Ainda não existe texto nesta página.
-Pode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas
-ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]</span>.',
+Pode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas, ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar nos registos relacionados]</span>, mas não tem permissão para criar esta página.',
 'missing-revision' => 'A revisão #$1 da página denominada "{{PAGENAME}}" não existe.
 
 Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
@@ -987,12 +986,10 @@ Verifique se deseja realmente criar ou editar esta página, por favor.',
 'userpage-userdoesnotexist-view' => 'A conta de utilizador "$1" não está registada.',
 'blocked-notice-logextract' => 'Este utilizador encontra-se actualmente bloqueado.
 Para referência, o último registo de bloqueio é apresentado abaixo:',
-'clearyourcache' => "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.'''
-
+'clearyourcache' => "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.
 *'''Firefox / Safari:''' Pressione ''Shift'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' no Mac)
 *'''Google Chrome:''' Pressione ''Ctrl-Shift-R'' (''⌘-Shift-R'' no Mac)
 *'''Internet Explorer:''' Pressione ''Ctrl'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5''
-*'''Konqueror:''' Clique ''Recarregar'' ou pressione ''F5''
 *'''Opera:''' Limpe a ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo CSS antes de gravar.",
 'userjsyoucanpreview' => "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo JavaScript antes de gravar.",
@@ -1254,7 +1251,8 @@ Verifique os registos, por favor.',
 'revdelete-only-restricted' => 'Erro ao ocultar o item de $2 às $1: não pode impedir que os itens sejam vistos pelos administradores sem seleccionar também uma das outras opções de visibilidade.',
 'revdelete-reason-dropdown' => '*Razões comuns para eliminação
 ** Violação de direitos de autor
-** Informações pessoais inapropriadas
+** Comentário ou informações pessoais inapropriados
+** Nome de utilizador inapropriado
 ** Informações potencialmente difamatórias',
 'revdelete-otherreason' => 'Outro/motivo adicional:',
 'revdelete-reasonotherlist' => 'Outro motivo',
@@ -1354,8 +1352,6 @@ Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-interwiki-caption' => 'Projectos associados',
 'search-interwiki-default' => 'Resultados de $1:',
 'search-interwiki-more' => '(mais)',
-'search-mwsuggest-enabled' => 'com sugestões',
-'search-mwsuggest-disabled' => 'sem sugestões',
 'search-relatedarticle' => 'Relacionado',
 'mwsuggest-disable' => 'Desactivar sugestões AJAX',
 'searcheverything-enable' => 'Pesquisar em todos os espaços nominais',
@@ -2022,6 +2018,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.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -2129,6 +2126,7 @@ Agora redirecciona para [[$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|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|edição|edições}}',
@@ -2157,6 +2155,7 @@ Agora redirecciona para [[$2]].',
 'mostlinkedtemplates' => 'Predefinições com mais afluentes',
 'mostcategories' => 'Páginas com mais categorias',
 'mostimages' => 'Ficheiros com mais afluentes',
+'mostinterwikis' => 'Páginas com mais interwikis',
 'mostrevisions' => 'Páginas com mais revisões',
 'prefixindex' => 'Todas as páginas iniciadas por',
 'prefixindex-namespace' => 'Todas as páginas com prefixo (domínio $1)',
@@ -2504,7 +2503,7 @@ Pode alterar o nível de protecção desta página, mas isso não afectará a pr
 'protect-summary-cascade' => 'em cascata',
 'protect-expiring' => 'expira a $1 (UTC)',
 'protect-expiring-local' => 'expira a $1',
-'protect-expiry-indefinite' => 'infinito',
+'protect-expiry-indefinite' => 'tempo indefinido',
 'protect-cascade' => 'Proteja quaisquer páginas que estejam incluídas nesta (protecção em cascata)',
 'protect-cantedit' => 'Não pode alterar o nível de protecção desta página, porque não tem permissão para editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2980,6 +2979,7 @@ Não há um directório temporário.',
 'import-error-interwiki' => 'A página "$1" não pode ser importada pois seu nome está reservado para um link externo (interwiki).',
 'import-error-special' => 'A página "$1" não pode ser importada porque ela pertence a um espaço nominal especial que não permite páginas.',
 'import-error-invalid' => 'A página "$1" não pode ser importada porque seu nome é inválido.',
+'import-options-wrong' => '{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Registo de importações',
@@ -2991,7 +2991,6 @@ Não há um directório temporário.',
 
 # JavaScriptTest
 'javascripttest' => 'Teste de JavaScript',
-'javascripttest-disabled' => 'Esta função está desabilitada neste wiki.',
 'javascripttest-title' => 'Executando os testes $1',
 'javascripttest-pagetext-noframework' => 'Esta página é reservada para a execução de testes de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Estrutura de testes "$1" desconhecido.',
@@ -3124,11 +3123,31 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
-'pageinfo-header-edits' => 'Edições',
+'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-length' => 'Tamanho da página (em bytes)',
+'pageinfo-article-id' => 'ID da página',
+'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
+'pageinfo-robot-index' => 'Indexável',
+'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
-'pageinfo-watchers' => 'Número de vigilantes',
-'pageinfo-edits' => 'Número de edições',
-'pageinfo-authors' => 'Número de autores individuais',
+'pageinfo-watchers' => 'Número de vigilantes da página',
+'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-subpages-name' => 'Subpáginas desta página',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
+'pageinfo-firstuser' => 'Criador da página',
+'pageinfo-firsttime' => 'Data de criação da página',
+'pageinfo-lastuser' => 'Último editor',
+'pageinfo-lasttime' => 'Data da última edição',
+'pageinfo-edits' => 'Número total de edições',
+'pageinfo-authors' => 'Número total de autores distintos',
+'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
+'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)',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3863,7 +3882,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
-'specialpages-group-login' => 'Entrar / registar-se',
+'specialpages-group-login' => 'Entrar / criar conta',
 'specialpages-group-changes' => 'Mudanças e registos recentes',
 'specialpages-group-media' => 'Listas e carregamento de ficheiros',
 'specialpages-group-users' => 'Utilizadores e privilégios',
@@ -3986,6 +4005,10 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'feedback-bugcheck' => 'Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].',
 'feedback-bugnew' => 'Eu verifiquei. Comunicar um novo defeito.',
 
+# Search suggestions
+'searchsuggest-search' => 'Pesquisa',
+'searchsuggest-containing' => 'contendo...',
+
 # API errors
 'api-error-badaccess-groups' => 'Não tem permissão para enviar ficheiros para esta wiki.',
 'api-error-badtoken' => 'Erro interno: Chave incorrecta.',
index bd758a9..5db359b 100644 (file)
@@ -198,118 +198,118 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__TDC__', '__SUMARIO__', '__SUMÁRIO__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NAOEDITARSECAO__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'img_thumbnail'           => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'direita', 'right' ),
-       'img_left'                => array( '1', 'esquerda', 'left' ),
-       'img_none'                => array( '1', 'nenhum', 'none' ),
-       'img_center'              => array( '1', 'centro', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'semmoldura', 'semborda', 'frameless' ),
-       'img_page'                => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'borda', 'border' ),
-       'img_baseline'            => array( '1', 'linhadebase', 'baseline' ),
-       'img_top'                 => array( '1', 'acima', 'top' ),
-       'img_middle'              => array( '1', 'meio', 'middle' ),
-       'img_bottom'              => array( '1', 'abaixo', 'bottom' ),
-       'img_link'                => array( '1', 'ligação=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
-       'server'                  => array( '0', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
-       'gender'                  => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
-       'revisionuser'            => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
-       'uc'                      => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
-       'displaytitle'            => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
-       'language'                => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
-       'defaultsort'             => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'CAMINHO', 'PATH' ),
+       'redirect'                  => array( '0', '#REDIRECIONAMENTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__SEMGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__TDC__', '__SUMARIO__', '__SUMÁRIO__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NAOEDITARSECAO__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DIAATUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DIAATUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NOMEDODIAATUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANOATUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'HORARIOATUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'HORAATUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'ABREVIATURADOMESLOCAL', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DIALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NOMEDODIALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'HORARIOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMERODEPAGINAS', 'NÚMERODEPÁGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMERODEARTIGOS', 'NÚMERODEARTIGOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMERODEARQUIVOS', 'NÚMERODEARQUIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'DOMINIOC', 'DOMÍNIOC', 'ESPACONOMINALC', 'ESPAÇONOMINALC', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PAGINADEDISCUSSAOC', 'PÁGINADEDISCUSSÃOC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PAGINADECONTEUDOC', 'PAGINADECONTEÚDOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NOMECOMPLETODAPAGINAC', 'NOMECOMPLETODAPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NOMEDASUBPAGINAC', 'NOMEDASUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NOMEDAPAGINABASEC', 'NOMEDAPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'img_thumbnail'             => array( '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'direita', 'right' ),
+       'img_left'                  => array( '1', 'esquerda', 'left' ),
+       'img_none'                  => array( '1', 'nenhum', 'none' ),
+       'img_center'                => array( '1', 'centro', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'semmoldura', 'semborda', 'frameless' ),
+       'img_page'                  => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'borda', 'border' ),
+       'img_baseline'              => array( '1', 'linhadebase', 'baseline' ),
+       'img_top'                   => array( '1', 'acima', 'top' ),
+       'img_middle'                => array( '1', 'meio', 'middle' ),
+       'img_bottom'                => array( '1', 'abaixo', 'bottom' ),
+       'img_link'                  => array( '1', 'ligação=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'NOMEDOSITIO', 'SITENAME' ),
+       'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
+       'gender'                    => array( '0', 'GENERO', 'GÊNERO', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__SEMCONVERTERTITULO__', '__SEMCONVERTERTÍTULO__', '__SEMCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__SEMCONVERTERCONTEUDO__', '__SEMCONVERTERCONTEÚDO__', '__SEMCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SEMANAATUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'DIADASEMANAATUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'DIADASEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
+       'revisionuser'              => array( '1', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETOC:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'PRIMEIRAMINUSCULA:', 'PRIMEIRAMINÚSCULA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEIRAMAIUSCULA:', 'PRIMEIRAMAIÚSCULA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
+       'uc'                        => array( '0', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
+       'displaytitle'              => array( '1', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__SEMLINKDENOVASECAO__', '__SEMLINKDENOVASEÇÃO__', '__SEMLIGACAODENOVASECAO__', '__SEMLIGAÇÃODENOVASEÇÃO__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAANCORA:', 'CODIFICAÂNCORA:', 'ANCHORENCODE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMERODEADMINISTRADORES', 'NÚMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CAMINHODOARQUIVO', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'CAMINHO', 'PATH' ),
 );
 
 $messages = array(
@@ -328,17 +328,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Habilitar edição de seção por clique com o botão direito no título da seção (JavaScript)',
 'tog-showtoc' => 'Mostrar Tabela de Conteúdos (para páginas com mais de três cabeçalhos)',
 'tog-rememberpassword' => 'Recordar os meus dados neste navegador (por no máximo $1 {{PLURAL:$1|dia|dias}})',
-'tog-watchcreations' => 'Adicionar páginas criadas por mim à minha lista de páginas vigiadas',
-'tog-watchdefault' => 'Adicionar páginas editadas por mim à minha lista de páginas vigiadas',
-'tog-watchmoves' => 'Adicionar páginas movidas por mim à minha lista de páginas vigiadas',
-'tog-watchdeletion' => 'Adicionar páginas eliminadas por mim à minha lista de páginas vigiadas',
+'tog-watchcreations' => 'Adicionar as páginas e arquivos que eu criar às minhas páginas vigiadas',
+'tog-watchdefault' => 'Adicionar as páginas e arquivos que eu editar às minhas páginas vigiadas',
+'tog-watchmoves' => 'Adicionar as páginas e arquivos que eu mover às minhas páginas vigiadas',
+'tog-watchdeletion' => 'Adicionar as páginas e arquivos que eu eliminar às minhas páginas vigiadas',
 'tog-minordefault' => 'Marcar todas as edições como secundárias, por padrão',
 'tog-previewontop' => 'Mostrar previsão antes da caixa de edição',
 'tog-previewonfirst' => 'Mostrar previsão na primeira edição',
 'tog-nocache' => 'Desativar o cache de páginas do navegador',
-'tog-enotifwatchlistpages' => 'Receber e-mail quando uma página da minha lista de páginas vigiadas for alterada',
+'tog-enotifwatchlistpages' => 'Notificar-me por e-mail quando uma página ou arquivo vigiado for alterado',
 'tog-enotifusertalkpages' => 'Receber e-mail quando a minha página de discussão for editada',
-'tog-enotifminoredits' => 'Enviar-me um email também quando forem edições menores',
+'tog-enotifminoredits' => 'Notificar-me por e-mail também sobre edições menores de páginas ou arquivos',
 'tog-enotifrevealaddr' => 'Revelar o meu endereço de email nas notificações',
 'tog-shownumberswatching' => 'Mostrar o número de usuários que estão vigiando',
 'tog-oldsig' => 'Assinatura existente:',
@@ -578,6 +578,10 @@ 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)',
+'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}}',
 'youhavenewmessagesmulti' => 'Você tem novas mensagens em $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -671,6 +675,8 @@ Anote o URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].
 'cannotdelete' => 'Não foi possível eliminar a página ou arquivo $1.
 É possível que ele já tenha sido eliminado por outra pessoa.',
 'cannotdelete-title' => 'Não é possível excluir a página " $1 "',
+'delete-hook-aborted' => 'A eliminação foi cancelada por um "hook".
+Não foi dada nenhuma explicação.',
 'badtitle' => 'Título inválido',
 'badtitletext' => 'O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorreto.
 Talvez contenha um ou mais caracteres que não podem ser usados em títulos.',
@@ -715,7 +721,7 @@ O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
 # Login and logout pages
 'logouttext' => "'''Agora você encontra-se desautenticado.'''
 
-É possível continuar usando {{SITENAME}} anonimamente ou [[Special:UserLogin|autenticar-se novamente]] com o mesmo nome de usuário ou com um nome diferente.
+É 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.
@@ -726,6 +732,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'remembermypassword' => 'Lembrar meu login neste navegador (por no máximo $1 {{PLURAL:$1|dia|dias}})',
 'securelogin-stick-https' => 'Permanecer conectado ao HTTPS após a autenticação',
 'yourdomainname' => 'Seu domínio:',
+'password-change-forbidden' => 'Você não pode alterar senhas nessa wiki.',
 'externaldberror' => 'Ocorreu ou um erro no banco de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.',
 'login' => 'Autenticar-se',
 'nav-login-createaccount' => 'Entrar / criar conta',
@@ -965,16 +972,19 @@ ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.',
 'noarticletext-nopermission' => 'No momento, não há conteúdo nesta página
 Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas,
 ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] </span>.',
+'missing-revision' => 'A revisão #$1 da página denominada "{{PAGENAME}}" não existe.
+
+Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
+Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].',
 'userpage-userdoesnotexist' => 'A conta "<nowiki>$1</nowiki>" não se encontra registrada.
 Verifique se deseja mesmo criar/editar esta página.',
 'userpage-userdoesnotexist-view' => 'A conta de usuário "$1" não está registrada.',
 'blocked-notice-logextract' => 'Este usuário está atualmente bloqueado.
 O registro de bloqueio mais recente é fornecido abaixo, para referência:',
-'clearyourcache' => "'''Nota:''' Depois de salvar, você terá de limpar o ''cache'' do seu navegador para ver as alterações.
+'clearyourcache' => "Nota:''' Depois de salvar, você terá de limpar o ''cache'' do seu navegador para ver as alterações.
 * '''Firefox / Safari:''' pressione ''Shift'' enquanto clica em ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''Command-R'' para Mac);
 * '''Google Chrome:''' pressione ''Ctrl-Shift-R'' (''Command-Shift-R'' em um Mac)
 * '''Internet Explorer:''' pressione ''Ctrl'' enquanto clica em ''Recarregar'' ou pressione ''Ctrl-F5'';
-* '''Konqueror:''' clique no botão ''Recarregar'' ou pressione ''F5'';
 * '''Opera:''' limpe o ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo CSS antes de salvar.",
 'userjsyoucanpreview' => "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo JavaScript antes de salvar.",
@@ -1087,6 +1097,13 @@ Estes argumentos foram omitidos.',
 'parser-template-loop-warning' => 'Ciclo de predefinições detectado: [[$1]]',
 'parser-template-recursion-depth-warning' => 'O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)',
 'language-converter-depth-warning' => 'O limite de profundidade do conversor de línguas excedeu a ($1)',
+'node-count-exceeded-category' => 'Páginas em que o total de nós é excedido',
+'node-count-exceeded-warning' => 'A página excedeu o total de nós',
+'expansion-depth-exceeded-category' => 'Páginas em que a profundidade de expansão é excedida',
+'expansion-depth-exceeded-warning' => 'A página excedeu a profundidade de expansão',
+'parser-unstrip-loop-warning' => 'Foi detectado um ciclo infinito unstrip',
+'parser-unstrip-recursion-limit' => 'Limite de recursão do unstrip excedido ($1)',
+'converter-manual-rule-error' => 'Erro detectado na regra de conversão de língua manual',
 
 # "Undo" feature
 'undo-success' => 'A edição pôde ser desfeita. Por gentileza, verifique o comparativo a seguir para se certificar de que é isto que deseja fazer, salvando as alterações após ter terminado de revisá-las.',
@@ -1218,9 +1235,10 @@ Você não tem acesso a ele.',
 'revdelete-concurrent-change' => 'Erro ao modificar o item datado de $2, $1: o seu estado parece ter sido alterado por outra pessoa enquanto você tentava modificá-lo.
 Por favor, verifique os registros.',
 'revdelete-only-restricted' => 'Erro ao ocultar o item de $2 às $1: você não pode impedir que itens sejam visualizados por administradores sem também selecionar uma das outras opções de visibilidade.',
-'revdelete-reason-dropdown' => '*Motivos comuns para eliminação
-** Violação de direitos autorais
-** Informação pessoal inapropriada
+'revdelete-reason-dropdown' => '*Razões comuns para eliminação
+** Violação de direitos de autor
+** Comentário ou informação pessoal inapropriada
+** Nome de usuário impróprio
 ** Informação potencialmente difamatória',
 'revdelete-otherreason' => 'Outro motivo/motivo adicional:',
 'revdelete-reasonotherlist' => 'Outro motivo',
@@ -1272,6 +1290,10 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'editundo' => 'desfazer',
 'diff-multi' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de {{PLURAL:$2|um usuário|$2 usuários}} {{PLURAL:$1|não apresentada|não apresentadas}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de mais de {{PLURAL:$2|um usuário|$2 usuário}} não {{PLURAL:$1|apresentada|apresentadas}})',
+'difference-missing-revision' => '{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.
+
+Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
+Os detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].',
 
 # Search results
 'searchresults' => 'Resultados da pesquisa',
@@ -1314,8 +1336,6 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'search-interwiki-caption' => 'Projetos irmãos',
 'search-interwiki-default' => 'Resultados de $1:',
 'search-interwiki-more' => '(mais)',
-'search-mwsuggest-enabled' => 'com sugestões',
-'search-mwsuggest-disabled' => 'sem sugestões',
 'search-relatedarticle' => 'Relacionado',
 'mwsuggest-disable' => 'Desativar sugestões AJAX',
 'searcheverything-enable' => 'Procurar em todos os espaços nominais',
@@ -1541,6 +1561,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'right-writeapi' => 'Uso da API de escrita',
 'right-delete' => 'Eliminar páginas',
 'right-bigdelete' => 'Eliminar páginas com histórico grande',
+'right-deletelogentry' => 'Eliminar e restaurar entradas específicas de registos',
 'right-deleterevision' => 'Eliminar e restaurar revisões específicas de páginas',
 'right-deletedhistory' => 'Ver entradas de histórico eliminadas, sem o texto associado',
 'right-deletedtext' => 'Ver texto removido e alterado entre revisões removidas',
@@ -1851,6 +1872,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.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Não foi possível se conectar ao banco de dados de registros do sistema de armazenamento "$1".',
@@ -1865,6 +1887,7 @@ Caso o problema persista, procure um [[Special:ListUsers/sysop|administrador]].'
 'lockmanager-fail-releaselock' => 'Não foi possível liberar o bloqueio para "$1".',
 'lockmanager-fail-db-bucket' => 'Não foi possível contatar suficientemente bloqueio das bases de dados no bucket $1 .',
 'lockmanager-fail-db-release' => 'Não foi possível liberar os bloqueios para "$1".',
+'lockmanager-fail-svr-acquire' => 'Não foi possível obter bloqueios no servidor $1.',
 'lockmanager-fail-svr-release' => 'Não foi possível liberar os bloqueios do servidor "$1".',
 
 # ZipDirectoryReader
@@ -1883,6 +1906,7 @@ A sua segurança não pode ser devidamente verificada.',
 'uploadstash-badtoken' => 'Não foi possível executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.',
 'uploadstash-errclear' => 'Não foi possível apagar os arquivos.',
 'uploadstash-refresh' => 'Atualizar a lista de arquivos',
+'invalid-chunk-offset' => 'Deslocamento de fragmento inválido',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Acesso negado',
@@ -1981,6 +2005,7 @@ 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.',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -2086,6 +2111,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 # 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|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisão|revisões}}',
@@ -2114,6 +2140,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'mostlinkedtemplates' => 'Predefinições com mais afluentes',
 'mostcategories' => 'Páginas de conteúdo com mais categorias',
 'mostimages' => 'Imagens com mais afluentes',
+'mostinterwikis' => 'Páginas com mais interwikis',
 'mostrevisions' => 'Páginas de conteúdo com mais revisões',
 'prefixindex' => 'Todas as páginas com prefixo',
 'prefixindex-namespace' => 'Todas as páginas com prefixo (espaço nominal $1)',
@@ -2405,6 +2432,8 @@ prossiga com cuidado.',
 'rollback' => 'Reverter edições',
 'rollback_short' => 'Reverter',
 'rollbacklink' => 'reverter',
+'rollbacklinkcount' => 'reverter $1 {{PLURAL:$1|edição|edições}}',
+'rollbacklinkcount-morethan' => 'reverter mais de $1 {{PLURAL:$1|edição|edições}}',
 'rollbackfailed' => 'A reversão falhou',
 'cantrollback' => 'Não foi possível reverter a edição; o último contribuidor é o único autor desta página',
 'alreadyrolled' => 'Não foi possível reverter a última edição de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discussão]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2455,7 +2484,7 @@ Esta é a configuração atual para a página '''$1''':",
 'protect-summary-cascade' => 'p. progressiva',
 'protect-expiring' => 'expira em $1 (UTC)',
 'protect-expiring-local' => 'expira $1',
-'protect-expiry-indefinite' => 'indefinido',
+'protect-expiry-indefinite' => 'tempo indefinido',
 'protect-cascade' => '"Proteção progressiva" - proteja quaisquer páginas que estejam incluídas nesta.',
 'protect-cantedit' => 'Você não pode alterar o nível de proteção desta página uma vez que você não se encontra habilitado a editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2888,6 +2917,7 @@ Todas as ações de importação transwiki são registradas no [[Special:Log/imp
 'import-interwiki-templates' => 'Incluir todas as predefinições',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Domínio de destino:',
+'import-interwiki-rootpage' => 'Página raiz de destino (opcional):',
 'import-upload-filename' => 'Nome do arquivo:',
 'import-comment' => 'Comentário:',
 'importtext' => 'Por favor, exporte o arquivo do wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].
@@ -2920,6 +2950,7 @@ 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-rootpage-invalid' => 'A página raiz dada é um título inválido.',
 
 # Import log
 'importlogpage' => 'Registro de importações',
@@ -2931,7 +2962,6 @@ Salve o arquivo no seu computador e importe-o aqui.',
 
 # JavaScriptTest
 'javascripttest' => 'Teste de JavaScript',
-'javascripttest-disabled' => 'Essa função não foi habilitada neste wiki.',
 'javascripttest-title' => 'Executando testes para $1',
 'javascripttest-pagetext-noframework' => 'Esta página é exclusiva para testes de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'A estrutura de testes "$1" é desconhecida.',
@@ -3054,11 +3084,29 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
-'pageinfo-header-edits' => 'Edições',
+'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-length' => 'Tamanho da página (em bytes)',
+'pageinfo-article-id' => 'ID da página',
+'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
+'pageinfo-robot-index' => 'Indexável',
+'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
-'pageinfo-watchers' => 'Número de pessoas vigiando',
-'pageinfo-edits' => 'Número de edições',
-'pageinfo-authors' => 'Número de autores individuais',
+'pageinfo-watchers' => 'Número de vigilantes da página',
+'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-subpages-name' => 'Subpáginas desta página',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
+'pageinfo-firstuser' => 'Criador da página',
+'pageinfo-firsttime' => 'Data de criação da página',
+'pageinfo-lastuser' => 'Último editor',
+'pageinfo-lasttime' => 'Data da última edição',
+'pageinfo-edits' => 'Número total de edições',
+'pageinfo-authors' => 'Número total de autores distintos',
+'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
+'pageinfo-recent-authors' => 'Número recente de autores distintos',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3789,7 +3837,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
-'specialpages-group-login' => 'Entrar / registrar-se',
+'specialpages-group-login' => 'Entrar / Criar conta',
 'specialpages-group-changes' => 'Mudanças e registros recentes',
 'specialpages-group-media' => 'Relatórios de mídias e uploads',
 'specialpages-group-users' => 'Usuários e privilégios',
@@ -3912,6 +3960,10 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'feedback-bugcheck' => 'Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].',
 'feedback-bugnew' => 'Eu verifiquei. Relatar um bug novo',
 
+# Search suggestions
+'searchsuggest-search' => 'Pesquisa',
+'searchsuggest-containing' => 'contendo...',
+
 # API errors
 'api-error-badaccess-groups' => 'Você não tem permissão para enviar arquivos para este wiki.',
 'api-error-badtoken' => 'Erro interno: token inválido.',
index 5500ba0..30e1ec1 100644 (file)
@@ -26,6 +26,7 @@
  * @author Brest
  * @author BrokenArrow
  * @author Byrial
+ * @author BáthoryPéter
  * @author Claudia Hattitten
  * @author Codex Sinaiticus
  * @author Crt
@@ -73,6 +74,7 @@
  * @author Metalhead64
  * @author MichaelFrey
  * @author Mihai
+ * @author Minh Nguyen
  * @author Mormegil
  * @author Mpradeep
  * @author Murma174
@@ -80,6 +82,8 @@
  * @author Nemo bis
  * @author Niels
  * @author Nike
+ * @author Njardarlogar
+ * @author Nnemo
  * @author Node ue
  * @author Octahedron80
  * @author Od1n
@@ -461,7 +465,8 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 'toolbox' => 'The title of the toolbox below the search menu.',
 '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}}',
-'redirectedfrom' => 'The text displayed when a certain page is redirected to another page. Variable <tt>$1</tt> contains the name of the page user came from.',
+'redirectedfrom' => 'The text displayed when a certain page is redirected to another page.
+*<tt>$1</tt> contains the name of the page user came from.',
 'redirectpagesub' => 'Displayed under the page title of a page which is a redirect to another page, see [{{fullurl:Project:Translators|redirect=no}} Project:Translators] for example.
 
 {{Identical|Redirect page}}',
@@ -543,16 +548,16 @@ Do '''not''' replace SITENAME with a translation of Wikipedia or some encycopedi
 Appears in subtitle
 * $1 is a link to the page (HTML)',
 '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 blue message appearing when someone edited your user talk page.
+'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).
 
 {{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).',
 'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page.
-The message takes three parameters; 
-*$1 {{msg-mw|newmessageslinkplural}}, 
-*$2 {{msg-mw|newmessagesdifflinkplural}}, and 
+The message takes three parameters;
+*$1 {{msg-mw|newmessageslinkplural}},
+*$2 {{msg-mw|newmessagesdifflinkplural}}, and
 *$3 the number of authors who have edited the talk page since the owning user last viewed it.',
 'youhavenewmessagesmanyusers' => 'New talk indicator message: the message appearing when someone edited your user talk page. Used when more than 10 users edited the user talk page since the owning user last viewed it, similar to{{msg-mw|youhavenewmessages}}. Parameters:
 * $1 is {{msg-mw|newmessageslinkplural}},
@@ -702,8 +707,12 @@ $1 is a filename, I think.',
 * $1: the protection type, e.g. "protect" for fully protected pages',
 '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.',
-'editinginterface' => "A message shown when editing pages in the namespace MediaWiki:. In the [http://translatewiki.net/wiki/Main_Page?setlang=en URL], '''change \"setlang=en\" to your own language code.'''",
+'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.
+
+See also {{msg-mw|editinginterface}}.',
+'editinginterface' => 'A message shown when editing pages in the namespace MediaWiki:.
+
+See also {{msg-mw|protectedinterface}}.',
 'ns-specialprotected' => 'Error message displayed when trying to edit a page in the Special namespace',
 'titleprotected' => 'Use $1 for GENDER.',
 'invalidtitle-knownnamespace' => 'Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.
@@ -717,7 +726,8 @@ $1 is a filename, I think.',
 'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
 
 # Login and logout pages
-'logouttext' => 'Log out message',
+'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.',
 'yourname' => "In user preferences
 
@@ -790,7 +800,7 @@ $1 is the minimum number of characters in the password.',
 'mailmypassword' => 'Shown at [[Special:UserLogin]]',
 'passwordremindertitle' => 'Title of e-mail which contains temporary password',
 'passwordremindertext' => 'This text is used in an e-mail sent when a user requests a new temporary password (he has forgotten his password) or when an sysop creates a new user account choosing to have password and username sent to the new user by e-mail.
-* $1 is an IP addres. Example: 123.123.123.123
+* $1 is an IP address. Example: 123.123.123.123
 * $2 is a username. Example: Joe
 * $3 is a password. Example: er##@fdas!
 * $4 is a URL. Example: http://wiki.example.com
@@ -1050,6 +1060,11 @@ Please report at [[Support]] if you are unable to properly translate this messag
 '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.",
 '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.",
+'invalid-content-data'             => 'Error message indicating that the page\'s content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.',
+'content-not-allowed-here'         => 'Error message indicating that the desired content model is not supported in given localtion.
+* $1 is the human readable name of the content model
+* $1 is the title of the page in question.',
 
 # 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.
@@ -1402,8 +1417,11 @@ This is a search result (and I guess search engine) dependent messages. I do not
 
 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]',
 'searchall' => '{{Identical|All}}',
-'showingresults' => "This message is used on some special pages such as 'Wanted categories'. $1 is the total number of results in the batch shown and $2 is the number of the first item listed.",
-'showingresultsnum' => '$3 is the number of results on the page and $2 is the first number in the batch of results.',
+'showingresults' => "This message is used on some special pages such as 'Wanted categories'.
+*$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.',
 '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:".}}',
@@ -1848,7 +1866,7 @@ This action allows editing of all of the "user rights", not just the rights of t
 'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]',
 'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
 'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
-'recentchanges-label-minor' => 'Tooltip for {{msg-mw|newpageletter}}',
+'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
 'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
 'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}',
 'rcnote' => 'Used on [[Special:RecentChanges]].
@@ -1924,7 +1942,7 @@ Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 
 {{Identical|Upload file}}',
 'uploadnologin' => '{{Identical|Not logged in}}',
-'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave it untranslated!}}
+'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]].',
 'upload-preferred' => 'Used in [[Special:Upload]].',
@@ -2092,7 +2110,7 @@ Used on [[Special:UploadWizard]].',
 'img-auth-accessdenied' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied
 {{Identical|Access denied}}',
 'img-auth-nopathinfo' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description
-* This is plain text. Do not use any wiki syntax.',
+{{Doc-important|This is plain text. Do not use any wiki syntax.}}',
 'img-auth-notindir' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: When the specified path is not in upload directory.',
 'img-auth-badtitle' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Bad title, $1 is the invalid title',
 'img-auth-nologinnWL' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Logged in and file not whitelisted. $1 is the file not in whitelist.',
@@ -2568,10 +2586,10 @@ Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newuse
 'listgrouprights-helppage' => "The link used on [[Special:ListGroupRights]]. Just translate \"Group rights\", and '''leave the \"Help:\" namespace exactly as it is'''.",
 'listgrouprights-members' => 'Used on [[Special:ListGroupRights]] and [[Special:Statistics]] as a link to [[Special:ListUsers|Special:ListUsers/"group"]], a list of members in that group.',
 'listgrouprights-right-display' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
+* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
 * $2 is the codename of this right",
 'listgrouprights-right-revoked' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
+* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
 * $2 is the codename of this right",
 'listgrouprights-addgroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 is an enumeration of group names.
@@ -2741,9 +2759,12 @@ The name of the deletion log. Used as heading on [[Special:Log/delete]] and in t
 '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. 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.',
+'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}}.
+* $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}}',
 '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.',
@@ -2873,6 +2894,8 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 {{Identical|Reset}}',
 'undeleteinvert' => '{{Identical|Invert selection}}',
 'undeletecomment' => '{{Identical|Reason}}',
+'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',
@@ -2894,11 +2917,12 @@ Options for the duration of the page protection. Example: See e.g. [[MediaWiki:P
 
 # Namespace form on various pages
 'namespace' => 'This message is located at [[Special:Contributions]].',
-'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]]
+'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].
 
-{{Identical|Invert selection}}
+This message means "Invert selection of namespace".
 
-This message has a tooltip {{msg-mw|tooltip-invert}}',
+This message has a tooltip {{msg-mw|tooltip-invert}}
+{{Identical|Invert selection}}',
 'tooltip-invert' => 'Used in [[Special:Recentchanges]] as a tooltip for the invert checkbox. See also the message {{msg-mw|invert}}',
 'namespace_association' => 'Used in [[Special:Recentchanges]] with a checkbox which selects the associated namespace to be added to the selected namespace, so that both are searched (or excluded depending on another checkbox selection). The association is between a namespace and its talk namespace.
 
@@ -3176,6 +3200,10 @@ Parameters:
 '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.",
+'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 \$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.
+* $2: The localized name of the content model used by the destination title.",
 '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}}',
@@ -3272,7 +3300,6 @@ See also:
 
 # JavaScriptTest
 'javascripttest' => 'Title of [[Special:JavaScriptTest|the special page]]',
-'javascripttest-disabled' => 'Message displayed on [[Special:JavaScriptTest]] if this feature is disabled (it is disabled by default).',
 '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.',
@@ -3350,7 +3377,7 @@ If the length of the translated message is over 60 characters (including spaces)
 '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]]).',
-'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklink}}
+'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}}
@@ -3484,14 +3511,13 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-authors' => 'The total number of users who have edited the page.',
 'pageinfo-recent-edits' => 'The number of times the page has been edited recently. $1 is a localised duration (e.g. 9 days).',
 'pageinfo-recent-authors' => 'The number of users who have edited the page recently.',
-'pageinfo-restriction' => 'Parameters:
-* $1 is the type of page protection (message restriction-$type, preferably in lowercase).',
 'pageinfo-magic-words' => 'The list of magic words on the page. Parameters:
 * $1 is the number of magic words on the page.',
 '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.',
+'pageinfo-toolboxlink' => "Information link for the page (like 'What links here', but to action=info for the current page instead)",
 
 # Skin names
 'skinname-standard' => '{{optional}}
@@ -3544,8 +3570,15 @@ Parameters:
 * $4 is the MIME type, a formalized textual information — for example: <code>image/jpeg</code>
 * $5 is the total number of pages in the document.',
 'file-nohires' => 'File info displayed on file description page. For example of message in use see [[:File:Mouse10.gif]].',
-'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.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 width, $2 is height, and $3 is file size, including unit (for example "10 KB").',
+'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
+
+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 
+* $3 is the file size including a unit (for example "10 KB").
+
+Start with a lowercase letter, unless the first word is “SVG”.',
 '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-size' => '
 Parameters:
@@ -4327,6 +4360,12 @@ See also [[MediaWiki:Confirmemail_body_changed]].
 'confirmemail_invalidated' => 'This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.',
 'invalidateemail' => "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.",
 
+# 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.',
+'scarytranscludetoolong' => 'The URL was too long.',
+
 'unit-pixel' => '{{optional}}',
 
 # action=purge
@@ -4598,7 +4637,8 @@ This is being used in [[Special:Version]], preceeding the subversion revision nu
 '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' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
+'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.',
@@ -4815,6 +4855,12 @@ $4 is the gender of the target user.',
 'feedback-bugcheck' => 'Message that appears before the user submits a bug, reminding them to check for known bugs.',
 'feedback-bugnew' => 'Button label - asserts that the user has checked for existing bugs. When clicked will launch a bugzilla form to add a new bug in a new tab or window',
 
+# Search suggestions
+'searchsuggest-search' => 'Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)
+
+{{Identical|Search}}',
+'searchsuggest-containing' => 'Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.',
+
 # API errors
 'api-error-badaccess-groups' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-badtoken' => 'API error message that can be used for client side localisation of API errors.',
@@ -4867,4 +4913,10 @@ $4 is the gender of the target user.',
 '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.',
 
+# Content model IDs for the ContentHandler facility; used by ContentHandler::getContentModel()
+'content-model-wikitext' => 'Name for the wikitext content model, used when decribing what type of content a page contains.',
+'content-model-javascript' => 'Name for the JavaScript content model, used when decribing what type of content a page contains.',
+'content-model-css' => 'Name for the CSS content model, used when decribing what type of content a page contains.',
+'content-model-text' => 'Name for the plain text content model, used when decribing what type of content a page contains.',
+
 );
index c91c0b4..8e7e833 100644 (file)
@@ -130,139 +130,139 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__YUYARINATAATIPACHIY__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__YUYARINA__', '__TDC__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES_ACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'KUNANPUNCHAW', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'KUNANPUNCHAW2', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'KUNANPUNCHAWSUTI', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'KUNANWATA', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KUNANPACHA', 'HORAACTUAL', 'HORA_ACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'KUNANURA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'MESLOCALCOMPLETO', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'KAYPIPUNCHAW', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'KAYPIPUNCHAW2', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'KAYPIPUNCHAWSUTI', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'KAYPIWATA', 'AÑOLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'KAYPIPACHA', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'KAYPIURA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'HAYKAPANQA', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'HAYKAQILLQA', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'HAYKAWILLANIQI', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'HAYKARURAQ', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'HAYKARURACHKAQ', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'HAYKALLAMKAPUSQA', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'HAYKAQHAWASQA', 'HAYKAQAWASQA', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'PANQASUTI', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PANQASUTIE', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'SUTIKITI', 'ESPACIODENOMBRE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'SUTIKITIE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RIMANAKUYKITI', 'RIMAYKITI', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RIMANAKUYKITIE', 'RIMAYKITIE', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'QILLQAKITI', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'QILLQAKITIE', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'HUNTAPANQASUTI', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'HUNTAPANQASUTIE', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'URINPANQASUTI', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'URINPANQASUTIE', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'TIKSIPANQASUTI', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'TIKSIPANQASUTIE', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'RIMANAKUYPANQASUTI', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'RIMANAKUYPANQASUTIE', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'QILLQAPANQASUTI', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'QILLQAPANQASUTIE', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'WILLA:', 'MSJ:', 'MSG:' ),
-       'subst'                   => array( '0', 'WAKCHAY:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'WILLAMUSUQ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'rikchacha', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'rikchacha=$1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'paña', 'alliq', 'derecha', 'dcha', 'der', 'right' ),
-       'img_left'                => array( '1', 'lluqi', 'ichuq', 'izquierda', 'izda', 'izq', 'left' ),
-       'img_none'                => array( '1', 'manaima', 'mana', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
-       'img_center'              => array( '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ),
-       'img_page'                => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'pagina_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'saywa', 'borde', 'border' ),
-       'img_baseline'            => array( '1', 'tiksisiqi', 'baseline' ),
-       'img_sub'                 => array( '1', 'uran', 'sub' ),
-       'img_super'               => array( '1', 'hanan', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'hawa', 'top' ),
-       'img_text_top'            => array( '1', 'qillqahawa', 'text-top' ),
-       'img_middle'              => array( '1', 'ukhupi', 'middle' ),
-       'img_bottom'              => array( '1', 'sikipi', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'qillqasiki', 'text-bottom' ),
-       'img_link'                => array( '1', 'tinki=$1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'wak=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'WILLAY:', 'INT:' ),
-       'sitename'                => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'NOMBREDELSITIO', 'SITENAME' ),
-       'ns'                      => array( '0', 'SKITI:', 'EN:', 'NS:' ),
-       'localurl'                => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'KAYLLAURLE:', 'URLLOCALC:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SIRWIQ', 'SERVIDOR', 'SERVER' ),
-       'servername'              => array( '0', 'SIRWIQSUTI', 'NOMBRESERVIDOR', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'QILLQAÑAN', 'QILLQANAN', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'SIMIKAMACHIY:', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'QHARIWARMI:', 'QARIWARMI:', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__AMASUTITAHUKCHAYCHU__', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__AMASAMIQTAHUKCHAYCHU__', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'KUNANSIMANA', 'SEMANAACTUAL', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'KUNANSIMANAPUNCHAW', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'KAYLLASIMANA', 'SEMANALOCAL', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'KAYLLASIMANAPUNCHAW', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'MUSUQCHASQAID', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'MUSUQCHASQAPUNCHAW', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'MUSUQCHASQAPUNCHAW2', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MUSUQCHASQAKILLA', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'MUSUQCHASQAWATA', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'MUSUQCHASQAPACHAQILLPA', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'MUSUQCHASQARURAQ', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ACHKA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'HUNTAURL:', 'URLCOMPLETA:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'HUNTAURLE:', 'URLCOMPLETAC:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'UCHUY:', 'MINUS:', 'MINÚS:', 'LC:' ),
-       'uc'                      => array( '0', 'HATUN:', 'MAYUS:', 'MAYÚS:', 'UC:' ),
-       'raw'                     => array( '0', 'CHAWA:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'SUTITARIKUCHIY', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
-       'currentversion'          => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'WATANALLAWICHAY', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'KUNANPACHAQILLPA', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'KAYLLAPACHAQILLPA', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#RIMAY:', '#IDIOMA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'SAMIQRIMAY', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SUTIKITIPIPANQAKUNA:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'HAYKAKAMACHIQ', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NÚMEROADMINIISTRADORES', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'YUPAYRIKCHAKUY', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'PADLLUQI', 'PADICHUQ', 'PADLEFT' ),
-       'padright'                => array( '0', 'PADPAÑA', 'PADALLIQ', 'PADRIGHT' ),
-       'special'                 => array( '0', 'sapaq', 'especial', 'special' ),
-       'defaultsort'             => array( '1', 'ALLINCHAY:', 'SIQINCHAY:', 'ORDENAR:', 'ORDENPREDETERMINADO:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'WILLAÑIQIÑAN', 'WILLANIQINAN', 'RUTAARCHIVO', 'RUTARCHIVO', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'unanchacha', 'UNANCHACHA', 'etiqueta', 'ETIQUETA', 'tag' ),
-       'hiddencat'               => array( '1', '__PAKASQAKATIGURIYA__', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'KATIGURIYAPIPANQAKUNA', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'PANQACHHIKAN', 'PANQACHIKAN', 'PANQACHIKA', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
-       'index'                   => array( '1', '__UNANCHAY__', '__INDEXAR__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__AMAUNANCHAYCHU__', '__NOINDEXAR__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'HUÑUPIYUPAY', 'HUNUPIYUPAY', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__TIYAQLLAPUSAPUNA__', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'HAYKAAMACHAY', 'IMASINCHIAMACHAY', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__YUYARINATAATIPACHIY__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__YUYARINA__', '__TDC__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES_ACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'KUNANPUNCHAW', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'KUNANPUNCHAW2', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'KUNANPUNCHAWSUTI', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'KUNANWATA', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KUNANPACHA', 'HORAACTUAL', 'HORA_ACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'KUNANURA', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'MESLOCALCOMPLETO', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'KAYPIPUNCHAW', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'KAYPIPUNCHAW2', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'KAYPIPUNCHAWSUTI', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'KAYPIWATA', 'AÑOLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'KAYPIPACHA', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'KAYPIURA', 'HORALOCAL', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'HAYKAPANQA', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'HAYKAQILLQA', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'HAYKAWILLANIQI', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'HAYKARURAQ', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'HAYKARURACHKAQ', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'HAYKALLAMKAPUSQA', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'HAYKAQHAWASQA', 'HAYKAQAWASQA', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'PANQASUTI', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PANQASUTIE', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'SUTIKITI', 'ESPACIODENOMBRE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'SUTIKITIE', 'ESPACIODENOMBREC', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RIMANAKUYKITI', 'RIMAYKITI', 'ESPACIODEDISCUSION', 'ESPACIODEDISCUSIÓN', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RIMANAKUYKITIE', 'RIMAYKITIE', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'QILLQAKITI', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'QILLQAKITIE', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'HUNTAPANQASUTI', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HUNTAPANQASUTIE', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'URINPANQASUTI', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'URINPANQASUTIE', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'TIKSIPANQASUTI', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'TIKSIPANQASUTIE', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'RIMANAKUYPANQASUTI', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'RIMANAKUYPANQASUTIE', 'NOMBREDEPÁGINADEDISCUSIÓNC', 'NOMBREDEPAGINADEDISCUSIONC', 'NOMBREDEPAGINADISCUSIONC', 'NOMBREDEPÁGINADISCUSIÓNC', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'QILLQAPANQASUTI', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'QILLQAPANQASUTIE', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'WILLA:', 'MSJ:', 'MSG:' ),
+       'subst'                     => array( '0', 'WAKCHAY:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'WILLAMUSUQ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'rikchacha', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'rikchacha=$1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'paña', 'alliq', 'derecha', 'dcha', 'der', 'right' ),
+       'img_left'                  => array( '1', 'lluqi', 'ichuq', 'izquierda', 'izda', 'izq', 'left' ),
+       'img_none'                  => array( '1', 'manaima', 'mana', 'ninguna', 'nada', 'no', 'ninguno', 'none' ),
+       'img_center'                => array( '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ),
+       'img_page'                  => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'saywa', 'borde', 'border' ),
+       'img_baseline'              => array( '1', 'tiksisiqi', 'baseline' ),
+       'img_sub'                   => array( '1', 'uran', 'sub' ),
+       'img_super'                 => array( '1', 'hanan', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'hawa', 'top' ),
+       'img_text_top'              => array( '1', 'qillqahawa', 'text-top' ),
+       'img_middle'                => array( '1', 'ukhupi', 'middle' ),
+       'img_bottom'                => array( '1', 'sikipi', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'qillqasiki', 'text-bottom' ),
+       'img_link'                  => array( '1', 'tinki=$1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'wak=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'WILLAY:', 'INT:' ),
+       'sitename'                  => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'NOMBREDELSITIO', 'SITENAME' ),
+       'ns'                        => array( '0', 'SKITI:', 'EN:', 'NS:' ),
+       'localurl'                  => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'KAYLLAURLE:', 'URLLOCALC:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'SIRWIQ', 'SERVIDOR', 'SERVER' ),
+       'servername'                => array( '0', 'SIRWIQSUTI', 'NOMBRESERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'QILLQAÑAN', 'QILLQANAN', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'SIMIKAMACHIY:', 'GRAMATICA:', 'GRAMÁTICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'QHARIWARMI:', 'QARIWARMI:', 'GÉNERO:', 'GENERO:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__AMASUTITAHUKCHAYCHU__', '__NOCONVERTIRTITULO__', '__NOCONVERTIRTÍTULO__', '__NOCT___', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__AMASAMIQTAHUKCHAYCHU__', '__NOCONVERTIRCONTENIDO__', '__NOCC___', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'KUNANSIMANA', 'SEMANAACTUAL', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'KUNANSIMANAPUNCHAW', 'DDSACTUAL', 'DIADESEMANAACTUAL', 'DÍADESEMANAACTUAL', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'KAYLLASIMANA', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'KAYLLASIMANAPUNCHAW', 'DDSLOCAL', 'DIADESEMANALOCAL', 'DÍADESEMANALOCAL', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'MUSUQCHASQAID', 'IDDEREVISION', 'IDREVISION', 'IDDEREVISIÓN', 'IDREVISIÓN', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'MUSUQCHASQAPUNCHAW', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'MUSUQCHASQAPUNCHAW2', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MUSUQCHASQAKILLA', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'MUSUQCHASQAWATA', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MUSUQCHASQAPACHAQILLPA', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'MUSUQCHASQARURAQ', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ACHKA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'HUNTAURL:', 'URLCOMPLETA:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'HUNTAURLE:', 'URLCOMPLETAC:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'UCHUY:', 'MINUS:', 'MINÚS:', 'LC:' ),
+       'uc'                        => array( '0', 'HATUN:', 'MAYUS:', 'MAYÚS:', 'UC:' ),
+       'raw'                       => array( '0', 'CHAWA:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'SUTITARIKUCHIY', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
+       'currentversion'            => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'WATANALLAWICHAY', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'KUNANPACHAQILLPA', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'KAYLLAPACHAQILLPA', 'MARCADEHORALOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#RIMAY:', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'SAMIQRIMAY', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SUTIKITIPIPANQAKUNA:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'HAYKAKAMACHIQ', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NÚMEROADMINIISTRADORES', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'YUPAYRIKCHAKUY', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'PADLLUQI', 'PADICHUQ', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PADPAÑA', 'PADALLIQ', 'PADRIGHT' ),
+       'special'                   => array( '0', 'sapaq', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ALLINCHAY:', 'SIQINCHAY:', 'ORDENAR:', 'ORDENPREDETERMINADO:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'WILLAÑIQIÑAN', 'WILLANIQINAN', 'RUTAARCHIVO', 'RUTARCHIVO', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'unanchacha', 'UNANCHACHA', 'etiqueta', 'ETIQUETA', 'tag' ),
+       'hiddencat'                 => array( '1', '__PAKASQAKATIGURIYA__', '__CATEGORÍAOCULTA__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'KATIGURIYAPIPANQAKUNA', 'PÁGINASENCATEGORÍA', 'PÁGINASENCAT', 'PAGSENCAT', 'PAGINASENCATEGORIA', 'PAGINASENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'PANQACHHIKAN', 'PANQACHIKAN', 'PANQACHIKA', 'TAMAÑOPÁGINA', 'TAMAÑODEPÁGINA', 'TAMAÑOPAGINA', 'TAMAÑODEPAGINA', 'PAGESIZE' ),
+       'index'                     => array( '1', '__UNANCHAY__', '__INDEXAR__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__AMAUNANCHAYCHU__', '__NOINDEXAR__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'HUÑUPIYUPAY', 'HUNUPIYUPAY', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__TIYAQLLAPUSAPUNA__', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'HAYKAAMACHAY', 'IMASINCHIAMACHAY', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
 );
 
 $messages = array(
@@ -660,7 +660,7 @@ Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 # Login and logout pages
 'logouttext' => "'''Llamk'apuy tiyayniykiqa puchukasqañam.'''
 
-Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, [[Special:UserLogin|musuqmanta yaykuy]] ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
+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.',
@@ -1241,8 +1241,6 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla.
 'search-interwiki-caption' => 'Ñaña ruraykamaykuna',
 'search-interwiki-default' => '$1 taripasqakuna:',
 'search-interwiki-more' => '(aswan)',
-'search-mwsuggest-enabled' => 'rimapusqakunawan',
-'search-mwsuggest-disabled' => 'mana rimapusqakunawanchu',
 'search-relatedarticle' => 'Apanakuq',
 'mwsuggest-disable' => 'AJAX rimapuykunaman ama niy',
 'searcheverything-enable' => "Tukuy suti k'itikunapi maskay",
@@ -2797,7 +2795,6 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript llanchiy',
-'javascripttest-disabled' => 'Kay ruranaqa kay wikipi manam atichisqachu.',
 'javascripttest-title' => '$1 llanchiykunam richkan',
 'javascripttest-pagetext-noframework' => "Kay p'anqaqa JavaScript llanchina purichinallapaqmi kachun.",
 'javascripttest-pagetext-unknownframework' => 'Mana riqsisqa "$1" nisqa llanchina inchu ruray',
@@ -3751,6 +3748,10 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'feedback-bugcheck' => 'Allillanmi! Llanchirillay [$1 riqsisqapura huk pantasqañachu] mana kanmanchu.',
 'feedback-bugnew' => 'Llanchisqañam. Musuq pantasqamanta willay',
 
+# Search suggestions
+'searchsuggest-search' => 'Maskay',
+'searchsuggest-containing' => 'kaykunayuq: ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Kay wikipiqa willañiqikunata manam churkuyta atinkichu.',
 'api-error-badtoken' => 'Ukhupi pantasqa: Mana allinta sananchasqa.',
index 85a7390..ae3564f 100644 (file)
@@ -500,8 +500,6 @@ Kay (kaykunachu) kachashkakunaka cunkashkami kashka.",
 'search-interwiki-caption' => 'Ñaña ruraykamaykuna',
 'search-interwiki-default' => '$1 tarishka imakuna:',
 'search-interwiki-more' => '(ashtawan)',
-'search-mwsuggest-enabled' => 'consejoskunawan',
-'search-mwsuggest-disabled' => 'Mana consejoskunawan',
 'searchrelated' => 'tinkishka',
 'searchall' => 'tukuy',
 'showingresultsheader' => "{{PLURAL:$5|Maskashka panka: '''$1''', '''$3'''-manta|Maskashka pankakuna: '''$1 - $2''', '''$3'''-manta}}, '''$4''' maskashpaka",
index 69b06e3..16f54fa 100644 (file)
@@ -364,8 +364,6 @@ Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last
 'search-interwiki-caption' => 'I prugèt fradel',
 'search-interwiki-default' => 'Arsultèd da $1:',
 'search-interwiki-more' => '(ad piò)',
-'search-mwsuggest-enabled' => 'cun j sugeriment',
-'search-mwsuggest-disabled' => "'nciòn sugeriment",
 'nonefound' => "'''Oci''': la rizerca l'a vèn fata in automatico sol in zert spàzi di nòm. S't'vù zirchè fra tot al pàgin (cumpresi al pàgin d'cunversaziòn, i template, ecc) próva a metar \"all:\", in inglés, dadnenz a é nòm ch't'é scrètt, piotòst scriv é spàzi di nòm, s't'al sé, e pu é nòm.",
 'powersearch' => 'Scandaja a fònd',
 'powersearch-legend' => 'Scandaja a fònd',
index ff725b6..d5fb568 100644 (file)
@@ -337,8 +337,6 @@ Tasarut: (cur) = imṣebḍiyen ag tunɣilt n ruxa,
 'search-suggest' => 'Ttugha txsd a tinid: $1',
 'search-interwiki-caption' => 'Awmatn n usnfar',
 'search-interwiki-more' => '(ujar)',
-'search-mwsuggest-enabled' => 's isumuren',
-'search-mwsuggest-disabled' => 'walu isumuren',
 'searchall' => 'maṛṛa',
 'powersearch' => 'Tarzzut tanmhazt',
 'powersearch-legend' => 'Tarzzut tanmhazt',
index ebc4dc5..e295cd6 100644 (file)
@@ -35,10 +35,10 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RENVIAMENT', '#REDIRECT' ),
-       'img_thumbnail'           => array( '1', 'miniatura', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_upright'             => array( '1', 'sidretg', 'sidretg=$1', 'sidretg_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'redirect'                  => array( '0', '#RENVIAMENT', '#REDIRECT' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_upright'               => array( '1', 'sidretg', 'sidretg=$1', 'sidretg_$1', 'upright', 'upright=$1', 'upright $1' ),
 );
 
 $messages = array(
@@ -437,7 +437,7 @@ Il motiv inditgà è "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Sortì cun success.'''
 
-Ti pos cuntinuar cun utilisar {{SITENAME}} anonimamain, u che ti pos [[Special:UserLogin|t'annunziar]] 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.",
+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}}]].',
@@ -987,8 +987,6 @@ Fa stim che navigar cun agid da las coalliziuns reinizialisescha tia tscherna.',
 'search-interwiki-caption' => 'Projects sumegliants',
 'search-interwiki-default' => '$1 resultats:',
 'search-interwiki-more' => '(dapli)',
-'search-mwsuggest-enabled' => 'cun propostas',
-'search-mwsuggest-disabled' => 'naginas propostas',
 'search-relatedarticle' => 'Sumegliant',
 'mwsuggest-disable' => 'Deactivar propostas AJAX',
 'searcheverything-enable' => 'Tschertgar en tut ils tips da pagina',
@@ -2398,7 +2396,6 @@ Emprova danovamain.',
 
 # JavaScriptTest
 'javascripttest' => 'Test da JavaScript',
-'javascripttest-disabled' => 'Questa funcziun è deactivada.',
 'javascripttest-title' => 'Exequir tests da $1',
 'javascripttest-pagetext-noframework' => 'Questa pagina è reservada per exequir tests da JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Framework da test nunenconuschent "$1".',
index 6cdafbc..3910671 100644 (file)
@@ -33,183 +33,183 @@ $namespaceNames = array(
 );
 
 $messages = array(
-'underline-always'  => 'Savaxt',
-'underline-never'   => 'Ni ekhvar',
+'underline-always' => 'Savaxt',
+'underline-never' => 'Ni ekhvar',
 'underline-default' => 'Browseresko standardo',
 
 # Dates
-'sunday'    => 'purano kurko',
-'monday'    => 'lui',
-'tuesday'   => 'marci',
+'sunday' => 'purano kurko',
+'monday' => 'lui',
+'tuesday' => 'marci',
 'wednesday' => 'tetradī',
-'thursday'  => 'zhoi',
-'friday'    => 'parashtui',
-'saturday'  => 'savato',
-'january'   => 'pervonai',
-'february'  => 'duitonai',
-'march'     => 'tritonai',
-'april'     => 'shtartonai',
-'may_long'  => 'panjtonai',
-'june'      => 'shovtonai',
-'july'      => 'eftatonai',
-'august'    => 'oxtotonai',
+'thursday' => 'zhoi',
+'friday' => 'parashtui',
+'saturday' => 'savato',
+'january' => 'pervonai',
+'february' => 'duitonai',
+'march' => 'tritonai',
+'april' => 'shtartonai',
+'may_long' => 'panjtonai',
+'june' => 'shovtonai',
+'july' => 'eftatonai',
+'august' => 'oxtotonai',
 'september' => 'enyatonai',
-'october'   => 'deshtonai',
-'november'  => 'deshuekhtonai',
-'december'  => 'deshuduitonai',
-'jan'       => 'perv',
-'feb'       => 'dui',
-'mar'       => 'tri',
-'apr'       => 'shta',
-'may'       => 'panj',
-'jun'       => 'shov',
-'jul'       => 'efta',
-'aug'       => 'oxt',
-'sep'       => 'enya',
-'oct'       => 'desh',
-'nov'       => 'dekh',
-'dec'       => 'ddui',
+'october' => 'deshtonai',
+'november' => 'deshuekhtonai',
+'december' => 'deshuduitonai',
+'jan' => 'perv',
+'feb' => 'dui',
+'mar' => 'tri',
+'apr' => 'shta',
+'may' => 'panj',
+'jun' => 'shov',
+'jul' => 'efta',
+'aug' => 'oxt',
+'sep' => 'enya',
+'oct' => 'desh',
+'nov' => 'dekh',
+'dec' => 'ddui',
 
 # Categories related messages
 'subcategories' => 'Telekategoriye',
 
-'about'      => 'Andar',
-'article'    => 'Lekh',
-'newwindow'  => '(inklel aver filiyastra)',
-'cancel'     => 'Mekh la',
-'mypage'     => 'Miri patrin',
-'mytalk'     => 'Mire vakyarimata',
+'about' => 'Andar',
+'article' => 'Lekh',
+'newwindow' => '(inklel aver filiyastra)',
+'cancel' => 'Mekh la',
+'mypage' => 'Miri patrin',
+'mytalk' => 'Mire vakyarimata',
 'navigation' => 'Phiripen',
-'and'        => '&#32;thai',
+'and' => '&#32;thai',
 
 # Cologne Blue skin
-'qbedit'         => 'Editisar',
-'qbpageinfo'     => 'Patrinyake janglimata',
+'qbedit' => 'Editisar',
+'qbpageinfo' => 'Patrinyake janglimata',
 'qbspecialpages' => 'Uzalutne patrya',
 
-'errorpagetitle'   => 'Dosh',
-'returnto'         => 'Ja palpale kai $1.',
-'help'             => 'Zhutipen',
-'search'           => 'Rod',
-'searchbutton'     => 'Rod',
-'go'               => 'Ja',
-'searcharticle'    => 'Ja',
-'history'          => 'Puraneder versiye',
-'history_short'    => 'Puranipen',
+'errorpagetitle' => 'Dosh',
+'returnto' => 'Ja palpale kai $1.',
+'help' => 'Zhutipen',
+'search' => 'Rod',
+'searchbutton' => 'Rod',
+'go' => 'Ja',
+'searcharticle' => 'Ja',
+'history' => 'Puraneder versiye',
+'history_short' => 'Puranipen',
 'printableversion' => 'Printisaripnaski versiya',
-'permalink'        => 'Savaxtutno phandipen',
-'print'            => 'Printisaripen',
-'edit'             => 'Editisar i patrin',
-'editthispage'     => 'Editisar i patrin',
-'delete'           => 'Khosipen',
-'deletethispage'   => 'Khos i patrin',
-'undelete_short'   => 'Na mai khos le editisarimata $1',
-'protect'          => 'Brakhipen',
-'unprotect'        => 'Na mai brakh',
-'newpage'          => 'Nevi patrin',
-'specialpage'      => 'Uzalutni patrin',
-'personaltools'    => 'Mire labne',
-'articlepage'      => 'Dikh o lekh',
-'talk'             => 'Vakyarimata',
-'toolbox'          => 'Labnengo moxton',
-'userpage'         => 'Dikh i jeneski patrin',
-'viewtalkpage'     => 'Dikh i diskucia',
-'otherlanguages'   => 'Avre ćhibande',
-'lastmodifiedat'   => 'O palutno paruvipen $2, $1.',
-'viewcount'        => 'Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.',
-'jumpto'           => 'Ja kai:',
+'permalink' => 'Savaxtutno phandipen',
+'print' => 'Printisaripen',
+'edit' => 'Editisar i patrin',
+'editthispage' => 'Editisar i patrin',
+'delete' => 'Khosipen',
+'deletethispage' => 'Khos i patrin',
+'undelete_short' => 'Na mai khos le editisarimata $1',
+'protect' => 'Brakhipen',
+'unprotect' => 'Na mai brakh',
+'newpage' => 'Nevi patrin',
+'specialpage' => 'Uzalutni patrin',
+'personaltools' => 'Mire labne',
+'articlepage' => 'Dikh o lekh',
+'talk' => 'Vakyarimata',
+'toolbox' => 'Labnengo moxton',
+'userpage' => 'Dikh i jeneski patrin',
+'viewtalkpage' => 'Dikh i diskucia',
+'otherlanguages' => 'Avre ćhibande',
+'lastmodifiedat' => 'O palutno paruvipen $2, $1.',
+'viewcount' => 'Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.',
+'jumpto' => 'Ja kai:',
 'jumptonavigation' => 'phiripen',
-'jumptosearch'     => 'rodipen',
+'jumptosearch' => 'rodipen',
 
 # 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'            => 'Andar {{SITENAME}}',
-'aboutpage'            => 'Project:Andar',
-'copyright'            => 'Ander dino tar o $1.',
-'copyrightpage'        => '{{ns:project}}:Autorenge xakaya (chachimata)',
-'currentevents'        => 'Nevimata',
-'currentevents-url'    => 'Project:Nevimata',
-'disclaimers'          => 'Termenurya',
-'disclaimerpage'       => 'Project:Termenurya',
-'edithelp'             => 'Editisaripnasko zhutipen',
-'edithelppage'         => 'Help:Sar te editisares ek patrin',
-'helppage'             => 'Help:Zhutipen',
-'mainpage'             => 'Sherutni patrin',
+'aboutsite' => 'Andar {{SITENAME}}',
+'aboutpage' => 'Project:Andar',
+'copyright' => 'Ander dino tar o $1.',
+'copyrightpage' => '{{ns:project}}:Autorenge xakaya (chachimata)',
+'currentevents' => 'Nevimata',
+'currentevents-url' => 'Project:Nevimata',
+'disclaimers' => 'Termenurya',
+'disclaimerpage' => 'Project:Termenurya',
+'edithelp' => 'Editisaripnasko zhutipen',
+'edithelppage' => 'Help:Sar te editisares ek patrin',
+'helppage' => 'Help:Zhutipen',
+'mainpage' => 'Sherutni patrin',
 'mainpage-description' => 'Sherutni patrin',
-'portal'               => 'Maladipnasko than',
-'portal-url'           => 'Project:Maladipnasko than',
-'privacy'              => 'Pativyako forovipen',
+'portal' => 'Maladipnasko than',
+'portal-url' => 'Project:Maladipnasko than',
+'privacy' => 'Pativyako forovipen',
 
-'retrievedfrom'   => 'Lino katar "$1"',
-'editsection'     => 'editisar',
+'retrievedfrom' => 'Lino katar "$1"',
+'editsection' => 'editisar',
 'editsectionhint' => 'Editisar o kotor: $1',
-'toc'             => 'Ander',
-'showtoc'         => 'dikh',
-'hidetoc'         => 'garav',
+'toc' => 'Ander',
+'showtoc' => 'dikh',
+'hidetoc' => 'garav',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Lekh',
-'nstab-user'      => 'Jeneski patrin',
-'nstab-media'     => 'Mediya patrin',
-'nstab-special'   => 'Uzalutno',
-'nstab-project'   => 'Projekto',
-'nstab-image'     => 'Chitro',
+'nstab-main' => 'Lekh',
+'nstab-user' => 'Jeneski patrin',
+'nstab-media' => 'Mediya patrin',
+'nstab-special' => 'Uzalutno',
+'nstab-project' => 'Projekto',
+'nstab-image' => 'Chitro',
 'nstab-mediawiki' => 'Duma',
-'nstab-template'  => 'Sikavno',
-'nstab-help'      => 'Zhutipen',
-'nstab-category'  => 'Shopni',
+'nstab-template' => 'Sikavno',
+'nstab-help' => 'Zhutipen',
+'nstab-category' => 'Shopni',
 
 # Main script and global functions
 'nospecialpagetext' => 'Manglyas ekh [[Special:SpecialPages|uzalutni patrin]] so na arakhel pes kai {{SITENAME}}.',
 
 # General errors
 'wrong_wfQuery_params' => 'Doshalo gin le parametrengo ko wfQuery()<br />I function: $1<br />Query: $2',
-'viewsource'           => 'Dikh i sursa',
+'viewsource' => 'Dikh i sursa',
 
 # Login and logout pages
-'logouttext'                 => "'''Akana san avryal i {{SITENAME}}.'''
+'logouttext' => "'''Akana san avryal i {{SITENAME}}.'''
 
 Shai te labyares {{SITENAME}} sar ekh bijanglo jeno vai shai te prinjares tut palem sar o jeno le kadale navesa vai le aver navesa.",
-'welcomecreation'            => '== Mishto avilyan, $1! ==
+'welcomecreation' => '== Mishto avilyan, $1! ==
 
 Akana si tuke ekh akont. Te na bistares te paruves, kana trebul tuke, tire kamimata kai {{SITENAME}}.',
-'yourname'                   => 'Tiro anav',
-'yourpassword'               => 'O nakhavipnasko lav',
-'yourpasswordagain'          => 'O nakhavipnasko lav de nevo',
-'externaldberror'            => 'Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.',
-'login'                      => 'Prinjaripen',
-'loginprompt'                => "Trebul te das drom le phandimatenge ''cookie'' te das andre kai {{SITENAME}}.",
-'userlogin'                  => 'Prinjaripen / Ker ek akount',
-'logout'                     => 'De avri',
-'userlogout'                 => 'De avri',
-'nologinlink'                => 'Ker ek akount',
-'createaccount'              => 'Ker ek nevo akount',
-'gotaccount'                 => "Si tuke akana ekh akonto? '''$1'''.",
-'gotaccountlink'             => 'De andre',
-'createaccountmail'          => 'palal o e-mail',
-'badretype'                  => 'Le nakhavipnaske lava so lekhavdyan nai myazutne.',
-'loginerror'                 => 'Prinjaripnaski dosh',
-'nocookiesnew'               => "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
-'nocookieslogin'             => "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
-'loginsuccesstitle'          => 'Prinjaripen kerdo',
-'loginsuccess'               => 'Akana san prijardo kai {{SITENAME}} sar "$1".',
-'wrongpassword'              => 'O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.',
-'mailmypassword'             => 'Bichhal ma o nakhavipnasko lav e-mail-estar!',
-'passwordremindertitle'      => 'Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}',
-'passwordremindertext'       => 'Varekon (shai te aves tu, katar i adresa $1)
+'yourname' => 'Tiro anav',
+'yourpassword' => 'O nakhavipnasko lav',
+'yourpasswordagain' => 'O nakhavipnasko lav de nevo',
+'externaldberror' => 'Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.',
+'login' => 'Prinjaripen',
+'loginprompt' => "Trebul te das drom le phandimatenge ''cookie'' te das andre kai {{SITENAME}}.",
+'userlogin' => 'Prinjaripen / Ker ek akount',
+'logout' => 'De avri',
+'userlogout' => 'De avri',
+'nologinlink' => 'Ker ek akount',
+'createaccount' => 'Ker ek nevo akount',
+'gotaccount' => "Si tuke akana ekh akonto? '''$1'''.",
+'gotaccountlink' => 'De andre',
+'createaccountmail' => 'palal o e-mail',
+'badretype' => 'Le nakhavipnaske lava so lekhavdyan nai myazutne.',
+'loginerror' => 'Prinjaripnaski dosh',
+'nocookiesnew' => "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
+'nocookieslogin' => "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
+'loginsuccesstitle' => 'Prinjaripen kerdo',
+'loginsuccess' => 'Akana san prijardo kai {{SITENAME}} sar "$1".',
+'wrongpassword' => 'O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.',
+'mailmypassword' => 'Bichhal ma o nakhavipnasko lav e-mail-estar!',
+'passwordremindertitle' => 'Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}',
+'passwordremindertext' => 'Varekon (shai te aves tu, katar i adresa $1)
 manglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.
 O nakhavipnasko lav le jenesko "$2" akana si "$3".
 Mishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.',
-'noemail'                    => 'Nai ni ekh adresa e-mail prinjarde le jeneske "$1".',
-'eauthentsent'               => 'Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).',
-'mailerror'                  => 'Dosh kana sas bichhaldo o e-mail: $1',
+'noemail' => 'Nai ni ekh adresa e-mail prinjarde le jeneske "$1".',
+'eauthentsent' => 'Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).',
+'mailerror' => 'Dosh kana sas bichhaldo o e-mail: $1',
 'acct_creation_throttle_hit' => 'Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.',
-'emailauthenticated'         => 'Tiro e-mail sas prinjardo kai $1.',
-'emailnotauthenticated'      => 'Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.',
-'noemailprefs'               => 'Thov ekh adresa e-mail te keren buti le kadale labne.',
-'emailconfirmlink'           => 'Prinjar o e-mail',
-'invalidemailaddress'        => 'Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.',
-'accountcreated'             => 'Akount kerdo',
-'accountcreatedtext'         => 'Kerdo o akonto le jenesko ko $1.',
+'emailauthenticated' => 'Tiro e-mail sas prinjardo kai $1.',
+'emailnotauthenticated' => 'Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.',
+'noemailprefs' => 'Thov ekh adresa e-mail te keren buti le kadale labne.',
+'emailconfirmlink' => 'Prinjar o e-mail',
+'invalidemailaddress' => 'Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.',
+'accountcreated' => 'Akount kerdo',
+'accountcreatedtext' => 'Kerdo o akonto le jenesko ko $1.',
 
 # Change password dialog
 'oldpassword' => 'Purano nakahvipnasko lav',
@@ -219,36 +219,36 @@ Mishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.',
 'image_sample' => 'Misal.jpg',
 
 # Edit pages
-'summary'           => 'Xarno xalyaripen:',
-'minoredit'         => 'Kadava si ek tikno editisarimos',
-'watchthis'         => 'Dikh kadaya patrin',
-'savearticle'       => 'Uxtav i patrin',
-'showpreview'       => 'Dikh sar avelas i patrin',
-'showlivepreview'   => 'Jivutno angledikhipen',
-'showdiff'          => 'Dikh le paruvimata',
+'summary' => 'Xarno xalyaripen:',
+'minoredit' => 'Kadava si ek tikno editisarimos',
+'watchthis' => 'Dikh kadaya patrin',
+'savearticle' => 'Uxtav i patrin',
+'showpreview' => 'Dikh sar avelas i patrin',
+'showlivepreview' => 'Jivutno angledikhipen',
+'showdiff' => 'Dikh le paruvimata',
 'whitelistedittext' => 'Trebul te [[Special:UserLogin|autentifikisares]] kashte editisares artikolurya.',
-'accmailtitle'      => 'O nakhavipnasko lav bićhaldo.',
-'accmailtext'       => "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
-'newarticle'        => '(Nevo)',
-'newarticletext'    => 'Avilyan kai ek patrin so na si.
+'accmailtitle' => 'O nakhavipnasko lav bićhaldo.',
+'accmailtext' => "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
+'newarticle' => '(Nevo)',
+'newarticletext' => 'Avilyan kai ek patrin so na si.
 Te keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [[{{MediaWiki:Helppage}}|zhutipnaski patrin]] te janes buteder).
 Kana avilyan kathe doshatar, ja palpale.',
-'noarticletext'     => "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.
+'noarticletext' => "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.
 * Te shirdes (astares) te keres o lekh, ker klik  '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
-'editing'           => 'Editisaripen $1',
-'yourtext'          => 'Tiro teksto',
-'storedversion'     => 'Akanutni versiya',
-'yourdiff'          => 'Ververimata',
+'editing' => 'Editisaripen $1',
+'yourtext' => 'Tiro teksto',
+'storedversion' => 'Akanutni versiya',
+'yourdiff' => 'Ververimata',
 
 # History pages
 'previousrevision' => '← Purano paruvipen',
-'nextrevision'     => 'Nevi paruvipen →',
-'cur'              => 'akanutni',
-'last'             => 'purani',
-'histlegend'       => 'Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,
+'nextrevision' => 'Nevi paruvipen →',
+'cur' => 'akanutni',
+'last' => 'purani',
+'histlegend' => 'Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,
 (purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen',
-'histfirst'        => 'O mai purano',
-'histlast'         => 'O mai nevo',
+'histfirst' => 'O mai purano',
+'histlast' => 'O mai nevo',
 
 # Revision deletion
 'revdelete-submit' => 'Ker kadya le alosarde paruvimatenge',
@@ -257,97 +257,97 @@ Kana avilyan kathe doshatar, ja palpale.',
 'compareselectedversions' => 'Dikh ververimata mashkar alosarde versiye',
 
 # Search results
-'prevn'             => 'mai neve {{PLURAL:$1|$1}}',
-'nextn'             => 'mai purane {{PLURAL:$1|$1}}',
-'viewprevnext'      => 'Dikh ($1 {{int:pipe-separator}} $2) ($3).',
-'searchhelp-url'    => 'Help:Zhutipen',
-'showingresults'    => 'Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.',
+'prevn' => 'mai neve {{PLURAL:$1|$1}}',
+'nextn' => 'mai purane {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Dikh ($1 {{int:pipe-separator}} $2) ($3).',
+'searchhelp-url' => 'Help:Zhutipen',
+'showingresults' => 'Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.',
 'showingresultsnum' => 'Tele si <b>$3</b> rezultaturya shirdindoi le ginestar <b>$2</b>.',
-'powersearch'       => 'Rod',
+'powersearch' => 'Rod',
 
 # Preferences page
-'preferences'    => 'Kamimata',
+'preferences' => 'Kamimata',
 'changepassword' => 'Paruv o nakhavipnasko lav',
-'prefs-skin'     => 'Dikhimos',
-'datedefault'    => 'Ni ekh kamipen',
+'prefs-skin' => 'Dikhimos',
+'datedefault' => 'Ni ekh kamipen',
 'prefs-datetime' => 'Dives thai chaso',
-'prefs-rc'       => 'Neve paruvimata',
-'saveprefs'      => 'Uxtav le kamimata',
-'resetprefs'     => 'Thov le kamimata sar ko shirdipen',
-'columns'        => 'Uche vortorina:',
-'localtime'      => 'Thanutno vaxt',
+'prefs-rc' => 'Neve paruvimata',
+'saveprefs' => 'Uxtav le kamimata',
+'resetprefs' => 'Thov le kamimata sar ko shirdipen',
+'columns' => 'Uche vortorina:',
+'localtime' => 'Thanutno vaxt',
 'timezoneoffset' => 'Ververipen',
-'guesstimezone'  => 'Le les katar o browser',
-'allowemail'     => 'De drom te aven e-mailurya katar aver jene',
-'defaultns'      => 'Rod savaxt vi kai kadale riga:',
-'default'        => 'acharuno',
-'prefs-files'    => 'Failurya',
-'youremail'      => 'Emailesko adress (kana kames)*',
-'yourrealname'   => 'Tiro chacho anav*',
-'yourlanguage'   => 'Ćhib:',
-'yournick'       => 'I xarni versyunya, le semnaturenge',
-'badsig'         => 'Bilachhi semnatura; dikh le tagurya HTML.',
+'guesstimezone' => 'Le les katar o browser',
+'allowemail' => 'De drom te aven e-mailurya katar aver jene',
+'defaultns' => 'Rod savaxt vi kai kadale riga:',
+'default' => 'acharuno',
+'prefs-files' => 'Failurya',
+'youremail' => 'Emailesko adress (kana kames)*',
+'yourrealname' => 'Tiro chacho anav*',
+'yourlanguage' => 'Ćhib:',
+'yournick' => 'I xarni versyunya, le semnaturenge',
+'badsig' => 'Bilachhi semnatura; dikh le tagurya HTML.',
 
 # User rights
 'editinguser' => "Editisaripen '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
 
 # Groups
-'group'            => 'Grupo:',
-'group-bot'        => 'Boturya',
-'group-sysop'      => 'Administratorurya',
+'group' => 'Grupo:',
+'group-bot' => 'Boturya',
+'group-sysop' => 'Administratorurya',
 'group-bureaucrat' => 'Birokraturya:',
-'group-all'        => '(sa)',
+'group-all' => '(sa)',
 
-'group-sysop-member'      => 'Administratoro',
+'group-sysop-member' => 'Administratoro',
 'group-bureaucrat-member' => 'Birokrato',
 
-'grouppage-bot'        => '{{ns:project}}:Boturya',
-'grouppage-sysop'      => '{{ns:project}}:Administratorurya',
+'grouppage-bot' => '{{ns:project}}:Boturya',
+'grouppage-sysop' => '{{ns:project}}:Administratorurya',
 'grouppage-bureaucrat' => '{{ns:project}}:Birokraturya',
 
 # Recent changes
-'recentchanges'                     => 'Neve paruvimata',
-'recentchangestext'                 => 'Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.',
-'rcnote'                            => 'Tele si le palutne <strong>$1</strong> paruvimata andar le palutne <strong>$2</strong> divesa.',
-'rcnotefrom'                        => "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
-'rclistfrom'                        => 'Dikh le paruvimata ji kai $1',
-'rcshowhideminor'                   => '$1 tikne editisaripena',
-'rcshowhidebots'                    => '$1 (ro)boturya',
-'rcshowhideliu'                     => '$1 prinjarde jene',
-'rcshowhideanons'                   => '$1 bijangle jene',
-'rcshowhidepatr'                    => '$1 dikhle paruvimata',
-'rcshowhidemine'                    => '$1 mire editisaripena',
-'rclinks'                           => 'Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3',
-'diff'                              => 'ververipen',
-'hist'                              => 'puranipen',
-'hide'                              => 'garav',
-'show'                              => 'dikh',
-'minoreditletter'                   => 't',
+'recentchanges' => 'Neve paruvimata',
+'recentchanges-summary' => 'Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.',
+'rcnote' => 'Tele si le palutne <strong>$1</strong> paruvimata andar le palutne <strong>$2</strong> divesa.',
+'rcnotefrom' => "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
+'rclistfrom' => 'Dikh le paruvimata ji kai $1',
+'rcshowhideminor' => '$1 tikne editisaripena',
+'rcshowhidebots' => '$1 (ro)boturya',
+'rcshowhideliu' => '$1 prinjarde jene',
+'rcshowhideanons' => '$1 bijangle jene',
+'rcshowhidepatr' => '$1 dikhle paruvimata',
+'rcshowhidemine' => '$1 mire editisaripena',
+'rclinks' => 'Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3',
+'diff' => 'ververipen',
+'hist' => 'puranipen',
+'hide' => 'garav',
+'show' => 'dikh',
+'minoreditletter' => 't',
 'number_of_watching_users_pageview' => '[$1 jeno/e kon len vurma e patrinyaki]',
-'rc_categories'                     => 'Numa le shopnya (rigyarde katar "|")',
-'rc_categories_any'                 => 'Savegodi',
+'rc_categories' => 'Numa le shopnya (rigyarde katar "|")',
+'rc_categories_any' => 'Savegodi',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Pashvipnaske paruvimata',
-'recentchangeslinked-feed'    => 'Pashvipnaske paruvimata',
+'recentchangeslinked' => 'Pashvipnaske paruvimata',
+'recentchangeslinked-feed' => 'Pashvipnaske paruvimata',
 'recentchangeslinked-toolbox' => 'Pashvipnaske paruvimata',
 
 # Upload
-'upload'      => 'Bichhal file',
-'uploadbtn'   => 'Bichhal file',
-'filedesc'    => 'Xarno xalyaripen',
+'upload' => 'Bichhal file',
+'uploadbtn' => 'Bichhal file',
+'filedesc' => 'Xarno xalyaripen',
 'badfilename' => 'O chitrosko anav sas paruvdo; o nevo anav si "$1".',
-'savefile'    => 'Uxtav file',
+'savefile' => 'Uxtav file',
 
 # Special:ListFiles
 'listfiles' => 'Patrinipen le chitrengo',
 
 # File description page
 'file-anchor-link' => 'Chitro',
-'imagelinks'       => 'Chitroske phandimata',
+'imagelinks' => 'Chitroske phandimata',
 
 # Unused templates
-'unusedtemplates'    => 'Bilabyarde sikavne',
+'unusedtemplates' => 'Bilabyarde sikavne',
 'unusedtemplateswlh' => 'aver phandimata',
 
 # Random page
@@ -357,173 +357,173 @@ Kana avilyan kathe doshatar, ja palpale.',
 'statistics' => 'Beshimata',
 
 # Miscellaneous special pages
-'wantedpages'  => 'Kamle pajine',
-'shortpages'   => 'Xarne patrya',
+'wantedpages' => 'Kamle pajine',
+'shortpages' => 'Xarne patrya',
 'deadendpages' => 'Biphandimatenge patrya',
-'listusers'    => 'Jenengo patrinipen',
-'newpages'     => 'Neve patrya',
+'listusers' => 'Jenengo patrinipen',
+'newpages' => 'Neve patrya',
 'ancientpages' => 'E puraneder lekha',
-'move'         => 'Ingerdipen',
+'move' => 'Ingerdipen',
 
 # Special:AllPages
-'allpages'       => 'Savore patrya',
-'nextpage'       => 'Anglutni patrin ($1)',
-'allarticles'    => 'Sa le artikolurya',
+'allpages' => 'Savore patrya',
+'nextpage' => 'Anglutni patrin ($1)',
+'allarticles' => 'Sa le artikolurya',
 'allpagessubmit' => 'Ja',
 
 # E-mail user
 'emailuser' => 'Bichhal les/la e-mail',
 'emailfrom' => 'Katar',
-'emailto'   => 'Karing',
+'emailto' => 'Karing',
 'emailsend' => 'Bichhal',
 
 # Watchlist
-'watchlist'        => 'Dikhipnaske lekha',
-'mywatchlist'      => 'Dikhipnaske lekha',
-'addedwatchtext'   => 'I patrin "[[:$1]]" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].
+'watchlist' => 'Dikhipnaske lekha',
+'mywatchlist' => 'Dikhipnaske lekha',
+'addedwatchtext' => 'I patrin "[[:$1]]" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].
 Le neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:RecentChanges|neve paruvimatenge]].
 
 Kana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai "Na mai arakh" (opre, kana i patrin dikhel pes).',
 'removedwatchtext' => 'I patrin "[[:$1]]" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).',
-'watch'            => 'Dikh la',
-'unwatch'          => 'Na mai dikh',
-'unwatchthispage'  => 'Na mai dikh',
-'wlnote'           => 'Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.',
+'watch' => 'Dikh la',
+'unwatch' => 'Na mai dikh',
+'unwatchthispage' => 'Na mai dikh',
+'wlnote' => 'Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.',
 
-'enotif_reset'       => 'Thov semno kai patrya so dikhlem',
+'enotif_reset' => 'Thov semno kai patrya so dikhlem',
 'enotif_newpagetext' => 'Kadaya si ek nevi patrin.',
 
 # Delete
-'deletepage'      => 'Khos i patrin',
-'confirm'         => 'Ja',
-'excontent'       => "o ander sas: '$1'",
+'deletepage' => 'Khos i patrin',
+'confirm' => 'Ja',
+'excontent' => "o ander sas: '$1'",
 'excontentauthor' => "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
-'exblank'         => 'i patrin sas chuchi',
-'historywarning'  => 'Dikh! La patrya so kames to khoses la si la puranipen:',
-'actioncomplete'  => 'Agorisardi buti',
-'deletedtext'     => '"$1" sas khosli.
+'exblank' => 'i patrin sas chuchi',
+'historywarning' => 'Dikh! La patrya so kames to khoses la si la puranipen:',
+'actioncomplete' => 'Agorisardi buti',
+'deletedtext' => '"$1" sas khosli.
 Dikh ando $2 ek patrinipen le palutne butyange khosle.',
 
 # Rollback
 'rollback_short' => 'Palemavilipen',
-'rollbacklink'   => 'palemavilipen',
+'rollbacklink' => 'palemavilipen',
 'rollbackfailed' => 'O palemavilipen nashtisardyas te kerel pes.',
 
 # Protect
 'prot_1movedto2' => '[[$1]] bichhaldo kai [[$2]]',
 
 # Undelete
-'undelete'      => 'Dikh le khosle patrya',
-'undeletebtn'   => 'Le palpale',
+'undelete' => 'Dikh le khosle patrya',
+'undeletebtn' => 'Le palpale',
 'undeletereset' => 'Khos le paruvimata',
 
 # Namespace form on various pages
 'namespace' => 'Rig:',
-'invert'    => 'Bi rigyako:',
+'invert' => 'Bi rigyako:',
 
 # Contributions
 'contributions' => 'Jeneske butya',
-'mycontris'     => 'Mire butya',
-'contribsub2'   => 'Katar $1 ($2)',
-'uctop'         => '(opre)',
+'mycontris' => 'Mire butya',
+'contribsub2' => 'Katar $1 ($2)',
+'uctop' => '(opre)',
 
 # What links here
 'whatlinkshere' => 'So phandel pes kathe',
-'nolinkshere'   => 'Ni ek patrin phandel pes (avel) kathe.',
+'nolinkshere' => 'Ni ek patrin phandel pes (avel) kathe.',
 
 # Block/unblock
-'blockip'      => 'De avri jenes/IP',
-'ipbsubmit'    => 'De avri kadava jenes',
-'ipusubmit'    => 'Na mai brakh i adresa',
+'blockip' => 'De avri jenes/IP',
+'ipbsubmit' => 'De avri kadava jenes',
+'ipusubmit' => 'Na mai brakh i adresa',
 'contribslink' => 'butya',
 
 # Developer tools
-'lockbtn'   => 'Brakh i database',
+'lockbtn' => 'Brakh i database',
 'unlockbtn' => 'Na mai brakh i database',
 
 # Move page
-'movearticle'     => 'Inger i patrin',
-'movepagebtn'     => 'Inger i patrin',
-'pagemovedsub'    => 'I patrin sas bićhaldi.',
-'movedto'         => 'ingerdi kai',
+'movearticle' => 'Inger i patrin',
+'movepagebtn' => 'Inger i patrin',
+'pagemovedsub' => 'I patrin sas bićhaldi.',
+'movedto' => 'ingerdi kai',
 'delete_and_move' => 'Khos thai inger',
 
 # Export
 'export-submit' => 'Bichhal avri',
 
 # Namespace 8 related
-'allmessages'     => 'Sistemoske duma',
+'allmessages' => 'Sistemoske duma',
 'allmessagesname' => 'Anav',
 
 # Special:Import
 'import-interwiki-submit' => 'Le andre',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'           => 'Miri labyarneski pajina',
-'tooltip-pt-anonuserpage'       => 'Miri labyarneski pajina ki akanutni IP adress',
-'tooltip-pt-mytalk'             => 'Miri diskuciyaki pajina',
-'tooltip-pt-anontalk'           => 'Diskucie le editisarimatenge ki akanutni IP adress',
-'tooltip-pt-preferences'        => 'Sar kamav te dikhel pes miri pajina',
-'tooltip-pt-watchlist'          => 'I lista le pajinenge so dikhav lendar (monitorizav).',
-'tooltip-pt-mycontris'          => 'Le mire editisarimata',
-'tooltip-pt-login'              => 'Mishto si te identifikares tut, pale na si musai.',
-'tooltip-pt-anonlogin'          => 'Mishto si te identifikares tut, pale na si musai.',
-'tooltip-pt-logout'             => 'Kathe aćhaves i sesiyunya',
-'tooltip-ca-talk'               => 'Diskuciya le artikoleske',
-'tooltip-ca-edit'               => 'Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.',
-'tooltip-ca-addsection'         => 'Kathe shai te thos ek komentaryo ki kadaya diskuciya.',
-'tooltip-ca-viewsource'         => 'Kadaya pajina si brakhli. Shai numa te dikhes o source-code.',
-'tooltip-ca-history'            => 'Purane versiune le dokumenteske.',
-'tooltip-ca-protect'            => 'Brakh kadava dokumento.',
-'tooltip-ca-delete'             => 'Khos kadava dokumento.',
-'tooltip-ca-undelete'           => 'Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.',
-'tooltip-ca-move'               => 'Trade kadava dokumento.',
-'tooltip-ca-watch'              => 'Thav kadava dokumento andi monitorizaripnaski lista.',
-'tooltip-ca-unwatch'            => 'Khos kadava dokumento andar i monitorizaripnaski lista.',
-'tooltip-search'                => 'Rod andi kadaya Wiki',
-'tooltip-p-logo'                => 'I sherutni pajina',
-'tooltip-n-mainpage'            => 'Dikh i sherutni pajina',
-'tooltip-n-portal'              => 'O proyekto, so shai te keres, kai arakhes solucie.',
-'tooltip-n-currentevents'       => 'Arakh janglimata le akanutne evenimenturenge',
-'tooltip-n-recentchanges'       => 'I lista le neve paruvimatenge kerdini andi kadaya wiki.',
-'tooltip-n-randompage'          => 'Ja ki ek aleatori pajina',
-'tooltip-n-help'                => 'O than kai arakhes zhutipen.',
-'tooltip-t-whatlinkshere'       => 'I lista sa le wiki pajinenge so aven (si phande) vi kathe',
+'tooltip-pt-userpage' => 'Miri labyarneski pajina',
+'tooltip-pt-anonuserpage' => 'Miri labyarneski pajina ki akanutni IP adress',
+'tooltip-pt-mytalk' => 'Miri diskuciyaki pajina',
+'tooltip-pt-anontalk' => 'Diskucie le editisarimatenge ki akanutni IP adress',
+'tooltip-pt-preferences' => 'Sar kamav te dikhel pes miri pajina',
+'tooltip-pt-watchlist' => 'I lista le pajinenge so dikhav lendar (monitorizav).',
+'tooltip-pt-mycontris' => 'Le mire editisarimata',
+'tooltip-pt-login' => 'Mishto si te identifikares tut, pale na si musai.',
+'tooltip-pt-anonlogin' => 'Mishto si te identifikares tut, pale na si musai.',
+'tooltip-pt-logout' => 'Kathe aćhaves i sesiyunya',
+'tooltip-ca-talk' => 'Diskuciya le artikoleske',
+'tooltip-ca-edit' => 'Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.',
+'tooltip-ca-addsection' => 'Kathe shai te thos ek komentaryo ki kadaya diskuciya.',
+'tooltip-ca-viewsource' => 'Kadaya pajina si brakhli. Shai numa te dikhes o source-code.',
+'tooltip-ca-history' => 'Purane versiune le dokumenteske.',
+'tooltip-ca-protect' => 'Brakh kadava dokumento.',
+'tooltip-ca-delete' => 'Khos kadava dokumento.',
+'tooltip-ca-undelete' => 'Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.',
+'tooltip-ca-move' => 'Trade kadava dokumento.',
+'tooltip-ca-watch' => 'Thav kadava dokumento andi monitorizaripnaski lista.',
+'tooltip-ca-unwatch' => 'Khos kadava dokumento andar i monitorizaripnaski lista.',
+'tooltip-search' => 'Rod andi kadaya Wiki',
+'tooltip-p-logo' => 'I sherutni pajina',
+'tooltip-n-mainpage' => 'Dikh i sherutni pajina',
+'tooltip-n-portal' => 'O proyekto, so shai te keres, kai arakhes solucie.',
+'tooltip-n-currentevents' => 'Arakh janglimata le akanutne evenimenturenge',
+'tooltip-n-recentchanges' => 'I lista le neve paruvimatenge kerdini andi kadaya wiki.',
+'tooltip-n-randompage' => 'Ja ki ek aleatori pajina',
+'tooltip-n-help' => 'O than kai arakhes zhutipen.',
+'tooltip-t-whatlinkshere' => 'I lista sa le wiki pajinenge so aven (si phande) vi kathe',
 'tooltip-t-recentchangeslinked' => 'Neve paruvimata andi kadaya pajina',
-'tooltip-feed-rss'              => 'Kathe te pravares o RSS flukso le kadale pajinyako',
-'tooltip-feed-atom'             => 'Kathe te pravares o Atom flukso le kadale pajinyako',
-'tooltip-t-contributions'       => 'Dikh i lista le editisarimatenge le kadale labyaresko',
-'tooltip-t-emailuser'           => 'Bićhal ek emailo le kadale labyareske',
-'tooltip-t-upload'              => 'Bićhal imajine vai media files',
-'tooltip-t-specialpages'        => 'I lista sa le spechiale pajinengi',
-'tooltip-ca-nstab-main'         => 'Dikh o artikolo',
-'tooltip-ca-nstab-user'         => 'Dikh i labyarengi pajina',
-'tooltip-ca-nstab-media'        => 'Dikh i pajina media',
-'tooltip-ca-nstab-special'      => 'Kadaya si ek spechiali pajina, nashti te editisares la.',
-'tooltip-ca-nstab-project'      => 'Dikh i pajina le proyekteski',
-'tooltip-ca-nstab-image'        => 'Dikh i imajinyaki pajina',
-'tooltip-ca-nstab-mediawiki'    => 'Dikh o mesajo le sistemesko',
-'tooltip-ca-nstab-template'     => 'Dikh o formato',
-'tooltip-ca-nstab-help'         => 'Dikh i zhutipnaski pajina',
-'tooltip-ca-nstab-category'     => 'Dikh i kategoriya',
+'tooltip-feed-rss' => 'Kathe te pravares o RSS flukso le kadale pajinyako',
+'tooltip-feed-atom' => 'Kathe te pravares o Atom flukso le kadale pajinyako',
+'tooltip-t-contributions' => 'Dikh i lista le editisarimatenge le kadale labyaresko',
+'tooltip-t-emailuser' => 'Bićhal ek emailo le kadale labyareske',
+'tooltip-t-upload' => 'Bićhal imajine vai media files',
+'tooltip-t-specialpages' => 'I lista sa le spechiale pajinengi',
+'tooltip-ca-nstab-main' => 'Dikh o artikolo',
+'tooltip-ca-nstab-user' => 'Dikh i labyarengi pajina',
+'tooltip-ca-nstab-media' => 'Dikh i pajina media',
+'tooltip-ca-nstab-special' => 'Kadaya si ek spechiali pajina, nashti te editisares la.',
+'tooltip-ca-nstab-project' => 'Dikh i pajina le proyekteski',
+'tooltip-ca-nstab-image' => 'Dikh i imajinyaki pajina',
+'tooltip-ca-nstab-mediawiki' => 'Dikh o mesajo le sistemesko',
+'tooltip-ca-nstab-template' => 'Dikh o formato',
+'tooltip-ca-nstab-help' => 'Dikh i zhutipnaski pajina',
+'tooltip-ca-nstab-category' => 'Dikh i kategoriya',
 
 # Attribution
-'anonymous'        => 'Bijangle labyarne kai {{SITENAME}}',
-'siteuser'         => 'Jeno kai {{SITENAME}} $1',
+'anonymous' => 'Bijangle labyarne kai {{SITENAME}}',
+'siteuser' => 'Jeno kai {{SITENAME}} $1',
 'lastmodifiedatby' => 'Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.',
-'others'           => 'aver',
-'siteusers'        => 'Jeno/e kai {{SITENAME}} $1',
+'others' => 'aver',
+'siteusers' => 'Jeno/e kai {{SITENAME}} $1',
 
 # Image deletion
 'deletedrevision' => 'Khoslo o purano paruvipen $1',
 
 # Browsing diffs
 'previousdiff' => '← Purano ververipen',
-'nextdiff'     => 'Anglutno paruvipen →',
+'nextdiff' => 'Anglutno paruvipen →',
 
 # Special:NewFiles
 'showhidebots' => '($1 boturya)',
-'ilsubmit'     => 'Rod',
+'ilsubmit' => 'Rod',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'savore',
index 81ba67f..88fbdca 100644 (file)
 $separatorTransformTable = array( ',' => ".", '.' => ',' );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#REDIRECTEAZA', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__FARACUPRINS__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__FARAGALERIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORTEAZACUPRINS__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__CUPRINS__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__FARAEDITSECTIUNE__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__FARAANTET__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'NUMARLUNACURENTA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'LUNACURENTA1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NUMELUNACURENTA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NUMELUNACURENTAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'LUNACURENTAABREV', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NUMARZIUACURENTA', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NUMARZIUACURENTA2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NUMEZIUACURENTA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ANULCURENT', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TIMPULCURENT', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORACURENTA', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LUNALOCALA', 'LUNALOCALA2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LUNALOCALA1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'NUMELUNALOCALA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'NUMELUNALOCALAGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LUNALOCALAABREV', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ZIUALOCALA', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ZIUALOCALA2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'NUMEZIUALOCALA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ANULLOCAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'TIMPULLOCAL', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMARDEPAGINI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMARDEARTICOLE', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMARDEFISIERE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMARDEUTILIZATORI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMARDEUTILIZATORIACTIVI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMARDEMODIFICARI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMARDEVIZUALIZARI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'NUMEPAGINA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NUMEEPAGINA', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'SPATIUDENUME', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'SPATIUUDENUME', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'SPATIUDEDISCUTIE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'SPATIUUDEDISCUTIE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'SPATIUSUBIECT', 'SPATIUARTICOL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'SPATIUUSUBIECT', 'SPATIUUARTICOL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'NUMEPAGINACOMPLET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'NUMEEPAGINACOMPLET', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NUMESUBPAGINA', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NUMEESUBPAGINA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NUMEDEBAZAPAGINA', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NUMEEDEBAZAPAGINA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NUMEPAGINADEDISCUTIE', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NUMEEPAGINADEDISCUTIE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NUMEPAGINASUBIECT', 'NUMEPAGINAARTICOL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NUMEEPAGINASUBIECT', 'NUMEEPAGINAARTICOL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'MSJNOU:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'dreapta', 'right' ),
-       'img_left'                => array( '1', 'stanga', 'left' ),
-       'img_none'                => array( '1', 'nu', 'none' ),
-       'img_center'              => array( '1', 'centru', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'cadru', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'faracadru', 'frameless' ),
-       'img_page'                => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'dreaptasus', 'dreaptasus=$1', 'dreaptasus $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'chenar', 'border' ),
-       'img_baseline'            => array( '1', 'linia_de_bază', 'baseline' ),
-       'img_sub'                 => array( '1', 'indice', 'sub' ),
-       'img_super'               => array( '1', 'exponent', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'sus', 'top' ),
-       'img_text_top'            => array( '1', 'text-sus', 'text-top' ),
-       'img_middle'              => array( '1', 'mijloc', 'middle' ),
-       'img_bottom'              => array( '1', 'jos', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-jos', 'text-bottom' ),
-       'img_link'                => array( '1', 'legătură=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'NUMESITE', 'SITENAME' ),
-       'ns'                      => array( '0', 'SN:', 'NS:' ),
-       'localurl'                => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URLLOCALE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'NUMESERVER', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CALESCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GEN:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__FARACONVERTIRETITLU__', '__FCT__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__FARACONVERTIRECONTINUT__', '__FCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'SAPTAMANACURENTA', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'SAPTAMANALOCALA', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'IDREVIZIE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ZIREVIZIE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ZIREVIZIE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'LUNAREVIZIE', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'ANREVIZIE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'STAMPILATIMPREVIZIE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'UTILIZATORREVIZIE', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'URLCOMPLET:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'URLCOMPLETE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'MINUSCULAPRIMA:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'MAJUSCULAPRIMA:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'MINUSCULA:', 'LC:' ),
-       'uc'                      => array( '0', 'MAJUSCULA:', 'UC:' ),
-       'raw'                     => array( '0', 'BRUT:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ARATATITLU', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__LEGATURASECTIUNENOUA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__FARALEGATURASECTIUNENOUA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'VERSIUNECURENTA', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'CODIFICAREURL:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'CODIFICAREANCORA', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'STAMPILATIMPCURENT', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'STAMPILATIMPLOCAL', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'SEMNDIRECTIE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#LIMBA:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'LIMBACONTINUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'PANIGIINSPATIULDENUME:', 'PAGINIINSN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'NUMARADMINI', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATNR', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'SORTAREIMPLICITA:', 'CHEIESORTAREIMPLICITA:', 'CATEGORIESORTAREIMPLICITA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'CALEAFISIERULUI:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'eticheta', 'tag' ),
-       'hiddencat'               => array( '1', '__ASCUNDECAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'PAGINIINCATEGORIE', 'PAGINIINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'MARIMEPAGINA', 'PAGESIZE' ),
-       'noindex'                 => array( '1', '__FARAINDEX__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'NUMARINGRUP', 'NUMINGRUP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__REDIRECTIONARESTATICA__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVELPROTECTIE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#REDIRECTEAZA', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__FARACUPRINS__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__FARAGALERIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORTEAZACUPRINS__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__CUPRINS__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__FARAEDITSECTIUNE__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__FARAANTET__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'NUMARLUNACURENTA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'LUNACURENTA1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NUMELUNACURENTA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NUMELUNACURENTAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'LUNACURENTAABREV', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NUMARZIUACURENTA', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NUMARZIUACURENTA2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NUMEZIUACURENTA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ANULCURENT', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TIMPULCURENT', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORACURENTA', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LUNALOCALA', 'LUNALOCALA2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LUNALOCALA1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'NUMELUNALOCALA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'NUMELUNALOCALAGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LUNALOCALAABREV', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ZIUALOCALA', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ZIUALOCALA2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'NUMEZIUALOCALA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ANULLOCAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'TIMPULLOCAL', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOCALA', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMARDEPAGINI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMARDEARTICOLE', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMARDEFISIERE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMARDEUTILIZATORI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMARDEUTILIZATORIACTIVI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMARDEMODIFICARI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMARDEVIZUALIZARI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'NUMEPAGINA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NUMEEPAGINA', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'SPATIUDENUME', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'SPATIUUDENUME', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'SPATIUDEDISCUTIE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'SPATIUUDEDISCUTIE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'SPATIUSUBIECT', 'SPATIUARTICOL', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'SPATIUUSUBIECT', 'SPATIUUARTICOL', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'NUMEPAGINACOMPLET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'NUMEEPAGINACOMPLET', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NUMESUBPAGINA', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NUMEESUBPAGINA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NUMEDEBAZAPAGINA', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NUMEEDEBAZAPAGINA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NUMEPAGINADEDISCUTIE', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NUMEEPAGINADEDISCUTIE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NUMEPAGINASUBIECT', 'NUMEPAGINAARTICOL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NUMEEPAGINASUBIECT', 'NUMEEPAGINAARTICOL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'MSJNOU:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'dreapta', 'right' ),
+       'img_left'                  => array( '1', 'stanga', 'left' ),
+       'img_none'                  => array( '1', 'nu', 'none' ),
+       'img_center'                => array( '1', 'centru', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'cadru', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'faracadru', 'frameless' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'dreaptasus', 'dreaptasus=$1', 'dreaptasus $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'chenar', 'border' ),
+       'img_baseline'              => array( '1', 'linia_de_bază', 'baseline' ),
+       'img_sub'                   => array( '1', 'indice', 'sub' ),
+       'img_super'                 => array( '1', 'exponent', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'sus', 'top' ),
+       'img_text_top'              => array( '1', 'text-sus', 'text-top' ),
+       'img_middle'                => array( '1', 'mijloc', 'middle' ),
+       'img_bottom'                => array( '1', 'jos', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-jos', 'text-bottom' ),
+       'img_link'                  => array( '1', 'legătură=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'NUMESITE', 'SITENAME' ),
+       'ns'                        => array( '0', 'SN:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URLLOCALE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'NUMESERVER', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CALESCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATICA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GEN:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__FARACONVERTIRETITLU__', '__FCT__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__FARACONVERTIRECONTINUT__', '__FCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'SAPTAMANACURENTA', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'SAPTAMANALOCALA', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'IDREVIZIE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ZIREVIZIE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ZIREVIZIE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'LUNAREVIZIE', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ANREVIZIE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'STAMPILATIMPREVIZIE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'UTILIZATORREVIZIE', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLET:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'URLCOMPLETE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'MINUSCULAPRIMA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'MAJUSCULAPRIMA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINUSCULA:', 'LC:' ),
+       'uc'                        => array( '0', 'MAJUSCULA:', 'UC:' ),
+       'raw'                       => array( '0', 'BRUT:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ARATATITLU', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LEGATURASECTIUNENOUA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__FARALEGATURASECTIUNENOUA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIUNECURENTA', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'CODIFICAREURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'CODIFICAREANCORA', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'STAMPILATIMPCURENT', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'STAMPILATIMPLOCAL', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'SEMNDIRECTIE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#LIMBA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LIMBACONTINUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PANIGIINSPATIULDENUME:', 'PAGINIINSN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'NUMARADMINI', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATNR', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'SORTAREIMPLICITA:', 'CHEIESORTAREIMPLICITA:', 'CATEGORIESORTAREIMPLICITA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'CALEAFISIERULUI:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'eticheta', 'tag' ),
+       'hiddencat'                 => array( '1', '__ASCUNDECAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'PAGINIINCATEGORIE', 'PAGINIINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MARIMEPAGINA', 'PAGESIZE' ),
+       'noindex'                   => array( '1', '__FARAINDEX__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'NUMARINGRUP', 'NUMINGRUP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__REDIRECTIONARESTATICA__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVELPROTECTIE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdata', 'dataformat', 'formatdate', 'dateformat' ),
 );
 
 $namespaceNames = array(
@@ -459,7 +459,7 @@ pe titlul secțiunii (JavaScript)',
 'vector-action-protect' => 'Protejare',
 'vector-action-undelete' => 'Recuperare',
 'vector-action-unprotect' => 'Modificare protecție',
-'vector-simplesearch-preference' => 'Permite sugestii de căutare superioară (numai interfața Vector)',
+'vector-simplesearch-preference' => 'Activează bara de căutare simplificată (exclusiv pentru interfața Vector)',
 'vector-view-create' => 'Creare',
 'vector-view-edit' => 'Modificare',
 'vector-view-history' => 'Istoric',
@@ -682,10 +682,11 @@ Vă rugăm să încercați din nou în câteva minute.',
 'protectedpagetext' => 'Această pagină este protejată împotriva modificărilor.',
 '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.',
+'protectedinterface' => 'Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.
+Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.',
 'editinginterface' => "'''Avertizare''': Modificați o pagină care este folosită pentru a furniza textul interfeței software.
-Modificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori.
-Pentru traduceri, considerați utilizarea [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], proiectul MediaWiki de localizare.",
+Modificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.
+Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
 'sqlhidden' => '(interogare SQL ascunsă)',
 'cascadeprotected' => 'Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:
 $2',
@@ -711,7 +712,7 @@ Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
 # Login and logout pages
 'logouttext' => "'''Acum sunteți deconectat.'''
 
-Sesiunea dumneavoastră la {{SITENAME}} a fost închisă. Puteți continua să folosiți {{SITENAME}} ca utilizator anonim, sau puteți să vă [[Special:UserLogin|reautentificați]] ca același sau ca alt utilizator.
+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!==
 
@@ -961,8 +962,7 @@ Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini,
 puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale] 
 sau puteți [{{fullurl:{{FULLPAGENAME}}|action=edit}} crea această pagină]</span>.',
 'noarticletext-nopermission' => 'Actualmente, această pagină este lipsită de conținut.
-Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini
-sau puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale]</span>.',
+Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini sau puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale]</span>; nu aveți însă permisiunea de a crea această pagină.',
 'missing-revision' => 'Versiunea nr. $1 a paginii „{{PAGENAME}}” nu există.
 
 Acest lucru se întâmplă de obicei atunci când se accesează o legătură expirată către istoricul unei pagini șterse.
@@ -1228,10 +1228,10 @@ Nu ai acces asupra lui.',
 'revdelete-no-change' => "'''Atenție:''' elementul datat $2, $1 are deja aplicată vizibilitatea cerută.",
 'revdelete-concurrent-change' => 'Eroare la modificarea elementului datat $2, $1: statutul său a fost modificat de altcineva în timpul acestei modificări.',
 'revdelete-only-restricted' => 'Eroare în timpul suprimării elementului datat $1, $2: nu puteți suprima elemente la vizualizarea de către administratori fără a marca una din celelalte opțiuni de suprimare.',
-'revdelete-reason-dropdown' => '*Motive de ascundere
+'revdelete-reason-dropdown' => '*Motive generale de ștergere
 ** Violarea drepturilor de autor
-** Informații personale
-** Obscenități
+** Comentarii inadecvate sau informații personale
+** Nume de utilizator inadecvat
 ** Atacuri la persoană',
 'revdelete-otherreason' => 'Motiv suplimentar, detalii',
 'revdelete-reasonotherlist' => 'Alt motiv',
@@ -1331,8 +1331,6 @@ Detalii se pot găsi în [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE
 'search-interwiki-caption' => 'Proiecte înrudite',
 'search-interwiki-default' => '$1 rezultate:',
 'search-interwiki-more' => '(mai mult)',
-'search-mwsuggest-enabled' => 'cu sugestii',
-'search-mwsuggest-disabled' => 'fără sugestii',
 'search-relatedarticle' => 'Relaționat',
 'mwsuggest-disable' => 'Dezactivează sugestiile AJAX',
 'searcheverything-enable' => 'Caută în toate spațiile de nume',
@@ -1429,7 +1427,7 @@ Aici se află o combinație generată întâmplător pe care o puteți folosi: $
 'timezoneregion-indian' => 'Oceanul Indian',
 'timezoneregion-pacific' => 'Oceanul Pacific',
 'allowemail' => 'Acceptă e-mail de la alți utilizatori',
-'prefs-searchoptions' => 'Opțiuni de căutare',
+'prefs-searchoptions' => 'Căutare',
 'prefs-namespaces' => 'Spații de nume',
 'defaultns' => 'Altfel, caută în aceste spații de nume:',
 'default' => 'standard',
@@ -1491,15 +1489,15 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'userrights-lookup-user' => 'Administrare grupuri de utilizatori',
 'userrights-user-editname' => 'Introduceți un nume de utilizator:',
 'editusergroup' => 'Modificare grup de utilizatori',
-'editinguser' => "Modificare permisiuni de utilizator pentru '''[[User:$1|$1]]''' $2",
+'editinguser' => "Modificarea permisiunilor de utilizator pentru '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Modificare grup de utilizatori',
 'saveusergroups' => 'Salvează grupul de utilizatori',
 'userrights-groupsmember' => 'Membru al:',
 'userrights-groupsmember-auto' => 'Membru, implicit, al:',
 'userrights-groups-help' => 'Puteți schimba grupul căruia îi aparține utilizatorul:
-*Căsuța bifată înseamnă că utilizatorul este în acel grup.
-*Căsuța nebifată înseamnă că utilizatorul nu este în acel grup.
-*Steluța (*) indică faptul că utilizatorul nu poate fi eliminat din grup odată adăugat, sau invers',
+*Căsuța bifată înseamnă că utilizatorul aparține grupului respectiv.
+*Căsuța nebifată înseamnă că utilizatorul nu aparține grupului respectiv.
+*Steluța (*) indică faptul că utilizatorul nu poate fi eliminat din grup odată adăugat, sau invers.',
 'userrights-reason' => 'Motiv:',
 'userrights-no-interwiki' => 'Nu aveți permisiunea de a modifica permisiunile utilizatorilor pe alte wiki.',
 'userrights-nodatabase' => 'Baza de date $1 nu există sau nu este locală.',
@@ -1539,10 +1537,10 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'right-createtalk' => 'Creează pagini de discuție',
 'right-createaccount' => 'Creează conturi noi',
 'right-minoredit' => 'Marchează modificările minore',
-'right-move' => 'Mută paginile',
-'right-move-subpages' => 'Mută paginile cu tot cu subpagini',
+'right-move' => 'Redenumește paginile',
+'right-move-subpages' => 'Redenumește paginile cu tot cu subpagini',
 'right-move-rootuserpages' => 'Redenumește pagina principală a unui utilizator',
-'right-movefile' => 'Mută fișierele',
+'right-movefile' => 'Redenumește fișiere',
 'right-suppressredirect' => 'Nu crea o redirecționare de la vechiul nume atunci când muți o pagină',
 'right-upload' => 'Încarcă fișiere',
 'right-reupload' => 'Suprascrie un fișier existent',
@@ -1608,16 +1606,16 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'action-createtalk' => 'creați pagini de discuție',
 'action-createaccount' => 'creați acest cont de utilizator',
 'action-minoredit' => 'marcați această modificare ca minoră',
-'action-move' => 'mutați această pagină',
-'action-move-subpages' => 'mutați această pagină și subpaginile sale',
+'action-move' => 'redenumiți această pagină',
+'action-move-subpages' => 'redenumiți această pagină și subpaginile sale',
 'action-move-rootuserpages' => 'redenumiți pagina principală a unui utilizator',
-'action-movefile' => 'mutați acest fișier',
+'action-movefile' => 'redenumiți acest fișier',
 'action-upload' => 'încărcați acest fișier',
 'action-reupload' => 'suprascrieți fișierul existent',
 'action-reupload-shared' => 'rescrieți acest fișier în depozitul partajat',
 'action-upload_by_url' => 'încărcați acest fișier de la o adresă URL',
 'action-writeapi' => 'utilizați scrierea prin API',
-'action-delete' => 'șterge această pagină',
+'action-delete' => 'ștergeți această pagină',
 'action-deleterevision' => 'ștergeți această versiune',
 'action-deletedhistory' => 'vizualizați istoricul șters al aceste pagini',
 'action-browsearchive' => 'căutați pagini șterse',
@@ -1844,7 +1842,7 @@ Dacă problema persistă, contactați un [[Special:ListUsers/sysop|administrator
 'backend-fail-internal' => 'O eroare necunoscută s-a produs în suportul de stocare „$1”.',
 'backend-fail-contenttype' => 'Nu s-a putut determina tipul de conținut al fișierului de stocat la „$1”.',
 'backend-fail-batchsize' => 'Suportul de stocare a furnizat un lot de $1 {{PLURAL:$1|operațiune|operațiuni|de operațiuni}} de fișier; limita este $2 {{PLURAL:$2|operațiune|operațiuni|de operațiuni}}.',
-'backend-fail-usable' => 'Imposibil de scris fișierul $1 din cauza permisiunilor insuficiente sau din cauza directoarelor/containerelor lipsă.',
+'backend-fail-usable' => 'Imposibil de citit sau scris fișierul „$1” din cauza permisiunilor insuficiente sau din cauza directoarelor/containerelor lipsă.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Imposibil de conectat la baza de date a jurnalului pentru terminatul de stocare „$1”.',
@@ -2144,7 +2142,7 @@ Intrările <del>tăiate</del> au fost rezolvate.',
 'protectedtitles' => 'Titluri protejate',
 'protectedtitlestext' => 'Următoarele titluri sunt protejate la creare',
 'protectedtitlesempty' => 'Nu există titluri protejate cu acești parametri.',
-'listusers' => 'Lista de utilizatori',
+'listusers' => 'Listă utilizatori',
 'listusers-editsonly' => 'Arată doar utilizatorii cu modificări',
 'listusers-creationsort' => 'Sortează după data creării',
 'usereditcount' => '$1 {{PLURAL:$1|editare|editări}}',
@@ -2153,12 +2151,12 @@ Intrările <del>tăiate</del> au fost rezolvate.',
 'newpages-username' => 'Nume de utilizator:',
 'ancientpages' => 'Cele mai vechi articole',
 'move' => 'Redenumire',
-'movethispage' => 'Mută această pagină',
+'movethispage' => 'Redenumește această pagină',
 'unusedimagestext' => 'Următoarele fișiere există dar nu sunt incluse în nicio altă pagină.
 Vă rugăm să aveți în vedere faptul că alte saituri web pot avea o legătură directă către acest URL și s-ar putea afla aici chiar dacă nu sunt în utlizare activă.',
 'unusedcategoriestext' => 'Următoarele categorii de pagini există și totuși nici un articol sau categorie nu le folosește.',
 'notargettitle' => 'Lipsă țintă',
-'notargettext' => 'Nu ai specificat nici o pagină sau un utilizator țintă pentru care să se efectueze această operațiune.',
+'notargettext' => 'Nu ați specificat nici o pagină sau un utilizator țintă pentru care să se efectueze această operațiune.',
 'nopagetitle' => 'Nu există pagina destinație',
 'nopagetext' => 'Pagina destinație specificată nu există.',
 'pager-newer-n' => '{{PLURAL:$1|1 mai nou|$1 mai noi}}',
@@ -2253,7 +2251,7 @@ Protocoale suportate: <code>$1</code> (nu adăugați niciunul dintre acestea în
 
 # Special:ListGroupRights
 'listgrouprights' => 'Permisiuni grupuri de utilizatori',
-'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definită în aceast wiki, împreună cu permisiunile de acces asociate.
+'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definite în acest wiki, împreună cu permisiunile de acces asociate.
 Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații suplimentare]] despre permisiuni individuale.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Drept acordat</span>
 * <span class="listgrouprights-revoked">Drept revocat</span>',
@@ -2495,9 +2493,9 @@ Puteți schimba nivelul de protejare al acestei pagini, dar asta nu va afecta pr
 
 # Restrictions (nouns)
 'restriction-edit' => 'Modificare',
-'restriction-move' => 'Mută',
-'restriction-create' => 'Creează',
-'restriction-upload' => 'Încarcă',
+'restriction-move' => 'Redenumire',
+'restriction-create' => 'Creare',
+'restriction-upload' => 'Încărcare',
 
 # Restriction levels
 'restriction-level-sysop' => 'protejat complet',
@@ -2518,7 +2516,7 @@ Pentru a realiza o recuperare selectivă bifați versiunile pe care doriți să
 'undeleterevdel' => "Restaurarea unui versiuni nu va fi efectuată dacă ea va apărea în capul listei de versiuni parțial șterse.
 În acest caz, trebuie să debifați sau să reafișați (''unhide'') cea mai recentă versiune ștearsă.",
 'undeletehistorynoadmin' => 'Acest articol a fost șters. Motivul ștergerii apare mai jos, alături de detaliile utilzatorilor care au editat această pagină înainte de ștergere. Textul prorpiu-zis al reviziilor șterse este disponibil doar administratorilor.',
-'undelete-revision' => 'Ştergere revizia $1 (din $4 $5) de către $3:',
+'undelete-revision' => 'Ștergere versiunea $1 (din $4 $5) de către $3:',
 'undeleterevision-missing' => 'Versiune lipsă sau invalidă.
 S-ar putea ca legătura să fie greșită, ori versiunea să fi fost restaurată sau ștearsă din arhivă.',
 'undelete-nodiff' => 'Nu s-a găsit vreo versiune anterioară.',
@@ -2763,22 +2761,22 @@ Pentru a închide sau deschide baza de date, acesta trebuie să poată fi scris
 'lockedbyandtime' => '(de $1, pe $2, la $3 )',
 
 # Move page
-'move-page' => 'Mută $1',
-'move-page-legend' => 'Mută pagina',
-'movepagetext' => "Puteți folosi formularul de mai jos pentru a redenumi o pagină, mutându-i toată istoria sub noul nume.
+'move-page' => 'Redenumire $1',
+'move-page-legend' => 'Redenumire pagină',
+'movepagetext' => "Puteți folosi formularul de mai jos pentru a redenumi o pagină, mutându-i tot istoricul sub noul nume.
 Pagina veche va deveni o pagină de redirecționare către pagina nouă.
 Legăturile către pagina veche nu vor fi redirecționate către cea nouă;
 nu uitați să verificați dacă nu există redirecționări [[Special:DoubleRedirects|duble]] sau [[Special:BrokenRedirects|invalide]].
 
 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 mutată''' dacă există deja o pagină cu noul titlu, în afară de cazul că este complet goală sau este
-o redirecționare și în plus nu are nici o istorie de modificare.
-Cu alte cuvinte, veți putea muta înapoi o pagină pe care ați mutat-o greșit, dar nu veți putea suprascrie o pagină validă existentă prin mutarea alteia.
+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.
+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!'''
 Aceasta poate fi o schimbare drastică și neașteptată pentru o pagină populară;
-vă rugăm, să vă asigurați că înțelegeți toate consecințele înainte de a continua.",
+vă rugăm să vă asigurați că înțelegeți toate consecințele înainte de a continua.",
 'movepagetext-noredirectfixer' => "Completând formularul de mai jos veți redenumi o pagină, mutând tot istoricul la noul nume.
 Vechiul titlu va deveni o pagină de redirecționare către noul titlu.
 Fiți sigur că ați verificat lista redirecționărilor [[Special:DoubleRedirects|duble]] sau [[Special:BrokenRedirects|nefuncționale]].
@@ -2790,43 +2788,42 @@ Acest lucru înseamnă că veți putea redenumi la titlul inițial o pagină gre
 '''Atenție!'''
 Această acțiune poate determina o schimbare dramatică, neașteptată pentru o pagină cu trafic crescut;
 asigurați-vă că înțelegeți toate consecințele înainte de a continua.",
-'movepagetalktext' => "Pagina asociată de discuții, dacă există, va fi mutată
-automat odată cu aceasta '''afară de cazul că''':
-* Mutați pagina în altă secțiune a {{SITENAME}}
-* Există deja o pagină de discuții cu conținut (care nu este goală), sau
-* Nu confirmi căsuța de mai jos.
-
-În oricare din cazurile de mai sus va trebui să muți sau să unifici
-manual paginile de discuții, dacă dorești acest lucru.",
+'movepagetalktext' => "Pagina de discuții asociată, dacă există, va fi redenumită
+automat odată cu aceasta în '''afara următoarelor cazuri''':
+* există deja o pagină de discuții cu conținut (care nu este goală) sub noul nume, sau
+* nu bifați căsuța de mai jos.
+
+În oricare din cazurile de mai sus va trebui să redenumiți sau să unificați
+manual paginile de discuții, dacă doriți acest lucru.",
 'movearticle' => 'Pagina de redenumit:',
 'moveuserpage-warning' => "'''Atenție''': sunteți pe cale să redenumiți o pagină de utilizator. Vă rugăm să rețineți că singura redenumită va fi pagina, nu și utilizatorul.",
 'movenologin' => 'Nu sunteți autentificat{{GENDER:||ă}}.',
-'movenologintext' => 'Trebuie să fii un utilizator înregistrat și să te [[Special:UserLogin|autentifici]] pentru a muta o pagină.',
-'movenotallowed' => 'Nu ai permisiunea să muți pagini.',
-'movenotallowedfile' => 'Nu ai permisiunea de a muta fișiere.',
-'cant-move-user-page' => 'Nu ai permisiunea de a muta paginile utilizatorului (în afară de subpagini).',
-'cant-move-to-user-page' => 'Nu aveți permisiunea de a muta o pagină în pagina utilizatorului (cu excepția subpaginii utilizatorului).',
+'movenologintext' => 'Trebuie să fiți un utilizator înregistrat și [[Special:UserLogin|autentificat]] pentru a redenumi o pagină.',
+'movenotallowed' => 'Nu aveți permisiunea de a redenumi pagini.',
+'movenotallowedfile' => 'Nu aveți permisiunea de a redenumi fișiere.',
+'cant-move-user-page' => 'Nu aveți permisiunea de a redenumi pagini de utilizator (cu excepția subpaginilor).',
+'cant-move-to-user-page' => 'Nu aveți permisiunea de a redenumi o pagină într-o pagină de utilizator (cu excepția subpaginii utilizatorului).',
 'newtitle' => 'Titlul nou',
 'move-watch' => 'Urmărește această pagină',
-'movepagebtn' => 'Mută pagina',
-'pagemovedsub' => 'Pagina a fost mutată',
-'movepage-moved' => "'''Pagina „$1” a fost mutată la „$2”'''",
+'movepagebtn' => 'Redenumește pagina',
+'pagemovedsub' => 'Pagina a fost redenumită',
+'movepage-moved' => "'''Pagina „$1” a fost redenumită în „$2”'''",
 'movepage-moved-redirect' => 'O redirecționare a fost creată.',
 'movepage-moved-noredirect' => 'Crearea redirecționărilor a fost suprimată.',
 'articleexists' => 'O pagină cu același nume există deja, sau numele pe care l-ați ales este invalid. Sunteți rugat să alegeți un alt nume.',
-'cantmove-titleprotected' => 'Nu puteți muta o pagină la această locație, pentru că noul titlu a fost protejat la creare',
-'talkexists' => "'''Pagina în sine a fost mutată cu succes, dar pagina de discuții nu a putut fi mutată deoarece o alta deja există la noul titlu.
-Te rugăm să le unifici manual.'''",
-'movedto' => 'mutată la',
+'cantmove-titleprotected' => 'Nu puteți redenumi o pagină cu acest nume, pentru că noul titlu a fost protejat la creare.',
+'talkexists' => "'''Pagina în sine a fost redenumită cu succes, dar pagina de discuții nu a putut fi redenumită deoarece o alta deja există la noul titlu.
+Vă rugăm să le unificați manual.'''",
+'movedto' => 'redenumită în',
 'movetalk' => 'Redenumește pagina de discuții asociată',
-'move-subpages' => 'Mută subpaginile (până la $1)',
-'move-talk-subpages' => 'Mută subpaginile paginii de discuții (până la $1)',
+'move-subpages' => 'Redenumește subpaginile (până la $1)',
+'move-talk-subpages' => 'Redenumește subpaginile paginii de discuții (până la $1)',
 'movepage-page-exists' => 'Pagina $1 există deja și nu poate fi rescrisă automat.',
-'movepage-page-moved' => 'Pagina $1 a fost mutată la $2.',
-'movepage-page-unmoved' => 'Pagina $1 nu a putut fi mutată la $2.',
-'movepage-max-pages' => 'Maxim $1 {{PLURAL:$1|pagină a fost mutată|pagini au fost mutate}}, nicio altă pagină nu va mai fi mutată automat.',
-'movelogpage' => 'Jurnal mutări',
-'movelogpagetext' => 'Mai jos se află o listă cu paginile mutate.',
+'movepage-page-moved' => 'Pagina $1 a fost redenumită în $2.',
+'movepage-page-unmoved' => 'Pagina $1 nu a putut fi redenumită în $2.',
+'movepage-max-pages' => 'Maximul de $1 {{PLURAL:$1|pagină redenumită|pagini redenumite|de pagini redenumite}} a fost atins și nici o altă pagină nu va mai fi redenumită automat.',
+'movelogpage' => 'Jurnal redenumiri',
+'movelogpagetext' => 'Mai jos se află o listă cu paginile redenumite.',
 'movesubpage' => '{{PLURAL:$1|Subpagină|Subpagini}}',
 'movesubpagetext' => 'Această pagină are $1 {{PLURAL:$1|subpagină afișată|subpagini afișate}} mai jos.',
 'movenosubpage' => 'Această pagină nu are subpagini.',
@@ -2838,12 +2835,12 @@ Te rugăm să le unifici manual.'''",
 Pagina destinație „[[:$1]]” există deja. Doriți să o ștergeți pentru a face loc redenumirii?',
 'delete_and_move_confirm' => 'Da, șterge pagina.',
 'delete_and_move_reason' => 'Șters pentru a face loc redenumirii paginii „[[$1]]”',
-'selfmove' => 'Titlurile sursei și ale destinației sunt aceleași; nu puteți muta o pagină peste ea însăși.',
+'selfmove' => 'Titlul sursei și al destinației este aceleași; nu puteți redenumi o pagină peste ea însăși.',
 'immobile-source-namespace' => 'Nu se pot redenumi paginile din spațiul de nume „$1”',
 'immobile-target-namespace' => 'Nu se pot redenumi paginile în spațiul de nume „$1”',
 'immobile-target-namespace-iw' => 'Legătura interwiki nu este o țintă validă pentru redenumire.',
-'immobile-source-page' => 'Această pagină nu poate fi mutată.',
-'immobile-target-page' => 'Nu poate fi mutat la destinația cu acest titlu.',
+'immobile-source-page' => 'Această pagină nu poate fi redenumită.',
+'immobile-target-page' => 'Imposibil de redenumit pagina la acel titlu.',
 'imagenocrossnamespace' => 'Fișierul nu poate fi mutat la un spațiu de nume care nu este destinat fișierelor',
 'nonfile-cannot-move-to-file' => 'Entitatea (care nu este un fișier) nu poate fi mutată în spațiul de nume destinat fișierelor',
 'imagetypemismatch' => 'Extensia nouă a fișierului nu se potrivește cu tipul acestuia',
@@ -2860,7 +2857,7 @@ Ultima intrare în jurnal este afișată mai jos pentru referință:",
 Alegeți un alt nume.',
 
 # Export
-'export' => 'Exportare de pagini',
+'export' => 'Exportare pagini',
 'exporttext' => 'Puteți exporta textul și istoricul unei pagini anume sau ale unui grup de pagini în XML.
 Acesta poate fi apoi importate în alt wiki care rulează software MediaWiki prin [[Special:Import|pagina de importare]].
 
@@ -2912,7 +2909,7 @@ Vă rugăm să vizitați [//www.mediawiki.org/wiki/Localisation MediaWiki Locali
 'thumbnail_image-missing' => 'Fișierul următor nu poate fi găsit: $1',
 
 # Special:Import
-'import' => 'Importă pagini',
+'import' => 'Importare pagini',
 'importinterwiki' => 'Import transwiki',
 'import-interwiki-text' => 'Selectează un wiki și titlul paginii care trebuie importate. Datele reviziilor și numele editorilor vor fi salvate. Toate acțiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]',
 'import-interwiki-source' => 'Wiki/pagină sursă:',
@@ -2970,7 +2967,6 @@ Un dosar temporar lipsește.',
 
 # JavaScriptTest
 'javascripttest' => 'Testare JavaScript',
-'javascripttest-disabled' => 'Această funcție nu a fost activată pe acest wiki.',
 'javascripttest-title' => 'Rulare teste pentru $1',
 'javascripttest-pagetext-noframework' => 'Această pagină este rezervată rulării testelor JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Cadru de testare „$1” necunoscut.',
@@ -3112,10 +3108,10 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-authors' => 'Număr total de autori distincți',
 'pageinfo-recent-edits' => 'Număr de modificări recente (în ultima perioadă de $1)',
 'pageinfo-recent-authors' => 'Număr de autori distincți recenți',
-'pageinfo-restriction' => 'Protecție pagină (<code>$1</code>)',
 '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-toolboxlink' => 'Informații despre pagină',
 
 # Skin names
 'skinname-standard' => 'Clasic',
@@ -3695,6 +3691,7 @@ Acest cod de confirmare va expira la $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Transcluderea interwiki este dezactivată]',
 'scarytranscludefailed' => '[Șiretlicul formatului a dat greș pentru $1]',
+'scarytranscludefailed-httpstatus' => '[Șiretlicul formatului a dat greș pentru $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL-ul este prea lung]',
 
 # Delete conflict
@@ -3965,6 +3962,10 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'feedback-bugcheck' => 'Minunat! Trebuie doar să verificați dacă nu cumva problema a fost [$1 deja înregistrată].',
 'feedback-bugnew' => 'Am verificat. O raportez drept o problemă nouă',
 
+# Search suggestions
+'searchsuggest-search' => 'Căutare',
+'searchsuggest-containing' => 'conținând...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nu aveți dreptul să încărcați fișiere pe acest wiki.',
 'api-error-badtoken' => 'Eroare internă: jeton greșit.',
index 78dc240..b26a477 100644 (file)
@@ -416,7 +416,8 @@ Pe piacere prueve cchiù tarde.",
 'protectedpagetext' => 'Sta pàgene ha state prutette pe no fa fà cangiaminde 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 te dè l'inderfacce de teste pìu software e jè blocchete pe prevenì l'abbuse.",
+'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.",
@@ -445,7 +446,7 @@ L\'amministratore ca l\'ha bloccate dèje sta spiegazione: "$3".',
 # Login and logout pages
 'logouttext' => "'''Tu tè scolleghete.'''
 
-Tu puè condinuà a ausà {{SITENAME}} in mode anonime, o tu puè [[Special:UserLogin|collegarte 'n'otra vote]] cumme 'u stesse utende o cumme 'n'otre utende.
+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.
@@ -986,7 +987,9 @@ Pe piacere condrolle l'archivije.",
 'revdelete-only-restricted' => "Errore scunnènne l'artichele datate $2, $1: tu non ge puè sopprimere l'artichele da 'a viste de le amministrature senze ca scacchie pure une de le otre opziune de soppressione.",
 'revdelete-reason-dropdown' => "*Mutive comune pa scangellazzione
 ** Violazione d'u copyright
-** 'Mbormaziune personale inappropriate",
+** 'Mbormaziune personale o commende inappropriate
+** Nome utende inappropriate
+** 'Mbormaziune potenzialmende diffamatorie",
 'revdelete-otherreason' => 'Otre/addizionale mutive:',
 'revdelete-reasonotherlist' => 'Otre mutive',
 'revdelete-edit-reasonlist' => "Mutive d'a scangellazione d'u cangiamende",
@@ -1086,8 +1089,6 @@ Le dettaglie le puè acchià jndr'à l'[{{fullurl:{{#Special:Log}}/delete|page={
 'search-interwiki-caption' => 'Pruggette sorelle',
 'search-interwiki-default' => '$1 resultete:',
 'search-interwiki-more' => '(de cchiù)',
-'search-mwsuggest-enabled' => 'cu le consiglie',
-'search-mwsuggest-disabled' => 'senza consiglie',
 'search-relatedarticle' => 'Colleghete',
 'mwsuggest-disable' => 'Disabbilete le conziglie in AJAX',
 'searcheverything-enable' => "Cirche jndr'à tutte le namespace",
@@ -1186,7 +1187,7 @@ Aqquà ste 'nu valore generate a uecchije ca tu puè ausà: $1",
 'timezoneregion-indian' => 'Oceano Indiane',
 'timezoneregion-pacific' => 'Oceano Pacifiche',
 'allowemail' => "Abbilite l'e-mail da l'otre utinde",
-'prefs-searchoptions' => 'Opzione de ricerche',
+'prefs-searchoptions' => 'Cirche',
 'prefs-namespaces' => 'Namespaces',
 'defaultns' => "Cirche jndr'à chiste namespace:",
 'default' => 'defolt',
@@ -1625,7 +1626,7 @@ Ce 'u probbleme angore jè presende, condatte 'n'[[Special:ListUsers/sysop|ammin
 'backend-fail-internal' => "'N'errore scanusciute s'à verificate jndr'à l'archivije de rrete \"\$1\".",
 'backend-fail-contenttype' => 'Non ge pozze capìe \'u tipe de condenute d\'u file da reggistrà sus a "$1".',
 'backend-fail-batchsize' => "L'archivije de rrete ha date 'nu processe de $1 {{PLURAL:$1|operazione|operaziune}} sus a le file; 'u limite jè $2 {{PLURAL:$2|operazione|operaziune}}.",
-'backend-fail-usable' => 'Non ge pozze scrivere \'u file "$1" purcé mangane le permesse sufficiende o non g\'esiste \'a cartelle/contenitore.',
+'backend-fail-usable' => 'Non ge pozze leggere o scrivere \'u file "$1" purcé mangane le permesse sufficiende o non g\'esiste \'a cartelle/condenitore.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Non ge pozze collegà a l\'archivije d\'u database pe memorizzà \'u rrete "$1".',
@@ -1762,6 +1763,7 @@ Pò essere ca tu vuè cangià 'a descrizione de jidde [$2 pàgene de descrizione
 'shared-repo' => "'nu condenitore de cose condivise",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => "/* 'U CSS ca se iacchie aqquà jè ingluse sus 'a pàgene de descrizione d'u file, pure ingluse pe le client de le Uicchi furastire */",
+'upload-disallowed-here' => "Sfortunatamende non ge puè sovrascrivere st'immaggine.",
 
 # File reversion
 'filerevert' => "'Nvirte $1",
@@ -2711,6 +2713,7 @@ Tutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[S
 'import-interwiki-templates' => 'Inglude tutte le template',
 'import-interwiki-submit' => "'Mborte",
 'import-interwiki-namespace' => 'Namespace de destinazione:',
+'import-interwiki-rootpage' => 'Pàgena prengepàale de destinazione (opzionale):',
 'import-upload-filename' => "Nome d'u file:",
 'import-comment' => 'Commende:',
 'importtext' => "Pe piacere esporte 'u file da 'a Uicchi sorgende ausanne l'[[Special:Export|utilità de esportazione]].
@@ -2747,6 +2750,8 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 '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-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.',
 
 # Import log
 'importlogpage' => "Archivie de le 'mbortaziune",
@@ -2758,7 +2763,6 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 
 # JavaScriptTest
 'javascripttest' => 'Test de JavaScript',
-'javascripttest-disabled' => "Sta funzione non g'à state abbilitate sus a sta Uicchi.",
 'javascripttest-title' => 'Stoche a esegue $1 test',
 'javascripttest-pagetext-noframework' => 'Sta pàgene jè riservate pe le esecuziune de le test de Javascript.',
 'javascripttest-pagetext-unknownframework' => 'Ambiende de teste scanusciute "$1".',
@@ -2900,17 +2904,34 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 
 # Info page
 'pageinfo-title' => '\'Mbormaziune pe "$1"',
+'pageinfo-header-basic' => "'Mbormaziune 'nderra-'nderre",
 'pageinfo-header-edits' => 'Cunde de le cangiaminde',
+'pageinfo-header-restrictions' => "Protezione d'a pàgene",
+'pageinfo-header-properties' => "Probbietà d'a pàgene",
+'pageinfo-display-title' => "Fà vedè 'u titole",
+'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-robot-policy' => "State d'u motore de ricerche",
 'pageinfo-robot-index' => 'Indicizzabbele',
 'pageinfo-robot-noindex' => 'None indicizzabbele',
 'pageinfo-views' => 'Numere de visite',
 'pageinfo-watchers' => "Numere de visitature d'a pàgene",
 'pageinfo-redirects-name' => 'Redirezionaminde a sta pàgene',
 'pageinfo-redirects-value' => '$1',
+'pageinfo-subpages-name' => 'Sottopàggene de sta pàgene',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ridirezionate|ridirezionate}}; $3 {{PLURAL:$3|none ridirezionate|none ridirezionate}})',
 'pageinfo-firstuser' => "Ccrejatore d'a pàgene",
+'pageinfo-firsttime' => "Date d'a ccrejazione d'a pàgene",
+'pageinfo-lastuser' => 'Urteme cangiatore',
+'pageinfo-lasttime' => "Darte de l'urteme cangiamende",
 'pageinfo-edits' => 'Numere totale de cangiaminde',
 'pageinfo-authors' => 'Numere Totale de autore diverse',
+'pageinfo-recent-edits' => "Numere de le urteme cangiaminde ('mbonde a $1)",
+'pageinfo-recent-authors' => 'Numere de le urteme autore diverse',
+'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)',
 
 # Skin names
 'skinname-standard' => 'Classeche',
@@ -2966,6 +2987,7 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'file-info-size-pages' => "$1 × $2 pixel, dimenzione d'u file: $3, tipe de MIME: $4, $5 {{PLURAL:$5|pàgene|pàggene}}",
 '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",
 '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.',
@@ -2975,6 +2997,8 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'file-info-png-looped' => 'infinite',
 'file-info-png-repeat' => 'eseguite $1 {{PLURAL:$1|vote|vote}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frame}}',
+'file-no-thumb-animation' => "'''Vide bbuène: Pe limitaziune tecniche, miniature de ste file non ge ponne essere animate.'''",
+'file-no-thumb-animation-gif' => "'''Vide bbuène: Pe limitaziune tecniche, miniature de resoluzione ierte de immaggine GIF cumme a queste non ge ponne essere animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallerie de le fail nuève',
@@ -3961,6 +3985,10 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'feedback-bugcheck' => "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
 'feedback-bugnew' => "Agghie verificate. Manne 'nu bug nuève",
 
+# Search suggestions
+'searchsuggest-search' => 'Cirche',
+'searchsuggest-containing' => 'tène...',
+
 # API errors
 'api-error-badaccess-groups' => 'Tu non ge puè carecà file sus a sta Uicchi.',
 'api-error-badtoken' => 'Errore inderne: Gettone errate.',
index e73b8c2..0e4a24a 100644 (file)
@@ -28,6 +28,7 @@
  * @author Dim Grits
  * @author Don Alessandro
  * @author Eleferen
+ * @author Erdemaslancan
  * @author EugeneZelenko
  * @author Eugrus
  * @author Express2000
@@ -59,6 +60,7 @@
  * @author Rave
  * @author Rubin
  * @author Sagan
+ * @author Shirayuki
  * @author Sk
  * @author TarzanASG
  * @author Temuri rajavi
@@ -189,154 +191,154 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'ЗАЩПОДСТ:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'справа', 'right' ),
-       'img_left'                => array( '1', 'слева', 'left' ),
-       'img_none'                => array( '1', 'без', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'центр', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'обрамить', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'безрамки', 'frameless' ),
-       'img_page'                => array( '1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'граница', 'border' ),
-       'img_baseline'            => array( '1', 'основание', 'baseline' ),
-       'img_sub'                 => array( '1', 'под', 'sub' ),
-       'img_super'               => array( '1', 'над', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'сверху', 'top' ),
-       'img_text_top'            => array( '1', 'текст-сверху', 'text-top' ),
-       'img_middle'              => array( '1', 'посередине', 'middle' ),
-       'img_bottom'              => array( '1', 'снизу', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'текст-снизу', 'text-bottom' ),
-       'img_link'                => array( '1', 'ссылка=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'альт=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ВНУТР:', 'INT:' ),
-       'sitename'                => array( '1', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ПИ:', 'NS:' ),
-       'nse'                     => array( '0', 'ПИК:', 'NSE:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ПУТЬ_К_СТАТЬЕ', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'ПАДЕЖ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ИД_ВЕРСИИ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'МЕСЯЦ_ВЕРСИИ_1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
-       'uc'                      => array( '0', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
-       'raw'                     => array( '0', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Н', 'R' ),
-       'newsectionlink'          => array( '1', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
-       'padright'                => array( '0', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
-       'special'                 => array( '0', 'служебная', 'special' ),
-       'defaultsort'             => array( '1', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'метка', 'тег', 'тэг', 'tag' ),
-       'hiddencat'               => array( '1', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ИНДЕКС__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'форматдаты', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ПУТЬ', 'PATH' ),
-       'url_wiki'                => array( '0', 'ВИКИ', 'WIKI' ),
-       'url_query'               => array( '0', 'ЗАПРОС', 'QUERY' ),
+       'redirect'                  => array( '0', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'ЗАЩПОДСТ:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'без', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'центр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'обрамить', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безрамки', 'frameless' ),
+       'img_page'                  => array( '1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'граница', 'border' ),
+       'img_baseline'              => array( '1', 'основание', 'baseline' ),
+       'img_sub'                   => array( '1', 'под', 'sub' ),
+       'img_super'                 => array( '1', 'над', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'сверху', 'top' ),
+       'img_text_top'              => array( '1', 'текст-сверху', 'text-top' ),
+       'img_middle'                => array( '1', 'посередине', 'middle' ),
+       'img_bottom'                => array( '1', 'снизу', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'текст-снизу', 'text-bottom' ),
+       'img_link'                  => array( '1', 'ссылка=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'альт=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ВНУТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ПИ:', 'NS:' ),
+       'nse'                       => array( '0', 'ПИК:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ПУТЬ_К_СТАТЬЕ', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'ПАДЕЖ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ИД_ВЕРСИИ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МЕСЯЦ_ВЕРСИИ_1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ВЕРСИЯ_УЧАСТНИКА', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
+       'uc'                        => array( '0', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
+       'raw'                       => array( '0', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Н', 'R' ),
+       'newsectionlink'            => array( '1', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
+       'special'                   => array( '0', 'служебная', 'special' ),
+       'defaultsort'               => array( '1', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'метка', 'тег', 'тэг', 'tag' ),
+       'hiddencat'                 => array( '1', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ИНДЕКС__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'форматдаты', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ПУТЬ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
+       'url_query'                 => array( '0', 'ЗАПРОС', 'QUERY' ),
 );
 
 
@@ -772,10 +774,11 @@ $1',
 'protectedpagetext' => 'Эта страница закрыта для редактирования.',
 'viewsourcetext' => 'Вы можете просмотреть и скопировать исходный текст этой страницы:',
 'viewyourtext' => "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
-'protectedinterface' => 'Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.',
+'protectedinterface' => 'Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.
+Чтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]',
 'editinginterface' => "'''Внимание:''' Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.
-Её изменение повлияет на внешний вид интерфейса для других пользователей.
\94лÑ\8f Ð¿ÐµÑ\80еводов Ð»Ñ\83Ñ\87Ñ\88е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c [//translatewiki.net/wiki/Main_Page?setlang=ru translatewiki.net], Ð¿Ñ\80оекÑ\82 Ð¿Ð¾ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86ии MediaWiki.",
+Её изменение повлияет на внешний вид интерфейса для других пользователей этой вики.
§Ñ\82обÑ\8b Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ\82Ñ\8c Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ\82Ñ\8c Ð¿ÐµÑ\80евод Ñ\8dÑ\82ого Ñ\81ообÑ\89ениÑ\8f, Ð¿Ð¾Ð¶Ð°Ð»Ñ\83йÑ\81Ñ\82а, Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\81айÑ\82 Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86ии MediaWiki [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL запрос скрыт)',
 'cascadeprotected' => 'Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:
 $2',
@@ -801,7 +804,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Вы завершили сеанс работы.'''
 
-Вы можете продолжить участие в {{grammar:genitive|{{SITENAME}}}} анонимно или [[Special:UserLogin|представиться заново]] под тем же или другим именем.
+Вы можете продолжить участие в {{grammar:genitive|{{SITENAME}}}} анонимно или <span class='plainlinks'>[$1 представиться заново]</span> под тем же или другим именем.
 Некоторые страницы могут продолжать отображаться в том виде, как будто вы всё ещё представлены системе. Для борьбы с этим явлением обновите кеш браузера.",
 'welcomecreation' => '== Добро пожаловать, $1! ==
 Ваша учётная запись создана.
@@ -970,7 +973,7 @@ $2
 'changeemail-oldemail' => 'Текущий адрес электронной почты:',
 'changeemail-newemail' => 'Новый адрес электронной почты:',
 'changeemail-none' => '(нет)',
-'changeemail-submit' => 'Ð\98зменениÑ\82Ñ\8c Ð°Ð´Ñ\80еÑ\81',
+'changeemail-submit' => 'Изменить адрес',
 'changeemail-cancel' => 'Отмена',
 
 # Edit page toolbar
@@ -1066,8 +1069,8 @@ $2
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],
 или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
 'noarticletext-nopermission' => 'В настоящее время на этой странице нет текста.
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð² Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82аÑ\82Ñ\8cÑ\8fх,
-или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span>',
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð½Ð° Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86ах,
+или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span> У вас нет разрешения создать данную страницу.',
 'missing-revision' => 'Версия $1 страницы «{{PAGENAME}}» не существует.
 
 Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
@@ -1332,9 +1335,10 @@ $1",
 'revdelete-concurrent-change' => 'Ошибка изменения записи от $2, $1: её статус был изменён кем-то другим, пока вы пытались изменить его.
 Пожалуйста, проверьте журналы.',
 'revdelete-only-restricted' => 'Ошибка сокрытия записи от $2 $1: вы не можете скрыть запись от просмотра администраторами без выбора одной из других настроек сокрытия.',
-'revdelete-reason-dropdown' => 'Стандартные причины удаления
+'revdelete-reason-dropdown' => 'Стандартные причины удаления
 ** Нарушение авторских прав
-** Неуместные личные сведения',
+** Неуместные личные сведения
+** Потенциально клеветнические сведения',
 'revdelete-otherreason' => 'Другая/дополнительная причина:',
 'revdelete-reasonotherlist' => 'Другая причина',
 'revdelete-edit-reasonlist' => 'Править список причин',
@@ -1431,8 +1435,6 @@ $1",
 'search-interwiki-caption' => 'Родственные проекты',
 'search-interwiki-default' => '$1 результ.:',
 'search-interwiki-more' => '(ещё)',
-'search-mwsuggest-enabled' => 'с советами',
-'search-mwsuggest-disabled' => 'без советов',
 'search-relatedarticle' => 'Связанный',
 'mwsuggest-disable' => 'Отключить AJAX-подсказки',
 'searcheverything-enable' => 'Поиск по всем пространствам имён',
@@ -1528,7 +1530,7 @@ $1",
 'timezoneregion-indian' => 'Индийский океан',
 'timezoneregion-pacific' => 'Тихий океан',
 'allowemail' => 'Разрешить приём электронной почты от других участников',
-'prefs-searchoptions' => 'Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð¿Ð¾Ð¸Ñ\81ка',
+'prefs-searchoptions' => 'Ð\9fоиÑ\81к',
 'prefs-namespaces' => 'Пространства имён',
 'defaultns' => 'Иначе искать в следующих пространствах имён:',
 'default' => 'по умолчанию',
@@ -1954,7 +1956,7 @@ $1',
 'backend-fail-internal' => 'Произошла неизвестная ошибка в хранилище «$1».',
 'backend-fail-contenttype' => 'Не удалось определить тип содержимого файла, чтобы сохранить его в «$1».',
 'backend-fail-batchsize' => 'Хранилище получило блок из $1 {{PLURAL:$1|файловой операции|файловых операций|файловых операций}}, ограничение составляет $2 {{PLURAL:$1|операцию|операции|файловых операций}}.',
-'backend-fail-usable' => 'Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\84айл $1 из-за нехватки прав или отсутствия нужных папок.',
+'backend-fail-usable' => 'Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¿Ñ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\84айл Â«$1» из-за нехватки прав или отсутствия нужных папок.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не удалось подключиться к базе данных журнала для хранилища «$1».',
@@ -3059,7 +3061,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Проверка JavaScript',
-'javascripttest-disabled' => 'Эта функция отключена в этой вики.',
 'javascripttest-title' => 'Проводится проверка $1',
 'javascripttest-pagetext-noframework' => 'Эта страница зарезервирована для запуска JavaScript-тестов.',
 'javascripttest-pagetext-unknownframework' => 'Неизвестная среда тестирования «$1».',
@@ -3214,6 +3215,7 @@ The wiki server can't provide data in a format your client can read.",
 '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' => 'Создатель страницы',
@@ -3224,7 +3226,6 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-authors' => 'Общее число различных авторов',
 'pageinfo-recent-edits' => 'Правок за последнее время (в течение $1)',
 'pageinfo-recent-authors' => 'Уникальных авторов за последнее время',
-'pageinfo-restriction' => 'Защита страницы (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Магическое слово|Магические слова}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
@@ -4170,6 +4171,10 @@ MediaWiki распространяется в надежде, что она бу
 'feedback-bugcheck' => 'Прекрасно! Только проверьте, что в списке [$1 известных ошибок] её нет подобной записи.',
 'feedback-bugnew' => 'Я проверил. Сообщить о новой ошибке',
 
+# Search suggestions
+'searchsuggest-search' => 'Поиск',
+'searchsuggest-containing' => 'содержащие…',
+
 # API errors
 'api-error-badaccess-groups' => 'Вам не разрешено загружать файлы в эту вики.',
 'api-error-badtoken' => 'Внутренняя ошибка:  некорректный токен.',
index 806b3f8..2f6168c 100644 (file)
@@ -43,9 +43,83 @@ $namespaceAliases = array(
        'Дізкузія_ку_MediaWiki'   => NS_MEDIAWIKI_TALK,
 );
 
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Актівны_хоснователї' ),
+       'Allmessages'               => array( 'Сістемовы_повідомлїня' ),
+       'Allpages'                  => array( 'Вшыткы_сторінкы' ),
+       'Ancientpages'              => array( 'Давны_сторінкы' ),
+       'Badtitle'                  => array( 'Планый_тітул' ),
+       'Blankpage'                 => array( 'Порожня_сторінка' ),
+       'Block'                     => array( 'Заблоковати' ),
+       'Blockme'                   => array( 'Заблокуйте_ня' ),
+       'Booksources'               => array( 'Жрідла_книг' ),
+       'BrokenRedirects'           => array( 'Розорваны_напрямлїня' ),
+       'Categories'                => array( 'Катеґорії' ),
+       'ChangeEmail'               => array( 'Змінити_імейл' ),
+       'ChangePassword'            => array( 'Змінити_гесло' ),
+       'ComparePages'              => array( 'Порівнаня_сторінок' ),
+       'Confirmemail'              => array( 'Потвердити_імейл' ),
+       'Contributions'             => array( 'Вклад' ),
+       'CreateAccount'             => array( 'Створити_конто' ),
+       'Deadendpages'              => array( 'Сторінкы_без_одказів' ),
+       'DeletedContributions'      => array( 'Вымазаный_вклад' ),
+       'Disambiguations'           => array( 'Неєднозначны_одказы' ),
+       'DoubleRedirects'           => array( 'Подвійны_напрямлїня' ),
+       'EditWatchlist'             => array( 'Правити_список_мерькованя' ),
+       'Emailuser'                 => array( 'Писмо_хоснователёви' ),
+       'Export'                    => array( 'Експорт' ),
+       'Fewestrevisions'           => array( 'Найменшы_перевіркы' ),
+       'FileDuplicateSearch'       => array( 'Гляданя_дуплікатів_файлів' ),
+       'Filepath'                  => array( 'Стежка_до_файлу' ),
+       'Import'                    => array( 'Імпорт' ),
+       'Invalidateemail'           => array( 'Знеплатнити_імейл' ),
+       'BlockList'                 => array( 'Список_блоковань' ),
+       'LinkSearch'                => array( 'Гляданя_одказів' ),
+       'Listadmins'                => array( 'Список_адміністраторів' ),
+       'Listbots'                  => array( 'Список_ботів' ),
+       'Listfiles'                 => array( 'Список_файлів' ),
+       'Listgrouprights'           => array( 'Список_прав_ґруп' ),
+       'Listredirects'             => array( 'Список_напрямлїнь' ),
+       'Listusers'                 => array( 'Список_хоснователїв' ),
+       'Lockdb'                    => array( 'Заблоковати_датабазу' ),
+       'Log'                       => array( 'Журналы' ),
+       'Lonelypages'               => array( 'Ізолованы_сторінкы' ),
+       'Longpages'                 => array( 'Найдовшы_сторінкы' ),
+       'MergeHistory'              => array( 'Зєдинїня_історії' ),
+       'MIMEsearch'                => array( 'Гляданя_MIME' ),
+       'Mostcategories'            => array( 'Найкатеґорізованїшы' ),
+       'Mostimages'                => array( 'Найбівше_хоснованы_файлы' ),
+       'Mostlinkedcategories'      => array( 'Найвжыванїшы_катеґорії' ),
+       'Mostlinkedtemplates'       => array( 'Найвжыванїшы_шаблоны' ),
+       'Mostrevisions'             => array( 'Найбівше_ревізій' ),
+       'Movepage'                  => array( 'Переменовати' ),
+       'Mycontributions'           => array( 'Мій_вклад' ),
+       'Mypage'                    => array( 'Моя_сторінка' ),
+       'Mytalk'                    => array( 'Моя_діскузія' ),
+       'Myuploads'                 => array( 'Мої_награня_файлів' ),
+       'Newimages'                 => array( 'Новы_файлы' ),
+       'Newpages'                  => array( 'Новы_сторінкы' ),
+       'PasswordReset'             => array( 'Ресет_гесла' ),
+       'PermanentLink'             => array( 'Тырвалый_одказ' ),
+       'Popularpages'              => array( 'Популарны_сторінкы' ),
+       'Preferences'               => array( 'Наставлїня' ),
+       'Randompage'                => array( 'Нагодна_статя' ),
+       'Randomredirect'            => array( 'Нагодне_напрямлїня' ),
+       'Recentchanges'             => array( 'Послїднї_зміны' ),
+       'Recentchangeslinked'       => array( 'Повязаны_едітованя' ),
+       'Search'                    => array( 'Гляданя' ),
+       'Shortpages'                => array( 'Курты_сторінкы' ),
+       'Specialpages'              => array( 'Шпеціялны_сторінкы' ),
+       'Statistics'                => array( 'Штатістіка' ),
+       'Tags'                      => array( 'Позначкы' ),
+       'Unblock'                   => array( 'Одблоковати' ),
+       'Uncategorizedcategories'   => array( 'Некатеґорізованы_катеґорії' ),
+       'Uncategorizedimages'       => array( 'Некатеґорізованы_файлы' ),
+);
+
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Підчарковати одказы:',
+'tog-underline' => 'Підкреслёвати одказы:',
 'tog-justify' => 'Зарівнати текст до блоку',
 'tog-hideminor' => 'Сховати малы едітованя в списку послїднїх змін',
 'tog-hidepatrolled' => 'Сховати патролёваны едітованя в списку послїднїх змін',
@@ -58,8 +132,8 @@ $messages = array(
 'tog-editsection' => 'Дозволити едітованя секції сторінкы через одказ [едіт.]',
 'tog-editsectiononrightclick' => 'Дозволити едітованя секції сторінкы через кликаня правов клапков мышкы на надписы сторінок  (JavaScript)',
 'tog-showtoc' => 'Вказовати обсяг (на сторінках з веце як трёма надписами)',
-'tog-rememberpassword' => 'Запамятати моє приголошіня на тім переглядачу (максімално $1 {{PLURAL:$1|день|днів}})',
-'tog-watchcreations' => 'Ð\9fÑ\80идаваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ñ\81Ñ\82воÑ\80енÑ\8b Ð¼Ð½Ð¾Ð² Ñ\82ай Ñ\84айлÑ\8b Ð¼Ð½Ð¾Ð² Ð·аладованы до мого списку слїдованых',
+'tog-rememberpassword' => 'Запамнятати моє приголошіня на тім переглядачу (максімално $1 {{PLURAL:$1|день|днів}})',
+'tog-watchcreations' => 'Ð\9fÑ\80идаваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b Ñ\81Ñ\82воÑ\80енÑ\8b Ð¼Ð½Ð¾Ð² Ñ\82ай Ñ\84айлÑ\8b Ð¼Ð½Ð¾Ð² Ð½аладованы до мого списку слїдованых',
 'tog-watchdefault' => 'Придавати мнов едітованы сторінкы і файлы до списку слїдованых',
 'tog-watchmoves' => 'Придавати переменованы сторінкы і файлы до мого списку слїдованых',
 'tog-watchdeletion' => 'Придавати сторінкы і файлы, котры змажу, міджі слїдованы',
@@ -72,7 +146,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Послати електронічну пошту і про меншы едітованя сторінок і файлів',
 'tog-enotifrevealaddr' => 'Прозрадити мою поштову адресу в поштї  увідомлїня',
 'tog-shownumberswatching' => 'Вказати кілько хоснователїв придало сторінку до свого списку слїдованых',
-'tog-oldsig' => 'Ð\95кзÑ\96Ñ\81Ñ\82уючій підпис:',
+'tog-oldsig' => 'Ð\86Ñ\81нуючій підпис:',
 'tog-fancysig' => 'Хосновати про підпис вікітекст (без автоматічного одказу)',
 'tog-externaleditor' => 'Імпліцітно хосновати екстерный едітор (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
 'tog-externaldiff' => 'Імпліцітно хосновати проґрам про порівнаваня (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
@@ -82,10 +156,10 @@ $messages = array(
 'tog-watchlisthideown' => 'Сховати мої едітованя на списку слїдованых сторінок',
 'tog-watchlisthidebots' => 'Сховати едітованя ботів у списку слїдованых сторінок',
 'tog-watchlisthideminor' => 'Сховати малы едітованя зо списку слїдованых сторінок',
-'tog-watchlisthideliu' => 'У Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 приголошеных хоснователїв',
-'tog-watchlisthideanons' => 'У Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 анонімів',
-'tog-watchlisthidepatrolled' => 'СÑ\85оваÑ\82и Ð¿Ð°Ñ\82Ñ\80олÑ\91ванÑ\8b ÐµÐ´Ñ\96Ñ\82аÑ\86Ñ\96Ñ\97 Ñ\83 слїдованых сторінках',
-'tog-ccmeonemails' => 'Ð\9fоÑ\81Ñ\8bлаÑ\82и Ð¼Ñ\96 ÐºÐ¾Ð¿Ñ\96Ñ\97 Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð¿Ð¾Ñ\88лÑ\8e іншым хоснователям',
+'tog-watchlisthideliu' => 'Ð\92 Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82ованÑ\8f приголошеных хоснователїв',
+'tog-watchlisthideanons' => 'Ð\92 Ñ\81пиÑ\81кÑ\83 Ñ\81лÑ\97дованÑ\8bÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\81Ñ\85оваÑ\82и ÐµÐ´Ñ\96Ñ\82ованÑ\8f анонімів',
+'tog-watchlisthidepatrolled' => 'СÑ\85оваÑ\82и Ð¿Ð°Ñ\82Ñ\80олÑ\91ванÑ\8b ÐµÐ´Ñ\96Ñ\82ованÑ\8f Ð² слїдованых сторінках',
+'tog-ccmeonemails' => 'Ð\9fоÑ\81Ñ\8bлаÑ\82и Ð¼Ñ\96 ÐºÐ¾Ð¿Ñ\96Ñ\97 Ð¿Ð¾Ñ\88Ñ\82Ñ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\83 Ð·Ð°Ð¶ÐµÐ½Ñ\83 іншым хоснователям',
 'tog-diffonly' => 'Не вказовати обсяг сторінкы під роздїлом  верзій',
 'tog-showhiddencats' => 'Вказати схованы катеґорії',
 'tog-norollbackdiff' => 'По вернутю зміны не вказовати порівнаня роздїлів',
@@ -104,7 +178,7 @@ $messages = array(
 # Dates
 'sunday' => 'недїля',
 'monday' => 'понедїлёк',
-'tuesday' => 'віторок',
+'tuesday' => 'вівторок',
 'wednesday' => 'середа',
 'thursday' => 'четверь',
 'friday' => 'пятніця',
@@ -158,7 +232,7 @@ $messages = array(
 'category_header' => 'Сторінкы в катеґорії «$1»',
 'subcategories' => 'Підкатеґорії',
 'category-media-header' => 'Файлы в катеґорії «$1»',
-'category-empty' => "''ТоÑ\82а катеґорія порожня.''",
+'category-empty' => "''Ð\93евÑ\81Ñ\8f катеґорія порожня.''",
 'hidden-categories' => '{{PLURAL:$1|Скрыта катеґорія|Скрыты катеґорії}}',
 'hidden-category-category' => 'Схованы катеґорії',
 'category-subcat-count' => '{{PLURAL:$2|Тота катеґорія має лем таку підкатеґорію.|{{PLURAL:$1|Указана $1 підкатеґорія|Указаны $1 підкатеґорії|Указаных $1 підкатеґорій}} із $2.}}',
@@ -170,7 +244,7 @@ $messages = array(
 'listingcontinuesabbrev' => '(дале)',
 'index-category' => 'Індексованы сторінкы',
 'noindex-category' => 'Неіндексованы сторінкы',
-'broken-file-category' => 'Сторінкы, што ся одказують на неекзістуючі файлы',
+'broken-file-category' => 'Сторінкы, што ся одказують на неіснуючі файлы',
 
 'about' => 'О',
 'article' => 'Обсягова сторінка',
@@ -221,7 +295,7 @@ $messages = array(
 'searcharticle' => 'Перейти',
 'history' => 'Історія сторінкы',
 'history_short' => 'Історія',
-'updatedmarker' => 'змÑ\96нено Ð¾Ð´ Ð¿Ð¾Ñ\81лÑ\97днÑ\8bй навщівы',
+'updatedmarker' => 'обновлено Ð¾Ð´ Ð¿Ð¾Ñ\81лÑ\97днÑ\91й навщівы',
 'printableversion' => 'Верзія до друку',
 'permalink' => 'Перманентный одказ',
 'print' => 'Друк',
@@ -266,8 +340,8 @@ $messages = array(
 'jumpto' => 'Перейти до:',
 'jumptonavigation' => 'навіґація',
 'jumptosearch' => 'Найти',
-'view-pool-error' => 'Перебачте, серверы суть теперь перетяжены.
-Тоту сторінку сі теперь перезерать много хоснователїв.
+'view-pool-error' => 'Перебачте, серверы суть теперь переладованы.
+Тоту сторінку собі теперь пoзерать много хоснователїв.
 Просиме Вас, почекайте і спробуйте доступность пізнїше.
 
 $1',
@@ -296,8 +370,8 @@ $1',
 'privacypage' => 'Project:Сокочіня пріватных дан',
 
 'badaccess' => 'Брак прав приступу',
-'badaccess-group0' => 'Ð\92ам Ð½Ðµ Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð²Ñ\8bконавати тоту дїю.',
-'badaccess-groups' => 'Дїя, яку сьте хотїли зробити, дозволена лем хоснователям із {{PLURAL:$2|ґрупы|ґруп}}: $1.',
+'badaccess-group0' => 'Ð\92ам Ð½Ðµ Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð²Ñ\8bконовати тоту дїю.',
+'badaccess-groups' => 'Дїя, яку сьте хотїли зробити, дозволена лем хоснователям з {{PLURAL:$2|ґрупы|ґруп}}: $1.',
 
 'versionrequired' => 'Потрібна MediaWiki верзії $1',
 'versionrequiredtext' => 'Про роботу з тов сторінков потрібна MediaWiki верзії $1. Відь [[Special:Version|сторінку верзії]].',
@@ -309,9 +383,9 @@ $1',
 'newmessagesdifflink' => 'послїдня зміна',
 'youhavenewmessagesfromusers' => 'Мате $1 од {{PLURAL:$3|іншого хоснователя|$3 іншых хоснователїв}} ($2).',
 'youhavenewmessagesmanyusers' => 'Мате $1 од много далшых хоснователїв ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ное повідомлїня|новы повідомлїня}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нове Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8f|новÑ\8b Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8f}}',
 'newmessagesdifflinkplural' => 'остатня {{PLURAL:$1|зміна|зміны|змін}}',
-'youhavenewmessagesmulti' => 'Ð\9cаÑ\94Ñ\82е Ð½Ð¾Ð²Ñ\8b Ð¾Ð·Ð½Ð°Ð¼Ñ\8b на $1',
+'youhavenewmessagesmulti' => 'Ð\9cаÑ\94Ñ\82е Ð½Ð¾Ð²Ñ\8b Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8f на $1',
 'editsection' => 'едіт.',
 'editold' => 'едіт.',
 'viewsourceold' => 'видїти код',
@@ -365,9 +439,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»
@@ -395,7 +469,7 @@ $1',
 'filecopyerror' => 'Не было можне копіровати файл «$1» на «$2».',
 'filerenameerror' => 'Не было можне переменовати файл «$1» на «$2».',
 'filedeleteerror' => 'Не было можне змазаты файл «$1».',
-'directorycreateerror' => 'Не є можне вытворити адресарь «$1».',
+'directorycreateerror' => 'Не мож вытворити адресарь «$1».',
 'filenotfound' => 'Не было можне найти файл «$1».',
 'fileexistserror' => 'Не дасть ся записати до файлу «$1»: файл екзістує.',
 'unexpected' => 'Неочекавана годнота: «$1»=«$2».',
@@ -417,11 +491,12 @@ $1',
 'viewsource' => 'Видїти код',
 'viewsource-title' => 'Видїти жрідло сторінкы $1',
 'actionthrottled' => 'Акція была придушена',
-'actionthrottledtext' => 'Ð\92зглÑ\8fдом ÐºÑ\83 Ð¿Ñ\80оÑ\82иÑ\81памовÑ\8bм Ð¾Ð¿Ð°Ñ\82Ñ\80Ñ\97нÑ\8fм не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.',
+'actionthrottledtext' => 'Ð\92зглÑ\8fдом ÐºÑ\83 Ð¿Ñ\80оÑ\82иÑ\81памовÑ\8bм ÐºÑ\80окам не можете жадану акцію провести барз часто в короткім часї. Спробуйте то знову о пару мінут.',
 'protectedpagetext' => 'Тота сторінка была замкнута, также ся не дасть едітовати',
 'viewsourcetext' => 'Можете видїти і копіровати код той сторінкы:',
 'viewyourtext' => "Можете собі посмотрити і скопіровати жрідловый текст '''вашых змін''' той сторінкы:",
-'protectedinterface' => 'Тота сторінка є частёв інтрефейсу проґрамового забеспечіня і єй можуть едітовати лем адміністраторы проєкту.',
+'protectedinterface' => 'Тота сторінка є частёв інтрефейсу проґрамового забеспечіня той вікі і єй можуть едітовати лем адміністраторы проєкту.
+Жебы придати або змінити переклады, просиме хоснуйте [//translatewiki.net/ translatewiki.net], локалізачный проєкт MediaWiki.',
 'editinginterface' => "'''Увага:''' Едітуєте сторінку,котра є частинов текстового інтерфейсу. Зміны той сторінкы выкличуть зміну інтерфейсу про іншых хоснователїв. Про переклад увідомлїня хоснуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проєкт, што ся занимає локалізаціёв MediaWiki.",
 'sqlhidden' => '(SQL запрос скрытый)',
 'cascadeprotected' => 'Сторінка є замнкута, бо є вложена до  {{PLURAL:$1|наслїдуючой сторінкы замкнуты|наслїдуючіх сторінок замнкнутых|наслїдуючіх сторінок замнкнутых}} каскадовым замком:
@@ -447,14 +522,14 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Нынї сьте одголошеный(а).'''
 
-Можете продовжовати в анонімнім перезераню і едітації {{grammar:2sg|{{SITENAME}}}}, або ся можете [[Special:UserLogin|зясь приголосити]] як тот самый або як іншый хоснователь. Даякы сторінкы ся можуть зображовати як кібы сьте были дотеперь приголошены, покы не змажете кеш переглядача.",
+Можете продовжовати в анонімнім перезераню і едітації {{grammar:2sg|{{SITENAME}}}}, або ся можете <span class='plainlinks'>[$1 зясь приголосити]</span> як тот самый або як іншый хоснователь. Даякы сторінкы ся можуть зображовати як кібы сьте были дотеперь приголошены, покы не змажете кеш переглядача.",
 'welcomecreation' => '== Вітаєме вас, $1! ==
 Ваше конто было вытворене.
 Не забудьте змінити свої [[Special:Preferences|наставлїня сайту]].',
 'yourname' => 'Імя хоснователя:',
 'yourpassword' => 'Гесло:',
 'yourpasswordagain' => 'Повторяйте гесло:',
-'remembermypassword' => 'Запамятати моє приголошіня на тім компютерї (максімално $1 {{PLURAL:$1|день|днів}})',
+'remembermypassword' => 'Запамнятати моє приголошіня на тім компютерї (максімално $1 {{PLURAL:$1|день|днів}})',
 'securelogin-stick-https' => 'Останьте  припоєны через HTTPS по приголошіню',
 'yourdomainname' => 'Ваша домена:',
 'password-change-forbidden' => 'На тій вікі не можете мінити гесла.',
@@ -728,7 +803,7 @@ $2
 'previewconflict' => 'Тот нагляд зображує текст так, як буде вызерати по уложіню сторінкы.',
 'session_fail_preview' => "'''Вашу пожадавку ся не удало спрацовати, бо были страчены дата сеансу.
 Просиме, спробуйте то зясь.
\9aÑ\96дÑ\8c Ñ\81Ñ\8f Ñ\82оÑ\82 Ð¿Ñ\80облем Ð±Ñ\83де Ð¾Ð¿Ð°ÐºÐ¾Ð²Ð°ти, спробуйте ся [[Special:UserLogout|одголосити]] і знову приголосити до сістемы.'''",
\9aÑ\96дÑ\8c Ñ\81Ñ\8f Ñ\82оÑ\82 Ð¿Ñ\80облем Ð±Ñ\83де Ð¿Ð¾Ð²Ñ\82оÑ\80ити, спробуйте ся [[Special:UserLogout|одголосити]] і знову приголосити до сістемы.'''",
 'session_fail_preview_html' => "'''Вашу пожадавку ся не удало спрацовати, бо были страчены дата сеансу..'''
 
 ''Зато же {{SITENAME}} має запнуте хоснованя чістого HTML, нагляд ся про превенцію проти атакам JavaScript-ом не зображує.''
@@ -744,10 +819,10 @@ $2
 'editingcomment' => 'Едітованя $1 (нова секція)',
 'editconflict' => 'Конфлікт едітованя: $1',
 'explainconflict' => "Дахто змінив сторінку по започатю вашой едітації.
-Выше видите актуалный текст сторінкы.
\92Ñ\8bÑ\81Ñ\88е Ð²Ð¸Ð´Ð¸Ñ\82е Ð°ÐºÑ\82Ñ\83алнÑ\8bй Ñ\82екÑ\81Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b.
 Вашы зміны суть вказаны долов.
\9cÑ\83Ñ\81иÑ\82е Ð·Ð»Ñ\83Ñ\87Ñ\96Ñ\82и Ñ\81воÑ\97 Ð·Ð¼Ñ\96нÑ\8b Ð· Ñ\94Ñ\81Ñ\82вуючім текстом.
-'''Ð\9bем''' Ð²Ñ\8bÑ\88е Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\82екÑ\81Ñ\82 Ð·Ñ\96Ñ\81Ñ\82ане Ñ\83Ñ\85ованый по кликнутю на  „{{int:savearticle}}“.",
\9cÑ\83Ñ\81иÑ\82е Ð·Ð»Ñ\83Ñ\87Ñ\96Ñ\82и Ñ\81воÑ\97 Ð·Ð¼Ñ\96нÑ\8b Ð· Ñ\96Ñ\81нуючім текстом.
+'''Ð\9bем''' Ð²Ñ\8bÑ\81Ñ\88е Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\82екÑ\81Ñ\82 Ð·Ñ\96Ñ\81Ñ\82ане Ð²Ñ\81окоÑ\87еный по кликнутю на  „{{int:savearticle}}“.",
 'yourtext' => 'Ваш текст',
 'storedversion' => 'Уложена верзія',
 'nonunicodebrowser' => "'''Увага: Ваш переглядач не є способный працовати із знаками Unicode. Абы сьте могли тоту сторінку беспечно едітовати: вшыткы знакы мімо  ASCII суть зображены в гексадецімалных кодах.'''",
@@ -782,7 +857,7 @@ $2
 'nocreate-loggedin' => 'Не маєте права створёвати новы сторінкы.',
 'sectioneditnotsupported-title' => 'Едітованя секцій не є підпороване',
 'sectioneditnotsupported-text' => 'На тій сторінцї не є підпороване едітованя єдной секції.',
-'permissionserrors' => 'Ð¥Ñ\8bба Ð¾Ð¿Ñ\80авнÑ\97нÑ\8f',
+'permissionserrors' => 'Ð¥Ñ\8bба Ð¿Ñ\80ав',
 'permissionserrorstext' => 'Не маєте поволїня той операції з  {{PLURAL:$1|такой причіны|такых причін}}:',
 'permissionserrorstext-withaction' => 'Не маєте дозволїня на $2 з {{PLURAL:$1|такой прічіны|такых прічін}}:',
 'recreate-moveddeleted-warn' => "'''Увага: Пробуєте знову створити сторінку, котра была в минулости змазана.'''
@@ -797,7 +872,7 @@ $2
 Асі была змазана.',
 'edit-conflict' => 'Конфлікт едітованя.',
 'edit-no-change' => 'Ваша едітація была іґнорована, бо ся не зробила жадна зміна тексту.',
-'edit-already-exists' => 'Не вдало ся створити нову сторінку, бо она уж екзістує.',
+'edit-already-exists' => 'Не вдало ся створити нову сторінку, бо она уж існує.',
 'defaultmessagetext' => 'Преднаставленый текст повідомлїня',
 
 # Parser/template warnings
@@ -822,8 +897,8 @@ $2
 'converter-manual-rule-error' => 'Найджена хыба в ручнім правилї конверзії языка',
 
 # "Undo" feature
-'undo-success' => 'Ð\95дÑ\96Ñ\82ованÑ\8f Ð¼Ð¾Ð¶Ðµ Ð±Ñ\8bÑ\82и Ð·Ñ\80Ñ\83Ñ\87ене.
-Просиме Вас перевірте порівнаня ниже, жебы сьте ся упевнили в тім, што хочете зробити а потім уложте зміны долов, жебы сьте закінчіли зрушіня едітованя.',
+'undo-success' => 'Ð\95дÑ\96Ñ\82ованÑ\8f Ð¼Ð¾Ð¶Ðµ Ð±Ñ\8bÑ\82и Ð·Ñ\80Ñ\83Ñ\88ене.
\9fÑ\80оÑ\81име Ð\92аÑ\81 Ð¿ÐµÑ\80евÑ\96Ñ\80Ñ\8cÑ\82е Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð½Ð¸Ð¶Ðµ, Ð¶ÐµÐ±Ñ\8b Ñ\81Ñ\8cÑ\82е Ñ\81Ñ\8f Ñ\83певнили Ð² Ñ\82Ñ\96м, Ñ\88Ñ\82о Ñ\85оÑ\87еÑ\82е Ð·Ñ\80обиÑ\82и Ð° Ð¿Ð¾Ñ\82Ñ\96м Ñ\83ложÑ\82е Ð·Ð¼Ñ\96нÑ\8b Ð´Ð¾Ð»Ð¾Ð², Ð¶ÐµÐ±Ñ\8b Ñ\81Ñ\8cÑ\82е Ð·Ð°ÐºÑ\96нÑ\87Ñ\96ли Ð·Ñ\80Ñ\83Ñ\88Ñ\96нÑ\8f ÐµÐ´Ñ\96Ñ\82ованÑ\8f.',
 'undo-failure' => 'Едітованя не могло быти зрушене про конфлікт міджілеглых змін.',
 'undo-norev' => 'Тото едітованя не можете вернути назад, бо не екзістує або было змазане.',
 'undo-summary' => 'Зрушена верзія $1 од хоснователя [[Special:Contributions/$2|$2]] ([[User talk:$2|діскузія]])',
@@ -862,42 +937,42 @@ $3 зазначів тоту причіну: ''$2''",
 'history-feed-title' => 'Історія едітовань',
 'history-feed-description' => 'Історія едітовань той сторінкы на вікі',
 'history-feed-item-nocomment' => '$1 в $2',
-'history-feed-empty' => 'Такой сторінкы не екзістує.
+'history-feed-empty' => 'Такой сторінкы нїт.
 Могли єй вымазати ці переменовати.
-СпÑ\80обÑ\83йÑ\82е [[Special:Search|найÑ\82и Ð²Ð¾ вікі]] подобны сторінкы.',
+СпÑ\80обÑ\83йÑ\82е [[Special:Search|найÑ\82и Ð½Ð° вікі]] подобны сторінкы.',
 
 # Revision deletion
 'rev-deleted-comment' => '(згорнутя едітованя вымазане)',
-'rev-deleted-user' => '(мено автора стерто)',
+'rev-deleted-user' => '(імя автора стерто)',
 'rev-deleted-event' => '(лоґ одстраненый)',
 'rev-deleted-user-contribs' => '[мено хоснователя або IP адреса одстранене – едітованя є в приспевках сховане]',
-'rev-deleted-text-permission' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''змазана'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
-'rev-deleted-text-unhide' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла '''змазана'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].
+'rev-deleted-text-permission' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
+'rev-deleted-text-unhide' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла '''вÑ\8bлÑ\83Ñ\87ена'''.
\94еÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].
 Можете  сі все [$1 тоту ревізію посмотрити], кідь хочете.",
 'rev-suppressed-text-unhide' => "Тота ревізія была '''затаєна'''.
 Детайлы можуть быти уведены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї утаїня].
 Можете сі [$1 тоту ревізію посмотрити], кідь  хочете.",
-'rev-deleted-text-view' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''змазана'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
+'rev-deleted-text-view' => "ТоÑ\82а Ñ\80евÑ\96зÑ\96Ñ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
 'rev-suppressed-text-view' => "Тота верзія была '''затаєна'''.
 Можете сі єй посмотрити; детайлы можуть быти зазначены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї затаїня].",
 'rev-deleted-no-diff' => "Тот розділ сі не можете помострити, бо єдна з &nbsp;ревізій была '''змазана'''.
 Детайлы можуть быти зазначены в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} книзї змазаных сторінок].",
 'rev-suppressed-no-diff' => "Тот роздїл сі не можете посмотрити, бо єдна з ревізій была  '''змазана'''.",
-'rev-deleted-unhide-diff' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла '''змазана'''.
+'rev-deleted-unhide-diff' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла '''вÑ\8bлÑ\83Ñ\87ена'''.
 Можете сі але  [$1 тоту ревізію посмотрити], кідь хочете.",
 'rev-suppressed-unhide-diff' => "Єдна з ревізій про тото порівнаня была '''затаєна'''.
 Детайлы можуть быти уведены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї утаїня].
 Можете сі але [$1 тоту ревізію посмотрити], кідь  хочете.",
-'rev-deleted-diff-view' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла  '''змазана'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð·Ð¼Ð°Ð·Ð°ных сторінок].",
+'rev-deleted-diff-view' => "Ð\84дна Ð· Ñ\80евÑ\96зÑ\96й Ð¿Ñ\80о Ñ\82оÑ\82о Ð¿Ð¾Ñ\80Ñ\96внанÑ\8f Ð±Ñ\8bла  '''вÑ\8bлÑ\83Ñ\87ена'''.
\9cожеÑ\82е Ñ\81Ñ\96 Ñ\94й Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и; Ð´ÐµÑ\82айлÑ\8b Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð±Ñ\8bÑ\82и Ð·Ð°Ð·Ð½Ð°Ñ\87енÑ\8b Ð² [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐ½Ð¸Ð·Ñ\97 Ð²Ñ\8bлÑ\83Ñ\87еных сторінок].",
 'rev-suppressed-diff-view' => "Єдна з ревізій про тото порівнаня была '''затаєна'''.
 Можете сі єй посмотрити; детайлы можуть быти зазначены в  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} записї затаїня].",
 'rev-delundel' => 'вказати/сховати',
 'rev-showdeleted' => 'вказати',
-'revisiondelete' => 'Ð\97мазати/обновити ревізії',
+'revisiondelete' => 'Ð\92Ñ\8bлÑ\83Ñ\87Ñ\96ти/обновити ревізії',
 'revdelete-nooldid-title' => 'Хыбна цілёва ревізія',
 'revdelete-nooldid-text' => 'Не зволили сьте ревізії, на котрых хочете тоту функцію выконати.',
 'revdelete-nologtype-title' => 'Нестановленый тіп запису',
@@ -905,7 +980,7 @@ $3 зазначів тоту причіну: ''$2''",
 'revdelete-nologid-title' => 'Неплатный протоколовачій запис',
 'revdelete-nologid-text' => 'Будь сьте не зазначіли цілёвый запис в протоколї або даный запис не екзістує.',
 'revdelete-no-file' => 'Зазначеный файл не єствує.',
-'revdelete-show-file-confirm' => 'Ð\9dа Ð¿ÐµÐ²Ð½Ð¾ Ñ\81обÑ\96 Ñ\85оÑ\87еÑ\82е Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и Ð·Ð¼Ð°Ð·Ð°ну ревізію файлу „<nowiki>$1</nowiki>“ з $2, $3?',
+'revdelete-show-file-confirm' => 'Ð\9dа Ð¿ÐµÐ²Ð½Ð¾ Ñ\81обÑ\96 Ñ\85оÑ\87еÑ\82е Ð¿Ð¾Ñ\81моÑ\82Ñ\80иÑ\82и Ð²Ñ\8bлÑ\83Ñ\87ену ревізію файлу „<nowiki>$1</nowiki>“ з $2, $3?',
 'revdelete-show-file-submit' => 'Гей',
 'revdelete-selected' => "'''{{PLURAL:$2|Выбрана ревізія|Выбраны ревізії}} з [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Выбрана протоколована подїя|Выбраны протоколованы подїї}}:'''",
@@ -938,7 +1013,7 @@ $1",
 'logdelete-failure' => "'''Не вдало ся наставити видимость протоколу.'''
 $1",
 'revdel-restore' => 'Змінити видимость',
-'revdel-restore-deleted' => 'вÑ\8bмазаны ревізії',
+'revdel-restore-deleted' => 'вÑ\8bлÑ\83Ñ\87ены ревізії',
 'revdel-restore-visible' => 'видительны ревізії',
 'pagehist' => 'Історія сторінкы',
 'deletedhist' => 'Вымазана історія',
@@ -955,7 +1030,7 @@ $1",
 'revdelete-only-restricted' => 'Хыба схованя положкы з $2 $1: Не можете положкы сховати лем перед адміністраторами жебы сьте сучасно выбрали і дакотру з далшых можностей затаїня.',
 'revdelete-reason-dropdown' => '*Звыклы причіны змазаня
 ** Порушіня авторьскых прав
-** Невгодны особны дата
+** Ð\9dевгоднÑ\8b ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80Ñ\97 Ð°Ð±Ð¾ Ð¾Ñ\81обнÑ\8b Ð´Ð°Ñ\82а
 ** Потенціално огварячі дата',
 'revdelete-otherreason' => 'Інша/далша причіна:',
 'revdelete-reasonotherlist' => 'Інша причіна',
@@ -972,7 +1047,7 @@ $1",
 'mergehistory-header' => 'Тота сторінка Вам дозволить злучіти історію єдной жрідловой сторінкы з новшов сторінков.
 Пересвіджте ся, же тота зміна утриме повязаность і поступность  історії сторінкы.',
 'mergehistory-box' => 'Злучіти ревізії двох сторінок:',
-'mergehistory-from' => 'Ð\97дÑ\80оÑ\91ва сторінка:',
+'mergehistory-from' => 'Ð\96Ñ\80Ñ\96длова сторінка:',
 'mergehistory-into' => 'Цілёва сторінка:',
 'mergehistory-list' => 'Історія злучітельных сторінок',
 'mergehistory-merge' => 'Наслїдуючі верзії сторінкы [[:$1|$1]] можуть быти злучены в [[:$2]]. Перепиначом выберте верзію, котра урчіть, же лем тота і старшы едітації будуть злучены. Рахуйте з тым, же хоснованём  навіґачных одказів будуть дата страчены.',
@@ -981,9 +1056,9 @@ $1",
 'mergehistory-empty' => 'Не дають ся споїти жадны ревізії.',
 'mergehistory-success' => '$3 {{PLURAL:$3|ревізія|ревізії|ревізійí}} сторінкы [[:$1]] {{PLURAL:$3|была успішно злучена|были успішно злучены|было успішно злуґено}} до сторінкы [[:$2]].',
 'mergehistory-fail' => 'Злучіня історій ся не дасть зробити. Перевірте заданы сторінкы і їх історії',
-'mergehistory-no-source' => 'Ð\97дÑ\80оÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка $1 Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82ує.',
+'mergehistory-no-source' => 'Ð\96Ñ\80Ñ\96длова Ñ\81Ñ\82оÑ\80Ñ\96нка $1 Ð½Ðµ Ñ\96Ñ\81нує.',
 'mergehistory-no-destination' => 'Цілёва сторінка «$1» не екзістує.',
-'mergehistory-invalid-source' => 'Ð\97дÑ\80ойова сторінка мусить мати правилну назву.',
+'mergehistory-invalid-source' => 'Ð\96Ñ\80Ñ\96длова сторінка мусить мати правилну назву.',
 'mergehistory-invalid-destination' => 'Цілёва сторінка мусить мати правилну назву.',
 'mergehistory-autocomment' => 'Злучена сторінка [[:$1]] до сторінкы [[:$2]]',
 'mergehistory-comment' => 'Злучена сторінка [[:$1]] до сторінкы [[:$2]]: $3',
@@ -1053,8 +1128,6 @@ $1",
 'search-interwiki-caption' => 'Сестерьскы проєкты',
 'search-interwiki-default' => '$1 резултаты:',
 'search-interwiki-more' => '(веце)',
-'search-mwsuggest-enabled' => 'з порадами',
-'search-mwsuggest-disabled' => 'без порад',
 'search-relatedarticle' => 'Звязаный',
 'mwsuggest-disable' => 'Выпнути пораду AJAX',
 'searcheverything-enable' => 'Глядати во вшыткых просторах назв',
@@ -1151,7 +1224,7 @@ $1",
 'timezoneregion-indian' => 'Індійскый океан',
 'timezoneregion-pacific' => 'Тихый океан',
 'allowemail' => 'Поволити електронічну пошту од іншых хоснователїв',
-'prefs-searchoptions' => 'Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ð³ляданя',
+'prefs-searchoptions' => 'Ð\93ляданя',
 'prefs-namespaces' => 'Просторы назв',
 'defaultns' => 'Інакше глядати в такых просторах назв:',
 'default' => 'імпліцітне',
@@ -1265,11 +1338,11 @@ $1",
 'right-move-rootuserpages' => 'Переменованя корінёвых сторінок хоснователїв',
 'right-movefile' => 'Переменовати файлы',
 'right-suppressredirect' => 'Нестворіня напрямлїня про переменоваю сторінкы',
-'right-upload' => 'Ð\97аладовованя файлів',
+'right-upload' => 'Ð\9dаладовованя файлів',
 'right-reupload' => 'Переписованя екзістуючіх файлів',
-'right-reupload-own' => 'Ð\9fеÑ\80епиÑ\81ованÑ\8f Ñ\84айлÑ\96в Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ð¾Ð´ Ñ\81ебе Ñ\81амого',
-'right-reupload-shared' => 'Ð\97аладованя локалных файлів жебы перекрыли тотых в сполочнім усховищу',
-'right-upload_by_url' => 'Ð\97аладовованя файлів з URL адрес',
+'right-reupload-own' => 'Переписованя файлів ладованых од себе самого',
+'right-reupload-shared' => 'Ð\9dаладованя локалных файлів жебы перекрыли тотых в сполочнім усховищу',
+'right-upload_by_url' => 'Ð\9dаладовованя файлів з URL адрес',
 'right-purge' => 'Очіщіня кешу про сторінкы без потверджовачого діалоґу',
 'right-autoconfirmed' => 'Едітованя часточно замкнутых сторінок',
 'right-bot' => 'Быти поважованый за автоматічный процес',
@@ -1303,7 +1376,7 @@ $1",
 'right-markbotedits' => 'Означованя ревертів як едітованя робота',
 'right-noratelimit' => 'Не має обмеджіня в швыдкости',
 'right-import' => 'Імпорт сторінок з іншых вікі',
-'right-importupload' => 'Ð\86мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\87еÑ\80ез Ð·аладованя файлів',
+'right-importupload' => 'Ð\86мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\87еÑ\80ез Ð½аладованя файлів',
 'right-patrol' => 'Позначованя едітовань як перевіреных',
 'right-autopatrol' => 'Автоматічне означованя едітовань як перевіреных',
 'right-patrolmarks' => 'Зобразованя патролёваных сторінок в Послїднїх змінах',
@@ -1334,10 +1407,10 @@ $1",
 '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' => 'вымазати тоту ревізію сторінкы',
@@ -1408,29 +1481,29 @@ $1",
 'recentchangeslinked-to' => 'Вказати зміны на сторінках, одказуючіх на задану сторінку',
 
 # Upload
-'upload' => 'Ð\97аладовати файл',
-'uploadbtn' => 'Ð\97аладовати файл',
-'reuploaddesc' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ð° Ð²ÐµÑ\80нÑ\83Ñ\82и Ñ\81Ñ\8f Ð´Ð¾ Ñ\84оÑ\80мÑ\8b Ð·аладовованя',
+'upload' => 'Ð\9dаладовати файл',
+'uploadbtn' => 'Ð\9dаладовати файл',
+'reuploaddesc' => 'Ð\97Ñ\80Ñ\83Ñ\88Ñ\8bÑ\82и Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ð° Ð²ÐµÑ\80нÑ\83Ñ\82и Ñ\81Ñ\8f Ð´Ð¾ Ñ\84оÑ\80мÑ\8b Ð½аладовованя',
 'upload-tryagain' => 'Уложыти зміненый попис файлу',
 'uploadnologin' => 'Не сьте приголошеный(а)',
-'uploadnologintext' => 'Ð\96ебÑ\8b Ð·аладовати файл, мусите ся [[Special:UserLogin|приголосити]].',
-'upload_directory_missing' => 'Ð\90дÑ\80еÑ\81аÑ\80Ñ\8c Ð¿Ñ\80о Ð·аладовованя файлів ($1) хыбить тай вебовый сервер го не годен створити.',
-'upload_directory_read_only' => 'Ð\94о Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8f Ð·аладованых файлів ($1) не мать вебовый сервер права запису.',
-'uploaderror' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð·Ð°Ð»Ð°Ð´Ð¾Ð²ованя ся притрафила хыба',
-'upload-recreate-warning' => "'''Увага: Файл з тов назвов быв скоре змазаный ці переменованый.'''
+'uploadnologintext' => 'Ð\96ебÑ\8b Ð½аладовати файл, мусите ся [[Special:UserLogin|приголосити]].',
+'upload_directory_missing' => 'Ð\90дÑ\80еÑ\81аÑ\80Ñ\8c Ð¿Ñ\80о Ð½аладовованя файлів ($1) хыбить тай вебовый сервер го не годен створити.',
+'upload_directory_read_only' => 'Ð\94о Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8f Ð½аладованых файлів ($1) не мать вебовый сервер права запису.',
+'uploaderror' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð»Ð°Ð´ованя ся притрафила хыба',
+'upload-recreate-warning' => "'''Увага: Файл з тов назвов быв оперед змазаный ці переменованый.'''
 
 Ту є про перегляд зображеный список мазаня і переменованя той сторінкы:",
-'uploadtext' => "Ð\9dиже Ð´Ð°Ð½Ñ\8bй Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c Ñ\81лÑ\83жÑ\8bÑ\82Ñ\8c Ð½Ð° Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\96в. Ð£Ð¶ Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b Ñ\84айлÑ\8b Ñ\81обÑ\96 Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80езеÑ\80аÑ\82и Ñ\96 Ð³Ð»Ñ\8fдаÑ\82и Ð¿Ð¾Ð¼Ð¾Ñ\87ов [[Special:FileList|Ñ\81пиÑ\81кÑ\83 Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ñ\84айлÑ\96в]], ÐºÐ°Ð¶Ð´Ðµ Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\81Ñ\8f Ñ\82Ñ\8bж Ð·Ð°Ð·Ð½Ð°Ñ\87Ñ\83Ñ\94 Ð´Ð¾ [[Special:Log/upload|книгÑ\8b Ð·аладованя]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]].
+'uploadtext' => "Ð\9dиже Ð´Ð°Ð½Ñ\8bй Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c Ñ\81лÑ\83жÑ\8bÑ\82Ñ\8c Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\96в. Ð£Ð¶ Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b Ñ\84айлÑ\8b Ñ\81обÑ\96 Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80езеÑ\80аÑ\82и Ñ\96 Ð³Ð»Ñ\8fдаÑ\82и Ð¿Ð¾Ð¼Ð¾Ñ\87ов [[Special:FileList|Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8bÑ\85 Ñ\84айлÑ\96в]], ÐºÐ°Ð¶Ð´Ðµ Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\81Ñ\8f Ñ\82Ñ\8bж Ð·Ð°Ð·Ð½Ð°Ñ\87Ñ\83Ñ\94 Ð´Ð¾ [[Special:Log/upload|книгÑ\8b Ð½аладованя]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]].
 
-Про вложіня образку до сторінкы хоснуйте єден з наслїдуючіх способів запису:
+Про вложіня образчіка до сторінкы хоснуйте єден із слїдуючіх способів запису:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.jpg]]</nowiki></code>''' до сторінкы вложыть цїлый образок,
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.png|thumb|left|Попис]]</nowiki></code>''' вложыть нагляд в рамику зарівнанім на лівый бік, з пописом „Попис“,
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Файл.ogg]]</nowiki></code>''' вложыть дірект одказ на файл, без того жебы ся зобразив на сторінцї.",
 'upload-permitted' => 'Дозволены тіпы  файлів: $1.',
 'upload-preferred' => 'Преферованы тіпы файлів: $1',
 'upload-prohibited' => 'Заказаны тіпы файлів: $1.',
-'uploadlog' => 'книга Ð·аладованя',
-'uploadlogpage' => 'Ð\9bоÒ\91 Ð·аладованых файлів',
+'uploadlog' => 'книга Ð½аладованя',
+'uploadlogpage' => 'Ð\9bоÒ\91 Ð½аладованых файлів',
 'uploadlogpagetext' => 'Ниже найдете список найновшых файлів. Смотьте [[Special:NewFiles|ґалерію новых образків]] про веце візуалного нагляду.',
 'filename' => 'Назва файлу:',
 'filedesc' => 'Попис',
@@ -1438,22 +1511,22 @@ $1",
 'filereuploadsummary' => 'Зміны у файлі:',
 'filestatus' => 'Авторьскы права:',
 'filesource' => 'Жрідло:',
-'uploadedfiles' => 'Ð\97аладованы файлы',
+'uploadedfiles' => 'Ð\9dаладованы файлы',
 'ignorewarning' => 'Іґноровати варованя тай уложыти файл.',
 'ignorewarnings' => 'Іґноровати вшыткы варованя',
 'minlength1' => 'Назва файлу мусить мати холем єдну літеру.',
-'illegalfilename' => 'Ð\9dазва Ñ\84айлÑ\83 "$1" Ð¾Ð±Ñ\81Ñ\8fгÑ\83Ñ\94 Ð±Ñ\83квÑ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ð½Ðµ Ñ\81Ñ\83Ñ\82Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ\8b Ð² Ð½Ð°Ð·Ð²Ð°Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок. Ð\9fÑ\80оÑ\81име, Ð¿ÐµÑ\80еменÑ\83йÑ\82е Ñ\84айл Ñ\96 Ñ\81пÑ\80обÑ\83йÑ\82е Ð³Ð¾ Ð·аладовати зясь.',
+'illegalfilename' => 'Ð\9dазва Ñ\84айлÑ\83 "$1" Ð¾Ð±Ñ\81Ñ\8fгÑ\83Ñ\94 Ð±Ñ\83квÑ\8b, ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ð½Ðµ Ñ\81Ñ\83Ñ\82Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ\8b Ð² Ð½Ð°Ð·Ð²Ð°Ñ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок. Ð\9fÑ\80оÑ\81име, Ð¿ÐµÑ\80еменÑ\83йÑ\82е Ñ\84айл Ñ\96 Ñ\81пÑ\80обÑ\83йÑ\82е Ð³Ð¾ Ð½аладовати зясь.',
 'filename-toolong' => 'Назвы файлів не можуть быти довшы, як 240 байтів.',
 'badfilename' => 'Назва файлу была змінена на „$1“.',
 'filetype-mime-mismatch' => 'Росшырїня файлу ".$1" не одповідать ёго MIME тіпу ($2).',
-'filetype-badmime' => 'Ð\9dе Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·аладововати файлы MIME тіп „$1“.',
-'filetype-bad-ie-mime' => 'Ð\9dеможливо Ð·аладовати тот файл, бо Internet Explorer бы го тримав за „$1“, што є не дозволеный і потенціално небеспечный тіп файлу.',
+'filetype-badmime' => 'Ð\9dе Ñ\94 Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð½аладововати файлы MIME тіп „$1“.',
+'filetype-bad-ie-mime' => 'Ð\9dеможливо Ð½аладовати тот файл, бо Internet Explorer бы го тримав за „$1“, што є не дозволеный і потенціално небеспечный тіп файлу.',
 'filetype-unwanted-type' => "„.$1“''' є нежеланый формат файлу. {{plural:$3|Желаный формат файлів є|Желаны форматы файлів суть}} $2.",
 'filetype-banned-type' => "'''„.$1“''' {{PLURAL:$4|є недозволеный формат файлів|суть недозволены форматы файлів}}.
 {{PLURAL:$3|Дозволеный формат фалів|Дозволены форматы файлів суть}} $2.",
 'filetype-missing' => 'Файл не має росшырїня (наприклад, «.jpg»).',
-'empty-file' => 'Ð\97аладованый файл є порожнїй.',
-'file-too-large' => 'Ð\97аладованый файл є барз великый.',
+'empty-file' => 'Ð\9dаладованый файл є порожнїй.',
+'file-too-large' => 'Ð\9dаладованый файл є барз великый.',
 'filename-tooshort' => 'Назва файлу є барз коротка.',
 'filetype-banned' => 'Тот тіп файлу є заказаный.',
 'verification-error' => 'Тот файл не перешов овіринём файлів.',
@@ -1473,65 +1546,65 @@ $1",
 Згорнутя, котре ту зазначіте, ся на пописовій сторінцї не зобразить.
 Кідь там хочете своє згорнутя зобразити, будете мусити дану сторінку едітовати мануално. [[$1|thumb]]',
 'fileexists-extension' => 'Уже екзістує файл з подобным іменом: [[$2|thumb]]
-* Ð\9dазва Ð·аладованого файлу: <strong>[[:$1]]</strong>
+* Ð\9dазва Ð½аладованого файлу: <strong>[[:$1]]</strong>
 * Назва екзістуючого файлу: <strong>[[:$2]]</strong>
 Выберте іншу назву.',
 'fileexists-thumbnail-yes' => "Тот файл є асі образчік в зменшеній великости ''(нагляд)''. [[$1|thumb]]
 Перевірте файл <strong>[[:$1]]</strong>.
\9aÑ\96дÑ\8c Ñ\94 Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\84айл Ð²ÐµÐºÑ\88Ñ\8bй, Ð°Ð»Ðµ Ñ\96накÑ\88е Ñ\94днакÑ\8bй, Ð½Ðµ Ñ\82Ñ\80еба Ð¾ÐºÑ\80емо Ð·аладовати ёго зменшену верзію.",
\9aÑ\96дÑ\8c Ñ\94 Ð²ÐºÐ°Ð·Ð°Ð½Ñ\8bй Ñ\84айл Ð²ÐµÐºÑ\88Ñ\8bй, Ð°Ð»Ðµ Ñ\96накÑ\88е Ñ\94днакÑ\8bй, Ð½Ðµ Ñ\82Ñ\80еба Ð¾ÐºÑ\80емо Ð½аладовати ёго зменшену верзію.",
 'file-thumbnail-no' => "Назва файлу ся зачінать на <strong>$1</strong>.
 Може є то образчік в зменшеній великости ''(нагляд)''.
 Заладуйте файл в повнім розлишіню, покы є ку діспозіції, або зміньте назву файлу.",
 'fileexists-forbidden' => 'Файл з таков назвов уж екзістує і не є дозволено го переписати.
\9aÑ\96дÑ\8c Ñ\85оÑ\87еÑ\82е Ñ\82оÑ\82 Ñ\84айл Ð·аладовати, вернийте ся і звольте іншу назву.
\9aÑ\96дÑ\8c Ñ\85оÑ\87еÑ\82е Ñ\82оÑ\82 Ñ\84айл Ð½аладовати, вернийте ся і звольте іншу назву.
 [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Файл Ð· Ñ\82ов Ð½Ð°Ð·Ð²Ð¾Ð² Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94 Ð² Ñ\81полоÑ\87нÑ\96м Ñ\83Ñ\81Ñ\85овиÑ\89Ñ\83. Ð\9aÑ\96дÑ\8c Ñ\96 Ð½Ð°Ð¿ÐµÑ\80ек Ñ\82омÑ\83 Ñ\85оÑ\87еÑ\82е Ð²Ð°Ñ\88 Ñ\84айл Ð·аладовати, вернийте ся і звольте іншу назву. [[File:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Файл Ð· Ñ\82ов Ð½Ð°Ð·Ð²Ð¾Ð² Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94 Ð² Ñ\81полоÑ\87нÑ\96м Ñ\83Ñ\81Ñ\85овиÑ\89Ñ\83. Ð\9aÑ\96дÑ\8c Ñ\96 Ð½Ð°Ð¿ÐµÑ\80ек Ñ\82омÑ\83 Ñ\85оÑ\87еÑ\82е Ð²Ð°Ñ\88 Ñ\84айл Ð½аладовати, вернийте ся і звольте іншу назву. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Тот файл є дуплікат {{PLURAL:$1|файлу|такых файлів}}:',
 'file-deleted-duplicate' => 'Ідентічный файл ку тому ([[:$1]]) быв уж скоре змазаный. Передтым як файл знову заладуєте, бы сьте мали перевірити записы о попереднёму змазаню.',
-'uploadwarning' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð·аладованю',
+'uploadwarning' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð½аладованю',
 'uploadwarning-text' => 'Просиме, зміньте опис файлу ниже і спробуйте то знову.',
 'savefile' => 'Уложыти файл',
-'uploadedimage' => 'заладовав "[[$1]]"',
-'overwroteimage' => 'заладована нова верзія "[[$1]]"',
-'uploaddisabled' => 'Ð\97аладовованя файлів заборонене.',
-'copyuploaddisabled' => 'Ð\97аладовованя файлів через URL є выпнуте.',
-'uploadfromurl-queued' => 'Ð\92аÑ\88а Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÐ° Ð½Ð° Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 Ð±Ñ\8bла Ñ\83ложена Ð´Ð¾ Ñ\84Ñ\80онÑ\82ы.',
-'uploaddisabledtext' => 'Ð\97аладовованя файлів є выпнуте.',
-'php-uploaddisabledtext' => 'Ð\92 PHP Ñ\94 Ð²Ñ\8bпнÑ\83Ñ\82е Ð·аладовованя файлів. Просиме, перевірьте наставлїня file_uploads.',
+'uploadedimage' => 'наладовав "[[$1]]"',
+'overwroteimage' => 'наладована нова верзія "[[$1]]"',
+'uploaddisabled' => 'Ð\9dаладовованя файлів заборонене.',
+'copyuploaddisabled' => 'Ð\9dаладовованя файлів через URL є выпнуте.',
+'uploadfromurl-queued' => 'Ð\92аÑ\88а Ð¿Ð¾Ð¶Ð°Ð´Ð°Ð²ÐºÐ° Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 Ð±Ñ\8bла Ñ\83ложена Ð´Ð¾ Ñ\88оÑ\80ы.',
+'uploaddisabledtext' => 'Ð\9dаладовованя файлів є выпнуте.',
+'php-uploaddisabledtext' => 'Ð\92 PHP Ñ\94 Ð²Ñ\8bпнÑ\83Ñ\82е Ð½аладовованя файлів. Просиме, перевірьте наставлїня file_uploads.',
 'uploadscripted' => 'Тот файл обсягує HTML-код або скріпт, якый може быти неправилно інтерпретованый вебовым переглядячом.',
 'uploadvirus' => 'Файл обсягує вірус! Детайлы: $1',
 'uploadjava' => 'Тот файл є ZIP архів, котрый обсягує .class-файл Java.
\97аладованя Java-файлів не є дозволене, бо они можуть запрічінити обход забеспечіня сістемы.',
\9dаладованя Java-файлів не є дозволене, бо они можуть запрічінити обход забеспечіня сістемы.',
 'upload-source' => 'Жрідловый файл',
 'sourcefilename' => 'Назва жрідлового файлу:',
 'sourceurl' => 'Жрідлова URL-адреса:',
 'destfilename' => 'Назва цілёвого файлу:',
 'upload-maxfilesize' => 'Максімалный розмір файлу: $1',
 'upload-description' => 'Попис файлу',
-'upload-options' => 'Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ð·аладовованя',
+'upload-options' => 'Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ð½аладовованя',
 'watchthisupload' => 'Слїдовати тот файл',
 'filewasdeleted' => 'Файл з таков назвов уж екзістовав а быв змазаный. Детайлы обсягує $1.',
-'filename-bad-prefix' => "Ð\9dазва Ð·аладовованого файлу ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.",
-'upload-success-subj' => 'Ð\97аладованя было успішне',
-'upload-success-msg' => 'Файл Ð²Ð°Ð¼Ð¸ Ð·аладованый з [$2] є доступный на [[:{{ns:file}}:$1]]',
-'upload-failure-subj' => 'Проблем із заладованём',
-'upload-failure-msg' => 'У Ð²Ð°Ð¼Ð¸ Ð·аладованого файлу выник проблем  з [$2]::
+'filename-bad-prefix' => "Ð\9dазва Ð½аладовованого файлу ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.",
+'upload-success-subj' => 'Ð\9dаладованя было успішне',
+'upload-success-msg' => 'Файл Ð²Ð°Ð¼Ð¸ Ð½аладованый з [$2] є доступный на [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Проблем з наладованём',
+'upload-failure-msg' => 'У Ð²Ð°Ð¼Ð¸ Ð½аладованого файлу выник проблем  з [$2]::
 
 $1',
-'upload-warning-subj' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð·аладованю',
-'upload-warning-msg' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð²Ð°Ñ\88ого Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 [$2] Ñ\81Ñ\8f Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ив Ð¿Ñ\80облем. Ð\9aÑ\96дÑ\8c Ð³Ð¾ Ñ\85оÑ\87еÑ\82е Ð²Ñ\8bÑ\80Ñ\97Ñ\88Ñ\8bÑ\82и, Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81Ñ\8f Ð²ÐµÑ\80нÑ\83Ñ\82и Ð´Ð¾  [[Special:Upload/stash/$1|Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8f Ð·аладовованя]].',
+'upload-warning-subj' => 'Ð\9fозÑ\96Ñ\80Ñ\8c Ðº Ð½аладованю',
+'upload-warning-msg' => 'Ð\9fÑ\96д Ñ\87аÑ\81 Ð²Ð°Ñ\88ого Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð¾Ð²Ð°Ð½Ñ\8f Ñ\84айлÑ\83 [$2] Ñ\81Ñ\8f Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ив Ð¿Ñ\80облем. Ð\9aÑ\96дÑ\8c Ð³Ð¾ Ñ\85оÑ\87еÑ\82е Ð²Ñ\8bÑ\80Ñ\97Ñ\88Ñ\8bÑ\82и, Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81Ñ\8f Ð²ÐµÑ\80нÑ\83Ñ\82и Ð´Ð¾  [[Special:Upload/stash/$1|Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8f Ð½аладовованя]].',
 
 'upload-proto-error' => 'Неплатный протокол',
-'upload-proto-error-text' => 'Ð\97аладованя одлеглого файлу пожадує зазначіня URLs з початком <code>http://</code> або <code>ftp://</code>.',
+'upload-proto-error-text' => 'Ð\9dаладованя одлеглого файлу пожадує зазначіня URLs з початком <code>http://</code> або <code>ftp://</code>.',
 'upload-file-error' => 'Інтерна хыба',
 'upload-file-error-text' => 'При спробі створити дочасный файл настала внутрїшня хыба на серверї.
 Просиме контактуйте  [[Special:ListUsers/sysop|адміністратора]].',
 'upload-misc-error' => 'Незнама хыба',
-'upload-misc-error-text' => 'Ð\9dезнана Ñ\85Ñ\8bба Ñ\81Ñ\8f Ñ\82Ñ\80аÑ\84ила Ð¿Ñ\96д Ñ\87аÑ\81 Ð·аладованя файлу. Перевірте ці є  URL правилна і приступна і спробуйте то знову. Кідь ся хыба обявить знову, контактуйте [[Special:ListUsers/sysop|адміністратора]]. сістемы.',
+'upload-misc-error-text' => 'Ð\9dезнана Ñ\85Ñ\8bба Ñ\81Ñ\8f Ñ\82Ñ\80аÑ\84ила Ð¿Ñ\96д Ñ\87аÑ\81 Ð½аладованя файлу. Перевірте ці є  URL правилна і приступна і спробуйте то знову. Кідь ся хыба обявить знову, контактуйте [[Special:ListUsers/sysop|адміністратора]]. сістемы.',
 'upload-too-many-redirects' => 'URL обсягує барз велё напрямлінь',
 'upload-unknown-size' => 'Незнамый розмір',
 'upload-http-error' => 'Стала ся хыба HTTP: $1',
-'upload-copy-upload-invalid-domain' => 'Ð\97аладовованÑ\8f ÐºÐ¾Ð¿Ñ\96Ñ\80ованÑ\91м Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ з той домены.',
+'upload-copy-upload-invalid-domain' => 'Ð\9dаладовованÑ\8f ÐºÐ¾Ð¿Ñ\96Ñ\80ованÑ\91м Ð½ÐµÐ³Ð¾Ð´Ð½Ð¾ з той домены.',
 
 # File backend
 'backend-fail-stream' => 'Не вдало ся транслёвати файл $1.',
@@ -1557,7 +1630,7 @@ $1',
 'backend-fail-internal' => 'В кінцёвій уложній сістемі „$1“ ся стала незнама хыба.',
 'backend-fail-contenttype' => 'Не годно было становити тіп обсягу файлу, жебы уложыти го до „$1“.',
 'backend-fail-batchsize' => 'Кінцёве усховище прияло блок з $1 {{PLURAL:файловов операціов|файловыма операціями}};максімум є {{PLURAL:$2|$2}}.',
-'backend-fail-usable' => 'Не вдало ся записати до файлу $1  про брак прав або хыбуючі адресарї/контайнеры.',
+'backend-fail-usable' => 'Не вдало ся чітати з файлу або записати до файлу $1  про брак прав або хыбуючі адресарї/контайнеры.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не годен ся припоїти к журналовій датабазї усховища «$1».',
@@ -1584,8 +1657,8 @@ $1',
 Не годен перевірити ёго беспеку.',
 
 # Special:UploadStash
-'uploadstash' => 'СкÑ\80Ñ\8bÑ\88а Ð·аладованых файлів',
-'uploadstash-summary' => 'ТоÑ\82а Ñ\81Ñ\82оÑ\80Ñ\96нка Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð¿Ñ\80иÑ\81Ñ\82Ñ\83п ÐºÑ\83 Ñ\84айлом ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ñ\81Ñ\83Ñ\82Ñ\8c Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b (або Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ñ\81кÑ\96нÑ\87Ñ\96ло) Ð°Ð»Ðµ Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ð±Ñ\8bли Ð¾Ð¿Ñ\83влÑ\96кованÑ\8b Ð½Ð° Ð²Ñ\96кÑ\96. Ð¢Ð¾Ñ\82Ñ\8b Ñ\84айлÑ\8b Ð½Ðµ Ð²Ð¸Ð´Ð¸Ñ\82Ñ\8c Ð½Ð¸Ñ\85Ñ\82о Ð¾ÐºÑ\80ем Ñ\85оÑ\81новаÑ\82елÑ\8f Ñ\88Ñ\82о Ñ\97Ñ\85 Ð·аладовав.',
+'uploadstash' => 'СкÑ\80Ñ\8bÑ\88а Ð½аладованых файлів',
+'uploadstash-summary' => 'ТоÑ\82а Ñ\81Ñ\82оÑ\80Ñ\96нка Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð¿Ñ\80иÑ\81Ñ\82Ñ\83п ÐºÑ\83 Ñ\84айлом ÐºÐ¾Ñ\82Ñ\80Ñ\8b Ñ\81Ñ\83Ñ\82Ñ\8c Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8b (або Ð»Ð°Ð´Ð¾Ð²Ð°Ð½Ñ\8f Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ñ\81кÑ\96нÑ\87Ñ\96ло) Ð°Ð»Ðµ Ñ\96Ñ\89Ñ\96 Ð½Ðµ Ð±Ñ\8bли Ð¾Ð¿Ñ\83влÑ\96кованÑ\8b Ð½Ð° Ð²Ñ\96кÑ\96. Ð¢Ð¾Ñ\82Ñ\8b Ñ\84айлÑ\8b Ð½Ðµ Ð²Ð¸Ð´Ð¸Ñ\82Ñ\8c Ð½Ð¸Ñ\85Ñ\82о Ð¾ÐºÑ\80ем Ñ\85оÑ\81новаÑ\82елÑ\8f Ñ\88Ñ\82о Ñ\97Ñ\85 Ð½аладовав.',
 'uploadstash-clear' => 'Змазати схованы файлы',
 'uploadstash-nofiles' => 'Не маєте жадны схованы файлы.',
 'uploadstash-badtoken' => 'Выконаня той дїї не было успішне, може зато, же вашы повірїня про едітованя скінчіли. Попробуйте знову.',
@@ -1598,7 +1671,7 @@ $1',
 'img-auth-nopathinfo' => 'Ваш сервер не є наштелёваный так, жебы давав тоту інформацію.
 Може фунґує помочов CGI і img_auth на нім не може фунґовати.
 Посмотьте https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
-'img-auth-notindir' => 'Ð\9fожадована Ñ\81Ñ\82ежка Ð½Ðµ Ñ\94 Ð² ÐºÐ¾Ð½Ñ\84Ñ\96Ò\91Ñ\83Ñ\80ованÑ\96м Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8e Ñ\96з Ð·аладованыма файлами.',
+'img-auth-notindir' => 'Ð\9fожадована Ñ\81Ñ\82ежка Ð½Ðµ Ñ\94 Ð² ÐºÐ¾Ð½Ñ\84Ñ\96Ò\91Ñ\83Ñ\80ованÑ\96м Ð°Ð´Ñ\80еÑ\81аÑ\80Ñ\8e Ñ\96з Ð½аладованыма файлами.',
 'img-auth-badtitle' => 'З „$1“  ся не дасть створити платна назва сторінкы.',
 'img-auth-nologinnWL' => 'Не сьте приголошеный і „$1“ не є на білім списку.',
 'img-auth-nofile' => 'Файл «$1» не екзістує.',
@@ -1624,7 +1697,7 @@ $1',
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Не вдало ся досягнути URL.',
 'upload-curl-error6-text' => 'Із зазначеной URL ся не дасть чітати. Перевірте ці є URL правилно написана і сервер є доступный.',
-'upload-curl-error28' => 'Час выдїленый на заладованя уж вычерьпаный',
+'upload-curl-error28' => 'Час становленый на наладованя уж вычерьпаный',
 'upload-curl-error28-text' => 'Сервер довго не одповідать. Перевірте ці є доступный і кус почекайте і спробуйте то знову.',
 
 'license' => 'Ліценцованя:',
@@ -1635,8 +1708,8 @@ $1',
 'upload_source_file' => ' (файл на вашім компютерї)',
 
 # Special:ListFiles
-'listfiles-summary' => 'ТоÑ\82а Ñ\88пеÑ\86Ñ\96ална Ñ\81Ñ\82оÑ\80Ñ\96нка Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\94 Ð²Ñ\88Ñ\8bÑ\82кÑ\8b Ð·аладованы файлы.
\9fÑ\80и Ñ\84Ñ\96лÑ\82Ñ\80ованÑ\8e Ð·Ð° Ñ\85оÑ\81новаÑ\82елÑ\91м, Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ñ\81Ñ\8f Ð»ÐµÐ¼ Ñ\84айлÑ\8b, Ñ\83 ÐºÐ¾Ñ\82Ñ\80Ñ\8bÑ\85 Ñ\85оÑ\81новаÑ\82елÑ\8c Ð·аладовав актуалну верзію.',
+'listfiles-summary' => 'ТоÑ\82а Ñ\88пеÑ\86Ñ\96ална Ñ\81Ñ\82оÑ\80Ñ\96нка Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\94 Ð²Ñ\88Ñ\8bÑ\82кÑ\8b Ð½аладованы файлы.
\9fÑ\80и Ñ\84Ñ\96лÑ\82Ñ\80ованÑ\8e Ð·Ð° Ñ\85оÑ\81новаÑ\82елÑ\91м, Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ñ\81Ñ\8f Ð»ÐµÐ¼ Ñ\84айлÑ\8b, Ñ\83 ÐºÐ¾Ñ\82Ñ\80Ñ\8bÑ\85 Ñ\85оÑ\81новаÑ\82елÑ\8c Ð½аладовав актуалну верзію.',
 'listfiles_search_for' => 'Глядати файл по назві:',
 'imgfile' => 'файл',
 'listfiles' => 'Список файлів',
@@ -1684,8 +1757,8 @@ $1',
 'sharedupload-desc-create' => 'Гевсесь файл походить з {{grammar:2sg|$1}} тай можуть го хосновати другы проєкты.
 Може бы сьте хотїли правити [$2 тамтушню сторінку з пописом файлу].',
 'filepage-nofile' => 'Не екзістує файл з таков назвов',
-'filepage-nofile-link' => 'Файл Ð· Ñ\82аков Ð½Ð°Ð·Ð²Ð¾Ð² Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94, Ð°Ð»Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е [$1 Ð³Ð¾ Ð·аладовати].',
-'uploadnewversion-linktext' => 'Ð\97аладовати нову верзію того файлу',
+'filepage-nofile-link' => 'Файл Ð· Ñ\82аков Ð½Ð°Ð·Ð²Ð¾Ð² Ð½Ðµ ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94, Ð°Ð»Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е [$1 Ð³Ð¾ Ð½аладовати].',
+'uploadnewversion-linktext' => 'Ð\9dаладовати нову верзію того файлу',
 'shared-repo-from' => 'з $1',
 'shared-repo' => 'здїляного усховіща',
 
@@ -1755,7 +1828,7 @@ $1',
 'statistics-articles' => 'Обсяговы сторінкы',
 'statistics-pages' => 'Сторінкы',
 'statistics-pages-desc' => 'Вшыткы сторінкы на вікі враховано діскузій, напрямлїня ітд.',
-'statistics-files' => 'Ð\97аладованы файлы',
+'statistics-files' => 'Ð\9dаладованы файлы',
 'statistics-edits' => 'Чісло едітованя од основаня вікі {{SITENAME}}',
 'statistics-edits-average' => 'Середнє чісло едітовань на сторінку',
 'statistics-views-total' => 'Вшыткых переглядів',
@@ -2135,7 +2208,7 @@ $UNWATCHURL
 'protectedarticle' => 'замыкать "[[$1]]"',
 'modifiedarticleprotection' => 'зміненa рівень охраны сторінкы «[[$1]]»',
 'unprotectedarticle' => 'знята охрана з "[[$1]]"',
-'movedarticleprotection' => 'наставлїня замків пересунуто з „[[$2]]“ на „[[$1]]“',
+'movedarticleprotection' => 'наставлїня замків перенесено з „[[$2]]“ на „[[$1]]“',
 'protect-title' => 'Зміна уровнї охраны сторінкы „$1“',
 'protect-title-notallowed' => 'Указати уровни охраны сторінкы „$1“',
 'prot_1movedto2' => '«[[$1]]» переменована на «[[$2]]»',
@@ -2186,7 +2259,7 @@ $UNWATCHURL
 'restriction-edit' => 'Едітованя',
 'restriction-move' => 'Переменовати',
 'restriction-create' => 'Вытвориня',
-'restriction-upload' => 'Ð\97аладовованя файлів',
+'restriction-upload' => 'Ð\9dаладовованя файлів',
 
 # Restriction levels
 'restriction-level-sysop' => 'замкнуте',
@@ -2194,7 +2267,7 @@ $UNWATCHURL
 'restriction-level-all' => 'хоцьяка рівень',
 
 # Undelete
-'undelete' => 'Ð\97мазаны сторінкы',
+'undelete' => 'Ð\92Ñ\8bлÑ\83Ñ\87ены сторінкы',
 'undeletepage' => 'Посмотрити собі і обновити змазану сторінку',
 'undeletepagetitle' => "'''Ниже суть змазаны верзії сторінкы [[:$1]]'''.",
 'viewdeletedpage' => 'Зобразити змазаны сторінкы',
@@ -2264,7 +2337,7 @@ $1',
 'sp-contributions-newbies-title' => 'Приспівкы новый хоснователїв',
 'sp-contributions-blocklog' => 'Лоґ блокованя',
 'sp-contributions-deleted' => 'вымазаны приспевкы хоснователя',
-'sp-contributions-uploads' => 'заладованы файлы',
+'sp-contributions-uploads' => 'наладованы файлы',
 'sp-contributions-logs' => 'лоґы',
 'sp-contributions-talk' => 'діскузія',
 'sp-contributions-userrights' => 'Справа хосновательскых прав',
@@ -2357,7 +2430,7 @@ $1',
 'blocklist-addressblocks' => 'Сховати блокованя єдной IP адресы',
 'blocklist-rangeblocks' => 'Скрыти блокованя россягів',
 'blocklist-timestamp' => 'Часова значка',
-'blocklist-target' => 'ЦÑ\96ль',
+'blocklist-target' => 'ЦÑ\97ль',
 'blocklist-expiry' => 'Кінчіть',
 'blocklist-by' => 'Блокуючій адмін',
 'blocklist-params' => 'Параметры блокованя',
@@ -2474,11 +2547,11 @@ $1',
 
 В тых припадох будете мусити переменовати ці злучіти сторінкы ручнї кідь желаєте єй переменованя.",
 'movearticle' => 'Переменовати сторінку',
-'moveuserpage-warning' => "'''Увага:''' Рихтуєте ся переменовати сторінку хоснователя. Усвідомте собі, же буде пересунута лем тота сторінка, а хоснователь  ''не буде'' переменованый.",
+'moveuserpage-warning' => "'''Увага:''' Рихтуєте ся переменовати сторінку хоснователя. Усвідомте собі, же буде переменована лем тота сторінка, а хоснователь  ''не буде'' переменованый.",
 'movenologin' => 'Не сьте приголошеный(а)!',
 'movenologintext' => 'Про переменованя сторінок ся мусите [[Special:UserLogin|приголосити]].',
 'movenotallowed' => 'Не маєте права переменовати сторінкы.',
-'movenotallowedfile' => 'Не маєте права пересувати файлы.',
+'movenotallowedfile' => 'Не маєте права переменовати файлы.',
 'cant-move-user-page' => 'Не маєте права переменовати сторінкы хоснователїв.',
 'cant-move-to-user-page' => 'Не маєте права переменовати сторінку на сторінку хоснователя (окрем підсторінкы сторінкы хоснователя)',
 'newtitle' => 'Нова назва:',
@@ -2510,7 +2583,7 @@ $1',
 'delete_and_move' => 'Змазати і переменовати',
 'delete_and_move_text' => '==Є треба змазаня==
 
-ЦÑ\96лÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка â\80\9e[[:$1]]â\80\9c Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94. Ð\96елаÑ\82е Ñ\81обÑ\96 Ñ\94й Ð·Ð¼Ð°Ð·Ð°Ñ\82и Ð¿Ñ\80о Ñ\83волнÑ\97нÑ\8f Ð¼Ñ\96Ñ\81Ñ\86Ñ\8f Ð¿Ñ\80о Ð¿ÐµÑ\80еÑ\81Ñ\83н?',
+ЦÑ\96лÑ\91ва Ñ\81Ñ\82оÑ\80Ñ\96нка â\80\9e[[:$1]]â\80\9c Ñ\83ж ÐµÐºÐ·Ñ\96Ñ\81Ñ\82Ñ\83Ñ\94. Ð\96елаÑ\82е Ñ\81обÑ\96 Ñ\94й Ð·Ð¼Ð°Ð·Ð°Ñ\82и Ð¿Ñ\80о Ñ\83волнÑ\97нÑ\8f Ð¼Ñ\96Ñ\81Ñ\86Ñ\8f Ð½Ð° Ð¿ÐµÑ\80еменованÑ\8f?',
 'delete_and_move_confirm' => 'Гей, змазати сторінку',
 'delete_and_move_reason' => 'Змазане про уможнїня переменованя з „[[$1]]“',
 'selfmove' => 'Початочна і нова назва суть ровнакы;
@@ -2610,16 +2683,16 @@ $1',
 'importnotext' => 'Порожнїй або жаден текст',
 'importsuccess' => 'Імпорт сконченый!',
 'importhistoryconflict' => 'Екзістує конфлікт міджі історіямі верзії (може тота сторінка уж была імпортована скоре)',
-'importnosources' => 'Ð\9dе Ð±Ñ\8bло Ð²Ñ\8bбÑ\80ане Ð¶Ñ\80Ñ\96дло Ñ\96мпоÑ\80Ñ\82Ñ\83 Ð¼Ñ\96джÑ\96 Ð²Ñ\96кÑ\96, Ð´Ñ\96Ñ\80екÑ\82 Ð·аладованя історії змін є выпнуте.',
-'importnofile' => 'Ð\9dе Ð±Ñ\8bв Ð·аладованый файл імпорту.',
-'importuploaderrorsize' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·аладовати файл імпорту. Розмір файлу перевышує становлену меджу.',
-'importuploaderrorpartial' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ñ\82и Ñ\96мпоÑ\80Ñ\82нÑ\8bй Ñ\84айл. Ð¤Ð°Ð¹Ð» Ð±Ñ\8bв Ð·аладованый лем частково.',
-'importuploaderrortemp' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð·аладовати імпортный файл. Не є к діспозіції дочасный адресарь.',
+'importnosources' => 'Ð\9dе Ð±Ñ\8bло Ð²Ñ\8bбÑ\80ане Ð¶Ñ\80Ñ\96дло Ñ\96мпоÑ\80Ñ\82Ñ\83 Ð¼Ñ\96джÑ\96 Ð²Ñ\96кÑ\96, Ð´Ñ\96Ñ\80екÑ\82 Ð½аладованя історії змін є выпнуте.',
+'importnofile' => 'Ð\9dе Ð±Ñ\8bв Ð½аладованый файл імпорту.',
+'importuploaderrorsize' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½аладовати файл імпорту. Розмір файлу перевышує становлену меджу.',
+'importuploaderrorpartial' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½Ð°Ð»Ð°Ð´Ð¾Ð²Ð°Ñ\82и Ñ\96мпоÑ\80Ñ\82нÑ\8bй Ñ\84айл. Ð¤Ð°Ð¹Ð» Ð±Ñ\8bв Ð½аладованый лем частково.',
+'importuploaderrortemp' => 'Ð\9dе Ð²Ð´Ð°Ð»Ð¾ Ñ\81Ñ\8f Ð½аладовати імпортный файл. Не є к діспозіції дочасный адресарь.',
 'import-parse-failure' => 'Хыба під час імпорту XML',
 'import-noarticle' => 'Не є сторінка про імпорт!',
 'import-nonewrevisions' => 'Вшыткы верзії уж были скоре імпортованы',
 'xml-error-string' => '$1 на рядку $2, стовпець $3 (байт $4): $5',
-'import-upload' => 'Ð\97аладовати XML дата',
+'import-upload' => 'Ð\9dаладовати XML дата',
 'import-token-mismatch' => 'Стратили ся дата релації. Спробуйте то знову.',
 'import-invalid-interwiki' => 'Із зазначеной вікі ся не дасть імпортовати.',
 'import-error-edit' => 'Сторінка „$1“ ся не наімпортовала, бо не мате право єй едітовати.',
@@ -2631,14 +2704,13 @@ $1',
 # Import log
 'importlogpage' => 'Книга імпортів',
 'importlogpagetext' => 'На тій сторінцї ся зображують адміністраторскы імпорты сторінок враховано едітовань з іншых вікі.',
-'import-logentry-upload' => 'Ñ\96мпоÑ\80Ñ\82овав [[$1]] Ð·аладованём файлу',
+'import-logentry-upload' => 'Ñ\96мпоÑ\80Ñ\82овав [[$1]] Ð½аладованём файлу',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}',
 'import-logentry-interwiki' => 'міджівікі імпорт $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ревізія|ревізії|ревізій}} з $2',
 
 # JavaScriptTest
 'javascripttest' => 'Тестованя JavaScript',
-'javascripttest-disabled' => 'Тота функція не дозволена на тій вікі.',
 'javascripttest-title' => 'Біжать тест в $1',
 'javascripttest-pagetext-noframework' => 'Тота сторінка є резервована про тестованя JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Незнаный фреймворк тестованя „$1“.',
@@ -2688,7 +2760,7 @@ $1',
 'tooltip-feed-atom' => 'Atom канал гевсёй сторінкы',
 'tooltip-t-contributions' => 'Перегляд приспевків того хоснователя',
 'tooltip-t-emailuser' => 'Послати імейл тому хоснователёви',
-'tooltip-t-upload' => 'Ð\97аладовати файлы',
+'tooltip-t-upload' => 'Ð\9dаладовати файлы',
 'tooltip-t-specialpages' => 'Список вшыткых шпеціалных сторінок',
 'tooltip-t-print' => 'Верзія той сторінкы до друку',
 'tooltip-t-permalink' => 'Перманентный одказ на тоту верзію сторінкы',
@@ -2743,11 +2815,18 @@ $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-views' => 'Чісло переглядів',
-'pageinfo-watchers' => 'Чісло слїдуючіх',
-'pageinfo-edits' => 'Чісло едітовань',
-'pageinfo-authors' => 'Чісло різных авторів',
+'pageinfo-watchers' => 'Кількость слїдуючіх сторінку',
+'pageinfo-redirects-name' => 'Напрямлїня на гевсю сторінку',
+'pageinfo-subpages-name' => 'Підсторінкы гевсёй сторінкы',
+'pageinfo-firstuser' => 'Заснователь сторінкы',
+'pageinfo-edits' => 'Кількость вшыткого едітованя',
+'pageinfo-authors' => 'Вшытка кількость унікатных авторів',
 
 # Patrolling
 'markaspatrolleddiff' => 'Означіти як перевірене',
@@ -2805,7 +2884,7 @@ $1',
 # Special:NewFiles
 'newimages' => 'Ґалерія новых файлів',
 'imagelisttext' => "Ниже є {{plural:$1|єден файл|список '''$1'''&nbsp;файлів сортованых $2|список '''$1'''&nbsp;файлів сортованых $2}}.",
-'newimages-summary' => 'Ð\9dа Ñ\82Ñ\96й Ñ\88пеÑ\86Ñ\96алнÑ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\97 Ñ\81Ñ\8f Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ð¾Ñ\81Ñ\82аÑ\82нÑ\97 Ð·аладованы файлы.',
+'newimages-summary' => 'Ð\9dа Ñ\82Ñ\96й Ñ\88пеÑ\86Ñ\96алнÑ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\97 Ñ\81Ñ\8f Ð·Ð¾Ð±Ñ\80ажÑ\83Ñ\8eÑ\82Ñ\8c Ð¾Ñ\81Ñ\82аÑ\82нÑ\97 Ð½аладованы файлы.',
 'newimages-legend' => 'Філтер',
 'newimages-label' => 'Назва файлу (або єй часть):',
 'showhidebots' => '($1 ботів)',
@@ -3359,8 +3438,8 @@ $5
 'autosumm-new' => 'Створена сторінка: $1',
 
 # Live preview
-'livepreview-loading' => 'Ð\97аладовованя...',
-'livepreview-ready' => 'Ð\97аладовованя… Готово!',
+'livepreview-loading' => 'Ð\9dаладовованя...',
+'livepreview-ready' => 'Ð\9dаладовованя… Готово!',
 'livepreview-failed' => 'Швыдкый нагляд не є доступный! Спробуйте хосновати звычайный нагляд.',
 'livepreview-error' => 'Не успішне споїня: $1 "$2". Хоснуйте звычайный нагляд.',
 
@@ -3553,7 +3632,7 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'revdelete-uname-unhid' => 'імя хоснователя одкрыте',
 'revdelete-restricted' => 'приданы обмеджіня про адміністраторів',
 'revdelete-unrestricted' => 'зняты обмеджіня про адміністраторів',
-'logentry-move-move' => '$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 місце напрямлїня без створїня напрямлїня',
@@ -3581,20 +3660,24 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'feedback-bugcheck' => 'Герешнї! Лем перевірьте, ці то не єдна з [$1 уж знамых хыб].',
 'feedback-bugnew' => 'Перевірив(а) єм то. Хочу повідомити нову хыбу.',
 
+# Search suggestions
+'searchsuggest-search' => 'Глядати',
+'searchsuggest-containing' => 'обсягуючій...',
+
 # API errors
-'api-error-badaccess-groups' => 'Ð\9dе Ð¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·аладововати файлы на тоту вікі.',
+'api-error-badaccess-groups' => 'Ð\9dе Ð¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð½аладововати файлы на тоту вікі.',
 'api-error-badtoken' => 'Внутрїшня хыба: планый знак.',
-'api-error-copyuploaddisabled' => 'Ð\97аладовованя з URL є на тім сервері заказане.',
+'api-error-copyuploaddisabled' => 'Ð\9dаладовованя з URL є на тім сервері заказане.',
 'api-error-duplicate' => 'На тій вікі уж {{PLURAL:$1|екзістує [$2 другый файл]|екзістують [$2 іншы файлы]}} з такым самым обсягом.',
 'api-error-duplicate-archive' => '{{PLURAL:$1|быв [$2 другый файл]|были [$2 даякы другы файлы]}} з такым самым обсягом уж гев оперед {{PLURAL:$1|быв|были}}, але {{PLURAL:$1|быв змазаный|были змазаны}}.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|дупліцітный файл, якый быв|дупліцітны файл, як были}} змазаны',
 'api-error-duplicate-popup-title' => 'Дупліцітны {{PLURAL:$1|файл|файлы}}',
-'api-error-empty-file' => 'Ð\97аладованый файл є порожнїй.',
+'api-error-empty-file' => 'Ð\9dаладованый файл є порожнїй.',
 'api-error-emptypage' => 'Створїня новых, порожнїх сторінк неслободно.',
 'api-error-fetchfileerror' => 'Внутрїшня хыба: трафила ся хыба під час обтриманя файлу.',
 'api-error-fileexists-forbidden' => 'Файл з назвов „$1“ уж екзістує тай не годен го переписати.',
 'api-error-fileexists-shared-forbidden' => 'файл з назвов „$1“ уж екзістує в сполочнім усховищу тай не годен го переписати.',
-'api-error-file-too-large' => 'Ð\97аладованый файл є барз великый.',
+'api-error-file-too-large' => 'Ð\9dаладованый файл є барз великый.',
 'api-error-filename-tooshort' => 'Назва файлу є барз курта.',
 'api-error-filetype-banned' => 'Тот тіп файлу є заказаный.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|є недозволеный формат файлів|суть недозволены форматы файлів}}. {{PLURAL:$3|Дозволеный формат фалів є|Дозволены форматы файлів суть}} $2.',
@@ -3602,21 +3685,21 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'api-error-hookaborted' => 'Пожадована вами зміна была одмітнута дакотрым росшырінём.',
 'api-error-http' => 'Внутрїшня хыба: не вдало ся припоїти к серверу.',
 'api-error-illegal-filename' => 'Тота назва файлу не є дозволена.',
-'api-error-internal-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\96д Ñ\87аÑ\81 Ñ\81пÑ\80аÑ\86ованÑ\8f Ð²Ð°Ñ\88ого Ð·аладованого файлу.',
+'api-error-internal-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð¿Ñ\80иÑ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\96д Ñ\87аÑ\81 Ñ\81пÑ\80аÑ\86ованÑ\8f Ð²Ð°Ñ\88ого Ð½аладованого файлу.',
 'api-error-invalid-file-key' => 'Внутрїшня хыба: файл ся не нашов в дочаснім усховіщі.',
 'api-error-missingparam' => 'Внутрїшня хыба: хыбують параметры пожадавкы.',
 'api-error-missingresult' => 'Внутрїшня хыба: не годен становити, ці копірованя было успішне.',
-'api-error-mustbeloggedin' => 'Ð\96ебÑ\8b Ð·аладовати файлы, мусите быти приголошеный.',
+'api-error-mustbeloggedin' => 'Ð\96ебÑ\8b Ð½аладовати файлы, мусите быти приголошеный.',
 'api-error-mustbeposted' => 'Внутрїшня хыба: пожадавка мусить быти через HTTP POST.',
-'api-error-noimageinfo' => 'Ð\97аладованÑ\8f Ð±Ñ\8bло Ñ\83Ñ\81пÑ\96Ñ\88не, Ð°Ð»Ðµ Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð´Ð¾Ð´Ð°Ð² Ð¾ Ñ\84айлÑ\97 Ð¶Ð°Ð´Ð½ы інформації.',
-'api-error-nomodule' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð½Ðµ Ñ\94 Ð½Ð°Ñ\81Ñ\82авленÑ\8bй Ð¼Ð¾Ð´Ñ\83л Ð·аладовованя.',
+'api-error-noimageinfo' => 'Ð\9dаладованÑ\8f Ð±Ñ\8bло Ñ\83Ñ\81пÑ\96Ñ\88не, Ð°Ð»Ðµ Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð´Ð¾Ð´Ð°Ð² Ð¾ Ñ\84айлÑ\97 Ð½Ð¸Ñ\8fкы інформації.',
+'api-error-nomodule' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ð½Ðµ Ñ\94 Ð½Ð°Ñ\81Ñ\82авленÑ\8bй Ð¼Ð¾Ð´Ñ\83л Ð½аладовованя.',
 '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' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ñ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\80и Ñ\81пÑ\80обÑ\96 Ð¾ Ð·аладованя файлу.',
+'api-error-unknown-error' => 'Ð\92нÑ\83Ñ\82Ñ\80Ñ\97Ñ\88нÑ\8f Ñ\85Ñ\8bба: Ñ\82Ñ\80аÑ\84ила Ñ\81Ñ\8f Ñ\85Ñ\8bба Ð¿Ñ\80и Ñ\81пÑ\80обÑ\96 Ð¾ Ð½аладованя файлу.',
 'api-error-unknown-warning' => 'Незнаме варованя: $1',
 'api-error-unknownerror' => 'Незнама хыба: „$1“',
 'api-error-uploaddisabled' => 'Начітаваня файлів є на тій вікі выпнуте.',
index 71f24f8..f19be29 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Dumãnicã',
-'monday'        => 'Lune',
-'tuesday'       => 'Martsã',
-'wednesday'     => 'Njercure',
-'thursday'      => 'Gioia',
-'friday'        => 'Vinirã',
-'saturday'      => 'Sãmbãtã',
-'january'       => 'Yinar',
-'february'      => 'Shcurtu',
-'march'         => 'Martsu',
-'april'         => 'Aprir',
-'may_long'      => 'Mailu',
-'june'          => 'Cirishar',
-'july'          => 'Alunar',
-'august'        => 'Avgustu',
-'september'     => 'Yizmaciunjle',
-'october'       => 'Xumedru',
-'november'      => 'Brumar',
-'december'      => 'Andreulu',
-'january-gen'   => 'Yinar',
-'february-gen'  => 'Shcurtu',
-'march-gen'     => 'Martsu',
-'april-gen'     => 'Aprir',
-'may-gen'       => 'Mailu',
-'june-gen'      => 'Cirishar',
-'july-gen'      => 'Alunar',
-'august-gen'    => 'Avgustu',
+'sunday' => 'Dumãnicã',
+'monday' => 'Lune',
+'tuesday' => 'Martsã',
+'wednesday' => 'Njercure',
+'thursday' => 'Gioia',
+'friday' => 'Vinirã',
+'saturday' => 'Sãmbãtã',
+'january' => 'Yinar',
+'february' => 'Shcurtu',
+'march' => 'Martsu',
+'april' => 'Aprir',
+'may_long' => 'Mailu',
+'june' => 'Cirishar',
+'july' => 'Alunar',
+'august' => 'Avgustu',
+'september' => 'Yizmaciunjle',
+'october' => 'Xumedru',
+'november' => 'Brumar',
+'december' => 'Andreulu',
+'january-gen' => 'Yinar',
+'february-gen' => 'Shcurtu',
+'march-gen' => 'Martsu',
+'april-gen' => 'Aprir',
+'may-gen' => 'Mailu',
+'june-gen' => 'Cirishar',
+'july-gen' => 'Alunar',
+'august-gen' => 'Avgustu',
 'september-gen' => 'Yizmaciunjle',
-'october-gen'   => 'Xumedru',
-'november-gen'  => 'Brumar',
-'december-gen'  => 'Andreulu',
+'october-gen' => 'Xumedru',
+'november-gen' => 'Brumar',
+'december-gen' => 'Andreulu',
 
-'article'    => 'Articlu',
-'cancel'     => 'Alasã',
-'mytalk'     => 'Zburare-a mea',
+'article' => 'Articlu',
+'cancel' => 'Alasã',
+'mytalk' => 'Zburare-a mea',
 'navigation' => 'Navigatsia',
 
 # Cologne Blue skin
-'qbedit'         => 'Alãxiri',
+'qbedit' => 'Alãxiri',
 'qbspecialpages' => 'Frãndzã spetsiale',
 
-'help'             => 'Agiutor',
-'search'           => 'Caftã',
-'searchbutton'     => 'Caftã',
-'go'               => 'Du-vã',
-'searcharticle'    => 'Du-vã',
-'history_short'    => 'Istoria',
+'help' => 'Agiutor',
+'search' => 'Caftã',
+'searchbutton' => 'Caftã',
+'go' => 'Du-vã',
+'searcharticle' => 'Du-vã',
+'history_short' => 'Istoria',
 'printableversion' => 'Verzia ti tipuseare',
-'permalink'        => 'Ligãtura permanentã',
-'edit'             => 'Alãxiri',
-'delete'           => 'Ashcirdzire',
-'protect'          => 'Apurã',
-'talk'             => 'Discusiur',
-'toolbox'          => 'Cutia di hãlate',
-'otherlanguages'   => 'Pi alte limbe',
+'permalink' => 'Ligãtura permanentã',
+'edit' => 'Alãxiri',
+'delete' => 'Ashcirdzire',
+'protect' => 'Apurã',
+'talk' => 'Discusiur',
+'toolbox' => 'Cutia di hãlate',
+'otherlanguages' => 'Pi alte limbe',
 'jumptonavigation' => 'Navigatsia',
-'jumptosearch'     => 'Caftã',
+'jumptosearch' => 'Caftã',
 
 # 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).
-'currentevents'        => 'Evenimente di tora',
-'disclaimers'          => 'Nipricunuschire',
-'edithelp'             => 'Agiutor ti alãxire',
-'mainpage'             => 'Prota frãndzã',
+'currentevents' => 'Evenimente di tora',
+'disclaimers' => 'Nipricunuschire',
+'edithelp' => 'Agiutor ti alãxire',
+'mainpage' => 'Prota frãndzã',
 'mainpage-description' => 'Prota frãndzã',
-'portal'               => 'Portal-a comunitatiljei',
+'portal' => 'Portal-a comunitatiljei',
 
-'newmessageslink'         => 'dimãndare nao',
+'newmessageslink' => 'dimãndare nao',
 'youhavenewmessagesmulti' => 'Avets nãi dimãndãri pi $1',
-'editsection'             => 'Alãxiri',
-'editold'                 => 'Alãxiri',
+'editsection' => 'Alãxiri',
+'editold' => 'Alãxiri',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Articlu',
-'nstab-user'     => 'Frãndza-a ufilizitirolui',
+'nstab-main' => 'Articlu',
+'nstab-user' => 'Frãndza-a ufilizitirolui',
 'nstab-template' => 'Shablon',
 
 # General errors
 'viewsource' => 'Videts-u fãntãnã',
 
 # Login and logout pages
-'welcomecreation'    => '== Ghine vinish, $1 ==
+'welcomecreation' => '== Ghine vinish, $1 ==
 
 Isape a vostrã ira adratã. Nu agãrshits s-le alãxits alidzerle-a vostre ti {{SITENAME}}.',
-'yourname'           => 'Numa di ufilizitor:',
-'yourpassword'       => 'Cljao:',
-'yourpasswordagain'  => 'Bãgats-u cljao iara:',
+'yourname' => 'Numa di ufilizitor:',
+'yourpassword' => 'Cljao:',
+'yourpasswordagain' => 'Bãgats-u cljao iara:',
 'remembermypassword' => 'Apurã-u ligãtura-a mea pi compiuterlu aistu (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'Ligats-vã',
-'userlogin'          => 'Ligats-vã / Fãtsets Isape',
-'logout'             => 'Disligats-vã',
-'userlogout'         => 'Disligats-vã',
-'notloggedin'        => 'Nu hits ligats',
-'createaccount'      => 'Fãtsets Isape',
-'gotaccountlink'     => 'Ligats-vã',
+'login' => 'Ligats-vã',
+'userlogin' => 'Ligats-vã / Fãtsets Isape',
+'logout' => 'Disligats-vã',
+'userlogout' => 'Disligats-vã',
+'notloggedin' => 'Nu hits ligats',
+'createaccount' => 'Fãtsets Isape',
+'gotaccountlink' => 'Ligats-vã',
 
 # Edit pages
-'summary'      => 'Rezime:',
-'minoredit'    => 'Aistã easte alãxire njicã',
-'watchthis'    => 'Mutrits-u frãndzã aistã',
-'savearticle'  => 'Avigljats-u frãndzã',
-'showpreview'  => 'Spuni u-privideare',
-'showdiff'     => 'Spuni le-alãxirle',
+'summary' => 'Rezime:',
+'minoredit' => 'Aistã easte alãxire njicã',
+'watchthis' => 'Mutrits-u frãndzã aistã',
+'savearticle' => 'Avigljats-u frãndzã',
+'showpreview' => 'Spuni u-privideare',
+'showdiff' => 'Spuni le-alãxirle',
 'loginreqlink' => 'Ligats-vã',
 
 # Search results
 'powersearch' => 'Caftã',
 
 # Preferences page
-'preferences'       => 'Alidzerle-a meale',
-'mypreferences'     => 'Alidzerle-a meale',
-'prefsnologin'      => 'Nu hits ligats',
+'preferences' => 'Alidzerle-a meale',
+'mypreferences' => 'Alidzerle-a meale',
+'prefsnologin' => 'Nu hits ligats',
 'searchresultshead' => 'Caftã',
-'youremail'         => 'E-mail:',
-'username'          => 'Numa di ufilizitor:',
+'youremail' => 'E-mail:',
+'username' => 'Numa di ufilizitor:',
 
 # Recent changes
 'recentchanges' => 'Alãxiri',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Alãxiri ligate',
-'recentchangeslinked-feed'    => 'Alãxiri ligate',
+'recentchangeslinked' => 'Alãxiri ligate',
+'recentchangeslinked-feed' => 'Alãxiri ligate',
 'recentchangeslinked-toolbox' => 'Alãxiri ligate',
 
 # Upload
-'upload'          => 'Pitritsets file',
-'uploadbtn'       => 'Pitritsets file',
-'uploadnologin'   => 'Nu hits ligats',
-'filedesc'        => 'Rezime',
+'upload' => 'Pitritsets file',
+'uploadbtn' => 'Pitritsets file',
+'uploadnologin' => 'Nu hits ligats',
+'filedesc' => 'Rezime',
 'watchthisupload' => 'Mutrits-u frãndzã aistã',
 
 # Random page
 'randompage' => 'Frãndzã di nipandicã',
 
-'brokenredirects-edit'   => 'Alãxiri',
+'brokenredirects-edit' => 'Alãxiri',
 'brokenredirects-delete' => 'Ashcirdzire',
 
 # Miscellaneous special pages
 'newpages-username' => 'Numa di ufilizitor:',
-'move'              => 'Tradzets',
-'movethispage'      => 'Tradzets-u frãndza aistã',
+'move' => 'Tradzets',
+'movethispage' => 'Tradzets-u frãndza aistã',
 
 # Book sources
 'booksources-go' => 'Du-vã',
@@ -161,12 +161,12 @@ Isape a vostrã ira adratã. Nu agãrshits s-le alãxits alidzerle-a vostre ti {
 'allpagessubmit' => 'Du-vã',
 
 # Watchlist
-'watchlist'     => 'Lista-a mea di videare',
-'mywatchlist'   => 'Lista-a mea di videare',
-'watchnologin'  => 'Nu hits ligats',
-'watch'         => 'Videts',
+'watchlist' => 'Lista-a mea di videare',
+'mywatchlist' => 'Lista-a mea di videare',
+'watchnologin' => 'Nu hits ligats',
+'watch' => 'Videts',
 'watchthispage' => 'Mutrits-u frãndzã aistã',
-'unwatch'       => 'Azãptãsits videare',
+'unwatch' => 'Azãptãsits videare',
 
 # Protect
 'prot_1movedto2' => '[[$1]] s-trãdzi tu [[$2]]',
@@ -180,7 +180,7 @@ Isape a vostrã ira adratã. Nu agãrshits s-le alãxits alidzerle-a vostre ti {
 
 # Contributions
 'contributions' => 'Ufilizitor:Contributsiur',
-'mycontris'     => 'Contributsiile-a meale',
+'mycontris' => 'Contributsiile-a meale',
 
 'sp-contributions-submit' => 'Caftã',
 
@@ -188,24 +188,24 @@ Isape a vostrã ira adratã. Nu agãrshits s-le alãxits alidzerle-a vostre ti {
 'whatlinkshere' => 'Tsi s-leadze cu aistu',
 
 # Block/unblock
-'ipbreason'          => 'Itia:',
+'ipbreason' => 'Itia:',
 'ipblocklist-submit' => 'Caftã',
 
 # Move page
 'move-page-legend' => 'Tradzets-u frãndzã',
-'movearticle'      => 'Tradzets-u frãndzã:',
-'move-watch'       => 'Mutrits-u frãndzã aistã',
-'movepagebtn'      => 'Tradzets-u frãndzã',
-'movedto'          => 'tradzitã tu',
-'movereason'       => 'Itia:',
+'movearticle' => 'Tradzets-u frãndzã:',
+'move-watch' => 'Mutrits-u frãndzã aistã',
+'movepagebtn' => 'Tradzets-u frãndzã',
+'movedto' => 'tradzitã tu',
+'movereason' => 'Itia:',
 
 # Namespace 8 related
 'allmessages' => 'Dimãndãri systemitse',
 
 # Tooltip help for the actions
 'tooltip-pt-preferences' => 'Alidzerle-a meale',
-'tooltip-pt-logout'      => 'Disligats-vã',
-'tooltip-p-logo'         => 'Prota frãndzã',
+'tooltip-pt-logout' => 'Disligats-vã',
+'tooltip-p-logo' => 'Prota frãndzã',
 
 # Special:NewFiles
 'ilsubmit' => 'Caftã',
index a4d188c..cdc7fbd 100644 (file)
@@ -20,225 +20,225 @@ $messages = array(
 'tog-underline' => 'Сублиниаере легајтулс:',
 
 # Dates
-'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'    => 'аугуст',
+'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'           => 'дец',
+'october-gen' => 'октомври',
+'november-gen' => 'нојември',
+'december-gen' => 'децември',
+'jan' => 'јан',
+'feb' => 'фев',
+'mar' => 'мар',
+'apr' => 'апр',
+'may' => 'мај',
+'jun' => 'јун',
+'jul' => 'јул',
+'aug' => 'ауг',
+'sep' => 'сеп',
+'oct' => 'окт',
+'nov' => 'нов',
+'dec' => 'дец',
 
 # Categories related messages
-'category_header'        => 'Пажус ен категориа "$1"',
-'subcategories'          => 'Субкатегории',
+'category_header' => 'Пажус ен категориа "$1"',
+'subcategories' => 'Субкатегории',
 'listingcontinuesabbrev' => 'контину',
 
-'about'  => 'Дајпул',
+'about' => 'Дајпул',
 'cancel' => 'ренунтаје',
 'mytalk' => 'Мај дискућу',
 
-'errorpagetitle'   => 'Еру',
-'tagline'          => 'Де {{SITENAME}}',
-'help'             => 'ајутор',
-'search'           => 'каутај',
-'searchbutton'     => 'каутај',
-'searcharticle'    => 'Лие',
-'history'          => 'Хисториа пажус',
+'errorpagetitle' => 'Еру',
+'tagline' => 'Де {{SITENAME}}',
+'help' => 'ајутор',
+'search' => 'каутај',
+'searchbutton' => 'каутај',
+'searcharticle' => 'Лие',
+'history' => 'Хисториа пажус',
 'printableversion' => 'верцион принтаблу',
-'permalink'        => 'Легајтул перманентул',
-'edit'             => 'Едита',
-'editthispage'     => 'Едита це пажу',
-'delete'           => 'Делајре',
-'protect'          => 'Ажатме',
-'newpage'          => 'Пажи нови',
+'permalink' => 'Легајтул перманентул',
+'edit' => 'Едита',
+'editthispage' => 'Едита це пажу',
+'delete' => 'Делајре',
+'protect' => 'Ажатме',
+'newpage' => 'Пажи нови',
 'talkpagelinktext' => 'дискућу',
-'personaltools'    => 'Алатки персоналу',
-'talk'             => 'дискућу',
-'views'            => 'Ви',
-'toolbox'          => 'алатуникул',
-'redirectedfrom'   => '(Редирецћионат де ла $1)',
-'jumpto'           => 'Лиа а:',
+'personaltools' => 'Алатки персоналу',
+'talk' => 'дискућу',
+'views' => 'Ви',
+'toolbox' => 'алатуникул',
+'redirectedfrom' => '(Редирецћионат де ла $1)',
+'jumpto' => 'Лиа а:',
 'jumptonavigation' => 'навигацион',
-'jumptosearch'     => 'каутај',
+'jumptosearch' => 'каутај',
 
 # 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:дајпул {{SITENAME}}',
-'copyrightpage'        => '{{ns:project}}:Права даутору',
-'currentevents'        => 'Тебикору',
-'currentevents-url'    => 'Project:Тебикору',
-'disclaimers'          => 'Тајменулс',
-'disclaimerpage'       => 'Project:тајменул',
-'edithelp'             => 'Ајутор пентре едитаере',
-'edithelppage'         => 'Help:Едитаере',
-'helppage'             => 'Help:Ајутор',
-'mainpage'             => 'Пажу принципу',
+'aboutsite' => 'дајпул {{SITENAME}}',
+'aboutpage' => 'Project:дајпул {{SITENAME}}',
+'copyrightpage' => '{{ns:project}}:Права даутору',
+'currentevents' => 'Тебикору',
+'currentevents-url' => 'Project:Тебикору',
+'disclaimers' => 'Тајменулс',
+'disclaimerpage' => 'Project:тајменул',
+'edithelp' => 'Ајутор пентре едитаере',
+'edithelppage' => 'Help:Едитаере',
+'helppage' => 'Help:Ајутор',
+'mainpage' => 'Пажу принципу',
 'mainpage-description' => 'Пажу принципу',
-'privacy'              => 'Политикмус де лижитул',
-'privacypage'          => 'Project:политикмус де лижитул',
+'privacy' => 'Политикмус де лижитул',
+'privacypage' => 'Project:политикмус де лижитул',
 
-'retrievedfrom'      => 'адусе де "$1"',
+'retrievedfrom' => 'адусе де "$1"',
 'youhavenewmessages' => 'Весес $1 ($2).',
-'newmessageslink'    => 'Месагес новес',
-'editsection'        => 'едитаере',
-'editold'            => 'едита',
-'editsectionhint'    => 'Едитаере ћисецион: $1',
-'toc'                => 'Купринс',
-'showtoc'            => 'аратај',
-'hidetoc'            => 'аскунде',
-'site-rss-feed'      => '$1 RSS фитул',
-'site-atom-feed'     => '$1 Atom фитул',
-'page-rss-feed'      => '"$1" RSS Фитул',
-'page-atom-feed'     => '"$1" Atom Фитул',
+'newmessageslink' => 'Месагес новес',
+'editsection' => 'едитаере',
+'editold' => 'едита',
+'editsectionhint' => 'Едитаере ћисецион: $1',
+'toc' => 'Купринс',
+'showtoc' => 'аратај',
+'hidetoc' => 'аскунде',
+'site-rss-feed' => '$1 RSS фитул',
+'site-atom-feed' => '$1 Atom фитул',
+'page-rss-feed' => '"$1" RSS Фитул',
+'page-atom-feed' => '"$1" Atom Фитул',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-user'     => 'Пажу дутилизатору',
-'nstab-project'  => 'Пројекту',
-'nstab-image'    => 'фиширул',
+'nstab-user' => 'Пажу дутилизатору',
+'nstab-project' => 'Пројекту',
+'nstab-image' => 'фиширул',
 'nstab-category' => 'категориа',
 
 # General errors
 'viewsource' => 'баганаере',
 
 # Login and logout pages
-'yourname'                => 'Ном дутилизатору:',
-'login'                   => 'Приласнаере',
+'yourname' => 'Ном дутилизатору:',
+'login' => 'Приласнаере',
 'nav-login-createaccount' => 'Приласнаере / Нажбе',
-'userlogin'               => 'Приласнаере / креаре нутилизатору',
-'userlogout'              => 'отластаере',
+'userlogin' => 'Приласнаере / креаре нутилизатору',
+'userlogout' => 'отластаере',
 
 # Edit page toolbar
-'bold_sample'     => 'Ескрире алдин',
-'bold_tip'        => 'Ескрире алдин',
-'italic_sample'   => 'Ескрире курсиве',
-'italic_tip'      => 'Ескрире курсиве',
-'link_sample'     => 'Ном с-легајтулс',
-'link_tip'        => 'Легајтул интернул',
-'extlink_sample'  => 'http://www.example.com ном с-легајтулс',
-'extlink_tip'     => 'Легајтул ќстернул (вец префикс http://)',
+'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'    => 'Титлу де нивел 2',
-'nowiki_sample'   => 'Интродуца но-Вики иси',
-'nowiki_tip'      => 'Но-Бики клашу',
-'image_tip'       => 'Сантигул инсерат',
-'media_tip'       => 'Легајтул фиширул де медиа',
-'sig_tip'         => 'Утилизаторуном ет дата ет темп',
-'hr_tip'          => 'Линеа оризонтала (еснидивале)',
+'headline_tip' => 'Титлу де нивел 2',
+'nowiki_sample' => 'Интродуца но-Вики иси',
+'nowiki_tip' => 'Но-Бики клашу',
+'image_tip' => 'Сантигул инсерат',
+'media_tip' => 'Легајтул фиширул де медиа',
+'sig_tip' => 'Утилизаторуном ет дата ет темп',
+'hr_tip' => 'Линеа оризонтала (еснидивале)',
 
 # Edit pages
-'summary'                => 'Сумар:',
-'subject'                => 'Субјект / титлур:',
-'minoredit'              => 'Ацеаста есте о едитаре минорај',
-'watchthis'              => 'Клајаере це пажу',
-'showpreview'            => 'Ратај превизуализаре',
-'showdiff'               => 'Аратај шумбајрае',
-'newarticle'             => '(Нова)',
-'editing'                => 'о $1 едитаере',
-'editingsection'         => 'Едитаере $1 (секцион)',
-'copyrightwarning'       => "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->
+'summary' => 'Сумар:',
+'subject' => 'Субјект / титлур:',
+'minoredit' => 'Ацеаста есте о едитаре минорај',
+'watchthis' => 'Клајаере це пажу',
+'showpreview' => 'Ратај превизуализаре',
+'showdiff' => 'Аратај шумбајрае',
+'newarticle' => '(Нова)',
+'editing' => 'о $1 едитаере',
+'editingsection' => 'Едитаере $1 (секцион)',
+'copyrightwarning' => "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->
 Те рог нотари ла дин контрибући ал {{SITENAME}} сунт консидераере релесават супра $2 (суах $1 дин детајс). Аџтеу несав те се тексти сунт едитаере деномерци дет редистрибутаере дин вент, хатае ици.<br /> Ту есте ностре промисаере бонти ус ту скрирсте це се, нега копиаере дин публик домен нега симилари ресорсуе. '''НЕ СУБМИТЕ КОПИЛЕГРУ СКРИЕ САС ПЕРМИћИОН!'''",
-'template-protected'     => '(ажатмат)',
+'template-protected' => '(ажатмат)',
 'template-semiprotected' => '(семи-ажатмат)',
 
 # History pages
-'currentrev'       => 'Верцион куренту',
-'revisionasof'     => 'Верцион де дата $1',
+'currentrev' => 'Верцион куренту',
+'revisionasof' => 'Верцион де дата $1',
 'previousrevision' => '←Версиунеа нтериоарај',
-'cur'              => 'актуалу',
-'last'             => 'прецеденте',
+'cur' => 'актуалу',
+'last' => 'прецеденте',
 
 # Diffs
-'history-title'           => 'Едитаерехисториа пентру "$1"',
-'lineno'                  => 'линиа $1:',
+'history-title' => 'Едитаерехисториа пентру "$1"',
+'lineno' => 'линиа $1:',
 'compareselectedversions' => 'Компара верционс селектус',
-'editundo'                => 'анулизаје',
+'editundo' => 'анулизаје',
 
 # Search results
-'viewprevnext'   => 'Ву ($1 {{int:pipe-separator}} $2) ($3)',
+'viewprevnext' => 'Ву ($1 {{int:pipe-separator}} $2) ($3)',
 'searchhelp-url' => 'Help:Ајутор',
-'powersearch'    => 'каутај авансата',
+'powersearch' => 'каутај авансата',
 
 # Preferences page
 'mypreferences' => 'Мај префиренћу',
 
 # Recent changes
-'recentchanges'   => 'шумбајрае рецентае',
-'rcnote'          => "Маи хос се флај {{PLURAL:$|ултима модификаре|ултимеле '''$1''' модификајри}} дин {{PLURAL:$2|ултима зи|ултимеле '''$2''' зиле}}, енцепонд цу $5, $4.",
+'recentchanges' => 'шумбајрае рецентае',
+'rcnote' => "Маи хос се флај {{PLURAL:\$|ултима модификаре|ултимеле '''\$1''' модификајри}} дин {{PLURAL:\$2|ултима зи|ултимеле '''\$2''' зиле}}, енцепонд цу \$5, \$4.",
 'rcshowhideminor' => '$1 модификајриле миноре',
-'rcshowhidebots'  => '$1 роботи',
-'rcshowhideliu'   => '$1 утилизатори приласнаери',
+'rcshowhidebots' => '$1 роботи',
+'rcshowhideliu' => '$1 утилизатори приласнаери',
 'rcshowhideanons' => '$1 утилизатори аноними',
-'rcshowhidemine'  => '$1 мес модификационс',
-'rclinks'         => 'Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />
+'rcshowhidemine' => '$1 мес модификационс',
+'rclinks' => 'Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />
 $3',
-'diff'            => 'диференћу',
-'hist'            => 'хисториа',
-'hide'            => 'аскунде',
-'show'            => 'Аратај',
+'diff' => 'диференћу',
+'hist' => 'хисториа',
+'hide' => 'аскунде',
+'show' => 'Аратај',
 'minoreditletter' => 'м',
-'newpageletter'   => 'Н',
-'boteditletter'   => 'б',
+'newpageletter' => 'Н',
+'boteditletter' => 'б',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Модификајри корелате',
-'recentchangeslinked-feed'    => 'Модификајри корелате',
+'recentchangeslinked' => 'Модификајри корелате',
+'recentchangeslinked-feed' => 'Модификајри корелате',
 'recentchangeslinked-toolbox' => 'Модификајри корелате',
 
 # Upload
 'upload' => 'тримиће фиширул',
 
 # File description page
-'file-anchor-link'    => 'фиширул',
-'filehist'            => 'Хисториа фиширулу',
-'filehist-current'    => 'куренту',
-'filehist-datetime'   => 'Дата/Темп',
-'filehist-user'       => 'Утилизатору',
+'file-anchor-link' => 'фиширул',
+'filehist' => 'Хисториа фиширулу',
+'filehist-current' => 'куренту',
+'filehist-datetime' => 'Дата/Темп',
+'filehist-user' => 'Утилизатору',
 'filehist-dimensions' => 'Дименционс',
-'filehist-comment'    => 'коментарул',
-'imagelinks'          => 'Легајтул фиширул де медиа',
-'linkstoimage'        => 'Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:',
+'filehist-comment' => 'коментарул',
+'imagelinks' => 'Легајтул фиширул де медиа',
+'linkstoimage' => 'Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:',
 
 # Random page
 'randompage' => 'алаећу',
 
 # Miscellaneous special pages
-'nbytes'   => '$1 {{PLURAL:$1|бајтул|бајтулс}}',
+'nbytes' => '$1 {{PLURAL:$1|бајтул|бајтулс}}',
 'nmembers' => '$1 {{PLURAL:$1|мембру|мембри}}',
 'newpages' => 'Пажи нови',
 
@@ -246,46 +246,46 @@ $3',
 'booksources' => 'Сурсе де цајрћи',
 
 # Special:AllPages
-'allpages'       => 'Тоатс пажи',
+'allpages' => 'Тоатс пажи',
 'alphaindexline' => '$1 во $2',
-'allarticles'    => 'Тоат пажи',
+'allarticles' => 'Тоат пажи',
 'allpagessubmit' => 'Треме',
 
 # Watchlist
-'watchlist'   => 'Мај клајаеру',
+'watchlist' => 'Мај клајаеру',
 'mywatchlist' => 'Мај клајаере',
-'watch'       => 'клајаере',
-'unwatch'     => 'Деклајаера',
+'watch' => 'клајаере',
+'unwatch' => 'Деклајаера',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'О клајаере...',
+'watching' => 'О клајаере...',
 'unwatching' => 'О деклајаере...',
 
 # Rollback
 'rollbacklink' => 'ревенире',
 
 # Namespace form on various pages
-'namespace'      => 'лСпаћи:',
-'invert'         => 'Ќсклуда спаћул',
+'namespace' => 'лСпаћи:',
+'invert' => 'Ќсклуда спаћул',
 'blanknamespace' => '(Принципу)',
 
 # Contributions
 'contributions' => 'Контрибући дутилизатори',
-'mycontris'     => 'Мес контрибући',
-'contribsub2'   => 'пентру $1 ($2)',
-'uctop'         => '(сусверф)',
+'mycontris' => 'Мес контрибући',
+'contribsub2' => 'пентру $1 ($2)',
+'uctop' => '(сусверф)',
 
 'sp-contributions-talk' => 'дискућу',
 
 # What links here
-'whatlinkshere'       => 'Легајтул а це пажу',
+'whatlinkshere' => 'Легајтул а це пажу',
 'whatlinkshere-title' => 'Пажус легајтулент а $1',
-'nolinkshere'         => "Пажи не легајтент а '''[[:$1]]'''.",
-'istemplate'          => 'викулабе',
+'nolinkshere' => "Пажи не легајтент а '''[[:$1]]'''.",
+'istemplate' => 'викулабе',
 'whatlinkshere-links' => '← легајтулс',
 
 # Block/unblock
-'blocklink'    => 'блокуапаје',
+'blocklink' => 'блокуапаје',
 'contribslink' => 'контрибући',
 
 # Move page
@@ -295,41 +295,41 @@ $3',
 'export' => 'Ќспорта пажи',
 
 # Thumbnails
-'thumbnail-more'  => 'ќсинде',
+'thumbnail-more' => 'ќсинде',
 'thumbnail_error' => 'Еру вец лкреаре де тумбнел: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'       => 'Мој пажу дутилизатору',
-'tooltip-pt-mytalk'         => 'Мај пажу дискућус',
-'tooltip-pt-preferences'    => 'Мај префиренћу',
-'tooltip-pt-watchlist'      => 'Листа пажинилор пе царе ле мониторизез.',
-'tooltip-pt-mycontris'      => 'Листа де мес контрибуционс',
-'tooltip-pt-login'          => 'Путе приласнаере, не лест доист.',
-'tooltip-pt-logout'         => 'отластаере',
-'tooltip-ca-talk'           => 'Дискућие деспре артикол',
-'tooltip-ca-edit'           => 'Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.',
-'tooltip-ca-protect'        => 'Ажатме це пажу',
-'tooltip-ca-delete'         => 'Делајре це пажу',
-'tooltip-search'            => 'Каутај ен {{SITENAME}}',
-'tooltip-n-mainpage'        => 'Вижита лпажу принципу',
-'tooltip-n-portal'          => 'Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.',
-'tooltip-n-currentevents'   => 'Гајсеште информаћии деспре евениментиќ куренте',
-'tooltip-n-recentchanges'   => 'Листа дес шумбајрае рецентае ен лБики.',
-'tooltip-n-randompage'      => 'Донаре нпажу алаетоаре',
-'tooltip-n-help'            => 'Ајутор трувес иси.',
-'tooltip-t-whatlinkshere'   => 'Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај',
-'tooltip-t-contributions'   => 'Ву листа де контрибући де цутилизатору',
-'tooltip-t-upload'          => 'Тремер фиширул',
-'tooltip-t-specialpages'    => 'Листа де тоат пажи специалус',
-'tooltip-ca-nstab-user'     => 'Ву лпажу дутилизатору',
-'tooltip-ca-nstab-project'  => 'Ву лпажу де пројекту',
+'tooltip-pt-userpage' => 'Мој пажу дутилизатору',
+'tooltip-pt-mytalk' => 'Мај пажу дискућус',
+'tooltip-pt-preferences' => 'Мај префиренћу',
+'tooltip-pt-watchlist' => 'Листа пажинилор пе царе ле мониторизез.',
+'tooltip-pt-mycontris' => 'Листа де мес контрибуционс',
+'tooltip-pt-login' => 'Путе приласнаере, не лест доист.',
+'tooltip-pt-logout' => 'отластаере',
+'tooltip-ca-talk' => 'Дискућие деспре артикол',
+'tooltip-ca-edit' => 'Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.',
+'tooltip-ca-protect' => 'Ажатме це пажу',
+'tooltip-ca-delete' => 'Делајре це пажу',
+'tooltip-search' => 'Каутај ен {{SITENAME}}',
+'tooltip-n-mainpage' => 'Вижита лпажу принципу',
+'tooltip-n-portal' => 'Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.',
+'tooltip-n-currentevents' => 'Гајсеште информаћии деспре евениментиќ куренте',
+'tooltip-n-recentchanges' => 'Листа дес шумбајрае рецентае ен лБики.',
+'tooltip-n-randompage' => 'Донаре нпажу алаетоаре',
+'tooltip-n-help' => 'Ајутор трувес иси.',
+'tooltip-t-whatlinkshere' => 'Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај',
+'tooltip-t-contributions' => 'Ву листа де контрибући де цутилизатору',
+'tooltip-t-upload' => 'Тремер фиширул',
+'tooltip-t-specialpages' => 'Листа де тоат пажи специалус',
+'tooltip-ca-nstab-user' => 'Ву лпажу дутилизатору',
+'tooltip-ca-nstab-project' => 'Ву лпажу де пројекту',
 'tooltip-ca-nstab-category' => 'Ву лпажу де категориа',
-'tooltip-minoredit'         => 'Це-ест нмодификацион минару',
-'tooltip-save'              => 'Салваере тес модификационс',
-'tooltip-diff'              => 'Ратај це модификајри аи фајцут текстулуи.',
+'tooltip-minoredit' => 'Це-ест нмодификацион минару',
+'tooltip-save' => 'Салваере тес модификационс',
+'tooltip-diff' => 'Ратај це модификајри аи фајцут текстулуи.',
 
 # Media information
-'file-nohires'   => 'Це-н-ест нресолуцион маи мари.',
+'file-nohires' => 'Це-н-ест нресолуцион маи мари.',
 'show-big-image' => 'Мареште ресолуцион',
 
 # Bad image list
@@ -347,7 +347,7 @@ $3',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'тоат',
 'namespacesall' => 'тоат',
-'monthsall'     => 'тоат',
+'monthsall' => 'тоат',
 
 # Special:SpecialPages
 'specialpages' => 'Пажи спецалус',
index b17a0cf..d5e23a5 100644 (file)
@@ -20,225 +20,225 @@ $messages = array(
 'tog-underline' => 'Subliniaere legătuls:',
 
 # Dates
-'sun'           => 'Dum',
-'mon'           => 'Lun',
-'tue'           => 'Mar',
-'wed'           => 'Mie',
-'thu'           => 'Joi',
-'fri'           => 'Vin',
-'sat'           => 'Sam',
-'january'       => 'januari',
-'february'      => 'februari',
-'march'         => 'marti',
-'april'         => 'aprili',
-'may_long'      => 'mă',
-'june'          => 'juni',
-'july'          => 'juli',
-'august'        => 'august',
-'september'     => 'septembri',
-'october'       => 'oktombri',
-'november'      => 'nojembri',
-'december'      => 'decembri',
-'january-gen'   => 'januari',
-'february-gen'  => 'februari',
-'march-gen'     => 'marti',
-'april-gen'     => 'aprili',
-'may-gen'       => 'mai',
-'june-gen'      => 'juni',
-'july-gen'      => 'juli',
-'august-gen'    => 'august',
+'sun' => 'Dum',
+'mon' => 'Lun',
+'tue' => 'Mar',
+'wed' => 'Mie',
+'thu' => 'Joi',
+'fri' => 'Vin',
+'sat' => 'Sam',
+'january' => 'januari',
+'february' => 'februari',
+'march' => 'marti',
+'april' => 'aprili',
+'may_long' => 'mă',
+'june' => 'juni',
+'july' => 'juli',
+'august' => 'august',
+'september' => 'septembri',
+'october' => 'oktombri',
+'november' => 'nojembri',
+'december' => 'decembri',
+'january-gen' => 'januari',
+'february-gen' => 'februari',
+'march-gen' => 'marti',
+'april-gen' => 'aprili',
+'may-gen' => 'mai',
+'june-gen' => 'juni',
+'july-gen' => 'juli',
+'august-gen' => 'august',
 'september-gen' => 'septembri',
-'october-gen'   => 'oktombri',
-'november-gen'  => 'nojembri',
-'december-gen'  => 'decembri',
-'jan'           => 'jan',
-'feb'           => 'feb',
-'mar'           => 'mar',
-'apr'           => 'apr',
-'may'           => 'mai',
-'jun'           => 'jun',
-'jul'           => 'jul',
-'aug'           => 'aug',
-'sep'           => 'sep',
-'oct'           => 'okt',
-'nov'           => 'nov',
-'dec'           => 'dec',
+'october-gen' => 'oktombri',
+'november-gen' => 'nojembri',
+'december-gen' => 'decembri',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
 
 # Categories related messages
-'category_header'        => 'Pažus en kategoria "$1"',
-'subcategories'          => 'Subkategorii',
+'category_header' => 'Pažus en kategoria "$1"',
+'subcategories' => 'Subkategorii',
 'listingcontinuesabbrev' => 'kontinu',
 
-'about'  => 'Dajpul',
+'about' => 'Dajpul',
 'cancel' => 'renuntǎe',
 'mytalk' => 'Maj diskuţu',
 
-'errorpagetitle'   => 'Eru',
-'tagline'          => 'De {{SITENAME}}',
-'help'             => 'ajutor',
-'search'           => 'kaută',
-'searchbutton'     => 'kaută',
-'searcharticle'    => 'Lie',
-'history'          => 'Historia pažus',
+'errorpagetitle' => 'Eru',
+'tagline' => 'De {{SITENAME}}',
+'help' => 'ajutor',
+'search' => 'kaută',
+'searchbutton' => 'kaută',
+'searcharticle' => 'Lie',
+'history' => 'Historia pažus',
 'printableversion' => 'vercion printablu',
-'permalink'        => 'Legătul permanentul',
-'edit'             => 'Edita',
-'editthispage'     => 'Edita ce pažu',
-'delete'           => 'Delăre',
-'protect'          => 'Ažatme',
-'newpage'          => 'Paži novi',
+'permalink' => 'Legătul permanentul',
+'edit' => 'Edita',
+'editthispage' => 'Edita ce pažu',
+'delete' => 'Delăre',
+'protect' => 'Ažatme',
+'newpage' => 'Paži novi',
 'talkpagelinktext' => 'Diskuţu',
-'personaltools'    => 'Alatki personalu',
-'talk'             => 'Diskuţu',
-'views'            => 'Vi',
-'toolbox'          => 'alatunikul',
-'redirectedfrom'   => '(Redirecţionat de la $1)',
-'jumpto'           => 'Lia a:',
+'personaltools' => 'Alatki personalu',
+'talk' => 'Diskuţu',
+'views' => 'Vi',
+'toolbox' => 'alatunikul',
+'redirectedfrom' => '(Redirecţionat de la $1)',
+'jumpto' => 'Lia a:',
 'jumptonavigation' => 'navigacion',
-'jumptosearch'     => 'kaută',
+'jumptosearch' => 'kaută',
 
 # 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'            => 'Dajpul {{SITENAME}}',
-'aboutpage'            => 'Project:Dajpul {{SITENAME}}',
-'copyrightpage'        => "{{ns:project}}:Prava d'autoru",
-'currentevents'        => 'Tebikoru',
-'currentevents-url'    => 'Project:Tebikoru',
-'disclaimers'          => 'tǎmenuls',
-'disclaimerpage'       => 'Project:tǎmenul',
-'edithelp'             => 'Ajutor pentru editaere',
-'edithelppage'         => 'Help:Editaere',
-'helppage'             => 'Help:Ajutor',
-'mainpage'             => 'Pažu principu',
+'aboutsite' => 'Dajpul {{SITENAME}}',
+'aboutpage' => 'Project:Dajpul {{SITENAME}}',
+'copyrightpage' => "{{ns:project}}:Prava d'autoru",
+'currentevents' => 'Tebikoru',
+'currentevents-url' => 'Project:Tebikoru',
+'disclaimers' => 'tǎmenuls',
+'disclaimerpage' => 'Project:tǎmenul',
+'edithelp' => 'Ajutor pentru editaere',
+'edithelppage' => 'Help:Editaere',
+'helppage' => 'Help:Ajutor',
+'mainpage' => 'Pažu principu',
 'mainpage-description' => 'Pažu principu',
-'privacy'              => 'Politikmus de ližitul',
-'privacypage'          => 'Project:Politikmus de ližitul',
+'privacy' => 'Politikmus de ližitul',
+'privacypage' => 'Project:Politikmus de ližitul',
 
-'retrievedfrom'      => 'Aduse de "$1"',
+'retrievedfrom' => 'Aduse de "$1"',
 'youhavenewmessages' => 'Veses $1 ($2).',
-'newmessageslink'    => 'mesages noves',
-'editsection'        => 'Editaere',
-'editold'            => 'edita',
-'editsectionhint'    => 'Editaere ţisecion: $1',
-'toc'                => 'Kuprins',
-'showtoc'            => 'arată',
-'hidetoc'            => 'askunde',
-'site-rss-feed'      => '$1 RSS fitul',
-'site-atom-feed'     => '$1 Atom fitul',
-'page-rss-feed'      => '"$1" RSS Fitul',
-'page-atom-feed'     => '"$1" Atom Fitul',
+'newmessageslink' => 'mesages noves',
+'editsection' => 'Editaere',
+'editold' => 'edita',
+'editsectionhint' => 'Editaere ţisecion: $1',
+'toc' => 'Kuprins',
+'showtoc' => 'arată',
+'hidetoc' => 'askunde',
+'site-rss-feed' => '$1 RSS fitul',
+'site-atom-feed' => '$1 Atom fitul',
+'page-rss-feed' => '"$1" RSS Fitul',
+'page-atom-feed' => '"$1" Atom Fitul',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-user'     => "Pažu d'utilizatoru",
-'nstab-project'  => 'Projektu',
-'nstab-image'    => 'fişirul',
+'nstab-user' => "Pažu d'utilizatoru",
+'nstab-project' => 'Projektu',
+'nstab-image' => 'fişirul',
 'nstab-category' => 'kategoria',
 
 # General errors
 'viewsource' => 'Baganaere',
 
 # Login and logout pages
-'yourname'                => "Nom d'utilizatoru:",
-'login'                   => 'Prilasnaere',
+'yourname' => "Nom d'utilizatoru:",
+'login' => 'Prilasnaere',
 'nav-login-createaccount' => 'Prilasnaere / Nažbe',
-'userlogin'               => 'Prilasnaere / kreare nutilizatoru',
-'userlogout'              => 'otlastaere',
+'userlogin' => 'Prilasnaere / kreare nutilizatoru',
+'userlogout' => 'otlastaere',
 
 # Edit page toolbar
-'bold_sample'     => 'Eskrire aldin',
-'bold_tip'        => 'Eskrire aldin',
-'italic_sample'   => 'Eskrire kursive',
-'italic_tip'      => 'Eskrire kursive',
-'link_sample'     => "Nom s'legătuls",
-'link_tip'        => 'Legătul internul',
-'extlink_sample'  => "http://www.example.com nom s'legătuls",
-'extlink_tip'     => 'Legătul ķsternul (vec prefiks http://)',
+'bold_sample' => 'Eskrire aldin',
+'bold_tip' => 'Eskrire aldin',
+'italic_sample' => 'Eskrire kursive',
+'italic_tip' => 'Eskrire kursive',
+'link_sample' => "Nom s'legătuls",
+'link_tip' => 'Legătul internul',
+'extlink_sample' => "http://www.example.com nom s'legătuls",
+'extlink_tip' => 'Legătul ķsternul (vec prefiks http://)',
 'headline_sample' => "Eskrire s'titlus",
-'headline_tip'    => 'Titlu de nivel 2',
-'nowiki_sample'   => 'Intorduca no-Wiki isi',
-'nowiki_tip'      => 'No-Wiki klaşu',
-'image_tip'       => 'Santigul inserat',
-'media_tip'       => 'Legătul fişirul de media',
-'sig_tip'         => 'Utilizatorunom et data et temp',
-'hr_tip'          => 'Linia orizontala (esnidivale)',
+'headline_tip' => 'Titlu de nivel 2',
+'nowiki_sample' => 'Intorduca no-Wiki isi',
+'nowiki_tip' => 'No-Wiki klaşu',
+'image_tip' => 'Santigul inserat',
+'media_tip' => 'Legătul fişirul de media',
+'sig_tip' => 'Utilizatorunom et data et temp',
+'hr_tip' => 'Linia orizontala (esnidivale)',
 
 # Edit pages
-'summary'                => 'Sumar:',
-'subject'                => 'Subjekt / titlur:',
-'minoredit'              => 'Aceasta este o editare minoră',
-'watchthis'              => 'klăaere ce pažu',
-'showpreview'            => 'Rată previzualizare',
-'showdiff'               => 'Arată şumbărae',
-'newarticle'             => '(Nova)',
-'editing'                => 'o $1 editaere',
-'editingsection'         => 'Editaere $1 (sekcion)',
-'copyrightwarning'       => "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->
+'summary' => 'Sumar:',
+'subject' => 'Subjekt / titlur:',
+'minoredit' => 'Aceasta este o editare minoră',
+'watchthis' => 'klăaere ce pažu',
+'showpreview' => 'Rată previzualizare',
+'showdiff' => 'Arată şumbărae',
+'newarticle' => '(Nova)',
+'editing' => 'o $1 editaere',
+'editingsection' => 'Editaere $1 (sekcion)',
+'copyrightwarning' => "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->
 Te rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat supra $2 (suah $1 din detăs). Açteu nesav te se teksti sunt editaere denomerci det redistributaere din vent, hatae ici.<br /> Tu este nostre promisaere bonti us tu skrirste ce se, nega kopiaere din publik domen nega similari resorsua. '''NE SUBMITE KOPILEGRU SKRIE SAS PERMIŢION!'''",
-'template-protected'     => '(ažatmat)',
+'template-protected' => '(ažatmat)',
 'template-semiprotected' => '(semi-ažatmat)',
 
 # History pages
-'currentrev'       => 'Vercion kurentu',
-'revisionasof'     => 'Vercion de data $1',
+'currentrev' => 'Vercion kurentu',
+'revisionasof' => 'Vercion de data $1',
 'previousrevision' => '←Versiunea nterioară',
-'cur'              => 'aktualu',
-'last'             => 'precedente',
+'cur' => 'aktualu',
+'last' => 'precedente',
 
 # Diffs
-'history-title'           => 'Editaerehistoria pentru "$1"',
-'lineno'                  => 'Linia $1:',
+'history-title' => 'Editaerehistoria pentru "$1"',
+'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Kompara vercion selektus',
-'editundo'                => 'anulizăe',
+'editundo' => 'anulizăe',
 
 # Search results
-'viewprevnext'   => 'Vu ($1 {{int:pipe-separator}} $2) ($3)',
+'viewprevnext' => 'Vu ($1 {{int:pipe-separator}} $2) ($3)',
 'searchhelp-url' => 'Help:Ajutor',
-'powersearch'    => 'kaută avansata',
+'powersearch' => 'kaută avansata',
 
 # Preferences page
 'mypreferences' => 'Maj prefirenţu',
 
 # Recent changes
-'recentchanges'   => 'şumbărae recentae',
-'rcnote'          => "Mai hos se flă {{PLURAL:$|ultima modifikare|ultimele '''$1''' modifikări}} din {{PLURAL:$2|ultima zi|ultimele '''$2''' zile}}, encepând cu $5, $4.",
+'recentchanges' => 'şumbărae recentae',
+'rcnote' => "Mai hos se flă {{PLURAL:\$|ultima modifikare|ultimele '''\$1''' modifikări}} din {{PLURAL:\$2|ultima zi|ultimele '''\$2''' zile}}, encepând cu \$5, \$4.",
 'rcshowhideminor' => '$1 modifikările minore',
-'rcshowhidebots'  => '$1 roboti',
-'rcshowhideliu'   => '$1 utilizatori prilasnaeri',
+'rcshowhidebots' => '$1 roboti',
+'rcshowhideliu' => '$1 utilizatori prilasnaeri',
 'rcshowhideanons' => '$1 utilizatori anonimi',
-'rcshowhidemine'  => '$1 mes modifikacions',
-'rclinks'         => 'Rată ultimele $1 modifikări din ultimele $2 zile.<br />
+'rcshowhidemine' => '$1 mes modifikacions',
+'rclinks' => 'Rată ultimele $1 modifikări din ultimele $2 zile.<br />
 $3',
-'diff'            => 'diferenţu',
-'hist'            => 'historia',
-'hide'            => 'askunde',
-'show'            => 'Arată',
+'diff' => 'diferenţu',
+'hist' => 'historia',
+'hide' => 'askunde',
+'show' => 'Arată',
 'minoreditletter' => 'm',
-'newpageletter'   => 'N',
-'boteditletter'   => 'b',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Modifikări korelate',
-'recentchangeslinked-feed'    => 'Modifikări korelate',
+'recentchangeslinked' => 'Modifikări korelate',
+'recentchangeslinked-feed' => 'Modifikări korelate',
 'recentchangeslinked-toolbox' => 'Modifikări korelate',
 
 # Upload
 'upload' => 'trimiţe fişirul',
 
 # File description page
-'file-anchor-link'    => 'Fişirul',
-'filehist'            => 'Historia fişirulu',
-'filehist-current'    => 'kurentu',
-'filehist-datetime'   => 'Data/Temp',
-'filehist-user'       => 'Utilizatoru',
+'file-anchor-link' => 'Fişirul',
+'filehist' => 'Historia fişirulu',
+'filehist-current' => 'kurentu',
+'filehist-datetime' => 'Data/Temp',
+'filehist-user' => 'Utilizatoru',
 'filehist-dimensions' => 'Dimencions',
-'filehist-comment'    => 'komentarul',
-'imagelinks'          => 'Legătul fişirul de media',
-'linkstoimage'        => 'Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:',
+'filehist-comment' => 'komentarul',
+'imagelinks' => 'Legătul fişirul de media',
+'linkstoimage' => 'Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:',
 
 # Random page
 'randompage' => 'alaeţu',
 
 # Miscellaneous special pages
-'nbytes'   => '$1 {{PLURAL:$1|bătul|bătuls}}',
+'nbytes' => '$1 {{PLURAL:$1|bătul|bătuls}}',
 'nmembers' => '$1 {{PLURAL:$1|membru|membri}}',
 'newpages' => 'Paži novi',
 
@@ -246,46 +246,46 @@ $3',
 'booksources' => 'Surse de cărţi',
 
 # Special:AllPages
-'allpages'       => 'Toats paži',
+'allpages' => 'Toats paži',
 'alphaindexline' => '$1 vo $2',
-'allarticles'    => 'Toats paži',
+'allarticles' => 'Toats paži',
 'allpagessubmit' => 'Treme',
 
 # Watchlist
-'watchlist'   => 'Maj klăaeru',
+'watchlist' => 'Maj klăaeru',
 'mywatchlist' => 'Maj klăaere',
-'watch'       => 'klăaere',
-'unwatch'     => 'Deklăaera',
+'watch' => 'klăaere',
+'unwatch' => 'Deklăaera',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'O klăaere...',
+'watching' => 'O klăaere...',
 'unwatching' => 'O deklăaere...',
 
 # Rollback
 'rollbacklink' => 'revenire',
 
 # Namespace form on various pages
-'namespace'      => 'lSpaţi:',
-'invert'         => 'Ķskluda spaţul',
+'namespace' => 'lSpaţi:',
+'invert' => 'Ķskluda spaţul',
 'blanknamespace' => '(Principu)',
 
 # Contributions
 'contributions' => "Kontribuţi d'utilizatori",
-'mycontris'     => 'Mes kontribuţi',
-'contribsub2'   => 'Pentru $1 ($2)',
-'uctop'         => '(susverf)',
+'mycontris' => 'Mes kontribuţi',
+'contribsub2' => 'Pentru $1 ($2)',
+'uctop' => '(susverf)',
 
 'sp-contributions-talk' => 'Diskuţu',
 
 # What links here
-'whatlinkshere'       => 'Legǎtul a ce pažu',
+'whatlinkshere' => 'Legǎtul a ce pažu',
 'whatlinkshere-title' => 'Paži legǎtulent a $1',
-'nolinkshere'         => "Paži ne legǎtent a '''[[:$1]]'''.",
-'istemplate'          => 'vikulabe',
+'nolinkshere' => "Paži ne legǎtent a '''[[:$1]]'''.",
+'istemplate' => 'vikulabe',
 'whatlinkshere-links' => '← legătuls',
 
 # Block/unblock
-'blocklink'    => 'blokuapǎe',
+'blocklink' => 'blokuapǎe',
 'contribslink' => 'kontribuţi',
 
 # Move page
@@ -295,41 +295,41 @@ $3',
 'export' => 'Ķsporta paži',
 
 # Thumbnails
-'thumbnail-more'  => 'ķsinde',
+'thumbnail-more' => 'ķsinde',
 'thumbnail_error' => 'Eru vec kreare de thumbnail: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'       => "Moj pažu d'utilizatoru",
-'tooltip-pt-mytalk'         => 'Maj pažu diskuţus',
-'tooltip-pt-preferences'    => 'Maj prefirenţu',
-'tooltip-pt-watchlist'      => 'Lista pažinilor pe care le monitorizez.',
-'tooltip-pt-mycontris'      => 'Lista de mes kontribucions',
-'tooltip-pt-login'          => "Pute prilasnaere, ne l'est doist.",
-'tooltip-pt-logout'         => 'otlastaere',
-'tooltip-ca-talk'           => 'Diskuţie despre artikol',
-'tooltip-ca-edit'           => 'Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.',
-'tooltip-ca-protect'        => 'Ažatme ce pažu',
-'tooltip-ca-delete'         => 'Delăre ce pažu',
-'tooltip-search'            => 'Kaută en {{SITENAME}}',
-'tooltip-n-mainpage'        => "Visita l'pažu principu",
-'tooltip-n-portal'          => "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
-'tooltip-n-currentevents'   => 'Găseşte informaţii despre evenimentiķ kurente',
-'tooltip-n-recentchanges'   => "Lista des şumbǎrae recentae en l'wiki.",
-'tooltip-n-randompage'      => 'Donare npažu alaetoare',
-'tooltip-n-help'            => 'Ajutor truves isi.',
-'tooltip-t-whatlinkshere'   => 'Lista tuturor pažinilor wiki care konduc spre această pažină',
-'tooltip-t-contributions'   => "Vu lista de kontribuţi de c'utilizatoru",
-'tooltip-t-upload'          => 'Tremer fişirul',
-'tooltip-t-specialpages'    => 'Lista de toat paži specialus',
-'tooltip-ca-nstab-user'     => "Vu l'pažu d'utilizatoru",
-'tooltip-ca-nstab-project'  => "Vu l'pažu de projektu",
+'tooltip-pt-userpage' => "Moj pažu d'utilizatoru",
+'tooltip-pt-mytalk' => 'Maj pažu diskuţus',
+'tooltip-pt-preferences' => 'Maj prefirenţu',
+'tooltip-pt-watchlist' => 'Lista pažinilor pe care le monitorizez.',
+'tooltip-pt-mycontris' => 'Lista de mes kontribucions',
+'tooltip-pt-login' => "Pute prilasnaere, ne l'est doist.",
+'tooltip-pt-logout' => 'otlastaere',
+'tooltip-ca-talk' => 'Diskuţie despre artikol',
+'tooltip-ca-edit' => 'Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.',
+'tooltip-ca-protect' => 'Ažatme ce pažu',
+'tooltip-ca-delete' => 'Delăre ce pažu',
+'tooltip-search' => 'Kaută en {{SITENAME}}',
+'tooltip-n-mainpage' => "Visita l'pažu principu",
+'tooltip-n-portal' => "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
+'tooltip-n-currentevents' => 'Găseşte informaţii despre evenimentiķ kurente',
+'tooltip-n-recentchanges' => "Lista des şumbǎrae recentae en l'wiki.",
+'tooltip-n-randompage' => 'Donare npažu alaetoare',
+'tooltip-n-help' => 'Ajutor truves isi.',
+'tooltip-t-whatlinkshere' => 'Lista tuturor pažinilor wiki care konduc spre această pažină',
+'tooltip-t-contributions' => "Vu lista de kontribuţi de c'utilizatoru",
+'tooltip-t-upload' => 'Tremer fişirul',
+'tooltip-t-specialpages' => 'Lista de toat paži specialus',
+'tooltip-ca-nstab-user' => "Vu l'pažu d'utilizatoru",
+'tooltip-ca-nstab-project' => "Vu l'pažu de projektu",
 'tooltip-ca-nstab-category' => "Vu l'pažu de kategoria",
-'tooltip-minoredit'         => "ce-est n'modifikacion minoru",
-'tooltip-save'              => 'Salvaere tes modifikacions',
-'tooltip-diff'              => 'Rată ce modifikări ai făcut tekstului.',
+'tooltip-minoredit' => "ce-est n'modifikacion minoru",
+'tooltip-save' => 'Salvaere tes modifikacions',
+'tooltip-diff' => 'Rată ce modifikări ai făcut tekstului.',
 
 # Media information
-'file-nohires'   => "Ce-n-est n'resolucion mai mari.",
+'file-nohires' => "Ce-n-est n'resolucion mai mari.",
 'show-big-image' => 'Mareşte resolucion',
 
 # Bad image list
@@ -347,7 +347,7 @@ Orice legături ce urmează pe acenaşi linie sunt consideraete excepţii, dică
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'toat',
 'namespacesall' => 'toat',
-'monthsall'     => 'toat',
+'monthsall' => 'toat',
 
 # Special:SpecialPages
 'specialpages' => 'Paži specalus',
index deb7dee..e6a1910 100644 (file)
@@ -172,107 +172,107 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#पुनर्निदेशन', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__नैवअनुक्रमणी__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__नैवसंक्रमणका__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__अनुक्रमणीसचते__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__अनुक्रमणी__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__नैवसम्पादनविभाग__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__नैवमुख्यशिर्षक__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'अद्यमासे', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'अद्यमासेनाम', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'अद्यमासेनामसाधारण', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'अद्यमासेसंक्षीप्त', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'अद्यदिवसे', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'अद्यदिवसे२', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'अद्यदिवसेनाम', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'अद्यवर्ष', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'सद्यसमय', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'सद्यघण्टा', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'स्थानिकमासे', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'स्थानिकमासेनाम', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'स्थानिकमासेनामसाधारण', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'स्थानिकमासेसंक्षीप्त', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'स्थानिकदिवसे', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'स्थानिकदिवसे२', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'स्थानिकदिवसेनाम', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'स्थानिकवर्षे', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'स्थानिकसमये', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'स्थानिकघण्टा', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'पृष्ठानाम्‌सङ्ख्या', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'लेखस्य‌सङ्ख्या', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'संचिकानाम्‌‌सङ्ख्या', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'योजकस्यसङ्ख्या', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'सम्पादनसङ्ख्या', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'दृष्टिसङ्ख्या', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'पृष्ठनाम', 'PAGENAME' ),
-       'namespace'               => array( '1', 'नामविश्व', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'व्यासपिठ', 'TALKSPACE' ),
-       'subjectspace'            => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'पूर्णपृष्ठनाम', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'उपपृष्ठनाम', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'आधारपृष्ठनाम', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'संवादपृष्ठनाम', 'TALKPAGENAME' ),
-       'subjectpagename'         => array( '1', 'विषयपृष्ठनाम', 'लेखपृष्ठनाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'msg'                     => array( '0', 'सन्देश:', 'MSG:' ),
-       'msgnw'                   => array( '0', 'नूतनसन्देश:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'लघुत्तम', 'सङ्कुचितचित्र', 'अङ्गुष्ठ', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'सङ्कुचितचित्र=$1', 'अङ्गुष्ठ=$1', 'लघुत्तमचित्र=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'दक्षिणत', 'right' ),
-       'img_left'                => array( '1', 'वामतः', 'left' ),
-       'img_none'                => array( '1', 'नैव', 'none' ),
-       'img_width'               => array( '1', '$1पिट', '$1px' ),
-       'img_center'              => array( '1', 'मध्य', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'आबन्ध', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'निराबन्ध', 'frameless' ),
-       'img_page'                => array( '1', 'पृष्ठ=$1', 'पृष्ठ $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'उन्नत', 'उन्नत=$1', 'उन्नत $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'सीमा', 'border' ),
-       'img_baseline'            => array( '1', 'आधाररेखा', 'baseline' ),
-       'img_sub'                 => array( '1', 'विषये', 'sub' ),
-       'img_super'               => array( '1', 'अति', 'तीव्र', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'अग्र', 'top' ),
-       'img_text_top'            => array( '1', 'पाठ्य-अग्र', 'text-top' ),
-       'img_middle'              => array( '1', 'मध्ये', 'middle' ),
-       'img_bottom'              => array( '1', 'अधस', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'पाठ्य-अधस', 'text-bottom' ),
-       'img_link'                => array( '1', 'सम्बद्धं=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'विकल्प=$1', 'alt=$1' ),
-       'sitename'                => array( '1', 'स्थलनाम', 'SITENAME' ),
-       'grammar'                 => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
-       'notitleconvert'          => array( '0', '__नैवशिर्षकपरिवर्त__', '__नैशिप__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__नैवलेखपरिवर्त__', '__नैलेप__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'अद्यसप्ताह', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'स्थानिकसप्ताह', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'आवृत्तीक्रमांक', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'आवृत्तीदिवसे', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'आवृत्तीदिवसे२', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'आवृत्तीमासे', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'आवृत्तीवर्षे', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'आवृत्तीसमयमुद्रा', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'अनेकवचन:', 'PLURAL:' ),
-       'displaytitle'            => array( '1', 'प्रदर्शनशीर्षक', 'उपाधिदर्शन', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__नूतनविभागसम्बद्धं__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'अद्यआवृत्ती', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'सद्यसमयमुद्रा', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'स्थानिकसमयमुद्रा', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'दिशाचिह्न', 'दिशे', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#भाषा:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'विषयभाषा', 'आधेयभाषा', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'नामविश्वातपृष्ठ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'प्रचालकसंख्या', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'रचनासंख्या', 'FORMATNUM' ),
-       'special'                 => array( '0', 'विशेष', 'special' ),
-       'filepath'                => array( '0', 'संचिकापथ', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'वीजक', 'tag' ),
-       'hiddencat'               => array( '1', '__लुप्तवर्ग__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'वर्गेपृष्ठ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'पृष्ठाकार', 'PAGESIZE' ),
-       'index'                   => array( '1', '__अनुक्रमणिका__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__नैवअनुक्रमणिका__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'गणानामसंख्या', 'गणसंख्या', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__अनित्यपुनर्निदेशन__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'रक्षास्तर', 'PROTECTIONLEVEL' ),
+       'redirect'                  => array( '0', '#पुनर्निदेशन', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__नैवअनुक्रमणी__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__नैवसंक्रमणका__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__अनुक्रमणीसचते__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__अनुक्रमणी__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__नैवसम्पादनविभाग__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__नैवमुख्यशिर्षक__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'अद्यमासे', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'अद्यमासेनाम', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'अद्यमासेनामसाधारण', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'अद्यमासेसंक्षीप्त', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'अद्यदिवसे', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'अद्यदिवसे२', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'अद्यदिवसेनाम', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'अद्यवर्ष', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'सद्यसमय', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'सद्यघण्टा', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'स्थानिकमासे', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'स्थानिकमासेनाम', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'स्थानिकमासेनामसाधारण', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'स्थानिकमासेसंक्षीप्त', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'स्थानिकदिवसे', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'स्थानिकदिवसे२', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'स्थानिकदिवसेनाम', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'स्थानिकवर्षे', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'स्थानिकसमये', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'स्थानिकघण्टा', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'पृष्ठानाम्‌सङ्ख्या', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'लेखस्य‌सङ्ख्या', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'संचिकानाम्‌‌सङ्ख्या', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'योजकस्यसङ्ख्या', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'सम्पादनसङ्ख्या', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'दृष्टिसङ्ख्या', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'पृष्ठनाम', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'नामविश्व', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'व्यासपिठ', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'पूर्णपृष्ठनाम', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'उपपृष्ठनाम', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'आधारपृष्ठनाम', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'संवादपृष्ठनाम', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'विषयपृष्ठनाम', 'लेखपृष्ठनाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'msg'                       => array( '0', 'सन्देश:', 'MSG:' ),
+       'msgnw'                     => array( '0', 'नूतनसन्देश:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'लघुत्तम', 'सङ्कुचितचित्र', 'अङ्गुष्ठ', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'सङ्कुचितचित्र=$1', 'अङ्गुष्ठ=$1', 'लघुत्तमचित्र=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'दक्षिणत', 'right' ),
+       'img_left'                  => array( '1', 'वामतः', 'left' ),
+       'img_none'                  => array( '1', 'नैव', 'none' ),
+       'img_width'                 => array( '1', '$1पिट', '$1px' ),
+       'img_center'                => array( '1', 'मध्य', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'आबन्ध', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'निराबन्ध', 'frameless' ),
+       'img_page'                  => array( '1', 'पृष्ठ=$1', 'पृष्ठ $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'उन्नत', 'उन्नत=$1', 'उन्नत $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'सीमा', 'border' ),
+       'img_baseline'              => array( '1', 'आधाररेखा', 'baseline' ),
+       'img_sub'                   => array( '1', 'विषये', 'sub' ),
+       'img_super'                 => array( '1', 'अति', 'तीव्र', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'अग्र', 'top' ),
+       'img_text_top'              => array( '1', 'पाठ्य-अग्र', 'text-top' ),
+       'img_middle'                => array( '1', 'मध्ये', 'middle' ),
+       'img_bottom'                => array( '1', 'अधस', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'पाठ्य-अधस', 'text-bottom' ),
+       'img_link'                  => array( '1', 'सम्बद्धं=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'विकल्प=$1', 'alt=$1' ),
+       'sitename'                  => array( '1', 'स्थलनाम', 'SITENAME' ),
+       'grammar'                   => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
+       'notitleconvert'            => array( '0', '__नैवशिर्षकपरिवर्त__', '__नैशिप__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__नैवलेखपरिवर्त__', '__नैलेप__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'अद्यसप्ताह', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'स्थानिकसप्ताह', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'आवृत्तीक्रमांक', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'आवृत्तीदिवसे', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'आवृत्तीदिवसे२', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'आवृत्तीमासे', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'आवृत्तीवर्षे', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'आवृत्तीसमयमुद्रा', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'अनेकवचन:', 'PLURAL:' ),
+       'displaytitle'              => array( '1', 'प्रदर्शनशीर्षक', 'उपाधिदर्शन', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__नूतनविभागसम्बद्धं__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'अद्यआवृत्ती', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'सद्यसमयमुद्रा', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'स्थानिकसमयमुद्रा', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'दिशाचिह्न', 'दिशे', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#भाषा:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'विषयभाषा', 'आधेयभाषा', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'नामविश्वातपृष्ठ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'प्रचालकसंख्या', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'रचनासंख्या', 'FORMATNUM' ),
+       'special'                   => array( '0', 'विशेष', 'special' ),
+       'filepath'                  => array( '0', 'संचिकापथ', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'वीजक', 'tag' ),
+       'hiddencat'                 => array( '1', '__लुप्तवर्ग__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'वर्गेपृष्ठ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'पृष्ठाकार', 'PAGESIZE' ),
+       'index'                     => array( '1', '__अनुक्रमणिका__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__नैवअनुक्रमणिका__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'गणानामसंख्या', 'गणसंख्या', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__अनित्यपुनर्निदेशन__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'रक्षास्तर', 'PROTECTIONLEVEL' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -597,12 +597,12 @@ $1',
 # General errors
 'error' => 'दोषः',
 'databaseerror' => 'दत्ताधारे दोषः',
-'dberrortext' => 'समंकाधार पृच्छायां वाक्यरचना त्रुटिरेका अभवत्।
+'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"
@@ -679,7 +679,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''भवान् अधुना बहिरागतः ।'''
 
-भवान् {{SITENAME}} इत्येतत् अनामतया प्रयोक्तुं शक्नोति, अथवा भवान् तेनैव प्रयोक्तृनाम्ना, भिन्नप्रयोक्तृनाम्ना वा  [[Special:UserLogin|पुनः प्रवेष्टुं शक्नोति]]
+भवान् {{SITENAME}} इत्येतत् अनामतया प्रयोक्तुं शक्नोति, अथवा भवान् तेनैव प्रयोक्तृनाम्ना, भिन्नप्रयोक्तृनाम्ना वा  <span class='plainlinks'>[$1 पुनः प्रवेष्टुं शक्नोति]</span>
 इदानीमपि कानिचन पृष्ठानि पूर्ववदेव दृश्येरन् । अस्य वारणाय विचरकस्य स्मृतिसञ्चयः रिक्तीक्रियताम् ।",
 'welcomecreation' => '==स्वागतम्‌, $1!==
 भवता सदस्यता प्राप्ता अस्ति।
@@ -946,7 +946,11 @@ $2
 'userpage-userdoesnotexist-view' => '"$1" इति प्रयोक्तृलेखा पञ्जीकृता नास्ति।',
 'blocked-notice-logextract' => 'अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।
 नूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:',
-'clearyourcache' => "'''सूचनाः'''",
+'clearyourcache' => "'''सूचनाः:''' संरक्षणानन्तरं परिवर्तनानां दर्शनाय जालगवेशकस्य पुनर्चालनम् अवश्यं भवेत् ।
+* '''Firefox / Safari:''' गृह्यताम् ''Shift'' नोदनावसरे ''Reload'', अथवा एतयोः अन्यतरं नुद्यताम् ''Ctrl-F5'' अथवा ''Ctrl-R'' (''⌘-R'' on a Mac)
+* '''Google Chrome:''' नुद्यताम् ''Ctrl-Shift-R'' (''⌘-Shift-R'' on a Mac)
+* '''Internet Explorer:''' गृह्यताम् ''Ctrl'' नोदनावसरे ''Refresh'', अथवा नुद्यताम् ''Ctrl-F5''
+* '''Opera:''' पुनर्चाल्यताम् ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'userjsyoucanpreview' => "'''सूचना :''' रक्षणात्पूर्वं स्वकीयं जावास्क्रिप्ट् इति लिपिं परीक्षितुं \"{{int:showpreview}}\" इति गण्डं प्रयोजयतु।",
 'usercsspreview' => "'''मनसि धारयतु यद्भवान् केवलं प्राग्दृश्यं पश्यति स्वकीयस्य प्रयोक्तृ-सीएसएस् इत्येतस्य'''
@@ -1269,8 +1273,6 @@ You can still [$1 view this revision]",
 'search-interwiki-caption' => 'बन्धु-प्रकल्पाः',
 'search-interwiki-default' => '$1 परिणामाः :',
 'search-interwiki-more' => '(अधिकानि)',
-'search-mwsuggest-enabled' => 'उपक्षेपेभ्यः सह',
-'search-mwsuggest-disabled' => 'नात्र उपक्षेपाः',
 'search-relatedarticle' => 'सम्बद्धानि ।',
 'mwsuggest-disable' => 'निष्क्रियाः AJAX सूचनाः ।',
 'searcheverything-enable' => 'सर्वनामावकाशे अन्विषतु ।',
@@ -1917,6 +1919,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'uploadnewversion-linktext' => 'अस्य पृष्ठस्य नूतनाम् आवृत्तिं उद्भारयतु',
 'shared-repo-from' => '$1 इत्यस्मात् ।',
 'shared-repo' => 'विभक्तः कोशः ।',
+'upload-disallowed-here' => 'दुरदृष्टवशात् अस्य चित्रस्य उपरि पुनर्लेखनम् अशक्यम् ।',
 
 # File reversion
 'filerevert' => '$1 अनुवर्तताम् ।',
@@ -2026,6 +2029,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|बैट्|बैट्स्}}',
 'ncategories' => '{{PLURAL:$1|वर्गः|वर्गाः }}',
+'ninterwikis' => '$1 {{PLURAL:$1|अन्तार्विकी|अन्तार्विक्यः}}',
 'nlinks' => '$1 {{PLURAL:$1|अनुबन्धः|अनुबन्धाः}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्यः|सदस्याः}}',
 'nrevisions' => '$1 {{PLURAL:$1|पुनरावृत्तिः}}',
@@ -2054,6 +2058,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'mostlinkedtemplates' => 'प्राकृतिभिः अत्यनुबद्धाः ।',
 'mostcategories' => 'बहुवर्गयुक्तपुटानि ।',
 'mostimages' => 'अत्यनुबद्धानि पुटानि ।',
+'mostinterwikis' => 'अधिकान्तार्विकियुक्ताः पृष्ठाः',
 'mostrevisions' => 'सर्वाधिकपुनरावृत्तियुक्तानि पुटानि ।',
 'prefixindex' => 'उपसर्गयुक्तानि सर्वाणि पृष्ठानि',
 'prefixindex-namespace' => 'उपसर्गैः युक्तानि सर्वपुटानि । ($1 नामस्थानम्)',
@@ -2198,6 +2203,8 @@ See 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' => 'अस्मै योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । 
 [[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।',
@@ -2851,7 +2858,6 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # JavaScriptTest
 'javascripttest' => 'जावालिपिपरीक्षणम् ।',
-'javascripttest-disabled' => 'विक्याम् अयं क्रियाकलापः निष्क्रियः ।',
 'javascripttest-title' => '$1 परीक्षाप्रचलति ।',
 'javascripttest-pagetext-noframework' => 'जावलिपिचालनपरीक्षार्थम् एतत्पुटम् आरक्षितम् ।',
 'javascripttest-pagetext-unknownframework' => 'अज्ञातपरीक्षाप्रक्रिया  $1',
@@ -2958,11 +2964,33 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # 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' => 'पृष्ठाभिज्ञापकम्',
+'pageinfo-robot-policy' => 'चालकयन्त्रस्थितिः अन्विष्यताम्',
+'pageinfo-robot-index' => 'अङ्कनयोग्यम्',
+'pageinfo-robot-noindex' => 'अङ्कनायोग्यम्',
 'pageinfo-views' => 'अवलोकनानां सङ्ख्या ।',
-'pageinfo-watchers' => 'अवलोकनानां सङ्ख्या ।',
-'pageinfo-edits' => 'सम्पादननां सङ्ख्या ।',
-'pageinfo-authors' => 'स्पष्टानां कर्तॄणां सङ्ख्या ।',
+'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)',
 
 # Skin names
 'skinname-standard' => 'पूर्व',
@@ -3012,6 +3040,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 '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',
 'show-big-image' => 'पूर्णं विभेदनम्',
 'show-big-image-preview' => 'अस्य पूर्वावलोकनस्य आकारः : $1',
 'show-big-image-other' => 'अन्याः {{PLURAL:$2| प्रस्तवः|प्रस्तावाः}}:  $1 ।',
@@ -3021,6 +3050,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 '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' => 'नूतन-संचिकानां वीथिका',
@@ -3804,6 +3835,10 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'feedback-bugcheck' => 'उत्तमम् परिशीलयतु यत्  [ $1 known bugs] पूर्वमेव नासीत् इति ।',
 'feedback-bugnew' => 'अहं परीक्षितवान् ।  नूतनदोषं सूचयतु ।',
 
+# Search suggestions
+'searchsuggest-search' => 'अन्वेषणम्',
+'searchsuggest-containing' => 'विद्यन्ते......',
+
 # API errors
 'api-error-badaccess-groups' => 'भवान् अस्यां वीक्यां सञ्चिकाः उत्तारयितुम् नानुमतः ।',
 'api-error-badtoken' => 'आन्तरिकदोषः : दुष्टप्रतीकः ।',
index 85812d3..be7b5d0 100644 (file)
@@ -308,6 +308,7 @@ $1',
 'newmessagesdifflink' => 'кэлиҥҥи уларытыы',
 'youhavenewmessagesfromusers' => 'Маны $1 {{PLURAL:$3|соҕотох кыттааччыттан|$3 кыттааччыттан}} туппуккун ($2).',
 'youhavenewmessagesmanyusers' => 'Маны $1 элбэх кыттааччыттан туппуккун ($2).',
+'newmessagesdifflinkplural' => 'тиһэх {{PLURAL:$1|уларытыы|уларытыылар}}',
 'youhavenewmessagesmulti' => '$1, саҥа суруктар кэллилэр',
 'editsection' => 'уларыт',
 'editold' => 'уларыт',
@@ -443,7 +444,7 @@ $2',
 'logouttext' => "'''Эн тиһиликтэн таҕыстыҥ.'''
 
 {{SITENAME}} ситим-сиргэ билигин урукку ааккынан буолбакка IP-аадырыһынан эрэ көстөҕүн.
-Салгыы ааккын ааттаабакка үлэлиэххин сөп, эбэтэр саҥаттан урукку ааккынан дуу, атын аатынан дуу [[Special:UserLogin|киириэххин]] сөп.
+Салгыы ааккын ааттаабакка үлэлиэххин сөп, эбэтэр саҥаттан урукку ааккынан дуу, атын аатынан дуу <span class='plainlinks'>[$1 киириэххин]</span> сөп.
 Сорох сирэйдэр өссө даҕаны эйигин урукку ааккынан көрдөрүөхтэрин сөп, ону суох гыныаххын баҕардаххына интэриниэт көрдөрөөччүҥ кээһин ыраастаа.",
 'welcomecreation' => '== Нөрүөн нөргүй, $1! ==
 Эн манна бэлиэтэнниҥ.
@@ -704,8 +705,8 @@ 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>',
+Бу [[Special:Search/{{PAGENAME}}|ааты атын сирэйдэргэ көрдөөн көрүөххүн]] сөп,
+эбэтэр <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} сурунаалларга манна сыһыаннаах суруктары булуоххун сөп].</span> Бу сирэйи айар кыаҕыҥ суох.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" аат бэлиэтэммэтэх. Бу сирэйи оҥорор/уларытар баҕалааххын дуо?',
 'userpage-userdoesnotexist-view' => '"$1" кыттааччы аата бэлиэтэниллибэтэх.',
 'blocked-notice-logextract' => 'Бу кыттааччы билигин бобуллубут.
@@ -1058,8 +1059,6 @@ $1",
 'search-interwiki-caption' => 'Уруулуу бырайыактар',
 'search-interwiki-default' => '$1 түмүгэ:',
 'search-interwiki-more' => '(өссө)',
-'search-mwsuggest-enabled' => 'этиилэрдээх',
-'search-mwsuggest-disabled' => 'этиилэрэ суох',
 'search-relatedarticle' => 'Сигэнэр',
 'mwsuggest-disable' => 'AJAX этэн биэриилэрин араар',
 'searcheverything-enable' => 'Туох баар аат далларыгар көрдөөһүн',
@@ -2665,7 +2664,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript тургутуу',
-'javascripttest-disabled' => 'Дьайыы бу биикигэ араарыллыбат эбит.',
 'javascripttest-title' => '$1 тургутуу бара турар',
 'javascripttest-pagetext-noframework' => 'Бу сирэй JavaScript тургутууларга анаммыт.',
 'javascripttest-pagetext-unknownframework' => '"$1" тургутуу биллибэт эйгэтэ.',
@@ -3630,6 +3628,10 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'feedback-bugcheck' => 'Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.',
 'feedback-bugnew' => 'Мин тургуттум. Атын алҕас туһунан',
 
+# Search suggestions
+'searchsuggest-search' => 'Көрдөөһүн',
+'searchsuggest-containing' => 'тыл баар ыстатыйалара...',
+
 # API errors
 'api-error-badaccess-groups' => 'Эн бу биикигэ билэ киллэрэриҥ хааччахтаммыт.',
 'api-error-badtoken' => 'Ис алҕас: Омсолоох токен.',
index 560516f..5e034bc 100644 (file)
@@ -392,7 +392,7 @@ Podet èsser stadu burradu dae calicunu àteru.',
 # Login and logout pages
 'logouttext' => "'''As acabadu sa sessione.'''
 
-Immoe podes sighire a impreare {{SITENAME}} in forma anònima, o ti podes [[Special:UserLogin|identificare torra]] comente su de prima o comente usuàriu diferente.
+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.
@@ -650,8 +650,6 @@ Cosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente
 'search-interwiki-caption' => 'Progetos frades',
 'search-interwiki-default' => '$1 resurtados:',
 'search-interwiki-more' => '(àteru)',
-'search-mwsuggest-enabled' => 'cun impostos',
-'search-mwsuggest-disabled' => 'chentza impostos',
 'searcheverything-enable' => 'Chirca in totu is nùmene-logos:',
 'searchall' => 'totu',
 'showingresults' => "Inoghe sighende {{PLURAL:$1|benit ammustradu '''1''' resurtadu|benint ammustrados '''$1''' resurtados}} incumentzende dae su nùmeru '''$2'''.",
@@ -1560,4 +1558,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',
 
+# Search suggestions
+'searchsuggest-search' => 'Chirca',
+
 );
index a74b896..64ad9bb 100644 (file)
@@ -520,7 +520,7 @@ La mutivazzioni è chista: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Nisciuta. Ora siti fora.'''
 
-Poi cuntinuari a usari {{SITENAME}} di manera anònima, o poi [[Special:UserLogin|tràsiri n'àutra vota]] cu lu stissu o cu n'àutru nomu d'utenti.
+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! ==
 
@@ -950,6 +950,7 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 
 # Diffs
 'history-title' => 'Crunoluggìa dî canciamenti di "$1"',
+'difference-title' => '$1: diffirenzi ntra li virsiuni',
 'lineno' => 'Lìnia $1:',
 'compareselectedversions' => 'Fari lu paraguni',
 'showhideselectedversions' => 'Ammustra/ammuccia virsioni silizziunati',
@@ -996,8 +997,6 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 'search-interwiki-caption' => 'Pruggetti frati',
 'search-interwiki-default' => 'Risultati da $1:',
 'search-interwiki-more' => '(cchiù)',
-'search-mwsuggest-enabled' => 'cu suggirimenti',
-'search-mwsuggest-disabled' => 'senza suggirimenti',
 'search-relatedarticle' => 'Risultati currilati',
 'mwsuggest-disable' => 'Astuta suggirimenti AJAX',
 'searcheverything-enable' => 'Cerca ni tutti li namespace',
@@ -2986,6 +2985,9 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 'logentry-newusers-create' => '$1 criau na utenza',
 'newuserlog-byemail' => 'password mannata via mail',
 
+# Search suggestions
+'searchsuggest-search' => 'Ricerca',
+
 # API errors
 'api-error-nomodule' => 'Erruri nternu: nun fu mpustatu lu mòdulu di carricamentu',
 'api-error-ok-but-empty' => 'Erruri ntenru: nudda risposta dû server',
index 95939d5..6ad83e2 100644 (file)
@@ -731,8 +731,6 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F
 'search-section' => '(section $1)',
 'search-suggest' => 'Did ye mean: $1',
 'search-interwiki-more' => '(more)',
-'search-mwsuggest-enabled' => 'wi suggestions',
-'search-mwsuggest-disabled' => 'nae propone',
 'searchrelated' => 'related',
 'searchall' => 'aw',
 'showingresults' => "Shawin ablo up tae {{PLURAL:$1|'''1''' result|'''$1''' results}} stertin wi #'''$2'''.",
index 298fd95..13f0764 100644 (file)
@@ -104,55 +104,55 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#چوريو', '#REDIRECT' ),
-       'localmonth'              => array( '1', 'مقاميمهينو', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'مقاميمهينونالو', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'مقاميڏينهن', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'مقاميڏينهن2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'مقاميڏينهننالو', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'مقاميسال', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'مقاميوقت', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'مقاميڪلاڪ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'صفحنجوتعداد', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'مضموننجوتعداد', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'فائيلنجوتعداد', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'يوزرسجوتعداد', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'ترميمنجوتعداد', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'صفحيجوعنوان', 'PAGENAME' ),
-       'namespace'               => array( '1', 'نانئپولار', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'بحثپولار', 'TALKSPACE' ),
-       'subjectspace'            => array( '1', 'مضمونپولار', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'صحفيجوپورونالو', 'FULLPAGENAME' ),
-       'msg'                     => array( '0', 'نياپو:', 'MSG:' ),
-       'img_right'               => array( '1', 'ساڄو', 'right' ),
-       'img_left'                => array( '1', 'کاٻو', 'left' ),
-       'img_none'                => array( '1', 'ڪجهنه', 'none' ),
-       'img_width'               => array( '1', '$1 عڪسلون', '$1px' ),
-       'img_center'              => array( '1', 'مرڪز', 'center', 'centre' ),
-       'img_top'                 => array( '1', 'سِرُ', 'top' ),
-       'img_middle'              => array( '1', 'وچ', 'middle' ),
-       'img_bottom'              => array( '1', 'تَرُ', 'bottom' ),
-       'sitename'                => array( '1', 'سرزميننالو', 'SITENAME' ),
-       'ns'                      => array( '0', 'نپ', 'NS:' ),
-       'localurl'                => array( '0', 'مقامييوآريل', 'LOCALURL:' ),
-       'grammar'                 => array( '0', 'وياڪرڻ', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'هلندڙهفتو', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'اڄوڪوڏينهن', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'مقاميهفتو', 'LOCALWEEK' ),
-       'plural'                  => array( '0', 'جمع', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'مڪمليوآريل', 'FULLURL:' ),
-       'currenttimestamp'        => array( '1', 'هلندڙوقتمهر', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'مقاميوقتمهر', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'طرفنشان', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#ٻولي:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'موادٻولي', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'نپ۾صفحا', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'منتظمينجوتعداد', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'خاص', 'special' ),
-       'filepath'                => array( '0', 'فائيلڏس', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__ لڪل زمرو __', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'زمريجاصفحا', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'صفحيجيماپ', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#چوريو', '#REDIRECT' ),
+       'localmonth'                => array( '1', 'مقاميمهينو', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'مقاميمهينونالو', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'مقاميڏينهن', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'مقاميڏينهن2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'مقاميڏينهننالو', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'مقاميسال', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'مقاميوقت', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'مقاميڪلاڪ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'صفحنجوتعداد', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'مضموننجوتعداد', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'فائيلنجوتعداد', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'يوزرسجوتعداد', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'ترميمنجوتعداد', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'صفحيجوعنوان', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'نانئپولار', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'بحثپولار', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'مضمونپولار', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'صحفيجوپورونالو', 'FULLPAGENAME' ),
+       'msg'                       => array( '0', 'نياپو:', 'MSG:' ),
+       'img_right'                 => array( '1', 'ساڄو', 'right' ),
+       'img_left'                  => array( '1', 'کاٻو', 'left' ),
+       'img_none'                  => array( '1', 'ڪجهنه', 'none' ),
+       'img_width'                 => array( '1', '$1 عڪسلون', '$1px' ),
+       'img_center'                => array( '1', 'مرڪز', 'center', 'centre' ),
+       'img_top'                   => array( '1', 'سِرُ', 'top' ),
+       'img_middle'                => array( '1', 'وچ', 'middle' ),
+       'img_bottom'                => array( '1', 'تَرُ', 'bottom' ),
+       'sitename'                  => array( '1', 'سرزميننالو', 'SITENAME' ),
+       'ns'                        => array( '0', 'نپ', 'NS:' ),
+       'localurl'                  => array( '0', 'مقامييوآريل', 'LOCALURL:' ),
+       'grammar'                   => array( '0', 'وياڪرڻ', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'هلندڙهفتو', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'اڄوڪوڏينهن', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'مقاميهفتو', 'LOCALWEEK' ),
+       'plural'                    => array( '0', 'جمع', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'مڪمليوآريل', 'FULLURL:' ),
+       'currenttimestamp'          => array( '1', 'هلندڙوقتمهر', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'مقاميوقتمهر', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'طرفنشان', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ٻولي:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'موادٻولي', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'نپ۾صفحا', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'منتظمينجوتعداد', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'خاص', 'special' ),
+       'filepath'                  => array( '0', 'فائيلڏس', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__ لڪل زمرو __', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'زمريجاصفحا', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'صفحيجيماپ', 'PAGESIZE' ),
 );
 
 $messages = array(
index 80a7268..41b4096 100644 (file)
@@ -790,8 +790,6 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 'search-interwiki-caption' => 'Prugetti fraddeddi',
 'search-interwiki-default' => 'Risulthaddi da $1:',
 'search-interwiki-more' => '(althru)',
-'search-mwsuggest-enabled' => 'cun suggerimenti',
-'search-mwsuggest-disabled' => 'chena suggerimenti',
 'search-relatedarticle' => 'Risulthaddi curriraddi',
 'searchrelated' => 'curriraddi',
 'searchall' => 'tutti',
index aefd19b..b072a32 100644 (file)
@@ -20,7 +20,7 @@
 
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Doaimmat',
+       NS_SPECIAL          => 'Erenoamáš',
        NS_TALK             => 'Ságastallan',
        NS_USER             => 'Geavaheaddji',
        NS_USER_TALK        => 'Geavaheaddjeságastallan',
@@ -37,6 +37,10 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Kategoriijaságastallan',
 );
 
+$namespaceAliases = array(
+       'Doaimmat' => NS_SPECIAL,
+);
+
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktiivvalaš_geavaheaddjit' ),
        'Allmessages'               => array( 'Buot_systemasánit' ),
@@ -48,6 +52,7 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Geavaheaddji_rievdadusat' ),
        'Disambiguations'           => array( 'Liŋkkat_dárkonsiidduide' ),
        'DoubleRedirects'           => array( 'Guoktegeardásaš_ođđasitstivremat' ),
+       'Emailuser'                 => array( 'SáddeEpoastta' ),
        'Export'                    => array( 'Olggosfievrrit_siidduid' ),
        'Listfiles'                 => array( 'Fiilalogahallan' ),
        'Listredirects'             => array( 'Listu_ođđasitstivremiin' ),
@@ -83,8 +88,8 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OĐĐASITSTIVREN', '#STIVREN', '#REDIRECT' ),
-       'numberofarticles'        => array( '1', 'ARTIHKKALIIDMEARRI', 'NUMBEROFARTICLES' ),
+       'redirect'                  => array( '0', '#OĐĐASITSTIVREN', '#STIVREN', '#REDIRECT' ),
+       'numberofarticles'          => array( '1', 'ARTIHKKALIIDMEARRI', 'NUMBEROFARTICLES' ),
 );
 
 $linkTrail = '/^(:?[a-zàáâçčʒǯđðéèêëǧǥȟíìîïıǩŋñóòôõßšŧúùûýÿüžþæøåäö]+)(.*)$/sDu';
@@ -120,7 +125,6 @@ $messages = array(
 'tog-watchlisthideown' => 'Čiega mu iežan rievdadusaid',
 'tog-watchlisthidebots' => 'Čiega bot-prográmmaid rievdadusaid',
 'tog-watchlisthideminor' => 'Čiega unna rievdadusaid',
-'tog-nolangconversion' => 'Ále daga rievdadusaid giellavariánttaid gaskal',
 'tog-ccmeonemails' => 'Sádde munnje kopiija e-poasttain, maid sádden eará geavaheddjiide',
 
 'underline-always' => 'Álo',
@@ -1442,4 +1446,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'logentry-newusers-create' => '$1 ráhkadii dovddaldaga',
 'logentry-newusers-autocreate' => 'Dovddaldat $1 ráhkaduvvui automáhtalaččat',
 
+# Search suggestions
+'searchsuggest-search' => 'Oza',
+
 );
index 84e9ed3..a0cff5a 100644 (file)
@@ -15,237 +15,237 @@ $fallback = 'fr';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Gbënëngö-gbê',
-'tog-justify'                 => 'Lôngbi yângâ tî âsurä',
-'tog-hideminor'               => 'Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû',
-'tog-hidepatrolled'           => 'Hônde âlönzïngö-sû sô asï  na hönngö na yâ tî gbâsû',
-'tog-newpageshidepatrolled'   => 'Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.',
-'tog-extendwatchlist'         => 'Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.',
-'tog-usenewrc'                => 'Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)',
-'tog-numberheadings'          => 'Sû nömörö bîakü bîakü na terê tî âlisurä',
-'tog-showtoolbar'             => 'Fa motarâka tî sepesû (ahûnda Javascript)',
-'tog-editondblclick'          => 'Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)',
-'tog-editsection'             => 'Zîngo sëpengö surä na gbê "[Sepe]"',
+'tog-underline' => 'Gbënëngö-gbê',
+'tog-justify' => 'Lôngbi yângâ tî âsurä',
+'tog-hideminor' => 'Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû',
+'tog-hidepatrolled' => 'Hônde âlönzïngö-sû sô asï  na hönngö na yâ tî gbâsû',
+'tog-newpageshidepatrolled' => 'Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.',
+'tog-extendwatchlist' => 'Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.',
+'tog-usenewrc' => 'Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)',
+'tog-numberheadings' => 'Sû nömörö bîakü bîakü na terê tî âlisurä',
+'tog-showtoolbar' => 'Fa motarâka tî sepesû (ahûnda Javascript)',
+'tog-editondblclick' => 'Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)',
+'tog-editsection' => 'Zîngo sëpengö surä na gbê "[Sepe]"',
 'tog-editsectiononrightclick' => 'Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)',
-'tog-showtoc'                 => 'Fa molongö tî münä (tî âlêmbëtï sô ayeke na surä otâ)',
-'tog-rememberpassword'        => 'Da bê na sênyîmbâ tî mbï (asï {{PLURAL:$1|längö|längö}}) $1',
-'tog-watchcreations'          => 'Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
-'tog-watchdefault'            => 'Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
-'tog-watchmoves'              => 'Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
-'tog-watchdeletion'           => 'Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
-'tog-minordefault'            => 'Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû',
-'tog-previewontop'            => 'Tanda piabängö-nî na ndöbê tî zuka tî sepesû',
-'tog-previewonfirst'          => 'Fa piabängö kôzo sepesû',
-'tog-nocache'                 => 'Zî höndëngö-lêmbëtï na kpëlidimbä',
-'tog-enotifwatchlistpages'    => '¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.',
-'tog-enotifusertalkpages'     => 'To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï',
-'tog-enotifminoredits'        => 'To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.',
-'tog-enotifrevealaddr'        => 'Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo',
-'tog-shownumberswatching'     => 'Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô',
-'tog-oldsig'                  => 'Këkërë sô ayeke daä awe:',
-'tog-fancysig'                => 'Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)',
-
-'underline-always'  => 'Lâkûê',
-'underline-never'   => 'Lâ ôko pëpe',
+'tog-showtoc' => 'Fa molongö tî münä (tî âlêmbëtï sô ayeke na surä otâ)',
+'tog-rememberpassword' => 'Da bê na sênyîmbâ tî mbï (asï {{PLURAL:$1|längö|längö}}) $1',
+'tog-watchcreations' => 'Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
+'tog-watchdefault' => 'Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
+'tog-watchmoves' => 'Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
+'tog-watchdeletion' => 'Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.',
+'tog-minordefault' => 'Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû',
+'tog-previewontop' => 'Tanda piabängö-nî na ndöbê tî zuka tî sepesû',
+'tog-previewonfirst' => 'Fa piabängö kôzo sepesû',
+'tog-nocache' => 'Zî höndëngö-lêmbëtï na kpëlidimbä',
+'tog-enotifwatchlistpages' => '¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.',
+'tog-enotifusertalkpages' => 'To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï',
+'tog-enotifminoredits' => 'To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.',
+'tog-enotifrevealaddr' => 'Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo',
+'tog-shownumberswatching' => 'Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô',
+'tog-oldsig' => 'Këkërë sô ayeke daä awe:',
+'tog-fancysig' => 'Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)',
+
+'underline-always' => 'Lâkûê',
+'underline-never' => 'Lâ ôko pëpe',
 'underline-default' => 'Ketîa ngbondö tî kpëlisimbä',
 
 # Font style option in Special:Preferences
-'editfont-style'     => 'Fasöon tî gbâgerêsû tî sepesû nî',
-'editfont-default'   => 'Ketîa tî kpëlitondo',
+'editfont-style' => 'Fasöon tî gbâgerêsû tî sepesû nî',
+'editfont-default' => 'Ketîa tî kpëlitondo',
 'editfont-monospace' => 'Gbâgerêsû tî kpengü fündä',
 'editfont-sansserif' => 'Gbâgerêsû tî kûyû garê',
-'editfont-serif'     => 'Gbâgerêsû na kîndâ',
+'editfont-serif' => 'Gbâgerêsû na kîndâ',
 
 # Dates
-'sunday'        => 'lâyenga',
-'monday'        => 'bïkuako',
-'tuesday'       => 'bïkuase',
-'wednesday'     => 'bïkuatâ',
-'thursday'      => 'bïkuasïö',
-'friday'        => 'bïkuakü',
-'saturday'      => 'lâpôsö',
-'sun'           => 'lây',
-'mon'           => 'bk1',
-'tue'           => 'bk2',
-'wed'           => 'bk3',
-'thu'           => 'bk4',
-'fri'           => 'bk5',
-'sat'           => 'lâp',
-'january'       => 'Nyenye',
-'february'      => 'Fulundïgi',
-'march'         => 'Mbängü',
-'april'         => 'Ngubë',
-'may_long'      => 'Bêläwü',
-'june'          => 'Föndo',
-'july'          => 'Lengua',
-'august'        => 'Kükürü',
-'september'     => 'Mvuka',
-'october'       => 'Ngberere',
-'november'      => 'Nabändüru',
-'december'      => 'Kakawuka',
-'january-gen'   => 'Nyenye',
-'february-gen'  => 'Fulundïgi',
-'march-gen'     => 'Mbängü',
-'april-gen'     => 'Ngubä',
-'may-gen'       => 'Bâläwü',
-'june-gen'      => 'Föndo',
-'july-gen'      => 'Lengua',
-'august-gen'    => 'Kükürü',
+'sunday' => 'lâyenga',
+'monday' => 'bïkuako',
+'tuesday' => 'bïkuase',
+'wednesday' => 'bïkuatâ',
+'thursday' => 'bïkuasïö',
+'friday' => 'bïkuakü',
+'saturday' => 'lâpôsö',
+'sun' => 'lây',
+'mon' => 'bk1',
+'tue' => 'bk2',
+'wed' => 'bk3',
+'thu' => 'bk4',
+'fri' => 'bk5',
+'sat' => 'lâp',
+'january' => 'Nyenye',
+'february' => 'Fulundïgi',
+'march' => 'Mbängü',
+'april' => 'Ngubë',
+'may_long' => 'Bêläwü',
+'june' => 'Föndo',
+'july' => 'Lengua',
+'august' => 'Kükürü',
+'september' => 'Mvuka',
+'october' => 'Ngberere',
+'november' => 'Nabändüru',
+'december' => 'Kakawuka',
+'january-gen' => 'Nyenye',
+'february-gen' => 'Fulundïgi',
+'march-gen' => 'Mbängü',
+'april-gen' => 'Ngubä',
+'may-gen' => 'Bâläwü',
+'june-gen' => 'Föndo',
+'july-gen' => 'Lengua',
+'august-gen' => 'Kükürü',
 'september-gen' => 'Mvuka',
-'october-gen'   => 'Ngberere',
-'november-gen'  => 'Nabändüru',
-'december-gen'  => 'Kakawuka',
-'jan'           => 'Nye',
-'feb'           => 'Ful',
-'mar'           => 'Mba',
-'apr'           => 'Ngu',
-'may'           => 'Bêl',
-'jun'           => 'Fön',
-'jul'           => 'Len',
-'aug'           => 'Kük',
-'sep'           => 'Mvu',
-'oct'           => 'Ngb',
-'nov'           => 'Nab',
-'dec'           => 'Kak',
+'october-gen' => 'Ngberere',
+'november-gen' => 'Nabändüru',
+'december-gen' => 'Kakawuka',
+'jan' => 'Nye',
+'feb' => 'Ful',
+'mar' => 'Mba',
+'apr' => 'Ngu',
+'may' => 'Bêl',
+'jun' => 'Fön',
+'jul' => 'Len',
+'aug' => 'Kük',
+'sep' => 'Mvu',
+'oct' => 'Ngb',
+'nov' => 'Nab',
+'dec' => 'Kak',
 
 # Categories related messages
-'pagecategories'           => '{{PLURAL:$1|Fündä|Âfundä}}',
-'category_header'          => 'Âlâmbëtï na yâ tî fündä « $1 »',
-'subcategories'            => 'gbefündä',
-'category-media-header'    => 'Kuru tî kôtevungä na yâ tî fündä "$1"',
-'category-empty'           => '"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe."',
-'hidden-categories'        => 'Höndëngö {{PLURAL:$1|fündä|âfündä}}',
+'pagecategories' => '{{PLURAL:$1|Fündä|Âfundä}}',
+'category_header' => 'Âlâmbëtï na yâ tî fündä « $1 »',
+'subcategories' => 'gbefündä',
+'category-media-header' => 'Kuru tî kôtevungä na yâ tî fündä "$1"',
+'category-empty' => '"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe."',
+'hidden-categories' => 'Höndëngö {{PLURAL:$1|fündä|âfündä}}',
 'hidden-category-category' => 'Âhöndëngö âf¨¨undä',
-'listingcontinuesabbrev'   => '(pekô nî)',
-'index-category'           => 'Âlêmbëtï sô akpo nî',
-'noindex-category'         => 'Âlêmbëtï sô a kpö nî pëpe',
-'broken-file-category'     => 'Âlêmbëtï sô ayeke na âfängö gbê tî kuru',
-
-'about'         => 'Na ndö tî...',
-'article'       => 'Lêmbëtï tî münä',
-'newwindow'     => '(avula finî döpulä)',
-'cancel'        => 'Woza',
+'listingcontinuesabbrev' => '(pekô nî)',
+'index-category' => 'Âlêmbëtï sô akpo nî',
+'noindex-category' => 'Âlêmbëtï sô a kpö nî pëpe',
+'broken-file-category' => 'Âlêmbëtï sô ayeke na âfängö gbê tî kuru',
+
+'about' => 'Na ndö tî...',
+'article' => 'Lêmbëtï tî münä',
+'newwindow' => '(avula finî döpulä)',
+'cancel' => 'Woza',
 'moredotdotdot' => 'Mbênî...',
-'mypage'        => 'Lêmbëtï tî mbï',
-'mytalk'        => 'Lisoro tî mbï',
-'anontalk'      => 'Lisoro na lindo IP sô',
-'navigation'    => 'Simba',
-'and'           => '&#32;na',
+'mypage' => 'Lêmbëtï tî mbï',
+'mytalk' => 'Lisoro tî mbï',
+'anontalk' => 'Lisoro na lindo IP sô',
+'navigation' => 'Simba',
+'and' => '&#32;na',
 
 # Cologne Blue skin
-'qbfind'         => 'Gi',
-'qbbrowse'       => 'Hasa',
-'qbedit'         => 'Sepe',
-'qbpageoptions'  => 'Lêmbëtï sô',
-'qbpageinfo'     => 'Ndongoro',
-'qbmyoptions'    => 'Âlêmbëtï tî mbï',
+'qbfind' => 'Gi',
+'qbbrowse' => 'Hasa',
+'qbedit' => 'Sepe',
+'qbpageoptions' => 'Lêmbëtï sô',
+'qbpageinfo' => 'Ndongoro',
+'qbmyoptions' => 'Âlêmbëtï tî mbï',
 'qbspecialpages' => 'Âlêmbëtï ndê',
-'faq'            => 'Âhûnda',
-'faqpage'        => 'Project:Âhûnda',
+'faq' => 'Âhûnda',
+'faqpage' => 'Project:Âhûnda',
 
 # Vector skin
 'vector-action-addsection' => 'Zîa mbênî lilö daä',
-'vector-action-delete'     => 'Lungûla',
-'vector-action-move'       => 'Sanzêe ïrï',
-'vector-action-protect'    => 'Funga',
-'vector-action-undelete'   => 'Kîri na nî',
-'vector-action-unprotect'  => 'Sanzêe fungä',
-'vector-view-create'       => 'Seka',
-'vector-view-edit'         => 'Sepe',
-'vector-view-history'      => 'Tanda mbai nî',
-'vector-view-view'         => 'Dîko',
-'vector-view-viewsource'   => 'Fa ligbî nî',
-'actions'                  => 'Kua',
-'namespaces'               => 'Pöpö tî âïrï',
-'variants'                 => 'Âmbênî marä nî',
-
-'errorpagetitle'    => 'Yûndo',
-'returnto'          => 'Kîri na ndö tî lêmbëtï $1.',
-'tagline'           => 'Alöndö na  {{SITENAME}}',
-'help'              => 'Za mbï',
-'search'            => 'Gi',
-'searchbutton'      => 'Gi',
-'go'                => 'Bâa',
-'searcharticle'     => 'Dîko',
-'history'           => 'Mbai tî lêmbëtï nî',
-'history_short'     => 'mbai',
-'updatedmarker'     => 'afinima ngbêreyê sô mbï sï daä sô',
-'printableversion'  => 'Mbâlê tî pete na sasango',
-'permalink'         => 'Kpengü gbê tî lêmbëtï nî',
-'print'             => 'Pete na sasango',
-'view'              => 'Tändä',
-'edit'              => 'Sepe',
-'create'            => 'Seka',
-'editthispage'      => 'Sepe lêmbëtï sô',
-'create-this-page'  => 'Seka lêmbëtï sô',
-'delete'            => 'Lungûla',
-'deletethispage'    => 'Lungûla lêmbëtï sô',
-'undelete_short'    => 'Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}',
+'vector-action-delete' => 'Lungûla',
+'vector-action-move' => 'Sanzêe ïrï',
+'vector-action-protect' => 'Funga',
+'vector-action-undelete' => 'Kîri na nî',
+'vector-action-unprotect' => 'Sanzêe fungä',
+'vector-view-create' => 'Seka',
+'vector-view-edit' => 'Sepe',
+'vector-view-history' => 'Tanda mbai nî',
+'vector-view-view' => 'Dîko',
+'vector-view-viewsource' => 'Fa ligbî nî',
+'actions' => 'Kua',
+'namespaces' => 'Pöpö tî âïrï',
+'variants' => 'Âmbênî marä nî',
+
+'errorpagetitle' => 'Yûndo',
+'returnto' => 'Kîri na ndö tî lêmbëtï $1.',
+'tagline' => 'Alöndö na  {{SITENAME}}',
+'help' => 'Za mbï',
+'search' => 'Gi',
+'searchbutton' => 'Gi',
+'go' => 'Bâa',
+'searcharticle' => 'Dîko',
+'history' => 'Mbai tî lêmbëtï nî',
+'history_short' => 'mbai',
+'updatedmarker' => 'afinima ngbêreyê sô mbï sï daä sô',
+'printableversion' => 'Mbâlê tî pete na sasango',
+'permalink' => 'Kpengü gbê tî lêmbëtï nî',
+'print' => 'Pete na sasango',
+'view' => 'Tändä',
+'edit' => 'Sepe',
+'create' => 'Seka',
+'editthispage' => 'Sepe lêmbëtï sô',
+'create-this-page' => 'Seka lêmbëtï sô',
+'delete' => 'Lungûla',
+'deletethispage' => 'Lungûla lêmbëtï sô',
+'undelete_short' => 'Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}',
 'viewdeleted_short' => 'Bâa {{PLURAL:$1|sepsesû| âsepesû $1}} sô awoza nî awe sô.',
-'talkpagelinktext'  => 'tene tënë',
-'personaltools'     => 'Âyêkua tî wanî',
-'talk'              => 'Lisoro',
-'views'             => 'Tändä',
-'toolbox'           => 'Gbâyêkua',
-'otherlanguages'    => 'Na mbênî âyângâ',
-'jumpto'            => 'Gue na:',
-'jumptonavigation'  => 'Simba',
-'jumptosearch'      => 'Gi',
+'talkpagelinktext' => 'tene tënë',
+'personaltools' => 'Âyêkua tî wanî',
+'talk' => 'Lisoro',
+'views' => 'Tändä',
+'toolbox' => 'Gbâyêkua',
+'otherlanguages' => 'Na mbênî âyângâ',
+'jumpto' => 'Gue na:',
+'jumptonavigation' => 'Simba',
+'jumptosearch' => 'Gi',
 
 # 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'            => 'Na ndö tî {{SITENAME}}',
-'aboutpage'            => 'Project:Na ndö tî...',
-'currentevents'        => 'Âsango',
-'currentevents-url'    => 'Project:Âsango',
-'disclaimers'          => 'Zïngö-lê',
-'disclaimerpage'       => 'Project:Zïngö-lê',
-'helppage'             => 'Help:Münä',
-'mainpage'             => 'Gä nzönî',
+'aboutsite' => 'Na ndö tî {{SITENAME}}',
+'aboutpage' => 'Project:Na ndö tî...',
+'currentevents' => 'Âsango',
+'currentevents-url' => 'Project:Âsango',
+'disclaimers' => 'Zïngö-lê',
+'disclaimerpage' => 'Project:Zïngö-lê',
+'helppage' => 'Help:Münä',
+'mainpage' => 'Gä nzönî',
 'mainpage-description' => 'Gä nzönî',
-'portal'               => 'Âsëwä',
-'portal-url'           => 'Project:Gä nzönî',
-'privacy'              => 'Ndarä tî bätängö vivîi tënë',
-'privacypage'          => 'Project:Vivîi tënë',
-
-'ok'              => 'Nî laâ!',
-'retrievedfrom'   => 'Awara na yâ tî "$1"',
-'editsection'     => 'Sepe',
-'editold'         => 'sepe',
+'portal' => 'Âsëwä',
+'portal-url' => 'Project:Gä nzönî',
+'privacy' => 'Ndarä tî bätängö vivîi tënë',
+'privacypage' => 'Project:Vivîi tënë',
+
+'ok' => 'Nî laâ!',
+'retrievedfrom' => 'Awara na yâ tî "$1"',
+'editsection' => 'Sepe',
+'editold' => 'sepe',
 'editsectionhint' => 'Sepe surä nî $1',
-'site-atom-feed'  => 'süängö Atom tî $1',
-'red-link-title'  => '$1 (lêmbëtï sô ayeke daä äpe)',
+'site-atom-feed' => 'süängö Atom tî $1',
+'red-link-title' => '$1 (lêmbëtï sô ayeke daä äpe)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'    => 'Lêmbëtï',
-'nstab-user'    => 'Lêmbëtï tî Nyîmbâ',
+'nstab-main' => 'Lêmbëtï',
+'nstab-user' => 'Lêmbëtï tî Nyîmbâ',
 'nstab-special' => 'Lêmbëtï ndê',
 
 # Login and logout pages
-'yourpassword'            => 'Pafungûla',
+'yourpassword' => 'Pafungûla',
 'nav-login-createaccount' => 'Linda wala Zî kônde',
-'userlogin'               => 'Linda wala  Zî kônde',
-'logout'                  => 'Sïgî',
-'userlogout'              => 'Sigî',
+'userlogin' => 'Linda wala  Zî kônde',
+'logout' => 'Sïgî',
+'userlogout' => 'Sigî',
 
 # Edit pages
-'watchthis'       => 'Bâa pekô tî lêmbëtï sô',
+'watchthis' => 'Bâa pekô tî lêmbëtï sô',
 'anoneditwarning' => "'''Ânge:''' Mô de mo linda äpëe. Fade a sû lindosînga IP tî mo na mbai tî lêmbëtï sô.",
-'editing'         => 'Sëpëngö $1',
-'editingsection'  => 'Sëpëngö $1 (surä)',
+'editing' => 'Sëpëngö $1',
+'editingsection' => 'Sëpëngö $1 (surä)',
 
 # Diffs
 'editundo' => 'woza',
 
 # Search results
-'searchresults'       => 'Pendâkua tî gïngö-ndo nî',
+'searchresults' => 'Pendâkua tî gïngö-ndo nî',
 'searchresults-title' => 'Pendâkua tî gïngö-ndo tëtî "$1"',
-'shown-title'         => 'Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.',
-'search-result-size'  => '$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})',
+'shown-title' => 'Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.',
+'search-result-size' => '$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})',
 
 # Preferences page
 'mypreferences' => 'tandä tî mbï',
-'prefs-rc'      => 'Tanga ti yé so a gbion ya ni',
-'yournick'      => 'Nyîmbâ:',
+'prefs-rc' => 'Tanga ti yé so a gbion ya ni',
+'yournick' => 'Nyîmbâ:',
 
 # User rights
 'editinguser' => "Mo fa na mbi nyîmbâ '''[[User:$1|$1]]''' $2",
@@ -257,7 +257,7 @@ $messages = array(
 'recentchangeslinked-toolbox' => 'Bängö pekô tî âgbegbêe lêmbëtï',
 
 # Upload
-'upload'          => 'Yâlamû mbênî kuru',
+'upload' => 'Yâlamû mbênî kuru',
 'watchthisupload' => 'bâa lo ânde sô lêmbëtï',
 
 # Random page
@@ -269,8 +269,8 @@ $messages = array(
 'nbytes' => '$1 {{PLURAL:$1|limbe|âlimbe}}',
 
 # Watchlist
-'watchlist'     => 'Molongö tî bängö pekô',
-'watch'         => 'bâa pekô nî',
+'watchlist' => 'Molongö tî bängö pekô',
+'watch' => 'bâa pekô nî',
 'watchthispage' => 'bâa lo ânde sô lêmbëtï',
 
 # Namespace form on various pages
@@ -289,28 +289,28 @@ $messages = array(
 'move-watch' => 'bâa lo ânde sô lêmbëtï',
 
 # Tooltip help for the actions
-'tooltip-pt-login'               => 'Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.',
-'tooltip-pt-logout'              => 'sïgî',
-'tooltip-ca-talk'                => 'Lisoro na ndö tî münä tî lêmbëtï sô',
-'tooltip-ca-edit'                => 'Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.',
-'tooltip-ca-history'             => 'Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)',
-'tooltip-search'                 => 'Gi {{SITENAME}}',
-'tooltip-search-fulltext'        => 'Gi âlêmbëtï sô ayeke na gbâsû sô',
-'tooltip-p-logo'                 => 'Gue na Tölêmbëtï',
-'tooltip-n-mainpage'             => 'Gue na tölêmbëtï Gä nzönî.',
+'tooltip-pt-login' => 'Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.',
+'tooltip-pt-logout' => 'sïgî',
+'tooltip-ca-talk' => 'Lisoro na ndö tî münä tî lêmbëtï sô',
+'tooltip-ca-edit' => 'Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.',
+'tooltip-ca-history' => 'Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)',
+'tooltip-search' => 'Gi {{SITENAME}}',
+'tooltip-search-fulltext' => 'Gi âlêmbëtï sô ayeke na gbâsû sô',
+'tooltip-p-logo' => 'Gue na Tölêmbëtï',
+'tooltip-n-mainpage' => 'Gue na tölêmbëtï Gä nzönî.',
 'tooltip-n-mainpage-description' => 'Gue na tölêmbëtï Gä nzönî.',
-'tooltip-n-portal'               => 'Tënë tî pialö nî',
-'tooltip-n-currentevents'        => 'Wara sango tî âpäsëmä tî fafadësô na gündâ nî.',
-'tooltip-n-recentchanges'        => 'Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî',
-'tooltip-n-randompage'           => 'Tanda mbênî lêmbëtï waâa',
-'tooltip-n-help'                 => 'Za mbï',
-'tooltip-t-whatlinkshere'        => 'Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.',
-'tooltip-t-recentchangeslinked'  => 'Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.',
-'tooltip-t-upload'               => 'To kuru na wavungä',
-'tooltip-t-specialpages'         => 'Molongö tî âlêmbëtï sô kûê ayeke ndê',
-'tooltip-t-print'                => 'Mbâlê tî lêmbëtï sô tî pete na sasango',
-'tooltip-t-permalink'            => 'Kpengü gbê na mbâlê tî lêmbëtï nî sô',
-'tooltip-ca-nstab-main'          => 'Bâa lêmbëtï tî münä nî',
+'tooltip-n-portal' => 'Tënë tî pialö nî',
+'tooltip-n-currentevents' => 'Wara sango tî âpäsëmä tî fafadësô na gündâ nî.',
+'tooltip-n-recentchanges' => 'Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî',
+'tooltip-n-randompage' => 'Tanda mbênî lêmbëtï waâa',
+'tooltip-n-help' => 'Za mbï',
+'tooltip-t-whatlinkshere' => 'Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.',
+'tooltip-t-recentchangeslinked' => 'Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.',
+'tooltip-t-upload' => 'To kuru na wavungä',
+'tooltip-t-specialpages' => 'Molongö tî âlêmbëtï sô kûê ayeke ndê',
+'tooltip-t-print' => 'Mbâlê tî lêmbëtï sô tî pete na sasango',
+'tooltip-t-permalink' => 'Kpengü gbê na mbâlê tî lêmbëtï nî sô',
+'tooltip-ca-nstab-main' => 'Bâa lêmbëtï tî münä nî',
 
 # Attribution
 'others' => 'mbênî',
index d033b2c..7982896 100644 (file)
@@ -393,7 +393,7 @@ Ožklausėms: $2',
 # Login and logout pages
 'logouttext' => "'''Daba Tamsta esat atsėjongės.'''
 
-Galat ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba [[Special:UserLogin|prisėjonkat]] ėš naujė šėtuo patiu a kėto nauduotuojė vardu.
+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! ==
 
@@ -751,8 +751,6 @@ Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta
 'search-interwiki-caption' => 'Dokterėnē pruojektā',
 'search-interwiki-default' => '$1 rezoltatā:',
 'search-interwiki-more' => '(daugiau)',
-'search-mwsuggest-enabled' => 'so pasiūlīmās',
-'search-mwsuggest-disabled' => 'nie pasiūlīmu',
 'search-relatedarticle' => 'Sosėjėn',
 'mwsuggest-disable' => 'Kavuotė AJAX pasiūlīmus',
 'searchrelated' => 'sosėjėn',
index 5978df8..a18343b 100644 (file)
@@ -115,94 +115,94 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMJERI', '#PREUSMERI', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__BEZ_IZMENA__', '__BEZIZMENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMJESEC', 'TRENUTNIMESEC', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMJESEC1', 'TRENUTNIMESEC1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMJESECIME', 'TRENUTNIMESECIME', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMJESECROD', 'TRENUTNIMESECROD', 'TRENUTAČNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMJESECSKR', 'TRENUTNIMESECSKR', 'TRENUTAČNIMJESECSKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TRENUTNIDAN2', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVRIJEME', 'TRENUTNOVREME', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TRENUTNISAT', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMJESEC', 'LOKALNIMESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMJESEC1', 'LOKALNIMESEC1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALNIMJESECIME', 'LOKALNIMESECIME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMJESECROD', 'LOKALNIMESECROD', 'LOKALNIMJESECGEN', 'LOKALNIMESECGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMJESECSKR', 'LOKALNIMESECSKR', 'LOKALNIMJESECKRAT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVRIJEME', 'LOKALNOVREME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'BROJSTRANA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJIZMJENA', 'BROJIZMENA', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'STRANICA', 'IMESTRANICE', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'STRANICE', 'IMESTRANICEE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANE', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNOIMESTRANEE', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMJENI:', 'ZAMENI:', 'ZAMJENA:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'minijatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'right' ),
-       'img_left'                => array( '1', 'lijevo', 'levo', 'left' ),
-       'img_none'                => array( '1', 'n', 'bez', 'ništa', 'none' ),
-       'img_center'              => array( '1', 'centar', 'središte', 'c', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bez_okvira', 'bezokvira', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'stranica_$1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'granica', 'obrub', 'border' ),
-       'img_baseline'            => array( '1', 'osnovnacrta', 'pocetna_linija', 'baseline' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrh_teksta', 'tekst_vrh', 'text-top' ),
-       'img_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-dno', 'text-bottom' ),
-       'localurl'                => array( '0', 'LOKALNIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNIURLE:', 'LOCALURLE:' ),
-       'notitleconvert'          => array( '0', '__BEZTC__', '__BEZKN__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNASEDMICA', 'TRENUTAČNITJEDAN', 'TRENUTNANEDELJA', 'TRENUTNITJEDAN', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDANSEDMICE', 'TRENUTAČNIDANTJEDNA', 'TRENUTNIDANNEDELJE', 'TRENUTNIDANTJEDNA', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNASEDMICA', 'LOKALNITJEDAN', 'LOKALNANEDELJA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALNIDANSEDMICE', 'LOKALNIDANTJEDNA', 'LOKALNIDANNEDELJE', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDIZMJENE', 'IDIZMENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'IZMJENEDANA', 'IZMENEDANA', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'IZMJENEDANA2', 'IZMENEDANA2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MJESECIZMJENE', 'MESECIZMENE', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MJESECIZMJENE1', 'MESECIZMENE1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'GODINAIZMJENE', 'GODINAIZMENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'OZNAKAVREMENAIZMJENE', 'OZNAKAVREMENAIZMENE', 'REVISIONTIMESTAMP' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNIURL:', 'PUNURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNIURLE:', 'PUNURLE:', 'FULLURLE:' ),
-       'currenttimestamp'        => array( '1', 'TRENUTNAOZNAKAVREMENA', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKATEGORIJA__', 'SKRIVENAKAT', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'VELICINASTRANICE', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELICINASTRANE', 'PAGESIZE' ),
-       'formatdate'              => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#PREUSMJERI', '#PREUSMERI', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__BEZ_IZMENA__', '__BEZIZMENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'TRENUTNIMESEC', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'TRENUTNIMESEC1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'TRENUTNIMESECIME', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMJESECROD', 'TRENUTNIMESECROD', 'TRENUTAČNIMJESECROD', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMJESECSKR', 'TRENUTNIMESECSKR', 'TRENUTAČNIMJESECSKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'TRENUTAČNIDAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TRENUTNIDAN2', 'TRENUTAČNIDAN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'TRENUTAČNIDANIME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'TRENUTAČNAGODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVRIJEME', 'TRENUTNOVREME', 'TRENUTAČNOVRIJEME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TRENUTNISAT', 'TRENUTAČNISAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMJESEC', 'LOKALNIMESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMJESEC1', 'LOKALNIMESEC1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALNIMJESECIME', 'LOKALNIMESECIME', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMJESECROD', 'LOKALNIMESECROD', 'LOKALNIMJESECGEN', 'LOKALNIMESECGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMJESECSKR', 'LOKALNIMESECSKR', 'LOKALNIMJESECKRAT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALNIDANIME', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVRIJEME', 'LOKALNOVREME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'BROJSTRANA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJFAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJIZMJENA', 'BROJIZMENA', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'STRANICA', 'IMESTRANICE', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'STRANICE', 'IMESTRANICEE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'PROSTORZARAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'PROSTORIZARAZGOVOR', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANE', 'PUNOIMESTRANICE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNOIMESTRANEE', 'PUNOIMESTRANICEE', 'FULLPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMJENI:', 'ZAMENI:', 'ZAMJENA:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'minijatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'right' ),
+       'img_left'                  => array( '1', 'lijevo', 'levo', 'left' ),
+       'img_none'                  => array( '1', 'n', 'bez', 'ništa', 'none' ),
+       'img_center'                => array( '1', 'centar', 'središte', 'c', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bez_okvira', 'bezokvira', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'stranica_$1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'granica', 'obrub', 'border' ),
+       'img_baseline'              => array( '1', 'osnovnacrta', 'pocetna_linija', 'baseline' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrh_teksta', 'tekst_vrh', 'text-top' ),
+       'img_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-dno', 'text-bottom' ),
+       'localurl'                  => array( '0', 'LOKALNIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNIURLE:', 'LOCALURLE:' ),
+       'notitleconvert'            => array( '0', '__BEZTC__', '__BEZKN__', '__BPN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__BPS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNASEDMICA', 'TRENUTAČNITJEDAN', 'TRENUTNANEDELJA', 'TRENUTNITJEDAN', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDANSEDMICE', 'TRENUTAČNIDANTJEDNA', 'TRENUTNIDANNEDELJE', 'TRENUTNIDANTJEDNA', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNASEDMICA', 'LOKALNITJEDAN', 'LOKALNANEDELJA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALNIDANSEDMICE', 'LOKALNIDANTJEDNA', 'LOKALNIDANNEDELJE', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDIZMJENE', 'IDIZMENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'IZMJENEDANA', 'IZMENEDANA', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'IZMJENEDANA2', 'IZMENEDANA2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MJESECIZMJENE', 'MESECIZMENE', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MJESECIZMJENE1', 'MESECIZMENE1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'GODINAIZMJENE', 'GODINAIZMENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'OZNAKAVREMENAIZMJENE', 'OZNAKAVREMENAIZMENE', 'REVISIONTIMESTAMP' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNIURL:', 'PUNURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNIURLE:', 'PUNURLE:', 'FULLURLE:' ),
+       'currenttimestamp'          => array( '1', 'TRENUTNAOZNAKAVREMENA', 'TRENUTAČNAOZNAKAVREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALNAOZNAKAVREMENA', 'LOCALTIMESTAMP' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKATEGORIJA__', 'SKRIVENAKAT', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'VELICINASTRANICE', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELICINASTRANE', 'PAGESIZE' ),
+       'formatdate'                => array( '0', 'formatdatuma', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-zčćđžš]+)(.*)$/sDu';
@@ -215,7 +215,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' => 'Promene u grupi po stranici u spisku nedavnih izmhena i nadgledanih stranica (zahtijeva JavaScript)',
 'tog-numberheadings' => 'Automatski numeriši podnaslove',
 'tog-showtoolbar' => 'Pokaži alatnu traku (potreban JavaScript)',
 'tog-editondblclick' => 'Izmijeni stranice dvostrukim klikom (potreban JavaScript)',
@@ -223,17 +223,17 @@ $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' => 'Upamti moju prijavu za ovaj preglednik (za maksimum od $1 {{PLURAL:$1|dan|dana}})',
-'tog-watchcreations' => 'Dodaj stranice koje sam napravio u moj spisak praćenja',
-'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenja',
-'tog-watchmoves' => 'Dodaj stranice koje premještam u moj spisak praćenja',
-'tog-watchdeletion' => 'Stranice koje brišem dodaj na moj spisak praćenja',
+'tog-watchcreations' => 'Dodaj stranice koje sam stvorio i dadtoteke koje sam poslao u moj spisak praćenih stranica',
+'tog-watchdefault' => 'Dodaj stranice i datoteke koje izmijenim u spisak praćenja',
+'tog-watchmoves' => 'Dodaj stranice i datoteke koje premjestim na moj spisak praćenja',
+'tog-watchdeletion' => 'Dodaj stranice i datoteke koje izbrišem na moj spisak praćenja',
 'tog-minordefault' => 'Označi da su sve izmjene u pravilu manje',
 'tog-previewontop' => 'Prikaži pretpregled prije kutije za uređivanje',
 'tog-previewonfirst' => 'Prikaži pretpregled na prvoj izmjeni',
 'tog-nocache' => 'Onemogući keš (cache) stranica u pregledniku',
-'tog-enotifwatchlistpages' => 'Pošalji mi e-poštu kad se promijeni stranica na mom spisku praćenja',
+'tog-enotifwatchlistpages' => 'Pošalji mi e-mail kada se promijeni stranica ili datoteka na mom spisku praćenja',
 '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đe za male izmjene stranica',
+'tog-enotifminoredits' => 'Pošalji mi e-mail i kod manjih izmjena stranica i datoteka',
 'tog-enotifrevealaddr' => 'Otkrij adresu moje e-pošte u porukama obaviještenja',
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji prate',
 'tog-oldsig' => 'Postojeći potpis:',
@@ -471,6 +471,10 @@ $1',
 'youhavenewmessages' => 'Imate $1 ($2).',
 'newmessageslink' => 'novih promjena',
 'newmessagesdifflink' => 'posljednja promjena',
+'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
+'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|posljednje uređivanje|$ posljednja uređivanja|$ posljednjih uređivanja}}',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -522,12 +526,12 @@ Lista valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:
 # General errors
 'error' => 'Greška',
 'databaseerror' => 'Greška u bazi podataka',
-'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>".
-MySQL je vratio grešku "<tt>$3: $4</tt>".',
+'dberrortext' => 'Došlo je do sintaktičke greške u bazi.
+Možda se radi o grešci u softveru.
+Posljednji pokušaj upita je glasio:
+<blockquote><code>$1</code></blockquote>
+unutar funkcije „<code>$2</code>“.
+Baza podataka je prijavila grešku „<samp>$3: $4</samp>“.',
 'dberrortextcl' => 'Desila se sintaksna greška upita baze.
 Posljednji pokušani upit je bio:
 "$1"
@@ -564,6 +568,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' => 'Brisanje stranice "$1" nije moguće',
+'delete-hook-aborted' => 'Brisanje prekinuto softverskim priključkom (hook).
+Nema obrazloženja ili poruke o grešci.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Zatražena stranica je bila nevaljana, prazna ili neispravno povezana s među-jezičkim ili inter-wiki naslovom.
 Može sadržavati jedno ili više slova koja se ne mogu koristiti u naslovima.',
@@ -581,10 +587,10 @@ Pretraga: $2',
 'protectedpagetext' => 'Ova stranica je zaključana da bi se spriječilo uređivanje.',
 '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, pa je zaključana kako bi se spriječile zloupotrebe.',
+'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.',
 'editinginterface' => "'''Upozorenje:''' Mijenjate stranicu koja se koristi za tekst interfejsa za softver.
-Promjene na ovoj stranici dovode i do promjena interfejsa za druge korisnike.
-Za prijevode, molimo Vas koristite [//translatewiki.net/wiki/Main_Page?setlang=bs translatewiki.net], projekt prijevoda za MediaWiki.",
+Promjene na ovoj stranici će izazvati promjene korisničkog interfejsa za druge korisnike na ovoj wiki.
+Za prijevode, molimo Vas koristite [//translatewiki.net/wiki/Main_Page?setlang=bs translatewiki.net], projekt lokalizacije MediaWiki.",
 'sqlhidden' => '(SQL pretraga sakrivena)',
 'cascadeprotected' => 'Ova stranica je zaštićena od uređivanja, jer je uključena u {{PLURAL:$1|stranicu zaštićenu|stranice zaštićene}} od uređivanja sa uključenom kaskadnom opcijom:
 $2',
@@ -597,6 +603,10 @@ Kao razlog je naveden "\'\'$2\'\'".',
 'filereadonlyerror' => 'Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.
 
 Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.',
+'invalidtitle-knownnamespace' => 'Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“',
+'invalidtitle-unknownnamespace' => 'Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“',
+'exception-nologin' => 'Niste prijavljeni',
+'exception-nologin-text' => 'Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -606,7 +616,7 @@ Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.'
 # Login and logout pages
 'logouttext' => "'''Sad ste odjavljeni.'''
 
-Možete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo [[Special:UserLogin|prijaviti]] kao isti ili kao drugi korisnik.
+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.
@@ -617,6 +627,7 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].
 'remembermypassword' => 'Upamti moju lozinku na ovom kompjuteru (za maksimum od $1 {{PLURAL:$1|dan|dana}})',
 'securelogin-stick-https' => 'Ostanite povezani na HTTPS nakon prijave',
 'yourdomainname' => 'Vaš domen:',
+'password-change-forbidden' => 'Ne možete da promenite lozinku na ovom vikiju.',
 'externaldberror' => 'Došlo je do greške pri vanjskoj autorizaciji baze podataka ili vam nije dopušteno osvježavanje Vašeg vanjskog korisničkog računa.',
 'login' => 'Prijavi se',
 'nav-login-createaccount' => 'Prijavi se / Registruj se',
@@ -872,17 +883,20 @@ Možete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] u drugim st
 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>.',
+'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.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].',
 'userpage-userdoesnotexist' => 'Korisnički račun "<nowiki>$1</nowiki>" nije registrovan.
 Molimo provjerite da li želite napraviti/izmijeniti ovu stranicu.',
 'userpage-userdoesnotexist-view' => 'Korisnički račun "$1" nije registrovan.',
 'blocked-notice-logextract' => 'Ovaj korisnik je trenutno blokiran.
 Posljednje stavke evidencije blokiranja možete pogledati ispod:',
-'clearyourcache' => "'''Napomena:''' nakon čuvanja, možda ćete morati da očistite keš pregledača.
-*'''Firefox / Safari::''' držite ''Shift'' i kliknite na ''Osveži'', ili pritisnite ''Ctrl-F5'' ili Ctrl-R (''⌘-R'' na Makintošu)
-*'''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na Makintošu)
-*'''Internet Explorer: '''držite ''Ctrl'' i kliknite na ''Osveži'', ili pritisnite ''Ctrl-F5''
-*'''Konqueror: '''kliknite na ''Osveži'' ili pritisnite ''F5''
-*'''Opera:''' očistite privremenu memoriju preko menija ''Alatke → Postavke''.",
+'clearyourcache' => "'''Napomena:''' Nakon snimanja možda ćete trebate očistiti cache svog preglednika kako biste vidjeli promjene.
+* '''Firefox / Safari:''' držite ''Shift'' i pritisnite ''Reload'', ili pritisnite bilo ''Ctrl-F5'' ili ''Ctrl-R'' (''Command-R'' na Macu)
+* '''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' => "'''Sugestija:''' Koristite 'Prikaži izgled' dugme da testirate svoj novi CSS prije nego što ga snimite.",
 'userjsyoucanpreview' => "'''Sugestija:''' Koristite 'Prikaži izgled' dugme da testirate svoj novi JS prije nego što ga snimite.",
 'usercsspreview' => "'''Zapamtite ovo je samo izgled Vašeg CSS-a.'''
@@ -995,6 +1009,13 @@ Ovakvi argumenti se trebaju izbjegavati.",
 'parser-template-loop-warning' => 'Otkrivena kružna greška u šablonu: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Dubina uključivanja šablona prekoračena ($1)',
 'language-converter-depth-warning' => 'Prekoračena granica dubine jezičkog pretvarača ($1)',
+'node-count-exceeded-category' => 'Stranice sa prekoračenim brojem čvorova',
+'node-count-exceeded-warning' => 'Stranica u kojoj je prekoračen broj čvorova',
+'expansion-depth-exceeded-category' => 'Stranice koje su prekoračile dubinu proširenja',
+'expansion-depth-exceeded-warning' => 'Na ovoj stranici dubina proširenja je prevelika',
+'parser-unstrip-loop-warning' => 'Utvrđena je petlja',
+'parser-unstrip-recursion-limit' => 'Dosegnuto je ograničenje rekurzije ($1)',
+'converter-manual-rule-error' => 'Pronađena je greška u pravilu za ručno pretvaranje jezika',
 
 # "Undo" feature
 'undo-success' => 'Izmjena se može vratiti.
@@ -1131,7 +1152,8 @@ Molimo provjerite zapise.',
 'revdelete-only-restricted' => 'Greška pri sakrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih opcija za uklanjanje.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi brisanja
 ** Kršenje autorskih prava
-** Neadekvatni lični podaci
+** Neprimjereni komentari ili lični podaci
+** Neprimjereno korisničko ime
 ** Potencijalno klevetničke informacije',
 'revdelete-otherreason' => 'Ostali/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Ostali razlozi',
@@ -1175,6 +1197,8 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 
 # Diffs
 'history-title' => 'Historija izmjena stranice "$1"',
+'difference-title' => 'Razlike između izmjena na stranici "$1"',
+'difference-title-multipage' => 'Razlika između stranica "$1" i "$2"',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Linija $1:',
 'compareselectedversions' => 'Uporedite označene verzije',
@@ -1182,6 +1206,10 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 'editundo' => 'ukloni ovu izmjenu',
 'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|korisnika}}',
 'diff-multi-manyusers' => '({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|korisnika}}',
+'difference-missing-revision' => 'Ne mogu da pronađem {{PLURAL:$2|jednu izmenu|$2 izmene|$2 izmena}} od ove razlike ($1).
+
+Ovo se obično dešava kada pratite zastarjelu vezu do 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',
@@ -1224,8 +1252,6 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 'search-interwiki-caption' => 'Srodni projekti',
 'search-interwiki-default' => '$1 rezultati:',
 'search-interwiki-more' => '(više)',
-'search-mwsuggest-enabled' => 'sa sugestijama',
-'search-mwsuggest-disabled' => 'bez sugestija',
 'search-relatedarticle' => 'Povezano',
 'mwsuggest-disable' => 'Onemogući AJAX prijedloge',
 'searcheverything-enable' => 'Pretraga u svim imenskim prostorima',
@@ -1272,6 +1298,7 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 'prefs-beta' => 'Beta mogućnosti',
 'prefs-datetime' => 'Datum i vrijeme',
 'prefs-labs' => 'Eksperimentalne mogućnosti',
+'prefs-user-pages' => 'Korisničke stranice',
 'prefs-personal' => 'Korisnički profil',
 'prefs-rc' => 'Podešavanje nedavnih izmjena',
 'prefs-watchlist' => 'Praćene stranice',
@@ -1452,6 +1479,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'right-writeapi' => "Korištenje opcije ''write API''",
 'right-delete' => 'Brisanje stranica',
 'right-bigdelete' => 'Brisanje stranica sa velikom historijom',
+'right-deletelogentry' => 'Brisanje i vraćanje određenih stavki u registru',
 'right-deleterevision' => 'Brisanje i vraćanje određenih revizija stranice',
 'right-deletedhistory' => 'Pregled stavki obrisane historije, bez povezanog teksta',
 'right-deletedtext' => 'Pregled obrisanog teksta i izmjena između obrisanih revizija',
@@ -1734,14 +1762,19 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'backend-fail-writetemp' => 'Ne mogu da pišem u privremenoj datoteci.',
 'backend-fail-closetemp' => 'Ne mogu da zatvorim privremenu datoteku.',
 'backend-fail-read' => 'Ne mogu da pročitam datoteku $1.',
-'backend-fail-create' => 'Ne mogu da napravim datoteku $1.',
-'backend-fail-maxsize' => 'Ne mogu da napravim datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
+'backend-fail-create' => 'Ne mogu snimiti datoteku $1.',
+'backend-fail-maxsize' => 'Ne mogu snimiti datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
 'backend-fail-readonly' => 'Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: „$2“',
 'backend-fail-synced' => 'Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova',
 'backend-fail-connect' => 'Ne mogu da se povežem sa skladišnom osnovom „$1“.',
 'backend-fail-internal' => 'Došlo je do nepoznate greške u skladišnoj osnovi „$1“.',
 'backend-fail-contenttype' => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
 'backend-fail-batchsize' => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
+'backend-fail-usable' => 'Ne mogu pročitati ni snimiti datoteku $1 zbog nedovoljno dozvola ili nedostattnih direktorija/sadržaoca.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
+'filejournal-fail-dbquery' => 'Ne mogu da ažuriram novinarsku bazu za skladišnu osnovu „$1“.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Ne mogu da otključam „$1“ jer nije zaključan.',
@@ -1752,6 +1785,7 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'lockmanager-fail-releaselock' => 'Ne mogu da oslobodim katanac za „$1“.',
 'lockmanager-fail-db-bucket' => 'Ne mogu da kontaktiram s dovoljno katanaca u kanti $1.',
 'lockmanager-fail-db-release' => 'Ne mogu da oslobodim katance u bazi $1.',
+'lockmanager-fail-svr-acquire' => 'Ne mogu da dobijem katance na serveru $1.',
 'lockmanager-fail-svr-release' => 'Ne mogu da oslobodim katance na serveru $1.',
 
 # ZipDirectoryReader
@@ -1871,6 +1905,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.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -1953,7 +1988,7 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.',
 'disambiguations' => 'Stranice do višeznačnih odrednica',
 'disambiguationspage' => 'Template:Višeznačna odrednica',
 'disambiguations-text' => "Slijedeće stranice su povezane sa '''stranicom za razvrstavanje'''.
-Po pravilu, one se trebaju povezati sa konkretnim člankom.<br />
+One se možda moraju povezati sa konkretnim člankom.<br />
 Stranica se smatra stranicom za razvrstavanje, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage|stranica za razvrstavanje]]",
 
 'doubleredirects' => 'Dvostruka preusmjerenja',
@@ -1979,6 +2014,7 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međuviki|međuvikija|međuvikija}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linka|linkova}}',
 'nmembers' => '$1 {{PLURAL:$1|član|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
@@ -2007,6 +2043,7 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 'mostlinkedtemplates' => 'Šabloni sa najviše linkova',
 'mostcategories' => 'Stranice sa najviše kategorija',
 'mostimages' => 'Datoteke sa najviše linkova',
+'mostinterwikis' => 'Stranice s najviše međuwiki poveznica',
 'mostrevisions' => 'Stranice sa najviše izmjena',
 'prefixindex' => 'Sve stranice sa prefiksom',
 'prefixindex-namespace' => 'Sve stranice s predmetkom (imenski prostor $1)',
@@ -2061,6 +2098,7 @@ na kome bi se izvela ova funkcija.',
 Možete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena ili promjenjenog članka (razlikovati velika slova).',
 'logempty' => 'Ne postoji takav zapis.',
 'log-title-wildcard' => 'Traži naslove koji počinju s ovim tekstom',
+'showhideselectedlogentries' => 'Prikaži/sakrij izabrane zapise u evidenciji',
 
 # Special:AllPages
 'allpages' => 'Sve stranice',
@@ -2081,6 +2119,11 @@ Možda sadrži jedan ili više znakova koji se ne mogu koristiti u naslovima.',
 'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor "$1".',
 'allpages-hide-redirects' => 'Sakrij preusmerenja',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate keširanu verziju ove stranice, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate keširanu verziju ove stranice, koja možda nije potpuno aktualna.',
+'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
+
 # Special:Categories
 'categories' => 'Kategorije',
 'categoriespagetext' => '{{PLURAL:$1|Slijedeća kategorija sadrži|Slijedeće kategorije sadrže}} stranice ili multimedijalne datoteke.
@@ -2148,6 +2191,8 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] 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-mail ovom korisniku',
+'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.',
@@ -2294,6 +2339,8 @@ nastavite s oprezom.',
 'rollback' => 'Vrati izmjene',
 'rollback_short' => 'Vrati',
 'rollbacklink' => 'vrati',
+'rollbacklinkcount' => 'vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}',
+'rollbacklinkcount-morethan' => 'vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}',
 'rollbackfailed' => 'Vraćanje nije uspjelo',
 'cantrollback' => 'Nemoguće je vratiti izmjenu;
 posljednji kontributor je jedini na ovoj stranici.',
@@ -2525,8 +2572,8 @@ Unesite konkretan razlog ispod (na primjer, navodeći koje konkretne stranice su
 'ipb-confirm' => 'Potvrdite blokiranje',
 'badipaddress' => 'Nevaljana IP adresa',
 'blockipsuccesssub' => 'Blokiranje je uspjelo',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je blokiran.
-<br />Pogledajte [[Special:BlockList|IP spisak blokiranih korisnika]] za pregled blokiranja.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />
+Blokiranja možete da pogledate [[Special:BlockList|ovde]].',
 'ipb-blockingself' => 'Ovom akcijom ćete blokirati sebe! Da li ste sigurni da to želite?',
 'ipb-confirmhideuser' => "Upravo ćete blokirati korisnika sa uključenom opcijom ''sakrij korisnika''. Ovim će korisničko ime biti sakriveno u svim spiskovima i stavkama zapisnika. Da li ste sigurni da to želite?",
 'ipb-edit-dropdown' => 'Uredi razloge blokiranja',
@@ -2798,6 +2845,7 @@ Sve akcije vezane uz transwiki uvoz su zabilježene u [[Special:Log/import|regis
 'import-interwiki-templates' => 'Uključi sve šablone',
 'import-interwiki-submit' => 'Uvoz',
 'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (neobavezno):',
 'import-upload-filename' => 'Naziv datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].
@@ -2834,6 +2882,9 @@ Molimo pokušajte ponovno.',
 'import-error-interwiki' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv rezervisan za spoljno povezivanje (interwiki).',
 'import-error-special' => 'Ne mogu da uvezem stranicu „$1“ jer ona pripada posebnom imenskom prostoru koje ne prihvata stranice.',
 'import-error-invalid' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv neispravan.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.',
 
 # Import log
 'importlogpage' => 'Registar uvoza',
@@ -2845,7 +2896,6 @@ Molimo pokušajte ponovno.',
 
 # JavaScriptTest
 'javascripttest' => 'Javaskript test',
-'javascripttest-disabled' => 'Ova funkcija je onemogućena na ovom wikiju.',
 'javascripttest-title' => 'Izvršavanje testova za $1',
 'javascripttest-pagetext-noframework' => 'Ova stranica je rezervisana za izvršavanje javaskript testova.',
 'javascripttest-pagetext-unknownframework' => 'Nepoznati radni okvir „$1“.',
@@ -2949,14 +2999,37 @@ Ovo je vjerovatno izazvano 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 izmene sadrže veze do $1. Brišem',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
-'pageinfo-header-edits' => 'Izmjene',
+'pageinfo-header-basic' => 'Osnovne informacije',
+'pageinfo-header-edits' => 'Historija izmjena',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Prikaži naslov',
+'pageinfo-default-sort' => 'Podrazumijevani ključ sortiranja',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
+'pageinfo-article-id' => 'ID stranice',
+'pageinfo-robot-policy' => 'Status tražilice',
+'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
+'pageinfo-robot-noindex' => 'Ne može se indeksirati',
 'pageinfo-views' => 'Broj pregleda',
-'pageinfo-watchers' => 'Broj onih koji pregledaju',
-'pageinfo-edits' => 'Broj izmjena',
-'pageinfo-authors' => 'Broj specifičnih autora',
+'pageinfo-watchers' => 'Broj pratitelja stranice',
+'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
+'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmjerenje|preusmjerenja|preusmjerenja}}; $3 {{PLURAL:$3|nepreusmjerenje|nepreusmjerenja|nepreusmjerenja}})',
+'pageinfo-firstuser' => 'Tvorac stranice',
+'pageinfo-firsttime' => 'Datum stvaranja stranice',
+'pageinfo-lastuser' => 'Posljednji urednik',
+'pageinfo-lasttime' => 'Datum posljednje izmjene',
+'pageinfo-edits' => 'Ukupni broj uređivanja',
+'pageinfo-authors' => 'Ukupni broj specifičnih autora',
+'pageinfo-recent-edits' => 'Broj nedavnih izmjena (u posljednjih $1)',
+'pageinfo-recent-authors' => 'Broj nedavnih specifičnih autora',
+'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)',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označi kao patrolirano',
@@ -3000,6 +3073,7 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'file-info-size-pages' => '$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 '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',
 '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.',
@@ -3009,6 +3083,8 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'file-info-png-looped' => 'stalno iznova',
 'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}',
+'file-no-thumb-animation' => "'''Napomena: zbog tehničkih ograničenja, minijature ove datoteke se neće animirati.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće se animirati.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih slika',
@@ -3647,6 +3723,8 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 'version-software' => 'Instalirani softver',
 'version-software-product' => 'Proizvod',
 'version-software-version' => 'Verzija',
+'version-entrypoints' => 'URL adresa instalacije',
+'version-entrypoints-header-entrypoint' => 'Ulazna tačka',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3809,10 +3887,12 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 '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' => 'Već postoji datoteka s imenom „$1“ i ne može da se zamijeni.',
+'api-error-fileexists-shared-forbidden' => 'Već postoji datoteka s imenom „$1“ u zajedničkoj riznici i ne može da se zamijeni.',
 '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.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|nije dopušten tip datoteke|nisu dopušteni tipovi datoteka}}. {{PLURAL:$3|Dopuštena vrsta datoteke je|Dopuštene vrste datoteka su}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|je zabranjena vrsta datoteke|su zabranjene vrste datoteka}}. {{PLURAL:$3|Dozvoljena je|Dozvoljene 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' => 'Unutrašnja greška: ne može se spojiti na server.',
index cc05670..7cb6512 100644 (file)
@@ -269,6 +269,8 @@ $1',
 Ẓr [[Special:Version|ayyaw tasna]].',
 
 'ok' => 'Waxxa',
+'pagetitle' => '(MediaWiki)$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Yurrid z "$1"',
 'youhavenewmessages' => 'Illa dark $1 ($2).',
 'newmessageslink' => 'Tibratin timaynutin',
@@ -636,8 +638,6 @@ Tigira n ujbbad ns, ar takka yat tayafut bahra imqqurn,  ɣayan afan ur ttili.',
 'search-interwiki-caption' => 'Tiwuriwin taytmatin',
 'search-interwiki-default' => '$1 imyakkatn',
 'search-interwiki-more' => '(Uggar)',
-'search-mwsuggest-enabled' => 'D mara ittuyskar',
-'search-mwsuggest-disabled' => 'Ur illa marayttuskar',
 'search-relatedarticle' => 'Tzdi',
 'mwsuggest-disable' => 'Asbid AJAX n maryttuynnan ayttuyskar',
 'searcheverything-enable' => 'Cabba ɣ graygat agmmaḍ',
index 325d8fb..c7ed509 100644 (file)
@@ -149,46 +149,46 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#යළියොමුව', '#REDIRECT' ),
-       'currentmonth'            => array( '1', 'වත්මන්මාසය', 'වත්මන්මාසය2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'වත්මන්මාසය1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'වත්මන්මාසනාමය', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'වත්මන්මාසනාමයපොදු', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'වත්මන්මාසයකෙටි', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'වත්මන්දිනය', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'වත්මන්දිනය2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'වත්මන්දිනනාමය', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'වත්මන්වසර', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'වත්මන්වේලාව', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'වත්මන්පැය', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'දේශීයමාසය', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'දේශීයමාසනාමය', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'දේශීයමාසනාමයපොදු', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'දේශීයමාසයකෙටි', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'දේශීයදිනය', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'දේශීයදිනය2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'දේශීයදිනනාමය', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'දේශීයවසර', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'දේශීයවේලාව', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'දේශීයපැය', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'පිටුසංඛ්‍යාව', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ලිපිසංඛ්‍යාව', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ගොනුසංඛ්‍යාව', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'පරිශීලකයන්සංඛ්‍යාව', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'සංස්කරණසංඛ්‍යාව', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'පිටුනාමය', 'PAGENAME' ),
-       'namespace'               => array( '1', 'නාමඅවකාශය', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'නාමඅවකාශයන්', 'NAMESPACEE' ),
-       'msg'                     => array( '0', 'පණිවුඩ:', 'MSG:' ),
-       'img_right'               => array( '1', 'දකුණ', 'right' ),
-       'img_left'                => array( '1', 'වම', 'left' ),
-       'img_none'                => array( '1', 'නොමැත', 'none' ),
-       'img_width'               => array( '1', '$1පික්', '$1px' ),
-       'img_center'              => array( '1', 'මධ්‍යය', 'center', 'centre' ),
-       'img_border'              => array( '1', 'දාරය', 'border' ),
-       'img_sub'                 => array( '1', 'උප', 'sub' ),
-       'img_middle'              => array( '1', 'මැද', 'middle' ),
-       'special'                 => array( '0', 'විශේෂ', 'special' ),
+       'redirect'                  => array( '0', '#යළියොමුව', '#REDIRECT' ),
+       'currentmonth'              => array( '1', 'වත්මන්මාසය', 'වත්මන්මාසය2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'වත්මන්මාසය1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'වත්මන්මාසනාමය', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'වත්මන්මාසනාමයපොදු', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'වත්මන්මාසයකෙටි', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'වත්මන්දිනය', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'වත්මන්දිනය2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'වත්මන්දිනනාමය', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'වත්මන්වසර', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'වත්මන්වේලාව', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'වත්මන්පැය', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'දේශීයමාසය', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'දේශීයමාසනාමය', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'දේශීයමාසනාමයපොදු', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'දේශීයමාසයකෙටි', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'දේශීයදිනය', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'දේශීයදිනය2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'දේශීයදිනනාමය', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'දේශීයවසර', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'දේශීයවේලාව', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'දේශීයපැය', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'පිටුසංඛ්‍යාව', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ලිපිසංඛ්‍යාව', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ගොනුසංඛ්‍යාව', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'පරිශීලකයන්සංඛ්‍යාව', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'සංස්කරණසංඛ්‍යාව', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'පිටුනාමය', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'නාමඅවකාශය', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'නාමඅවකාශයන්', 'NAMESPACEE' ),
+       'msg'                       => array( '0', 'පණිවුඩ:', 'MSG:' ),
+       'img_right'                 => array( '1', 'දකුණ', 'right' ),
+       'img_left'                  => array( '1', 'වම', 'left' ),
+       'img_none'                  => array( '1', 'නොමැත', 'none' ),
+       'img_width'                 => array( '1', '$1පික්', '$1px' ),
+       'img_center'                => array( '1', 'මධ්‍යය', 'center', 'centre' ),
+       'img_border'                => array( '1', 'දාරය', 'border' ),
+       'img_sub'                   => array( '1', 'උප', 'sub' ),
+       'img_middle'                => array( '1', 'මැද', 'middle' ),
+       'special'                   => array( '0', 'විශේෂ', 'special' ),
 );
 
 $messages = array(
@@ -347,9 +347,9 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'මාතෘකාව එක්කරන්න',
-'vector-action-delete' => 'මà¶\9aà·\8fදමනà·\8aන',
+'vector-action-delete' => 'මකන්න',
 'vector-action-move' => 'ගෙනයන්න',
-'vector-action-protect' => 'ආරක්‍ෂණය කරන්න',
+'vector-action-protect' => 'ආරක්‍ෂණය',
 'vector-action-undelete' => 'මකාදැමීම අවලංගු කරන්න',
 'vector-action-unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
 'vector-simplesearch-preference' => 'වැඩිදියුණුකළ සෙවුම් යෝජනා සක්‍රීය කරන්න (වෙක්ටර් තීමය සඳහා පමණි)',
@@ -365,7 +365,7 @@ $messages = array(
 'errorpagetitle' => 'දෝෂය',
 'returnto' => '$1 වෙත නැවත යන්න.',
 'tagline' => '{{SITENAME}} වෙතින්',
-'help' => 'à¶\8bදà·\80à·\94',
+'help' => 'à¶\8bදà·\80à·\8a',
 'search' => 'සොයන්න',
 'searchbutton' => 'සොයන්න',
 'go' => 'යන්න',
@@ -373,11 +373,11 @@ $messages = array(
 'history' => 'පිටුවේ ඉතිහාසය',
 'history_short' => 'ඉතිහාසය',
 'updatedmarker' => 'මාගේ අවසාන පිවිසුමෙන් පසුව යාවත්කාලීන කරඇත',
-'printableversion' => 'මුද්‍රණයකලහැකි සංස්කරණය',
+'printableversion' => 'මුද්‍රණය කල හැකි සංස්කරණය',
 'permalink' => 'ස්ථාවර සබැඳුම',
 'print' => 'මුද්‍රණය කරන්න',
 'view' => 'දසුන',
-'edit' => 'සංස්කරණය කරන්න',
+'edit' => 'සංස්කරණය',
 'create' => 'තනන්න',
 'editthispage' => 'මෙම පිටුව සංස්කරණය කරන්න',
 'create-this-page' => 'මෙම පිටුව තනන්න',
@@ -385,7 +385,7 @@ $messages = array(
 'deletethispage' => 'මෙම පිටුව මකන්න',
 'undelete_short' => '{{PLURAL:$1|එක් සංස්කරණයක|සංස්කරණ $1 ක}} මකා දැමීම ප්‍රතිලෝම කරන්න',
 'viewdeleted_short' => 'මකා දමනු ලැබූ {{PLURAL:$1|එක් සංස්කරණයක්|සංස්කරණ $1  ක්}} බලන්න',
-'protect' => 'ආරක්‍ෂණය කරන්න',
+'protect' => 'ආරක්‍ෂණය',
 'protect_change' => 'වෙනස් කරන්න',
 'protectthispage' => 'මෙම පිටුව ආරක්‍ෂණය කරන්න',
 'unprotect' => 'ආරක්ෂණ තත්වය වෙනස් කරන්න',
@@ -414,7 +414,7 @@ $messages = array(
 'lastmodifiedat' => 'මෙම පිටුව අවසන් වරට වෙනස් කරන ලද්දේ $1 දිනදී, $2 වේලාවෙහිදීය.',
 'viewcount' => 'මෙම පිටුවට {{PLURAL:$1|එක් වරක්|$1 වරක්}} පිවිස ඇත.',
 'protectedpage' => 'ආරක්ෂිත පිටුව',
-'jumpto' => 'à·\80à·\99ත à¶ºන්න:',
+'jumpto' => 'à·\80à·\99ත à¶´à¶±à·\92න්න:',
 'jumptonavigation' => 'සංචලනය',
 'jumptosearch' => 'සොයන්න',
 'view-pool-error' => "සමාවන්න, ස'වරයන් මෙම අවස්ථාවෙහිදී අධිපූරණය වී ඇත.
@@ -517,8 +517,8 @@ $1",
 # General errors
 'error' => 'දෝෂය',
 'databaseerror' => 'දත්ත-ගබඩා දෝෂය',
-'dberrortext' => 'දත්තසංචිත විමසුම් කාරක-රීති දෝෂයක් (syntax erro)සිදුවී ඇත.
-මෙය මෘදුකාංගයේ bugදෝෂයක් හඟවන්නක් විය හැක.
+'dberrortext' => 'දත්තසංචිත විමසුම් කාරක-රීති දෝෂයක් සිදුවී ඇත.
+මෙය මෘදුකාංගයේ දෝෂයක් හඟවන්නක් විය හැක.
 අවසන් වරට උත්සාහ කල දත්ත-ගබඩා විමසුම:
 "<tt>$2</tt>" ශ්‍රිතය අනුසාරයෙන්
 <blockquote><tt>$1</tt></blockquote> විය.
@@ -602,7 +602,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ඔබ දැන් ගිණුමෙන් නික්මී ඇත.'''
 
-ඔබට නිර්නාමිකව {{SITENAME}} කටයුතු කරගෙන යාහැක, නැතහොත් පෙර පරිශීලක ලෙස හෝ වෙනත් පරිශීලකයෙකු ලෙස [[Special:UserLogin|නැවත ගිණුමක‍ට පිවිසිය හැක]].
+ඔබට නිර්නාමිකව {{SITENAME}} කටයුතු කරගෙන යාහැක, නැතහොත් පෙර පරිශීලක ලෙස හෝ වෙනත් පරිශීලකයෙකු ලෙස <span class='plainlinks'>[$1 නැවත ගිණුමක‍ට පිවිසිය හැක]</span>.
 ඔබගේ බ්‍රවුසරයෙහි පූර්වාපේක්‍ෂී සංචිතය (කෑෂය) පිරිසිදුකරන තෙක්, සමහරක් පිටු විසින් ඔබ තවදුරටත් පිවිසී ඇති බවක් දිගටම පෙන්නුම් කිරීමට ඉඩ ඇත.",
 'welcomecreation' => '== ආයුබෝවන්, $1! ==
 
@@ -626,7 +626,7 @@ $2',
 'nologin' => "ඔබ හට ගිණුමක් නොමැතිද? '''$1'''.",
 'nologinlink' => 'ගිණුමක් තනන්න',
 'createaccount' => 'අලුත් ගිණුමක් තනන්න',
-'gotaccount' => "දැනටමත් ගිණුමක් තිබේද? '''$1'''.",
+'gotaccount' => 'දැනටමත් ගිණුමක් තිබේද? $1.',
 'gotaccountlink' => 'පිවිසෙන්න',
 'userlogin-resetlink' => 'ඔබේ පිවිසුම් තොරතුරු අමතකද?',
 'createaccountmail' => 'විද්‍යුත් තැපෑල මගින්',
@@ -768,7 +768,7 @@ $2
 'link_sample' => 'සබැඳි ශීර්ෂය',
 'link_tip' => 'අභ්‍යන්තර සබැඳිය',
 'extlink_sample' => 'http://www.example.com සබැඳුම් මාතෘකාව',
-'extlink_tip' => 'බාහිර සබැඳිය ( http:// උපසර්ගය සිහි තබාගන්න)',
+'extlink_tip' => 'බාහිර සබැඳිය (http:// උපසර්ගය සිහි තබාගන්න)',
 'headline_sample' => 'සිරස්තල පෙළ',
 'headline_tip' => '2 වන මට්ටමෙහි සිරස්තලය',
 'nowiki_sample' => 'ආකෘතිකරණය-නොකල පෙළ මෙහි රුවන්න',
@@ -844,9 +844,9 @@ $2
 
 මෙම නව ගිණුම සඳහා මුරපදය, ප්‍රවිෂ්ට වීමෙන් අනතුරුව, ''[[Special:ChangePassword|මුර පදය වෙනස් කරන්න]]''  පිටුව තුලදී වෙනස් කල හැක.",
 'newarticle' => '(නව)',
-'newarticletext' => "බà·\90ඳà·\92යà¶\9aà·\8a à¶\94à·\83à·\8aà·\83à·\9a à¶´à·\90මà·\92ණ à¶\94බ à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶¯à·\90නට à¶±à·\9cපà·\80තà·\92න à¶½à·\92පà·\92යකටයි.
+'newarticletext' => "බà·\90ඳà·\92යà¶\9aà·\8a à¶\94à·\83à·\8aà·\83à·\9a à¶´à·\90මà·\92ණ à¶\94බ à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶¯à·\90නට à¶±à·\9cපà·\80තà·\92න à¶´à·\92ටà·\94à·\80කටයි.
 මෙම ලිපිය තැනීමට අවශ්‍ය නම්, පහත ඇති කොටුව තුල අකුරු ලිවීම අරඹන්න (වැඩිදුර තොරතුරු සඳහා [[{{MediaWiki:Helppage}}|උදවු පිටුව]] බලන්න).
-à¶\94බ à¶¸à·\99à·\84à·\92 à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶\85තà·\8aà·\80à·\90රà·\90දà·\8aදà¶\9aà·\92නà·\8a à¶±à¶¸à·\8a, à¶\94බà¶\9cà·\9a à·\83à·\90රà·\92à·\83රයà·\99à·\84à·\92 (බà·\8aâ\80\8dරà·\80à·\94à·\83රයà·\99à·\84à·\92) '''à¶\86පà·\83à·\94 (back)''' à¶¶à·\9cතà·\8aතම à¶\9aà·\8aලà·\92à¶\9aà·\8a à¶\9aරන්න.",
+à¶\94බ à¶¸à·\99à·\84à·\92 à¶´à·\92à·\80à·\92à·\83 à¶\87තà·\8aතà·\9a à¶\85තà·\8aà·\80à·\90රà·\90දà·\8aදà¶\9aà·\92නà·\8a à¶±à¶¸à·\8a, à¶\94බà¶\9cà·\9a à\9cà·\80à·\9aà·\82à¶\9aයà·\99à·\84à·\92 '''à¶\86පà·\83à·\94''' à¶¶à·\9cතà·\8aතම à¶\94බන්න.",
 'anontalkpagetext' => "----''මෙම සංවාද පිටුව අයත් වන්නේ තවමත් ගිණුමක් තනා නැති හෝ එසේ කොට එනමුදු එය භාවිතා නොකරන හෝ නිර්නාමික පරිශීලකයෙකුටය.
 එබැවින්, ඔහු/ඇය හැඳින්වීමට සංඛ්‍යාත්මක IP ලිපිනය භාවිතා කිරීමට අප හට සිදුවේ.
 පරිශීලකයන් කිහිප දෙනෙකු විසින් මෙවැනි IP ලිපිනයක් හවුලේ පරිහරණය කරනවා විය හැක.
@@ -1000,7 +1000,7 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 'currentrev' => 'නවතම සංශෝධනය',
 'currentrev-asof' => '$1 වන විට නවතම සංශෝධනය',
 'revisionasof' => '$1 තෙක් සංශෝධනය',
-'revision-info' => '$1 වන විට  $2 විසින් සිදු කර ඇති සංශෝධන',
+'revision-info' => '$1 වන විට $2 විසින් සිදු කර ඇති සංශෝධන',
 'previousrevision' => '← පැරණි සංශෝධනය',
 'nextrevision' => 'නව සංශෝධනය →',
 'currentrevisionlink' => 'වත්මන් සංශෝධනය',
@@ -1022,7 +1022,7 @@ $3 විසින් සපයා ඇති හේතුව ''$2'' වේ",
 # Revision feed
 'history-feed-title' => 'සංශෝධන ඉතිහාසය',
 'history-feed-description' => 'විකියෙහි මෙම පිටුව සඳහා ඇති සංශෝධන ඉතිහාසය',
-'history-feed-item-nocomment' => '$1 විසින්  $2 හිදී',
+'history-feed-item-nocomment' => '$1 විසින් $2 හිදී',
 'history-feed-empty' => 'අයැදුනු පිටුව නොපවතියි.
 එය විකියෙන් මකා දමා හෝ නම-වෙනස් කොට ඇතිවා විය හැකිය.
 අදාල නව පිටු සඳහා  [[Special:Search|විකිය තුල ගවේෂණය]] අත්හදා බලන්න.',
@@ -1164,8 +1164,8 @@ $1",
 'lineno' => 'පේළිය $1:',
 'compareselectedversions' => 'තෝරාගත් සංශෝධන සසඳන්න',
 'showhideselectedversions' => 'තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න',
-'editundo' => 'අහෝසි කරන්න',
-'diff-multi' => '({{PLURAL:$2|one user|$2 users}} විසින් සිදුකල {{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්| අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)',
+'editundo' => 'අහෝසි',
+'diff-multi' => '({{PLURAL:$2|එක් පරිශීලකයෙක්|පරිශීලකයන් $2 ක්}} විසින් සිදුකල {{PLURAL:$1|එක් අතරමැදි සංශෝධනයක්|අතරමැදි සංශෝධන $1 ක්}} පෙන්නුම් කර නොමැත.)',
 'diff-multi-manyusers' => '(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)',
 
 # Search results
@@ -1179,14 +1179,14 @@ $1",
 'notitlematches' => 'පිටු ශීර්ෂ ගැලපීම් කිසිවක් නොමැත',
 'textmatches' => 'පිටු පෙළ ගැළපෙයි',
 'notextmatches' => 'පිටු පෙළ කිසිවක් නොගැළපෙයි',
-'prevn' => 'පෙර  {{PLURAL:$1|$1}}',
-'nextn' => 'මීලඟ  {{PLURAL:$1|$1}}',
-'prevn-title' => 'පූර්ව  {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵලයන් $1}}',
-'nextn-title' => 'මීලඟ  {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵල $1}}',
+'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-exists' => "'''මෙම විකියෙහි \"[[:\$1]]\" ලෙස නම් කර ඇති පිටුවක් ඇත.'''",
 'searchmenu-new' => "'''මෙම විකියෙහි \"[[:\$1]]\" පිටුව තනන්න!'''",
 'searchhelp-url' => 'Help:පටුන',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|මෙම උපසර්ගය භාවිත කරමින් පිටු පිරික්සන්න]]',
@@ -1198,9 +1198,9 @@ $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|වචන 1 ක් |වචන $2 ක්}})',
+'search-result-size' => '$1 ({{PLURAL:$2|වචන 1 ක්|වචන $2 ක්}})',
 'search-result-category-size' => '{{PLURAL:$1|එක් සාමාජීකයෙන්|සාමාජීකයන් $1 ක්}} ({{PLURAL:$2|එක් උප-ප්‍රවර්ගයක්|උප-ප්‍රවර්ග $2 ක්}}, {{PLURAL:$3|එක් ගොනුවක්|ගොනු $3 ක්}})',
 'search-result-score' => 'අදාළතාව: $1%',
 'search-redirect' => '($1 යළි-යොමු කරන්න)',
@@ -1209,16 +1209,14 @@ $1",
 'search-interwiki-caption' => 'සොයුරු ව්‍යාපෘති',
 'search-interwiki-default' => '$1 වෙතින් ප්‍රතිඵල:',
 'search-interwiki-more' => '(තවත්)',
-'search-mwsuggest-enabled' => 'ඉඟි සමගින්',
-'search-mwsuggest-disabled' => 'ඉඟි නොමැත',
 'search-relatedarticle' => 'සහසම්බන්ධිත',
 'mwsuggest-disable' => 'AJAX ඇඟවිලි අක්‍රීය කරන්න',
 'searcheverything-enable' => 'සියළු නාමඅවකාශයන්හි ගවේෂණය කරන්න',
-'searchrelated' => 'à·\83à·\84à·\83මà·\8aබනà·\8aධිත',
+'searchrelated' => 'à\86à·\81à·\8aâ\80\8dරිත',
 'searchall' => 'සියල්ල',
 'showingresults' => "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
 'showingresultsnum' => "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$3|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$3''' ක්}} පහත පෙන්වා ඇත.",
-'showingresultsheader' => "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන් }}",
+'showingresultsheader' => "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන්}}",
 'nonefound' => "'''සටහන''': පෙරනිමියෙන් ගවේෂණය වන්නේ සමහරක් නාමඅවකාශ පමණි.
 ඔබ‍ගේ විමසුමට ''all:'' උපසර්ගය යෙදීම මගින් සියළු අන්තර්ගතය ගවේෂණයට ඉඩ සැලසීම අත්හදා බලන්න (සාකච්ඡා පිටු, සැකිලි, ආදියද ඇතුළුව), නැතහොත්, උපසර්ගය ලෙස අපේක්‍ෂිත නාමඅවකාශය භාවිතා කරන්න.",
 'search-nonefound' => 'විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.',
@@ -1307,7 +1305,7 @@ $1",
 'timezoneregion-indian' => 'ඉන්දියානු සාගරය',
 'timezoneregion-pacific' => 'පැසිපික් සාගරය',
 'allowemail' => 'අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න',
-'prefs-searchoptions' => 'à\9cà·\80à·\9aà·\82ණ à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
+'prefs-searchoptions' => 'à·\83à·\9cයනà·\8aන',
 'prefs-namespaces' => 'නාමඅවකාශ',
 'defaultns' => 'පෙරනිමියෙන් මෙම නාමඅවකාශයන්හි ගවේෂණය කරන්න:',
 'default' => 'පෙරනිමි',
@@ -1342,7 +1340,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'email' => 'විද්‍යුත් තැපෑල',
 'prefs-help-realname' => 'සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.
 ඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.',
-'prefs-help-email' => 'විද්‍යුත් ලිපිනය අත්‍යාවශ්‍ය නොවේ, එහෙත් ඔබගේ මුර පදය අමතක වූ විටෙක එය යලි සැකසීමට නම් විද්‍යුත් ලිපිනයක් දී තිබිය යුතුය.',
+'prefs-help-email' => 'à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶½à·\92පà·\92නය à¶\85තà·\8aâ\80\8dයà·\8fà·\80à·\81à·\8aâ\80\8dය à¶±à·\9cà·\80à·\9a, à¶\91à·\84à·\99තà·\8a à¶\94බà¶\9cà·\9a à¶¸à·\94ර à¶´à¶¯à¶º à¶\85මතà¶\9a à·\80à·\96 à·\80à·\92ටà·\99à¶\9a à¶\91ය à¶ºà¶½à·\92 à·\83à·\90à¶\9aà·\83à·\93මට à¶±à¶¸à·\8a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶½à·\92පà·\92නයà¶\9aà·\8a à¶¯à·\93 à¶­à·\92බà·\92ය à¶ºà·\94තà·\94ය.',
 'prefs-help-email-others' => 'ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.
 අනෙකුත් පරිශීලකයන් ඔබව අමතන විට ඔබගේ විද්‍යුත් තැපැල් ලිපිනය හෙලිදරවු නොකෙරේ.',
 'prefs-help-email-required' => 'විද්‍යුත්-ලිපිනය අවශ්‍යයි.',
@@ -1526,7 +1524,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි',
 'recentchanges-label-bot' => 'මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි',
 'recentchanges-label-unpatrolled' => 'මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත',
-'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''  }} පහත දැක්වේ.",
+'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''}} පහත දැක්වේ.",
 'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
 'rclistfrom' => '$1 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න',
 'rcshowhideminor' => 'සුළු සංස්කරණ $1',
@@ -1557,13 +1555,13 @@ HTML ටැගයන් පිරික්සන්න.',
 'recentchangeslinked-toolbox' => 'සහසම්බන්ධිත වෙනස්වීම්',
 'recentchangeslinked-title' => '"$1" ආශ්‍රිත වෙනස්කිරීම්',
 'recentchangeslinked-noresult' => 'සලකා බැලූ කාලසීමාවෙහිදී, සබැඳි පිටු වල කිසිදු වෙනසක් සිදුවී නොමැත.',
-'recentchangeslinked-summary' => "විශේෂී ලෙස නිරූපිත පිටුවකට (හෝ විශේෂි ලෙස නිරූපිත ප්‍රවර්ගයක සාමාජීකයන්ට) සබැඳි පිටුවල  මෑතදී සිදුවූ වෙනස්වීම් දැක්වෙන ලැයිස්තුවක් මෙහි දැක්වේ.
-[[Special:Watchlist|ඔබගේ  මුර-ලැයිස්තුවෙහි]] පිටු  '''තදකුරු''' වලින් දක්වා ඇත.",
+'recentchangeslinked-summary' => "විශේෂී ලෙස නිරූපිත පිටුවකට (හෝ විශේෂි ලෙස නිරූපිත ප්‍රවර්ගයක සාමාජීකයන්ට) සබැඳි පිටුවල මෑතදී සිදුවූ වෙනස්වීම් දැක්වෙන ලැයිස්තුවක් මෙහි දැක්වේ.
+[[Special:Watchlist|ඔබගේ  මුර-ලැයිස්තුවෙහි]] පිටු '''තදකුරු''' වලින් දක්වා ඇත.",
 'recentchangeslinked-page' => 'පිටු නාමය:',
 'recentchangeslinked-to' => 'ඒ වෙනුවට දී ඇති පිටුවට සබැඳෙන පිටුවල වෙනස්වීම්  පෙන්වන්න',
 
 # Upload
-'upload' => 'à¶\9cà·\9cනà·\94à·\80à¶\9aà·\8a à¶\8bඩà·\94à¶\9cත à¶\9aà·\92රà·\93ම',
+'upload' => 'à¶\9cà·\9cනà·\94à·\80à¶\9aà·\8a à¶\8bඩà·\94à¶\9cත à¶\9aරනà·\8aන',
 'uploadbtn' => 'ගොනුව උඩුගත කරන්න',
 'reuploaddesc' => 'උඩුගත කිරීම අත්හැරදමා උඩුගත කිරීම් ආකෘති පත්‍රය වෙත යන්න',
 'upload-tryagain' => 'වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න',
@@ -2187,7 +2185,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'notanarticle' => 'අන්තර්ගත පිටුවක් නොවේ',
 'notvisiblerev' => 'සංශෝධනය මකාදමා ඇත',
 'watchnochange' => 'ඔබ විසින් මුරකෙරෙන කිසිදු අයිතමයක් දක්වා ඇති කාල සීමාවෙහිදී  සංස්කරණයට භාජනය වී නොමැත.',
-'watchlist-details' => 'සාකච්ඡා පිටු නොගිණුනු කල, ඔබගේ මුර-ලැයිස්තුවෙහි {{PLURAL:$1|එක් පිටුවක්|පිටු $1 ක්}} ඇත.',
+'watchlist-details' => 'සාකච්ඡා පිටු නොගිණුනු කල, ඔබගේ මුර ලැයිස්තුවෙහි {{PLURAL:$1|එක් පිටුවක්|පිටු $1 ක්}} ඇත.',
 'wlheader-enotif' => '* විද්‍යුත්-තැපැල් දැනුම්දීම සක්‍රීය කෙරිණි.',
 'wlheader-showupdated' => "* ඔබ විසින් ඒවාට අවසන් වරට පිවිසුනු පසුව වෙනස්කෙරුනු පිටු  '''තදකුරු''' වලින් පෙන්වා ඇත",
 'watchmethod-recent' => 'මුර-කෙරෙන පිටු සඳහා මෑත සංස්කරණයන් පරික්‍ෂා කරමින්',
@@ -2195,7 +2193,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 '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
@@ -2458,7 +2456,7 @@ $1',
 'sp-contributions-submit' => 'සොයන්න',
 
 # What links here
-'whatlinkshere' => 'සබැඳි පිටු',
+'whatlinkshere' => 'මà·\99තනට à·\83බà·\90ඳà·\92 à¶´à·\92ටà·\94',
 'whatlinkshere-title' => '"$1" වෙත සබැ‍ඳෙන පිටු',
 'whatlinkshere-page' => 'පිටුව:',
 'linkshere' => "ඉදිරියෙහි දැක්වෙන පිටු, '''[[:$1]]''' වෙත සබැඳෙයි:",
@@ -2844,16 +2842,15 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-pt-preferences' => 'මගේ අභිරුචි',
 'tooltip-pt-watchlist' => 'වෙනස්වීම් සිදුවී තිබේදැයි යන්න පිලිබඳව ඔබගේ විමසුමට ලක්ව ඇති පිටු ලැයිස්තුව',
 'tooltip-pt-mycontris' => 'ඔබගේ දායකත්වයන් ලැයිස්තුව‍',
-'tooltip-pt-login' => 'පà·\8aâ\80\8dරà·\80à·\92à·\83à·\93ම à·\80ඩà·\8f à¶ºà·\9dà¶\9cà·\8aâ\80\8dයà·\80à·\9a. à¶±à¶¸à·\94තà·\8a à¶\91ය à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\90ත.',
+'tooltip-pt-login' => 'පà·\92à·\80à·\92à·\83à·\93ම à·\80ඩà·\8f à¶ºà·\9dà¶\9cà·\8aâ\80\8dය à·\80à·\9a. à¶±à¶¸à·\94තà·\8a, à¶\91ය à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\90ත',
 'tooltip-pt-anonlogin' => 'එය අවශ්‍ය‍යෙන් කල යුත්තක් ‍නොවුනද, ප්‍රවිෂ්ට වීම සඳහා ඔබ ධෛර්යමත් කරනු ලැබේ.',
 'tooltip-pt-logout' => 'නික්මීම',
 'tooltip-ca-talk' => 'අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව',
-'tooltip-ca-edit' => 'ඔබ‍ට මෙම පිටුව සංස්කරණය කල හැක.
-සුරැකීමට පෙර කරුණාකර පෙරදසුන බොත්තම භාවිතා කරන්න.',
+'tooltip-ca-edit' => 'ඔබ‍ට මෙම පිටුව සංස්කරණය කල හැක. සුරැකීමට පෙර කරුණාකර පෙරදසුන බොත්තම භාවිතා කරන්න',
 'tooltip-ca-addsection' => 'නව ඡේදයක් අරඹන්න',
 'tooltip-ca-viewsource' => 'මෙම පිටුව ආරක්‍ෂණය කොට ඇත.
 ඔබට එහි මූලාශ්‍රය නැරඹිය හැක.',
-'tooltip-ca-history' => 'මà·\99ම à¶´à·\92ටà·\94à·\80à·\9a à¶´à·\99ර à\85නà·\94à·\80à·\8fදයනà·\8a.',
+'tooltip-ca-history' => 'මà·\99ම à¶´à·\92ටà·\94à·\80à·\9a à¶´à·\99ර à·\83à¶\82à·\81à·\9dධනයනà·\8a',
 'tooltip-ca-protect' => 'මෙම පිටුව ආරක්‍ෂණය කරන්න',
 'tooltip-ca-unprotect' => 'මෙම පිටුවෙහි ආරක්ෂණ තත්වය වෙනස් කරන්න',
 'tooltip-ca-delete' => 'මේ පිටුව මකන්න',
@@ -2870,7 +2867,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-n-portal' => 'ව්‍යාපෘති පිළිබඳ, ඔබට කල හැක්කේ කුමක්ද, තොරතුරු සොයාගත හැක්කේ කොතැනද',
 'tooltip-n-currentevents' => 'කාලීන සිදුවීම් පිළිබඳ පසුබිම් තොරතුරු සොයා දැනගන්න',
 'tooltip-n-recentchanges' => 'විකියෙහි මෑත වෙනස්කිරීම් ලැයිස්තුවක්',
-'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶½à·\9dඩà·\8aකරන්න',
+'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶´à·\96රණය කරන්න',
 'tooltip-n-help' => 'සොයා දැනගත හැකි තැන',
 'tooltip-t-whatlinkshere' => 'මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුව',
 'tooltip-t-recentchangeslinked' => 'මෙම පිටුව හා සබැඳි පිටුවල ‍නව වෙනස්වීම්',
@@ -3004,7 +3001,7 @@ $1',
 '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' => 'මෙයට ඉහල විසර්ජනයක් (resolution) දක්වා එළඹිය නොහැක.',
+'file-nohires' => 'මෙයට ඉහල විසර්ජනයක් දක්වා එළඹිය නොහැක.',
 'svg-long-desc' => 'SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3',
 'show-big-image' => 'පූර්ණ විභේදනය',
 'show-big-image-preview' => 'මෙම පෙරදසුනෙහි තරම: $1.',
@@ -3087,7 +3084,7 @@ Variants for Chinese language
 'variantname-tg' => 'tg',
 
 # Metadata
-'metadata' => 'පාරදත්ත (Metadata)',
+'metadata' => 'පාරදත්ත',
 'metadata-help' => 'සමහරවිට ඩිජිටල් කැමරාවක් හෝ ස්කෑනරයක් හෝ භාවිතයෙන්, නිමැවා හෝ සංඛ්‍යාංකකරණය (ඩිජිටල්කරණය) කොට එක් කල , අමතර තොරතුරු මෙම ගොනුවේ අඩංගුය.
 ගොනුව මුලින්ම පැවැති තත්ත්වයෙහි සිට විකරණය කොට තිබේ නම්, සමහරක් තොරතුරු විකරිත ගොනුව පූර්ණ වශයෙන් පිළිඹිමු නොකරනු ඇත.',
 'metadata-expand' => 'විස්තීරණය කරන ලද විස්තර පෙන්වන්න',
@@ -3095,14 +3092,14 @@ Variants for Chinese language
 'metadata-fields' => 'Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.
 Others will be hidden by default.
 * make
-* model
+* මාදිලිය
 * datetimeoriginal
 * exposuretime
 * fnumber
 * isospeedratings
 * focallength
-* artist
-* copyright
+* කලාකරු
+* ප්‍රකාශන හිමිකම
 * imagedescription
 * gpslatitude
 * gpslongitude
@@ -3684,8 +3681,8 @@ This confirmation code will expire at $4.',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'අදාල වෙනස්වීම් නරඹන්න',
-'watchlisttools-edit' => 'මුර-ලැයිස්තුව නැරඹීම හා සංස්කරණය',
-'watchlisttools-raw' => 'නොනිමි මුර-ලැයිස්තුව සංස්කරණය කරන්න',
+'watchlisttools-edit' => 'මුර ලැයිස්තුව නැරඹීම හා සංස්කරණය',
+'watchlisttools-raw' => 'නොනිමි මුර ලැයිස්තුව සංස්කරණය කරන්න',
 
 # Iranian month names
 'iranian-calendar-m1' => 'ෆාර්වාදීන්',
@@ -3751,7 +3748,7 @@ This confirmation code will expire at $4.',
 
 # Core parser functions
 'unknown_extension_tag' => 'අඥාත ප්‍රසර්ජන ටැගය "$1"',
-'duplicate-defaultsort' => 'අවවාදයයි: "$2" පෙරනිමි සුබෙදුම් යතුර විසින් ‍පූර්ව පෙරනිමි සුබෙදුම් යතුර  වූ  "$1" අතික්‍රමණය කරයි.',
+'duplicate-defaultsort' => '\'\'\'අවවාදයයි:\'\'\' "$2" පෙරනිමි සුබෙදුම් යතුර විසින් ‍පූර්ව පෙරනිමි සුබෙදුම් යතුර වූ "$1" අතික්‍රමණය කරයි.',
 
 # Special:Version
 'version' => 'අනුවාදය',
@@ -3926,6 +3923,10 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'feedback-bugcheck' => 'කදිමයි! දැන් එය දැනටමත් [$1 හඳුනාගත් දෝෂ]වල තිබේ දැයි පිරික්සන්න.',
 'feedback-bugnew' => 'මම පරික්ෂා කළා. නව දෝෂය වාර්තා කරන්න',
 
+# Search suggestions
+'searchsuggest-search' => 'ගවේශණය කරන්න',
+'searchsuggest-containing' => 'ඇතුළත් වෙමින් පවතී...',
+
 # API errors
 'api-error-badaccess-groups' => 'මෙම විකියට ගොනු උඩුගතකිරීම සඳහා ඔබට අවසර නැත.',
 'api-error-badtoken' => 'අභ්‍යන්තර දෝෂය: නොසුදුසු ටෝකනය.',
index 44c5218..5fcadbf 100644 (file)
@@ -179,69 +179,69 @@ $bookstoreList = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#presmeruj', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALÉRIE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__VYNÚTIŤOBSAH__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__OBSAH__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NEUPRAVOVAŤSEKCIE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AKTUÁLNYMESIAC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'NÁZOVAKTUÁLNEHOMESIACA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'NÁZOVAKTUÁLNEHOMESIACAGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'NÁZOVAKTUÁLNEHOMESIACASKRATKA', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'AKTUÁLNYDEŇ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'AKTUÁLNYDEŇ2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NÁZOVAKTUÁLNEHODŇA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AKTUÁLNYROK', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AKTUÁLNYČAS', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'AKTUÁLNAHODINA', 'CURRENTHOUR' ),
-       'numberofpages'           => array( '1', 'POČETSTRÁNOK', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'POČETČLÁNKOV', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'POČETSÚBOROV', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'POČETPOUŽÍVATEĽOV', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'POČETÚPRAV', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'NÁZOVSTRÁNKY', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'NÁZOVSTRÁNKYE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'MENNÝPRIESTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'MENNÝPRIESTORE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSNÝPRIESTOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSNÝPRIESTORE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'PRIESTORČLÁNKOV', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'PRIESTORČLÁNKOVE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PLNÝNÁZOVSTRÁNKY', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PLNÝNÁZOVSTRÁNKYE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'NÁZOVPODSTRÁNKY', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'NÁZOVPODSTRÁNKYE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKY', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKYE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'NÁZOVDISKUSNEJSTRÁNKY', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'NÁZOVDISKUSNEJSTRÁNKYE', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'NÁZOVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'NÁZOVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'SPRÁVA:', 'MSG:' ),
-       'subst'                   => array( '0', 'NAHR:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'náhľad', 'náhľadobrázka', 'thumbnail', 'thumb' ),
-       'img_right'               => array( '1', 'vpravo', 'right' ),
-       'img_left'                => array( '1', 'vľavo', 'left' ),
-       'img_none'                => array( '1', 'žiadny', 'none' ),
-       'img_width'               => array( '1', '$1bod', '$1px' ),
-       'img_center'              => array( '1', 'stred', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
-       'img_border'              => array( '1', 'okraj', 'border' ),
-       'sitename'                => array( '1', 'NÁZOVLOKALITY', 'SITENAME' ),
-       'ns'                      => array( '0', 'MP:', 'NS:' ),
-       'servername'              => array( '0', 'NÁZOVSERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'CESTAKUSKRIPTU', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'currentweek'             => array( '1', 'AKTUÁLNYTÝŽDEŇ', 'CURRENTWEEK' ),
-       'currentversion'          => array( '1', 'AKTUÁLNAVERZIA', 'CURRENTVERSION' ),
-       'language'                => array( '0', '#JAZYK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'numberofadmins'          => array( '1', 'POČETSPRÁVCOV', 'NUMBEROFADMINS' ),
-       'filepath'                => array( '0', 'CESTAKSÚBORU:', 'FILEPATH:' ),
-       'hiddencat'               => array( '1', '__SKRYTÁKATEGÓRIA__', '__SKRYTÁKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRÁNOKVKATEGÓRII', 'STRÁNOKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VEĽKOSŤSTRÁNKY', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#presmeruj', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZOBSAHU__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALÉRIE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__VYNÚTIŤOBSAH__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__OBSAH__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NEUPRAVOVAŤSEKCIE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AKTUÁLNYMESIAC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'NÁZOVAKTUÁLNEHOMESIACA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'NÁZOVAKTUÁLNEHOMESIACAGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'NÁZOVAKTUÁLNEHOMESIACASKRATKA', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'AKTUÁLNYDEŇ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'AKTUÁLNYDEŇ2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NÁZOVAKTUÁLNEHODŇA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AKTUÁLNYROK', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AKTUÁLNYČAS', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'AKTUÁLNAHODINA', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'POČETSTRÁNOK', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'POČETČLÁNKOV', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'POČETSÚBOROV', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'POČETPOUŽÍVATEĽOV', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'POČETÚPRAV', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NÁZOVSTRÁNKY', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'NÁZOVSTRÁNKYE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'MENNÝPRIESTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'MENNÝPRIESTORE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSNÝPRIESTOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSNÝPRIESTORE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'PRIESTORČLÁNKOV', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'PRIESTORČLÁNKOVE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PLNÝNÁZOVSTRÁNKY', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PLNÝNÁZOVSTRÁNKYE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'NÁZOVPODSTRÁNKY', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'NÁZOVPODSTRÁNKYE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKY', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'NÁZOVZÁKLADNEJSTRÁNKYE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'NÁZOVDISKUSNEJSTRÁNKY', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'NÁZOVDISKUSNEJSTRÁNKYE', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'NÁZOVČLÁNKU', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'NÁZOVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'SPRÁVA:', 'MSG:' ),
+       'subst'                     => array( '0', 'NAHR:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'náhľad', 'náhľadobrázka', 'thumbnail', 'thumb' ),
+       'img_right'                 => array( '1', 'vpravo', 'right' ),
+       'img_left'                  => array( '1', 'vľavo', 'left' ),
+       'img_none'                  => array( '1', 'žiadny', 'none' ),
+       'img_width'                 => array( '1', '$1bod', '$1px' ),
+       'img_center'                => array( '1', 'stred', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
+       'img_border'                => array( '1', 'okraj', 'border' ),
+       'sitename'                  => array( '1', 'NÁZOVLOKALITY', 'SITENAME' ),
+       'ns'                        => array( '0', 'MP:', 'NS:' ),
+       'servername'                => array( '0', 'NÁZOVSERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'CESTAKUSKRIPTU', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'currentweek'               => array( '1', 'AKTUÁLNYTÝŽDEŇ', 'CURRENTWEEK' ),
+       'currentversion'            => array( '1', 'AKTUÁLNAVERZIA', 'CURRENTVERSION' ),
+       'language'                  => array( '0', '#JAZYK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JAZYKOBSAHU', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'numberofadmins'            => array( '1', 'POČETSPRÁVCOV', 'NUMBEROFADMINS' ),
+       'filepath'                  => array( '0', 'CESTAKSÚBORU:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__SKRYTÁKATEGÓRIA__', '__SKRYTÁKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRÁNOKVKATEGÓRII', 'STRÁNOKVKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VEĽKOSŤSTRÁNKY', 'PAGESIZE' ),
 );
 
 $namespaceNames = array(
@@ -545,6 +545,10 @@ $1',
 'youhavenewmessages' => 'Máte $1 ($2).',
 'newmessageslink' => 'nové správy',
 '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}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|posledná zmena|posledné zmeny}}',
 'youhavenewmessagesmulti' => 'Máte nové správy na $1',
 'editsection' => 'upraviť',
 'editold' => 'upraviť',
@@ -596,9 +600,9 @@ Zoznam platných špeciálnych stránok nájdete na [[Special:SpecialPages|{{int
 # General errors
 'error' => 'Chyba',
 'databaseerror' => 'Chyba v databáze',
-'dberrortext' => 'Nastala syntaktická chyba v príkaze na prehľadávanie databázy.
-To môže značiť chybu v softvéri.
-Posledná požiadavka na databázu bola:
+'dberrortext' => 'V databázovom dopyte sa vyskytla syntaktická chyba.
+Príčinou môže byť chyba v softvéri.
+Posledný dopyt bol:
 <blockquote><tt>$1</tt></blockquote>
 z funkcie „<tt>$2</tt>“.
 Databáza vrátila chybu „<tt>$3: $4</tt>“.',
@@ -682,7 +686,7 @@ Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
 # Login and logout pages
 'logouttext' => "'''Práve ste sa odhlásili.'''
 
-Odteraz môžete používať {{GRAMMAR:akuzatív|{{SITENAME}}}} ako anonymný používateľ alebo sa môžete opäť [[Special:UserLogin|prihlásiť]] pod rovnakým alebo odlišným používateľským menom.
+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! ==
 
@@ -956,10 +960,9 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'blocked-notice-logextract' => 'Tento používateľ je momentálne zablokovaný.
 Dolu je pre informáciu posledná položka zo záznamu blokovaní:',
 'clearyourcache' => "'''Poznámka:''' Aby sa zmeny prejavili, po uložení musíte vymazať vyrovnávaciu pamäť vášho prehliadača.
-* '''Mozilla Firefox / Safari:''' Držte stlačený ''Shift'' a kliknite na ''Reload'' alebo stlačte buď ''Ctrl-F5'' alebo ''Ctrl-R'' (''⌘-R'' na Mac)
+* '''Mozilla Firefox / Safari:''' Držte stlačený ''Shift'' a kliknite na ''Reload'' alebo stlačte buď ''Ctrl-F5'' alebo ''Ctrl-R'' (''⌘-R'' na Mac)
 * '''Google Chrome:''' Stlačte ''Ctrl-Shift-R'' (''⌘-Shift-R'' na Mac)
 * '''Internet Explorer:''' Držte ''Ctrl'' a kliknite na ''Refresh'' alebo stlačte ''Ctrl-F5''
-* '''Konqueror:''' Kliknite na tlačidlo ''Reload'' alebo stlačte ''F5''
 * '''Opera:''' Vymazať vyrovnávaciu pamäť prehliadača v ponuke ''Tools→Preferences''",
 'usercssyoucanpreview' => "'''Tip:''' Váš nový CSS pred uložením otestujete stlačením tlačidla „{{int:showpreview}}“.",
 'userjsyoucanpreview' => "'''Tip:''' Váš nový JS pred uložením otestujete stlačením tlačidla „{{int:showpreview}}“.",
@@ -1208,9 +1211,11 @@ Nemáte k nej prístup.',
 'revdelete-concurrent-change' => 'Chyba pri zmene položky s dátumom $2, $1: zdá sa, že kým ste ju menili vykonal zmenu niekto iný.
 Pozrite sa prosím do záznamov.',
 'revdelete-only-restricted' => 'Chyba pri skrývaní položky s dátumom $2, $1: nemôžete skryť položku pred správcami bez toho, aby ste vybrali aj jednu z ďalších možností viditeľnosti.',
-'revdelete-reason-dropdown' => '*Bežné dôvody zmazania
+'revdelete-reason-dropdown' => '*Obvyklé dôvody zmazania
 ** Porušenie autorských práv
-** Nevhodné osobné informácie',
+** Nevhodné komentáre alebo osobné informácie
+** Nevhodné meno používateľa
+** Potenciálne hanlivé alebo ohováračské údaje',
 'revdelete-otherreason' => 'Ďalšie dôvody:',
 'revdelete-reasonotherlist' => 'Iný dôvod',
 'revdelete-edit-reasonlist' => 'Upraviť dôvody zmazania',
@@ -1306,8 +1311,6 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-interwiki-caption' => 'Sesterské projekty',
 'search-interwiki-default' => '$1 výsledkov:',
 'search-interwiki-more' => '(viac)',
-'search-mwsuggest-enabled' => 's návrhmi',
-'search-mwsuggest-disabled' => 'bez návrhov',
 'search-relatedarticle' => 'Súvisiace',
 'mwsuggest-disable' => 'Vypnúť AJAX návrhy',
 'searcheverything-enable' => 'Vyhľadať vo všetkých menných priestoroch',
@@ -1827,7 +1830,7 @@ Ak problém pretrváva, kontaktujte [[Special:ListUsers/sysop|správcu systému]
 'backend-fail-internal' => 'Vyskytla sa neznáma chyba v úložisku „$1“.',
 'backend-fail-contenttype' => 'Nebolo možné určiť typ obsahu súboru, ktorý sa má uložiť na „$1“.',
 'backend-fail-batchsize' => 'Do úložiska bola zaslaná dávka s $1 {{PLURAL:$1|operáciou|operáciami}}; limit je $2 {{PLURAL:$2|operácia|operácie|operácií}}.',
-'backend-fail-usable' => 'Nie je možné zapísať súbor  $1  kvôli nedostatočným povoleniam alebo chýbajúcim adresárom/kontajnerom.',
+'backend-fail-usable' => 'Nie je možné čítať alebo zapísať súbor  $1  kvôli nedostatočným povoleniam alebo chýbajúcim adresárom/kontajnerom.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nepodarilo sa pripojiť k žurnálovej databáze úložiska „$1“.',
@@ -1956,6 +1959,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' => 'Ľutujeme, tento súbor nie je možné prepísať.',
 
 # File reversion
 'filerevert' => 'Obnoviť $1',
@@ -2062,6 +2066,7 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajty|bajtov}}',
 'ncategories' => '$1 {{PLURAL:$1|kategória|kategórie|kategórií}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki odkaz|interwiki odkazy|interwiki odkazov}}',
 'nlinks' => '$1 {{PLURAL:$1|odkaz|odkazy|odkazov}}',
 'nmembers' => '$1 {{PLURAL:$1|člen|členovia|členov}}',
 'nrevisions' => '$1 {{PLURAL:$1|revízia|revízie|revízií}}',
@@ -2090,6 +2095,7 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 'mostlinkedtemplates' => 'Najčastejšie odkazované šablóny',
 'mostcategories' => 'Stránky s najväčším počtom kategórií',
 'mostimages' => 'Najčastejšie odkazované súbory',
+'mostinterwikis' => 'Stránky s najväčším počtom interwiki odkazov',
 'mostrevisions' => 'Stránky s najväčším počtom úprav',
 'prefixindex' => 'Všetky stránky s predponou',
 'prefixindex-namespace' => 'Všetky stránky s predponou (menný priestor $1)',
@@ -2236,6 +2242,8 @@ Môžete si prečítať [[{{MediaWiki:Listgrouprights-helppage}}|ďalšie inform
 'mailnologin' => 'Žiadna adresa na zaslanie',
 'mailnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.',
 'emailuser' => 'E-mail tomuto používateľovi',
+'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.
@@ -2922,7 +2930,6 @@ Uložte ho na svoj disk a nahrajte sem.',
 
 # JavaScriptTest
 'javascripttest' => 'Testovanie JavaScriptu',
-'javascripttest-disabled' => 'Táto funkcia je vypnutá.',
 'javascripttest-title' => 'Beží $1 testov',
 'javascripttest-pagetext-noframework' => 'Táto stránka je vyhradená pre testy JavaScriptu.',
 'javascripttest-pagetext-unknownframework' => 'Neznáma testovacia platfoma „$1“.',
@@ -3063,11 +3070,14 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 
 # Info page
 'pageinfo-title' => 'Informácie o „$1“',
-'pageinfo-header-edits' => 'Úpravy',
+'pageinfo-header-basic' => 'Základné údaje',
+'pageinfo-header-edits' => 'História úprav',
+'pageinfo-article-id' => 'ID stránky',
 'pageinfo-views' => 'Počet zobrazení',
 'pageinfo-watchers' => 'Počet sledovateľov',
-'pageinfo-edits' => 'Počet úprav',
-'pageinfo-authors' => 'Počet rôznych autorov',
+'pageinfo-lasttime' => 'Dátum poslednej úpravy',
+'pageinfo-edits' => 'Celkový počet úprav',
+'pageinfo-authors' => 'Celkový počet autorov',
 
 # Skin names
 'skinname-standard' => 'Klasický',
@@ -3925,6 +3935,10 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'feedback-bugcheck' => 'Skvelé! Teraz len skontrolujte, či to nie je jedna z už [$1 známych chýb].',
 'feedback-bugnew' => 'Skontroloval som. Poslať nové hlásenie o chybe.',
 
+# Search suggestions
+'searchsuggest-search' => 'Hľadať',
+'searchsuggest-containing' => 'obsahuje...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nemáte oprávnenie nahrávať súbory na tejto wiki.',
 'api-error-badtoken' => 'Vnútorná chyba: Zlý token.',
index 42c9f54..ea0db4d 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Dbc334
+ * @author Eleassar
  * @author Freakolowsky
  * @author Irena Plahuta
  * @author McDutchie
@@ -113,44 +114,44 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#PREUSMERITEV', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BREZKAZALAVSEBINE__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BREZGALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__VSILIKAZALOVSEBINE__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__POGLAVJE__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BREZUREJANJARAZDELKOV__', '__NOEDITSECTION__' ),
-       'img_thumbnail'           => array( '1', 'sličica', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'sličica=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'right' ),
-       'img_left'                => array( '1', 'levo', 'left' ),
-       'img_none'                => array( '1', 'brez', 'none' ),
-       'img_width'               => array( '1', '$1_pik', '$1px' ),
-       'img_center'              => array( '1', 'sredina', 'sredinsko', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'okvirjeno', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'brezokvirja', 'frameless' ),
-       'img_page'                => array( '1', 'stran=$1', 'm_stran $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'zgorajdesno', 'zgorajdesno=$1', 'zgorajdesno $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'obroba', 'border' ),
-       'img_sub'                 => array( '1', 'pod', 'podpisano', 'sub' ),
-       'img_super'               => array( '1', 'nad', 'nadpisano', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrh-besedila', 'text-top' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'dno-besedila', 'text-bottom' ),
-       'sitename'                => array( '1', 'IMESTRANI', 'SITENAME' ),
-       'server'                  => array( '0', 'STREZNIK', 'SERVER' ),
-       'grammar'                 => array( '0', 'SKLON:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SPOL:', 'GENDER:' ),
-       'plural'                  => array( '0', 'MNOZINA:', 'PLURAL:' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SKRITAKATEGORIJA__', '__HIDDENCAT__' ),
-       'index'                   => array( '1', '__KAZALO__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BREZKAZALA__', '__NOINDEX__' ),
-       'staticredirect'          => array( '1', '__STATICNAPREUSMERITEV__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'STOPNJAZASCITE', 'PROTECTIONLEVEL' ),
-       'url_path'                => array( '0', 'POT', 'PATH' ),
-       'url_query'               => array( '0', 'POIZVEDBA', 'QUERY' ),
+       'redirect'                  => array( '0', '#PREUSMERITEV', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BREZKAZALAVSEBINE__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BREZGALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__VSILIKAZALOVSEBINE__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__POGLAVJE__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BREZUREJANJARAZDELKOV__', '__NOEDITSECTION__' ),
+       'img_thumbnail'             => array( '1', 'sličica', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'sličica=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'right' ),
+       'img_left'                  => array( '1', 'levo', 'left' ),
+       'img_none'                  => array( '1', 'brez', 'none' ),
+       'img_width'                 => array( '1', '$1_pik', '$1px' ),
+       'img_center'                => array( '1', 'sredina', 'sredinsko', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'okvirjeno', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'brezokvirja', 'frameless' ),
+       'img_page'                  => array( '1', 'stran=$1', 'm_stran $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'zgorajdesno', 'zgorajdesno=$1', 'zgorajdesno $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'obroba', 'border' ),
+       'img_sub'                   => array( '1', 'pod', 'podpisano', 'sub' ),
+       'img_super'                 => array( '1', 'nad', 'nadpisano', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrh-besedila', 'text-top' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'dno-besedila', 'text-bottom' ),
+       'sitename'                  => array( '1', 'IMESTRANI', 'SITENAME' ),
+       'server'                    => array( '0', 'STREZNIK', 'SERVER' ),
+       'grammar'                   => array( '0', 'SKLON:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SPOL:', 'GENDER:' ),
+       'plural'                    => array( '0', 'MNOZINA:', 'PLURAL:' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SKRITAKATEGORIJA__', '__HIDDENCAT__' ),
+       'index'                     => array( '1', '__KAZALO__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BREZKAZALA__', '__NOINDEX__' ),
+       'staticredirect'            => array( '1', '__STATICNAPREUSMERITEV__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'STOPNJAZASCITE', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'POT', 'PATH' ),
+       'url_query'                 => array( '0', 'POIZVEDBA', 'QUERY' ),
 );
 
 $linkTrail = '/^([a-zčćđžš]+)(.*)$/sDu';
@@ -341,7 +342,7 @@ $messages = array(
 'vector-action-protect' => 'Zaščiti',
 'vector-action-undelete' => 'Vrni',
 'vector-action-unprotect' => 'Spremeni zaščito',
-'vector-simplesearch-preference' => 'Omogoči izboljšane predloge iskanja (samo koža Vector)',
+'vector-simplesearch-preference' => 'Omogoči poenostavljeno vrstico za iskanje (samo koža Vector)',
 'vector-view-create' => 'Ustvari',
 'vector-view-edit' => 'Uredi',
 'vector-view-history' => 'Zgodovina',
@@ -448,7 +449,10 @@ $1',
 'youhavenewmessages' => 'Imate $1 ($2)',
 'newmessageslink' => 'nova sporočila',
 'newmessagesdifflink' => 'zadnja sprememba',
+'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugega uporabnika|$3 uporabnikov}} ($2).',
+'youhavenewmessagesmanyusers' => 'Imate $1 od veliko uporabnikov ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novo sporočilo|nova sporočila}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|zadnja sprememba|zadnji spremembi|zadnje spremembe}}',
 'youhavenewmessagesmulti' => 'Na $1 imate novo sporočilo',
 'editsection' => 'uredi',
 'editold' => 'spremeni',
@@ -465,12 +469,12 @@ $1',
 'viewdeleted' => 'Prikažem $1?',
 'restorelink' => '$1 {{PLURAL:$1|izbrisano redakcijo|izbrisani redakciji|izbrisane redakcije|izbrisanih redakcij}}',
 'feedlinks' => 'Podajanje:',
-'feed-invalid' => 'Neveljavna vrsta naročniškega dovoda.',
-'feed-unavailable' => 'Živi zaznamki niso na voljo',
-'site-rss-feed' => '$1 RSS vir',
-'site-atom-feed' => '$1 Atom vir',
-'page-rss-feed' => '»$1« RSS vir',
-'page-atom-feed' => '»$1« Atom vir',
+'feed-invalid' => 'Neveljavna vrsta naročniškega vira.',
+'feed-unavailable' => 'Živi zaznamki niso na razpolago.',
+'site-rss-feed' => 'RSS-vir strani »$1«',
+'site-atom-feed' => 'Atom-vir strani »$1«',
+'page-rss-feed' => 'RSS-vir strani »$1«',
+'page-atom-feed' => 'Atom-vir strani »$1«',
 'red-link-title' => '$1 (stran ne obstaja)',
 'sort-descending' => 'Razvrsti padajoče',
 'sort-ascending' => 'Razvrsti naraščajoče',
@@ -501,11 +505,11 @@ Seznam vseh prepoznanih posebnih strani je na razpolago na strani [[Special:Spec
 'error' => 'Napaka',
 'databaseerror' => 'Napaka zbirke podatkov',
 'dberrortext' => 'Prišlo je do napake podatkovne zbirke.
-Vzrok bi lahko bil nesprejemljiv iskalni niz ali programski hrošč.
-Zadnje poskušano iskanje:
-<blockquote><tt>$1</tt></blockquote>
-znotraj funkcije »<tt>$2</tt>«.
-Podatkovna zbirka je vrnila napako »<tt>$3: $4</tt>«.',
+Vzrok je lahko programski hrošč v programju.
+Zadnja poskušana poizvedba po zbirki podatkov:
+<blockquote><code>$1</code></blockquote>
+znotraj funkcije »<code>$2</code>«.
+Zbirka podatkov je vrnila napako »<samp>$3: $4</samp>«.',
 'dberrortextcl' => 'Pri iskanju v podatkoovni zbirki je prišlo do skladenjske napake.
 Zadnje iskanje v zbirki podatkov:
 »$1«
@@ -547,8 +551,8 @@ Vrnila ni nobene razlage.',
 'badtitle' => 'Nepravilen naslov',
 'badtitletext' => 'Navedeni naslov strani je neveljaven, prazen, napačno povezan k drugim jezikom oziroma wikiprojektom.
 Morda vsebuje enega ali več nepodprtih znakov.',
-'perfcached' => 'Navedeni podatki so shranjeni v predpomnilniku in morda niso popolnoma posodobljeni. V predpomnilniku {{PLURAL:$1|je|sta|so|je}} na voljo največ $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}}.',
-'perfcachedts' => 'Prikazani podatki so shranjeni v predpomnilniku in so bili nazadnje osveženi $1. V predpomnilniku {{PLURAL:$4|je|sta|so|je}} na voljo največ $4 {{PLURAL:$4|rezultat|rezultata|rezultate|rezultatov}}.',
+'perfcached' => 'Navedeni podatki so shranjeni v predpomnilniku in morda niso popolnoma posodobljeni. V predpomnilniku {{PLURAL:$1|je|sta|so|je}} na razpolago največ $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}}.',
+'perfcachedts' => 'Prikazani podatki so shranjeni v predpomnilniku in so bili zadnjič osveženi $1. V predpomnilniku {{PLURAL:$4|je|sta|so|je}} na razpolago največ $4 {{PLURAL:$4|rezultat|rezultata|rezultate|rezultatov}}.',
 'querypage-no-updates' => 'Posodobitve za to stran so trenutno onemogočene. Tukajšnji podatki se v kratkem ne bodo osvežili.',
 'wrong_wfQuery_params' => 'Nepravilni parametri za wfQuery()<br />
 Funkcija: $1<br />
@@ -561,10 +565,12 @@ Prosimo, poskusite znova čez nekaj minut.',
 'protectedpagetext' => 'Ta stran je bila zaklenjena za preprečitev urejanja.',
 '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 in je zaradi preprečevanja zlorabe zaščitena.',
+'protectedinterface' => 'Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.
+
+Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.',
 'editinginterface' => "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.
-Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika.
-Za prevajanje vmesnika se prijavite na [//translatewiki.net/wiki/Main_Page?setlang=sl&useskin=monobook translatewiki.net].",
+Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.
+Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
 'sqlhidden' => '(Poizvedba SQL je skrita)',
 'cascadeprotected' => 'Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:
 $2',
@@ -590,7 +596,7 @@ Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
 # Login and logout pages
 'logouttext' => "'''Odjavili ste se.'''
 
-{{GRAMMAR:tožilnik|{{SITENAME}}}} lahko zdaj uporabljate neprijavljeni ali pa se [[Special:UserLogin|ponovno prijavite]] kot enak ali drug uporabnik.
+{{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.
@@ -854,8 +860,12 @@ Da bi stran ustvarili, vnesite v spodnji obrazec besedilo
 Če ste sem prišli po pomoti, v svojem brskalniku kliknite gumb ''Nazaj''.",
 'anontalkpagetext' => "---- ''To je pogovorna stran brezimnega uporabnika, ki si še ni ustvaril računa ali pa ga ne uporablja. Zaradi tega moramo uporabiti IP-naslov za njegovo/njeno ugotavljanje istovetnosti. Takšen IP-naslov si lahko deli več uporabnikov. Če ste brezimni uporabnik in menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:UserLogin|ustvarite račun]] ali pa se [[Special:UserLogin/signup|vpišite]], da preprečite zmedo z drugimi nepodpisanimi uporabniki.''",
 'noarticletext' => 'Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v dnevniških zapisih] ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran uredite]</span>.',
-'noarticletext-nopermission' => 'Na tej strani ni trenutno nobenega besedila.
-Lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov te strani]] v drugih straneh, ali <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} poiskati v povezanih dnevniških zapisih]</span>.',
+'noarticletext-nopermission' => 'Na strani trenutno ni nobenega besedila.
+Lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov strani]] na drugih straneh ali <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v povezanih dnevniških zapisih]</span>, vendar za ustvarjanje strani nimate zadostnih dovoljenj.',
+'missing-revision' => 'Redakcija št. $1 strani »{{PAGENAME}}« ne obstaja.
+
+Po navadi se to zgodi, ko sledite zastareli povezavi na zgodovino strani, ki jo je nekdo izbrisal.
+Podrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].',
 'userpage-userdoesnotexist' => 'Uporabniški račun »<nowiki>$1</nowiki>« ni registriran.
 Prosimo preverite, ali res želite ustvariti/urediti to stran.',
 'userpage-userdoesnotexist-view' => 'Uporabniški račun »$1« ni registriran.',
@@ -865,7 +875,6 @@ Najnovejši vnos v dnevniku blokad je prikazan spodaj:',
 * '''Firefox/Safari:''' Držite ''Shift'' in kliknite ''Ponovno naloži'' (''Reload'') ali pritisnite ''Ctrl-Shift-R'' ali ''Ctrl-R'' (''⌘-R'' na sistemu Mac)
 * '''Internet Explorer:''' Držite ''Ctrl-F5'' in kliknite ''Osveži'' (''Refresh'') ali pritisnite ''Ctrl-F5''
 * '''Google Chrome:''' Pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na sistemu Mac)
-* '''Konqueror:''' Kliknite ''Ponovno naloži'' (''Reload'') ali pritisnite ''F5''.
 * '''Opera:''' Počistite predpomnilnik v ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Nasvet:''' Za preizkušanje svojega novega CSS pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
 'userjsyoucanpreview' => "'''Nasvet:''' Za preizkušanje svojega novega JavaScripta pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
@@ -948,13 +957,13 @@ Lahko se vrnete nazaj in urejate že obstoječe strani, ali pa se [[Special:User
 'sectioneditnotsupported-text' => 'Urejanje razdelkov ni podprto na tej strani.',
 'permissionserrors' => 'Napake dovoljenj',
 'permissionserrorstext' => 'Nimate dovoljenja za izvedbo dejanja zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov}}:',
-'permissionserrorstext-withaction' => 'Nimate dovoljenja za $2, zaradi {{PLURAL:$1|naslednjega razloga|naslednjih $1 razlogov|naslednjih $1 razlogov|naslednjih $1 razlogov}}:',
+'permissionserrorstext-withaction' => 'Nimate dovoljenja za $2 zaradi {{PLURAL:$1|naslednjega razloga|naslednjih $1 razlogov|naslednjih $1 razlogov|naslednjih $1 razlogov}}:',
 'recreate-moveddeleted-warn' => "'''Opozorilo: Pišete stran, ki je bila nekoč že izbrisana.'''
 
 Premislite preden nadaljujete s pisanjem, morda bo stran zaradi istih razlogov ponovno odstranjena.
 Spodaj je prikazan dnevnik brisanja in prestavljanja:",
-'moveddeleted-notice' => 'Ta stran je bila izbrisana.
-Dnevnik brisanja in prestavljanja strani je na voljo spodaj.',
+'moveddeleted-notice' => 'Stran je bila izbrisana.
+Spodaj sta za sklicevanje na razpolago dnevnik brisanja in dnevnik prestavljanja strani.',
 'log-fulllog' => 'Ogled celotnih dnevniških zapiskov',
 'edit-hook-aborted' => 'Urejanje je bilo brez obrazložitve prekinjeno zaradi neznane napake.',
 'edit-gone-missing' => 'Strani ni mogoče posodobiti.
@@ -984,6 +993,7 @@ Naslednji argumenti so bili izpuščeni.",
 'expansion-depth-exceeded-warning' => 'Stran je prekoračila globino razširitve',
 'parser-unstrip-loop-warning' => 'Zaznal sem odvezano zanko',
 'parser-unstrip-recursion-limit' => 'Presežena je omejitev odvezane rekurzije ($1)',
+'converter-manual-rule-error' => 'Odkril sem napako v ročnem pravilu pretvorbe jezikov',
 
 # "Undo" feature
 'undo-success' => 'Urejanje ste razveljavili. Prosim, potrdite in nato shranite spodnje spremembe.',
@@ -1118,7 +1128,8 @@ Prosimo, preverite dnevnik.',
 'revdelete-only-restricted' => 'Napaka pri skrivanju predmeta z dne $1, $2: ne morete spremeniti vidnosti predmeta pred administratorji brez izbire ene od drugih možnosti vidnosti.',
 'revdelete-reason-dropdown' => '* Pogosti razlogi za izbris
 ** Kršitev avtorskih pravic
-** Neprimerni osebni podatki
+** Neprimerna pripomba ali osebni podatki
+** Neprimerno uporabniško ime
 ** Morebitni žaljivi podatki',
 'revdelete-otherreason' => 'Drug/dodaten razlog:',
 'revdelete-reasonotherlist' => 'Drug razlog',
@@ -1172,6 +1183,10 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.',
 'editundo' => 'razveljavi',
 'diff-multi' => '({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|$2 uporabnika|$2 uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})',
+'difference-missing-revision' => '{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.
+
+Po navadi se to zgodi, ko sledite zastareli povezavi na razliko redakcij strani, ki jo je nekdo izbrisal.
+Podrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].',
 
 # Search results
 'searchresults' => 'Izid iskanja',
@@ -1214,8 +1229,6 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.',
 'search-interwiki-caption' => 'Sorodni projekti',
 'search-interwiki-default' => '$1 zadetkov:',
 'search-interwiki-more' => '(več)',
-'search-mwsuggest-enabled' => 's predlogi',
-'search-mwsuggest-disabled' => 'brez predlogov',
 'search-relatedarticle' => 'Podobno',
 'mwsuggest-disable' => 'Onemogoči predloge Ajax',
 'searcheverything-enable' => 'Iskanje po vseh imenskih prostorih',
@@ -1313,7 +1326,7 @@ Tukaj je naključno ustvarjena vrednost, ki jo lahko uporabite: $1',
 'timezoneregion-indian' => 'Indijski ocean',
 'timezoneregion-pacific' => 'Tihi ocean',
 'allowemail' => 'Drugim uporabnikom omogoči pošiljanje e-pošte',
-'prefs-searchoptions' => 'Možnosti iskanja',
+'prefs-searchoptions' => 'Iskanje',
 'prefs-namespaces' => 'Imenski prostori',
 'defaultns' => 'Navadno išči v naslednjih imenskih prostorih:',
 'default' => 'privzeto',
@@ -1529,7 +1542,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'recentchanges' => 'Zadnje spremembe',
 'recentchanges-legend' => 'Možnosti zadnjih sprememb',
 'recentchanges-summary' => 'Na tej strani lahko spremljajte najnedavnejše spremembe wikija.',
-'recentchanges-feed-description' => 'Spremljajte najnovejše spremembe wikija prek tega vira.',
+'recentchanges-feed-description' => 'Spremljajte zadnje spremembe wikija prek tega vira.',
 'recentchanges-label-newpage' => 'S tem urejanjem je bila ustvarjena nova stran',
 'recentchanges-label-minor' => 'Manjše urejanje',
 'recentchanges-label-bot' => 'To urejanje je bilo izvedeno z botom',
@@ -1703,7 +1716,7 @@ MGP # Pentax
 PICT # mešano
  #</pre> <!-- pustite to vrstico takšno, kot je -->',
 'upload-success-subj' => 'Datoteka je bila uspešno naložena',
-'upload-success-msg' => 'Vaša datoteka iz [$2] je bila uspešno naložena. Na voljo je tukaj: [[:{{ns:file}}:$1]]',
+'upload-success-msg' => 'Datoteka s strani [$2] se je uspešno naložila. Na razpolago je tukaj: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Težava pri nalaganju',
 'upload-failure-msg' => 'Prišlo je do težave z vašo naloženo datoteko iz [$2]:
 
@@ -1721,9 +1734,9 @@ Prosimo, obrnite se na [[Special:ListUsers/sysop|administratorja]].',
 Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 Če se težava ponavlja, kontaktirajte [[Special:ListUsers/sysop|administratorja]].',
 'upload-too-many-redirects' => 'URL vsebuje preveč preusmeritev',
-'upload-unknown-size' => 'Neznana velikost',
+'upload-unknown-size' => 'neznana velikost',
 'upload-http-error' => 'Prišlo je do napake HTTP: $1',
-'upload-copy-upload-invalid-domain' => 'Nalaganje kopij s te domene ni na voljo.',
+'upload-copy-upload-invalid-domain' => 'Nalaganje kopij s te domene ni možno.',
 
 # File backend
 'backend-fail-stream' => 'Ne morem pretakati datoteke $1.',
@@ -1749,7 +1762,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-internal' => 'V skladiščnem zaledju »$1« je prišlo do neznane napake.',
 'backend-fail-contenttype' => 'Ne morem določiti vrsto vsebine datoteke za shranjevanje pri »$1«.',
 'backend-fail-batchsize' => 'Skladiščnemu zaledju je dana vrsta $1 {{PLURAL:$1|datotečne operacije|datotečnih operacij}}; omejitev {{PLURAL:$2|je $2 operacija|sta $2 operaciji|so $2 operacije|je $2 operacij}}.',
-'backend-fail-usable' => 'Ne morem zapisati datoteke $1 zaradi nezadostnih dovoljenj ali manjkajočega imenika/vsebnika.',
+'backend-fail-usable' => 'Ne morem prebrati ali zapisati datoteke »$1« zaradi nezadostnih dovoljenj ali manjkajočega imenika/vsebnika.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Ne morem se povezati z listovno zbirko podatkov za skladiščno zaledje »$1«.',
@@ -1847,7 +1860,7 @@ Ko so rezultati filtrirani po uporabniku, so prikazane samo datoteke, pri kateri
 # File description page
 'file-anchor-link' => 'Datoteka',
 'filehist' => 'Zgodovina datoteke',
-'filehist-help' => 'Klikni na datum in čas za ogled datoteke, ki je bila takrat naložena.',
+'filehist-help' => 'Kliknite na datum in čas za ogled datoteke, ki je bila takrat naložena.',
 'filehist-deleteall' => 'izbriši vse',
 'filehist-deleteone' => 'izbriši to',
 'filehist-revert' => 'vrni',
@@ -1864,8 +1877,8 @@ Ko so rezultati filtrirani po uporabniku, so prikazane samo datoteke, pri kateri
 'imagelinks' => 'Uporaba datoteke',
 'linkstoimage' => 'Datoteka je del {{PLURAL:$1|naslednje $1 strani|naslednjih $1 strani}} {{GRAMMAR:rodilnik|{{SITENAME}}}}:',
 'linkstoimage-more' => 'Na to datoteko se {{PLURAL:$1|povezuje več kot $1 stran|povezujeta več kot $1 strani|povezujejo več kot $1 strani|povezuje več kot $1 strani}}.
-Naslednji seznam obsega samo {{PLURAL:$1|prvo stran, ki se povezuje|prvi $1 strani, ki se povezujeta|prve $1 strani, ki se povezujejo|prvih $1 strani, ki se povezujejo}} na to datoteko.
-Na voljo je tudi [[Special:WhatLinksHere/$2|celotni seznam]].',
+Naslednji seznam obsega samo {{PLURAL:$1|prvo stran, ki se povezuje|prvi $1 strani, ki se povezujeta|prve $1 strani, ki se povezujejo|prvih $1 strani, ki se povezujejo}} na datoteko.
+Na razpolago je tudi [[Special:WhatLinksHere/$2|popoln seznam]].',
 'nolinkstoimage' => 'Z datoteko se ne povezuje nobena stran.',
 'morelinkstoimage' => 'Preglejte [[Special:WhatLinksHere/$1|več povezav]] na to datoteko.',
 'linkstoimage-redirect' => '$1 (preusmeritev datoteke) $2',
@@ -1885,6 +1898,7 @@ Morda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datote
 'shared-repo-from' => 'iz $1',
 'shared-repo' => 'skupno skladišče',
 'shared-repo-name-wikimediacommons' => 'Wikimedijina Zbirka',
+'upload-disallowed-here' => 'Slike žal ne morete prepisati.',
 
 # File reversion
 'filerevert' => 'Vrni $1',
@@ -1994,6 +2008,7 @@ Sedaj je preusmeritev na [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|zlog|zloga|zlogi|zlogov|zlogov}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategoriji|kategorije|kategorij}}',
+'ninterwikis' => '$1 {{PLURAL:$1|medjezikovna povezava|medjezikovni povezavi|medjezikovne povezave|medjezikovnih povezav}}',
 'nlinks' => '$1 {{PLURAL:$1|povezava|povezavi|povezave|povezav|povezav}}',
 'nmembers' => '$1 {{PLURAL:$1|element|elementa|elementi|elementov|elementov}}',
 'nrevisions' => '$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}',
@@ -2022,6 +2037,7 @@ Sedaj je preusmeritev na [[$2]].',
 'mostlinkedtemplates' => 'Najbolj uporabljane predloge',
 'mostcategories' => 'Članki z največ kategorijami',
 'mostimages' => 'Najbolj uporabljane datoteke',
+'mostinterwikis' => 'Strani z največ medjezikovnimi povezavami',
 'mostrevisions' => 'Največkrat urejane strani',
 'prefixindex' => 'Vse strani s predpono',
 'prefixindex-namespace' => 'Vse strani s predpono (imenski prostor $1)',
@@ -2146,8 +2162,8 @@ Podprti protokoli: <code>$1</code> (teh ne dodajte v svoje iskanje).',
 
 # Special:ListGroupRights
 'listgrouprights' => 'Pravice uporabniških skupin',
-'listgrouprights-summary' => 'Spodaj se nahaja seznam uporabniških skupin na tem wikiju in njim dodeljene pravice dostopa.
-Na voljo so morda [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o posameznih skupinah.',
+'listgrouprights-summary' => 'Tu je na razpolago seznam uporabniških skupin na tem wikiju z navedbo dodeljenih pravic dostopa.
+Morda so na razpolago tudi [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]] o posameznih skupinah.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Dodeljena pravica</span>
 * <span class="listgrouprights-revoked">Odvzeta pravica</span>',
 'listgrouprights-group' => 'Skupina',
@@ -2167,6 +2183,8 @@ Na voljo so morda [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]]
 'mailnologin' => 'Manjka naslov pošiljatelja',
 'mailnologintext' => 'Za pošiljanje e-pošte drugim uporabnikom se [[Special:UserLogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven e-poštni naslov.',
 'emailuser' => 'Pošlji uporabniku e-pismo',
+'emailuser-title-target' => 'Pošlji {{GENDER:$1|uporabniku|uporabnici}} e-pošto',
+'emailuser-title-notarget' => 'Pošlji uporabniku e-pismo',
 'emailpage' => 'Pošlji uporabniku e-pismo',
 'emailpagetext' => 'S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo.
 E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo prejemnik lahko odgovoril neposredno vam.',
@@ -2595,7 +2613,7 @@ Oglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.',
 Razlog za blokado uporabnika $1 je: »$2«',
 'blocklogpage' => 'Dnevnik blokiranja',
 'blocklog-showlog' => 'Ta uporabnik je že bil blokiran.
-Dnevnik blokiranja je na voljo spodaj:',
+Za sklicevanje so tule navedeni vnosi v dnevniku blokiranja:',
 'blocklog-showsuppresslog' => 'Ta uporabnik je že bil blokiran in skrit.
 Dnevnik skrivanja je na voljo spodaj:',
 'blocklogentry' => '[[$1]] blokiran s časom poteka blokade $2 $3',
@@ -2744,10 +2762,10 @@ strani ni mogoče prestaviti samo vaše.',
 'imageinvalidfilename' => 'Ciljno ime datoteke je neveljavno',
 'fix-double-redirects' => 'Posodobi vse preusmeritve, ki kažejo na prvotni naslov',
 'move-leave-redirect' => 'Na prejšnji strani ustvari preusmeritev',
-'protectedpagemovewarning' => "'''Opozorilo:''' Stran je bila zaklenjena, tako da jo lahko prestavljajo samo uporabniki z administratorskimi dovoljenji.
-Najnovejši vnos v dnevniku je na voljo spodaj:",
-'semiprotectedpagemovewarning' => "'''Opomba:''' Stran je bila zaklenjena, tako da jo lahko prestavljajo samo registrirani uporabniki.
-Najnovejši vnos v dnevniku je na voljo spodaj:",
+'protectedpagemovewarning' => "'''Opozorilo:''' Stran je bila zaklenjena in jo lahko prestavljajo samo uporabniki z administratorskimi pravicami.
+Za sklicevanje je naveden zadnji vnos v dnevnik:",
+'semiprotectedpagemovewarning' => "'''Opomba:''' Stran je bila zaklenjena in jo lahko prestavljajo samo registrirani uporabniki.
+Za sklicevanje je naveden zadnji vnos v dnevniku:",
 'move-over-sharedrepo' => '== Datoteka obstaja ==
 [[:$1]] obstaja v deljeni shrambi. Premik datoteke na ta naslov bo prepisalo deljeno datoteko.',
 'file-exists-sharedrepo' => 'Izbrano ime datoteke je že v uporabi v deljeni shrambi.
@@ -2818,6 +2836,7 @@ Vsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].',
 'import-interwiki-templates' => 'Vključi vse predloge',
 'import-interwiki-submit' => 'Uvozi',
 'import-interwiki-namespace' => 'Prenesi strani v imenski prostor:',
+'import-interwiki-rootpage' => 'Ciljna korenska stran (neobvezno):',
 'import-upload-filename' => 'Ime datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Prosimo, izvozite datoteko z izvornega wikija s pomočjo [[Special:Export|orodja za izvoz]].
@@ -2854,6 +2873,9 @@ 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-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.',
 
 # Import log
 'importlogpage' => 'Dnevnik uvozov',
@@ -2865,7 +2887,6 @@ Prosimo, poskusite znova.',
 
 # JavaScriptTest
 'javascripttest' => 'Preizkušanje JavaScripta',
-'javascripttest-disabled' => 'Funkcija na tem wikiju ni omogočena.',
 'javascripttest-title' => 'Poganjanje $1 preizkusov',
 'javascripttest-pagetext-noframework' => 'Stran je rezervirana za poganjanje preizkusov JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Neznano ogrodje za preizkušanje »$1«.',
@@ -2910,8 +2931,8 @@ Prosimo, poskusite znova.',
 'tooltip-n-help' => 'Kraj za pomoč',
 'tooltip-t-whatlinkshere' => 'Seznam vseh s trenutno povezanih strani',
 'tooltip-t-recentchangeslinked' => 'Zadnje spremembe na s trenutno povezanih straneh',
-'tooltip-feed-rss' => 'Dovod strani RSS',
-'tooltip-feed-atom' => 'Dovod strani Atom',
+'tooltip-feed-rss' => 'RSS-vir strani',
+'tooltip-feed-atom' => 'Atom-vir strani',
 'tooltip-t-contributions' => 'Preglejte seznam uporabnikovih prispevkov',
 'tooltip-t-emailuser' => 'Pošljite uporabniku e-pismo',
 'tooltip-t-upload' => 'Naložite slike ali predstavnostne datoteke',
@@ -2970,11 +2991,34 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 
 # Info page
 'pageinfo-title' => 'Informacije o »$1«',
-'pageinfo-header-edits' => 'Urejanja',
+'pageinfo-header-basic' => 'Osnovni podatki',
+'pageinfo-header-edits' => 'Zgodovina urejanja',
+'pageinfo-header-restrictions' => 'Zaščita strani',
+'pageinfo-header-properties' => 'Lastnosti strani',
+'pageinfo-display-title' => 'Naslov za prikaz',
+'pageinfo-default-sort' => 'Privzeti ključ za razvrščanje',
+'pageinfo-length' => 'Dolžina strani (v bajtih)',
+'pageinfo-article-id' => 'ID strani',
+'pageinfo-robot-policy' => 'Status iskalnega pogona',
+'pageinfo-robot-index' => 'Na voljo za indeksiranje',
+'pageinfo-robot-noindex' => 'Ni na voljo za indeksiranje',
 'pageinfo-views' => 'Število ogledov',
-'pageinfo-watchers' => 'Število spremljevalcev',
-'pageinfo-edits' => 'Število urejanj',
-'pageinfo-authors' => 'Število različnih avtorjev',
+'pageinfo-watchers' => 'Število spremljevalcev strani',
+'pageinfo-redirects-name' => 'Preusmeritve na stran',
+'pageinfo-subpages-name' => 'Podstrani strani',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmeritev|preusmeritvi|preusmeritve|preusmeritev}}; $3 {{PLURAL:$3|nepreusmeritev|nepreusmeritvi|nepreusmeritve|nepreusmeritev}})',
+'pageinfo-firstuser' => 'Ustvarjalec strani',
+'pageinfo-firsttime' => 'Datum ustvarjanja strani',
+'pageinfo-lastuser' => 'Zadnji urejevalec',
+'pageinfo-lasttime' => 'Datum zadnjega urejanja',
+'pageinfo-edits' => 'Skupno število urejanj',
+'pageinfo-authors' => 'Skupno število različnih avtorjev',
+'pageinfo-recent-edits' => 'Nedavno število urejanj (zadnjih $1)',
+'pageinfo-recent-authors' => 'Nedavno število različnih avtorjev',
+'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-toolboxlink' => 'Podatki o strani',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označite kot nadzorovano',
@@ -3017,8 +3061,9 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'file-info' => 'Velikost datoteke: $1, MIME-vrsta: <code>$2</code>',
 'file-info-size' => '$1 × $2 točk, velikost datoteke: $3, vrsta MIME: $4',
 'file-info-size-pages' => '$1 × $2 točk, velikost datoteke: $3, vrsta MIME: $4, $5 {{PLURAL:$5|stran|strani}}',
-'file-nohires' => 'Slika višje ločljivosti ni na voljo.',
+'file-nohires' => 'Višja ločljivost slike ni na razpolago.',
 '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',
 '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.',
@@ -3028,6 +3073,8 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'file-info-png-looped' => 'ponavljajoče',
 'file-info-png-repeat' => 'predvajano {{PLURAL:$1|$1-krat}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličici|sličice|sličic}}',
+'file-no-thumb-animation' => "'''Opozorilo: Sličica te datoteke zaradi tehničnih omejitev ne bo animirana.'''",
+'file-no-thumb-animation-gif' => "'''Opozorilo: Sličice visokoločljivostnih slik GIF, kot je ta, zaradi tehničnih omejitev ne bodo animirane.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih datotek',
@@ -3268,7 +3315,7 @@ Druga bodo po privzetem skrita.
 'exif-copyrighted-true' => 'Avtorsko zaščiteno',
 'exif-copyrighted-false' => 'Javna last',
 
-'exif-unknowndate' => 'Neznan datum',
+'exif-unknowndate' => 'neznan datum',
 
 'exif-orientation-1' => 'Navadna',
 'exif-orientation-2' => 'Vodoravno zrcaljeno',
@@ -3552,6 +3599,7 @@ Potrditvena koda poteče $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Prevključevanje med wikiji je onemogočeno]',
 'scarytranscludefailed' => '[Pridobivanje predloge za $1 ni uspelo]',
+'scarytranscludefailed-httpstatus' => '[Pridobivanje predloge za $1 ni uspelo: HTTP $2]',
 'scarytranscludetoolong' => '[Spletni naslov je predolg]',
 
 # Delete conflict
@@ -3830,6 +3878,10 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'feedback-bugcheck' => 'Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].',
 'feedback-bugnew' => 'Sem preveril. Prijavi nov hrošč',
 
+# Search suggestions
+'searchsuggest-search' => 'Iskanje',
+'searchsuggest-containing' => 'vsebujoč ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nalaganje datotek na ta wiki vam ni dovoljeno.',
 'api-error-badtoken' => 'Notranja napaka: slab žeton.',
index 440dfd9..2ebb2d0 100644 (file)
@@ -363,7 +363,7 @@ De Sperre wurde durch [[User:$1|$1]] miet der Begrindung ''„$2“'' eigerichte
 # Login and logout pages
 'logouttext' => "'''Du best nun obgemeldet.'''
 
-Du koast {{SITENAME}} jitz anonym wetter nutzen, oder diech erneut under damm selba oder a'm andern Nutzernoama [[Special:UserLogin|oamelda]].
+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! ==
 
@@ -798,8 +798,6 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'search-section' => '(Obschnitt $1)',
 'search-suggest' => 'Meitest du „$1“?',
 'search-interwiki-caption' => 'Schwasterprujätte',
-'search-mwsuggest-enabled' => 'miet Vurschläga',
-'search-mwsuggest-disabled' => 'kääne Vurschläge',
 'mwsuggest-disable' => 'Vurschläge per Ajax deaktiviern',
 'searchrelated' => 'verwandt',
 'searchall' => 'olle',
index 2a46218..137ffc4 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Aso sa',
-'monday'        => 'Aso-gafua',
-'tuesday'       => '‘O le aso lua',
-'wednesday'     => 'Aso lulu',
-'thursday'      => 'Aso totofi',
-'friday'        => 'Aso falaile',
-'saturday'      => 'Aso to‘ona‘i',
-'sun'           => 'Aso sa',
-'mon'           => 'Aso gafua',
-'wed'           => 'Aso lulu',
-'fri'           => 'Aso falaile',
-'january'       => 'Ianuari',
-'february'      => 'Fepuari',
-'march'         => 'Mati',
-'april'         => 'Aperila',
-'may_long'      => 'Me',
-'june'          => 'Iuni',
-'july'          => 'Iulai',
-'august'        => 'Aokuso',
-'september'     => 'Setema',
-'october'       => 'Oketopa',
-'november'      => 'Novema',
-'december'      => 'Tesema',
-'january-gen'   => 'Ianuari',
-'february-gen'  => 'Fepuari',
-'march-gen'     => 'Mati',
-'april-gen'     => 'Aperila',
-'may-gen'       => 'Me',
-'june-gen'      => 'Iuni',
-'july-gen'      => 'Iulai',
-'august-gen'    => 'Aokuso',
+'sunday' => 'Aso sa',
+'monday' => 'Aso-gafua',
+'tuesday' => '‘O le aso lua',
+'wednesday' => 'Aso lulu',
+'thursday' => 'Aso totofi',
+'friday' => 'Aso falaile',
+'saturday' => 'Aso to‘ona‘i',
+'sun' => 'Aso sa',
+'mon' => 'Aso gafua',
+'wed' => 'Aso lulu',
+'fri' => 'Aso falaile',
+'january' => 'Ianuari',
+'february' => 'Fepuari',
+'march' => 'Mati',
+'april' => 'Aperila',
+'may_long' => 'Me',
+'june' => 'Iuni',
+'july' => 'Iulai',
+'august' => 'Aokuso',
+'september' => 'Setema',
+'october' => 'Oketopa',
+'november' => 'Novema',
+'december' => 'Tesema',
+'january-gen' => 'Ianuari',
+'february-gen' => 'Fepuari',
+'march-gen' => 'Mati',
+'april-gen' => 'Aperila',
+'may-gen' => 'Me',
+'june-gen' => 'Iuni',
+'july-gen' => 'Iulai',
+'august-gen' => 'Aokuso',
 'september-gen' => 'Setema',
-'october-gen'   => 'Oketopa',
-'november-gen'  => 'Novema',
-'december-gen'  => 'Tesema',
-'jan'           => 'Ianuari',
-'feb'           => 'Fepuari',
-'mar'           => 'Mati',
-'apr'           => 'Aperila',
-'may'           => 'Me',
-'jun'           => 'Iuni',
-'jul'           => 'Iulai',
-'aug'           => 'Aokuso',
-'sep'           => 'Setema',
-'oct'           => 'Oketopa',
-'nov'           => 'Novema',
-'dec'           => 'Tesema',
-
-'cancel'     => 'Toe tape',
-'mytalk'     => "La'u talanoa",
+'october-gen' => 'Oketopa',
+'november-gen' => 'Novema',
+'december-gen' => 'Tesema',
+'jan' => 'Ianuari',
+'feb' => 'Fepuari',
+'mar' => 'Mati',
+'apr' => 'Aperila',
+'may' => 'Me',
+'jun' => 'Iuni',
+'jul' => 'Iulai',
+'aug' => 'Aokuso',
+'sep' => 'Setema',
+'oct' => 'Oketopa',
+'nov' => 'Novema',
+'dec' => 'Tesema',
+
+'cancel' => 'Toe tape',
+'mytalk' => "La'u talanoa",
 'navigation' => 'Ulifolau',
 
-'help'             => 'Fesoasoani',
-'search'           => "Su'e",
-'searchbutton'     => "Su'e",
-'go'               => 'Alu',
-'searcharticle'    => 'Alu',
-'history_short'    => "Tala fa'asolopito",
+'help' => 'Fesoasoani',
+'search' => "Su'e",
+'searchbutton' => "Su'e",
+'go' => 'Alu',
+'searcharticle' => 'Alu',
+'history_short' => "Tala fa'asolopito",
 'printableversion' => 'Kopi e lolomi',
-'permalink'        => "So'otaga tumau",
-'print'            => 'Lolomi',
-'edit'             => 'Teuteu',
-'delete'           => 'Tape',
-'protect'          => 'Puipui',
-'unprotect'        => "'Aua le Puipuia",
-'specialpage'      => "Itulau fa'apitoa",
-'talk'             => 'Talanoaga',
-'toolbox'          => 'Meafaigaluega',
-'otherlanguages'   => 'I isi gagana',
+'permalink' => "So'otaga tumau",
+'print' => 'Lolomi',
+'edit' => 'Teuteu',
+'delete' => 'Tape',
+'protect' => 'Puipui',
+'unprotect' => "'Aua le Puipuia",
+'specialpage' => "Itulau fa'apitoa",
+'talk' => 'Talanoaga',
+'toolbox' => 'Meafaigaluega',
+'otherlanguages' => 'I isi gagana',
 'jumptonavigation' => 'Ulifolau',
-'jumptosearch'     => "Su'e",
+'jumptosearch' => "Su'e",
 
 # 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).
-'currentevents'        => 'Tala Fou',
-'currentevents-url'    => 'Project:Tala Fou',
-'edithelp'             => 'Fesoasoani e teuteu',
-'mainpage'             => 'Itulau Muamua',
+'currentevents' => 'Tala Fou',
+'currentevents-url' => 'Project:Tala Fou',
+'edithelp' => 'Fesoasoani e teuteu',
+'mainpage' => 'Itulau Muamua',
 'mainpage-description' => 'Itulau Muamua',
-'portal'               => 'Vaega mo Tagata Lautele',
-'portal-url'           => 'Project:Vaega mo Tagata Lautele',
+'portal' => 'Vaega mo Tagata Lautele',
+'portal-url' => 'Project:Vaega mo Tagata Lautele',
 
-'youhavenewmessages'      => "'Ua iai lau $1 ($2).",
-'newmessageslink'         => "Poloa'i fou",
+'youhavenewmessages' => "'Ua iai lau $1 ($2).",
+'newmessageslink' => "Poloa'i fou",
 'youhavenewmessagesmulti' => "'Ua iai au fe'au fou i le $1",
-'editsection'             => 'Teuteu',
-'editold'                 => 'Teuteu',
+'editsection' => 'Teuteu',
+'editold' => 'Teuteu',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Tusitusiga',
-'nstab-user'      => "Itulau a 'oe",
+'nstab-main' => 'Tusitusiga',
+'nstab-user' => "Itulau a 'oe",
 'nstab-mediawiki' => "Fe'au",
 
 # Login and logout pages
-'yourname'          => "Igoa o le tagata fa'aaoga",
-'yourpassword'      => "'Upu ulufale",
+'yourname' => "Igoa o le tagata fa'aaoga",
+'yourpassword' => "'Upu ulufale",
 'yourpasswordagain' => "Toe lolomi 'upu ulufale",
-'login'             => "Fa'aola",
-'userlogin'         => "Fa'aola / Lesitala le ulufale",
-'logout'            => 'Tape',
-'userlogout'        => 'Tape',
-'notloggedin'       => "Le'i fa'aolaina",
-'nologinlink'       => 'Lesitala le ulufale',
-'createaccount'     => 'Lesitala le ulufale',
-'gotaccountlink'    => "Fa'aola",
+'login' => "Fa'aola",
+'userlogin' => "Fa'aola / Lesitala le ulufale",
+'logout' => 'Tape',
+'userlogout' => 'Tape',
+'notloggedin' => "Le'i fa'aolaina",
+'nologinlink' => 'Lesitala le ulufale',
+'createaccount' => 'Lesitala le ulufale',
+'gotaccountlink' => "Fa'aola",
 
 # Edit pages
-'summary'      => "'Oto'otoga:",
-'minoredit'    => "'O se teuteuga la'itiiti lenei",
-'watchthis'    => 'Matau lenei itulau',
-'savearticle'  => 'Sefe le itulau',
-'showpreview'  => "Fa'aali teuteuga",
-'showdiff'     => "Fa'aali suiga",
+'summary' => "'Oto'otoga:",
+'minoredit' => "'O se teuteuga la'itiiti lenei",
+'watchthis' => 'Matau lenei itulau',
+'savearticle' => 'Sefe le itulau',
+'showpreview' => "Fa'aali teuteuga",
+'showdiff' => "Fa'aali suiga",
 'loginreqlink' => "Fa'aola",
 
 # Search results
 'powersearch' => "Su'e",
 
 # Preferences page
-'mypreferences'     => "Mea 'ou te fiafia i ai",
+'mypreferences' => "Mea 'ou te fiafia i ai",
 'searchresultshead' => "Su'e",
-'youremail'         => "'Imeli:",
-'username'          => "Igoa o le tagata fa'aaoga:",
-'email'             => "'Imeli",
+'youremail' => "'Imeli:",
+'username' => "Igoa o le tagata fa'aaoga:",
+'email' => "'Imeli",
 
 # Groups
 'group-all' => "(mea 'uma)",
 
 # Recent changes
 'recentchanges' => 'Suiga talu ai nei',
-'hist'          => "Tala fa'asolopito",
+'hist' => "Tala fa'asolopito",
 
 # Recent changes linked
 'recentchangeslinked' => "Suiga e a'afia ai",
 
 # Upload
-'upload'            => "Si'i mai le faila",
-'uploadbtn'         => "Si'i mai le faila",
-'uploadnologin'     => "Le'i fa'aolaina",
-'filedesc'          => "'Oto'otoga",
+'upload' => "Si'i mai le faila",
+'uploadbtn' => "Si'i mai le faila",
+'uploadnologin' => "Le'i fa'aolaina",
+'filedesc' => "'Oto'otoga",
 'fileuploadsummary' => "'Oto'otoga:",
-'watchthisupload'   => 'Matau lenei itulau',
+'watchthisupload' => 'Matau lenei itulau',
 
 # Random page
 'randompage' => "Itulau le fa'ailogaina",
 
 # Miscellaneous special pages
 'newpages-username' => "Igoa o le tagata fa'aaoga:",
-'move'              => "Si'itia",
+'move' => "Si'itia",
 
 # Book sources
 'booksources-go' => 'Alu',
@@ -168,13 +168,13 @@ $messages = array(
 'allpagessubmit' => 'Alu',
 
 # E-mail user
-'emailuser'    => "'Imeli mai le tagata lenei",
+'emailuser' => "'Imeli mai le tagata lenei",
 'emailmessage' => "Fe'au",
 
 # Watchlist
-'watchlist'     => "Lo'u lisi va'ava'aia",
-'watchnologin'  => "Le'i fa'aolaina",
-'watch'         => "Va'ai",
+'watchlist' => "Lo'u lisi va'ava'aia",
+'watchnologin' => "Le'i fa'aolaina",
+'watch' => "Va'ai",
 'watchthispage' => 'Matau lenei itulau',
 
 # Restrictions (nouns)
@@ -185,7 +185,7 @@ $messages = array(
 
 # Contributions
 'contributions' => "Sao a tagata fa'aaoga",
-'mycontris'     => "'O la'u saoga",
+'mycontris' => "'O la'u saoga",
 
 # What links here
 'whatlinkshere' => "Nofoaga e soso'o mai",
@@ -195,13 +195,13 @@ $messages = array(
 
 # Move page
 'move-page-legend' => "Si'i le itulau",
-'movearticle'      => "Si'i le itulau",
-'movenologin'      => "Le'i fa'aolaina",
-'newtitle'         => "'I le ulutala fou",
-'move-watch'       => 'Matau lenei itulau',
-'movepagebtn'      => "Si'i le itulau",
-'movetalk'         => 'Sui le itulau e tau i ai',
-'movereason'       => "Mafua'aga",
+'movearticle' => "Si'i le itulau",
+'movenologin' => "Le'i fa'aolaina",
+'newtitle' => "'I le ulutala fou",
+'move-watch' => 'Matau lenei itulau',
+'movepagebtn' => "Si'i le itulau",
+'movetalk' => 'Sui le itulau e tau i ai',
+'movereason' => "Mafua'aga",
 
 # Namespace 8 related
 'allmessagesname' => 'Igoa',
index d59a94d..13ebdf5 100644 (file)
 $messages = array(
 # User preference toggles
 'tog-showtoolbar' => 'Dïrregesïeve vuesehth (JavaScript)',
-'tog-fancysig'    => 'Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)',
+'tog-fancysig' => 'Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)',
 
 'underline-always' => 'Iktesth',
-'underline-never'  => 'Aaltere',
+'underline-never' => 'Aaltere',
 
 # Dates
-'sunday'        => 'Aejlege',
-'monday'        => 'Måanta',
-'tuesday'       => 'Däjsta',
-'wednesday'     => 'Gaske-våhkoe',
-'thursday'      => 'Dåarsta',
-'friday'        => 'Bearjedh',
-'saturday'      => 'Laavadahke',
-'sun'           => 'Aej',
-'mon'           => 'Måa',
-'tue'           => 'Däj',
-'wed'           => 'Gas',
-'thu'           => 'Dåa',
-'fri'           => 'Bea',
-'sat'           => 'Laa',
-'january'       => 'tsiengele',
-'february'      => 'goevte',
-'march'         => 'njoktje',
-'april'         => 'Voerhtje',
-'may_long'      => 'Suehpede',
-'june'          => 'Ruffie',
-'july'          => 'Snjaltje',
-'august'        => 'Mïetske',
-'september'     => 'Gaekere',
-'october'       => 'Golke',
-'november'      => 'Rahka',
-'december'      => 'Goeve',
-'january-gen'   => 'Tsiengele',
-'february-gen'  => 'Goevte',
-'march-gen'     => 'Njoktje',
-'april-gen'     => 'Voerhtje',
-'may-gen'       => 'Suehpede',
-'june-gen'      => 'Ruffie',
-'july-gen'      => 'Snjaltje',
-'august-gen'    => 'Mïetske',
+'sunday' => 'Aejlege',
+'monday' => 'Måanta',
+'tuesday' => 'Däjsta',
+'wednesday' => 'Gaske-våhkoe',
+'thursday' => 'Dåarsta',
+'friday' => 'Bearjedh',
+'saturday' => 'Laavadahke',
+'sun' => 'Aej',
+'mon' => 'Måa',
+'tue' => 'Däj',
+'wed' => 'Gas',
+'thu' => 'Dåa',
+'fri' => 'Bea',
+'sat' => 'Laa',
+'january' => 'tsiengele',
+'february' => 'goevte',
+'march' => 'njoktje',
+'april' => 'Voerhtje',
+'may_long' => 'Suehpede',
+'june' => 'Ruffie',
+'july' => 'Snjaltje',
+'august' => 'Mïetske',
+'september' => 'Gaekere',
+'october' => 'Golke',
+'november' => 'Rahka',
+'december' => 'Goeve',
+'january-gen' => 'Tsiengele',
+'february-gen' => 'Goevte',
+'march-gen' => 'Njoktje',
+'april-gen' => 'Voerhtje',
+'may-gen' => 'Suehpede',
+'june-gen' => 'Ruffie',
+'july-gen' => 'Snjaltje',
+'august-gen' => 'Mïetske',
 'september-gen' => 'Gaekere',
-'october-gen'   => 'Golke',
-'november-gen'  => 'Rahka',
-'december-gen'  => 'Goeve',
-'jan'           => 'Tsi',
-'feb'           => 'Goe',
-'mar'           => 'Njo',
-'apr'           => 'Voe',
-'may'           => 'Sue',
-'jun'           => 'Ruf',
-'jul'           => 'Snj',
-'aug'           => 'Mïe',
-'sep'           => 'Gae',
-'oct'           => 'Gol',
-'nov'           => 'Rah',
-'dec'           => 'Goe',
+'october-gen' => 'Golke',
+'november-gen' => 'Rahka',
+'december-gen' => 'Goeve',
+'jan' => 'Tsi',
+'feb' => 'Goe',
+'mar' => 'Njo',
+'apr' => 'Voe',
+'may' => 'Sue',
+'jun' => 'Ruf',
+'jul' => 'Snj',
+'aug' => 'Mïe',
+'sep' => 'Gae',
+'oct' => 'Gol',
+'nov' => 'Rah',
+'dec' => 'Goe',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Kategorije|Kategorijeh}}',
-'category_header'        => 'Bielie sïjse kategorije "$1"',
-'subcategories'          => 'Subkategorijeh',
-'category-media-header'  => 'Guvvie sïjse karegorije "$1"',
-'category-empty'         => "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
+'pagecategories' => '{{PLURAL:$1|Kategorije|Kategorijeh}}',
+'category_header' => 'Bielie sïjse kategorije "$1"',
+'subcategories' => 'Subkategorijeh',
+'category-media-header' => 'Guvvie sïjse karegorije "$1"',
+'category-empty' => "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
 'listingcontinuesabbrev' => 'jåar.',
 
-'about'         => 'Bïjre',
-'article'       => 'Sisvege bielie',
-'newwindow'     => '(geehpehtidh sïjse orre klaase)',
-'cancel'        => 'Orrijidh',
+'about' => 'Bïjre',
+'article' => 'Sisvege bielie',
+'newwindow' => '(geehpehtidh sïjse orre klaase)',
+'cancel' => 'Orrijidh',
 'moredotdotdot' => 'Jienebe...',
-'mypage'        => 'Mov bielie',
-'mytalk'        => 'Mov dïjveldidh',
-'anontalk'      => 'Dïjveldidh ihke dïhte IP',
-'navigation'    => 'Navigasjovne',
-'and'           => '&#32;jih',
+'mypage' => 'Mov bielie',
+'mytalk' => 'Mov dïjveldidh',
+'anontalk' => 'Dïjveldidh ihke dïhte IP',
+'navigation' => 'Navigasjovne',
+'and' => '&#32;jih',
 
 # Cologne Blue skin
-'qbfind'         => 'Gaavnedh',
-'qbedit'         => 'Värrhtoedimmie',
-'qbpageoptions'  => 'Dïhte bielie',
-'qbmyoptions'    => 'Mov bielieh',
+'qbfind' => 'Gaavnedh',
+'qbedit' => 'Värrhtoedimmie',
+'qbpageoptions' => 'Dïhte bielie',
+'qbmyoptions' => 'Mov bielieh',
 'qbspecialpages' => 'Joekoelaakan bielieh',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
-
-'errorpagetitle'   => 'Båajhtode',
-'returnto'         => 'Bååstide gåajkoe $1.',
-'tagline'          => '{{SITENAME}}sta',
-'help'             => 'Viehkie',
-'search'           => 'Ohtsedh',
-'searchbutton'     => 'Ohtsedh',
-'go'               => 'Vaadtsa',
-'searcharticle'    => 'Vaadtsa',
-'history'          => 'Histovrije',
-'history_short'    => 'Histovrije',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
+
+'errorpagetitle' => 'Båajhtode',
+'returnto' => 'Bååstide gåajkoe $1.',
+'tagline' => '{{SITENAME}}sta',
+'help' => 'Viehkie',
+'search' => 'Ohtsedh',
+'searchbutton' => 'Ohtsedh',
+'go' => 'Vaadtsa',
+'searcharticle' => 'Vaadtsa',
+'history' => 'Histovrije',
+'history_short' => 'Histovrije',
 'printableversion' => 'Tjaelije bielie',
-'permalink'        => 'Permanente lïenghke',
-'print'            => 'Tjaeledh olkese',
-'edit'             => 'Sjiehtedh',
-'editthispage'     => 'Värrhtoedimmie dïhte bielie',
-'delete'           => 'Tjåegkedh',
-'protect'          => 'Vaarjelidh',
-'protectthispage'  => 'Vaarjelidh dïhte bielie',
-'newpage'          => 'Orre bielie',
-'talkpage'         => 'Dïjveldidh dïhte bielie',
+'permalink' => 'Permanente lïenghke',
+'print' => 'Tjaeledh olkese',
+'edit' => 'Sjiehtedh',
+'editthispage' => 'Värrhtoedimmie dïhte bielie',
+'delete' => 'Tjåegkedh',
+'protect' => 'Vaarjelidh',
+'protectthispage' => 'Vaarjelidh dïhte bielie',
+'newpage' => 'Orre bielie',
+'talkpage' => 'Dïjveldidh dïhte bielie',
 'talkpagelinktext' => 'Digkiedimmie',
-'specialpage'      => 'Joekoelaakan Bielie',
-'personaltools'    => 'Persjovne dïrregeh',
-'articlepage'      => 'Vuesehte artihkle bielie',
-'talk'             => 'Dïjveldeme',
-'views'            => 'Vuesehth',
-'toolbox'          => 'Dïrregeborhtje',
-'userpage'         => 'Vuesehte nuhtjienbielie',
-'projectpage'      => 'Vuesehte Wikipedijebielie',
-'imagepage'        => 'Vuesehte guvvie bielie',
-'templatepage'     => 'Vuesehte maale bielie',
-'viewhelppage'     => 'Vuesehte viehkie bielie',
-'categorypage'     => 'Vuesehte kategorije bielie',
-'viewtalkpage'     => 'Vuesehte dïjveldidh',
-'otherlanguages'   => 'jeatjebh gïele',
-'redirectedfrom'   => '(Bïjre-dirisjovne raejeste $1)',
-'redirectpagesub'  => 'Bïjre-dirisjovne bielie',
-'protectedpage'    => 'Vaarjelidh bielie',
-'jumpto'           => 'Vaadtsa gåajkoe:',
+'specialpage' => 'Joekoelaakan Bielie',
+'personaltools' => 'Persjovne dïrregeh',
+'articlepage' => 'Vuesehte artihkle bielie',
+'talk' => 'Dïjveldeme',
+'views' => 'Vuesehth',
+'toolbox' => 'Dïrregeborhtje',
+'userpage' => 'Vuesehte nuhtjienbielie',
+'projectpage' => 'Vuesehte Wikipedijebielie',
+'imagepage' => 'Vuesehte guvvie bielie',
+'templatepage' => 'Vuesehte maale bielie',
+'viewhelppage' => 'Vuesehte viehkie bielie',
+'categorypage' => 'Vuesehte kategorije bielie',
+'viewtalkpage' => 'Vuesehte dïjveldidh',
+'otherlanguages' => 'jeatjebh gïele',
+'redirectedfrom' => '(Bïjre-dirisjovne raejeste $1)',
+'redirectpagesub' => 'Bïjre-dirisjovne bielie',
+'protectedpage' => 'Vaarjelidh bielie',
+'jumpto' => 'Vaadtsa gåajkoe:',
 'jumptonavigation' => 'navigasjovne',
-'jumptosearch'     => 'ohtsedh',
+'jumptosearch' => 'ohtsedh',
 
 # 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}}en bïjre',
-'aboutpage'            => 'Project:Bïjre',
-'copyrightpage'        => '{{ns:project}}:Bäjjesereaktah',
-'currentevents'        => 'Daaletje deahpadimmieh',
-'currentevents-url'    => 'Project:Daaletje deahpadimmieh',
-'disclaimers'          => 'Friijavuohte vastideamis',
-'disclaimerpage'       => 'Project:Bäjjesereaktah',
-'edithelp'             => 'Sjiehtedimmie viehkie',
-'edithelppage'         => 'Help:Sjiehtedimmie',
-'helppage'             => 'Help:Sisvege',
-'mainpage'             => 'Aalkoebielie',
+'aboutsite' => '{{SITENAME}}en bïjre',
+'aboutpage' => 'Project:Bïjre',
+'copyrightpage' => '{{ns:project}}:Bäjjesereaktah',
+'currentevents' => 'Daaletje deahpadimmieh',
+'currentevents-url' => 'Project:Daaletje deahpadimmieh',
+'disclaimers' => 'Friijavuohte vastideamis',
+'disclaimerpage' => 'Project:Bäjjesereaktah',
+'edithelp' => 'Sjiehtedimmie viehkie',
+'edithelppage' => 'Help:Sjiehtedimmie',
+'helppage' => 'Help:Sisvege',
+'mainpage' => 'Aalkoebielie',
 'mainpage-description' => 'Aalkoebielie',
-'portal'               => 'Meatan portaale',
-'portal-url'           => 'Project:Meatan portaale',
-'privacy'              => 'Privaate pålisy',
-'privacypage'          => 'Project:Privaate pålisy',
-
-'retrievedfrom'       => 'Raejeste "$1" vïedtjeme',
-'youhavenewmessages'  => 'Datne åtna $1 ($2).',
-'newmessageslink'     => 'orre bïjre',
+'portal' => 'Meatan portaale',
+'portal-url' => 'Project:Meatan portaale',
+'privacy' => 'Privaate pålisy',
+'privacypage' => 'Project:Privaate pålisy',
+
+'retrievedfrom' => 'Raejeste "$1" vïedtjeme',
+'youhavenewmessages' => 'Datne åtna $1 ($2).',
+'newmessageslink' => 'orre bïjre',
 'newmessagesdifflink' => 'minngemes värrhtoedimmie',
-'editsection'         => 'sjïehtedh',
-'editold'             => 'värrhtoedimmie',
-'editsectionhint'     => 'Sektiovne sjiehtedh: $1',
-'toc'                 => 'Sisvege',
-'showtoc'             => 'vuesehte',
-'hidetoc'             => 'gaptjedh',
-'viewdeleted'         => 'Vuesehte $1?',
-'site-rss-feed'       => '$1 RSS Feed',
-'site-atom-feed'      => '$1 Atom Feed',
-'page-rss-feed'       => '"$1" RSS Feed',
-'page-atom-feed'      => '"$1" Atom Feed',
+'editsection' => 'sjïehtedh',
+'editold' => 'värrhtoedimmie',
+'editsectionhint' => 'Sektiovne sjiehtedh: $1',
+'toc' => 'Sisvege',
+'showtoc' => 'vuesehte',
+'hidetoc' => 'gaptjedh',
+'viewdeleted' => 'Vuesehte $1?',
+'site-rss-feed' => '$1 RSS Feed',
+'site-atom-feed' => '$1 Atom Feed',
+'page-rss-feed' => '"$1" RSS Feed',
+'page-atom-feed' => '"$1" Atom Feed',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Bielie',
-'nstab-user'      => 'Nuhtjien bielie',
-'nstab-media'     => 'Guvvie',
-'nstab-special'   => 'Joekoelaakan',
-'nstab-project'   => 'Prosjekte bielie',
-'nstab-image'     => 'Baalka',
+'nstab-main' => 'Bielie',
+'nstab-user' => 'Nuhtjien bielie',
+'nstab-media' => 'Guvvie',
+'nstab-special' => 'Joekoelaakan',
+'nstab-project' => 'Prosjekte bielie',
+'nstab-image' => 'Baalka',
 'nstab-mediawiki' => 'MediaWiki',
-'nstab-template'  => 'Maale',
-'nstab-help'      => 'Viehke bielie',
-'nstab-category'  => 'Kategorije',
+'nstab-template' => 'Maale',
+'nstab-help' => 'Viehke bielie',
+'nstab-category' => 'Kategorije',
 
 # General errors
-'error'              => 'Båajhtode',
-'databaseerror'      => 'Daatabaase båajhtode',
-'readonly'           => 'Daatabaase steegkeldahkesne',
-'internalerror'      => 'Sjisjnjie båajhtede',
+'error' => 'Båajhtode',
+'databaseerror' => 'Daatabaase båajhtode',
+'readonly' => 'Daatabaase steegkeldahkesne',
+'internalerror' => 'Sjisjnjie båajhtede',
 'internalerror_info' => 'Sjisjnjie båajhtede: $1',
-'badtitle'           => 'Gååre nomme',
-'badtitletext'       => 'Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.',
-'viewsource'         => 'Vuesehte tjaalege',
-'viewsourcetext'     => 'Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:',
+'badtitle' => 'Gååre nomme',
+'badtitletext' => 'Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.',
+'viewsource' => 'Vuesehte tjaalege',
+'viewsourcetext' => 'Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:',
 
 # Login and logout pages
-'yourname'                => 'Nuhtjiennomme:',
-'yourpassword'            => 'Loevesbaakoe:',
-'remembermypassword'      => 'Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'yourdomainname'          => 'Dov domäne:',
-'login'                   => 'Logge sïjse',
+'yourname' => 'Nuhtjiennomme:',
+'yourpassword' => 'Loevesbaakoe:',
+'remembermypassword' => 'Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'yourdomainname' => 'Dov domäne:',
+'login' => 'Logge sïjse',
 'nav-login-createaccount' => 'Logge sïjse / skaepede nuhtjien',
-'loginprompt'             => 'Dov galkedh luhpede cookies ihke logge sïjse nille {{SITENAME}}.',
-'userlogin'               => 'Logge sïjse / skaepede nuhtjien',
-'logout'                  => 'Logge olkese',
-'userlogout'              => 'Logge ålkone',
-'nologin'                 => "Lea dov ijje registreered? '''$1'''.",
-'nologinlink'             => 'Skaepede nuhtjien',
-'createaccount'           => 'Skaepede nuhtjien',
-'gotaccount'              => "Åtna dov joe nuhtjiennomme? '''$1'''.",
-'gotaccountlink'          => 'Logge sïjse',
-'createaccountmail'       => 'meatan e-påaste',
-'loginerror'              => 'Logge sïjse båajhtode',
-'loginsuccesstitle'       => 'Dov lea daelie sïjse logge',
-'loginsuccess'            => "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"\$1\".'''",
-'nosuchuser'              => 'Dïhte gååvnese ijje nuhtjien goh nomme "$1". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.',
-'nosuchusershort'         => 'Dïhte gååvnese ijje nuhtjien goh nomme "$1". Gïehtjedidh baakoehtidh.',
-'nouserspecified'         => 'Dov galkedh tjaeledh nuhtjiennomme.',
-'wrongpassword'           => 'Loevesbaakoe lea gåarhmede. Vuejnedh vihth.',
-'wrongpasswordempty'      => 'Loevesbaakoe lea gåaroes. Vuejnedh vihth.',
-'passwordtooshort'        => 'Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.',
-'mailmypassword'          => 'E-påaste loevesbaakoe',
-'passwordremindertitle'   => 'Orre loevesbaakoe ihke {{SITENAME}}',
-'noemail'                 => 'Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien "$1".',
-'passwordsent'            => 'Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie
+'loginprompt' => 'Dov galkedh luhpede cookies ihke logge sïjse nille {{SITENAME}}.',
+'userlogin' => 'Logge sïjse / skaepede nuhtjien',
+'logout' => 'Logge olkese',
+'userlogout' => 'Logge ålkone',
+'nologin' => "Lea dov ijje registreered? '''$1'''.",
+'nologinlink' => 'Skaepede nuhtjien',
+'createaccount' => 'Skaepede nuhtjien',
+'gotaccount' => "Åtna dov joe nuhtjiennomme? '''$1'''.",
+'gotaccountlink' => 'Logge sïjse',
+'createaccountmail' => 'meatan e-påaste',
+'loginerror' => 'Logge sïjse båajhtode',
+'loginsuccesstitle' => 'Dov lea daelie sïjse logge',
+'loginsuccess' => "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"\$1\".'''",
+'nosuchuser' => 'Dïhte gååvnese ijje nuhtjien goh nomme "$1". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.',
+'nosuchusershort' => 'Dïhte gååvnese ijje nuhtjien goh nomme "$1". Gïehtjedidh baakoehtidh.',
+'nouserspecified' => 'Dov galkedh tjaeledh nuhtjiennomme.',
+'wrongpassword' => 'Loevesbaakoe lea gåarhmede. Vuejnedh vihth.',
+'wrongpasswordempty' => 'Loevesbaakoe lea gåaroes. Vuejnedh vihth.',
+'passwordtooshort' => 'Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.',
+'mailmypassword' => 'E-påaste loevesbaakoe',
+'passwordremindertitle' => 'Orre loevesbaakoe ihke {{SITENAME}}',
+'noemail' => 'Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien "$1".',
+'passwordsent' => 'Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie
 registreered ihke "$1".
 Gïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.',
-'accountcreated'          => 'Nuhtjien skaepede',
-'loginlanguagelabel'      => 'Gïele: $1',
+'accountcreated' => 'Nuhtjien skaepede',
+'loginlanguagelabel' => 'Gïele: $1',
 
 # Change password dialog
 'oldpassword' => 'Båeries loevesbaakoe:',
 'newpassword' => 'Orre loevesbaakoe:',
-'retypenew'   => 'Odhasit orre loevesbaakoe:',
+'retypenew' => 'Odhasit orre loevesbaakoe:',
 
 # Edit page toolbar
-'bold_sample'     => 'Buajtehks tjaalege',
-'bold_tip'        => 'Buajtehks tjaalege',
-'italic_sample'   => 'Kursiive tjaalege',
-'italic_tip'      => 'Kursiive tjaalege',
-'link_sample'     => 'Lïenghke tiitele',
-'link_tip'        => 'Sjisjnjie lïenghke',
-'extlink_sample'  => 'http://www.example.com lïenghke tiitele',
-'extlink_tip'     => 'Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)',
+'bold_sample' => 'Buajtehks tjaalege',
+'bold_tip' => 'Buajtehks tjaalege',
+'italic_sample' => 'Kursiive tjaalege',
+'italic_tip' => 'Kursiive tjaalege',
+'link_sample' => 'Lïenghke tiitele',
+'link_tip' => 'Sjisjnjie lïenghke',
+'extlink_sample' => 'http://www.example.com lïenghke tiitele',
+'extlink_tip' => 'Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)',
 'headline_sample' => 'Rubriike tjaalege',
-'headline_tip'    => 'Daltese 2 rubriike',
-'nowiki_sample'   => 'Bïejedh ijje-hammode tjaalege daesnie',
-'nowiki_tip'      => 'Rievdde wikïhammode',
-'image_tip'       => 'Lååtje guvvie',
-'media_tip'       => 'Meedia baalka lïenghke',
-'sig_tip'         => 'Dov signatuvre meatan tïjjestäämpele',
-'hr_tip'          => 'Horisontele sïeve (nuhtjie bïhteles-laakan)',
+'headline_tip' => 'Daltese 2 rubriike',
+'nowiki_sample' => 'Bïejedh ijje-hammode tjaalege daesnie',
+'nowiki_tip' => 'Rievdde wikïhammode',
+'image_tip' => 'Lååtje guvvie',
+'media_tip' => 'Meedia baalka lïenghke',
+'sig_tip' => 'Dov signatuvre meatan tïjjestäämpele',
+'hr_tip' => 'Horisontele sïeve (nuhtjie bïhteles-laakan)',
 
 # Edit pages
-'summary'                => 'Tjohkehtehteme:',
-'subject'                => 'Ïebne/rubriike:',
-'minoredit'              => 'Dïhte lea ohtje värrhtoedimmie',
-'watchthis'              => 'Sïektjedh dïhte bielie',
-'savearticle'            => 'Spååredh bielie',
-'preview'                => 'Åvte-vuesiehtidh',
-'showpreview'            => 'Vuesehte åvte-vuesiehtidh',
-'showdiff'               => 'Vuesehte värrhtoedimmie',
-'anoneditwarning'        => "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
-'summary-preview'        => 'Tjohkehtehteme åvte-vuesiehtidh:',
-'loginreqlink'           => 'logge sïjse',
-'loginreqpagetext'       => 'Dov galkedh $1 ihke vuesehte jeatjebh bielieh.',
-'accmailtitle'           => 'Loevesbaakoe seedtie.',
-'accmailtext'            => 'Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.',
-'newarticle'             => '(Orre)',
-'noarticletext'          => 'Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].',
-'usercssyoucanpreview'   => "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
-'userjsyoucanpreview'    => "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
-'updated'                => '(Orrestahteme)',
-'note'                   => "'''Galtege:'''",
-'previewnote'            => "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
-'editing'                => 'Sjiehtedimmie $1',
-'editingsection'         => 'Värrhtoedimmie $1 (sektiovne)',
-'yourtext'               => 'Dov tjaalege',
-'copyrightwarning'       => "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />
+'summary' => 'Tjohkehtehteme:',
+'subject' => 'Ïebne/rubriike:',
+'minoredit' => 'Dïhte lea ohtje värrhtoedimmie',
+'watchthis' => 'Sïektjedh dïhte bielie',
+'savearticle' => 'Spååredh bielie',
+'preview' => 'Åvte-vuesiehtidh',
+'showpreview' => 'Vuesehte åvte-vuesiehtidh',
+'showdiff' => 'Vuesehte värrhtoedimmie',
+'anoneditwarning' => "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
+'summary-preview' => 'Tjohkehtehteme åvte-vuesiehtidh:',
+'loginreqlink' => 'logge sïjse',
+'loginreqpagetext' => 'Dov galkedh $1 ihke vuesehte jeatjebh bielieh.',
+'accmailtitle' => 'Loevesbaakoe seedtie.',
+'accmailtext' => 'Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.',
+'newarticle' => '(Orre)',
+'noarticletext' => 'Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].',
+'usercssyoucanpreview' => "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
+'userjsyoucanpreview' => "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
+'updated' => '(Orrestahteme)',
+'note' => "'''Galtege:'''",
+'previewnote' => "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
+'editing' => 'Sjiehtedimmie $1',
+'editingsection' => 'Värrhtoedimmie $1 (sektiovne)',
+'yourtext' => 'Dov tjaalege',
+'copyrightwarning' => "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />
 Datne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.<br />
 '''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''",
-'templatesused'          => '{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:',
-'templatesusedpreview'   => '{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:',
-'template-protected'     => '(vaarjeleme)',
+'templatesused' => '{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:',
+'templatesusedpreview' => '{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:',
+'template-protected' => '(vaarjeleme)',
 'template-semiprotected' => '(lehkie-vaarjelidh)',
-'nocreatetext'           => '{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.
+'nocreatetext' => '{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.
 Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge sïjse jallh skaepede nuhtjien]].',
 
 # History pages
-'viewpagelogs'        => 'Vuesehte loggeh ihke dïhte bielie',
-'currentrev'          => 'Daaletje gïehtjedamme',
-'revisionasof'        => 'Gïehtjedamme ihke $1',
-'revision-info'       => 'Gïehtjedamme raejeste dïhte $1; $2',
-'previousrevision'    => '←Båarasåabpoe gïehtjedamme',
-'nextrevision'        => 'Minngebe gïehtjedamme→',
+'viewpagelogs' => 'Vuesehte loggeh ihke dïhte bielie',
+'currentrev' => 'Daaletje gïehtjedamme',
+'revisionasof' => 'Gïehtjedamme ihke $1',
+'revision-info' => 'Gïehtjedamme raejeste dïhte $1; $2',
+'previousrevision' => '←Båarasåabpoe gïehtjedamme',
+'nextrevision' => 'Minngebe gïehtjedamme→',
 'currentrevisionlink' => 'Daaletje gïehtjedamme',
-'cur'                 => 'daaletje',
-'next'                => 'minngebe',
-'last'                => 'minngemes',
-'page_first'          => 'voestegh',
-'page_last'           => 'minngemes',
-'histfirst'           => 'Aareh',
-'histlast'            => 'Minngemes',
-'historysize'         => '({{PLURAL:$1|1 byte|$1 byteh}})',
+'cur' => 'daaletje',
+'next' => 'minngebe',
+'last' => 'minngemes',
+'page_first' => 'voestegh',
+'page_last' => 'minngemes',
+'histfirst' => 'Aareh',
+'histlast' => 'Minngemes',
+'historysize' => '({{PLURAL:$1|1 byte|$1 byteh}})',
 
 # Revision feed
-'history-feed-title'          => 'Gïehtjedamme histovrije',
+'history-feed-title' => 'Gïehtjedamme histovrije',
 'history-feed-item-nocomment' => '$1 dïhte $2',
 
 # History merging
 'mergehistory-from' => 'Gaaltjie bielie:',
 
 # Diffs
-'history-title'           => 'Gïehtjedamme histovrije ihke "$1"',
-'difference'              => '(Joekehts gaskesne gïehtjedammeh)',
-'lineno'                  => 'Sïeve $1:',
+'history-title' => 'Gïehtjedamme histovrije ihke "$1"',
+'lineno' => 'Sïeve $1:',
 'compareselectedversions' => 'Mohtedidh veeljeme låhkoeh',
-'editundo'                => 'ov-darjodh',
-'diff-multi'              => '({{PLURAL:$1|Akte gaskese gïehtjedamme|$1 gaskese gïehtjedammeh}} vuesehte ijje.)',
+'editundo' => 'ov-darjodh',
+'diff-multi' => '({{PLURAL:$1|Akte gaskese gïehtjedamme|$1 gaskese gïehtjedammeh}} vuesehte ijje.)',
 
 # Search results
-'searchresults'    => 'Ohtsedh resultaateh',
+'searchresults' => 'Ohtsedh resultaateh',
 'searchresulttext' => 'Ihke jeenjebe bïevnesh bïjre ohtsedh {{SITENAME}}, vuejnedh [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle'   => "Dov ohtsedh ihke '''[[:$1]]'''",
-'prevn'            => 'övtebe {{PLURAL:$1|$1}}',
-'nextn'            => 'minngeben {{PLURAL:$1|$1}}',
-'viewprevnext'     => 'Vuesehth ($1 {{int:pipe-separator}} $2) ($3)',
-'searchhelp-url'   => 'Help:Sisvege',
-'powersearch'      => 'Ohtsedh',
+'searchsubtitle' => "Dov ohtsedh ihke '''[[:$1]]'''",
+'prevn' => 'övtebe {{PLURAL:$1|$1}}',
+'nextn' => 'minngeben {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Vuesehth ($1 {{int:pipe-separator}} $2) ($3)',
+'searchhelp-url' => 'Help:Sisvege',
+'powersearch' => 'Ohtsedh',
 
 # Preferences page
-'preferences'         => 'Sïjsestäälningeh',
-'mypreferences'       => 'Mov sïjsesäälningeh',
-'changepassword'      => 'Värrhtoedimmie loevesbaakoe',
-'skin-preview'        => 'Åvte-vuesiehtidh',
-'saveprefs'           => 'Spååredh',
-'searchresultshead'   => 'Ohtsedh',
-'timezonelegend'      => 'Tïjjedajve',
-'localtime'           => 'Byjrehks tïjje',
-'youremail'           => 'E-påaste:',
-'username'            => 'Nuhtjiennomme:',
-'uid'                 => 'Nuhtjien ID:',
-'yourrealname'        => 'Ov nomme:',
-'yourlanguage'        => 'Gïele:',
-'yournick'            => 'Nuhjiennomme:',
-'email'               => 'E-påaste',
+'preferences' => 'Sïjsestäälningeh',
+'mypreferences' => 'Mov sïjsesäälningeh',
+'changepassword' => 'Värrhtoedimmie loevesbaakoe',
+'skin-preview' => 'Åvte-vuesiehtidh',
+'saveprefs' => 'Spååredh',
+'searchresultshead' => 'Ohtsedh',
+'timezonelegend' => 'Tïjjedajve',
+'localtime' => 'Byjrehks tïjje',
+'youremail' => 'E-påaste:',
+'username' => 'Nuhtjiennomme:',
+'uid' => 'Nuhtjien ID:',
+'yourrealname' => 'Ov nomme:',
+'yourlanguage' => 'Gïele:',
+'yournick' => 'Nuhjiennomme:',
+'email' => 'E-påaste',
 'prefs-help-realname' => 'Ov nomme galkedh ijje tjaeledh. Bïjre datne veeljeme tjaeledh dov ov nomme, båetedh dïhte nuhtjie ihke tjaeledh dov barkoe.',
 
 # User rights
 'editinguser' => "Värrhtoedimmie nuhtjien '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
 
 # Groups
-'group'       => 'Tjïerte:',
-'group-bot'   => 'Jïjtjesvïhtjije',
+'group' => 'Tjïerte:',
+'group-bot' => 'Jïjtjesvïhtjije',
 'group-sysop' => 'Reeredh',
 
-'group-bot-member'   => 'Jïjtjesvïhtjije',
+'group-bot-member' => 'Jïjtjesvïhtjije',
 'group-sysop-member' => 'Reerien',
 
 'grouppage-sysop' => '{{ns:project}}:Reeredh',
@@ -370,84 +369,84 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'rightslog' => 'Nuhtjienreaktah logge',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}',
-'recentchanges'                  => 'Männgan värrhtoedimmieh',
+'nchanges' => '$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}',
+'recentchanges' => 'Männgan värrhtoedimmieh',
 'recentchanges-feed-description' => 'Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.',
-'rcnote'                         => "Vuelen vuesehte {{PLURAL:$1|dïhte männgan värrhtoedimmie|dah männgan '''$1''' värrhtoedimmieh}} nuelesne dah {{PLURAL:$2|männgan biejjie|männgan '''$2''' biejjieh}}, ihke $5, $4.",
-'rcnotefrom'                     => "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
-'rclistfrom'                     => 'Vuesehte orre värrhtoedimmieh aelkedh raejeste $1',
-'rcshowhideminor'                => '$1 ohtje värrhtoedimmie',
-'rcshowhidebots'                 => '$1 jïjtjesvïhtjijeh',
-'rcshowhideliu'                  => '$1 värrhtoedimmie dejstie sïjselogge nuhtjienh',
-'rcshowhideanons'                => '$1 anonyyme nuhtjienh',
-'rcshowhidepatr'                 => '$1 dååhkasjehtedh värrhtoedimmieh',
-'rcshowhidemine'                 => '$1 mov värrhtoedimmieh',
-'rclinks'                        => 'Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3',
-'diff'                           => 'joekehts',
-'hist'                           => 'hist',
-'hide'                           => 'Gaptjedh',
-'show'                           => 'Vuesehte',
-'minoreditletter'                => 'u',
-'newpageletter'                  => 'O',
-'boteditletter'                  => 'j',
+'rcnote' => "Vuelen vuesehte {{PLURAL:$1|dïhte männgan värrhtoedimmie|dah männgan '''$1''' värrhtoedimmieh}} nuelesne dah {{PLURAL:$2|männgan biejjie|männgan '''$2''' biejjieh}}, ihke $5, $4.",
+'rcnotefrom' => "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
+'rclistfrom' => 'Vuesehte orre värrhtoedimmieh aelkedh raejeste $1',
+'rcshowhideminor' => '$1 ohtje värrhtoedimmie',
+'rcshowhidebots' => '$1 jïjtjesvïhtjijeh',
+'rcshowhideliu' => '$1 värrhtoedimmie dejstie sïjselogge nuhtjienh',
+'rcshowhideanons' => '$1 anonyyme nuhtjienh',
+'rcshowhidepatr' => '$1 dååhkasjehtedh värrhtoedimmieh',
+'rcshowhidemine' => '$1 mov värrhtoedimmieh',
+'rclinks' => 'Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3',
+'diff' => 'joekehts',
+'hist' => 'hist',
+'hide' => 'Gaptjedh',
+'show' => 'Vuesehte',
+'minoreditletter' => 'u',
+'newpageletter' => 'O',
+'boteditletter' => 'j',
 
 # Recent changes linked
-'recentchangeslinked'          => 'Värrhtoedimmieh nille krïense bielieh',
-'recentchangeslinked-feed'     => 'Värrhtoedimmieh nille krïense bielieh',
-'recentchangeslinked-toolbox'  => 'Värrhtoedimmieh nille krïense bielieh',
-'recentchangeslinked-title'    => 'Värrhtoedimmie laktaseaddji gåajkoe "$1"',
+'recentchangeslinked' => 'Värrhtoedimmieh nille krïense bielieh',
+'recentchangeslinked-feed' => 'Värrhtoedimmieh nille krïense bielieh',
+'recentchangeslinked-toolbox' => 'Värrhtoedimmieh nille krïense bielieh',
+'recentchangeslinked-title' => 'Värrhtoedimmie laktaseaddji gåajkoe "$1"',
 'recentchangeslinked-noresult' => 'Ijje kïrense bielieh värrhtoedimmie nuelesne dïhte veeljeme tïjje-boelhke.',
-'recentchangeslinked-summary'  => "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
+'recentchangeslinked-summary' => "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
 
 # Upload
-'upload'         => 'Sadde guvvie',
-'uploadbtn'      => 'Sadde baalka',
-'uploadlogpage'  => 'Sadde logge',
-'filename'       => 'Guvvienomme',
-'filesource'     => 'Gaaltjie',
-'savefile'       => 'Spååredh guvvie',
-'uploadedimage'  => 'sadde "[[$1]]"',
-'uploadvirus'    => 'Guvvie tjeekehdidh viirus! Bïevnesh: $1',
+'upload' => 'Sadde guvvie',
+'uploadbtn' => 'Sadde baalka',
+'uploadlogpage' => 'Sadde logge',
+'filename' => 'Guvvienomme',
+'filesource' => 'Gaaltjie',
+'savefile' => 'Spååredh guvvie',
+'uploadedimage' => 'sadde "[[$1]]"',
+'uploadvirus' => 'Guvvie tjeekehdidh viirus! Bïevnesh: $1',
 'sourcefilename' => 'Gaaltjie guvvienomme',
 
 'upload-file-error' => 'Sjisjnjie båajhtode',
 
-'license'        => 'Liseense',
+'license' => 'Liseense',
 'license-header' => 'Liseense',
 
 # Special:ListFiles
 'listfiles_search_for' => 'Ohtsedh ihke guvvie nomme:',
-'imgfile'              => 'guvvie',
-'listfiles'            => 'Guvvie lästoe',
-'listfiles_name'       => 'Nomme',
-'listfiles_user'       => 'Nuhtjien',
-'listfiles_size'       => 'Stoerre',
+'imgfile' => 'guvvie',
+'listfiles' => 'Guvvie lästoe',
+'listfiles_name' => 'Nomme',
+'listfiles_user' => 'Nuhtjien',
+'listfiles_size' => 'Stoerre',
 
 # File description page
-'file-anchor-link'          => 'Baalka',
-'filehist'                  => 'Baalka histovrije',
-'filehist-help'             => 'Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.',
-'filehist-current'          => 'daaletje',
-'filehist-datetime'         => 'Biejjie/Tïjje',
-'filehist-user'             => 'Nuhtjien',
-'filehist-dimensions'       => 'Dimisjovneh',
-'filehist-filesize'         => 'Guvvie stoerre',
-'filehist-comment'          => 'Lahtestimmie',
-'imagelinks'                => 'Lïenghkeh',
-'linkstoimage'              => 'Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:',
-'nolinkstoimage'            => 'Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.',
-'sharedupload'              => 'Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.',
+'file-anchor-link' => 'Baalka',
+'filehist' => 'Baalka histovrije',
+'filehist-help' => 'Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.',
+'filehist-current' => 'daaletje',
+'filehist-datetime' => 'Biejjie/Tïjje',
+'filehist-user' => 'Nuhtjien',
+'filehist-dimensions' => 'Dimisjovneh',
+'filehist-filesize' => 'Guvvie stoerre',
+'filehist-comment' => 'Lahtestimmie',
+'imagelinks' => 'Lïenghkeh',
+'linkstoimage' => 'Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:',
+'nolinkstoimage' => 'Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.',
+'sharedupload' => 'Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.',
 'uploadnewversion-linktext' => 'Sadde orre låhkoe dejstie dïhte baalka',
 
 # MIME search
 'mimesearch' => 'MIME ohtsedh',
-'mimetype'   => 'MIME vuekie:',
+'mimetype' => 'MIME vuekie:',
 
 # List redirects
 'listredirects' => 'Lästoe bïjre-dirisjovneh',
 
 # Unused templates
-'unusedtemplates'    => 'Ov-nuhtjie maaleh',
+'unusedtemplates' => 'Ov-nuhtjie maaleh',
 'unusedtemplateswlh' => 'jeatjebh lïenghkeh',
 
 # Random page
@@ -457,14 +456,14 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'randomredirect' => 'Summal odhasitstivren',
 
 # Statistics
-'statistics'              => 'Statistiike',
+'statistics' => 'Statistiike',
 'statistics-header-users' => 'Nuhtjien statistiike',
 
 'disambiguations' => 'Disambirgusjovne bielieh',
 
 'doubleredirects' => 'Guektien-gïerth bïjre-dirisjovneh',
 
-'brokenredirects'      => 'Earjohks bïrje-dirisjovneh',
+'brokenredirects' => 'Earjohks bïrje-dirisjovneh',
 'brokenredirects-edit' => '(värrhtoedimmie)',
 
 'withoutinterwiki' => 'Bielieh namhtah gïele lïenghkeh',
@@ -472,59 +471,59 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'fewestrevisions' => 'Bielieh meatan dah unnebes gïehtjedamme',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 {{PLURAL:$1|byte|byteh}}',
-'ncategories'             => '$1 {{PLURAL:$1|kategorije|kategorijeh}}',
-'nlinks'                  => '$1 {{PLURAL:$1|lïenghke|lïenghkeh}}',
-'nmembers'                => '$1 {{PLURAL:$1|lihtsege|lihtsegh}}',
-'nrevisions'              => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
-'nviews'                  => '$1 {{PLURAL:$1|vuesehte|vuesehteh}}',
-'lonelypages'             => 'Eejhtegapth bielieh',
-'uncategorizedpages'      => 'Ov-kategorije bielieh',
+'nbytes' => '$1 {{PLURAL:$1|byte|byteh}}',
+'ncategories' => '$1 {{PLURAL:$1|kategorije|kategorijeh}}',
+'nlinks' => '$1 {{PLURAL:$1|lïenghke|lïenghkeh}}',
+'nmembers' => '$1 {{PLURAL:$1|lihtsege|lihtsegh}}',
+'nrevisions' => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
+'nviews' => '$1 {{PLURAL:$1|vuesehte|vuesehteh}}',
+'lonelypages' => 'Eejhtegapth bielieh',
+'uncategorizedpages' => 'Ov-kategorije bielieh',
 'uncategorizedcategories' => 'Ov-kategorije kategorijeh',
-'uncategorizedimages'     => 'Ov-kategorije guvvieh',
-'uncategorizedtemplates'  => 'Ov-kategorije maaleh',
-'unusedcategories'        => 'Ov-nuhtjie kategorije',
-'unusedimages'            => 'Ov-nnuhtjie guvvieh',
-'wantedcategories'        => 'Vaajtelidh kategorijeh',
-'wantedpages'             => 'Vaajtelidh bielieh',
-'mostlinked'              => 'Jeenjebe lïenghkeh gåajkoe bielieh',
-'mostlinkedcategories'    => 'Jeenjebe lïenghke gåajkoe kategorijeh',
-'mostlinkedtemplates'     => 'Jeenjebe lïenghke gåajkoe malleh',
-'mostcategories'          => 'Bielieh meatan jïjnje kategorijeh',
-'mostimages'              => 'Jeenjebe lïenghke gåajkoe guvvieh',
-'mostrevisions'           => 'Bielieh meatan jïjnje gïehtjedammeh',
-'prefixindex'             => 'Prefiikse indeekse',
-'shortpages'              => 'Åenehks bielieh',
-'longpages'               => 'Guhkie bielieh',
-'deadendpages'            => 'Tsuvvedh bielieh',
-'protectedpages'          => 'Sïektjedh bielieh',
-'listusers'               => 'Nuhtjien lästoe',
-'newpages'                => 'Orre bielie',
-'newpages-username'       => 'Nuhtjiennomme:',
-'ancientpages'            => 'Båarasåabpoe bielieh',
-'move'                    => 'Jåhta',
-'movethispage'            => 'Jåhta dïhte bielie',
+'uncategorizedimages' => 'Ov-kategorije guvvieh',
+'uncategorizedtemplates' => 'Ov-kategorije maaleh',
+'unusedcategories' => 'Ov-nuhtjie kategorije',
+'unusedimages' => 'Ov-nnuhtjie guvvieh',
+'wantedcategories' => 'Vaajtelidh kategorijeh',
+'wantedpages' => 'Vaajtelidh bielieh',
+'mostlinked' => 'Jeenjebe lïenghkeh gåajkoe bielieh',
+'mostlinkedcategories' => 'Jeenjebe lïenghke gåajkoe kategorijeh',
+'mostlinkedtemplates' => 'Jeenjebe lïenghke gåajkoe malleh',
+'mostcategories' => 'Bielieh meatan jïjnje kategorijeh',
+'mostimages' => 'Jeenjebe lïenghke gåajkoe guvvieh',
+'mostrevisions' => 'Bielieh meatan jïjnje gïehtjedammeh',
+'prefixindex' => 'Prefiikse indeekse',
+'shortpages' => 'Åenehks bielieh',
+'longpages' => 'Guhkie bielieh',
+'deadendpages' => 'Tsuvvedh bielieh',
+'protectedpages' => 'Sïektjedh bielieh',
+'listusers' => 'Nuhtjien lästoe',
+'newpages' => 'Orre bielie',
+'newpages-username' => 'Nuhtjiennomme:',
+'ancientpages' => 'Båarasåabpoe bielieh',
+'move' => 'Jåhta',
+'movethispage' => 'Jåhta dïhte bielie',
 
 # Book sources
-'booksources'               => 'Gärja gaaltjieh',
+'booksources' => 'Gärja gaaltjieh',
 'booksources-search-legend' => 'Ohtsedh ihke gärja gaaltjieh',
-'booksources-go'            => 'Vaadtsa',
+'booksources-go' => 'Vaadtsa',
 
 # Special:Log
-'specialloguserlabel'  => 'Nuhtjien:',
+'specialloguserlabel' => 'Nuhtjien:',
 'speciallogtitlelabel' => 'Tiitele:',
-'log'                  => 'Loggeh',
-'all-logs-page'        => 'Gaajhke loggeh',
+'log' => 'Loggeh',
+'all-logs-page' => 'Gaajhke loggeh',
 
 # Special:AllPages
-'allpages'       => 'Gaajhke bielieh',
+'allpages' => 'Gaajhke bielieh',
 'alphaindexline' => '$1 ... $2',
-'nextpage'       => 'Minngebe bielie ($1)',
-'prevpage'       => 'Övtebe bielie ($1)',
-'allpagesfrom'   => 'Vuesehte bielieh goh aelkedh meatan:',
-'allarticles'    => 'Gaajhke bielieh',
-'allpagesprev'   => 'Övtebe',
-'allpagesnext'   => 'Minngebe',
+'nextpage' => 'Minngebe bielie ($1)',
+'prevpage' => 'Övtebe bielie ($1)',
+'allpagesfrom' => 'Vuesehte bielieh goh aelkedh meatan:',
+'allarticles' => 'Gaajhke bielieh',
+'allpagesprev' => 'Övtebe',
+'allpagesnext' => 'Minngebe',
 'allpagessubmit' => 'Vaadtsa',
 'allpagesprefix' => 'Vuesehte bielieh meatan prefihkse:',
 
@@ -535,246 +534,246 @@ Dov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge s
 'listusers-submit' => 'Vuesehte',
 
 # E-mail user
-'emailuser'       => 'E-påaste dïhte nuhtjien',
-'emailpage'       => 'E-påaste nuhtjien',
+'emailuser' => 'E-påaste dïhte nuhtjien',
+'emailpage' => 'E-påaste nuhtjien',
 'defemailsubject' => '{{SITENAME}} e-påaste',
-'emailfrom'       => 'Raejeste',
-'emailto'         => 'Gåajkoe',
-'emailsubject'    => 'Ïebne',
-'emailmessage'    => 'Dïjre',
-'emailsend'       => 'Seedtie',
-'emailsent'       => 'E-påaste seedtedh',
+'emailfrom' => 'Raejeste',
+'emailto' => 'Gåajkoe',
+'emailsubject' => 'Ïebne',
+'emailmessage' => 'Dïjre',
+'emailsend' => 'Seedtie',
+'emailsent' => 'E-påaste seedtedh',
 
 # Watchlist
-'watchlist'         => 'Mov sïektjedhlästoe',
-'mywatchlist'       => 'Mov sïektjedhlästoe',
-'removedwatchtext'  => 'Bielie "[[:$1]]" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].',
-'watch'             => 'Sïektjedh',
-'watchthispage'     => 'Sïektjedh dïhte bielie',
-'unwatch'           => 'Ov-sïektjedh',
+'watchlist' => 'Mov sïektjedhlästoe',
+'mywatchlist' => 'Mov sïektjedhlästoe',
+'removedwatchtext' => 'Bielie "[[:$1]]" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].',
+'watch' => 'Sïektjedh',
+'watchthispage' => 'Sïektjedh dïhte bielie',
+'unwatch' => 'Ov-sïektjedh',
 'watchlist-details' => '{{PLURAL:$1|$1 bielie|$1 bielieh}} sïektjedh (doekoe dïerhkestidhbielieh).',
-'wlshowlast'        => 'Vuesehte minngemes $1 täjmoeh $2 biejjieh $3',
+'wlshowlast' => 'Vuesehte minngemes $1 täjmoeh $2 biejjieh $3',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Sïektjeminie...',
+'watching' => 'Sïektjeminie...',
 'unwatching' => 'Ov-sïektjedh...',
 
-'enotif_newpagetext'           => 'Dïhte lea orre bielie.',
+'enotif_newpagetext' => 'Dïhte lea orre bielie.',
 'enotif_impersonal_salutation' => '{{SITENAME}} nuhtjien',
-'created'                      => 'skaepede',
+'created' => 'skaepede',
 
 # Delete
-'deletepage'            => 'Tjåegkedh bielie',
-'historywarning'        => 'Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:',
-'actioncomplete'        => 'Deahpadimmie voerkes',
-'deletedtext'           => '"$1" lea sihkojuvvon.
+'deletepage' => 'Tjåegkedh bielie',
+'historywarning' => 'Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:',
+'actioncomplete' => 'Deahpadimmie voerkes',
+'deletedtext' => '"$1" lea sihkojuvvon.
 Vuajna $2 ihke galtege bïjre männgan sihkojuvvonh.',
-'dellogpage'            => 'Sihkkun logge',
-'deletecomment'         => 'Gaavhtan ihke sihkkuma',
-'deleteotherreason'     => 'Jeatjebh/ehkstre gaavhtan:',
+'dellogpage' => 'Sihkkun logge',
+'deletecomment' => 'Gaavhtan ihke sihkkuma',
+'deleteotherreason' => 'Jeatjebh/ehkstre gaavhtan:',
 'deletereasonotherlist' => 'Jeatjebh gaavhtan',
 
 # Rollback
 'rollbacklink' => 'jurrelde bååstede',
 
 # Protect
-'protectlogpage'              => 'Vaarjelidh logge',
-'prot_1movedto2'              => '[[$1]] jåhta gåajkoe [[$2]]',
-'protect-legend'              => 'Skylledh vaarjelidh',
-'protectcomment'              => 'Lahtestimmie:',
-'protectexpiry'               => 'Boarasnuvve:',
-'protect_expiry_invalid'      => 'Ov-jiltiige buaorasjnuvvenaigi.',
-'protect_expiry_old'          => 'Boarasnuvvenaigi lea vaesedh.',
-'protect-text'                => "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
-'protect-locked-access'       => "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.
+'protectlogpage' => 'Vaarjelidh logge',
+'prot_1movedto2' => '[[$1]] jåhta gåajkoe [[$2]]',
+'protect-legend' => 'Skylledh vaarjelidh',
+'protectcomment' => 'Lahtestimmie:',
+'protectexpiry' => 'Boarasnuvve:',
+'protect_expiry_invalid' => 'Ov-jiltiige buaorasjnuvvenaigi.',
+'protect_expiry_old' => 'Boarasnuvvenaigi lea vaesedh.',
+'protect-text' => "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
+'protect-locked-access' => "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.
 Daaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
-'protect-default'             => '(åvte-veeljeme)',
-'protect-fallback'            => 'Luhpie "$1"',
+'protect-default' => '(åvte-veeljeme)',
+'protect-fallback' => 'Luhpie "$1"',
 'protect-level-autoconfirmed' => 'Tjöödtjehtidh ov-registreered nuhtjienh',
-'protect-level-sysop'         => 'Barre reeredh',
-'protect-summary-cascade'     => 'viididuvvon',
-'protect-expiring'            => 'boarasnuvve $1 (UTC)',
-'protect-cascade'             => 'Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)',
-'protect-cantedit'            => 'Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.',
-'protect-expiry-options'      => '2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite',
-'restriction-type'            => 'Permisjovne:',
-'restriction-level'           => 'Restriksjovne daltese:',
+'protect-level-sysop' => 'Barre reeredh',
+'protect-summary-cascade' => 'viididuvvon',
+'protect-expiring' => 'boarasnuvve $1 (UTC)',
+'protect-cascade' => 'Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)',
+'protect-cantedit' => 'Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.',
+'protect-expiry-options' => '2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite',
+'restriction-type' => 'Permisjovne:',
+'restriction-level' => 'Restriksjovne daltese:',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Värrhtoedimmie',
-'restriction-move'   => 'Jåhta',
+'restriction-edit' => 'Värrhtoedimmie',
+'restriction-move' => 'Jåhta',
 'restriction-create' => 'Skaepiedidh',
 
 # Restriction levels
 'restriction-level-sysop' => 'dïeves-vaarjelidh',
 
 # Undelete
-'undeleterevisions'      => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe',
-'undeletebtn'            => 'Mahtsat',
+'undeleterevisions' => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe',
+'undeletebtn' => 'Mahtsat',
 'undelete-search-submit' => 'Ohtsedh',
 
 # Namespace form on various pages
-'namespace'      => 'Nommeïebne:',
-'invert'         => 'Jarkoe veeljeme',
+'namespace' => 'Nommeïebne:',
+'invert' => 'Jarkoe veeljeme',
 'blanknamespace' => '(Bielieh)',
 
 # Contributions
 'contributions' => 'Nuhtjien värrhtoedimmieh',
-'mycontris'     => 'Mov värrhtoedimmieh',
-'contribsub2'   => 'Ihke $1 ($2)',
-'uctop'         => '(gïerege)',
-'month'         => 'Raejeste aske (jih övtebe):',
-'year'          => 'Raejeste jaepie (jih övtebe):',
+'mycontris' => 'Mov värrhtoedimmieh',
+'contribsub2' => 'Ihke $1 ($2)',
+'uctop' => '(gïerege)',
+'month' => 'Raejeste aske (jih övtebe):',
+'year' => 'Raejeste jaepie (jih övtebe):',
 
 'sp-contributions-newbies-sub' => 'Ihke orre nuhtjienh',
-'sp-contributions-blocklog'    => 'Tjöödtjehtidh logge',
-'sp-contributions-talk'        => 'Digkiedimmie',
-'sp-contributions-username'    => 'IP Tjaalesijjie jallh nuhtjiennomme:',
-'sp-contributions-submit'      => 'Ohtsedh',
+'sp-contributions-blocklog' => 'Tjöödtjehtidh logge',
+'sp-contributions-talk' => 'Digkiedimmie',
+'sp-contributions-username' => 'IP Tjaalesijjie jallh nuhtjiennomme:',
+'sp-contributions-submit' => 'Ohtsedh',
 
 # What links here
-'whatlinkshere'       => 'Bilieh goh lïenghkeh diekie',
+'whatlinkshere' => 'Bilieh goh lïenghkeh diekie',
 'whatlinkshere-title' => 'Bielieh goh lïenghke gåajkoe $1',
-'whatlinkshere-page'  => 'Bielie:',
-'linkshere'           => "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
-'nolinkshere'         => "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
-'isredirect'          => 'bïjre-dirisjovne bielie',
-'istemplate'          => 'lasihuvvon goh maale',
-'whatlinkshere-prev'  => '{{PLURAL:$1|övtebe|övtebe $1}}',
-'whatlinkshere-next'  => '{{PLURAL:$1|minngebe|minngebe $1}}',
+'whatlinkshere-page' => 'Bielie:',
+'linkshere' => "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
+'nolinkshere' => "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
+'isredirect' => 'bïjre-dirisjovne bielie',
+'istemplate' => 'lasihuvvon goh maale',
+'whatlinkshere-prev' => '{{PLURAL:$1|övtebe|övtebe $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|minngebe|minngebe $1}}',
 'whatlinkshere-links' => '← lïenghkeh',
 
 # Block/unblock
-'blockip'            => 'Tjöödtjehtidh nuhtjien',
+'blockip' => 'Tjöödtjehtidh nuhtjien',
 'ipadressorusername' => 'IP Tjaalesijjie jallh nuhtjiennomme:',
-'ipbother'           => 'Jeatjebh tïjje:',
-'ipboptions'         => '2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite',
-'ipbotheroption'     => 'jeatjebh',
-'ipblocklist'        => 'Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh',
+'ipbother' => 'Jeatjebh tïjje:',
+'ipboptions' => '2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite',
+'ipbotheroption' => 'jeatjebh',
+'ipblocklist' => 'Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh',
 'ipblocklist-submit' => 'Ohtsedh',
-'blocklink'          => 'tjöödtjehtidh',
-'unblocklink'        => 'ov-tjöödtjehtidh',
-'contribslink'       => 'dåarjoeh',
-'blocklogpage'       => 'Tjöödtjehtidh logge',
-'blocklogentry'      => 'blåhkedidh "[[$1]]" $2 $3',
+'blocklink' => 'tjöödtjehtidh',
+'unblocklink' => 'ov-tjöödtjehtidh',
+'contribslink' => 'dåarjoeh',
+'blocklogpage' => 'Tjöödtjehtidh logge',
+'blocklogentry' => 'blåhkedidh "[[$1]]" $2 $3',
 
 # Developer tools
-'lockdb'            => 'Tjuevtedh daatabaase',
-'lockbtn'           => 'Tjuevtedh daatabaase',
+'lockdb' => 'Tjuevtedh daatabaase',
+'lockbtn' => 'Tjuevtedh daatabaase',
 'databasenotlocked' => 'Daatabaase lea ijje tjuevtedh.',
 
 # Move page
 'move-page-legend' => 'Jåhta bielie',
-'movearticle'      => 'Jåhta bielie:',
-'newtitle'         => 'Gåajkoe orre tiitele:',
-'move-watch'       => 'Sïektjedh dïhte bielie',
-'movepagebtn'      => 'Jåhta bielie',
-'pagemovedsub'     => 'Jåhta lähkoe',
-'articleexists'    => 'Bielie meatan dïhte nomme gååvnese joe, jallh
+'movearticle' => 'Jåhta bielie:',
+'newtitle' => 'Gåajkoe orre tiitele:',
+'move-watch' => 'Sïektjedh dïhte bielie',
+'movepagebtn' => 'Jåhta bielie',
+'pagemovedsub' => 'Jåhta lähkoe',
+'articleexists' => 'Bielie meatan dïhte nomme gååvnese joe, jallh
 nome dov åtna veeljeme lea ijje jiiltige.
 Gïemhpes veeljeme jeatjebh nomme.',
-'movedto'          => 'jåhta gåajkoe',
-'movetalk'         => 'Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.',
-'movelogpage'      => 'Jåhta logge',
-'movereason'       => 'Gaavhtan:',
-'revertmove'       => 'jåhta bååstede',
+'movedto' => 'jåhta gåajkoe',
+'movetalk' => 'Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.',
+'movelogpage' => 'Jåhta logge',
+'movereason' => 'Gaavhtan:',
+'revertmove' => 'jåhta bååstede',
 
 # Export
-'export'           => 'Ehksporte bielieh',
-'export-submit'    => 'Ehksporte',
-'export-addcat'    => 'Lissiehtidh',
+'export' => 'Ehksporte bielieh',
+'export-submit' => 'Ehksporte',
+'export-addcat' => 'Lissiehtidh',
 'export-templates' => 'Inkludera mallar',
 
 # Namespace 8 related
-'allmessages'     => 'Systeeme dïrje',
+'allmessages' => 'Systeeme dïrje',
 'allmessagesname' => 'Nomme',
 
 # Thumbnails
-'thumbnail-more'  => 'Vijriedidh',
+'thumbnail-more' => 'Vijriedidh',
 'thumbnail_error' => 'Båajhtode nuelesne skaepede dejstie miniatyvreguvvie: $1',
 
 # Special:Import
-'import'                  => 'Imporhte bielieh',
+'import' => 'Imporhte bielieh',
 'import-interwiki-submit' => 'Imporhte',
-'importstart'             => 'Imporhte bielieh...',
-'import-revision-count'   => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
-'importfailed'            => 'Imporhte steegkeldahkesne: $1',
-'importsuccess'           => 'Imporhte lähkoe!',
+'importstart' => 'Imporhte bielieh...',
+'import-revision-count' => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
+'importfailed' => 'Imporhte steegkeldahkesne: $1',
+'importsuccess' => 'Imporhte lähkoe!',
 
 # Import log
-'importlogpage'                    => 'Imporhte logge',
-'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
+'importlogpage' => 'Imporhte logge',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} raejeste $2',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Mov nuhtjienbielie',
-'tooltip-pt-mytalk'               => 'Mov dïjveldidh bielie',
-'tooltip-pt-preferences'          => 'Mov sïjsesäälningeh',
-'tooltip-pt-watchlist'            => 'Lästoe bijjelen bielieh goh sïektjedh',
-'tooltip-pt-mycontris'            => 'Lästoe bijjelen mov värrhtoedimmie',
-'tooltip-pt-login'                => 'Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.',
-'tooltip-pt-logout'               => 'Logge ålkone',
-'tooltip-ca-talk'                 => 'Dïjveldidh bïjre sisvege bieliej',
-'tooltip-ca-edit'                 => 'Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.',
-'tooltip-ca-addsection'           => 'Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.',
-'tooltip-ca-viewsource'           => 'Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.',
-'tooltip-ca-protect'              => 'Vaarjelidh dïhte bielie',
-'tooltip-ca-delete'               => 'Tjåegkedh dïhte bielie',
-'tooltip-ca-move'                 => 'Jåhta dïhte bielie',
-'tooltip-ca-watch'                => 'Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe',
-'tooltip-ca-unwatch'              => 'Sirdde dïhte bielie raejeste dov sïektjedhlästoe',
-'tooltip-search'                  => 'Ohtsedh {{SITENAME}}sne',
-'tooltip-p-logo'                  => 'Åejjiebielie',
-'tooltip-n-mainpage'              => 'Gåajkoe aalkoebielie vaadtsa',
-'tooltip-n-portal'                => 'Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh',
-'tooltip-n-currentevents'         => 'Bïevnesh bïjre daaletje deahpadimmieh',
-'tooltip-n-recentchanges'         => 'Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.',
-'tooltip-n-randompage'            => 'Vaadtsa summal bielie',
-'tooltip-n-help'                  => 'Viehkie jih bïevnesh {{SITENAME}} bïjre.',
-'tooltip-t-whatlinkshere'         => 'Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie',
-'tooltip-feed-rss'                => 'RSS feed ihke dïhte bielie',
-'tooltip-feed-atom'               => 'Atom feed ihke dïhte bielie',
-'tooltip-t-contributions'         => 'Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien',
-'tooltip-t-emailuser'             => 'Seedtedh e-påaste gåajkoe dïhte nuhtjien',
-'tooltip-t-upload'                => 'Sadde guvvir jallh meedia baalkah',
-'tooltip-t-specialpages'          => 'Lästoe gaajhke joekoen bielieh bijjelen',
-'tooltip-ca-nstab-user'           => 'Vuesehte nuhtjien bieliej',
-'tooltip-ca-nstab-project'        => 'Vuesehte prosjekte bieliej',
-'tooltip-ca-nstab-image'          => 'Vuesehte guvvie bieliej',
-'tooltip-ca-nstab-template'       => 'Vuesehte maalej',
-'tooltip-ca-nstab-help'           => 'Vuesehte viehkie bieliej',
-'tooltip-ca-nstab-category'       => 'Vuesehte kategorije bieliej',
-'tooltip-minoredit'               => 'Mïerhkesjidh dïhte lea ohtje värrhtoedimmie',
-'tooltip-save'                    => 'Spååredh dov värrhtoedimmieh',
-'tooltip-preview'                 => 'Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!',
-'tooltip-diff'                    => 'Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.',
+'tooltip-pt-userpage' => 'Mov nuhtjienbielie',
+'tooltip-pt-mytalk' => 'Mov dïjveldidh bielie',
+'tooltip-pt-preferences' => 'Mov sïjsesäälningeh',
+'tooltip-pt-watchlist' => 'Lästoe bijjelen bielieh goh sïektjedh',
+'tooltip-pt-mycontris' => 'Lästoe bijjelen mov värrhtoedimmie',
+'tooltip-pt-login' => 'Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.',
+'tooltip-pt-logout' => 'Logge ålkone',
+'tooltip-ca-talk' => 'Dïjveldidh bïjre sisvege bieliej',
+'tooltip-ca-edit' => 'Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.',
+'tooltip-ca-addsection' => 'Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.',
+'tooltip-ca-viewsource' => 'Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.',
+'tooltip-ca-protect' => 'Vaarjelidh dïhte bielie',
+'tooltip-ca-delete' => 'Tjåegkedh dïhte bielie',
+'tooltip-ca-move' => 'Jåhta dïhte bielie',
+'tooltip-ca-watch' => 'Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe',
+'tooltip-ca-unwatch' => 'Sirdde dïhte bielie raejeste dov sïektjedhlästoe',
+'tooltip-search' => 'Ohtsedh {{SITENAME}}sne',
+'tooltip-p-logo' => 'Åejjiebielie',
+'tooltip-n-mainpage' => 'Gåajkoe aalkoebielie vaadtsa',
+'tooltip-n-portal' => 'Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh',
+'tooltip-n-currentevents' => 'Bïevnesh bïjre daaletje deahpadimmieh',
+'tooltip-n-recentchanges' => 'Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.',
+'tooltip-n-randompage' => 'Vaadtsa summal bielie',
+'tooltip-n-help' => 'Viehkie jih bïevnesh {{SITENAME}} bïjre.',
+'tooltip-t-whatlinkshere' => 'Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie',
+'tooltip-feed-rss' => 'RSS feed ihke dïhte bielie',
+'tooltip-feed-atom' => 'Atom feed ihke dïhte bielie',
+'tooltip-t-contributions' => 'Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien',
+'tooltip-t-emailuser' => 'Seedtedh e-påaste gåajkoe dïhte nuhtjien',
+'tooltip-t-upload' => 'Sadde guvvir jallh meedia baalkah',
+'tooltip-t-specialpages' => 'Lästoe gaajhke joekoen bielieh bijjelen',
+'tooltip-ca-nstab-user' => 'Vuesehte nuhtjien bieliej',
+'tooltip-ca-nstab-project' => 'Vuesehte prosjekte bieliej',
+'tooltip-ca-nstab-image' => 'Vuesehte guvvie bieliej',
+'tooltip-ca-nstab-template' => 'Vuesehte maalej',
+'tooltip-ca-nstab-help' => 'Vuesehte viehkie bieliej',
+'tooltip-ca-nstab-category' => 'Vuesehte kategorije bieliej',
+'tooltip-minoredit' => 'Mïerhkesjidh dïhte lea ohtje värrhtoedimmie',
+'tooltip-save' => 'Spååredh dov värrhtoedimmieh',
+'tooltip-preview' => 'Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!',
+'tooltip-diff' => 'Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.',
 'tooltip-compareselectedversions' => 'Vuesehte joekehts gaskesne dah göökte vïhtesjidh låhkoeh dejstie dïhte bielie.',
-'tooltip-watch'                   => 'Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe',
+'tooltip-watch' => 'Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe',
 
 # Attribution
-'siteuser'  => '{{SITENAME}} nuhtjien $1',
+'siteuser' => '{{SITENAME}} nuhtjien $1',
 'siteusers' => '{{SITENAME}} nuhtjien(h) $1',
 
 # Browsing diffs
 'previousdiff' => '← Övtebe joekehts',
-'nextdiff'     => 'Minngebe joekehts →',
+'nextdiff' => 'Minngebe joekehts →',
 
 # Media information
-'file-info'      => 'baalka stoerre: $1, MIME-vuekie: $2',
+'file-info' => 'baalka stoerre: $1, MIME-vuekie: $2',
 'file-info-size' => '$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4',
-'file-nohires'   => 'Ijje jïlle bäjjeselöösninge jaksoes.',
-'svg-long-desc'  => 'SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3',
+'file-nohires' => 'Ijje jïlle bäjjeselöösninge jaksoes.',
+'svg-long-desc' => 'SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3',
 'show-big-image' => 'Dïeves stoerre',
 
 # Special:NewFiles
 'newimages' => 'Gallerije dejstie orre baalkah',
-'ilsubmit'  => 'Ohtsedh',
+'ilsubmit' => 'Ohtsedh',
 
 # Metadata
-'metadata'          => 'Metadaata',
-'metadata-expand'   => 'Vuesehte vijriedidh detaaljeh',
+'metadata' => 'Metadaata',
+'metadata-expand' => 'Vuesehte vijriedidh detaaljeh',
 'metadata-collapse' => 'Gaptjedh vijrede daeverh',
-'metadata-fields'   => 'EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.
+'metadata-fields' => 'EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.
 Jeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoerre.
 * make
 * model
@@ -791,18 +790,18 @@ Jeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoer
 * gpsaltitude',
 
 # EXIF tags
-'exif-imagewidth'         => 'Gamte',
-'exif-imagelength'        => 'Gåhkoe',
-'exif-model'              => 'Guvviedahke hammohke',
-'exif-software'           => 'Möövhkesvaare nuhtjie',
-'exif-filesource'         => 'Guvvie gaaltjie',
-'exif-gpslatituderef'     => 'Noerhte jallh Åarjetje Laatituude',
-'exif-gpslatitude'        => 'Laatituude',
-'exif-gpslongituderef'    => 'Lulnie jallh Jillege Låångdituude',
-'exif-gpslongitude'       => 'Låångdituude',
+'exif-imagewidth' => 'Gamte',
+'exif-imagelength' => 'Gåhkoe',
+'exif-model' => 'Guvviedahke hammohke',
+'exif-software' => 'Möövhkesvaare nuhtjie',
+'exif-filesource' => 'Guvvie gaaltjie',
+'exif-gpslatituderef' => 'Noerhte jallh Åarjetje Laatituude',
+'exif-gpslatitude' => 'Laatituude',
+'exif-gpslongituderef' => 'Lulnie jallh Jillege Låångdituude',
+'exif-gpslongitude' => 'Låångdituude',
 'exif-gpsareainformation' => 'Nomme ihke GPS davje',
 
-'exif-meteringmode-0'   => 'Ammes',
+'exif-meteringmode-0' => 'Ammes',
 'exif-meteringmode-255' => 'Jeatjebh',
 
 'exif-lightsource-0' => 'Ammes',
@@ -826,13 +825,13 @@ Jeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoer
 'exif-gpslongitude-w' => 'Jillege låångdituude',
 
 # External editor support
-'edit-externally'      => 'Värrhtoedimmie dïhte baalka meatan ehksteerne applikasjovne',
+'edit-externally' => 'Värrhtoedimmie dïhte baalka meatan ehksteerne applikasjovne',
 'edit-externally-help' => 'Vuajna [//www.mediawiki.org/wiki/Manual:External_editors instalasjovne instruksjovne] ihke vielie bïevnesh.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'gaajhke',
 'namespacesall' => 'gaajhke',
-'monthsall'     => 'gaajhke',
+'monthsall' => 'gaajhke',
 
 # Scary transclusion
 'scarytranscludetoolong' => '[URL lea ihke guhkie; gaatelassjedh]',
@@ -843,13 +842,13 @@ Jeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoer
 # Multipage image navigation
 'imgmultipageprev' => '← övtebe bielie',
 'imgmultipagenext' => 'minngebe bielie →',
-'imgmultigo'       => 'Vaadtsa!',
+'imgmultigo' => 'Vaadtsa!',
 
 # Table pager
-'table_pager_next'         => 'Minngebe bielie',
-'table_pager_prev'         => 'Övtebe bielie',
-'table_pager_first'        => 'Voestemes bielie',
-'table_pager_last'         => 'Minngemes bielie',
+'table_pager_next' => 'Minngebe bielie',
+'table_pager_prev' => 'Övtebe bielie',
+'table_pager_first' => 'Voestemes bielie',
+'table_pager_last' => 'Minngemes bielie',
 'table_pager_limit_submit' => 'Vaadtsa',
 
 # Auto-summaries
@@ -857,12 +856,12 @@ Jeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoer
 
 # Live preview
 'livepreview-loading' => 'Leedtedh…',
-'livepreview-ready'   => 'Leedtedh… Voerkes!',
+'livepreview-ready' => 'Leedtedh… Voerkes!',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Sïektjedhlästoe',
 'watchlisttools-edit' => 'Vuesehte jih värrhtoedimmie sïektjedhlästoe',
-'watchlisttools-raw'  => 'Värrhtordimmie saajpe sïektjedhlästoe',
+'watchlisttools-raw' => 'Värrhtordimmie saajpe sïektjedhlästoe',
 
 # Core parser functions
 'unknown_extension_tag' => 'Ammes ekshtensjovne lissie "$1"',
index 80c7cbe..db4716b 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Svondo',
-'monday'        => 'Muvhuro',
-'tuesday'       => 'Chipiri',
-'wednesday'     => 'Chitatu',
-'thursday'      => 'China',
-'friday'        => 'Chishanu',
-'saturday'      => 'Mugovera',
-'january'       => 'Ndira',
-'february'      => 'Kukadzi',
-'march'         => 'Kurume',
-'april'         => 'Kubvumbi',
-'may_long'      => 'Chivabvu',
-'june'          => 'Chikumi',
-'july'          => 'Chikunguru',
-'august'        => 'Nyamavhuvhu',
-'september'     => 'Gunyana',
-'october'       => 'Gumiguru',
-'november'      => 'Mbudzi',
-'december'      => 'Zvita',
-'january-gen'   => 'Ndira',
-'february-gen'  => 'Kukadzi',
-'march-gen'     => 'Kurume',
-'april-gen'     => 'Kubvumbi',
-'may-gen'       => 'Chivabvu',
-'june-gen'      => 'Chikumi',
-'july-gen'      => 'Chikunguru',
-'august-gen'    => 'Nyamavhuvhu',
+'sunday' => 'Svondo',
+'monday' => 'Muvhuro',
+'tuesday' => 'Chipiri',
+'wednesday' => 'Chitatu',
+'thursday' => 'China',
+'friday' => 'Chishanu',
+'saturday' => 'Mugovera',
+'january' => 'Ndira',
+'february' => 'Kukadzi',
+'march' => 'Kurume',
+'april' => 'Kubvumbi',
+'may_long' => 'Chivabvu',
+'june' => 'Chikumi',
+'july' => 'Chikunguru',
+'august' => 'Nyamavhuvhu',
+'september' => 'Gunyana',
+'october' => 'Gumiguru',
+'november' => 'Mbudzi',
+'december' => 'Zvita',
+'january-gen' => 'Ndira',
+'february-gen' => 'Kukadzi',
+'march-gen' => 'Kurume',
+'april-gen' => 'Kubvumbi',
+'may-gen' => 'Chivabvu',
+'june-gen' => 'Chikumi',
+'july-gen' => 'Chikunguru',
+'august-gen' => 'Nyamavhuvhu',
 'september-gen' => 'Gunyana',
-'october-gen'   => 'Gumiguru',
-'november-gen'  => 'Mbudzi',
-'december-gen'  => 'Zvita',
+'october-gen' => 'Gumiguru',
+'november-gen' => 'Mbudzi',
+'december-gen' => 'Zvita',
 
-'cancel'     => 'Kanzura',
-'mytalk'     => 'Hurukuro dzangu',
+'cancel' => 'Kanzura',
+'mytalk' => 'Hurukuro dzangu',
 'navigation' => 'Banguranyika',
 
 # Cologne Blue skin
-'qbedit'         => 'Chinja',
+'qbedit' => 'Chinja',
 'qbspecialpages' => 'Mapeji akakosha',
 
-'help'             => 'Rubatsiro',
-'search'           => 'Tsvaga',
-'searchbutton'     => 'Tsvaga',
-'go'               => 'Enda',
-'searcharticle'    => 'Enda',
-'history_short'    => 'Zvemakare',
+'help' => 'Rubatsiro',
+'search' => 'Tsvaga',
+'searchbutton' => 'Tsvaga',
+'go' => 'Enda',
+'searcharticle' => 'Enda',
+'history_short' => 'Zvemakare',
 'printableversion' => 'Rinoita kuprinta',
-'permalink'        => 'Zvikochekero Zvisingachinje',
-'edit'             => 'Chinja',
-'delete'           => 'Bharanura',
-'protect'          => 'Chengetedza',
-'talk'             => 'Hurukuro',
-'toolbox'          => 'Maturuzi',
-'otherlanguages'   => 'Mimwe Mitauro',
+'permalink' => 'Zvikochekero Zvisingachinje',
+'edit' => 'Chinja',
+'delete' => 'Bharanura',
+'protect' => 'Chengetedza',
+'talk' => 'Hurukuro',
+'toolbox' => 'Maturuzi',
+'otherlanguages' => 'Mimwe Mitauro',
 
 # 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).
-'currentevents'        => 'Zvirikuitika',
-'currentevents-url'    => 'Project:Zvirikuitika',
-'disclaimers'          => 'Matandanyadzi',
-'edithelp'             => 'Mashandurirwo',
-'mainpage'             => 'Peji Rekutanga',
+'currentevents' => 'Zvirikuitika',
+'currentevents-url' => 'Project:Zvirikuitika',
+'disclaimers' => 'Matandanyadzi',
+'edithelp' => 'Mashandurirwo',
+'mainpage' => 'Peji Rekutanga',
 'mainpage-description' => 'Peji Rekutanga',
-'portal'               => 'Mukova wegutse',
+'portal' => 'Mukova wegutse',
 
-'newmessageslink'         => 'mashoko matsva',
+'newmessageslink' => 'mashoko matsva',
 'youhavenewmessagesmulti' => 'Une mashoko matsva pa$1',
-'editsection'             => 'chinja',
-'editold'                 => 'chinja',
+'editsection' => 'chinja',
+'editold' => 'chinja',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Gani',
@@ -88,64 +88,64 @@ $messages = array(
 'viewsource' => 'Wona mabviro',
 
 # Login and logout pages
-'welcomecreation'    => '== Tigashire, $1! ==
+'welcomecreation' => '== Tigashire, $1! ==
 Akaunzi yako yagadzirwa.
 Usakanganwe kuchinga [[Special:Preferences|mapreferences ako {{SITENAME}}]].',
-'yourname'           => 'Zita:',
-'yourpassword'       => 'Password:',
-'yourpasswordagain'  => 'Nyorazve password:',
+'yourname' => 'Zita:',
+'yourpassword' => 'Password:',
+'yourpasswordagain' => 'Nyorazve password:',
 'remembermypassword' => 'Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'Gamuchirwa',
-'userlogin'          => 'Gamuchirwa / Gadzira Akaunzi',
-'logout'             => 'Chibuda',
-'userlogout'         => 'Chibuda',
-'notloggedin'        => 'Hauna kugamuchirwa',
-'createaccount'      => 'Gadzira Akaunzi',
+'login' => 'Gamuchirwa',
+'userlogin' => 'Gamuchirwa / Gadzira Akaunzi',
+'logout' => 'Chibuda',
+'userlogout' => 'Chibuda',
+'notloggedin' => 'Hauna kugamuchirwa',
+'createaccount' => 'Gadzira Akaunzi',
 
 # Edit pages
-'summary'     => 'Muchidimbu:',
-'minoredit'   => 'Uku kushandurwa kudiki',
-'watchthis'   => 'Ringa peji rino',
+'summary' => 'Muchidimbu:',
+'minoredit' => 'Uku kushandurwa kudiki',
+'watchthis' => 'Ringa peji rino',
 'savearticle' => 'Kotsa peji',
 'showpreview' => 'Ratidza chipandwa',
-'showdiff'    => 'Ratidza zvasandurwa',
+'showdiff' => 'Ratidza zvasandurwa',
 
 # Search results
 'powersearch' => 'Tsvaga',
 
 # Preferences page
-'mypreferences'     => 'Zvandinosarudza',
-'prefsnologin'      => 'Hauna kugamuchirwa',
-'prefs-rc'          => 'Zvaba Kuchinjwa',
+'mypreferences' => 'Zvandinosarudza',
+'prefsnologin' => 'Hauna kugamuchirwa',
+'prefs-rc' => 'Zvaba Kuchinjwa',
 'searchresultshead' => 'Tsvaga',
-'youremail'         => 'E-mail:',
-'username'          => 'Zita:',
+'youremail' => 'E-mail:',
+'username' => 'Zita:',
 
 # Recent changes
 'recentchanges' => 'Zvaba Kuchinjwa',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Zvinoenderana nezvachinjwa',
-'recentchangeslinked-feed'    => 'Zvinoenderana nezvachinjwa',
+'recentchangeslinked' => 'Zvinoenderana nezvachinjwa',
+'recentchangeslinked-feed' => 'Zvinoenderana nezvachinjwa',
 'recentchangeslinked-toolbox' => 'Zvinoenderana nezvachinjwa',
 
 # Upload
-'upload'          => 'Isa fayera',
-'uploadbtn'       => 'Isa fayera',
-'uploadnologin'   => 'Hauna kugamuchirwa',
+'upload' => 'Isa fayera',
+'uploadbtn' => 'Isa fayera',
+'uploadnologin' => 'Hauna kugamuchirwa',
 'watchthisupload' => 'Ringa peji rino',
 
 # Random page
 'randompage' => 'Peji nhemwa',
 
 # Miscellaneous special pages
-'move'         => 'Chichinura',
+'move' => 'Chichinura',
 'movethispage' => 'Chichinura kupeji iri',
 
 # Watchlist
-'watchlist'     => 'Zvandakarinda',
-'mywatchlist'   => 'Zvandakarinda',
-'watch'         => 'Rinda',
+'watchlist' => 'Zvandakarinda',
+'mywatchlist' => 'Zvandakarinda',
+'watch' => 'Rinda',
 'watchthispage' => 'Ringa peji rino',
 
 # Protect
@@ -160,7 +160,7 @@ Usakanganwe kuchinga [[Special:Preferences|mapreferences ako {{SITENAME}}]].',
 
 # Contributions
 'contributions' => 'Mushandisi Kanzatu',
-'mycontris'     => 'Kanzatu kangu',
+'mycontris' => 'Kanzatu kangu',
 
 'sp-contributions-submit' => 'Tsvaga',
 
@@ -169,18 +169,18 @@ Usakanganwe kuchinga [[Special:Preferences|mapreferences ako {{SITENAME}}]].',
 
 # Move page
 'move-page-legend' => 'Chichinura peji',
-'movepagebtn'      => 'Chichinura peji',
-'movedto'          => 'rachichinurwa ku',
-'movereason'       => 'Chikonzero',
+'movepagebtn' => 'Chichinura peji',
+'movedto' => 'rachichinurwa ku',
+'movereason' => 'Chikonzero',
 
 # Namespace 8 related
 'allmessages' => 'Mashoko esystem',
 
 # Tooltip help for the actions
 'tooltip-pt-preferences' => 'Zvandinosarudza',
-'tooltip-pt-logout'      => 'Chibuda',
-'tooltip-ca-move'        => 'Chichinura kupeji iri',
-'tooltip-p-logo'         => 'Peji Rekutanga',
+'tooltip-pt-logout' => 'Chibuda',
+'tooltip-ca-move' => 'Chichinura kupeji iri',
+'tooltip-p-logo' => 'Peji Rekutanga',
 
 # Table pager
 'table_pager_limit_submit' => 'Enda',
index e92fe25..b590c8e 100644 (file)
@@ -366,7 +366,7 @@ Sababta neh waxaa waaye "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Hada waad ka baxday.'''
 
-Waad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama [[Special:UserLogin|gudaha gal]] 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.",
+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]].",
@@ -737,8 +737,6 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'search-suggest' => 'Waxaa ka waday miyaa: $1',
 'search-interwiki-default' => '$1 natiijooyinka:',
 'search-interwiki-more' => '(wax kale)',
-'search-mwsuggest-enabled' => 'soojeedin',
-'search-mwsuggest-disabled' => 'soojeedin malahan',
 'search-relatedarticle' => 'La xiriiro',
 'searchrelated' => 'La xiriiro',
 'searchall' => 'Dhamaan',
@@ -1392,6 +1390,9 @@ 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',
 
+# Search suggestions
+'searchsuggest-search' => 'Raadi',
+
 # API errors
 'api-error-copyuploaddisabled' => 'Soo gelinta dhinaca URL-ka waa laga damiyay kombiyuutarkaan',
 'api-error-filename-tooshort' => 'Magaca faylka aad oo u gaabanyahay',
index 658b833..56d5b82 100644 (file)
@@ -128,77 +128,77 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#RIDREJTO', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__JOTP__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__JOGALERI__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__TP__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__JOREDAKTIMSEKSIONI__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
-       'currentday'              => array( '1', 'DITASOT', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DITASOT2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'EMRIIDITËSOT', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'SIVJET', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'KOHATANI', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ORATANI', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'EMRIIMUAJITLOKAL', 'LOCALMONTHNAME' ),
-       'localday'                => array( '1', 'DITALOKALE', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'DITALOKALE2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'EMRIIDITËSLOKALE', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'VITILOKAL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'KOHALOKALE', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ORALOKALE', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'NUMRIFAQEVE', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'NUMRIIARTIKUJVE', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'NUMRIISKEDAVE', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'NUMRIIPËRDORUESVE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'EMRIFAQES', 'PAGENAME' ),
-       'namespace'               => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'EMRIIPLOTËIFAQESE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'EMRIINËNFAQES', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'EMRIINËNFAQESE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'EMRIIFAQESBAZË', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'EMRIIFAQESBAZËE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'EMRIIFAQESSËDISKUTIMIT', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'EMRIIFAQESSËDISKUTIMITE', 'TALKPAGENAMEE' ),
-       'subst'                   => array( '0', 'ZËVN', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'parapamje', 'pamje', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'parapamje=$1', 'pamje=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'djathtas', 'right' ),
-       'img_left'                => array( '1', 'majtas', 'left' ),
-       'img_none'                => array( '1', 's\'ka', 'none' ),
-       'img_center'              => array( '1', 'qendër', 'qendrore', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ),
-       'img_page'                => array( '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kufi', 'border' ),
-       'img_baseline'            => array( '1', 'linjabazë', 'baseline' ),
-       'img_sub'                 => array( '1', 'nën', 'sub' ),
-       'img_text_top'            => array( '1', 'tekst-top', 'text-top' ),
-       'img_middle'              => array( '1', 'mes', 'middle' ),
-       'img_bottom'              => array( '1', 'fund', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'tekst-fund', 'text-bottom' ),
-       'img_link'                => array( '1', 'lidhje=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'EMRIISAJTIT', 'SITENAME' ),
-       'localurl'                => array( '0', 'URLLOKALE', 'LOCALURL:' ),
-       'server'                  => array( '0', 'SERVERI', 'SERVER' ),
-       'servername'              => array( '0', 'EMRIISERVERIT', 'SERVERNAME' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GJINIA:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
-       'plural'                  => array( '0', 'SHUMËS:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLEPLOTË', 'FULLURL:' ),
-       'language'                => array( '0', '#GJUHA:', '#LANGUAGE:' ),
-       'numberofadmins'          => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'speciale', 'special' ),
-       'hiddencat'               => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#RIDREJTO', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__JOTP__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__JOGALERI__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__TP__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__JOREDAKTIMSEKSIONI__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
+       'currentday'                => array( '1', 'DITASOT', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DITASOT2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'EMRIIDITËSOT', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'SIVJET', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'KOHATANI', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ORATANI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'MUAJILOKAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'EMRIIMUAJITLOKAL', 'LOCALMONTHNAME' ),
+       'localday'                  => array( '1', 'DITALOKALE', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'DITALOKALE2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'EMRIIDITËSLOKALE', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'VITILOKAL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'KOHALOKALE', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ORALOKALE', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'NUMRIFAQEVE', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'NUMRIIARTIKUJVE', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NUMRIISKEDAVE', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NUMRIIPËRDORUESVE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'EMRIFAQES', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'EMRIIPLOTËIFAQESE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'EMRIINËNFAQES', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'EMRIINËNFAQESE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'EMRIIFAQESBAZË', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'EMRIIFAQESBAZËE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'EMRIIFAQESSËDISKUTIMIT', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'EMRIIFAQESSËDISKUTIMITE', 'TALKPAGENAMEE' ),
+       'subst'                     => array( '0', 'ZËVN', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'parapamje', 'pamje', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'parapamje=$1', 'pamje=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'djathtas', 'right' ),
+       'img_left'                  => array( '1', 'majtas', 'left' ),
+       'img_none'                  => array( '1', 's\'ka', 'none' ),
+       'img_center'                => array( '1', 'qendër', 'qendrore', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ),
+       'img_page'                  => array( '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kufi', 'border' ),
+       'img_baseline'              => array( '1', 'linjabazë', 'baseline' ),
+       'img_sub'                   => array( '1', 'nën', 'sub' ),
+       'img_text_top'              => array( '1', 'tekst-top', 'text-top' ),
+       'img_middle'                => array( '1', 'mes', 'middle' ),
+       'img_bottom'                => array( '1', 'fund', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-fund', 'text-bottom' ),
+       'img_link'                  => array( '1', 'lidhje=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'EMRIISAJTIT', 'SITENAME' ),
+       'localurl'                  => array( '0', 'URLLOKALE', 'LOCALURL:' ),
+       'server'                    => array( '0', 'SERVERI', 'SERVER' ),
+       'servername'                => array( '0', 'EMRIISERVERIT', 'SERVERNAME' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GJINIA:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
+       'plural'                    => array( '0', 'SHUMËS:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLEPLOTË', 'FULLURL:' ),
+       'language'                  => array( '0', '#GJUHA:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'speciale', 'special' ),
+       'hiddencat'                 => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
 );
 
 $datePreferences = array(
@@ -626,7 +626,7 @@ Administratori i cili e mbylli atë e dha këtë shpjegim: "$3".',
 # Login and logout pages
 'logouttext' => "'''Ju keni dalë jashtë.''' 
 
- Ju mund të vazhdoni të përdorni {{SITENAME}} në mënyrë anonime, ose mund të [[Special:UserLogin|identifikoheni përsëri]] si përdoruesi i mëparshëm ose si një përdorues tjetër. 
+ 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. 
@@ -1229,8 +1229,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'search-interwiki-caption' => 'Projekte simotra',
 'search-interwiki-default' => '$1 përfundime:',
 'search-interwiki-more' => '(më shumë)',
-'search-mwsuggest-enabled' => 'me këshilla',
-'search-mwsuggest-disabled' => 'pa këshilla',
 'search-relatedarticle' => 'Të ngjashme',
 'mwsuggest-disable' => 'Çmundësoi sugjerimet AJAX',
 'searcheverything-enable' => 'Kërko në të gjitha hapësirat',
@@ -2853,7 +2851,6 @@ Ju lutemi provoni përsëri.',
 
 # JavaScriptTest
 'javascripttest' => 'Duke testuar JavaScript',
-'javascripttest-disabled' => 'Ky funksion nuk është mundësuar në këtë wiki.',
 'javascripttest-title' => 'Duke kryer testet $1',
 'javascripttest-pagetext-noframework' => 'Kjo faqe është rezervuar për kryerjen e testimeve JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Kornizë pune e panjohur testuese "$1".',
@@ -3803,6 +3800,10 @@ Përndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të
 'feedback-bugcheck' => 'Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].',
 'feedback-bugnew' => 'E kontrollova. Raporto një problem të ri',
 
+# Search suggestions
+'searchsuggest-search' => 'Kërko',
+'searchsuggest-containing' => 'përmban ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Ju nuk lejoheni të ngarkoni skeda në këtë wiki.',
 'api-error-badtoken' => 'Gabim i brendshëm: Shenjë e keqe.',
index f5425ed..873c7dd 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Serbian (Cyrillic script) (‪српски (ћирилица)‬)
+/** Serbian (Cyrillic script) (српски (ћирилица)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -246,150 +246,150 @@ $dateFormats = array(
 
 /* NOT USED IN STABLE VERSION */
 $magicWords = array(
-       'redirect'                => array( '0', '#Преусмери', '#преусмери', '#ПРЕУСМЕРИ', '#Преусмјери', '#преусмјери', '#ПРЕУСМЈЕРИ', '#redirect', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗСАДРЖАЈА__', '__БЕЗ_САДРЖАЈА__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗГАЛЕРИЈЕ__', '__БЕЗ_ГАЛЕРИЈЕ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ФОРСИРАНИСАДРЖАЈ__', '__ФОРСИРАНИ_САДРЖАЈ__', '__ПРИМОРАНИСАДРЖАЈ__', '__ПРИМОРАНИ_САДРЖАЈ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__САДРЖАЈ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗИЗМЕНА__', '__БЕЗ_ИЗМЕНА__', '__БЕЗИЗМЈЕНА__', '__БЕЗ_ИЗМЈЕНА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗЗАГЛАВЉА__', '__БЕЗ_ЗАГЛАВЉА__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ТРЕНУТНИМЕСЕЦ', 'ТРЕНУТНИ_МЕСЕЦ', 'ТЕКУЋИМЕСЕЦ', 'ТЕКУЋИ_МЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ТРЕНУТНИМЕСЕЦ1', 'ТРЕНУТНИ_МЕСЕЦ1', 'ТЕКУЋИМЕСЕЦ1', 'ТЕКУЋИ_МЕСЕЦ1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'ТРЕНУТНИМЕСЕЦИМЕ', 'ИМЕТЕКУЋЕГМЕСЕЦА', 'ИМЕ_ТЕКУЋЕГ_МЕСЕЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'ТРЕНУТНИМЕСЕЦГЕН', 'ТЕКУЋИМЕСЕЦГЕН', 'ТЕКУЋИ_МЕСЕЦ_ГЕН', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'ТРЕНУТНИМЕСЕЦСКР', 'ТЕКУЋИМЕСЕЦСКР', 'ТЕКУЋИ_МЕСЕЦ_СКР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ТРЕНУТНИДАН', 'ТЕКУЋИДАН', 'ТЕКУЋИ_ДАН', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ТЕКУЋИДАН2', 'ТЕКУЋИ_ДАН_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'ТРЕНУТНИДАНИМЕ', 'ИМЕТЕКУЋЕГДАНА', 'ИМЕ_ТЕКУЋЕГ_ДАНА', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ТРЕНУТНАГОДИНА', 'ТЕКУЋАГОДИНА', 'ТЕКУЋА_ГОДИНА', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ТРЕНУТНОВРЕМЕ', 'ТЕКУЋЕВРЕМЕ', 'ТЕКУЋЕ_ВРЕМЕ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ТЕКУЋИСАТ', 'ТЕКУЋИ_САТ', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ЛОКАЛНИМЕСЕЦ', 'ЛОКАЛНИ_МЕСЕЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ЛОКАЛНИМЕСЕЦ2', 'ЛОКАЛНИ_МЕСЕЦ2', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'ИМЕЛОКАЛНОГМЕСЕЦА', 'ИМЕ_ЛОКАЛНОГ_МЕСЕЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'ЛОКАЛНИМЕСЕЦГЕН', 'ЛОКАЛНИ_МЕСЕЦ_ГЕН', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'ЛОКАЛНИМЕСЕЦСКР', 'ЛОКАЛНИ_МЕСЕЦ_СКР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ЛОКАЛНИДАН', 'ЛОКАЛНИ_ДАН', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ЛОКАЛНИДАН2', 'ЛОКАЛНИ_ДАН2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'ИМЕЛОКАЛНОГДАНА', 'ИМЕ_ЛОКАЛНОГ_ДАНА', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ЛОКАЛНАГОДИНА', 'ЛОКАЛНА_ГОДИНА', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ЛОКАЛНОВРЕМЕ', 'ЛОКАЛНО_ВРЕМЕ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ЛОКАЛНИСАТ', 'ЛОКАЛНИ_САТ', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'БРОЈСТРАНИЦА', 'БРОЈ_СТРАНИЦА', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'БРОЈЧЛАНАКА', 'БРОЈ_ЧЛАНАКА', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'БРОЈДАТОТЕКА', 'БРОЈ_ДАТОТЕКА', 'БРОЈФАЈЛОВА', 'БРОЈ_ФАЈЛОВА', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'БРОЈКОРИСНИКА', 'БРОЈ_КОРИСНИКА', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'БРОЈАКТИВНИХКОРИСНИКА', 'БРОЈ_АКТИВНИХ_КОРИСНИКА', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'БРОЈИЗМЕНА', 'БРОЈ_ИЗМЕНА', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'БРОЈПРЕГЛЕДА', 'БРОЈ_ПРЕГЛЕДА', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'ИМЕСТРАНИЦЕ', 'ИМЕ_СТРАНИЦЕ', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'ИМЕНАСТРАНИЦА', 'ИМЕНА_СТРАНИЦА', 'СТРАНИЦЕ', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ИМЕНСКИПРОСТОР', 'ИМЕНСКИ_ПРОСТОР', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ИМЕНСКИПРОСТОРИ', 'ИМЕНСКИ_ПРОСТОРИ', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'РАЗГОВОР', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'РАЗГОВОРИ', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНКА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНАКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНАКА', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПУНОИМЕСТРАНИЦЕ', 'ПУНОИМЕСТРАНЕ', 'ПУНО_ИМЕ_СТРАНИЦЕ', 'ПУНО_ИМЕ_СТРАНЕ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПУНАИМЕНАСТРАНИЦА', 'ПУНАИМЕНАСТРАНА', 'ПУНА_ИМЕНА_СТРАНИЦА', 'ПУНА_ИМЕНА_СТРАНА', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ИМЕПОДСТРАНИЦЕ', 'ИМЕПОДСТРАНЕ', 'ИМЕ_ПОДСТРАНИЦЕ', 'ИМЕ_ПОДСТРАНЕ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ИМЕНАПОДСТРАНИЦА', 'ИМЕНАПОДСТРАНА', 'ИМЕНА_ПОДСТРАНИЦА', 'ИМЕНА_ПОДСТРАНА', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ИМЕОСНОВЕ', 'ИМЕ_ОСНОВЕ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ИМЕНАОСНОВА', 'ИМЕНА_ОСНОВА', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'ИМЕРАЗГОВОРА', 'ИМЕ_РАЗГОВОРА', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'ИМЕНАРАЗГОВОРА', 'ИМЕНА_РАЗГОВОРА', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'ИМЕЧЛАНКА', 'ИМЕ_ЧЛАНКА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'ИМЕНАЧЛАНАКА', 'ИМЕНА_ЧЛАНАКА', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ПОР:', 'MSG:' ),
-       'subst'                   => array( '0', 'ЗАМЕНИ:', 'ЗАМЕНА:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'БЕЗБЕДНАЗАМЕНА', 'БЕЗБЕДНА_ЗАМЕНА', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'НВПОР:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'мини', 'умањено', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'мини=$1', 'умањено=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'десно', 'д', 'right' ),
-       'img_left'                => array( '1', 'лево', 'л', 'left' ),
-       'img_none'                => array( '1', 'без', 'н', 'none' ),
-       'img_width'               => array( '1', '$1пискел', '$1п', '$1px' ),
-       'img_center'              => array( '1', 'центар', 'ц', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'оквир', 'рам', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'безоквира', 'без_оквира', 'безрама', 'без_рама', 'frameless' ),
-       'img_page'                => array( '1', 'страница=$1', 'страна=$1', 'страница_$1', 'страна_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'усправно', 'усправно=$1', 'усправно_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'ивица', 'border' ),
-       'img_baseline'            => array( '1', 'основа', 'baseline' ),
-       'img_sub'                 => array( '1', 'под', 'sub' ),
-       'img_super'               => array( '1', 'супер', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'врх', 'top' ),
-       'img_text_top'            => array( '1', 'врхтекста', 'врх_текста', 'text-top' ),
-       'img_middle'              => array( '1', 'средина', 'middle' ),
-       'img_bottom'              => array( '1', 'дно', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'срединатекста', 'средина_текста', 'text-bottom' ),
-       'img_link'                => array( '1', 'веза=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'алт=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ИНТ:', 'INT:' ),
-       'sitename'                => array( '1', 'ИМЕСАЈТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ИП:', 'NS:' ),
-       'localurl'                => array( '0', 'ЛОКАЛНААДРЕСА:', 'ЛОКАЛНА_АДРЕСА:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛНЕАДРЕСЕ:', 'ЛОКАЛНЕ_АДРЕСЕ:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'ПУТАЊАЧЛАНКА', 'ПУТАЊА_ЧЛАНКА', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'ИМЕСЕРВЕРА', 'ИМЕ_СЕРВЕРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'СКРИПТА', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'ПУТАЊАСТИЛА', 'ПУТАЊА_СТИЛА', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'РОД:', 'ЛИЦЕ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__БЕЗКН__', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__БЕЗЦЦ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ТРЕНУТНАНЕДЕЉА', 'ТРЕНУТНА_НЕДЕЉА', 'ТЕКУЋАНЕДЕЉА', 'ТЕКУЋА_НЕДЕЉА', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ТРЕНУТНИДОВ', 'ТЕКУЋИДУН', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ЛОКАЛНАНЕДЕЉА', 'ЛОКАЛНА_НЕДЕЉА', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ЛОКАЛНИДУН', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ИДРЕВИЗИЈЕ', 'ИД_РЕВИЗИЈЕ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДАНИЗМЕНЕ', 'ДАН_ИЗМЕНЕ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДАНИЗМЕНЕ2', 'ДАН_ИЗМЕНЕ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МЕСЕЦИЗМЕНЕ', 'МЕСЕЦ_ИЗМЕНЕ', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'МЕСЕЦИЗМЕНЕ1', 'МЕСЕЦ_ИЗМЕНЕ1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'ГОДИНАИЗМЕНЕ', 'ГОДИНА_ИЗМЕНЕ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'ВРЕМЕИЗМЕНЕ', 'ВРЕМЕ_ИЗМЕНЕ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'КОРИСНИКИЗМЕНЕ', 'КОРИСНИК_ИЗМЕНЕ', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПУНУРЛ:', 'ЦЕЛААДРЕСА', 'ЦЕЛА_АДРЕСА', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПУНУРЛЕ:', 'ЦЕЛЕАДРЕСЕ', 'ЦЕЛЕ_АДРЕСЕ', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'ЛЦПРВИ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'УЦПРВИ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'ЛЦ:', 'LC:' ),
-       'uc'                      => array( '0', 'УЦ:', 'UC:' ),
-       'raw'                     => array( '0', 'ЧИСТ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'НАЗИВПРИКАЗА', 'НАЗИВ_ПРИКАЗА', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Р', 'R' ),
-       'newsectionlink'          => array( '1', '__НОВАВЕЗАОДЕЉКА__', '__НОВА_ВЕЗА_ОДЕЉКА__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__БЕЗНОВЕВЕЗЕОДЕЉКА__', '__БЕЗ_НОВЕ_ВЕЗЕ_ОДЕЉКА__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ТЕКУЋЕИЗДАЊЕ', 'ТЕКУЋЕ_ИЗДАЊЕ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'КОДИРАЊЕАДРЕСЕ', 'КОДИРАЊЕ_АДРЕСЕ', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'КОДИРАЊЕВЕЗЕ', 'КОДИРАЊЕ_ВЕЗЕ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'ТЕКУЋИОТИСАКВРЕМЕНА', 'ТЕКУЋИ_ОТИСАК_ВРЕМЕНА', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'ОТИСАКВРЕМЕНА', 'ОТИСАК_ВРЕМЕНА', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'СМЕРОЗНАКЕ', 'СМЕР      _ОЗНАКЕ', 'DIRECTIONMARK', 'DIRMARK' ),
-       'contentlanguage'         => array( '1', 'ЈЕЗИКСАДРЖАЈА', 'ЈЕЗИК_САДРЖАЈА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'СТРАНИЦАУИМЕНСКОМПРОСТОРУ', 'СТРАНАУИМЕНСКОМПРОСТОРУ', 'СТРАНИЦА_У_ИМЕНСКОМ_ПРОСТОРУ', 'СТРАНА_У_ИМЕНСКОМ_ПРОСТОРУ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'БРОЈАДМИНА', 'БРОЈ_АДМИНА', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'ПОРАВНАЈЛЕВО', 'ПОРАВНАЈ_ЛЕВО', 'PADLEFT' ),
-       'padright'                => array( '0', 'ПОРАВНАЈДЕСНО', 'ПОРАВНАЈ_ДЕСНО', 'PADRIGHT' ),
-       'special'                 => array( '0', 'посебно', 'special' ),
-       'filepath'                => array( '0', 'ПУТАЊАДАТОТЕКЕ', 'ПУТАЊА_ДАТОТЕКЕ', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'ознака', 'tag' ),
-       'hiddencat'               => array( '1', '__САКРИВЕНАКАТ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'СТРАНИЦАУКАТЕГОРИЈИ', 'СТРАНАУКАТЕГОРИЈИ', 'СТРАНИЦА_У_КАТЕГОРИЈИ', 'СТРАНА_У_КАТЕГОРИЈИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'ВЕЛИЧИНАСТРАНИЦЕ', 'ВЕЛИЧИНАСТРАНЕ', 'ВЕЛИЧИНА_СТРАНИЦЕ', 'ВЕЛИЧИНА_СТРАНЕ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ИНДЕКС__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗИНДЕКСА__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'БРОЈУГРУПИ', 'БРОЈ_У_ГРУПИ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__СТАТИЧКОПРЕУСМЕРЕЊЕ__', 'СТАТИЧКО_ПРЕУСМЕРЕЊЕ', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'НИВОЗАШТИТЕ', 'НИВО_ЗАШТИТЕ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'форматдатума', 'формат_датума', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'ПУТАЊА', 'PATH' ),
-       'url_wiki'                => array( '0', 'ВИКИ', 'WIKI' ),
-       'url_query'               => array( '0', 'РЕДОСЛЕД', 'QUERY' ),
+       'redirect'                  => array( '0', '#Преусмери', '#преусмери', '#ПРЕУСМЕРИ', '#Преусмјери', '#преусмјери', '#ПРЕУСМЈЕРИ', '#redirect', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСАДРЖАЈА__', '__БЕЗ_САДРЖАЈА__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЈЕ__', '__БЕЗ_ГАЛЕРИЈЕ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ФОРСИРАНИСАДРЖАЈ__', '__ФОРСИРАНИ_САДРЖАЈ__', '__ПРИМОРАНИСАДРЖАЈ__', '__ПРИМОРАНИ_САДРЖАЈ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__САДРЖАЈ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗИЗМЕНА__', '__БЕЗ_ИЗМЕНА__', '__БЕЗИЗМЈЕНА__', '__БЕЗ_ИЗМЈЕНА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗЗАГЛАВЉА__', '__БЕЗ_ЗАГЛАВЉА__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ТРЕНУТНИМЕСЕЦ', 'ТРЕНУТНИ_МЕСЕЦ', 'ТЕКУЋИМЕСЕЦ', 'ТЕКУЋИ_МЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ТРЕНУТНИМЕСЕЦ1', 'ТРЕНУТНИ_МЕСЕЦ1', 'ТЕКУЋИМЕСЕЦ1', 'ТЕКУЋИ_МЕСЕЦ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ТРЕНУТНИМЕСЕЦИМЕ', 'ИМЕТЕКУЋЕГМЕСЕЦА', 'ИМЕ_ТЕКУЋЕГ_МЕСЕЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ТРЕНУТНИМЕСЕЦГЕН', 'ТЕКУЋИМЕСЕЦГЕН', 'ТЕКУЋИ_МЕСЕЦ_ГЕН', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ТРЕНУТНИМЕСЕЦСКР', 'ТЕКУЋИМЕСЕЦСКР', 'ТЕКУЋИ_МЕСЕЦ_СКР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ТРЕНУТНИДАН', 'ТЕКУЋИДАН', 'ТЕКУЋИ_ДАН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ТЕКУЋИДАН2', 'ТЕКУЋИ_ДАН_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ТРЕНУТНИДАНИМЕ', 'ИМЕТЕКУЋЕГДАНА', 'ИМЕ_ТЕКУЋЕГ_ДАНА', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТРЕНУТНАГОДИНА', 'ТЕКУЋАГОДИНА', 'ТЕКУЋА_ГОДИНА', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТРЕНУТНОВРЕМЕ', 'ТЕКУЋЕВРЕМЕ', 'ТЕКУЋЕ_ВРЕМЕ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКУЋИСАТ', 'ТЕКУЋИ_САТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ЛОКАЛНИМЕСЕЦ', 'ЛОКАЛНИ_МЕСЕЦ', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ЛОКАЛНИМЕСЕЦ2', 'ЛОКАЛНИ_МЕСЕЦ2', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'ИМЕЛОКАЛНОГМЕСЕЦА', 'ИМЕ_ЛОКАЛНОГ_МЕСЕЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'ЛОКАЛНИМЕСЕЦГЕН', 'ЛОКАЛНИ_МЕСЕЦ_ГЕН', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'ЛОКАЛНИМЕСЕЦСКР', 'ЛОКАЛНИ_МЕСЕЦ_СКР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ЛОКАЛНИДАН', 'ЛОКАЛНИ_ДАН', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ЛОКАЛНИДАН2', 'ЛОКАЛНИ_ДАН2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'ИМЕЛОКАЛНОГДАНА', 'ИМЕ_ЛОКАЛНОГ_ДАНА', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ЛОКАЛНАГОДИНА', 'ЛОКАЛНА_ГОДИНА', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ЛОКАЛНОВРЕМЕ', 'ЛОКАЛНО_ВРЕМЕ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ЛОКАЛНИСАТ', 'ЛОКАЛНИ_САТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'БРОЈСТРАНИЦА', 'БРОЈ_СТРАНИЦА', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'БРОЈЧЛАНАКА', 'БРОЈ_ЧЛАНАКА', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'БРОЈДАТОТЕКА', 'БРОЈ_ДАТОТЕКА', 'БРОЈФАЈЛОВА', 'БРОЈ_ФАЈЛОВА', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'БРОЈКОРИСНИКА', 'БРОЈ_КОРИСНИКА', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'БРОЈАКТИВНИХКОРИСНИКА', 'БРОЈ_АКТИВНИХ_КОРИСНИКА', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'БРОЈИЗМЕНА', 'БРОЈ_ИЗМЕНА', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'БРОЈПРЕГЛЕДА', 'БРОЈ_ПРЕГЛЕДА', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'ИМЕСТРАНИЦЕ', 'ИМЕ_СТРАНИЦЕ', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ИМЕНАСТРАНИЦА', 'ИМЕНА_СТРАНИЦА', 'СТРАНИЦЕ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕНСКИПРОСТОР', 'ИМЕНСКИ_ПРОСТОР', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ИМЕНСКИПРОСТОРИ', 'ИМЕНСКИ_ПРОСТОРИ', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'РАЗГОВОР', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'РАЗГОВОРИ', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНКА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНАКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНАКА', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПУНОИМЕСТРАНИЦЕ', 'ПУНОИМЕСТРАНЕ', 'ПУНО_ИМЕ_СТРАНИЦЕ', 'ПУНО_ИМЕ_СТРАНЕ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПУНАИМЕНАСТРАНИЦА', 'ПУНАИМЕНАСТРАНА', 'ПУНА_ИМЕНА_СТРАНИЦА', 'ПУНА_ИМЕНА_СТРАНА', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ИМЕПОДСТРАНИЦЕ', 'ИМЕПОДСТРАНЕ', 'ИМЕ_ПОДСТРАНИЦЕ', 'ИМЕ_ПОДСТРАНЕ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ИМЕНАПОДСТРАНИЦА', 'ИМЕНАПОДСТРАНА', 'ИМЕНА_ПОДСТРАНИЦА', 'ИМЕНА_ПОДСТРАНА', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ИМЕОСНОВЕ', 'ИМЕ_ОСНОВЕ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ИМЕНАОСНОВА', 'ИМЕНА_ОСНОВА', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ИМЕРАЗГОВОРА', 'ИМЕ_РАЗГОВОРА', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ИМЕНАРАЗГОВОРА', 'ИМЕНА_РАЗГОВОРА', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ИМЕЧЛАНКА', 'ИМЕ_ЧЛАНКА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ИМЕНАЧЛАНАКА', 'ИМЕНА_ЧЛАНАКА', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ПОР:', 'MSG:' ),
+       'subst'                     => array( '0', 'ЗАМЕНИ:', 'ЗАМЕНА:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'БЕЗБЕДНАЗАМЕНА', 'БЕЗБЕДНА_ЗАМЕНА', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'НВПОР:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'мини', 'умањено', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'мини=$1', 'умањено=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'десно', 'д', 'right' ),
+       'img_left'                  => array( '1', 'лево', 'л', 'left' ),
+       'img_none'                  => array( '1', 'без', 'н', 'none' ),
+       'img_width'                 => array( '1', '$1пискел', '$1п', '$1px' ),
+       'img_center'                => array( '1', 'центар', 'ц', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'оквир', 'рам', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безоквира', 'без_оквира', 'безрама', 'без_рама', 'frameless' ),
+       'img_page'                  => array( '1', 'страница=$1', 'страна=$1', 'страница_$1', 'страна_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'усправно', 'усправно=$1', 'усправно_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'ивица', 'border' ),
+       'img_baseline'              => array( '1', 'основа', 'baseline' ),
+       'img_sub'                   => array( '1', 'под', 'sub' ),
+       'img_super'                 => array( '1', 'супер', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'врх', 'top' ),
+       'img_text_top'              => array( '1', 'врхтекста', 'врх_текста', 'text-top' ),
+       'img_middle'                => array( '1', 'средина', 'middle' ),
+       'img_bottom'                => array( '1', 'дно', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'срединатекста', 'средина_текста', 'text-bottom' ),
+       'img_link'                  => array( '1', 'веза=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'алт=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ИНТ:', 'INT:' ),
+       'sitename'                  => array( '1', 'ИМЕСАЈТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ИП:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛНААДРЕСА:', 'ЛОКАЛНА_АДРЕСА:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛНЕАДРЕСЕ:', 'ЛОКАЛНЕ_АДРЕСЕ:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'ПУТАЊАЧЛАНКА', 'ПУТАЊА_ЧЛАНКА', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'ИМЕСЕРВЕРА', 'ИМЕ_СЕРВЕРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'СКРИПТА', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ПУТАЊАСТИЛА', 'ПУТАЊА_СТИЛА', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'РОД:', 'ЛИЦЕ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__БЕЗКН__', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__БЕЗЦЦ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ТРЕНУТНАНЕДЕЉА', 'ТРЕНУТНА_НЕДЕЉА', 'ТЕКУЋАНЕДЕЉА', 'ТЕКУЋА_НЕДЕЉА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТРЕНУТНИДОВ', 'ТЕКУЋИДУН', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ЛОКАЛНАНЕДЕЉА', 'ЛОКАЛНА_НЕДЕЉА', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ЛОКАЛНИДУН', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ИДРЕВИЗИЈЕ', 'ИД_РЕВИЗИЈЕ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДАНИЗМЕНЕ', 'ДАН_ИЗМЕНЕ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДАНИЗМЕНЕ2', 'ДАН_ИЗМЕНЕ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦИЗМЕНЕ', 'МЕСЕЦ_ИЗМЕНЕ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МЕСЕЦИЗМЕНЕ1', 'МЕСЕЦ_ИЗМЕНЕ1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'ГОДИНАИЗМЕНЕ', 'ГОДИНА_ИЗМЕНЕ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'ВРЕМЕИЗМЕНЕ', 'ВРЕМЕ_ИЗМЕНЕ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'КОРИСНИКИЗМЕНЕ', 'КОРИСНИК_ИЗМЕНЕ', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПУНУРЛ:', 'ЦЕЛААДРЕСА', 'ЦЕЛА_АДРЕСА', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПУНУРЛЕ:', 'ЦЕЛЕАДРЕСЕ', 'ЦЕЛЕ_АДРЕСЕ', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'ЛЦПРВИ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'УЦПРВИ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'ЛЦ:', 'LC:' ),
+       'uc'                        => array( '0', 'УЦ:', 'UC:' ),
+       'raw'                       => array( '0', 'ЧИСТ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'НАЗИВПРИКАЗА', 'НАЗИВ_ПРИКАЗА', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Р', 'R' ),
+       'newsectionlink'            => array( '1', '__НОВАВЕЗАОДЕЉКА__', '__НОВА_ВЕЗА_ОДЕЉКА__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__БЕЗНОВЕВЕЗЕОДЕЉКА__', '__БЕЗ_НОВЕ_ВЕЗЕ_ОДЕЉКА__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ТЕКУЋЕИЗДАЊЕ', 'ТЕКУЋЕ_ИЗДАЊЕ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'КОДИРАЊЕАДРЕСЕ', 'КОДИРАЊЕ_АДРЕСЕ', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'КОДИРАЊЕВЕЗЕ', 'КОДИРАЊЕ_ВЕЗЕ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'ТЕКУЋИОТИСАКВРЕМЕНА', 'ТЕКУЋИ_ОТИСАК_ВРЕМЕНА', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'ОТИСАКВРЕМЕНА', 'ОТИСАК_ВРЕМЕНА', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'СМЕРОЗНАКЕ', 'СМЕР    _ОЗНАКЕ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'contentlanguage'           => array( '1', 'ЈЕЗИКСАДРЖАЈА', 'ЈЕЗИК_САДРЖАЈА', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СТРАНИЦАУИМЕНСКОМПРОСТОРУ', 'СТРАНАУИМЕНСКОМПРОСТОРУ', 'СТРАНИЦА_У_ИМЕНСКОМ_ПРОСТОРУ', 'СТРАНА_У_ИМЕНСКОМ_ПРОСТОРУ', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'БРОЈАДМИНА', 'БРОЈ_АДМИНА', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'ПОРАВНАЈЛЕВО', 'ПОРАВНАЈ_ЛЕВО', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ПОРАВНАЈДЕСНО', 'ПОРАВНАЈ_ДЕСНО', 'PADRIGHT' ),
+       'special'                   => array( '0', 'посебно', 'special' ),
+       'filepath'                  => array( '0', 'ПУТАЊАДАТОТЕКЕ', 'ПУТАЊА_ДАТОТЕКЕ', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'ознака', 'tag' ),
+       'hiddencat'                 => array( '1', '__САКРИВЕНАКАТ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'СТРАНИЦАУКАТЕГОРИЈИ', 'СТРАНАУКАТЕГОРИЈИ', 'СТРАНИЦА_У_КАТЕГОРИЈИ', 'СТРАНА_У_КАТЕГОРИЈИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ВЕЛИЧИНАСТРАНИЦЕ', 'ВЕЛИЧИНАСТРАНЕ', 'ВЕЛИЧИНА_СТРАНИЦЕ', 'ВЕЛИЧИНА_СТРАНЕ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ИНДЕКС__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗИНДЕКСА__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'БРОЈУГРУПИ', 'БРОЈ_У_ГРУПИ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__СТАТИЧКОПРЕУСМЕРЕЊЕ__', 'СТАТИЧКО_ПРЕУСМЕРЕЊЕ', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'НИВОЗАШТИТЕ', 'НИВО_ЗАШТИТЕ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'форматдатума', 'формат_датума', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ПУТАЊА', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
+       'url_query'                 => array( '0', 'РЕДОСЛЕД', 'QUERY' ),
 );
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
 
@@ -663,7 +663,7 @@ $1',
 'retrievedfrom' => 'Преузето из „$1“',
 'youhavenewmessages' => 'Имате $1 ($2).',
 'newmessageslink' => 'нових порука',
-'newmessagesdifflink' => 'последњу измену',
+'newmessagesdifflink' => 'последња измена',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|другог корисника|$3 корисника|$3 корисника}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од много корисника ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|нову поруку|нове поруке}}',
@@ -783,10 +783,11 @@ $1',
 'protectedpagetext' => 'Ова страница је закључана за уређивања.',
 'viewsourcetext' => 'Можете да погледате и умножите изворни текст ове странице:',
 'viewyourtext' => "Можете да погледате и умножите извор '''ваших измена''' на овој страници:",
-'protectedinterface' => 'Ова страница је заштићена јер садржи текст корисничког сучеља програма.',
+'protectedinterface' => 'Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.
+Да бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.',
 'editinginterface' => "'''Упозорење:''' уређујете страницу која се користи за приказивање текста корисничког окружења.
-Измене на овој страници ће утицати на све кориснике.
\9fоÑ\81еÑ\82иÑ\82е [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Ð¢Ñ\80анÑ\81леÑ\98Ñ\82вики], Ð¿Ñ\80оÑ\98екаÑ\82 Ð½Ð°Ð¼ÐµÑ\9aен Ð·Ð° Ð¿Ñ\80евоÑ\92еÑ\9aе Медијавикија.",
+Измене на овој страници ће утицати на све кориснике овог викија.
\94а Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð´Ð°Ð»Ð¸ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ Ð¿Ñ\80еводе Ñ\81виÑ\85 Ð²Ð¸ÐºÐ¸Ñ\98а, Ð¿Ð¾Ñ\81еÑ\82иÑ\82е [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Ð¢Ñ\80анÑ\81леÑ\98Ñ\82вики], Ð¿Ñ\80оÑ\98екаÑ\82 Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98Ñ\83 Медијавикија.",
 'sqlhidden' => '(SQL упит је сакривен)',
 'cascadeprotected' => 'Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:
 $2',
@@ -812,7 +813,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Одјављени сте.'''
 
-Можете да наставите с коришћењем овог викија као гост, или се [[Special:UserLogin|поново пријавите]] као други корисник.
+Можете да наставите с коришћењем овог викија као гост, или се <span class='plainlinks'>[$1 поново пријавите]</span> као други корисник.
 Имајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
 'welcomecreation' => '== Добро дошли, $1! ==
 
@@ -1074,7 +1075,7 @@ $2
 Можете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} уредити страницу]</span>.',
 'noarticletext-nopermission' => 'На овој страници тренутно нема садржаја.
\9cожеÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82и Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82и Ñ\81Ñ\80одне Ð¸Ð·Ð²ÐµÑ\88Ñ\82аÑ\98е]</span>.',
\9cожеÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82и Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82и Ñ\81Ñ\80одне Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐµ]</span>, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.',
 'missing-revision' => 'Не могу да пронађем измену бр. $1 на страници под називом „{{PAGENAME}}“.
 
 Ово се обично дешава када пратите застарелу везу до странице која је обрисана.
@@ -1347,7 +1348,8 @@ $1",
 'revdelete-only-restricted' => 'Грешка при сакривању ставке од $1, $2: не можете сакрити ставке од администратора без избора других могућности видљивости.',
 'revdelete-reason-dropdown' => '*Уобичајени разлози за брисање
 ** Кршење ауторског права
-** Неодговарајући лични подаци
+** Неприкладан коментар или лични подаци
+** Неприкладно корисничко име
 ** Увредљиви подаци',
 'revdelete-otherreason' => 'Други/додатни разлог:',
 'revdelete-reasonotherlist' => 'Други разлог',
@@ -1446,8 +1448,6 @@ $1",
 'search-interwiki-caption' => 'Братски пројекти',
 'search-interwiki-default' => '$1 резултати:',
 'search-interwiki-more' => '(више)',
-'search-mwsuggest-enabled' => 'са предлозима',
-'search-mwsuggest-disabled' => 'без предлога',
 'search-relatedarticle' => 'Повезано',
 'mwsuggest-disable' => 'Онемогући предлоге AJAX',
 'searcheverything-enable' => 'сви именски простори',
@@ -1989,7 +1989,7 @@ $1',
 'backend-fail-internal' => 'Дошло је до непознате грешке у складишној основи „$1“.',
 'backend-fail-contenttype' => 'Не могу да утврдим какав садржај има датотека коју треба да сместим у „$1“.',
 'backend-fail-batchsize' => 'Складишна основа је добила блокаду од $1 {{PLURAL:$1|операције|операције|операција}}; ограничење је $2 {{PLURAL:$2|операција|операције|операција}}.',
-'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð·Ð°Ð¿Ð¸Ñ\88ем Ð´Ð°Ñ\82оÑ\82екÑ\83 $1 јер немате довољно дозвола или вам недостају фасцикле/садржаоци.',
+'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¿Ñ\80оÑ\87иÑ\82ам Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\88ем Ð´Ð°Ñ\82оÑ\82екÑ\83 â\80\9e$1â\80\9c јер немате довољно дозвола или вам недостају фасцикле/садржаоци.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не могу да се повежем с новинарском базом за складишну основу „$1“.',
@@ -3124,7 +3124,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Јаваскрипт тест',
-'javascripttest-disabled' => 'Ова функција није омогућена на овом викију.',
 'javascripttest-title' => 'Извршавање тестова за $1',
 'javascripttest-pagetext-noframework' => 'Ова страница је резервисана за извршавање јаваскрипт тестова.',
 'javascripttest-pagetext-unknownframework' => 'Непознати радни оквир „$1“.',
@@ -3270,10 +3269,27 @@ $1',
 '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-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)',
 
 # Skin names
 'skinname-standard' => 'Класично',
@@ -3329,6 +3345,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-desc-animated' => 'Анимирана SVG датотека, номинално: $1 × $2 пиксела, величина: $3',
 'show-big-image' => 'Пуна величина',
 'show-big-image-preview' => 'Величина овог приказа: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Друге резолуције}}: $1.',
@@ -3338,6 +3355,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' => 'Галерија нових датотека',
@@ -4304,6 +4323,10 @@ $5
 'feedback-bugcheck' => 'Одлично! Проверите да ли је грешка [$1 позната од пре].',
 'feedback-bugnew' => 'Проверено. Пријави нову грешку',
 
+# Search suggestions
+'searchsuggest-search' => 'Претрага',
+'searchsuggest-containing' => 'садржи...',
+
 # API errors
 'api-error-badaccess-groups' => 'Није вам дозвољено да отпремате датотеке на овај вики.',
 'api-error-badtoken' => 'Унутрашња грешка: неисправан жетон.',
index a3f7ac1..d11560a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Serbian (Latin script) (‪srpski (latinica)‬)
+/** Serbian (Latin script) (srpski (latinica)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -158,146 +158,146 @@ $dateFormats = array(
 
 /* NOT USED IN STABLE VERSION */
 $magicWords = array(
-       'redirect'                => array( '0', '#Preusmeri', '#preusmeri', '#PREUSMERI', '#Preusmjeri', '#preusmjeri', '#PREUSMJERI', '#redirect', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__BEZSADRŽAJA__', '__BEZ_SADRŽAJA__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__BEZGALERIJE__', '__BEZ_GALERIJE__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__FORSIRANISADRŽAJ__', '__FORSIRANI_SADRŽAJ__', '__PRIMORANISADRŽAJ__', '__PRIMORANI_SADRŽAJ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__SADRŽAJ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BEZIZMENA__', '__BEZ_IZMENA__', '__BEZIZMJENA__', '__BEZ_IZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BEZZAGLAVLJA__', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'TRENUTNIMESEC', 'TRENUTNI_MESEC', 'TEKUĆIMESEC', 'TEKUĆI_MESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'TRENUTNIMESEC1', 'TRENUTNI_MESEC1', 'TEKUĆIMESEC1', 'TEKUĆI_MESEC1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TRENUTNIMESECIME', 'IMETEKUĆEGMESECA', 'IME_TEKUĆEG_MESECA', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TRENUTNIMESECGEN', 'TEKUĆIMESECGEN', 'TEKUĆI_MESEC_GEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TRENUTNIMESECSKR', 'TEKUĆIMESECSKR', 'TEKUĆI_MESEC_SKR', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'TRENUTNIDAN', 'TEKUĆIDAN', 'TEKUĆI_DAN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'TEKUĆIDAN2', 'TEKUĆI_DAN_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TRENUTNIDANIME', 'IMETEKUĆEGDANA', 'IME_TEKUĆEG_DANA', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'TRENUTNAGODINA', 'TEKUĆAGODINA', 'TEKUĆA_GODINA', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'TRENUTNOVREME', 'TEKUĆEVREME', 'TEKUĆE_VREME', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'TEKUĆISAT', 'TEKUĆI_SAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALNIMESEC', 'LOKALNI_MESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALNIMESEC2', 'LOKALNI_MESEC2', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'IMELOKALNOGMESECA', 'IME_LOKALNOG_MESECA', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'LOKALNIMESECGEN', 'LOKALNI_MESEC_GEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'LOKALNIMESECSKR', 'LOKALNI_MESEC_SKR', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALNIDAN', 'LOKALNI_DAN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALNIDAN2', 'LOKALNI_DAN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'IMELOKALNOGDANA', 'IME_LOKALNOG_DANA', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALNAGODINA', 'LOKALNA_GODINA', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALNOVREME', 'LOKALNO_VREME', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALNISAT', 'LOKALNI_SAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'BROJSTRANICA', 'BROJ_STRANICA', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'BROJČLANAKA', 'BROJ_ČLANAKA', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'BROJDATOTEKA', 'BROJ_DATOTEKA', 'BROJFAJLOVA', 'BROJ_FAJLOVA', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'BROJKORISNIKA', 'BROJ_KORISNIKA', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'BROJAKTIVNIHKORISNIKA', 'BROJ_AKTIVNIH_KORISNIKA', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'BROJIZMENA', 'BROJ_IZMENA', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'BROJPREGLEDA', 'BROJ_PREGLEDA', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'IMESTRANICE', 'IME_STRANICE', 'STRANICA', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'IMENASTRANICA', 'IMENA_STRANICA', 'STRANICE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'IMENSKIPROSTOR', 'IMENSKI_PROSTOR', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'IMENSKIPROSTORI', 'IMENSKI_PROSTORI', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'RAZGOVORI', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'IMENSKIPROSTORČLANKA', 'IMENSKI_PROSTOR_ČLANKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'IMENSKIPROSTORČLANAKA', 'IMENSKI_PROSTOR_ČLANAKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'PUNOIMESTRANICE', 'PUNOIMESTRANE', 'PUNO_IME_STRANICE', 'PUNO_IME_STRANE', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'PUNAIMENASTRANICA', 'PUNAIMENASTRANA', 'PUNA_IMENA_STRANICA', 'PUNA_IMENA_STRANA', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'IMEPODSTRANICE', 'IMEPODSTRANE', 'IME_PODSTRANICE', 'IME_PODSTRANE', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'IMENAPODSTRANICA', 'IMENAPODSTRANA', 'IMENA_PODSTRANICA', 'IMENA_PODSTRANA', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'IMEOSNOVE', 'IME_OSNOVE', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'IMENAOSNOVA', 'IMENA_OSNOVA', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'IMERAZGOVORA', 'IME_RAZGOVORA', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'IMENARAZGOVORA', 'IMENA_RAZGOVORA', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'IMEČLANKA', 'IME_ČLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'IMENAČLANAKA', 'IMENA_ČLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'POR:', 'MSG:' ),
-       'subst'                   => array( '0', 'ZAMENI:', 'ZAMENA:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'BEZBEDNAZAMENA', 'BEZBEDNA_ZAMENA', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'NVPOR:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'mini', 'umanjeno', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'mini=$1', 'umanjeno=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'desno', 'd', 'right' ),
-       'img_left'                => array( '1', 'levo', 'l', 'left' ),
-       'img_none'                => array( '1', 'bez', 'n', 'none' ),
-       'img_width'               => array( '1', '$1piskel', '$1p', '$1px' ),
-       'img_center'              => array( '1', 'centar', 'c', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'bezokvira', 'bez_okvira', 'bezrama', 'bez_rama', 'frameless' ),
-       'img_page'                => array( '1', 'stranica=$1', 'strana=$1', 'stranica_$1', 'strana_$1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'ivica', 'border' ),
-       'img_baseline'            => array( '1', 'osnova', 'baseline' ),
-       'img_sub'                 => array( '1', 'pod', 'sub' ),
-       'img_top'                 => array( '1', 'vrh', 'top' ),
-       'img_text_top'            => array( '1', 'vrhteksta', 'vrh_teksta', 'text-top' ),
-       'img_middle'              => array( '1', 'sredina', 'middle' ),
-       'img_bottom'              => array( '1', 'dno', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'sredinateksta', 'sredina_teksta', 'text-bottom' ),
-       'img_link'                => array( '1', 'veza=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'IMESAJTA', 'SITENAME' ),
-       'ns'                      => array( '0', 'IP:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALNAADRESA:', 'LOKALNA_ADRESA:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALNEADRESE:', 'LOKALNE_ADRESE:', 'LOCALURLE:' ),
-       'articlepath'             => array( '0', 'PUTANJAČLANKA', 'PUTANJA_ČLANKA', 'ARTICLEPATH' ),
-       'servername'              => array( '0', 'IMESERVERA', 'IME_SERVERA', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTA', 'SKRIPT', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'PUTANJASTILA', 'PUTANJA_STILA', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'ROD:', 'LICE:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TRENUTNANEDELJA', 'TRENUTNA_NEDELJA', 'TEKUĆANEDELJA', 'TEKUĆA_NEDELJA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'TRENUTNIDOV', 'TEKUĆIDUN', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALNANEDELJA', 'LOKALNA_NEDELJA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALNIDUN', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'IDREVIZIJE', 'ID_REVIZIJE', 'IB_IZMENE', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'DANIZMENE', 'DAN_IZMENE', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'DANIZMENE2', 'DAN_IZMENE2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'MESECIZMENE', 'MESEC_IZMENE', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'MESECIZMENE1', 'MESEC_IZMENE1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'GODINAIZMENE', 'GODINA_IZMENE', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'VREMEIZMENE', 'VREME_IZMENE', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'KORISNIKIZMENE', 'KORISNIK_IZMENE', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'MNOŽINA:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'PUNURL:', 'CELAADRESA', 'CELA_ADRESA', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'PUNURLE:', 'CELEADRESE', 'CELE_ADRESE', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LCPRVI:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCPRVI:', 'UCFIRST:' ),
-       'raw'                     => array( '0', 'ČIST:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'NAZIVPRIKAZA', 'NAZIV_PRIKAZA', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NOVAVEZAODELJKA__', '__NOVA_VEZA_ODELJKA__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__BEZNOVEVEZEODELJKA__', '__BEZ_NOVE_VEZE_ODELJKA__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'TEKUĆEIZDANJE', 'TEKUĆE_IZDANJE', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'KODIRANJEADRESE', 'KODIRANJE_ADRESE', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'KODIRANJEVEZE', 'KODIRANJE_VEZE', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'TEKUĆIOTISAKVREMENA', 'TEKUĆI_OTISAK_VREMENA', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'OTISAKVREMENA', 'OTISAK_VREMENA', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'SMEROZNAKE', 'SMER    _OZNAKE', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#JEZIK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'JEZIKSADRŽAJA', 'JEZIK_SADRŽAJA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'STRANICAUIMENSKOMPROSTORU', 'STRANAUIMENSKOMPROSTORU', 'STRANICA_U_IMENSKOM_PROSTORU', 'STRANA_U_IMENSKOM_PROSTORU', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'BROJADMINA', 'BROJ_ADMINA', 'NUMBEROFADMINS' ),
-       'padleft'                 => array( '0', 'PORAVNAJULEVO', 'PORAVNAJ_ULEVO', 'PADLEFT' ),
-       'padright'                => array( '0', 'PORAVNAJUDESNO', 'PORAVNAJ_UDESNO', 'PADRIGHT' ),
-       'special'                 => array( '0', 'posebno', 'special' ),
-       'filepath'                => array( '0', 'PUTANJADATOTEKE', 'PUTANJA_DATOTEKE', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'oznaka', 'tag' ),
-       'hiddencat'               => array( '1', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'STRANICAUKATEGORIJI', 'STRANAUKATEGORIJI', 'STRANICA_U_KATEGORIJI', 'STRANA_U_KATEGORIJI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELIČINA_STRANICE', 'VELIČINA_STRANE', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__BEZINDEKSA__', '__BEZ_INDEKSA__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'BROJUGRUPI', 'BROJ_U_GRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATIČKOPREUSMERENJE__', 'STATIČKO_PREUSMERENJE', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'NIVOZAŠTITE', 'NIVO_ZAŠTITE', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formatdatuma', 'format_datuma', 'formatdate', 'dateformat' ),
-       'url_path'                => array( '0', 'PUTANJA', 'PATH' ),
-       'url_wiki'                => array( '0', 'VIKI', 'WIKI' ),
-       'url_query'               => array( '0', 'REDOSLED', 'QUERY' ),
-       'defaultsort_noerror'     => array( '0', 'bez_greške', 'noerror' ),
-       'defaultsort_noreplace'   => array( '0', 'bez_zamene', 'noreplace' ),
+       'redirect'                  => array( '0', '#Preusmeri', '#preusmeri', '#PREUSMERI', '#Preusmjeri', '#preusmjeri', '#PREUSMJERI', '#redirect', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__BEZSADRŽAJA__', '__BEZ_SADRŽAJA__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__BEZGALERIJE__', '__BEZ_GALERIJE__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORSIRANI_SADRŽAJ__', '__PRIMORANISADRŽAJ__', '__PRIMORANI_SADRŽAJ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BEZIZMENA__', '__BEZ_IZMENA__', '__BEZIZMJENA__', '__BEZ_IZMJENA__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'TRENUTNIMESEC', 'TRENUTNI_MESEC', 'TEKUĆIMESEC', 'TEKUĆI_MESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'TRENUTNIMESEC1', 'TRENUTNI_MESEC1', 'TEKUĆIMESEC1', 'TEKUĆI_MESEC1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TRENUTNIMESECIME', 'IMETEKUĆEGMESECA', 'IME_TEKUĆEG_MESECA', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TRENUTNIMESECGEN', 'TEKUĆIMESECGEN', 'TEKUĆI_MESEC_GEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TRENUTNIMESECSKR', 'TEKUĆIMESECSKR', 'TEKUĆI_MESEC_SKR', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'TRENUTNIDAN', 'TEKUĆIDAN', 'TEKUĆI_DAN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'TEKUĆIDAN2', 'TEKUĆI_DAN_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TRENUTNIDANIME', 'IMETEKUĆEGDANA', 'IME_TEKUĆEG_DANA', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'TRENUTNAGODINA', 'TEKUĆAGODINA', 'TEKUĆA_GODINA', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'TRENUTNOVREME', 'TEKUĆEVREME', 'TEKUĆE_VREME', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'TEKUĆISAT', 'TEKUĆI_SAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALNIMESEC', 'LOKALNI_MESEC', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALNIMESEC2', 'LOKALNI_MESEC2', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'IMELOKALNOGMESECA', 'IME_LOKALNOG_MESECA', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'LOKALNIMESECGEN', 'LOKALNI_MESEC_GEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'LOKALNIMESECSKR', 'LOKALNI_MESEC_SKR', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALNIDAN', 'LOKALNI_DAN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALNIDAN2', 'LOKALNI_DAN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'IMELOKALNOGDANA', 'IME_LOKALNOG_DANA', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALNAGODINA', 'LOKALNA_GODINA', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALNOVREME', 'LOKALNO_VREME', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALNISAT', 'LOKALNI_SAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'BROJSTRANICA', 'BROJ_STRANICA', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'BROJČLANAKA', 'BROJ_ČLANAKA', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'BROJDATOTEKA', 'BROJ_DATOTEKA', 'BROJFAJLOVA', 'BROJ_FAJLOVA', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'BROJKORISNIKA', 'BROJ_KORISNIKA', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'BROJAKTIVNIHKORISNIKA', 'BROJ_AKTIVNIH_KORISNIKA', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'BROJIZMENA', 'BROJ_IZMENA', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'BROJPREGLEDA', 'BROJ_PREGLEDA', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'IMESTRANICE', 'IME_STRANICE', 'STRANICA', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'IMENASTRANICA', 'IMENA_STRANICA', 'STRANICE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'IMENSKIPROSTOR', 'IMENSKI_PROSTOR', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'IMENSKIPROSTORI', 'IMENSKI_PROSTORI', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'RAZGOVORI', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'IMENSKIPROSTORČLANKA', 'IMENSKI_PROSTOR_ČLANKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'IMENSKIPROSTORČLANAKA', 'IMENSKI_PROSTOR_ČLANAKA', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'PUNOIMESTRANICE', 'PUNOIMESTRANE', 'PUNO_IME_STRANICE', 'PUNO_IME_STRANE', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'PUNAIMENASTRANICA', 'PUNAIMENASTRANA', 'PUNA_IMENA_STRANICA', 'PUNA_IMENA_STRANA', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'IMEPODSTRANICE', 'IMEPODSTRANE', 'IME_PODSTRANICE', 'IME_PODSTRANE', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'IMENAPODSTRANICA', 'IMENAPODSTRANA', 'IMENA_PODSTRANICA', 'IMENA_PODSTRANA', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'IMEOSNOVE', 'IME_OSNOVE', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'IMENAOSNOVA', 'IMENA_OSNOVA', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'IMERAZGOVORA', 'IME_RAZGOVORA', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'IMENARAZGOVORA', 'IMENA_RAZGOVORA', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'IMEČLANKA', 'IME_ČLANKA', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'IMENAČLANAKA', 'IMENA_ČLANAKA', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'POR:', 'MSG:' ),
+       'subst'                     => array( '0', 'ZAMENI:', 'ZAMENA:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'BEZBEDNAZAMENA', 'BEZBEDNA_ZAMENA', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'NVPOR:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'mini', 'umanjeno', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'mini=$1', 'umanjeno=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'desno', 'd', 'right' ),
+       'img_left'                  => array( '1', 'levo', 'l', 'left' ),
+       'img_none'                  => array( '1', 'bez', 'n', 'none' ),
+       'img_width'                 => array( '1', '$1piskel', '$1p', '$1px' ),
+       'img_center'                => array( '1', 'centar', 'c', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'bezokvira', 'bez_okvira', 'bezrama', 'bez_rama', 'frameless' ),
+       'img_page'                  => array( '1', 'stranica=$1', 'strana=$1', 'stranica_$1', 'strana_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'ivica', 'border' ),
+       'img_baseline'              => array( '1', 'osnova', 'baseline' ),
+       'img_sub'                   => array( '1', 'pod', 'sub' ),
+       'img_top'                   => array( '1', 'vrh', 'top' ),
+       'img_text_top'              => array( '1', 'vrhteksta', 'vrh_teksta', 'text-top' ),
+       'img_middle'                => array( '1', 'sredina', 'middle' ),
+       'img_bottom'                => array( '1', 'dno', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'sredinateksta', 'sredina_teksta', 'text-bottom' ),
+       'img_link'                  => array( '1', 'veza=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'IMESAJTA', 'SITENAME' ),
+       'ns'                        => array( '0', 'IP:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALNAADRESA:', 'LOKALNA_ADRESA:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALNEADRESE:', 'LOKALNE_ADRESE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'PUTANJAČLANKA', 'PUTANJA_ČLANKA', 'ARTICLEPATH' ),
+       'servername'                => array( '0', 'IMESERVERA', 'IME_SERVERA', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTA', 'SKRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'PUTANJASTILA', 'PUTANJA_STILA', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ROD:', 'LICE:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__BEZCC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TRENUTNANEDELJA', 'TRENUTNA_NEDELJA', 'TEKUĆANEDELJA', 'TEKUĆA_NEDELJA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'TRENUTNIDOV', 'TEKUĆIDUN', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALNANEDELJA', 'LOKALNA_NEDELJA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALNIDUN', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'IDREVIZIJE', 'ID_REVIZIJE', 'IB_IZMENE', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DANIZMENE', 'DAN_IZMENE', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DANIZMENE2', 'DAN_IZMENE2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESECIZMENE', 'MESEC_IZMENE', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MESECIZMENE1', 'MESEC_IZMENE1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'GODINAIZMENE', 'GODINA_IZMENE', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VREMEIZMENE', 'VREME_IZMENE', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'KORISNIKIZMENE', 'KORISNIK_IZMENE', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'MNOŽINA:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'PUNURL:', 'CELAADRESA', 'CELA_ADRESA', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'PUNURLE:', 'CELEADRESE', 'CELE_ADRESE', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LCPRVI:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCPRVI:', 'UCFIRST:' ),
+       'raw'                       => array( '0', 'ČIST:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'NAZIVPRIKAZA', 'NAZIV_PRIKAZA', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NOVAVEZAODELJKA__', '__NOVA_VEZA_ODELJKA__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__BEZNOVEVEZEODELJKA__', '__BEZ_NOVE_VEZE_ODELJKA__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'TEKUĆEIZDANJE', 'TEKUĆE_IZDANJE', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'KODIRANJEADRESE', 'KODIRANJE_ADRESE', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'KODIRANJEVEZE', 'KODIRANJE_VEZE', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'TEKUĆIOTISAKVREMENA', 'TEKUĆI_OTISAK_VREMENA', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'OTISAKVREMENA', 'OTISAK_VREMENA', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'SMEROZNAKE', 'SMER  _OZNAKE', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#JEZIK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'JEZIKSADRŽAJA', 'JEZIK_SADRŽAJA', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'STRANICAUIMENSKOMPROSTORU', 'STRANAUIMENSKOMPROSTORU', 'STRANICA_U_IMENSKOM_PROSTORU', 'STRANA_U_IMENSKOM_PROSTORU', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'BROJADMINA', 'BROJ_ADMINA', 'NUMBEROFADMINS' ),
+       'padleft'                   => array( '0', 'PORAVNAJULEVO', 'PORAVNAJ_ULEVO', 'PADLEFT' ),
+       'padright'                  => array( '0', 'PORAVNAJUDESNO', 'PORAVNAJ_UDESNO', 'PADRIGHT' ),
+       'special'                   => array( '0', 'posebno', 'special' ),
+       'filepath'                  => array( '0', 'PUTANJADATOTEKE', 'PUTANJA_DATOTEKE', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'oznaka', 'tag' ),
+       'hiddencat'                 => array( '1', '__SAKRIVENAKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'STRANICAUKATEGORIJI', 'STRANAUKATEGORIJI', 'STRANICA_U_KATEGORIJI', 'STRANA_U_KATEGORIJI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'VELIČINASTRANICE', 'VELIČINASTRANE', 'VELIČINA_STRANICE', 'VELIČINA_STRANE', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__BEZINDEKSA__', '__BEZ_INDEKSA__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'BROJUGRUPI', 'BROJ_U_GRUPI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATIČKOPREUSMERENJE__', 'STATIČKO_PREUSMERENJE', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'NIVOZAŠTITE', 'NIVO_ZAŠTITE', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formatdatuma', 'format_datuma', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'PUTANJA', 'PATH' ),
+       'url_wiki'                  => array( '0', 'VIKI', 'WIKI' ),
+       'url_query'                 => array( '0', 'REDOSLED', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'bez_greške', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'bez_zamene', 'noreplace' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -692,10 +692,11 @@ Upit: $2',
 'protectedpagetext' => 'Ova stranica je zaključana za uređivanja.',
 'viewsourcetext' => 'Možete da pogledate i umnožite izvorni tekst ove stranice:',
 'viewyourtext' => "Možete da pogledate i umnožite izvor '''vaših izmena''' na ovoj stranici:",
-'protectedinterface' => 'Ova stranica je zaštićena jer sadrži tekst korisničkog sučelja programa.',
+'protectedinterface' => 'Ova stranica sadrži tekst korisničkog okruženja za softver na ovom vikiju i zaštićena je radi sprečavanja zloupotrebe.
+Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.',
 'editinginterface' => "'''Upozorenje:''' uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.
-Izmene na ovoj stranici će uticati na sve korisnike.
-Posetite [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Translejtviki], projekat namenjen za prevođenje Medijavikija.",
+Izmene na ovoj stranici će uticati na sve korisnike ovog vikija.
+Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Translejtviki], projekat za lokalizaciju Medijavikija.",
 'sqlhidden' => '(SQL upit je sakriven)',
 'cascadeprotected' => 'Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:
 $2',
@@ -721,7 +722,7 @@ Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.'
 # Login and logout pages
 'logouttext' => "'''Odjavljeni ste.'''
 
-Možete da nastavite s korišćenjem ovog vikija kao gost, ili se [[Special:UserLogin|ponovo prijavite]] kao drugi korisnik.
+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! ==
 
@@ -983,7 +984,7 @@ Ako ste anonimni korisnik i mislite da su vam upućene primedbe, [[Special:UserL
 Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti stranicu]</span>.',
 'noarticletext-nopermission' => 'Na ovoj stranici trenutno nema sadržaja.
-Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje]</span>.',
+Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne dnevnike]</span>, ali nemate dozvolu da napravite ovu stranicu.',
 'missing-revision' => 'Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{PAGENAME}}“.
 
 Ovo se obično dešava kada pratite zastarelu vezu do stranice koja je obrisana.
@@ -1081,7 +1082,7 @@ Možete se vratiti i urediti postojeću stranicu, ili se [[Special:UserLogin|pri
 'sectioneditnotsupported-text' => 'Uređivanje odeljka nije podržano na ovoj stranici.',
 'permissionserrors' => 'Greške u dozvolama',
 'permissionserrorstext' => 'Nemate ovlašćenje za tu radnju iz {{PLURAL:$1|sledećeg|sledećih}} razloga:',
-'permissionserrorstext-withaction' => 'Nemate ovlašćenja za $2 zbog {{PLURAL:$1|sledećeg|sledećih}} razloga:',
+'permissionserrorstext-withaction' => 'Nemate dozvolu da $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:',
 'recreate-moveddeleted-warn' => "'''Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.'''
 
 Razmotrite da li je prikladno da nastavite s uređivanjem ove stranice.
@@ -1256,7 +1257,8 @@ Pogledajte istoriju.',
 'revdelete-only-restricted' => 'Greška pri sakrivanju stavke od $1, $2: ne možete sakriti stavke od administratora bez izbora drugih mogućnosti vidljivosti.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi za brisanje
 ** Kršenje autorskog prava
-** Neodgovarajući lični podaci
+** Neprikladan komentar ili lični podaci
+** Neprikladno korisničko ime
 ** Uvredljivi podaci',
 'revdelete-otherreason' => 'Drugi/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Drugi razlog',
@@ -1355,8 +1357,6 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-interwiki-caption' => 'Bratski projekti',
 'search-interwiki-default' => '$1 rezultati:',
 'search-interwiki-more' => '(više)',
-'search-mwsuggest-enabled' => 'sa predlozima',
-'search-mwsuggest-disabled' => 'bez predloga',
 'search-relatedarticle' => 'Povezano',
 'mwsuggest-disable' => 'Onemogući predloge AJAX',
 'searcheverything-enable' => 'svi imenski prostori',
@@ -1898,7 +1898,7 @@ Ako se problem ne reši, kontaktirajte [[Special:ListUsers/sysop|administratora]
 'backend-fail-internal' => 'Došlo je do nepoznate greške u skladišnoj osnovi „$1“.',
 'backend-fail-contenttype' => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
 'backend-fail-batchsize' => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
-'backend-fail-usable' => 'Ne mogu da zapišem datoteku $1 jer nemate dovoljno dozvola ili vam nedostaju fascikle/sadržaoci.',
+'backend-fail-usable' => 'Ne mogu da pročitam ili zapišem datoteku „$1“ jer nemate dovoljno dozvola ili vam nedostaju fascikle/sadržaoci.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
@@ -2035,6 +2035,7 @@ Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 'shared-repo' => 'zajedničko skladište',
 'shared-repo-name-wikimediacommons' => 'Vikimedijina ostava',
 'filepage.css' => '/* CSS koji je postavljen ovde se nalazi na stranicama za opis datoteka, kao i na stranim vikijima */',
+'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -2144,6 +2145,7 @@ Sada je preusmerenje na [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajta|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije|kategorija}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međuviki|međuvikija|međuvikija}}',
 'nlinks' => '$1 {{PLURAL:$1|veza|veze|veza}}',
 'nmembers' => '$1 {{PLURAL:$1|član|člana|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|izmena|izmene|izmena}}',
@@ -2172,6 +2174,7 @@ Sada je preusmerenje na [[$2]].',
 'mostlinkedtemplates' => 'Šabloni s najviše veza',
 'mostcategories' => 'Članci s najviše kategorija',
 'mostimages' => 'Datoteke s najviše veza',
+'mostinterwikis' => 'Stranice sa najviše međuvikija',
 'mostrevisions' => 'Stranice s najviše izmena',
 'prefixindex' => 'Sve stranice s prefiksom',
 'prefixindex-namespace' => 'Sve stranice s predmetkom (imenski prostor $1)',
@@ -2321,6 +2324,8 @@ Pogledajte [[{{MediaWiki:Listgrouprights-helppage}}|više detalja]] o pojedinač
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.',
 'emailuser' => 'Pošalji e-poruku',
+'emailuser-title-target' => 'Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}',
+'emailuser-title-notarget' => 'Slanje e-poruke korisniku',
 'emailpage' => 'Slanje e-poruka',
 'emailpagetext' => 'Koristite ovaj obrazac da pošaljete e-poruku ovom korisniku.
 E-adresa koju ste uneli u [[Special:Preferences|podešavanjima]] će biti prikazana kao adresa pošiljaoca, tako da će primalac poruke moći da vam odgovori.',
@@ -3028,7 +3033,6 @@ Pokušajte ponovo.',
 
 # JavaScriptTest
 'javascripttest' => 'Javaskript test',
-'javascripttest-disabled' => 'Ova funkcija nije omogućena na ovom vikiju.',
 'javascripttest-title' => 'Izvršavanje testova za $1',
 'javascripttest-pagetext-noframework' => 'Ova stranica je rezervisana za izvršavanje javaskript testova.',
 'javascripttest-pagetext-unknownframework' => 'Nepoznati radni okvir „$1“.',
@@ -3168,11 +3172,33 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 
 # Info page
 'pageinfo-title' => 'Podaci o „$1“',
+'pageinfo-header-basic' => 'Osnovni podaci',
 'pageinfo-header-edits' => 'Istorija izmena',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Naslov za prikaz',
+'pageinfo-default-sort' => 'Podrazumevani ključ sortiranja',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
+'pageinfo-article-id' => 'ID stranice',
+'pageinfo-robot-policy' => 'Status pretraživača',
+'pageinfo-robot-index' => 'Može da se popiše',
+'pageinfo-robot-noindex' => 'Ne može da se popiše',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj nadgledača stranica',
+'pageinfo-redirects-name' => 'Preusmeravanja na stranicu',
+'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmerenje|preusmerenja|preusmerenja}}; $3 {{PLURAL:$3|nepreusmerenje|nepreusmerenja|nepreusmerenja}})',
+'pageinfo-firstuser' => 'Autor stranice',
+'pageinfo-firsttime' => 'Datum stvaranja stranice',
+'pageinfo-lastuser' => 'Poslednji urednik',
+'pageinfo-lasttime' => 'Datum poslednje izmene',
 'pageinfo-edits' => 'Broj izmena',
 'pageinfo-authors' => 'Broj zasebnih autora',
+'pageinfo-recent-edits' => 'Broj skorašnjih izmena (u poslednjih $1)',
+'pageinfo-recent-authors' => 'Broj skorašnjih zasebnih autora',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magična reč|Magične reči}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klasično',
@@ -3228,6 +3254,7 @@ Ako ga pokrenete, vaš računar može biti ugrožen.",
 'file-info-size-pages' => '$1 × $2 piksela, veličina: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG datoteka, nominalno $1 × $2 piksela, veličina: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3',
 'show-big-image' => 'Puna veličina',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.',
@@ -3237,6 +3264,8 @@ Ako ga pokrenete, vaš računar može biti ugrožen.",
 'file-info-png-looped' => 'petlja',
 'file-info-png-repeat' => 'ponovljeno $1 {{PLURAL:$1|put|puta|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|kadar|kadra|kadrova}}',
+'file-no-thumb-animation' => "'''Napomena: zbog tehničkih ograničenja, minijature ove datoteke se neće animirati.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće se animirati.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih datoteka',
@@ -4203,6 +4232,10 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 'feedback-bugcheck' => 'Odlično! Proverite da li je greška [$1 poznata od pre].',
 'feedback-bugnew' => 'Provereno. Prijavi novu grešku',
 
+# Search suggestions
+'searchsuggest-search' => 'Pretraga',
+'searchsuggest-containing' => 'sadrži...',
+
 # API errors
 'api-error-badaccess-groups' => 'Nije vam dozvoljeno da otpremate datoteke na ovaj viki.',
 'api-error-badtoken' => 'Unutrašnja greška: neispravan žeton.',
index 641ef8d..9918087 100644 (file)
@@ -112,44 +112,44 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#STIR', '#DOORVERWIJZING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__NOINOT__', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__NOPIKTURAMA__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__INOTDWENGI__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INOT__', '__INHOUD__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__NOKENKISKAKI__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'CURRENTMOTNH', 'DISIMUN', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'DISIMUNNEN', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'DISIMUNNENGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'DISIMUNSH', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'DISIDEY', 'HUIDIGEDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'DISIDEY2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'DISIDEYNEN', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'DISIYARI', 'HUIDIGJAAR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'DISITEN', 'HUIDIGETIJD', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'DISIYURU', 'HUIDIGUUR', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'PRESIMUN', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonthname'          => array( '1', 'PRESIMUNNEN', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'PRESIMUNNENGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'PRESIMUNSH', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'PRESIDEY', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'PRESIDEY2', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'PRESIDEYNEN', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'PRESIYARI', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'PRESITEN', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'PRESIYURU', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'PAPIRANUMRO', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'PAPIRALEGIMNUMRO', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'GEFRENUMRO', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'MASYINNUMRO', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
-       'numberofedits'           => array( '1', 'KENKINUMRO', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
-       'pagename'                => array( '1', 'PAPIRANEN', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'PAPIRANENE', 'PAGINANAAME', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NENPREKI', 'NAAMRUIMTE', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NENPREKIE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'TAKIPREKI', 'OVERLEGRUIMTE', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'TAKIPREKIE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
-       'special'                 => array( '0', 'spesyal', 'speciaal', 'special' ),
+       'redirect'                  => array( '0', '#STIR', '#DOORVERWIJZING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__NOINOT__', '__GEENINHOUD__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__NOPIKTURAMA__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__INOTDWENGI__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INOT__', '__INHOUD__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__NOKENKISKAKI__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'CURRENTMOTNH', 'DISIMUN', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'DISIMUNNEN', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'DISIMUNNENGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'DISIMUNSH', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'DISIDEY', 'HUIDIGEDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'DISIDEY2', 'HUIDIGEDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'DISIDEYNEN', 'HUIDIGEDAGNAAM', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'DISIYARI', 'HUIDIGJAAR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'DISITEN', 'HUIDIGETIJD', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'DISIYURU', 'HUIDIGUUR', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'PRESIMUN', 'PLAATSELIJKEMAAND', 'LOKALEMAAND', 'LOKALEMAAND2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', 'PRESIMUNNEN', 'PLAATSELIJKEMAANDNAAM', 'LOKALEMAANDNAAM', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'PRESIMUNNENGEN', 'PLAATSELIJKEMAANDNAAMGEN', 'LOKALEMAANDNAAMGEN', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'PRESIMUNSH', 'PLAATSELIJKEMAANDAFK', 'LOKALEMAANDAFK', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'PRESIDEY', 'PLAATSELIJKEDAG', 'LOKALEDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'PRESIDEY2', 'PLAATSELIJKEDAG2', 'LOKALEDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'PRESIDEYNEN', 'PLAATSELIJKEDAGNAAM', 'LOKALEDAGNAAM', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'PRESIYARI', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'PRESITEN', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'PRESIYURU', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'PAPIRANUMRO', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'PAPIRALEGIMNUMRO', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'GEFRENUMRO', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'MASYINNUMRO', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'KENKINUMRO', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'PAPIRANEN', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'PAPIRANENE', 'PAGINANAAME', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NENPREKI', 'NAAMRUIMTE', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NENPREKIE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'TAKIPREKI', 'OVERLEGRUIMTE', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'TAKIPREKIE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
+       'special'                   => array( '0', 'spesyal', 'speciaal', 'special' ),
 );
 
 $messages = array(
index 6531481..9cd3dfe 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'LiSontfo',
-'monday'        => 'Msombuluko',
-'tuesday'       => 'Lesibili',
-'wednesday'     => 'Lesitsatfu',
-'thursday'      => 'Lesine',
-'friday'        => 'Lesihlanu',
-'saturday'      => 'Mgcibelo',
-'sun'           => 'LiSontfo',
-'mon'           => 'Msombuluko',
-'tue'           => 'Lesibili',
-'wed'           => 'Lesitsatfu',
-'thu'           => 'Lesine',
-'fri'           => 'Lesihlanu',
-'sat'           => 'Mgcibelo',
-'january'       => 'Bhimbidvwane',
-'february'      => 'iNdlovana',
-'march'         => 'iNdlovu',
-'april'         => 'Mabasa',
-'may_long'      => 'iNkhwekhweti',
-'june'          => 'iNhlaba',
-'july'          => 'Kholwane',
-'august'        => 'iNgci',
-'september'     => 'iNyoni',
-'october'       => 'iMphala',
-'november'      => 'Lweti',
-'december'      => 'iNgongoni',
-'january-gen'   => 'Bhimbidvwane',
-'february-gen'  => 'iNdlovana',
-'march-gen'     => 'iNdlovu',
-'april-gen'     => 'Mabasa',
-'may-gen'       => 'iNkhwekhweti',
-'june-gen'      => 'iNhlaba',
-'july-gen'      => 'Kholwane',
-'august-gen'    => 'iNgci',
+'sunday' => 'LiSontfo',
+'monday' => 'Msombuluko',
+'tuesday' => 'Lesibili',
+'wednesday' => 'Lesitsatfu',
+'thursday' => 'Lesine',
+'friday' => 'Lesihlanu',
+'saturday' => 'Mgcibelo',
+'sun' => 'LiSontfo',
+'mon' => 'Msombuluko',
+'tue' => 'Lesibili',
+'wed' => 'Lesitsatfu',
+'thu' => 'Lesine',
+'fri' => 'Lesihlanu',
+'sat' => 'Mgcibelo',
+'january' => 'Bhimbidvwane',
+'february' => 'iNdlovana',
+'march' => 'iNdlovu',
+'april' => 'Mabasa',
+'may_long' => 'iNkhwekhweti',
+'june' => 'iNhlaba',
+'july' => 'Kholwane',
+'august' => 'iNgci',
+'september' => 'iNyoni',
+'october' => 'iMphala',
+'november' => 'Lweti',
+'december' => 'iNgongoni',
+'january-gen' => 'Bhimbidvwane',
+'february-gen' => 'iNdlovana',
+'march-gen' => 'iNdlovu',
+'april-gen' => 'Mabasa',
+'may-gen' => 'iNkhwekhweti',
+'june-gen' => 'iNhlaba',
+'july-gen' => 'Kholwane',
+'august-gen' => 'iNgci',
 'september-gen' => 'iNyoni',
-'october-gen'   => 'iMphala',
-'november-gen'  => 'Lweti',
-'december-gen'  => 'iNgongoni',
-'jan'           => 'Bhi',
-'feb'           => 'iNdlova',
-'mar'           => 'iNdlovu',
-'apr'           => 'Mab',
-'may'           => 'iNkhwe',
-'jun'           => 'iNhla',
-'jul'           => 'Kho',
-'aug'           => 'iNgci',
-'sep'           => 'iNyo',
-'oct'           => 'iMpha',
-'nov'           => 'Lwe',
-'dec'           => 'iNgo',
+'october-gen' => 'iMphala',
+'november-gen' => 'Lweti',
+'december-gen' => 'iNgongoni',
+'jan' => 'Bhi',
+'feb' => 'iNdlova',
+'mar' => 'iNdlovu',
+'apr' => 'Mab',
+'may' => 'iNkhwe',
+'jun' => 'iNhla',
+'jul' => 'Kho',
+'aug' => 'iNgci',
+'sep' => 'iNyo',
+'oct' => 'iMpha',
+'nov' => 'Lwe',
+'dec' => 'iNgo',
 
 # Categories related messages
-'category_header'          => 'Makhasi lakulomkhakha "$1"',
-'subcategories'            => 'Mikhakha lengaphansi',
-'category-media-header'    => 'i-Media lekulomkhakha "$1"',
-'category-empty'           => "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
+'category_header' => 'Makhasi lakulomkhakha "$1"',
+'subcategories' => 'Mikhakha lengaphansi',
+'category-media-header' => 'i-Media lekulomkhakha "$1"',
+'category-empty' => "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
 'hidden-category-category' => 'Mikhakha lefihliwe',
-'listingcontinuesabbrev'   => 'chubeka.',
-'index-category'           => 'Makhasi lacokelelwe',
-'noindex-category'         => 'Makhasi lasabalele',
-
-'about'         => 'Kabanti',
-'article'       => 'Likhasi lentfo',
-'newwindow'     => '(kuvulekela tukweli-window lelisha)',
-'cancel'        => 'Yekela',
+'listingcontinuesabbrev' => 'chubeka.',
+'index-category' => 'Makhasi lacokelelwe',
+'noindex-category' => 'Makhasi lasabalele',
+
+'about' => 'Kabanti',
+'article' => 'Likhasi lentfo',
+'newwindow' => '(kuvulekela tukweli-window lelisha)',
+'cancel' => 'Yekela',
 'moredotdotdot' => 'Lokunyenti...',
-'mypage'        => 'Likhasi lami',
-'mytalk'        => 'Tingcoco tami',
-'anontalk'      => 'Tingcogco letentwe ngulelikheli lale-IP',
+'mypage' => 'Likhasi lami',
+'mytalk' => 'Tingcoco tami',
+'anontalk' => 'Tingcogco letentwe ngulelikheli lale-IP',
 
 # Cologne Blue skin
-'qbfind'         => 'Tfola',
-'qbbrowse'       => 'Browse',
-'qbedit'         => 'Hlela',
-'qbpageoptions'  => 'Lelikhasi',
-'qbmyoptions'    => 'Makhasi ami',
+'qbfind' => 'Tfola',
+'qbbrowse' => 'Browse',
+'qbedit' => 'Hlela',
+'qbpageoptions' => 'Lelikhasi',
+'qbmyoptions' => 'Makhasi ami',
 'qbspecialpages' => 'Emakhasi labalulekile',
 
 # Vector skin
 'vector-action-addsection' => 'Ngeta sihloko',
-'vector-action-move'       => 'Khweshisa',
-'vector-view-create'       => 'Create',
-'vector-view-edit'         => 'Hlela',
-'vector-view-history'      => 'Bona umlandvo',
-'vector-view-view'         => 'Fundza',
-'actions'                  => 'Tento',
-
-'returnto'          => 'Buyela ku $1.',
-'help'              => 'Sita',
-'search'            => 'Sesha',
-'searchbutton'      => 'Sesha',
-'go'                => 'Hamba',
-'searcharticle'     => 'Hamba',
-'history'           => 'Umlandvo walelikhasi',
-'history_short'     => 'Umlandvo',
-'print'             => 'Print',
-'edit'              => 'Hlela',
-'create'            => 'Yakha',
-'editthispage'      => 'Hlela lelikhasi',
-'create-this-page'  => 'Yakha lelikhasi',
-'delete'            => 'Sula',
-'deletethispage'    => 'Sula lelikhasi',
-'protect'           => 'Vikela',
-'protect_change'    => 'gucula',
-'protectthispage'   => 'Vikela lelikhasi',
-'unprotect'         => 'Yekelela',
+'vector-action-move' => 'Khweshisa',
+'vector-view-create' => 'Create',
+'vector-view-edit' => 'Hlela',
+'vector-view-history' => 'Bona umlandvo',
+'vector-view-view' => 'Fundza',
+'actions' => 'Tento',
+
+'returnto' => 'Buyela ku $1.',
+'help' => 'Sita',
+'search' => 'Sesha',
+'searchbutton' => 'Sesha',
+'go' => 'Hamba',
+'searcharticle' => 'Hamba',
+'history' => 'Umlandvo walelikhasi',
+'history_short' => 'Umlandvo',
+'print' => 'Print',
+'edit' => 'Hlela',
+'create' => 'Yakha',
+'editthispage' => 'Hlela lelikhasi',
+'create-this-page' => 'Yakha lelikhasi',
+'delete' => 'Sula',
+'deletethispage' => 'Sula lelikhasi',
+'protect' => 'Vikela',
+'protect_change' => 'gucula',
+'protectthispage' => 'Vikela lelikhasi',
+'unprotect' => 'Yekelela',
 'unprotectthispage' => 'Yekelela lelikhasi',
-'newpage'           => 'Likhasi lelisha',
-'talkpage'          => 'Coca ngalelikhasi',
-'talkpagelinktext'  => 'Ingcoco',
-'specialpage'       => 'Likhasi lelibalulekile',
-'personaltools'     => 'Mathulusi emuntfu',
-'postcomment'       => 'Sihloko lesinsha',
-'articlepage'       => 'Bona likhasi lelicuketse',
-'talk'              => 'Ingcoco',
-'views'             => 'Kubukeka',
-'toolbox'           => 'Libhokisi Lemathulusi',
-'userpage'          => 'Buna likhasi lemuntfu',
-'projectpage'       => 'Bona likhasi leprojekthi',
-'imagepage'         => 'Bona lelifayela likhasi',
-'mediawikipage'     => 'Bona likhasi lemiyaleto',
-'viewhelppage'      => 'Bona likhasi lelusito',
-'categorypage'      => 'Bona likhasi lemikhakha',
-'viewtalkpage'      => 'Bona ingcoco',
-'otherlanguages'    => 'Ngaletinye tilwimi',
-'redirectedfrom'    => '(Utfunyelelwe likhasi $1)',
-'redirectpagesub'   => 'Likhasi lekutfumela',
-'lastmodifiedat'    => 'Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.',
-'viewcount'         => 'Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.',
-'protectedpage'     => 'Likhasi lelivikelekile',
-'jumpto'            => 'Zuba ku:',
-'jumptosearch'      => 'sesha',
-'view-pool-error'   => 'Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.
+'newpage' => 'Likhasi lelisha',
+'talkpage' => 'Coca ngalelikhasi',
+'talkpagelinktext' => 'Ingcoco',
+'specialpage' => 'Likhasi lelibalulekile',
+'personaltools' => 'Mathulusi emuntfu',
+'postcomment' => 'Sihloko lesinsha',
+'articlepage' => 'Bona likhasi lelicuketse',
+'talk' => 'Ingcoco',
+'views' => 'Kubukeka',
+'toolbox' => 'Libhokisi Lemathulusi',
+'userpage' => 'Buna likhasi lemuntfu',
+'projectpage' => 'Bona likhasi leprojekthi',
+'imagepage' => 'Bona lelifayela likhasi',
+'mediawikipage' => 'Bona likhasi lemiyaleto',
+'viewhelppage' => 'Bona likhasi lelusito',
+'categorypage' => 'Bona likhasi lemikhakha',
+'viewtalkpage' => 'Bona ingcoco',
+'otherlanguages' => 'Ngaletinye tilwimi',
+'redirectedfrom' => '(Utfunyelelwe likhasi $1)',
+'redirectpagesub' => 'Likhasi lekutfumela',
+'lastmodifiedat' => 'Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.',
+'viewcount' => 'Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.',
+'protectedpage' => 'Likhasi lelivikelekile',
+'jumpto' => 'Zuba ku:',
+'jumptosearch' => 'sesha',
+'view-pool-error' => 'Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.
 Kunebantfu labanyenti labatama kubona lelikhasi.
 Sicela ume kancane ngaphambi lwekuphindze ubone lelikhasi.
 
 $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'            => 'Kabanti nge {{SITENAME}}',
-'aboutpage'            => 'Project:Kabanti',
-'copyright'            => 'Lokucuketfwe kungaphansi kwe $1.',
-'copyrightpage'        => '{{ns:project}}:Malungelo ekukhicita',
-'currentevents'        => 'Tentakalo tanyalo',
-'currentevents-url'    => 'Project:Tentakalo tanyalo',
-'edithelp'             => 'Lusito ngekuhlela',
-'edithelppage'         => 'Help:Kuhlela',
-'helppage'             => 'Help:Lokucuketfwe',
-'mainpage'             => 'Likhasi Lelikhulu',
+'aboutsite' => 'Kabanti nge {{SITENAME}}',
+'aboutpage' => 'Project:Kabanti',
+'copyright' => 'Lokucuketfwe kungaphansi kwe $1.',
+'copyrightpage' => '{{ns:project}}:Malungelo ekukhicita',
+'currentevents' => 'Tentakalo tanyalo',
+'currentevents-url' => 'Project:Tentakalo tanyalo',
+'edithelp' => 'Lusito ngekuhlela',
+'edithelppage' => 'Help:Kuhlela',
+'helppage' => 'Help:Lokucuketfwe',
+'mainpage' => 'Likhasi Lelikhulu',
 'mainpage-description' => 'Likhasi lelikhulu',
-'policy-url'           => 'Project:Umtsetfo',
-'portal'               => 'Likhefi le-inthanethi',
-'portal-url'           => 'Project:Likhefi le-inthanethi',
+'policy-url' => 'Project:Umtsetfo',
+'portal' => 'Likhefi le-inthanethi',
+'portal-url' => 'Project:Likhefi le-inthanethi',
 
-'badaccess'        => 'Liphutsa lemalungelo',
+'badaccess' => 'Liphutsa lemalungelo',
 'badaccess-group0' => 'Awukavunyelwa kwenta lesento lobowutama kusenta.',
 'badaccess-groups' => 'Lesento losicelile sincishiselwe bantfu labakule {{PLURAL:$2|ncumbi|labakunobe nguyiphi incumbi}}: $1.',
 
-'ok'                      => 'Kulungile',
-'retrievedfrom'           => 'Kutsatfwe ku "$1"',
-'youhavenewmessages'      => 'Una $1 ($2).',
-'newmessageslink'         => 'milayeto lemisha',
-'newmessagesdifflink'     => 'ingucuko yekugcina',
+'ok' => 'Kulungile',
+'retrievedfrom' => 'Kutsatfwe ku "$1"',
+'youhavenewmessages' => 'Una $1 ($2).',
+'newmessageslink' => 'milayeto lemisha',
+'newmessagesdifflink' => 'ingucuko yekugcina',
 'youhavenewmessagesmulti' => 'Unemilayeto lemisha nge $1',
-'editsection'             => 'hlela',
-'editold'                 => 'hlela',
-'viewsourceold'           => 'Bona kwakheka',
-'editlink'                => 'hlela',
-'viewsourcelink'          => 'Bona kwakheka',
-'editsectionhint'         => 'Hlela sihloko: $1',
-'toc'                     => 'Lokucuketfwe',
-'showtoc'                 => 'khomba',
-'hidetoc'                 => 'fihla',
-'thisisdeleted'           => 'Bona nobe buyisela esimweni $1?',
-'viewdeleted'             => 'Bona $1?',
+'editsection' => 'hlela',
+'editold' => 'hlela',
+'viewsourceold' => 'Bona kwakheka',
+'editlink' => 'hlela',
+'viewsourcelink' => 'Bona kwakheka',
+'editsectionhint' => 'Hlela sihloko: $1',
+'toc' => 'Lokucuketfwe',
+'showtoc' => 'khomba',
+'hidetoc' => 'fihla',
+'thisisdeleted' => 'Bona nobe buyisela esimweni $1?',
+'viewdeleted' => 'Bona $1?',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Likhasi',
@@ -199,27 +199,25 @@ $1',
 'loginlanguagelabel' => 'Lulwimi: $1',
 
 # Search results
-'search-mwsuggest-enabled'  => 'nemibono',
-'search-mwsuggest-disabled' => 'kute mibono',
-'search-relatedarticle'     => 'Lokuhlobene',
-'mwsuggest-disable'         => 'Vala losito/mibono ye AJAX',
-'searcheverything-enable'   => 'Sesha onke ma namespaces',
-'searchrelated'             => 'lokuhlobene',
-'searchall'                 => 'konke',
-'showingresults'            => "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
-'showingresultsnum'         => "Ngaphansi kukhonjiswa {{PLURAL:$3|'''1''' umphumela|'''$3''' miphumela}} kucalwa nga #'''$2'''.",
-'showingresultsheader'      => "{{PLURAL:$5|Umphumela '''$1''' of '''$3'''|Imiphumela '''$1 - $2''' ye '''$3'''}} ya '''$4'''",
-'search-nonefound'          => 'Kute umphume lotfolwe/lofanele lesicelo sakho.',
-'powersearch'               => 'Sesha ngalokuphakeme',
-'powersearch-legend'        => 'Sesha ngalokuphakeme',
-'powersearch-ns'            => 'Sesha ku namespaces:',
-'powersearch-redir'         => 'Makhasi latfumelayo',
-'powersearch-field'         => 'Sesha i',
-'powersearch-togglelabel'   => 'Buka:',
-'powersearch-toggleall'     => 'Konke',
-'powersearch-togglenone'    => 'Kute',
-'search-external'           => 'Sesha ngelithulusi langaphandle',
-'searchdisabled'            => '{{SITENAME}} kusesha kuvinjiwe.
+'search-relatedarticle' => 'Lokuhlobene',
+'mwsuggest-disable' => 'Vala losito/mibono ye AJAX',
+'searcheverything-enable' => 'Sesha onke ma namespaces',
+'searchrelated' => 'lokuhlobene',
+'searchall' => 'konke',
+'showingresults' => "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
+'showingresultsnum' => "Ngaphansi kukhonjiswa {{PLURAL:$3|'''1''' umphumela|'''$3''' miphumela}} kucalwa nga #'''$2'''.",
+'showingresultsheader' => "{{PLURAL:$5|Umphumela '''$1''' of '''$3'''|Imiphumela '''$1 - $2''' ye '''$3'''}} ya '''$4'''",
+'search-nonefound' => 'Kute umphume lotfolwe/lofanele lesicelo sakho.',
+'powersearch' => 'Sesha ngalokuphakeme',
+'powersearch-legend' => 'Sesha ngalokuphakeme',
+'powersearch-ns' => 'Sesha ku namespaces:',
+'powersearch-redir' => 'Makhasi latfumelayo',
+'powersearch-field' => 'Sesha i',
+'powersearch-togglelabel' => 'Buka:',
+'powersearch-toggleall' => 'Konke',
+'powersearch-togglenone' => 'Kute',
+'search-external' => 'Sesha ngelithulusi langaphandle',
+'searchdisabled' => '{{SITENAME}} kusesha kuvinjiwe.
 Ungasesha nge Google.
 Naka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.',
 
@@ -228,8 +226,8 @@ Naka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.',
 
 # Preferences page
 'searchresultshead' => 'Sesha',
-'uid'               => 'Matisi Wemuntfu:',
-'yourlanguage'      => 'Lulwimi:',
+'uid' => 'Matisi Wemuntfu:',
+'yourlanguage' => 'Lulwimi:',
 
 # Special:ListFiles
 'listfiles_date' => 'Lusuku',
@@ -238,7 +236,7 @@ Naka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.',
 
 # File description page
 'filehist-datetime' => 'Lusuku/Sikhatsi',
-'filehist-user'     => 'Umuntfu',
+'filehist-user' => 'Umuntfu',
 
 'brokenredirects-edit' => 'hlela',
 
@@ -263,23 +261,23 @@ Naka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.',
 'listusers-submit' => 'Khomba',
 
 # Watchlist
-'watch'   => 'Gadza',
+'watch' => 'Gadza',
 'unwatch' => 'Yekela kugadza',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Hlela',
-'restriction-move'   => 'Khweshisa',
+'restriction-edit' => 'Hlela',
+'restriction-move' => 'Khweshisa',
 'restriction-create' => 'Create',
 
 # Undelete
 'undelete-search-submit' => 'Sesha',
 
-'sp-contributions-talk'   => 'ingcoco',
+'sp-contributions-talk' => 'ingcoco',
 'sp-contributions-submit' => 'Sesha',
 
 # Block/unblock
 'ipblocklist-submit' => 'Sesha',
-'proxyblocksuccess'  => 'Kwentekile.',
+'proxyblocksuccess' => 'Kwentekile.',
 
 # Move page
 'movelogpage' => 'Khweshisa i-log',
index 68e70a3..65d5e96 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'    => 'Sontaha',
-'monday'    => 'Mantaha',
-'tuesday'   => 'Labobedi',
+'sunday' => 'Sontaha',
+'monday' => 'Mantaha',
+'tuesday' => 'Labobedi',
 'wednesday' => 'Laboraro',
-'thursday'  => 'Labone',
-'friday'    => 'Labohlano',
-'saturday'  => 'Moqebelo',
-'january'   => 'Pherekgong',
-'february'  => 'Hlakola',
-'march'     => 'Hlakubele',
-'april'     => 'Mmesa',
-'may_long'  => 'Motsheanong',
-'june'      => 'Phupjane',
-'july'      => 'Phupu',
-'august'    => 'Phato',
+'thursday' => 'Labone',
+'friday' => 'Labohlano',
+'saturday' => 'Moqebelo',
+'january' => 'Pherekgong',
+'february' => 'Hlakola',
+'march' => 'Hlakubele',
+'april' => 'Mmesa',
+'may_long' => 'Motsheanong',
+'june' => 'Phupjane',
+'july' => 'Phupu',
+'august' => 'Phato',
 'september' => 'Lwetse',
-'october'   => 'Mphalane',
-'november'  => 'Pudungwana',
-'december'  => 'Tshitwe',
-'may-gen'   => 'Motsheanong',
-'jan'       => 'Phere',
-'feb'       => 'Hlako',
-'mar'       => 'Hlaku',
-'apr'       => 'Mmesa',
-'may'       => 'Motshe',
-'jun'       => 'Phupjane',
-'jul'       => 'Phupu',
-'aug'       => 'Phato',
-'sep'       => 'Lwetse',
-'oct'       => 'Mphala',
-'nov'       => 'Pudu',
-'dec'       => 'Tshitwe',
+'october' => 'Mphalane',
+'november' => 'Pudungwana',
+'december' => 'Tshitwe',
+'may-gen' => 'Motsheanong',
+'jan' => 'Phere',
+'feb' => 'Hlako',
+'mar' => 'Hlaku',
+'apr' => 'Mmesa',
+'may' => 'Motshe',
+'jun' => 'Phupjane',
+'jul' => 'Phupu',
+'aug' => 'Phato',
+'sep' => 'Lwetse',
+'oct' => 'Mphala',
+'nov' => 'Pudu',
+'dec' => 'Tshitwe',
 
 # Categories related messages
 'category_header' => 'Dingolwa tse mokgeng wa "$1"',
 
-'mypage'     => 'Leqephe la ka',
-'mytalk'     => 'Leqephe la ka la moqoqo',
+'mypage' => 'Leqephe la ka',
+'mytalk' => 'Leqephe la ka la moqoqo',
 'navigation' => 'Eya ho',
 
 # Cologne Blue skin
 'faq' => 'Dipotso-mehla',
 
-'returnto'       => 'Kgutlela ho $1.',
-'tagline'        => 'E tswa ho {{SITENAME}}',
-'search'         => 'Fuputsa',
-'history'        => 'Nalane',
-'history_short'  => 'Nalane',
-'newpage'        => 'Leqephe le letjha',
-'talkpage'       => 'Qoqa ka leqephe lena',
-'talk'           => 'Moqoqo',
-'categorypage'   => 'Mpontshe leqephe la mekga',
+'returnto' => 'Kgutlela ho $1.',
+'tagline' => 'E tswa ho {{SITENAME}}',
+'search' => 'Fuputsa',
+'history' => 'Nalane',
+'history_short' => 'Nalane',
+'newpage' => 'Leqephe le letjha',
+'talkpage' => 'Qoqa ka leqephe lena',
+'talk' => 'Moqoqo',
+'categorypage' => 'Mpontshe leqephe la mekga',
 'otherlanguages' => 'Ka maleme a mang',
-'jumptosearch'   => 'phuputso',
+'jumptosearch' => 'phuputso',
 
 # 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).
-'mainpage'             => 'Leqephe la pele',
+'mainpage' => 'Leqephe la pele',
 'mainpage-description' => 'Leqephe la pele',
-'portal'               => 'Potjho e kopano',
-'portal-url'           => 'Project:Potjho e kopano',
+'portal' => 'Potjho e kopano',
+'portal-url' => 'Project:Potjho e kopano',
 
-'retrievedfrom'   => 'E tswa ho "$1"',
+'retrievedfrom' => 'E tswa ho "$1"',
 'newmessageslink' => 'melaetsa e metjha',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Sengolwa',
+'nstab-main' => 'Sengolwa',
 'nstab-mediawiki' => 'Molaetsa',
-'nstab-help'      => 'Leqephe la thusa',
-'nstab-category'  => 'Mokga',
+'nstab-help' => 'Leqephe la thusa',
+'nstab-category' => 'Mokga',
 
 # Login and logout pages
-'yourpasswordagain'  => 'Ngola lepetjo hape',
+'yourpasswordagain' => 'Ngola lepetjo hape',
 'remembermypassword' => 'O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'nologinlink'        => 'Ingodisetse',
-'createaccount'      => 'Ingodisetse',
-'gotaccount'         => "O se o ingodisitse? '''$1'''.",
-'createaccountmail'  => 'ka e-mail',
-'badretype'          => 'Mapetjo a mabedi o a ngotseng ha a tshwane.',
-'mailmypassword'     => 'Nthomele password ya ka ka email',
+'nologinlink' => 'Ingodisetse',
+'createaccount' => 'Ingodisetse',
+'gotaccount' => "O se o ingodisitse? '''$1'''.",
+'createaccountmail' => 'ka e-mail',
+'badretype' => 'Mapetjo a mabedi o a ngotseng ha a tshwane.',
+'mailmypassword' => 'Nthomele password ya ka ka email',
 
 # Change password dialog
 'oldpassword' => 'Lepetjo la kgale:',
 'newpassword' => 'Lepetjo le letjha:',
-'retypenew'   => 'Ngola lepetjo le letjha hape:',
+'retypenew' => 'Ngola lepetjo le letjha hape:',
 
 # Edit pages
-'savearticle'  => 'Le boloke',
-'showpreview'  => 'Mpontshe hore le tlo ba jwang',
-'showdiff'     => 'Mpontshe hore ho tlo fetoha eng',
+'savearticle' => 'Le boloke',
+'showpreview' => 'Mpontshe hore le tlo ba jwang',
+'showdiff' => 'Mpontshe hore ho tlo fetoha eng',
 'accmailtitle' => 'Lepetjo le rometswe.',
-'accmailtext'  => 'Lepetjo la "$1" le se le rometswe ho $2.',
-'note'         => "'''Ela hloko:'''",
+'accmailtext' => 'Lepetjo la "$1" le se le rometswe ho $2.',
+'note' => "'''Ela hloko:'''",
 
 # Search results
 'powersearch' => 'Fuputsa',
 
 # Preferences page
-'changepassword'    => 'Fetola lepetjo',
+'changepassword' => 'Fetola lepetjo',
 'searchresultshead' => 'Phuputso',
-'allowemail'        => 'Dumella batho ba bang hore ba nthomelle di-email',
+'allowemail' => 'Dumella batho ba bang hore ba nthomelle di-email',
 
 # MIME search
 'download' => 'Jarolla',
@@ -125,39 +125,39 @@ $messages = array(
 
 # Miscellaneous special pages
 'mostcategories' => 'Dingolwa tse mekga e mengata',
-'shortpages'     => 'Maqephe a makgutshwane',
-'longpages'      => 'Maqephe a matelele',
-'newpages'       => 'Maqephe a matjha',
+'shortpages' => 'Maqephe a makgutshwane',
+'longpages' => 'Maqephe a matelele',
+'newpages' => 'Maqephe a matjha',
 
 # Special:AllPages
 'allpages' => 'Maqephe ohle',
 
 # Special:Categories
-'categories'         => 'Mekga',
+'categories' => 'Mekga',
 '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]].',
 
 # E-mail user
-'emailuser'     => 'Romela motho enwa email',
-'emailfrom'     => 'E tswa ho:',
-'emailto'       => 'Ho:',
-'emailsubject'  => 'Ka:',
-'emailmessage'  => 'O re:',
-'emailsend'     => 'E romele',
-'emailsent'     => 'E rometswe',
+'emailuser' => 'Romela motho enwa email',
+'emailfrom' => 'E tswa ho:',
+'emailto' => 'Ho:',
+'emailsubject' => 'Ka:',
+'emailmessage' => 'O re:',
+'emailsend' => 'E romele',
+'emailsent' => 'E rometswe',
 'emailsenttext' => 'Email ya molaetsa wa hao e se e rometswe.',
 
 # Contributions
 'contributions' => 'Tse ngotsweng ke motho enwa',
-'mycontris'     => 'Tse ngotsweng ke nna',
+'mycontris' => 'Tse ngotsweng ke nna',
 
 # Block/unblock
-'ipbreason'     => 'Lebaka',
+'ipbreason' => 'Lebaka',
 'infiniteblock' => 'ho eya ho ile',
 
 # Namespace 8 related
-'allmessagesname'    => 'Lebitso',
+'allmessagesname' => 'Lebitso',
 'allmessagesdefault' => 'Se neng se ngotswe pele',
 'allmessagescurrent' => 'Se ngotsweng hona jwale',
 
index e5916f4..ad7a991 100644 (file)
@@ -443,7 +443,7 @@ Die Administrator, die dän Skrieuwtougriep speerde, roate foulgjenden Gruund an
 # Login and logout pages
 'logouttext' => "'''Du bäst nu oumälded.'''
 
-Du koast {{SITENAME}} nu anonym fääre benutsje, of die fonnäien unner dänsälge of n uur Benutsernoome wier [[Special:UserLogin|anmäldje]].
+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 ==
 
@@ -1007,8 +1007,6 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa
 'search-interwiki-caption' => 'Susterprojekte',
 'search-interwiki-default' => '$1 Resultoate:',
 'search-interwiki-more' => '(wiedere)',
-'search-mwsuggest-enabled' => 'mäd Foarsleeke',
-'search-mwsuggest-disabled' => 'neen Foarsleeke',
 'search-relatedarticle' => 'Früünde',
 'mwsuggest-disable' => 'Foarsleeke truch Ajax deaktivierje',
 'searcheverything-enable' => 'Säik in aal Noomensruume',
@@ -3301,4 +3299,8 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 'revdelete-unrestricted' => 'Ienskränkengen foar Administratore wächhoald',
 'newuserlog-byemail' => 'dät Paaswoud wuud uur E-Mail fersoand',
 
+# Search suggestions
+'searchsuggest-search' => 'Säik',
+'searchsuggest-containing' => 'Fultextsäike ätter ...',
+
 );
index 6b8b243..f847941 100644 (file)
@@ -518,7 +518,7 @@ Pikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=e
 # Login and logout pages
 'logouttext' => "'''Anjeun ayeuna geus kaluar log.'''
 
-Anjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa [[Special:UserLogin|asup log deui]] salaku pamaké nu sarua atawa nu séjén deui.
+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.
@@ -1073,8 +1073,6 @@ Pastikeun yén ieu parobahan bisa miara jujutan kaca sagemblengna.',
 'search-interwiki-caption' => 'Proyék sawargi',
 'search-interwiki-default' => '$1 hasil:',
 'search-interwiki-more' => '(saterusna)',
-'search-mwsuggest-enabled' => 'jeung bongbolongan',
-'search-mwsuggest-disabled' => 'euweuh bongbolongan',
 'search-relatedarticle' => 'Patula-patali',
 'mwsuggest-disable' => 'Tumpurkeun usulan AJAX',
 'searcheverything-enable' => 'Pilari di sakabéh rohangaran',
@@ -3062,6 +3060,10 @@ Coba ku sawangan normal.',
 'feedback-message' => 'Surat:',
 'feedback-cancel' => 'Bolay',
 
+# Search suggestions
+'searchsuggest-search' => 'Sungsi',
+'searchsuggest-containing' => 'ngandung...',
+
 # API errors
 'api-error-file-too-large' => 'Berkas nu dikirim gedé teuing.',
 'api-error-filename-tooshort' => 'Ngaran berkas pondok teuing.',
index 304069d..8a57dcd 100644 (file)
@@ -37,6 +37,7 @@
  * @author Petter Strandmark
  * @author Poxnar
  * @author Purodha
+ * @author Rotsee
  * @author S.Örvarr.S
  * @author Sannab
  * @author Sertion
@@ -173,127 +174,127 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__INGENINNEHÅLLSFÖRTECKNING__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__INGETGALLERI__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ALLTIDINNEHÅLLSFÖRTECKNING__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__INNEHÅLLSFÖRTECKNING__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__INTEREDIGERASEKTION__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__INGENRUBRIK__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'NUVARANDEMÅNAD', 'NUMÅNAD', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'NUVARANDEMÅNAD1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'NUVARANDEMÅNADSNAMN', 'NUMÅNADSNAMN', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', 'NUVARANDEMÅNADKORT', 'NUMÅNADKORT', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NUVARANDEDAG', 'NUDAG', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NUVARANDEDAG2', 'NUDAG2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'NUVARANDEDAGSNAMN', 'NUDAGSNAMN', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NUVARANDEÅR', 'NUÅR', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'NUVARANDETID', 'NUTID', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'NUVARANDETIMME', 'NUTIMME', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'LOKALMÅNAD', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'LOKALMÅNAD1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'LOKALMÅNADSNAMN', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'LOKALMÅNADKORT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'LOKALDAG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'LOKALDAGSNAMN', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'LOKALTID', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'LOKALTIMME', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'ANTALSIDOR', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'ANTALARTIKLAR', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'ANTALFILER', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'ANTALANVÄNDARE', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'ANTALAKTIVAANVÄNDARE', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'ANTALREDIGERINGAR', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'ANTALVISNINGAR', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SIDNAMN', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SIDNAMNE', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'NAMNRYMD', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'NAMNRYMDE', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'DISKUSSIONSRYMD', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'DISKUSSIONSRYMDE', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ARTIKELRYMD', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ARTIKELRYMDE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'HELASIDNAMNET', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'HELASIDNAMNETE', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'UNDERSIDNAMN', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'UNDERSIDNAMNE', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'GRUNDSIDNAMN', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'GRUNDSIDNAMNE', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'DISKUSSIONSSIDNAMN', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'DISKUSSIONSSIDNAMNE', 'TALKPAGENAMEE' ),
-       'msg'                     => array( '0', 'MED:', 'MSG:' ),
-       'subst'                   => array( '0', 'BYT:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'MEDNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'höger', 'right' ),
-       'img_left'                => array( '1', 'vänster', 'left' ),
-       'img_none'                => array( '1', 'ingen', 'none' ),
-       'img_center'              => array( '1', 'centrerad', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'inramad', 'ram', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'ramlös', 'frameless' ),
-       'img_page'                => array( '1', 'sida=$1', 'sida $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'stående', 'stående=$1', 'stående $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'kantlinje', 'border' ),
-       'img_baseline'            => array( '1', 'baslinje', 'baseline' ),
-       'img_sub'                 => array( '1', 'ned', 'sub' ),
-       'img_super'               => array( '1', 'upp', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'topp', 'top' ),
-       'img_text_top'            => array( '1', 'text-topp', 'text-top' ),
-       'img_middle'              => array( '1', 'mitten', 'middle' ),
-       'img_bottom'              => array( '1', 'botten', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'text-botten', 'text-bottom' ),
-       'img_link'                => array( '1', 'länk=$1', 'link=$1' ),
-       'sitename'                => array( '1', 'SAJTNAMN', 'SITENAMN', 'SITENAME' ),
-       'ns'                      => array( '0', 'NR:', 'NS:' ),
-       'localurl'                => array( '0', 'LOKALURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
-       'servername'              => array( '0', 'SERVERNAMN', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'SKRIPTSÖKVÄG', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'KÖN:', 'GENDER:' ),
-       'currentweek'             => array( '1', 'NUVARANDEVECKA', 'NUVECKA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'NUVARANDEVECKODAG', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'LOKALVECKA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'LOKALVECKODAG', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'REVISIONSID', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'REVISIONSDAG', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'REVISIONSDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'REVISIONSMÅNAD', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'REVISIONSÅR', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'REVISIONSTIDSSTÄMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'REVISIONSANVÄNDARE', 'REVISIONUSER' ),
-       'fullurl'                 => array( '0', 'FULLTURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'FULLTURLE:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'LBFÖRST:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'UCFIRST', 'SBFÖRST:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'LB:', 'LC:' ),
-       'uc'                      => array( '0', 'SB:', 'UC:' ),
-       'raw'                     => array( '0', 'RÅ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'VISATITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__NYTTAVSNITTLÄNK__', '__NEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'NUVARANDEVERSION', 'NUVERSION', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'NUTIDSTÄMPEL', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'LOKALTIDSTÄMPEL', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'INNEHÅLLSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'SIDORINAMNRYMD:', 'SIDORINR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'ANTALADMINS', 'ANTALADMINISTRATÖRER', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'FORMATERANUM', 'FORMATERATAL', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'STANDARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'FILSÖKVÄG:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'tagg', 'tag' ),
-       'hiddencat'               => array( '1', '__DOLDKAT__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'SIDORIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SIDSTORLEK', 'PAGESIZE' ),
-       'index'                   => array( '1', '__INDEXERA__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__INTEINDEXERA_', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'ANTALIGRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATISKOMDIRIGERING__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'SKYDDSNIVÅ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formateradatum', 'datumformat', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#OMDIRIGERING', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__INGENINNEHÅLLSFÖRTECKNING__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__INGETGALLERI__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ALLTIDINNEHÅLLSFÖRTECKNING__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__INNEHÅLLSFÖRTECKNING__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__INTEREDIGERASEKTION__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__INGENRUBRIK__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'NUVARANDEMÅNAD', 'NUMÅNAD', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'NUVARANDEMÅNAD1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'NUVARANDEMÅNADSNAMN', 'NUMÅNADSNAMN', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', 'NUVARANDEMÅNADKORT', 'NUMÅNADKORT', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NUVARANDEDAG', 'NUDAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NUVARANDEDAG2', 'NUDAG2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'NUVARANDEDAGSNAMN', 'NUDAGSNAMN', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NUVARANDEÅR', 'NUÅR', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'NUVARANDETID', 'NUTID', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'NUVARANDETIMME', 'NUTIMME', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'LOKALMÅNAD', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'LOKALMÅNAD1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'LOKALMÅNADSNAMN', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'LOKALMÅNADKORT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'LOKALDAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALDAG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'LOKALDAGSNAMN', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'LOKALTÅR', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'LOKALTID', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'LOKALTIMME', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'ANTALSIDOR', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'ANTALARTIKLAR', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ANTALFILER', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ANTALANVÄNDARE', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ANTALAKTIVAANVÄNDARE', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ANTALREDIGERINGAR', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ANTALVISNINGAR', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SIDNAMN', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SIDNAMNE', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'NAMNRYMD', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'NAMNRYMDE', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'DISKUSSIONSRYMD', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'DISKUSSIONSRYMDE', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ARTIKELRYMD', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ARTIKELRYMDE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'HELASIDNAMNET', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HELASIDNAMNETE', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'UNDERSIDNAMN', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'UNDERSIDNAMNE', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'GRUNDSIDNAMN', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'GRUNDSIDNAMNE', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'DISKUSSIONSSIDNAMN', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'DISKUSSIONSSIDNAMNE', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'MED:', 'MSG:' ),
+       'subst'                     => array( '0', 'BYT:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'MEDNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'höger', 'right' ),
+       'img_left'                  => array( '1', 'vänster', 'left' ),
+       'img_none'                  => array( '1', 'ingen', 'none' ),
+       'img_center'                => array( '1', 'centrerad', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'inramad', 'ram', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'ramlös', 'frameless' ),
+       'img_page'                  => array( '1', 'sida=$1', 'sida $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'stående', 'stående=$1', 'stående $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'kantlinje', 'border' ),
+       'img_baseline'              => array( '1', 'baslinje', 'baseline' ),
+       'img_sub'                   => array( '1', 'ned', 'sub' ),
+       'img_super'                 => array( '1', 'upp', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'topp', 'top' ),
+       'img_text_top'              => array( '1', 'text-topp', 'text-top' ),
+       'img_middle'                => array( '1', 'mitten', 'middle' ),
+       'img_bottom'                => array( '1', 'botten', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'text-botten', 'text-bottom' ),
+       'img_link'                  => array( '1', 'länk=$1', 'link=$1' ),
+       'sitename'                  => array( '1', 'SAJTNAMN', 'SITENAMN', 'SITENAME' ),
+       'ns'                        => array( '0', 'NR:', 'NS:' ),
+       'localurl'                  => array( '0', 'LOKALURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'LOKALURLE:', 'LOCALURLE:' ),
+       'servername'                => array( '0', 'SERVERNAMN', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'SKRIPTSÖKVÄG', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'KÖN:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'NUVARANDEVECKA', 'NUVECKA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'NUVARANDEVECKODAG', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'LOKALVECKA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'LOKALVECKODAG', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'REVISIONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIONSDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIONSDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIONSMÅNAD', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'REVISIONSÅR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIONSTIDSSTÄMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISIONSANVÄNDARE', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'FULLTURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'FULLTURLE:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'LBFÖRST:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'UCFIRST', 'SBFÖRST:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'LB:', 'LC:' ),
+       'uc'                        => array( '0', 'SB:', 'UC:' ),
+       'raw'                       => array( '0', 'RÅ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'VISATITEL', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__NYTTAVSNITTLÄNK__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'NUVARANDEVERSION', 'NUVERSION', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'NUTIDSTÄMPEL', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'LOKALTIDSTÄMPEL', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#SPRÅK:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'INNEHÅLLSSPRÅK', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'SIDORINAMNRYMD:', 'SIDORINR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'ANTALADMINS', 'ANTALADMINISTRATÖRER', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'FORMATERANUM', 'FORMATERATAL', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'STANDARDSORTERING:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FILSÖKVÄG:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'tagg', 'tag' ),
+       'hiddencat'                 => array( '1', '__DOLDKAT__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'SIDORIKATEGORI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SIDSTORLEK', 'PAGESIZE' ),
+       'index'                     => array( '1', '__INDEXERA__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__INTEINDEXERA_', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'ANTALIGRUPP', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATISKOMDIRIGERING__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'SKYDDSNIVÅ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formateradatum', 'datumformat', 'formatdate', 'dateformat' ),
 );
 
 $linkTrail = '/^([a-zåäöéÅÄÖÉ]+)(.*)$/sDu';
@@ -476,7 +477,7 @@ $messages = array(
 'vector-action-protect' => 'Skrivskydda',
 'vector-action-undelete' => 'Återställ',
 'vector-action-unprotect' => 'Ändra skydd',
-'vector-simplesearch-preference' => 'Aktivera utökade sökförslag (endast Vector-utseendet)',
+'vector-simplesearch-preference' => 'Aktivera förenklat sökfält (endast Vector-utseendet)',
 'vector-view-create' => 'Skapa',
 'vector-view-edit' => 'Redigera',
 'vector-view-history' => 'Visa historik',
@@ -638,7 +639,7 @@ I [[Special:SpecialPages|listan över specialsidor]] kan du se vilka specialsido
 'error' => 'Fel',
 'databaseerror' => 'Databasfel',
 'dberrortext' => 'Ett syntaxfel i databasfrågan har uppstått.
-Detta kan indikera en bug i mjukvaran.
+Detta kan indikera en bugg i mjukvaran.
 Den senaste databasfrågan att köras var:
 <blockquote><tt>$1</tt></blockquote>
 från funktionen "<tt>$2</tt>".
@@ -695,9 +696,11 @@ Den kan innehålla ett eller flera tecken som inte får användas i sidtitlar.',
 'protectedpagetext' => 'Den här sidan har skrivskyddats för att förhindra redigering.',
 '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, och är skrivskyddad för att förebygga missbruk.',
-'editinginterface' => "'''Varning:''' Du redigerar en sida som används till texten i gränssnittet. Ändringar på denna sida kommer att påverka gränssnittets utseende för alla användare.
-För översättningar, använd gärna [//translatewiki.net/wiki/Main_Page?setlang=sv translatewiki.net], översättningsprojektet för MediaWiki.",
+'protectedinterface' => 'Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.
+För att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.',
+'editinginterface' => "'''Varning:''' Du redigerar en sida som används till texten i gränssnittet.
+Ändringar på denna sida kommer att påverka gränssnittets utseende för alla användare på denna wiki.
+För att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], översättningsprojektet för MediaWiki.",
 'sqlhidden' => '(gömd SQL-förfrågan)',
 'cascadeprotected' => 'Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med "kaskaderande skydd":
 $2',
@@ -723,7 +726,7 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
 # Login and logout pages
 'logouttext' => "'''Du är nu utloggad.'''
 
-Du kan fortsätta att använda {{SITENAME}} anonymt, eller så kan du [[Special:UserLogin|logga in igen]] som samma eller som en annan användare.
+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.
@@ -772,8 +775,8 @@ Användarnamn är skiftlägeskänsliga.
 Kontrollera din stavning, eller [[Special:UserLogin/signup|skapa ett nytt konto]].',
 'nosuchusershort' => 'Det finns ingen användare som heter "$1". Kontrollera att du stavat rätt.',
 'nouserspecified' => 'Du måste ange ett användarnamn.',
-'login-userblocked' => 'Denna användare är blockerad. Login inte tillåtet.',
-'wrongpassword' => 'Lösenordet du angav är felaktigt. Försök igen',
+'login-userblocked' => 'Denna användare är blockerad. Inloggning är inte tillåtet.',
+'wrongpassword' => 'Lösenordet du angav är felaktigt. Försök igen.',
 'wrongpasswordempty' => 'Lösenordet som angavs var blankt. Var god försök igen.',
 'passwordtooshort' => 'Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.',
 'password-name-match' => 'Ditt lösenord måste vara olikt ditt användarnamn.',
@@ -971,8 +974,8 @@ Om du är en anonym användare och känner att irrelevanta kommentarer har rikta
 'noarticletext' => 'Det finns just nu ingen text på denna sida.
 Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i loggarna], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} redigera denna sida]</span>.',
 'noarticletext-nopermission' => 'Det finns för tillfället ingen text på denna sida.
-Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]] i andra sidor,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relevanta loggar]</span>.',
+Du kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]]  andra sidor,
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar]</span>.',
 'missing-revision' => 'Revisionen #$1 av sidan med namnet "{{PAGENAME}}" finns inte.
 
 Detta orsakas vanligen av efter en gammal historiklänk till en sida som har raderats.
@@ -981,11 +984,10 @@ Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'userpage-userdoesnotexist-view' => 'Kontot "$1" är inte registrerat.',
 'blocked-notice-logextract' => 'Användaren är blockerad.
 Orsaken till senaste blockeringen kan ses nedan:',
-'clearyourcache' => "'''OBS:''' Sedan du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.
+'clearyourcache' => "'''OBS:''' Efter du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.
 *'''Firefox / Safari:''' Håll ned ''Skift'' och klicka på ''Uppdatera sidan'' eller tryck antingen ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på Mac)
 *'''Google Chrome:''' Tryck ''Ctrl-Skift-R''  (''⌘-Shift-R'' på Mac)
 *'''Internet Explorer:'''  Håll ned ''Ctrl'' och klicka på ''Uppdatera'' eller tryck ''Ctrl-F5''
-*'''Konqueror:''' Klicka på ''Reload'' eller tryck på ''F5''
 *'''Opera:''' Rensa cachen i ''Verktyg → Inställningar''",
 'usercssyoucanpreview' => "'''Tips:''' Använd \"{{int:showpreview}}\"-knappen för att testa din nya css innan du sparar.",
 'userjsyoucanpreview' => "'''Tips:''' Använd \"{{int:showpreview}}\"-knappen för att testa din nya JavaScript innan du sparar.",
@@ -1241,7 +1243,8 @@ Vänligen kontrollera loggarna.',
 'revdelete-only-restricted' => 'Fel vid döljning av objekt daterat $2, $1: du kan inte undanhålla objekt från att visas för administratörer utan att också välja en av de övriga visningsalternativen.',
 'revdelete-reason-dropdown' => '*Vanliga orsaker till radering
 ** Brott mot copyright
-** Opassande personupplysningar
+** Opassande kommentar eller personupplysningar
+** Opassande användarnamn
 ** Möjligt ärekränkande uppgifter',
 'revdelete-otherreason' => 'Annan/ytterligare anledning:',
 'revdelete-reasonotherlist' => 'Annan anledning',
@@ -1293,6 +1296,10 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.',
 'editundo' => 'gör ogjord',
 'diff-multi' => '({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en användare|$2 användare}} visas inte)',
 'diff-multi-manyusers' => '({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 användare visas inte)',
+'difference-missing-revision' => '{{PLURAL:$2|En revision|$2 revisioner}} av denna skillnad ($1) kunde inte hittas.
+
+Detta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.
+Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].',
 
 # Search results
 'searchresults' => 'Sökresultat',
@@ -1335,8 +1342,6 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.',
 'search-interwiki-caption' => 'Systerprojekt',
 'search-interwiki-default' => 'Resultat i $1:',
 'search-interwiki-more' => '(mer)',
-'search-mwsuggest-enabled' => 'med förslag',
-'search-mwsuggest-disabled' => 'inga förslag',
 'search-relatedarticle' => 'Relaterad',
 'mwsuggest-disable' => 'Avaktivera AJAX-förslag',
 'searcheverything-enable' => 'Sök i alla namnrymder',
@@ -1434,7 +1439,7 @@ Här är ett slumpmässigt genererat värde som du kan använda: $1',
 'timezoneregion-indian' => 'Indiska oceanen',
 'timezoneregion-pacific' => 'Stilla havet',
 'allowemail' => 'Tillåt e-post från andra användare',
-'prefs-searchoptions' => 'Sökalternativ',
+'prefs-searchoptions' => 'Sök',
 'prefs-namespaces' => 'Namnrymder',
 'defaultns' => 'Sök annars i dessa namnrymder:',
 'default' => 'ursprungsinställning',
@@ -1860,7 +1865,7 @@ Om problemet kvarstår, kontakta en [[Special:ListUsers/sysop|administratör]].'
 'backend-fail-internal' => 'Ett okänt fel uppstod i lagringssystemet "$1".',
 'backend-fail-contenttype' => 'Kunde inte bestämma innehållstypen för filen att spara på "$1".',
 'backend-fail-batchsize' => 'Lagringssystemet gav en batch på $1 fil{{PLURAL:$1|operation|operationer}}; gränsen är $2 {{PLURAL:$2|operation|operationer}}.',
-'backend-fail-usable' => 'Kunde inte skriva filen $1 beroende på otillräckliga behörigheter eller saknade kataloger/containrar.',
+'backend-fail-usable' => 'Kunde inte läsa eller skriva filen "$1" på grund av otillräckliga behörigheter eller saknade kataloger/containrar.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunde inte ansluta till journaldatabasen för lagringssystemet "$1".',
@@ -1993,6 +1998,7 @@ Kanske vill du redigera beskrivningen på dess [$2 filbeskrivningssida] där.',
 'shared-repo-from' => 'från $1',
 'shared-repo' => 'en gemensam filförvaring',
 'filepage.css' => '/* CSS som skrivs här inkluderas på filbeskrivningssidan, även på utländska klientwikis */',
+'upload-disallowed-here' => 'Du kan inte skriva över denna bild.',
 
 # File reversion
 'filerevert' => 'Återställ $1',
@@ -2073,8 +2079,8 @@ Innan mallarna raderas, kontrollera att det inte finns andra länkar till dem.',
 
 'disambiguations' => 'Sidor som länkar till förgreningssidor',
 'disambiguationspage' => 'Template:Förgrening',
-'disambiguations-text' => "Följande sidor länkar till ''förgreningssidor''.
-Länkarna bör troligtvis ändras så att de länkar till en artikel istället.<br />
+'disambiguations-text' => "Följande sidorna innehåller minst en länk till en '''förgreningssida'''.
+De bör troligtvis ändras så att de länkar till en mer passande sida istället.<br />
 En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dubbla omdirigeringar',
@@ -2099,6 +2105,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategorier}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|länk|länkar}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmar}}',
 'nrevisions' => '$1 {{PLURAL:$1|version|versioner}}',
@@ -2127,6 +2134,7 @@ En sida anses vara en förgreningssida om den inkluderar en mall som länkas til
 'mostlinkedtemplates' => 'Mest använda mallar',
 'mostcategories' => 'Sidor med flest kategorier',
 'mostimages' => 'Filer med flest länkar till sig',
+'mostinterwikis' => 'Sidor med flest interwikis',
 'mostrevisions' => 'Sidor med flest ändringar',
 'prefixindex' => 'Alla sidor med prefix',
 'prefixindex-namespace' => 'Alla sidor med prefix ($1 namnrymder)',
@@ -2272,6 +2280,8 @@ Det kan finnas [[{{MediaWiki:Listgrouprights-helppage}}|ytterligare information]
 'mailnologin' => 'Ingen adress att skicka till',
 'mailnologintext' => 'För att kunna skicka e-post till andra användare, måste du vara [[Special:UserLogin|inloggad]] och ha angivit en korrekt e-postadress i dina [[Special:Preferences|användarinställningar]].',
 'emailuser' => 'Skicka e-post till den här användaren',
+'emailuser-title-target' => 'Skicka e-post till denna {{GENDER:$1|användare}}',
+'emailuser-title-notarget' => 'E-postanvändare',
 'emailpage' => 'Skicka e-post till användare',
 'emailpagetext' => 'Du kan använda det här formuläret för att skicka e-post till den här användaren.
 Den e-postadress du har angivit i [[Special:Preferences|dina användarinställningar]] kommer att visas som "Från"-adress i meddelandet, så att mottagaren har möjlighet att svara direkt till dig.',
@@ -2605,8 +2615,8 @@ Den senaste posten i blockeringsloggen visas nedan som referens:',
 
 # Block/unblock
 'autoblockid' => 'Autoblockera #$1',
-'block' => 'Blockera användaren',
-'unblock' => 'Avblockera användaren',
+'block' => 'Blockera användare',
+'unblock' => 'Upphäv blockering av användare',
 'blockip' => 'Blockera användare',
 'blockip-title' => 'Blockera användare',
 'blockip-legend' => 'Blockera användare',
@@ -2908,6 +2918,7 @@ All överföring mellan wikier (transwiki) listas i  [[Special:Log/import|import
 'import-interwiki-templates' => 'Inkludera alla mallar',
 'import-interwiki-submit' => 'Importera',
 'import-interwiki-namespace' => 'Målnamnrymd:',
+'import-interwiki-rootpage' => 'Destinationens grundsida (valfri):',
 'import-upload-filename' => 'Filnamn:',
 'import-comment' => 'Kommentar:',
 'importtext' => 'Var god exportera filen från ursprungs-wikin med hjälp av [[Special:Export|exporteringsverktyget]].
@@ -2940,6 +2951,9 @@ 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-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.',
 
 # Import log
 'importlogpage' => 'Importlogg',
@@ -2951,7 +2965,6 @@ Spara den på din dator och ladda upp den här.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript-testning',
-'javascripttest-disabled' => 'Denna funktion har inte aktiverats på denna wiki.',
 'javascripttest-title' => 'Kör $1 tester',
 'javascripttest-pagetext-noframework' => 'Denna sida är reserverat för att köra JavaScript-tester.',
 'javascripttest-pagetext-unknownframework' => 'Okänd testmiljö "$1".',
@@ -3093,11 +3106,34 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-header-edits' => 'Redigeringar',
+'pageinfo-header-basic' => 'Grundläggande information',
+'pageinfo-header-edits' => 'Redigeringshistorik',
+'pageinfo-header-restrictions' => 'Sidskydd',
+'pageinfo-header-properties' => 'Sidegenskaper',
+'pageinfo-display-title' => 'Visningstitel',
+'pageinfo-default-sort' => 'Standardsorteringsnyckel',
+'pageinfo-length' => 'Sidlängd (i byte)',
+'pageinfo-article-id' => 'Sid-ID',
+'pageinfo-robot-policy' => 'Sökmotordirektiv',
+'pageinfo-robot-index' => 'Indexerbar',
+'pageinfo-robot-noindex' => 'Inte indexerbar',
 'pageinfo-views' => 'Antal visningar',
 'pageinfo-watchers' => 'Antal användare som bevakar sidan',
-'pageinfo-edits' => 'Antal redigeringar',
-'pageinfo-authors' => 'Antal olika författare',
+'pageinfo-redirects-name' => 'Omdirigeringar till denna sida',
+'pageinfo-subpages-name' => 'Undersidor till denna sida',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringar}}; $3 {{PLURAL:$3|icke-omdirigering|icke-omdirigeringar}})',
+'pageinfo-firstuser' => 'Sidskapare',
+'pageinfo-firsttime' => 'Datum när sidan skapades',
+'pageinfo-lastuser' => 'Senaste redigeraren',
+'pageinfo-lasttime' => 'Datum för senaste redigeringen',
+'pageinfo-edits' => 'Totalt antal redigeringar',
+'pageinfo-authors' => 'Totalt antal olika författare',
+'pageinfo-recent-edits' => 'Antal nyliga redigeringar (inom de senaste $1)',
+'pageinfo-recent-authors' => 'Antal nyliga olika författare',
+'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-toolboxlink' => 'Sidinformation',
 
 # Skin names
 'skinname-standard' => 'Standard',
@@ -3152,6 +3188,7 @@ Om du kör den kan din dator skadas.",
 'file-info-size-pages' => '$1 × $2 pixlar, filstorlek: $3, MIME-typ: $4, $5 {{PLURAL:$5|sida|sidor}}',
 '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',
 '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.',
@@ -3161,6 +3198,8 @@ Om du kör den kan din dator skadas.",
 'file-info-png-looped' => 'upprepad',
 'file-info-png-repeat' => 'spelad $1 {{PLURAL:$1|gång|gånger}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bild|bilder}}',
+'file-no-thumb-animation' => "'''OBS: På grund av tekniska begränsningar kommer inte miniatyrer av denna fil animeras.'''",
+'file-no-thumb-animation-gif' => "'''OBS: På grund av tekniska begränsningar kommer inte miniatyrer av GIF-bilder med hög upplösning som denna animeras.'''",
 
 # Special:NewFiles
 'newimages' => 'Galleri över nya filer',
@@ -3674,6 +3713,7 @@ Denna bekräftelsekod kommer att sluta fungera efter $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-inklusion är inte aktiverad]',
 'scarytranscludefailed' => '[Hämtning av mall för $1 misslyckades]',
+'scarytranscludefailed-httpstatus' => '[Hämtning av mall för $1 misslyckades: HTTP $2]',
 'scarytranscludetoolong' => '[För lång URL]',
 
 # Delete conflict
@@ -3952,6 +3992,10 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'feedback-bugcheck' => 'Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].',
 'feedback-bugnew' => 'Jag kontrollerade. Rapportera ett nytt fel',
 
+# Search suggestions
+'searchsuggest-search' => 'Sök',
+'searchsuggest-containing' => 'innehåller...',
+
 # API errors
 'api-error-badaccess-groups' => 'Du får inte ladda upp filer till denna wiki.',
 'api-error-badtoken' => 'Internt fel: felaktig token.',
index 4050064..df33d64 100644 (file)
@@ -527,7 +527,7 @@ Sababu zilizotolewa ni "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Umetoka kwenye akaunti yako.'''
 
-Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza [[Special:UserLogin|kuingia tena]] kwenye akaunti yako. Kumbuka kwamba kurasa nyingine zitaendelea kuonekana kana kwamba bado hujatoka kwenye akaunti yako, hadi utakaposafisha kache ya kivinjari.",
+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}}]].',
@@ -1098,8 +1098,6 @@ Tazama [[Special:BlockList|IP block orodha ya uzuio wa IP]] kuona orodha ya zuio
 'search-interwiki-caption' => 'Miradi ya jumuia',
 'search-interwiki-default' => 'Matokeo toka $1:',
 'search-interwiki-more' => '(zaidi)',
-'search-mwsuggest-enabled' => 'na mapendekezo',
-'search-mwsuggest-disabled' => 'bila makendekezo',
 'search-relatedarticle' => 'Zingine zinazofanana',
 'mwsuggest-disable' => 'Kutoonyesha mapendekezo ya AJAX',
 'searcheverything-enable' => 'Tafuta katika maeneo yote ya wiki',
@@ -1498,7 +1496,7 @@ Tafadhali uhakikishe kwamba ni kweli unataka kupakia faili hili.',
 'windows-nonascii-filename' => 'Wiki hii haiwezi kutumia majina ya mafaili yenye herufi maalumu.',
 'fileexists' => 'Faili lenye jina hili lipo tayari, tafadhali tazama <strong>[[:$1]]</strong> ikiwa una mashaka kuhusu kulibadilisha.
 [[$1|thumb]]',
-'filepageexists' => 'Ukurasa wa maelezo kwa ajili ya faili hili tayari umeshaanzishwa katika <strong>[[:$1]]</strong>, lakini bado hakuna faili lenye jina hili kwa sasa.
+'filepageexists' => 'Ukurasa wa maelezo kwa ajili ya faili hili tayari umeshaanzishwa katika <strong>[[:$1]]</strong>, lakini hakuna faili lenye jina hili kwa sasa.
 Muhtasari utakaoandika hautaonekana katika ukurasa wa maelezo.
 Kufanya muhtasari wako uonekana pale, utahitajika uhariri ukurasa kwa mikono.
 [[$1|thumb]]',
@@ -1510,7 +1508,7 @@ Tafadhali chagua jina lingine.',
 [[$1|thumb]]
 Tafadhali tazama faili la <strong>[[:$1]]</strong>.
 Ikiwa faili hili linaonyesha picha ile ile kwa ukubwa wa kawaida hakuna haja ya kupakia faili lingine la picha ndogo.",
-'file-thumbnail-no' => "Jina la faili linaloanza na <strong>$1</strong>.
+'file-thumbnail-no' => "Jina la faili linaanza na <strong>$1</strong>.
 Inaonekana kuwa ni picha iliyopunguzwa ukubwa''(thumbnail)''.
 Ikiwa unaoyo picha hii kwa ukubwa wa kawaida tafadhali pakia picha hii, vinginevyo tafadhali badilisha jina la faili.",
 'fileexists-forbidden' => 'Faili lenye jina hili lipo tayari, na haliwezi kuandikizwa.
@@ -1598,7 +1596,9 @@ Haliwezi kukaguliwa vilivyo kwa sababu za kiusalama.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Ruksa imekataliwa',
+'img-auth-nologinnWL' => '',
 'img-auth-nofile' => 'Hakuna faili la "$1".',
+'img-auth-isdir' => '',
 'img-auth-noread' => 'Mtumiaji hana fursa ya kusoma "$1".',
 
 # HTTP errors
@@ -2124,7 +2124,7 @@ ukurasa huu una mhariri mmoja tu.',
 'protect-unchain-permissions' => 'Fungua chaguzi zingine za ulindaji',
 'protect-text' => "Unaweza kutazama na kubadilisha kiwango cha ulindaji hapa kwa ukurasa '''$1'''.",
 'protect-locked-dblock' => "Viwango vya ulindaji haviwezi kubadilishwa kwa sababu hifadhidata imefungwa.
-Hapo panaandikwa viwango vya ulindaji wa ukurasa '''$1''':",
+Hii hapa ni mipangilio iliyopo kwa ajili ya ukurasa '''$1''':",
 'protect-locked-access' => "Akaunti yako hairuhusiwi kubadilisha viwango vya ulindaji.
 Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-cascadeon' => 'Ukurasa huu umelindwa kwa sababu umezingatiwa katika {{PLURAL:$1|ukurasa $1 unaolinda kurasa chini yake|kurasa $1 zinazolinda kurasa chini yake}}. Unaweza kubadilisha kiwango cha ulindaji wa ukurasa huu, lakini hutaathirika ulindaji kutoka kurasa juu yake.',
@@ -2134,13 +2134,13 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-level-sysop' => 'Wakabidhi tu',
 'protect-summary-cascade' => 'ulindaji kwa kurasa chini yake',
 'protect-expiring' => 'itakwisha $1 (UTC)',
-'protect-expiring-local' => 'inaishia saa $1',
+'protect-expiring-local' => 'inaisha $1',
 'protect-expiry-indefinite' => 'bila mwisho',
 'protect-cascade' => 'Linda kurasa zinazozingatiwa chini ya ukurasa huu',
 'protect-cantedit' => 'Huwezi kubadilisha kiwango cha ulindaji wa ukurasa huu, kwa sababu huruhusiwi kuuhariri.',
 'protect-othertime' => 'Kipindi kingine:',
 'protect-othertime-op' => 'kipindi kingine',
-'protect-existing-expiry' => 'Kipindi cha ulindaji uliowekwa unaishia: $3, $2',
+'protect-existing-expiry' => 'Muda wa kwisha uliopo: $3, $2',
 'protect-otherreason' => 'Sababu nyingine:',
 'protect-otherreason-op' => 'Sababu nyingine',
 'protect-dropdown' => '*Sababu za kawaida za ulindaji
@@ -2152,8 +2152,8 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 'protect-expiry-options' => 'saa 1:1 hour,siku 1:1 day,wiki 1:1 week,wiki 2:2 weeks,mwezi 1:1 month,miezi 3:3 months,miezi 6:6 months,mwaka 1:1 year,milele:infinite',
 'restriction-type' => 'Ruhusa:',
 'restriction-level' => 'Kiwango cha kizuia:',
-'minimum-size' => 'Saizi ndogo mno',
-'maximum-size' => 'Saizi kubwa mno:',
+'minimum-size' => 'Saizi ndogo',
+'maximum-size' => 'Saizi kubwa:',
 'pagesize' => '(baiti)',
 
 # Restrictions (nouns)
@@ -2164,8 +2164,8 @@ Hivi ni vipimo kwa ukurasa '''$1''':",
 
 # Restriction levels
 'restriction-level-sysop' => 'umelindwa kabisa',
-'restriction-level-autoconfirmed' => 'umelindwa kwa kiasi',
-'restriction-level-all' => 'chochote',
+'restriction-level-autoconfirmed' => 'umelindwa kiasi',
+'restriction-level-all' => 'kiasi chochote',
 
 # Undelete
 'undelete' => 'Kuzitazama kurasa zilizofutwa',
@@ -2284,7 +2284,7 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'blockipsuccesssub' => 'Kulifaulu kumzuia',
 'ipb-edit-dropdown' => 'Hariri sababu za kuzuia',
 'ipb-unblock-addr' => 'Acha kumzuia $1',
-'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani wa IP',
+'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani ya IP',
 'ipb-blocklist-contribs' => 'Michango ya $1',
 'unblockip' => 'Acha kuzuia mtumiaji',
 'blocklist' => 'Watumiaji waliozuiliwa',
@@ -2295,7 +2295,7 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'blocklist-expiry' => 'Itakwisha',
 'blocklist-reason' => 'Sababu',
 'ipblocklist-submit' => 'Tafuta',
-'ipblocklist-otherblocks' => ' {{PLURAL:$1|Uzuio mwingine|Zuio zingine}}',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|Uzuio mwingine|Zuio zingine}}',
 'infiniteblock' => 'milele',
 'expiringblock' => 'inakwisha tarehe $1 saa $2',
 'emailblock' => 'barua pepe imezuiliwa',
@@ -2478,7 +2478,7 @@ Ulihafadhie katika tarakalishi yako, halafu ulipakie hapa.',
 'importbadinterwiki' => 'Kiungo kibovu kati za wiki',
 'importnotext' => 'Tupu au bila maandishi',
 'importsuccess' => 'Kuleta kumekamilishwa!',
-'import-noarticle' => 'Hakuna kurasa za kuleta!',
+'import-noarticle' => 'Hakuna kurasa ya kuingiza!',
 'import-token-mismatch' => 'Data ya kipindi zilipotelewa.
 Tafadhali jaribu tena.',
 
@@ -2569,7 +2569,7 @@ Tafadhali jaribu tena.',
 'pageinfo-title' => 'Taarifa juu ya "$1"',
 'pageinfo-header-edits' => 'Maharirio',
 'pageinfo-watchers' => 'Idadi ya wanaofuatilia',
-'pageinfo-edits' => 'Idadi ya haririo',
+'pageinfo-edits' => 'Idadi ya maharirio',
 
 # Image deletion
 'deletedrevision' => 'Pitio la awali lililofutwa $1',
@@ -3155,6 +3155,10 @@ Tovuti hii inapata matatatizo wakati huu.',
 'feedback-thanks' => 'Ahsante! Maoni yako yamewekwa kwenye ukurasa wa "[$2 $1]".',
 'feedback-close' => 'Tayari',
 
+# Search suggestions
+'searchsuggest-search' => 'Kutafuta',
+'searchsuggest-containing' => 'ya maneno...',
+
 # API errors
 'api-error-empty-file' => 'Faili ulilowasilisha ni tupu.',
 'api-error-emptypage' => 'Kutengeneza mpya, kurasa tupu hazikubaliwi',
index 5a676a4..0fa1792 100644 (file)
 $fallback = 'pl';
 
 $namespaceNames = array(
-       NS_SPECIAL        => 'Szpecyjalna',
-       NS_TALK           => 'Dyskusyjo',
-       NS_USER           => 'Używacz',
-       NS_USER_TALK      => 'Dyskusyjo_używacza',
-       NS_PROJECT_TALK   => 'Dyskusyjo_$1',
-       NS_FILE           => 'Plik',
-       NS_FILE_TALK      => 'Dyskusyjo_plika',
-       NS_MEDIAWIKI      => 'MediaWiki',
-       NS_MEDIAWIKI_TALK => 'Dyskusyjo_MediaWiki',
-       NS_TEMPLATE       => 'Muster',
-       NS_TEMPLATE_TALK  => 'Dyskusyjo_mustra',
-       NS_HELP           => 'Půmoc',
-       NS_HELP_TALK      => 'Dyskusyjo_půmocy',
-       NS_CATEGORY       => 'Kategoryjo',
-       NS_CATEGORY_TALK  => 'Dyskusyjo_kategoryji',
+       NS_SPECIAL          => 'Szpecyjalna',
+       NS_TALK             => 'Dyskusyjo',
+       NS_USER             => 'Używacz',
+       NS_USER_TALK        => 'Dyskusyjo_używacza',
+       NS_PROJECT_TALK     => 'Dyskusyjo_$1',
+       NS_FILE             => 'Plik',
+       NS_FILE_TALK        => 'Dyskusyjo_plika',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Dyskusyjo_MediaWiki',
+       NS_TEMPLATE         => 'Muster',
+       NS_TEMPLATE_TALK    => 'Dyskusyjo_mustra',
+       NS_HELP             => 'Půmoc',
+       NS_HELP_TALK        => 'Dyskusyjo_půmocy',
+       NS_CATEGORY         => 'Kategoryjo',
+       NS_CATEGORY_TALK    => 'Dyskusyjo_kategoryji',
 );
 
 $namespaceAliases = array(
@@ -451,7 +451,7 @@ Administrator kery zawarł wćepał kůmyntorz: "$3".',
 # Login and logout pages
 'logouttext' => "'''Terozki ježeś wylůgowany'''.
 
-Možeš dali sam sprowjać zajty we {{SITENAME}} kej ńyzalůgowany užytkowńik, abo [[Special:UserLogin|zalůgować śe nazod]] kej tyn som abo inkšy užytkowńik.
+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.
@@ -967,8 +967,6 @@ $1',
 'search-interwiki-caption' => 'Śostřane projekty',
 'search-interwiki-default' => '$1 wyńiki:',
 'search-interwiki-more' => '(wjyncyj)',
-'search-mwsuggest-enabled' => 'ze sůgestyjůma',
-'search-mwsuggest-disabled' => 'ńy mo sůgestyji',
 'search-relatedarticle' => 'Podane',
 'mwsuggest-disable' => 'Wyuůnč sůgestyje AJAX',
 'searcheverything-enable' => 'Sznupej we wszech mjan',
index c91d3cb..3c1efe7 100644 (file)
@@ -61,19 +61,19 @@ $namespaceAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#வழிமாற்று', '#REDIRECT' ),
-       'img_right'               => array( '1', 'வலது', 'right' ),
-       'img_left'                => array( '1', 'இடது', 'left' ),
-       'img_none'                => array( '1', 'ஒன்றுமில்லை', 'none' ),
-       'img_center'              => array( '1', 'மையம்', 'center', 'centre' ),
-       'img_top'                 => array( '1', 'மேல்', 'top' ),
-       'img_middle'              => array( '1', 'மத்தியில்', 'middle' ),
-       'img_bottom'              => array( '1', 'கீழ்', 'bottom' ),
-       'plural'                  => array( '0', 'பன்மை', 'PLURAL:' ),
-       'special'                 => array( '0', 'சிறப்பு', 'special' ),
-       'pagesize'                => array( '1', 'பக்க_அளவு', 'PAGESIZE' ),
-       'url_path'                => array( '0', 'வழி', 'PATH' ),
-       'url_wiki'                => array( '0', 'விக்கி', 'WIKI' ),
+       'redirect'                  => array( '0', '#வழிமாற்று', '#REDIRECT' ),
+       'img_right'                 => array( '1', 'வலது', 'right' ),
+       'img_left'                  => array( '1', 'இடது', 'left' ),
+       'img_none'                  => array( '1', 'ஒன்றுமில்லை', 'none' ),
+       'img_center'                => array( '1', 'மையம்', 'center', 'centre' ),
+       'img_top'                   => array( '1', 'மேல்', 'top' ),
+       'img_middle'                => array( '1', 'மத்தியில்', 'middle' ),
+       'img_bottom'                => array( '1', 'கீழ்', 'bottom' ),
+       'plural'                    => array( '0', 'பன்மை', 'PLURAL:' ),
+       'special'                   => array( '0', 'சிறப்பு', 'special' ),
+       'pagesize'                  => array( '1', 'பக்க_அளவு', 'PAGESIZE' ),
+       'url_path'                  => array( '0', 'வழி', 'PATH' ),
+       'url_wiki'                  => array( '0', 'விக்கி', 'WIKI' ),
 );
 
 $linkTrail = "/^([\xE0\xAE\x80-\xE0\xAF\xBF]+)(.*)$/sDu";
@@ -479,7 +479,7 @@ MySQL returned error "$3: $4".',
 # Login and logout pages
 'logouttext' => "'''நீங்கள் இப்பொழுது விடுபதிகையில் உள்ளீர்கள்.'''
 
-நீங்கள் தொடர்ந்து {{SITENAME}} தளத்தை அனானியாகப் பயன்படுத்தலாம், அல்லது அதே பயனராகவோ வேறு பயனராகவோ [[Special:UserLogin|மீண்டும் புகுபதிகை]] செய்யலாம். உங்கள் உலாவியின் இடைமாற்று நீக்கப்படும் வரை சில பக்கங்கள் தொடர்ந்தும் புகுபதிகையில் உள்ளது போன்றே காட்சி தரும் என்பதைக் கவனிக்கவும்.",
+நீங்கள் தொடர்ந்து {{SITENAME}} தளத்தை அனானியாகப் பயன்படுத்தலாம், அல்லது அதே பயனராகவோ வேறு பயனராகவோ <span class='plainlinks'>[$1 மீண்டும் புகுபதிகை]</span> செய்யலாம். உங்கள் உலாவியின் இடைமாற்று நீக்கப்படும் வரை சில பக்கங்கள் தொடர்ந்தும் புகுபதிகையில் உள்ளது போன்றே காட்சி தரும் என்பதைக் கவனிக்கவும்.",
 'welcomecreation' => '==நல்வரவு, $1!==
 உங்களுக்கான பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது. உங்களுக்கேற்றவாறு [[Special:Preferences|{{SITENAME}} விருப்பத்தேர்வுகளை]] மாற்றிக் கொள்ள மறவாதீர்கள்.',
 'yourname' => 'பயனர் பெயர்:',
@@ -1070,8 +1070,6 @@ $1",
 'search-interwiki-caption' => 'உறவுத் திட்டங்கள்',
 'search-interwiki-default' => '$1 தளத்தின் முடிவுகள்:',
 'search-interwiki-more' => '(மேலும்)',
-'search-mwsuggest-enabled' => 'பரிந்துரைகளுடன்',
-'search-mwsuggest-disabled' => 'பரிந்துரைகளில்லை',
 'search-relatedarticle' => 'தொடர்புடையவை',
 'mwsuggest-disable' => 'AJAX பரிந்துரைகளை முடக்கு',
 'searcheverything-enable' => 'அனைத்துப் பெயர்வெளிகளிலும் தேடவும்',
@@ -1260,7 +1258,7 @@ $1",
 'group-autoconfirmed-member' => '{{GENDER:$1|தானாக உறுதிசெய்யப்பட்ட பயனர்}}',
 'group-bot-member' => '{{GENDER:$1|தானியங்கி}}',
 'group-sysop-member' => '{{GENDER:$1|நிர்வாகி}}',
-'group-bureaucrat-member' => '{{GENDER:$1|பà®\9fிபà¯\8dபாளரà¯\8dகள்}}',
+'group-bureaucrat-member' => '{{GENDER:$1|à®\85திà®\95ாரிகள்}}',
 'group-suppress-member' => '{{GENDER:$1|மேற்பார்வை}}',
 
 'grouppage-user' => '{{ns:project}}:பயனர்கள்',
@@ -1887,7 +1885,7 @@ $1',
 'allpagesprefix' => 'பின்வரும் முன்னொட்டு உடைய பக்கங்களை காட்டு:',
 'allpagesbadtitle' => 'கொடுக்கப்பட்ட தலைப்பு செல்லுபடியற்றது அல்லது பிழையான விக்கியிடை அல்லது மொழி முன்னொட்டைக் கொண்டுள்ளது. இது தலைப்புக்களில் பயன்படுத்த முடியாத எழுத்துக்களையும் கொண்டிருக்கலாம்.',
 'allpages-bad-ns' => '{{SITENAME}} தளத்தில் "$1" பெயர்வெளி கிடையாது.',
-'allpages-hide-redirects' => 'வழிமாற்றுகளைப் மறை',
+'allpages-hide-redirects' => 'வழிமாற்றுகளை மறை',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'அண்மையான பதிப்பை காண்க',
@@ -2006,7 +2004,7 @@ $1',
 'notanarticle' => 'ஒரு கட்டுரைப் பக்கமல்ல',
 'notvisiblerev' => 'திருத்தம் நீக்கப்பட்டுள்ளது',
 'watchnochange' => 'காட்சிப்படுத்தப்பட்ட கால இடைவெளியில், கவனிப்பிலுள்ள, உங்கள் விடயமெதுவும் தொகுக்கப்பட்டிருக்கவில்லை.',
-'watchlist-details' => 'பà¯\87à®\9aà¯\8dà®\9aà¯\81பà¯\8d à®ªà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\88à®\95் தவிர்த்து, {{PLURAL:$1|$1 பக்கம் கவனிக்கப்பட்டது.|$1 பக்கங்கள் கவனிக்கப்பட்டன.}}',
+'watchlist-details' => 'பà¯\87à®\9aà¯\8dà®\9aà¯\81பà¯\8d à®ªà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\88த் தவிர்த்து, {{PLURAL:$1|$1 பக்கம் கவனிக்கப்பட்டது.|$1 பக்கங்கள் கவனிக்கப்பட்டன.}}',
 'wlheader-enotif' => '* மின்னஞ்சல் அறிவித்தல்கள் செயல்படுத்தப்பட்டுள்ளன.',
 'wlheader-showupdated' => "* உமது கடைசி வருகைக்குப் பின்னர் மாற்றங்கள் செய்யப்பட்ட பக்கங்கள் '''தடித்த எழுத்துக்களால்''' காட்டப்பட்டுள்ளன",
 'watchmethod-recent' => 'கவனிக்கப்படுகின்ற பக்கங்களுக்காக, அண்மைய தொகுப்புகள் தேடிப் பார்க்கப்படுகிறன',
@@ -2612,7 +2610,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'சாவாநிரல் சோதனை நடக்கின்றது',
-'javascripttest-disabled' => 'இந்தச் செயல்பாடு முடக்கப்பட்டுள்ளது.',
 'javascripttest-title' => '$1 சோதனைகள் நடக்கின்றன',
 'javascripttest-pagetext-noframework' => 'இந்த பக்கம் JavaScript பரிசோதனை ஓட்டத்திற்காக ஒதுக்கப்பட்டுள்ளது',
 'javascripttest-pagetext-skins' => 'சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:',
@@ -3541,6 +3538,10 @@ $5
 'feedback-bugcheck' => 'சிறப்பு! அது ஏற்கனவே  [ $1 தெரிந்த  bugs ] என்பதை மட்டும்  சரிபார்க்கவும்,',
 'feedback-bugnew' => 'நான் சரிபார்த்தாயிற்று. புதிய bug பற்றி கூறு.',
 
+# Search suggestions
+'searchsuggest-search' => 'தேடு',
+'searchsuggest-containing' => 'கொண்டுள்ளது...',
+
 # API errors
 'api-error-badaccess-groups' => 'இந்த விக்கிக்குக் கோப்புகளைப் பதிவேற்றுவதற்கு நீங்கள் அனுமதிக்கப்படவில்லை.',
 'api-error-badtoken' => 'உள்ளகப் பிழை: தவறான அடையாளம்.',
index f0a254e..ecb1d83 100644 (file)
@@ -584,8 +584,6 @@ $messages = array(
 'search-interwiki-caption' => 'ಬಳಗದ ಇತರ ಯೋಜನೆಲು',
 'search-interwiki-default' => '$1 ಫಲಿತಾಂಶೊಲು:',
 'search-interwiki-more' => '(ಮಸ್ತ್)',
-'search-mwsuggest-enabled' => 'ಸಲಹೆದೊಟ್ಟಿಗೆ',
-'search-mwsuggest-disabled' => 'ಓವು ಸಲಹೆಲಾ ಇಜ್ಜಿ',
 'searchrelated' => 'ಸ೦ಬ೦ಧ ಇತ್ತಿನ',
 'searchall' => 'ಮಾತಾ',
 'powersearch' => 'ನಾಡ್’ಲೆ',
index e2a72a3..6cf6da3 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Arjunaraoc
  * @author Chaduvari
  * @author Jprmvnvijay5
  * @author Kaganer
@@ -128,13 +129,13 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#దారిమార్పు', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__విషయసూచికవద్దు__', '__NOTOC__' ),
-       'toc'                     => array( '0', '__విషయసూచిక__', '__TOC__' ),
-       'pagename'                => array( '1', 'పేజీపేరు', 'PAGENAME' ),
-       'img_right'               => array( '1', 'కుడి', 'right' ),
-       'img_left'                => array( '1', 'ఎడమ', 'left' ),
-       'special'                 => array( '0', 'ప్రత్యేక', 'special' ),
+       'redirect'                  => array( '0', '#దారిమార్పు', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__విషయసూచికవద్దు__', '__NOTOC__' ),
+       'toc'                       => array( '0', '__విషయసూచిక__', '__TOC__' ),
+       'pagename'                  => array( '1', 'పేజీపేరు', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'కుడి', 'right' ),
+       'img_left'                  => array( '1', 'ఎడమ', 'left' ),
+       'special'                   => array( '0', 'ప్రత్యేక', 'special' ),
 );
 
 $linkTrail = "/^([\xE0\xB0\x81-\xE0\xB1\xAF]+)(.*)$/sDu";
@@ -299,7 +300,7 @@ $messages = array(
 'vector-action-protect' => 'సంరక్షించు',
 'vector-action-undelete' => 'తిరిగి చేర్చు',
 'vector-action-unprotect' => 'సంరక్షణను మార్చు',
-'vector-simplesearch-preference' => 'à°®à±\86à°°à±\81à°\97à±\88à°¨ à°\85à°¨à±\8dà°µà±\87à°·à°£ à°¸à°²à°¹à°¾à°²ని చేతనంచేయి (వెక్టర్ అలంకారానికి మాత్రమే)',
+'vector-simplesearch-preference' => 'సరళమà±\88à°¨ à°µà±\86à°¤à±\81à°\95à±\81à°¡à±\81 à°ªà°\9fà±\8dà°\9fà±\80ని చేతనంచేయి (వెక్టర్ అలంకారానికి మాత్రమే)',
 'vector-view-create' => 'సృష్టించు',
 'vector-view-edit' => 'సవరించు',
 'vector-view-history' => 'చరిత్రను చూడండి',
@@ -541,7 +542,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ఇప్పుడు మీరు నిష్క్రమించారు.'''
 
-మీరు {{SITENAME}}ని అజ్ఞాతంగా వాడుతూండొచ్చు, లేదా ఇదే వాడుకరిగా కానీ లేదా వేరే వాడుకరిగా కానీ [[Special:UserLogin|మళ్ళీ ప్రవేశించవచ్చు]].
+మీరు {{SITENAME}}ని అజ్ఞాతంగా వాడుతూండొచ్చు, లేదా ఇదే వాడుకరిగా కానీ లేదా వేరే వాడుకరిగా కానీ <span class='plainlinks'>[$1 మళ్ళీ ప్రవేశించవచ్చు]</span>.
 అయితే, మీ విహారిణిలోని కోశాన్ని శుభ్రపరిచే వరకు కొన్ని పేజీలు మీరింకా ప్రవేశించి ఉన్నట్లుగానే చూపించవచ్చని గమనించండి.",
 'welcomecreation' => '== స్వాగతం, $1! ==
 
@@ -692,6 +693,7 @@ $2
 # Special:ChangeEmail
 'changeemail' => 'ఈ-మెయిలు చిరునామా మార్పు',
 'changeemail-header' => 'ఖాతా ఈ-మెయిల్ చిరునామాని మార్చండి',
+'changeemail-text' => 'మీ ఈమెయిలు చిరునామాని మార్చుకోడానికి ఈ ఫారాన్ని నింపండి. ఈ మార్పుని నిర్ధారించడానికి మీ సంకేతపదాన్ని ఇవ్వాల్సివస్తుంది.',
 'changeemail-no-info' => 'ఈ పేజీని నేరుగా చూడటానికి మీరు లోనికి ప్రవేశించివుండాలి.',
 'changeemail-oldemail' => 'ప్రస్తుత ఈ-మెయిలు చిరునామా:',
 'changeemail-newemail' => 'కొత్త ఈ-మెయిలు చిరునామా:',
@@ -787,8 +789,7 @@ $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' => 'ప్రస్తుతం ఈ వాడుకరిని నిరోధించారు.
@@ -1125,8 +1126,6 @@ $1",
 'search-interwiki-caption' => 'సోదర ప్రాజెక్టులు',
 'search-interwiki-default' => '$1 ఫలితాలు:',
 'search-interwiki-more' => '(మరిన్ని)',
-'search-mwsuggest-enabled' => 'సూచనలతో',
-'search-mwsuggest-disabled' => 'సూచనలు వద్దు',
 'search-relatedarticle' => 'సంబంధించినవి',
 'mwsuggest-disable' => 'AJAX సూచనలను అచేతనంచేయి',
 'searcheverything-enable' => 'అన్ని పేరుబరుల్లో వెతుకు',
@@ -1257,7 +1256,7 @@ $1",
 'prefs-help-email-others' => 'మీ వాడుకరి లేదా చర్చా పేజీలలో ఉండే లంకె ద్వారా ఇతరులు మిమ్మల్ని ఈ-మెయిలు ద్వారా సంప్రదించే వీలుకల్పించవచ్చు.
 ఇతరులు మిమ్మల్ని సంప్రదించినప్పుడు మీ ఈ-మెయిలు చిరునామా బహిర్గతమవదు.',
 'prefs-help-email-required' => 'ఈ-మెయిలు చిరునామా తప్పనిసరి.',
-'prefs-info' => 'à°ªà±\8dరాధమిక సమాచారం',
+'prefs-info' => 'à°ªà±\8dరాథమిక సమాచారం',
 'prefs-i18n' => 'అంతర్జాతీయీకరణ',
 'prefs-signature' => 'సంతకం',
 'prefs-dateformat' => 'తేదీ ఆకృతి',
@@ -2019,7 +2018,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'mywatchlist' => 'నా వీక్షణ జాబితా',
 'watchlistfor2' => '$1 కొరకు $2',
 'nowatchlist' => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.',
-'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1 ఉండాలి.',
+'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1.',
 'watchnologin' => 'లాగిన్‌ అయిలేరు',
 'watchnologintext' => 'మీ వీక్షణ జాబితాను మార్చడానికి మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి.',
 'addwatch' => 'వీక్షణ జాబితాలో చేర్చు',
@@ -2733,6 +2732,7 @@ $UNWATCHURL కి వెళ్ళండి.
 
 # Info page
 'pageinfo-title' => '"$1" గురించి సమాచారం',
+'pageinfo-header-basic' => 'ప్రాథమిక సమాచారం',
 'pageinfo-header-edits' => 'మార్పుల చరిత్ర',
 'pageinfo-views' => 'వీక్షణల సంఖ్య',
 'pageinfo-watchers' => 'పేజీ వీక్షకుల సంఖ్య',
@@ -3522,6 +3522,9 @@ $5
 'feedback-bugcheck' => 'అద్భుతం! ఇది ఇప్పటికే [$1 తెలిసిన బగ్గుల]లో లేదని సరిచూసుకోండి.',
 'feedback-bugnew' => 'చూసాను. కొత్త బగ్గును నివేదించు',
 
+# Search suggestions
+'searchsuggest-search' => 'వెతుకు',
+
 # API errors
 'api-error-badaccess-groups' => 'ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.',
 'api-error-duplicate-archive-popup-title' => 'నకిలీ {{PLURAL:$1|దస్త్రాన్ని|దస్త్రాలను}} ఇప్పటికే తొలగించారు.',
index 351c01b..d4600e0 100644 (file)
@@ -78,7 +78,7 @@ $messages = array(
 'tog-hideminor' => "Lá'os hatudu muda ki-ki'ik iha mudansa foufoun sira",
 'tog-usenewrc' => 'Iha lista "mudansa foufoun sira" no "lista hateke": Hatudu mudansa iha grupu sira - grupu ida ba pájina ida (presiza JavaScript)',
 'tog-showtoolbar' => 'Hatudu kaixa edita (presiza JavaScript)',
-'tog-watchcreations' => "Hateke pájina sira-ne'ebé ha'u kria",
+'tog-watchcreations' => "Hateke pájina no imajen sira-ne'ebé ha'u kria/tau iha arkivu laran",
 'tog-watchdefault' => "Hateke pájina sira-ne'ebé ha'u edita",
 'tog-watchmoves' => "Hateke pájina sira-ne'ebé ha'u book",
 'tog-watchdeletion' => "Hateke pájina sira-ne'ebé ha'u halakon",
@@ -412,8 +412,6 @@ Ita-nia mudansa la armazenadu seidauk!",
 'search-result-size' => '$1 ({{PLURAL:$2|liafuan ida|liafuan $2}})',
 'search-section' => '(seksaun $1)',
 'search-interwiki-caption' => 'Projetu seluseluk sira',
-'search-mwsuggest-enabled' => 'fó sujestaun',
-'search-mwsuggest-disabled' => 'la hatudu sujestaun',
 'searchall' => 'hotu',
 'powersearch' => 'Buka',
 'powersearch-field' => 'Buka',
@@ -764,6 +762,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 'contribslink' => 'kontribuisaun',
 'block-log-flags-nocreate' => 'la bele kria konta foun',
 'block-log-flags-noemail' => 'korreiu eletróniku blokeiu',
+'block-log-flags-nousertalk' => 'la bele edita pájina diskusaun rasik',
 'ipb_already_blocked' => 'Ema ruma blokeiu "$1" tiha ona',
 
 # Move page
index 76b0027..827dd6d 100644 (file)
@@ -444,7 +444,7 @@ $1',
 # Login and logout pages
 'logouttext' => "'''Акнун аз систем хориҷ шудаед.'''
 
-Шумо метавонед гумном аз {{SITENAME}} истифодабариро идома диҳед, ё метавонед бо ҳамин номи корбариатон ва ё номи корбарии дигаре [[Special:UserLogin|боз вуруд кунед]].
+Шумо метавонед гумном аз {{SITENAME}} истифодабариро идома диҳед, ё метавонед бо ҳамин номи корбариатон ва ё номи корбарии дигаре <span class='plainlinks'>[$1 боз вуруд кунед]</span>.
 Тавваҷӯҳ кунед, ки баъзе аз саҳифаҳо қаблан чи тавре намоиш шуда будан ҳамин тавр намоиш дода мешаванд, то даме ки шумо ҳофизаи мурургаратонро пок кунед.",
 'welcomecreation' => '== Хуш омадед, $1! ==
 
@@ -836,8 +836,6 @@ $1',
 'search-interwiki-caption' => 'Лоиҳаҳои хоҳарӣ',
 'search-interwiki-default' => '$1 натоиҷ:',
 'search-interwiki-more' => '(бештар)',
-'search-mwsuggest-enabled' => 'бо тавзеҳот',
-'search-mwsuggest-disabled' => 'бидуни тавзеҳот',
 'search-relatedarticle' => 'Алоқаманд',
 'searchrelated' => 'алоқаманд',
 'searchall' => 'ҳама',
index 82d419a..5cf9a02 100644 (file)
@@ -379,7 +379,7 @@ Daleli zikrşuda az in qaror ast ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Aknun az sistem xoriç şudaed.'''
 
-Şumo metavoned gumnom az {{SITENAME}} istifodabariro idoma dihed, jo metavoned bo hamin nomi korbariaton va jo nomi korbariji digare [[Special:UserLogin|boz vurud kuned]].
+Ş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! ==
 
@@ -724,8 +724,6 @@ Itminon hosil kuned, ki in taƣjir davomnokiji ta'rixiji sahifaro nigoh dorad.",
 'search-interwiki-caption' => 'Loihahoi xoharī',
 'search-interwiki-default' => '$1 natoiç:',
 'search-interwiki-more' => '(beştar)',
-'search-mwsuggest-enabled' => 'bo tavzehot',
-'search-mwsuggest-disabled' => 'biduni tavzehot',
 'search-relatedarticle' => 'Aloqamand',
 'searchrelated' => 'aloqamand',
 'searchall' => 'hama',
index 3940971..a5e7809 100644 (file)
@@ -139,12 +139,12 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#เปลี่ยนทาง', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ไม่มีสารบัญ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__ไม่มีแกลเลอรี่__', '__NOGALLERY__' ),
-       'noeditsection'           => array( '0', '__ไม่มีแก้เฉพาะส่วน__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'เดือนปัจจุบัน', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'ชื่อเดือนปัจจุบัน', 'CURRENTMONTHNAME' ),
+       'redirect'                  => array( '0', '#เปลี่ยนทาง', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ไม่มีสารบัญ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__ไม่มีแกลเลอรี่__', '__NOGALLERY__' ),
+       'noeditsection'             => array( '0', '__ไม่มีแก้เฉพาะส่วน__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'เดือนปัจจุบัน', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'ชื่อเดือนปัจจุบัน', 'CURRENTMONTHNAME' ),
 );
 
 $datePreferences = array(
@@ -211,13 +211,13 @@ $messages = array(
 'tog-enotifminoredits' => 'แม้ว่าการแก้ไขจะเป็นการแก้ไขเล็กน้อย',
 'tog-enotifrevealaddr' => 'เผยที่อยู่อีเมลในอีเมลที่ชี้แจง',
 'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดูหน้านี้',
-'tog-oldsig' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\95à¹\8cà¹\80à¸\94ิมà¸\97ีà¹\88à¹\83à¸\8aà¹\89อยูà¹\88:',
+'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' => 'à¹\80à¸\95ือà¸\99à¹\80มืà¹\88อà¸\8aà¹\88อà¸\87สรุà¸\9bà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ว่าง',
+'tog-forceeditsummary' => 'à¹\80à¸\95ือà¸\99à¹\80มืà¹\88อà¸\8aà¹\88อà¸\87à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อว่าง',
 'tog-watchlisthideown' => 'ไม่แสดงการแก้ไขของตนเองจากรายการเฝ้าดูของตนเอง',
 'tog-watchlisthidebots' => 'ไม่แสดงการแก้ไขของบอตจากรายการเฝ้าดูของตนเอง',
 'tog-watchlisthideminor' => 'ไม่แสดงการแก้ไขเล็กน้อยจากรายการเฝ้าดูของตนเอง',
@@ -236,7 +236,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => 'รูปแบบของแบบตัวอักษรในกล่องแก้ไข:',
-'editfont-default' => 'ค่าตั้งต้นของ browser',
+'editfont-default' => 'ค่าตั้งต้นของเบราว์เซอร์',
 'editfont-monospace' => 'ชุดอักษรแบบความกว้างคงที่',
 'editfont-sansserif' => 'ชุดอักษรแบบไม่มีเชิง',
 'editfont-serif' => 'ชุดอักษรแบบมีเชิง',
@@ -385,7 +385,7 @@ $messages = array(
 'specialpage' => 'หน้าพิเศษ',
 'personaltools' => 'เครื่องมือส่วนตัว',
 'postcomment' => 'หัวข้อใหม่',
-'articlepage' => 'à¹\81สà¸\94à¸\87à¹\80à¸\99ืà¹\89อหาà¸\82อà¸\87หà¸\99à¹\89า',
+'articlepage' => 'à¹\81สà¸\94à¸\87หà¸\99à¹\89าà¹\80à¸\99ืà¹\89อหา',
 'talk' => 'อภิปราย',
 'views' => 'ดู',
 'toolbox' => 'เครื่องมือเพิ่ม',
@@ -394,7 +394,7 @@ $messages = array(
 'imagepage' => 'ดูหน้ารายละเอียดไฟล์',
 'mediawikipage' => 'ดูหน้าข้อความ',
 'templatepage' => 'ดูหน้าแม่แบบ',
-'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'viewhelppage' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'categorypage' => 'ดูหน้าหมวดหมู่',
 'viewtalkpage' => 'ดูการพูดคุย',
 'otherlanguages' => 'ในภาษาอื่น',
@@ -406,8 +406,8 @@ $messages = array(
 'jumpto' => 'ข้ามไปที่:',
 'jumptonavigation' => 'นำทาง',
 'jumptosearch' => 'สืบค้น',
-'view-pool-error' => 'à¸\82ออภัย à¸\82à¸\93ะà¸\99ีà¹\89มีà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cมาà¸\81à¹\80à¸\81ิà¸\99à¸\97ีà¹\88à¸\88ะรัà¸\9aà¹\84à¸\94à¹\89
-à¸\9cูà¹\89à¸\97ีà¹\88à¸\9eยายามà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89มีà¸\88ำà¸\99วà¸\99มาà¸\81à¸\88à¸\99เกินไป
+'view-pool-error' => 'à¸\82ออภัย à¸\82à¸\93ะà¸\99ีà¹\89à¹\80à¸\8bิรà¹\8cà¸\9fà¹\80วอรà¹\8cมีภาระà¹\80à¸\81ิà¸\99
+à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9eยายามà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89มาà¸\81เกินไป
 กรุณารอสักครู่ก่อนที่จะเข้าดูหน้านี้อีกครั้งหนึ่ง
 
 $1',
@@ -418,7 +418,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:เกี่ยวกับเว็บไซต์',
-'copyright' => 'à¹\80à¸\99ืà¹\89อหาà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89อยูà¹\88ภายà¹\83à¸\95à¹\89ลิà¸\82สิà¸\97à¸\98ิà¹\8cà¹\81à¸\9aà¸\9a $1',
+'copyright' => 'à¹\80à¸\99ืà¹\89อหาอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\9cยà¹\81à¸\9eรà¹\88ภายà¹\83à¸\95à¹\89 $1',
 'copyrightpage' => '{{ns:project}}:ลิขสิทธิ์',
 'currentevents' => 'เหตุการณ์ปัจจุบัน',
 'currentevents-url' => 'Project:เหตุการณ์ปัจจุบัน',
@@ -446,7 +446,7 @@ $1',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
 'youhavenewmessages' => 'คุณมี $1 ($2)',
 'newmessageslink' => 'ข้อความใหม่',
-'newmessagesdifflink' => 'à¸\82à¹\89อà¸\84วามà¹\80à¸\82à¹\89ามาà¹\83หมà¹\88',
+'newmessagesdifflink' => 'à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94',
 'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
 'editsection' => 'แก้ไข',
 'editold' => 'แก้ไข',
@@ -482,14 +482,14 @@ $1',
 'nstab-image' => 'ไฟล์',
 'nstab-mediawiki' => 'ข้อความ',
 'nstab-template' => 'แม่แบบ',
-'nstab-help' => 'หà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'nstab-help' => 'หà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'nstab-category' => 'หมวดหมู่',
 
 # Main script and global functions
 'nosuchaction' => 'ไม่มีการกระทำดังกล่าว',
 'nosuchactiontext' => 'การกระทำที่กำหนดผ่านยูอาร์แอลดังกล่าวไม่สามารถใช้ได้
-คุณอาจกรอกยูอาร์แอลผิด หรือ มาตามลิงก์ที่ไม่ถูกต้อง
-หรืออาà¸\88à¸\88ะà¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¹\82à¸\9bรà¹\81à¸\81รมซึ่ง {{SITENAME}} ใช้อยู่',
+คุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง
+หรืออาà¸\88à¹\80à¸\81ิà¸\94à¸\88าà¸\81à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94à¹\83à¸\99à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cซึ่ง {{SITENAME}} ใช้อยู่',
 'nosuchspecialpage' => 'ไม่มีหน้าพิเศษดังกล่าว',
 'nospecialpagetext' => '
 <strong>คุณร้องขอหน้าพิเศษไม่ถูกต้อง</strong>
@@ -535,7 +535,7 @@ $1',
 'filenotfound' => 'ไม่พบไฟล์ "$1"',
 'fileexistserror' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เนื่องจากมีไฟล์อยู่แล้ว',
 'unexpected' => 'ผลที่ไม่คาดคิด: "$1"="$2"',
-'formerror' => 'à¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88สามารà¸\96สà¹\88à¸\87à¸\9fอรà¹\8cมได้',
+'formerror' => 'à¸\9cิà¸\94à¸\9eลาà¸\94: à¹\84มà¹\88สามารà¸\96สà¹\88à¸\87à¹\81à¸\9aà¸\9aได้',
 'badarticleerror' => 'การกระทำนี้ไม่สามารถดำเนินการในหน้านี้ได้',
 'cannotdelete' => 'ไม่สามารถลบหน้าหรือไฟล์ "$1" 
 อาจมีผู้อื่นลบไปแล้ว',
@@ -574,7 +574,7 @@ $1',
 # Login and logout pages
 'logouttext' => "'''ขณะนี้คุณได้ล็อกเอาต์ออกจากระบบ'''
 
-คุณสามารถใช้งาน {{SITENAME}} ได้ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ[[Special:UserLogin|ล็อกอินกลับเข้าไป]]ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่นๆ
+คุณสามารถใช้งาน {{SITENAME}} ได้ต่อในฐานะผู้ใช้นิรนาม หรือคุณสามารถ<span class='plainlinks'>[$1 ล็อกอินกลับเข้าไป]</span>ด้วยชื่อผู้ใช้เดิมหรือชื่อผู้ใช้อื่นๆ
 อย่างไรก็ตามอาจจะมีบางหน้าที่ยังแสดงข้อความว่าคุณกำลังล็อกอินอยู่ จนกว่าคุณจะล้างแคชออกจากเว็บเบราว์เซอร์",
 'welcomecreation' => '== ยินดีต้อนรับ $1! ==
 
@@ -604,7 +604,7 @@ $1',
 'createaccountmail' => 'ผ่านทางอีเมล',
 'createaccountreason' => 'เหตุผล:',
 'badretype' => 'รหัสผ่านที่ใส่ไม่ถูกต้อง',
-'userexists' => 'à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81รอà¸\81à¸\96ูà¸\81à¹\83à¸\8aà¹\89à¹\84à¸\9bà¹\81ลà¹\89ว. กรุณาเลือกชื่ออื่น',
+'userexists' => 'à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\81รอà¸\81มีà¸\9cูà¹\89อืà¹\88à¸\99à¹\83à¸\8aà¹\89à¹\84à¸\9bà¹\81ลà¹\89ว กรุณาเลือกชื่ออื่น',
 'loginerror' => 'ล็อกอินผิดพลาด',
 'createaccounterror' => 'ไม่สามารถสร้างบัญชีผู้ใช้: $1',
 'nocookiesnew' => 'ชื่อบัญชีผู้ใช้ได้ถูกสร้างขึ้นแล้ว แต่ยังไม่ได้ล็อกอินเข้าสู่ {{SITENAME}} เนื่องจากว่าไม่ได้เปิดใช้คุกกี้ ถ้าต้องการล็อกอินให้เปิดใช้งานคุกกี้และทำการล็อกอินโดยใส่ชื่อผู้ใช้พร้อมรหัสผ่าน',
@@ -658,7 +658,7 @@ $1',
 'createaccount-text' => 'มีใครบางคนสร้างบัญชีผู้ใช้สำหรับที่อยู่อีเมลของคุณไว้บน {{SITENAME}} ($4) โดยใช้ชื่อบัญชีผู้ใช้ "$2" และรหัสผ่าน "$3" คุณควรล็อกอินเพื่อเปลี่ยนรหัสผ่านโดยทันที
 
 ข้อความนี้อาจจะไม่สำคัญสำหรับคุณ หากการสร้างบัญชีผู้ใช้นี้เกิดจากความผิดพลาด',
-'usernamehasherror' => 'à¹\84มà¹\88สามารà¸\96มีà¸\95ัวอัà¸\81ษร "#" à¹\83à¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89',
+'usernamehasherror' => 'à¹\83à¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\95à¹\89อà¸\87à¹\84มà¹\88มีà¸\95ัวอัà¸\81ษร "#"',
 'login-throttled' => 'คุณได้พยายามล็อกอินมากครั้งเกินไป
 กรุณารอสักครู่แล้วลองใหม่อีกครั้ง',
 'login-abort-generic' => 'การเข้าสู่ระบบของคุณไม่ประสบความสำเร็จ - ล้มเลิกแล้ว',
@@ -677,7 +677,7 @@ $1',
 'newpassword' => 'รหัสผ่านใหม่:',
 'retypenew' => 'พิมพ์รหัสผ่านใหม่อีกครั้ง:',
 'resetpass_submit' => 'ตั้งรหัสผ่านและล็อกอิน',
-'resetpass_success' => 'รหัสà¸\9cà¹\88าà¸\99à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99เรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
+'resetpass_success' => 'à¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93เรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
 'resetpass_forbidden' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
 'resetpass-no-info' => 'คุณต้องล็อกอินเพื่อที่จะเข้าถึงหน้านี้โดยตรง',
 'resetpass-submit-loggedin' => 'เปลี่ยนรหัสผ่าน',
@@ -701,7 +701,7 @@ $1',
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
 'changeemail-header' => 'เปลี่ยนที่อยู่อีเมลของบัญชีผู้ใช้',
-'changeemail-no-info' => 'à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าà¹\80อà¸\81สารà¸\99ีà¹\89à¹\84à¸\94้โดยตรง',
+'changeemail-no-info' => 'à¸\84ุà¸\93à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าสูà¹\88ระà¸\9aà¸\9aà¹\80à¸\9eืà¹\88อà¹\80à¸\82à¹\89าà¸\96ึà¸\87หà¸\99à¹\89าà¸\99ี้โดยตรง',
 'changeemail-oldemail' => 'ที่อยู่อีเมลปัจจุบัน:',
 'changeemail-newemail' => 'ที่อยู่อีเมลใหม่:',
 'changeemail-none' => '(ไม่มี)',
@@ -796,8 +796,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 คุณสามารถ [[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' => 'ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก
@@ -833,7 +832,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'token_suffix_mismatch' => "'''การแก้ไขของคุณได้ถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้อยู่ได้ทำลายรูปแบบเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token)'''
 ระบบไม่รับการแก้ไขของคุณเพื่อป้องกันความผิดพลาดของข้อมูล
 ในบางครั้งปัญหานี้จะเกิดขึ้นถ้าคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
-'edit_form_incomplete' => "'''à¸\9aาà¸\87สà¹\88วà¸\99à¸\82อà¸\87à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84มà¹\88à¹\84à¸\94à¹\89à¸\95ิà¸\94à¸\95à¹\88อà¹\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à¸\87อยูà¹\88à¹\81ละลอà¸\87à¹\83หมà¹\88อีกครั้ง'''",
+'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à¸\87อยูà¹\88à¹\81ละลอà¸\87อีกครั้ง'''",
 'editing' => 'กำลังแก้ไข $1',
 'creating' => 'สร้างหน้า $1',
 'editingsection' => 'กำลังแก้ไข $1 (เฉพาะส่วน)',
@@ -860,11 +859,11 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'readonlywarning' => "'''คำเตือน: ขณะนี้ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา จึงไม่สามารถบันทึกข้อมูลที่แก้ไขได้ แนะนำให้คัดลอกไปเก็บไว้ที่อื่นก่อนแล้วนำมาบันทึกในเว็บไซต์นี้ภายหลัง'''
 
 ผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
-'protectedpagewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น'''
-à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99ลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87",
+'protectedpagewarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99'''
+à¸\9bูมลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87:",
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
-'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
+'cascadeprotectedwarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88มีสิà¸\97à¸\98ิà¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81หà¸\99à¹\89าà¸\99ีà¹\89สืà¸\9aà¸\97อà¸\94à¸\81ารลà¹\87อà¸\81มาà¸\88าà¸\81{{PLURAL:$1|หà¸\99à¹\89า|หà¸\99à¹\89า}}à¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89:",
 'titleprotectedwarning' => "'''คำเตือน:  หน้านี้ได้รับการป้องกันไว้ให้สร้างได้โดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
@@ -875,29 +874,29 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}} :',
 'edittools' => '<!-- ข้อความนี้จะแสดงผลด้านใต้การแก้ไขและฟอร์มสำหรับอัปโหลด -->',
 'nocreatetitle' => 'จำกัดการสร้างหน้าใหม่',
-'nocreatetext' => 'เว็บไซต์นี้จำกัดการสร้างหน้าเว็บเพจใหม่
-à¸\84ุà¸\93สามารà¸\96à¸\97ำà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88สรà¹\89าà¸\87à¹\84วà¹\89à¹\81ลà¹\89ว à¸«à¸£à¸·à¸­ [[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
-'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่ได้',
+'nocreatetext' => '{{SITENAME}} จำกัดการสร้างหน้าใหม่
+à¸\84ุà¸\93สามารà¸\96ยà¹\89อà¸\99à¸\81ลัà¸\9aà¹\84à¸\9bà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\80à¸\94ิม à¸«à¸£à¸·à¸­[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
+'nocreate-loggedin' => 'คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่',
 'sectioneditnotsupported-title' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อย',
 'sectioneditnotsupported-text' => 'ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้',
 'permissionserrors' => 'ข้อผิดพลาดในการใช้สิทธิ',
 'permissionserrorstext' => 'คุณไม่ได้รับสิทธิในการทำสิ่งนี้ เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
 'permissionserrorstext-withaction' => 'คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:',
-'recreate-moveddeleted-warn' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\88ะสรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¸\8bึà¹\88à¸\87à¹\84à¸\94à¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\81ลà¹\89ว'''
+'recreate-moveddeleted-warn' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸\84ุà¸\93à¸\81ำลัà¸\87สรà¹\89าà¸\87หà¸\99à¹\89าà¸\8bึà¹\88à¸\87à¹\84à¸\94à¹\89à¸\96ูà¸\81ลà¸\9aà¹\84à¸\9bà¸\81à¹\88อà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\81ลà¹\89วอีà¸\81à¸\84รัà¹\89à¸\87'''
 
-คุณควรพิจารณาว่าการแก้ไขหน้านี้เหมาะสมหรือไม่
+à¸\84ุà¸\93à¸\84วรà¸\9eิà¸\88ารà¸\93าวà¹\88าà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¸\95à¹\88อà¹\84à¸\9bà¹\80หมาะสมหรือà¹\84มà¹\88
 ปูมการลบและเปลี่ยนชื่อหน้านี้ได้แสดงไว้ด้านล่างเพื่อความสะดวก:",
 'moveddeleted-notice' => 'หน้านี้ถูกลบ
 ปูมการลบและเปลี่ยนชื่อของหน้านี้ได้แสดงไว้ด้านล่างเพื่ออ้างอิง',
 'log-fulllog' => 'ดูปูมแบบเต็ม',
 'edit-hook-aborted' => 'การแก้ไขถูกยกเลิก
 ไม่มีคำอธิบายสำหรับการยกเลิกนี้',
-'edit-gone-missing' => 'à¹\84มà¹\88สามารà¸\96à¸\9bรัà¸\9aà¹\81à¸\81à¹\89หน้าดังกล่าวได้
+'edit-gone-missing' => 'à¹\84มà¹\88สามารà¸\96อัà¸\9bà¹\80à¸\94à¸\95หน้าดังกล่าวได้
 เนื่องจากหน้านี้ถูกลบไปแล้ว',
 'edit-conflict' => 'แก้ชนกัน',
-'edit-no-change' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¸\82à¹\89อà¸\84วามà¹\84มà¹\88à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\94 à¹\86 à¸\97ัà¹\89à¸\87สิà¹\89à¸\99',
-'edit-already-exists' => 'à¹\84มà¹\88สามารà¸\96สรà¹\89าà¸\87หà¸\99à¹\89าà¹\83หมà¹\88à¸\99ีà¹\89à¹\84à¸\94à¹\89
-à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหน้านี้แล้ว',
+'edit-no-change' => 'à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93à¸\96ูà¸\81à¹\80à¸\9eิà¸\81à¹\80à¸\89ย à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\94 à¹\86',
+'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
+à¹\80à¸\9eราะมีหน้านี้แล้ว',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'คำเตือน: หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป
@@ -953,8 +952,8 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 'history-feed-title' => 'ประวัติการปรับปรุง',
 'history-feed-description' => 'ประวัติการปรับปรุงของหน้านี้ในวิกิ',
 'history-feed-item-nocomment' => '$1 เมื่อ $2',
-'history-feed-empty' => 'หà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\84มà¹\88มี มันอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว ให้ลอง
-[[Special:Search|à¸\84à¹\89à¸\99หาà¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89]] à¸ªà¸³à¸«à¸£à¸±à¸\9aหà¸\99à¹\89าอืà¹\88à¸\99à¸\97ีà¹\88อาà¸\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87',
+'history-feed-empty' => 'à¹\84มà¹\88มีหà¸\99à¹\89าà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร มันอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว ให้ลอง
+[[Special:Search|à¸\84à¹\89à¸\99หาà¹\83à¸\99วิà¸\81ิà¸\99ีà¹\89]] à¸ªà¸³à¸«à¸£à¸±à¸\9aหà¸\99à¹\89าà¹\83หมà¹\88à¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87',
 
 # Revision deletion
 'rev-deleted-comment' => '(คำอธิบายอย่างย่อถูกลบออก)',
@@ -1004,8 +1003,9 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 ผู้ดูแลระบบคนอื่นบน {{SITENAME}} จะยังคงสามารถเข้าถึงเนื้อหาที่ถูกซ่อน และสามารถกู้คืนขึ้นมาอีกครั้งในลักษณะเดิมเช่นนี้ เว้นแต่จะมีการตั้งค่าการควบคุมเพิ่มเติม",
 'revdelete-confirm' => 'กรุณายืนยันว่าคุณตั้งใจที่จะลบจริง และเข้าใจผลกระทบหลังจากนี้ที่จะเกิดขึ้น และกระทำกายภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
 'revdelete-suppress-text' => "การระงับควรใช้ '''เฉพาะ''' กรณีต่อไปนี้:
+* ข้อมูลที่อาจหมิ่นประมาท
 * ข้อมูลส่วนบุคคลที่ไม่เหมาะสม
-*: ''à¸\97ีà¹\88อยูà¹\88à¹\81ละหมายà¹\80ลà¸\82à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cà¸\88าà¸\81บ้าน, หมายเลขประกันสังคม, ฯลฯ''",
+*: ''à¸\97ีà¹\88อยูà¹\88à¸\9aà¹\89าà¸\99à¹\81ละหมายà¹\80ลà¸\82à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cบ้าน, หมายเลขประกันสังคม, ฯลฯ''",
 'revdelete-legend' => 'ระบุการควบคุม:',
 'revdelete-hide-text' => 'ซ่อนข้อความรุ่นที่ปรับปรุง',
 'revdelete-hide-image' => 'ซ่อนเนื้อหาไฟล์',
@@ -1042,13 +1042,13 @@ $1",
 'revdelete-concurrent-change' => 'เกิดความผิดพลาดในการแก้ไขฉบับปรับปรุงในวันที่ $2 เวลา $1: สถานะของฉบับปรับปรุงได้ถูกเปลี่ยนโดยใครบางคนในขณะที่คุณพยายามแก้ไขอยู่
 กรุณาตรวจสอบประวัติการแก้ไข',
 'revdelete-only-restricted' => 'เกิดความผิดพลาดในการซ่อนฉบับปรับปรุงในวันที่ $2 เวลา $1: คุณไม่สามารถยับยั้งผู้ดูแลระบบจากการดูฉบับปรับปรุงนี้โดยที่ไม่ได้เลือกตัวเลือกการให้ดูอื่นๆ',
-'revdelete-reason-dropdown' => '*à¹\80หà¸\95ุà¸\9cลà¹\82à¸\94ยà¸\97ัà¹\88วà¹\84à¸\9bà¹\83à¸\99à¸\81ารลà¸\9a
+'revdelete-reason-dropdown' => '*à¹\80หà¸\95ุà¸\9cลà¸\81ารลà¸\9aà¸\97ัà¹\88วà¹\84à¸\9b
 ** ละเมิดลิขสิทธิ์
 ** มีข้อมูลส่วนบุคคลที่ไม่เหมาะสม
-** à¸¡à¸µà¸\82à¹\89อมูลà¸\97ีà¹\88อาà¸\88สรà¹\89าà¸\87à¸\84วามà¹\80สียหาย',
+** à¸¡à¸µà¸\82à¹\89อมูลà¸\97ีà¹\88อาà¸\88หมิà¹\88à¸\99à¸\9bระมาà¸\97',
 'revdelete-otherreason' => 'เหตุผลอื่นหรือเหตุผลเพิ่มเติม:',
 'revdelete-reasonotherlist' => 'เหตุผลอื่น',
-'revdelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82รายà¸\8aืà¹\88อà¹\80หà¸\95ุà¸\9cลà¹\83à¸\99การลบ',
+'revdelete-edit-reasonlist' => 'à¹\81à¸\81à¹\89à¹\84à¸\82à¹\80หà¸\95ุà¸\9cลการลบ',
 'revdelete-offender' => 'ผู้เขียนของรุ่น:',
 
 # Suppression log
@@ -1115,7 +1115,7 @@ $1",
 'searchmenu-legend' => 'ตัวเลือกการค้นหา',
 'searchmenu-exists' => "'''มีหน้าชื่อ \"[[:\$1]]\" บนวิกินี้'''",
 'searchmenu-new' => "'''สร้างหน้า \"[[:\$1]]\" บนวิกินี้'''",
-'searchhelp-url' => 'Help:วิà¸\98ีà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'searchhelp-url' => 'Help:สารà¸\9aัà¸\8d',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|สืบค้นหน้าที่มีคำขึ้นต้นเหล่านี้]]',
 'searchprofile-articles' => 'หน้าบทความ',
 'searchprofile-project' => 'วิธีใช้และหน้าโครงการ',
@@ -1136,8 +1136,6 @@ $1",
 'search-interwiki-caption' => 'โครงการพี่น้อง',
 'search-interwiki-default' => '$1 ผลลัพธ์:',
 'search-interwiki-more' => '(มากกว่า)',
-'search-mwsuggest-enabled' => 'พร้อมคำแนะนำ',
-'search-mwsuggest-disabled' => 'ไม่รวมคำแนะนำ',
 'search-relatedarticle' => 'สัมพันธ์',
 'mwsuggest-disable' => 'ยกเลิกการแนะนำในลักษณะเอแจ็กซ์',
 'searcheverything-enable' => 'สืบค้นในเนมสเปซทั้งหมด',
@@ -1173,7 +1171,7 @@ $1",
 'mypreferences' => 'ตั้งค่าส่วนตัว',
 'prefs-edits' => 'จำนวนการแก้ไข:',
 'prefsnologin' => 'ไม่ได้ล็อกอิน',
-'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span> ก่อนเพื่อที่จะตั้งค่าส่วนตัวได้',
+'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
 'changepassword' => 'เปลี่ยนรหัสผ่าน',
 'prefs-skin' => 'หน้าตา',
 'skin-preview' => 'แสดงตัวอย่าง',
@@ -1209,7 +1207,7 @@ $1",
 'recentchangesdays' => 'จำนวนวันที่แสดงในปรับปรุงล่าสุด:',
 'recentchangesdays-max' => '(สูงสุด $1 {{PLURAL:$1|วัน|วัน}})',
 'recentchangescount' => 'จำนวนการแก้ไขที่แสดงโดยปริยาย:',
-'prefs-help-recentchangescount' => 'นี่รวมไปถึงการแก้ไขล่าสุด, ประวิติของหน้า, และรายการแก้ไขอื่นๆ',
+'prefs-help-recentchangescount' => 'นี่รวมไปถึงการแก้ไขล่าสุด, ประวิติของหน้า, และรายการแก้ไขอื่น ๆ',
 'prefs-help-watchlist-token' => 'การเติมช่องนี้ด้วยรหัสลับจะสร้าง RSS feed สำหรับรายการเฝ้าดูของคุณ
 ผู้ใดที่รู้รหัสในช่องนี้จะสามารถดูรายการเฝ้าดูของคุณได้ ดังนั้นเลือกรหัสที่ปลอดภัย
 นี่คือรหัสที่สุ่มเลือกขึ้นมาที่คุณสามารถใช้ได้: $1',
@@ -1253,14 +1251,14 @@ $1",
 'yourlanguage' => 'ภาษา:',
 'yourvariant' => 'อักษรต่างรูปของเนื้อหา:',
 'yournick' => 'ลายเซ็น:',
-'prefs-help-signature' => 'à¸\84อมà¹\80มà¸\99à¸\95à¹\8cà¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นและลงวันที่เขียน',
+'prefs-help-signature' => 'à¸\84วามà¹\80หà¹\87à¸\99à¹\83à¸\99หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\84วรà¸\88ะลà¸\87ลายเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นและลงวันที่เขียน',
 'badsig' => 'ลายเซ็นที่ใช้ผิดพลาด กรุณาตรวจสอบคำสั่งเอชทีเอ็มแอล',
 'badsiglength' => 'ลายเซ็นของคุณยาวเกินไป ต้องมีความยาวไม่เกิน $1 {{PLURAL:$1|ตัวอักษร|ตัวอักษร}}',
 'yourgender' => 'เพศ:',
 'gender-unknown' => 'ไม่ระบุ',
 'gender-male' => 'ชาย',
 'gender-female' => 'หญิง',
-'prefs-help-gender' => 'à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80สริม: à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cสามารà¸\96à¹\81ยà¸\81à¹\81ยะà¹\80à¸\9eศà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89  ข้อมูลนี้จะเป็นที่เปิดเผย',
+'prefs-help-gender' => 'à¹\80à¸\9bà¹\87à¸\99à¸\82à¹\89อมูลà¹\80สริม: à¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¹\81ยà¸\81à¹\81ยะà¹\80à¸\9eศà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84à¸\94à¹\89 ข้อมูลนี้จะเป็นที่เปิดเผย',
 'email' => 'อีเมล',
 'prefs-help-realname' => 'ไม่จำเป็นต้องใส่ชื่อจริง โดยชื่อที่ใส่นั้นจะถูกใช้เพียงแค่แสดงผลงานที่คุณได้ร่วมสร้างไว้',
 'prefs-help-email' => 'ที่อยู่อีเมลไม่จำเป็นต้องใส่ แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่านของคุณ',
@@ -2125,8 +2123,8 @@ $UNWATCHURL
 'delete-warning-toobig' => 'หน้านี้มีประวัติการแก้ไขมากเกินกว่า $1 {{PLURAL:$1|รุ่น|รุ่น}} ซึ่งถือว่าเยอะมาก การลบหน้านี้อาจทำให้ {{SITENAME}} ได้รับความเสียหายอย่างที่ไม่เคยคาดคิดมาก่อน จึงได้เตือนไว้ ก่อนที่จะกระทำสิ่งนี้',
 
 # Rollback
-'rollback' => 'à¸\96อยการแก้ไขกลับฉุกเฉิน',
-'rollback_short' => 'à¸\96อยกลับฉุกเฉิน',
+'rollback' => 'ยà¹\89อà¸\99การแก้ไขกลับฉุกเฉิน',
+'rollback_short' => 'ยà¹\89อà¸\99กลับฉุกเฉิน',
 'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
 'rollbackfailed' => 'ย้อนไม่สำเร็จ',
 'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ เนื่องจากหน้านี้ไม่มีผู้แก้ไขรายอื่นอีก',
@@ -2389,7 +2387,7 @@ $1',
 'unblocklink' => 'เลิกบล็อก',
 'change-blocklink' => 'เปลี่ยนการบล็อก',
 'contribslink' => 'เรื่องที่เขียน',
-'emaillink' => 'ส่งอีเมล',
+'emaillink' => 'ส่งอีเมล',
 'autoblocker' => 'ถูกบล็อกอัตโนมัติเนื่องจากหมายเลขไอพีของคุณตรงกับ "[[User:$1|$1]]" ถูกบล็อกกล่อนหน้านี้เนื่องจากสาเหตุ: "$2"',
 'blocklogpage' => 'ปูมการบล็อก',
 'blocklog-showlog' => 'ผู้ใช้นี้ถูกสกัดกั้นมาก่อน
@@ -2462,28 +2460,28 @@ $1',
 
 <b>คำเตือน!</b>
 การเปลี่ยนชื่อจะมีผลอย่างมากกับสถิติของหน้านิยมที่มีคนเข้าดูมาก ให้แน่ใจว่าต้องการเปลี่ยนชื่อในครั้งนี้",
-'movepagetext-noredirectfixer' => "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89จะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
+'movepagetext-noredirectfixer' => "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87จะเปลี่ยนชื่อหน้า ซึ่งจะทำให้ประวัติทั้งหมดย้ายไปยังชื่อใหม่
 ชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่
¸­à¸¢à¹\88าลืมตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
-à¸\84ุà¸\93à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\81ารà¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87à¸\95à¹\88าà¸\87 à¹\86 à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88à¸\9eวà¸\81มัà¸\99à¸\84วรà¸\88ะà¹\84à¸\9b
¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88า ตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]
+à¸\84ุà¸\93à¸\88ะà¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าลิà¸\87à¸\81à¹\8cà¸\95à¹\88าà¸\87 à¹\86 à¸¢à¸±à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88สมà¸\84วร
 
 โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าว่างหรือหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต
-à¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\84à¸\9bà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมหากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
+à¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมà¹\84à¸\94à¹\89หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้
 
 '''คำเตือน!'''
 สิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม
-à¹\82à¸\9bรà¸\94à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¹\80à¸\82à¹\89าà¹\83à¸\88à¹\83à¸\99à¸\9cลà¸\82อà¸\87à¸\81ารà¸\81ระà¸\97ำนี้ก่อนที่จะดำเนินการต่อไป",
+à¹\82à¸\9bรà¸\94à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\84ุà¸\93à¹\80à¸\82à¹\89าà¹\83à¸\88à¸\96ึà¸\87à¸\9cลลัà¸\9eà¸\98à¹\8cนี้ก่อนที่จะดำเนินการต่อไป",
 'movepagetalktext' => "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปด้วย '''เว้นเสียแต่:'''
-*หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88วà¹\88าà¸\87มีà¹\81ลà¹\89วà¸\97ีà¹\88ชื่อใหม่ หรือ
-*à¹\84à¸\94à¹\89เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง
+*มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\97ีà¹\88à¹\84มà¹\88วà¹\88าà¸\87อยูà¹\88à¹\81ลà¹\89วภายà¹\83à¸\95à¹\89ชื่อใหม่ หรือ
+*à¸\84ุà¸\93เลือกไม่ต้องการเปลี่ยนชื่อด้านล่าง
 
-ในกรณีนั้นให้เปลี่ยนชื่อหน้าเอง",
+ในกรณีนั้น คุณจำต้องย้ายหรือรวมหน้าเองหากต้องการ",
 'movearticle' => 'เปลี่ยนชื่อ',
-'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังจะย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่ได้ถูกเปลี่ยนชื่อแต่อย่างใด'''",
+'moveuserpage-warning' => "'''คำเตือน''' คุณกำลังจะย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่'''ถูกเปลี่ยนชื่อ",
 'movenologin' => 'ไม่ได้ล็อกอิน',
 'movenologintext' => 'ถ้าต้องการเปลี่ยนชื่อหน้านี้ ต้องลงทะเบียนและให้ทำการ[[Special:UserLogin|ล็อกอิน]]',
 'movenotallowed' => 'คุณไม่ได้รับอนุญาตให้ทำการย้ายหน้าต่าง ๆ',
-'movenotallowedfile' => 'à¸\84ุà¸\93à¹\84มà¹\88มีสิà¸\97à¸\98ิà¹\8cà¸\97ีà¹\88à¸\88ะยà¹\89ายà¹\84à¸\9fลà¹\8c',
+'movenotallowedfile' => 'คุณไม่มีสิทธิที่จะย้ายไฟล์',
 'cant-move-user-page' => 'คุณไม่มีสิทธิในการย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)',
 'cant-move-to-user-page' => 'คุณไม่มีสิทธิในการย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)',
 'newtitle' => 'ชื่อใหม่',
@@ -2495,7 +2493,7 @@ $1',
 'movepage-moved-noredirect' => 'หน้าเปลี่ยนทางไม่ได้ถูกสร้าง',
 'articleexists' => 'หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่',
 'cantmove-titleprotected' => 'คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อใหม่นี้ได้รับการป้องกันไม่ให้สร้างใหม่',
-'talkexists' => "'''หà¸\99à¹\89าà¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\80รียà¸\9aรà¹\89อย à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\95ามà¹\84à¸\9bà¸\94à¹\89วยà¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\8bà¹\89ำà¹\81ลà¹\89ว à¹\83หà¹\89à¸\95รวà¸\88สอà¸\9aà¹\81ละย้ายเองอีกครั้ง'''",
+'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ย้ายเองอีกครั้ง'''",
 'movedto' => 'เปลี่ยนชื่อเป็น',
 'movetalk' => 'เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน',
 'move-subpages' => 'ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)',
@@ -2529,10 +2527,10 @@ $1',
 'imageinvalidfilename' => 'ชื่อไฟล์เป้าหมายไม่ถูกต้อง',
 'fix-double-redirects' => 'อัปเดตหน้าเปลี่ยนทางทุกหน้าที่โอนไปยังชื่อเดิม',
 'move-leave-redirect' => 'สร้างหน้าเปลี่ยนทางตามมา',
-'protectedpagemovewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ดูแลระบบเท่านั้น'''
-บันทึกการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
-'semiprotectedpagemovewarning' => "'''หมายà¹\80หà¸\95ุ:''' à¸«à¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81 à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99
-รายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87",
+'protectedpagemovewarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และเฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้
+บันทึกการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
+'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
+รายà¸\81ารà¸\9bูมลà¹\88าสุà¸\94à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87:",
 'move-over-sharedrepo' => '== มีไฟล์เดิมปรากฏ ==
 ไฟล์ [[:$1]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้',
 'file-exists-sharedrepo' => 'ชื่อไฟล์นี้มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง
@@ -2638,7 +2636,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'การทดสอบจาวาสคริปต์',
-'javascripttest-disabled' => 'ฟังก์ชั่นการทำงานนี้ถูกปิดการใช้งานอยู่',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'หน้าผู้ใช้ของคุณ',
@@ -2652,7 +2649,7 @@ $1',
 'tooltip-pt-anonlogin' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
 'tooltip-pt-logout' => 'ล็อกเอาต์',
 'tooltip-ca-talk' => 'พูดคุยเกี่ยวกับเนื้อหา',
-'tooltip-ca-edit' => 'หà¸\99à¹\89าà¸\99ีà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89 à¸\81à¹\88อà¸\99à¸\97ำà¸\81ารà¸\9aัà¸\99à¸\97ึà¸\81à¹\83หà¹\89à¸\81รุà¸\93าà¸\81à¸\94à¸\9bุà¹\88มà¸\94ูà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99 à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¹\84à¸\94à¹\89à¸\95ามà¸\97ีà¹\88à¸\95à¹\89อà¸\87à¸\81าร',
+'tooltip-ca-edit' => 'à¸\84ุà¸\93สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¹\83à¸\8aà¹\89à¸\9bุà¹\88มà¸\94ูà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99à¸\9aัà¸\99à¸\97ึà¸\81',
 'tooltip-ca-addsection' => 'เริ่มหัวข้อย่อยใหม่',
 'tooltip-ca-viewsource' => 'หน้านี้ถูกล็อก แต่ยังดูโค้ดได้',
 'tooltip-ca-history' => 'รุ่นที่แล้วของหน้านี้',
@@ -2667,7 +2664,7 @@ $1',
 'tooltip-search-go' => 'ตรงไปยังหน้าที่ตรงกับชื่อนี้ (ถ้ามี)',
 'tooltip-search-fulltext' => 'ค้นหาหน้าที่มีข้อความนี้',
 'tooltip-p-logo' => 'หน้าหลัก',
-'tooltip-n-mainpage' => 'à¹\81วะหน้าหลัก',
+'tooltip-n-mainpage' => 'à¹\80à¸\82à¹\89าสูà¹\88หน้าหลัก',
 'tooltip-n-mainpage-description' => 'เข้าสู่หน้าหลัก',
 'tooltip-n-portal' => 'เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา',
 'tooltip-n-currentevents' => 'ค้นหาเหตุการณ์ปัจจุบัน',
@@ -2683,7 +2680,7 @@ $1',
 'tooltip-t-upload' => 'อัปโหลดภาพหรือไฟล์',
 'tooltip-t-specialpages' => 'แสดงรายการหน้าพิเศษ',
 'tooltip-t-print' => 'หน้าที่แสดงผลพร้อมสำหรับพิมพ์ออกมา',
-'tooltip-t-permalink' => 'ลิà¸\87à¸\81à¹\8cà¸\96าวรมาà¸\97ีà¹\88à¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\99ีà¹\89à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89',
+'tooltip-t-permalink' => 'ลิà¸\87à¸\81à¹\8cà¸\96าวรมาà¸\97ีà¹\88à¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า',
 'tooltip-ca-nstab-main' => 'ดูหน้าเนื้อหา',
 'tooltip-ca-nstab-user' => 'ดูหน้าผู้ใช้',
 'tooltip-ca-nstab-media' => 'ดูหน้าสื่อ ภาพ เพลง',
@@ -2692,7 +2689,7 @@ $1',
 'tooltip-ca-nstab-image' => 'ดูหน้าภาพ',
 'tooltip-ca-nstab-mediawiki' => 'ดูข้อความระบบ',
 'tooltip-ca-nstab-template' => 'ดูหน้าแม่แบบ',
-'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าà¸\84ำอà¸\98ิà¸\9aาย',
+'tooltip-ca-nstab-help' => 'à¸\94ูหà¸\99à¹\89าวิà¸\98ีà¹\83à¸\8aà¹\89',
 'tooltip-ca-nstab-category' => 'ดูหน้าหมวดหมู่',
 'tooltip-minoredit' => 'กำหนดเป็นการแก้ไขเล็กน้อย',
 'tooltip-save' => 'บันทึกการแก้ไข',
@@ -2980,7 +2977,7 @@ $1',
 'exif-gpsareainformation' => 'ชื่อของพื้นที่จีพีเอส',
 'exif-gpsdatestamp' => 'วันที่จีพีเอส',
 'exif-gpsdifferential' => 'การปรับแค่ข้อแตกต่างจีพีเอส',
-'exif-keywords' => 'à¸\84ียà¹\8cà¹\80วิรà¹\8cà¸\94',
+'exif-keywords' => 'à¸\84ำสำà¸\84ัà¸\8d',
 'exif-objectname' => 'ชื่อเรื่องสั้น',
 'exif-headline' => 'พาดหัวข่าว',
 'exif-contact' => 'ข้อมูลสำหรับติดต่อ',
@@ -3385,7 +3382,7 @@ $5
 'specialpages-group-spam' => 'เครื่องมือเกี่ยวกับสแปม',
 
 # Special:BlankPage
-'blankpage' => 'หน้าว่างเปล่า',
+'blankpage' => 'หน้าว่าง',
 'intentionallyblankpage' => 'หน้านี้ถูกทิ้งว่างโดยเจตนา',
 
 # External image whitelist
@@ -3439,7 +3436,7 @@ $5
 'htmlform-required' => 'จำเป็นต้องกรอกข้อมูลนี้',
 'htmlform-submit' => 'ส่งข้อมูล',
 'htmlform-reset' => 'ยกเลิกการเปลื่ยนแปลง',
-'htmlform-selectorother-other' => 'อื่นๆ',
+'htmlform-selectorother-other' => 'อื่น ๆ',
 
 # SQLite database support
 'sqlite-has-fts' => 'รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม',
@@ -3472,7 +3469,11 @@ $5
 'feedback-adding' => 'เพิ่มคำติชมเข้าไปที่หน้า...',
 'feedback-close' => 'เสร็จสิ้น',
 
+# Search suggestions
+'searchsuggest-search' => 'ค้นหา',
+'searchsuggest-containing' => 'ประกอบไปด้วย...',
+
 # API errors
-'api-error-mustbeloggedin' => 'à¸\81รุà¸\93าลà¸\87à¸\8aืà¹\88อà¹\80à¸\82à¹\89าà¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88อà¸\97ำà¸\81ารอัà¸\9eโหลดไฟล์',
+'api-error-mustbeloggedin' => 'à¸\81รุà¸\93าลà¸\87à¸\8aืà¹\88อà¹\80à¸\82à¹\89าà¹\83à¸\8aà¹\89à¹\80à¸\9eืà¹\88ออัà¸\9bโหลดไฟล์',
 
 );
index 1a62f89..a03f817 100644 (file)
 
 $messages = array(
 'underline-always' => 'ጥራይ',
-'underline-never'  => 'ኣይትግበሩ',
+'underline-never' => 'ኣይትግበሩ',
 
 # Dates
-'sunday'    => 'ሰንበት',
-'monday'    => 'ሰኑይ',
-'tuesday'   => 'ሰሉስ',
+'sunday' => 'ሰንበት',
+'monday' => 'ሰኑይ',
+'tuesday' => 'ሰሉስ',
 'wednesday' => 'ረብዓ',
-'thursday'  => 'ኃሙስ',
-'friday'    => 'ዓርቢ',
-'saturday'  => 'ቀዳም',
-'sun'       => 'ሰንበ',
-'mon'       => 'ሰኑይ',
-'tue'       => 'ሠሉስ',
-'wed'       => 'ረቡዕ',
-'thu'       => 'ኃሙስ',
-'fri'       => 'ዓርቢ',
-'sat'       => 'ቀዳም',
-'january'   => 'ትሪ',
-'february'  => 'ለካቲት',
-'march'     => 'መጋቢት',
-'april'     => 'ሚያዝያ',
-'may_long'  => 'ግንቦት',
-'june'      => 'ሰነ',
-'july'      => 'ሓምለ',
-'august'    => 'ነሓሰ',
+'thursday' => 'ኃሙስ',
+'friday' => 'ዓርቢ',
+'saturday' => 'ቀዳም',
+'sun' => 'ሰንበ',
+'mon' => 'ሰኑይ',
+'tue' => 'ሠሉስ',
+'wed' => 'ረቡዕ',
+'thu' => 'ኃሙስ',
+'fri' => 'ዓርቢ',
+'sat' => 'ቀዳም',
+'january' => 'ትሪ',
+'february' => 'ለካቲት',
+'march' => 'መጋቢት',
+'april' => 'ሚያዝያ',
+'may_long' => 'ግንቦት',
+'june' => 'ሰነ',
+'july' => 'ሓምለ',
+'august' => 'ነሓሰ',
 'september' => 'መስከረም',
-'october'   => 'ጥቅምቲ',
-'november'  => 'ኅዳር',
-'december'  => 'ታኅሣሥ',
-'jan'       => 'ጃንዩ',
-'feb'       => 'ፌብሩ',
-'mar'       => 'ማርች',
-'apr'       => 'ኤፕረ',
-'may'       => 'ሜይ',
-'jun'       => 'ጁን',
-
-'about'  => 'ብዛዕባ ብጠቅላላ',
+'october' => 'ጥቅምቲ',
+'november' => 'ኅዳር',
+'december' => 'ታኅሣሥ',
+'jan' => 'ጃንዩ',
+'feb' => 'ፌብሩ',
+'mar' => 'ማርች',
+'apr' => 'ኤፕረ',
+'may' => 'ሜይ',
+'jun' => 'ጁን',
+
+'about' => 'ብዛዕባ ብጠቅላላ',
 'mypage' => 'ፅሑፈይ',
 
 # Cologne Blue skin
 'qbpageoptions' => 'ፅሑፍዚ',
-'qbmyoptions'   => 'ፅሑፋተይ',
+'qbmyoptions' => 'ፅሑፋተይ',
 
-'help'          => 'ፍንጪ',
-'search'        => 'ድሉይ',
-'searchbutton'  => 'ድሉይ',
-'history'       => 'ናይ ፅሑፍ ታሪኽ',
+'help' => 'ፍንጪ',
+'search' => 'ድሉይ',
+'searchbutton' => 'ድሉይ',
+'history' => 'ናይ ፅሑፍ ታሪኽ',
 'history_short' => 'ታሪኽ',
-'newpage'       => 'ሓዳስ ፅሑፍ',
-'jumptosearch'  => 'ድሉይ',
+'newpage' => 'ሓዳስ ፅሑፍ',
+'jumptosearch' => 'ድሉይ',
 
 # 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'            => 'ብዛዕባ ዊኪፒዲያ ብጠቅላላ',
-'mainpage'             => 'መበገሲ ገጽ',
+'aboutsite' => 'ብዛዕባ ዊኪፒዲያ ብጠቅላላ',
+'mainpage' => 'መበገሲ ገጽ',
 'mainpage-description' => 'መበገሲ ገጽ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'    => 'ፅሑፍ',
-'nstab-user'    => 'ናይ ፅሑፍ ኣባል',
+'nstab-main' => 'ፅሑፍ',
+'nstab-user' => 'ናይ ፅሑፍ ኣባል',
 'nstab-project' => 'ናይ ፅሑፍ ፕሮጀክት',
-'nstab-image'   => 'ምስሊ',
+'nstab-image' => 'ምስሊ',
 
 # Login and logout pages
-'yourname'           => 'ናይ ኣባል ሽም:',
+'yourname' => 'ናይ ኣባል ሽም:',
 'loginlanguagelabel' => 'ቋንቋ: $1',
 
 # Edit pages
 'savearticle' => 'ፅሑፍ ኣቐምጥ',
-'newarticle'  => '(ሓዳስ)',
+'newarticle' => '(ሓዳስ)',
 
 # History pages
-'next'        => 'ዝቕጽል',
+'next' => 'ዝቕጽል',
 'historysize' => '($1 {{PLURAL:$1|ባይታት|ባይታት}})',
 
 # Search results
-'prevn'       => 'ናይ ቀደም {{PLURAL:$1|$1}}',
-'nextn'       => 'ዝቕጽል {{PLURAL:$1|$1}}',
+'prevn' => 'ናይ ቀደም {{PLURAL:$1|$1}}',
+'nextn' => 'ዝቕጽል {{PLURAL:$1|$1}}',
 'powersearch' => 'ድሉይ',
 
 # Preferences page
-'preferences'       => 'ኣማረጽቲ',
-'mypreferences'     => 'ናተይ ኣማረጽቲ',
-'saveprefs'         => 'ኣቐምጥ',
+'preferences' => 'ኣማረጽቲ',
+'mypreferences' => 'ናተይ ኣማረጽቲ',
+'saveprefs' => 'ኣቐምጥ',
 'searchresultshead' => 'ድሉይ',
-'savedprefs'        => 'ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።',
-'prefs-files'       => 'ምስልታት',
-'youremail'         => 'ኢ-መይል:',
-'yourlanguage'      => 'ቋንቋ:',
-'email'             => 'ኢ-መይል',
+'savedprefs' => 'ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።',
+'prefs-files' => 'ምስልታት',
+'youremail' => 'ኢ-መይል:',
+'yourlanguage' => 'ቋንቋ:',
+'email' => 'ኢ-መይል',
 
 # Groups
-'group'       => 'ብሓበር:',
+'group' => 'ብሓበር:',
 'group-sysop' => 'ሲሶፓት',
 
 'group-sysop-member' => '{{GENDER:$1|ሲሶፕ}}',
 
 # Recent changes
-'hist'          => 'ታሪኽ',
+'hist' => 'ታሪኽ',
 'newpageletter' => 'ሓ',
 
 # Upload
 'savefile' => 'ምስሊ ኣቐምጥ',
 
 # Special:ListFiles
-'imgfile'        => 'ምስሊ',
-'listfiles'      => 'ምስልታት',
+'imgfile' => 'ምስሊ',
+'listfiles' => 'ምስልታት',
 'listfiles_name' => 'ሽም',
 'listfiles_user' => 'ኣባል',
 
@@ -127,10 +127,10 @@ $messages = array(
 'file-anchor-link' => 'ምስሊ',
 
 # Miscellaneous special pages
-'nbytes'            => '$1 {{PLURAL:$1|ባይት|ባይታት}}',
-'longpages'         => 'ነዋሕቲ ፅሑፋት',
-'listusers'         => 'ኣባላት',
-'newpages'          => 'ሓደሽቲ ዛዕባታት',
+'nbytes' => '$1 {{PLURAL:$1|ባይት|ባይታት}}',
+'longpages' => 'ነዋሕቲ ፅሑፋት',
+'listusers' => 'ኣባላት',
+'newpages' => 'ሓደሽቲ ዛዕባታት',
 'newpages-username' => 'ናይ ኣባል ሽም:',
 
 # Book sources
@@ -141,11 +141,11 @@ $messages = array(
 
 # Special:AllPages
 'alphaindexline' => '$1 ናብ $2',
-'nextpage'       => 'ዝቕጽል ፅሑፍ ($1)',
-'prevpage'       => 'ናይ ቀደም ፅሑፍ ($1)',
-'allarticles'    => 'ኵሎም ፅሑፋት',
-'allpagesprev'   => 'ናይ ቀደም',
-'allpagesnext'   => 'ዝቕጽል',
+'nextpage' => 'ዝቕጽል ፅሑፍ ($1)',
+'prevpage' => 'ናይ ቀደም ፅሑፍ ($1)',
+'allarticles' => 'ኵሎም ፅሑፋት',
+'allpagesprev' => 'ናይ ቀደም',
+'allpagesnext' => 'ዝቕጽል',
 'allpagessubmit' => 'ኪድ',
 
 # Protect
@@ -179,15 +179,15 @@ $messages = array(
 'imgmultipagenext' => 'ዝቕጽል ፅሑፍ →',
 
 # Table pager
-'table_pager_next'         => 'ዝቕጽል ፅሑፍ',
-'table_pager_prev'         => 'ናይ ቀደም ፅሑፍ',
+'table_pager_next' => 'ዝቕጽል ፅሑፍ',
+'table_pager_prev' => 'ናይ ቀደም ፅሑፍ',
 'table_pager_limit_submit' => 'ኪድ',
 
 # Auto-summaries
 'autosumm-new' => 'ሓዳስ ፅሑፍ: $1',
 
 # Size units
-'size-bytes'     => '$1 ባይታት',
+'size-bytes' => '$1 ባይታት',
 'size-kilobytes' => '$1 ኪሎባይታት',
 'size-megabytes' => '$1 ሜጋባይታት',
 'size-gigabytes' => '$1 ጊጋባይታት',
index 8530ecd..8a31a0b 100644 (file)
@@ -422,7 +422,7 @@ Görkezilen sebäp: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Sessiýany ýapdyňyz.'''
 
-Indi anonim ýagdaýda {{SITENAME}} saýtyny ulanyp bilersiňiz, ýa-da şol bir ýa-da başga bir at bilen [[Special:UserLogin|sessiýany ýaňadan]] açyp bilersiňiz.
+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! ==
 
@@ -975,8 +975,6 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 'search-interwiki-caption' => 'Dogan taslamalar',
 'search-interwiki-default' => '$1 netijeler:',
 'search-interwiki-more' => '(has-da köp)',
-'search-mwsuggest-enabled' => 'teklipler bilen',
-'search-mwsuggest-disabled' => 'teklip ýok',
 'search-relatedarticle' => 'Baglanyşykly',
 'mwsuggest-disable' => 'AJAX tekliplerini ýap',
 'searcheverything-enable' => 'Ähli at giňişliklerinde gözle',
@@ -3146,4 +3144,8 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.',
 'revdelete-unrestricted' => 'administratorlardan aýyrylan çäklendirmeler',
 'newuserlog-byemail' => 'parol e-poçta bilen iberildi',
 
+# Search suggestions
+'searchsuggest-search' => 'Gözleg',
+'searchsuggest-containing' => 'öz içine alýar...',
+
 );
index a26c3aa..0d61625 100644 (file)
@@ -27,8 +27,8 @@ $namespaceNames = array(
        NS_FILE_TALK        => 'Usapang_talaksan',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'Usapang_MediaWiki',
-       NS_TEMPLATE         => 'Suleras',
-       NS_TEMPLATE_TALK    => 'Usapang_suleras',
+       NS_TEMPLATE         => 'Padron',
+       NS_TEMPLATE_TALK    => 'Usapang_padron',
        NS_HELP             => 'Tulong',
        NS_HELP_TALK        => 'Usapang_tulong',
        NS_CATEGORY         => 'Kategorya',
@@ -36,100 +36,114 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       'Talaksan'          => NS_FILE,
-       'Usapang talaksan'  => NS_FILE_TALK,
-       'Kaurian'         => NS_CATEGORY,
-       'Usapang_kaurian' => NS_CATEGORY_TALK,
+       'Talaksan'         => NS_FILE,
+       'Usapang talaksan' => NS_FILE_TALK,
+       'Suleras'          => NS_TEMPLATE,
+       'Usapang_suleras'  => NS_TEMPLATE_TALK,
+       'Kaurian'          => NS_CATEGORY,
+       'Usapang_kaurian'  => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
-       'Allmessages'               => array( 'Lahat ng mga mensahe' ),
-       'Allpages'                  => array( 'Lahat ng mga pahina', 'LahatPahina' ),
-       'Ancientpages'              => array( 'Sinaunang mga pahina' ),
-       'Blankpage'                 => array( 'Tanggalin ang nilalaman ng pahina' ),
-       'Block'                     => array( 'Hadlangan', 'Hadlangan ang IP', 'Hadlangan ang tagagamit' ),
-       'Blockme'                   => array( 'Hadlangang ako' ),
-       'Booksources'               => array( 'Mga pinagmulang aklat' ),
-       'BrokenRedirects'           => array( 'Naputol na mga panturo papunta sa ibang pahina', 'NaputulangPanturo' ),
-       'Categories'                => array( 'Mga kaurian' ),
-       'ChangePassword'            => array( 'Baguhin ang hudyat', 'Muling itakda ang hudyat', 'Muling magtakda ng hudyat' ),
-       'Confirmemail'              => array( 'Tiyakin ang e-liham' ),
-       'Contributions'             => array( 'Mga ambag' ),
-       'CreateAccount'             => array( 'Likhain ang kuwenta', 'LikhaKuwenta' ),
-       'Deadendpages'              => array( 'Mga pahinang sukol', 'Mga pahinang walang lagusan' ),
-       'DeletedContributions'      => array( 'Naburang mga ambag' ),
-       'Disambiguations'           => array( 'Mga paglilinaw', 'Paglilinaw' ),
-       'DoubleRedirects'           => array( 'Nagkadalawang mga panturo papunta sa ibang pahina', 'DoblengPanturo' ),
-       'Emailuser'                 => array( 'Tagagamit ng e-liham' ),
+       'Activeusers'               => array( 'Masisiglang_mga_Tagagamit' ),
+       'Allmessages'               => array( 'Lahat_ng_mga_mensahe' ),
+       'Allpages'                  => array( 'Lahat_ng_mga_pahina', 'LahatPahina' ),
+       'Ancientpages'              => array( 'Sinaunang_mga_pahina' ),
+       'Badtitle'                  => array( 'Masamang_pamagat' ),
+       'Blankpage'                 => array( 'Tanggalin_ang_nilalaman_ng_pahina' ),
+       'Block'                     => array( 'Hadlangan', 'Hadlangan_ang_IP', 'Hadlangan_ang_tagagamit' ),
+       'Blockme'                   => array( 'Hadlangang_ako' ),
+       'Booksources'               => array( 'Mga_pinagmulang_aklat' ),
+       'BrokenRedirects'           => array( 'Naputol_na_mga_panturo_papunta_sa_ibang_pahina', 'NaputulangPanturo' ),
+       'Categories'                => array( 'Mga_kategorya' ),
+       'ChangeEmail'               => array( 'Baguhin_ang_e-liham' ),
+       'ChangePassword'            => array( 'Baguhin_ang_hudyat', 'Muling_itakda_ang_hudyat', 'Muling_magtakda_ng_hudyat' ),
+       'ComparePages'              => array( 'Paghambingin_ang_mga_Pahina' ),
+       'Confirmemail'              => array( 'Tiyakin_ang_e-liham' ),
+       'Contributions'             => array( 'Mga_ambag' ),
+       'CreateAccount'             => array( 'Likhain_ang_kuwenta', 'LikhaKuwenta' ),
+       'Deadendpages'              => array( 'Mga_pahinang_sukol', 'Mga_pahinang_walang_lagusan' ),
+       'DeletedContributions'      => array( 'Naburang_mga_ambag' ),
+       'Disambiguations'           => array( 'Mga_paglilinaw', 'Paglilinaw' ),
+       'DoubleRedirects'           => array( 'Nagkadalawang_mga_panturo_papunta_sa_ibang_pahina', 'DoblengPanturo' ),
+       'EditWatchlist'             => array( 'Baguhin_ang_Bantayan' ),
+       'Emailuser'                 => array( 'Tagagamit_ng_e-liham' ),
        'Export'                    => array( 'Pagluluwas' ),
-       'Fewestrevisions'           => array( 'Pinakakaunting mga pagbabago' ),
-       'FileDuplicateSearch'       => array( 'Paghahanap ng kamukhang talaksan' ),
-       'Filepath'                  => array( 'Daanan ng talaksan' ),
+       'Fewestrevisions'           => array( 'Pinakakaunting_mga_pagbabago' ),
+       'FileDuplicateSearch'       => array( 'Paghahanap_ng_kamukhang_talaksan' ),
+       'Filepath'                  => array( 'Daanan_ng_talaksan' ),
        'Import'                    => array( 'Pag-aangkat' ),
-       'Invalidateemail'           => array( 'Hindi tanggap na e-liham' ),
-       'BlockList'                 => array( 'Talaan ng hinahadlangan', 'Talaan ng mga hinahadlangan', 'Talaan ng hinahadlangang IP' ),
-       'LinkSearch'                => array( 'Paghahanap ng kawing' ),
-       'Listadmins'                => array( 'Talaan ng mga tagapangasiwa' ),
-       'Listbots'                  => array( 'Talaan ng mga bot' ),
-       'Listfiles'                 => array( 'Itala ang mga talaksan', 'Talaan ng mga talaksan', 'Talaan ng mga larawan' ),
-       'Listgrouprights'           => array( 'Talaan ng mga karapatan ng pangkat' ),
-       'Listredirects'             => array( 'Talaan ng mga pagturo sa ibang pahina' ),
-       'Listusers'                 => array( 'Talaan ng mga tagagamit', 'Talaan ng tagagamit' ),
-       'Lockdb'                    => array( 'Ikandado ang kalipunan ng dato' ),
-       'Log'                       => array( 'Tala', 'Mga tala' ),
-       'Lonelypages'               => array( 'Nangungulilang mga pahina', 'Ulilang mga pahina' ),
-       'Longpages'                 => array( 'Mahabang mga pahina' ),
-       'MergeHistory'              => array( 'Pagsanibin ang kasaysayan' ),
-       'MIMEsearch'                => array( 'Paghahanap ng MIME' ),
-       'Mostcategories'            => array( 'Pinakamaraming mga kaurian' ),
-       'Mostimages'                => array( 'Mga talaksang may pinakamaraming kawing', 'Pinakamaraming talaksan', 'Pinakamaraming larawan' ),
-       'Mostlinked'                => array( 'Mga pahinang may pinakamaraming kawing', 'Pinakamaraming kawing' ),
-       'Mostlinkedcategories'      => array( 'Mga kauriang may pinakamaraming kawing', 'Pinakagamiting mga kaurian' ),
-       'Mostlinkedtemplates'       => array( 'Mga suleras na may pinakamaraming kawing', 'Pinakagamiting mga suleras' ),
-       'Mostrevisions'             => array( 'Pinakamaraming mga pagbabago' ),
-       'Movepage'                  => array( 'Ilipat ang pahina' ),
-       'Mycontributions'           => array( 'Mga ambag ko' ),
-       'Mypage'                    => array( 'Pahina ko' ),
-       'Mytalk'                    => array( 'Usapan ko' ),
-       'Newimages'                 => array( 'Bagong mga talaksan', 'Bagong mga larawan' ),
-       'Newpages'                  => array( 'Bagong mga pahina' ),
-       'Popularpages'              => array( 'Sikat na mga pahina' ),
-       'Preferences'               => array( 'Mga nais' ),
-       'Prefixindex'               => array( 'Talatuntunan ng unlapi' ),
-       'Protectedpages'            => array( 'Mga pahinang nakasanggalang' ),
-       'Protectedtitles'           => array( 'Mga pamagat na nakasanggalang' ),
-       'Randompage'                => array( 'Alin man', 'Alin mang pahina' ),
-       'Randomredirect'            => array( 'Pagtuturo papunta sa alin mang pahina' ),
-       'Recentchanges'             => array( 'Mga huling binago', 'HulingBinago' ),
-       'Recentchangeslinked'       => array( 'Nakakawing ng kamakailang pagbabago', 'Kaugnay na mga pagbabago' ),
-       'Revisiondelete'            => array( 'Pagbura ng pagbabago' ),
+       'Invalidateemail'           => array( 'Hindi_tanggap_na_e-liham' ),
+       'JavaScriptTest'            => array( 'Pagsubok_sa_JavaScript' ),
+       'BlockList'                 => array( 'Talaan_ng_hinahadlangan', 'Talaan_ng_mga_hinahadlangan', 'Talaan_ng_hinahadlangang_IP' ),
+       'LinkSearch'                => array( 'Paghahanap_ng_kawing' ),
+       'Listadmins'                => array( 'Talaan_ng_mga_tagapangasiwa' ),
+       'Listbots'                  => array( 'Talaan_ng_mga_bot' ),
+       'Listfiles'                 => array( 'Itala_ang_mga_talaksan', 'Talaan_ng_mga_talaksan', 'Talaan_ng_mga_larawan' ),
+       'Listgrouprights'           => array( 'Talaan_ng_mga_karapatan_ng_pangkat' ),
+       'Listredirects'             => array( 'Talaan_ng_mga_pagturo_sa_ibang_pahina' ),
+       'Listusers'                 => array( 'Talaan_ng_mga_tagagamit', 'Talaan_ng_tagagamit' ),
+       'Lockdb'                    => array( 'Ikandado_ang_kalipunan_ng_datos' ),
+       'Log'                       => array( 'Tala', 'Mga_tala' ),
+       'Lonelypages'               => array( 'Nangungulilang_mga_pahina', 'Ulilang_mga_pahina' ),
+       'Longpages'                 => array( 'Mahabang_mga_pahina' ),
+       'MergeHistory'              => array( 'Pagsanibin_ang_kasaysayan' ),
+       'MIMEsearch'                => array( 'Paghahanap_ng_MIME' ),
+       'Mostcategories'            => array( 'Pinakamaraming_mga_kategorya' ),
+       'Mostimages'                => array( 'Mga_talaksang_may_pinakamaraming_kawing', 'Pinakamaraming_talaksan', 'Pinakamaraming_larawan' ),
+       'Mostlinked'                => array( 'Mga_pahinang_may_pinakamaraming_kawing', 'Pinakamaraming_kawing' ),
+       'Mostlinkedcategories'      => array( 'Mga_kategoryang_may_pinakamaraming_kawing', 'Pinakagamiting_mga_kategorya' ),
+       'Mostlinkedtemplates'       => array( 'Mga_suleras_na_may_pinakamaraming_kawing', 'Pinakagamiting_mga_suleras' ),
+       'Mostrevisions'             => array( 'Pinakamaraming_mga_pagbabago' ),
+       'Movepage'                  => array( 'Ilipat_ang_pahina' ),
+       'Mycontributions'           => array( 'Mga_ambag_ko' ),
+       'Mypage'                    => array( 'Pahina_ko' ),
+       'Mytalk'                    => array( 'Usapan_ko' ),
+       'Myuploads'                 => array( 'Mga_Pagkakarga_Kong_Paitaas' ),
+       'Newimages'                 => array( 'Bagong_mga_talaksan', 'Bagong_mga_larawan' ),
+       'Newpages'                  => array( 'Bagong_mga_pahina' ),
+       'PasswordReset'             => array( 'Muling_Pagtatakda_ng_Hudyat' ),
+       'PermanentLink'             => array( 'Pamalagiang_Kawing' ),
+       'Popularpages'              => array( 'Sikat_na_mga_pahina' ),
+       'Preferences'               => array( 'Mga_nais' ),
+       'Prefixindex'               => array( 'Talatuntunan_ng_unlapi' ),
+       'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
+       'Protectedtitles'           => array( 'Mga_pamagat_na_nakasanggalang' ),
+       'Randompage'                => array( 'Alin_man', 'Alin_mang_pahina' ),
+       'Randomredirect'            => array( 'Pagtuturo_papunta_sa_alin_mang_pahina' ),
+       'Recentchanges'             => array( 'Mga_huling_binago', 'HulingBinago' ),
+       'Recentchangeslinked'       => array( 'Nakakawing_ng_kamakailang_pagbabago', 'Kaugnay_na_mga_pagbabago' ),
+       'Revisiondelete'            => array( 'Pagbura_ng_pagbabago' ),
+       'RevisionMove'              => array( 'Paglipat_ng_Rebisyon' ),
        'Search'                    => array( 'Maghanap' ),
-       'Shortpages'                => array( 'Maikling mga pahina' ),
-       'Specialpages'              => array( 'Natatanging mga pahina' ),
-       'Statistics'                => array( 'Mga estadistika', 'Estadistika' ),
-       'Tags'                      => array( 'Mga tatak' ),
-       'Uncategorizedcategories'   => array( 'Mga kauriang walang kaurian' ),
-       'Uncategorizedimages'       => array( 'Mga talaksang walang kaurian', 'Mga larawang walang kaurian' ),
-       'Uncategorizedpages'        => array( 'Mga pahinang walang kaurian' ),
-       'Uncategorizedtemplates'    => array( 'Mga suleras na walang kaurian' ),
-       'Undelete'                  => array( 'Huwag burahin' ),
-       'Unlockdb'                  => array( 'Huwag ikandado ang kalipunan ng dato' ),
-       'Unusedcategories'          => array( 'Hindi ginagamit na mga kaurian' ),
-       'Unusedimages'              => array( 'Hindi ginagamit na mga talaksan', 'Hindi ginagamit na mga larawan' ),
-       'Unusedtemplates'           => array( 'Mga suleras na hindi ginagamit' ),
-       'Unwatchedpages'            => array( 'Mga pahinang hindi binabantayanan' ),
+       'Shortpages'                => array( 'Maikling_mga_pahina' ),
+       'Specialpages'              => array( 'Natatanging_mga_pahina' ),
+       'Statistics'                => array( 'Mga_estadistika', 'Estadistika' ),
+       'Tags'                      => array( 'Mga_tatak' ),
+       'Unblock'                   => array( 'Huwag_hadlangan' ),
+       'Uncategorizedcategories'   => array( 'Mga_kauriang_walang_kaurian' ),
+       'Uncategorizedimages'       => array( 'Mga_talaksang_walang_kaurian', 'Mga_larawang_walang_kaurian' ),
+       'Uncategorizedpages'        => array( 'Mga_pahinang_walang_kaurian' ),
+       'Uncategorizedtemplates'    => array( 'Mga_suleras_na_walang_kaurian' ),
+       'Undelete'                  => array( 'Huwag_burahin' ),
+       'Unlockdb'                  => array( 'Huwag_ikandado_ang_kalipunan_ng_dato' ),
+       'Unusedcategories'          => array( 'Hindi_ginagamit_na_mga_kaurian' ),
+       'Unusedimages'              => array( 'Hindi_ginagamit_na_mga_talaksan', 'Hindi_ginagamit_na_mga_larawan' ),
+       'Unusedtemplates'           => array( 'Mga_suleras_na_hindi_ginagamit' ),
+       'Unwatchedpages'            => array( 'Mga_pahinang_hindi_binabantayanan' ),
        'Upload'                    => array( 'Magkarga' ),
-       'Userlogin'                 => array( 'Paglagda ng tagagamit', 'Maglagda' ),
-       'Userlogout'                => array( 'Pag-alis sa pagkalagda ng tagagamit', 'AlisLagda' ),
-       'Userrights'                => array( 'Mga karapatan ng tagagamit' ),
-       'Version'                   => array( 'Bersyon' ),
-       'Wantedcategories'          => array( 'Ninanais na mga kaurian' ),
-       'Wantedfiles'               => array( 'Ninanais na mga talaksan' ),
-       'Wantedpages'               => array( 'Ninanais na mga pahina', 'Putol na mga kawing' ),
-       'Wantedtemplates'           => array( 'Ninanais na mga suleras' ),
-       'Watchlist'                 => array( 'Talaan ng binabantayan', 'Bantayan' ),
-       'Whatlinkshere'             => array( 'Ano ang nakakawing dito' ),
-       'Withoutinterwiki'          => array( 'Walang ugnayang-wiki' ),
+       'UploadStash'               => array( 'Pagkakarga_ng_mga_Nakatago' ),
+       'Userlogin'                 => array( 'Paglagda_ng_tagagamit', 'Maglagda' ),
+       'Userlogout'                => array( 'Pag-alis_sa_pagkalagda_ng_tagagamit', 'AlisLagda' ),
+       'Userrights'                => array( 'Mga_karapatan_ng_tagagamit' ),
+       'Version'                   => array( 'Bersiyon' ),
+       'Wantedcategories'          => array( 'Ninanais_na_mga_kaurian' ),
+       'Wantedfiles'               => array( 'Ninanais_na_mga_talaksan' ),
+       'Wantedpages'               => array( 'Ninanais_na_mga_pahina', 'Putol_na_mga_kawing' ),
+       'Wantedtemplates'           => array( 'Ninanais_na_mga_suleras' ),
+       'Watchlist'                 => array( 'Talaan_ng_binabantayan', 'Bantayan' ),
+       'Whatlinkshere'             => array( 'Ano_ang_nakakawing_dito' ),
+       'Withoutinterwiki'          => array( 'Walang_ugnayang-wiki' ),
 );
 
 $messages = array(
@@ -199,7 +213,7 @@ $messages = array(
 'thursday' => 'Huwebes',
 'friday' => 'Biyernes',
 'saturday' => 'Sabado',
-'sun' => 'Lin',
+'sun' => 'Ling',
 'mon' => 'Lun',
 'tue' => 'Mar',
 'wed' => 'Miy',
@@ -346,7 +360,7 @@ $messages = array(
 'projectpage' => 'Tingnan ang pahina ng proyekto',
 'imagepage' => 'Tingnan ang pahina ng talaksan',
 'mediawikipage' => 'Tingnan ang pahina ng mensahe',
-'templatepage' => 'Tingnan ang pahina ng suleras',
+'templatepage' => 'Tingnan ang pahina ng padron',
 'viewhelppage' => 'Tingnan ang pahina ng tulong',
 'categorypage' => 'Tingnan ang pahina ng kategorya',
 'viewtalkpage' => 'Tingnan ang usapan',
@@ -412,9 +426,9 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'editsection' => 'baguhin',
 'editsection-brackets' => '[$1]',
 'editold' => 'baguhin',
-'viewsourceold' => 'tingnan ang pinagmulan',
+'viewsourceold' => 'tingnan ang batayan',
 'editlink' => 'baguhin',
-'viewsourcelink' => 'tingnan ang pinagmulan',
+'viewsourcelink' => 'tingnan ang batayan',
 'editsectionhint' => 'Baguhin ang seksiyon: $1',
 'toc' => 'Mga nilalaman',
 'showtoc' => 'ipakita',
@@ -424,13 +438,13 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'thisisdeleted' => 'Tingnan o ibalik ang $1?',
 'viewdeleted' => 'Tingnan ang $1?',
 'restorelink' => '{{PLURAL:$1|isang binurang pagbabago|$1 binurang pagbabago}}',
-'feedlinks' => 'Subo/Karga:',
+'feedlinks' => 'Karga:',
 'feed-invalid' => 'Hindi tanggap na uri ng serbisyo ng pagpaparating.',
 'feed-unavailable' => 'Walang serbisyo mula sa sindikasyong pangpaglalathala',
-'site-rss-feed' => '$1 kargang RSS',
-'site-atom-feed' => '$1 kargang Atom',
-'page-rss-feed' => '"$1" kargang RSS',
-'page-atom-feed' => '"$1" kargang Atom',
+'site-rss-feed' => 'Kargang RSS ng $1',
+'site-atom-feed' => 'Kargang Atom ng $1',
+'page-rss-feed' => 'Kargang RSS ng "$1"',
+'page-atom-feed' => 'Kargang Atom ng "$1"',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (hindi umiiral ang pahina)',
@@ -445,7 +459,7 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'nstab-project' => 'Pahina ng proyekto',
 'nstab-image' => 'Talaksan',
 'nstab-mediawiki' => 'Mensahe',
-'nstab-template' => 'Suleras',
+'nstab-template' => 'Padron',
 'nstab-help' => 'Pahina ng tulong',
 'nstab-category' => 'Kategorya',
 
@@ -553,7 +567,7 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 # Login and logout pages
 'logouttext' => "'''Nakaalis ka na sa pagkakalagda.'''
 
-Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang [[Special:UserLogin|lumagda/tumala muli]] bilang kapareho o ibang tagagamit.
+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.
@@ -594,8 +608,8 @@ Paki-andar mo po ang mga ito, pagkatapos ay lumagda na gamit ang bago mong panga
 'nocookieslogin' => "Gumagamit ang {{SITENAME}} ng mga kuki (''cookies'') para mailagda ang mga tagagamit.
 Hindi mo pinagagana ang mga kuki.
 Paki-andar mo ang mga ito at sumubok uli.",
-'nocookiesfornew' => 'Hindi nalikha ang akawnt ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito.
-Tiyaking mayroon kang pinagaganang mga otap, ikargang muli ang pahinang ito at subuking muli.',
+'nocookiesfornew' => 'Hindi nalikha ang kuwenta ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito.
+Tiyaking mayroon kang pinagaganang mga kuki, ikarga muli ang pahinang ito at subukan muli.',
 'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'Hindi mo tinukoy ang isang tanggap na pangalan ng tagagamit.',
 'loginsuccesstitle' => 'Matagumpay ang paglagda',
@@ -626,19 +640,19 @@ Kung ibang tao ang humiling nito, o kung naalala mo na ang iyong hudyat,
 at hindi mo na ibig pang baguhin ito, maaari mong huwag pansinin ang mensaheng ito at
 magpatuloy sa paggamit ng iyong lumang hudyat.',
 'noemail' => 'Walang nakatalang adres ng e-liham para sa tagagamit na "$1".',
-'noemailcreate' => 'Kailangan mong magbigay ng may-bisang adres ng e-liham',
+'noemailcreate' => 'Kailangan mong magbigay ng may-bisang direksiyong e-liham',
 'passwordsent' => 'Isang bagong hudyat ang ipinadala sa adres ng e-liham na nakatala para kay "$1".
 Lumagda/Tumala lang po muli pagkaraan mong matanggap ito.',
 'blocked-mailpassword' => 'Hinarangan sa paggawa ng mga pagbabago ang iyong adres ng IP, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng hudyat para maiwasan ang pangaabuso.',
-'eauthentsent' => 'Nagpadala ng isang e-liham na pangkompirmasyon doon sa iniharap na adres ng e-liham.
+'eauthentsent' => 'Nagpadala ng isang e-liham na pangkompirmasyon doon sa iniharap na direksiyong e-liham.
 Bago magpadala ng iba pang e-liham sa kuwenta, kailangan mong sundin ang mga tagubiling nasa loob ng e-liham, para mapatunayang iyo talaga ang kuwenta.',
 'throttled-mailpassword' => 'Nagpadala na ng isang paalalang panghudyat, nitong huling {{PLURAL:$1|oras|$1 oras}}.
 Para maiwasin ang pangaabuso, isang paalalang panghudyat lang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.',
 'mailerror' => 'Kamalian sa pagpapadala ng liham: $1',
-'acct_creation_throttle_hit' => 'Ang mga panauhin sa wiking ito na gumagamit ng adres ng IP mo ay nakalikha na ng {{PLURAL:$1|1 kuwenta|$1 kuwenta}} sa loob ng huling araw, na siyang pinakamataas na pinapahintulutan sa loob ng sakop ng panahong ito.
-Bilang kinalabasan, ang mga panauhing gumagamit ng ganitong adres ng IP ay hindi na muna makakalikha ng anumang karagdagang kuwenta sa ngayon.',
+'acct_creation_throttle_hit' => 'Ang mga panauhin sa wiking ito na gumagamit ng direksiyong IP mo ay nakalikha na ng {{PLURAL:$1|1 kuwenta|$1 kuwenta}} sa loob ng huling araw, na siyang pinakamataas na pinapahintulutan sa loob ng sakop ng panahong ito.
+Bilang kinalabasan, ang mga panauhing gumagamit ng ganitong direksiyong IP ay hindi na muna makakalikha ng anumang karagdagang kuwenta sa ngayon.',
 'emailauthenticated' => 'Napatunayan na ang iyong direksiyong e-liham sa $2 noong $3.',
-'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong adres ng e-liham.
+'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong direksiyong e-liham.
 Walang e-liham na ipapadala para sa anumang sumusunod na tampok na kasangkapang-katangian.',
 'noemailprefs' => 'Tumukoy ng isang direksiyong e-liham sa loob ng mga nais mo upang gumana ang mga kasangkapang-katangiang ito.',
 'emailconfirmlink' => 'Pakikompirma ang iyong direksiyong e-liham.',
@@ -779,7 +793,7 @@ Maaari kang makipag-ugnayan kay $1 o sa ibang [[{{MediaWiki:Grouppage-sysop}}|ta
 Hindi mo magagamit ang kasangkapang-katangiang 'magpadala ng e-liham sa tagagamit' hangga't hindi tinutukoy ang isang tanggap na direksiyong e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka pa hinaharangan/hinahadlangan sa paggamit nito.
 Ang kasalukuyan mong direksiyong IP ay $3, at ang ID ng pagharang/paghadlang ay #$5.
 Pakisama ang lahat ng mga detalye sa anumang mga pagtatanong na ginagawa/gagawin mo.",
-'autoblockedtext' => 'Kusang hinadlangan/hinarang ang adres ng IP mo dahil ginamit ito ng ibang tagagamit, na hinadlangan/hinarang ni $1.
+'autoblockedtext' => 'Kusang hinadlangan/hinarang ang direksiyong IP mo dahil ginamit ito ng ibang tagagamit, na hinadlangan/hinarang ni $1.
 Ang ibinigay na dahilan ay:
 
 :\'\'$2\'\'
@@ -790,9 +804,9 @@ Ang ibinigay na dahilan ay:
 
 Maaari kang makipagugnayan kay $1 o sa isa sa iba pang [[{{MediaWiki:Grouppage-sysop}}|mga tagapangasiwa]] para pagusapan ang paghadlang/pagharang.
 
-Pakitandaang hindi mo maaaring gamitin ang kasangkapang-katangiang "padalhan ng e-liham ang tagagamit na ito" maliban na lamang kung mayroon kang nakatalang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka hinadlangan sa paggamit nito.
+Pakitandaang hindi mo maaaring gamitin ang kasangkapang-katangiang "padalhan ng e-liham ang tagagamit na ito" maliban na lamang kung mayroon kang nakatalang tanggap na direksiyong e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka hinadlangan sa paggamit nito.
 
-Ang pangkasalukuyang adres mo ng IP ay $3, at ang ID ng pagharang ay #$5.
+Ang kasalukuyan mong direksiyong IP ay $3, at ang ID ng pagharang ay #$5.
 Pakisama ang lahat ng mga detalyeng nasa itaas sa anumang pagtatanong na gagawin mo.',
 'blockednoreason' => 'walang binigay na dahilan',
 'whitelistedittext' => 'Kailangan mong $1 para makapagbago ng mga pahina.',
@@ -905,7 +919,7 @@ Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa iyong pagsasanggu
 'cascadeprotectedwarning' => "'''Babala:''' Ikinandado ang pahinang ito upang tanging mga tagagamit na may mga karapatang pang-''sysop'' lamang ang makapagbago nito, dahil kabilang ito sa sumusunod na mga {{PLURAL:$1|pahinang|mga pahinang}} may baita-baitang na panananggalang:",
 'titleprotectedwarning' => "'''Babala:  Ikinandado ang pahinang ito upang [[Special:ListGroupRights|partikular na mga karapatan]] ang kakailanganin upang mailikha ito.'''
 Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa inyong pagsasangguni:",
-'templatesused' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginagamit sa pahinang ito:',
+'templatesused' => '{{PLURAL:$1|Padron|Mga padron}} na ginagamit sa pahinang ito:',
 'templatesusedpreview' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginagamit sa paunang-tinging ito:',
 'templatesusedsection' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginamit sa seksyong ito:',
 'template-protected' => '(nakasanggalang)',
@@ -944,11 +958,11 @@ Umiiral na ito.',
 
 Dapat na mayroon itong mas mababa sa $2 {{PLURAL:$2|tawag|mga tawag}}, mayroon {{PLURAL:$1|ngayong $1 isang tawag|ngayong $1 mga tawag}}.',
 'expensive-parserfunction-category' => "Mga pahinang may napakaraming mga mamahaling tawag na pantungkulin ng banghay (''parser'')",
-'post-expand-template-inclusion-warning' => 'Babala: Napakalaki ng sukat ng saklaw ng suleras.
-Hindi isasama ang ilang mga suleras.',
-'post-expand-template-inclusion-category' => 'Mga pahina kung saan lumabis ang sukat ng saklaw ng suleras',
-'post-expand-template-argument-warning' => 'Babala: Naglalamang ang pahinang ito ng kahit isang pagaalitan ng suleras na napakalaki ng sukat ng paglawak.  Tinanggal ang mga alitang ito.',
-'post-expand-template-argument-category' => 'Mga pahinang naglalaman ng mga tinanggal na mga alitan ng suleras',
+'post-expand-template-inclusion-warning' => "'''Babala''': Napakalaki ng sukat ng saklaw ng padron.
+Hindi isasama ang ilang mga padron.",
+'post-expand-template-inclusion-category' => 'Mga pahina kung saan lumabis ang sukat ng saklaw ng padron',
+'post-expand-template-argument-warning' => 'Babala: Naglalamang ang pahinang ito ng kahit isang pagaalitan ng padron na napakalaki ng sukat ng paglawak.  Tinanggal ang mga alitang ito.',
+'post-expand-template-argument-category' => 'Mga pahinang naglalaman ng mga tinanggal na mga alitan ng padron',
 'parser-template-loop-warning' => 'Nadiskubreng silo ng suleras: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Lumabis na sa nakatakdang lalim ng rekursyon (pormula) ng suleras ($1)',
 'language-converter-depth-warning' => 'Lumampas sa ($1) ang hangganan ng lalim ng pampalit ng wika',
@@ -1091,9 +1105,10 @@ Hindi mo ito mapupuntahan.',
 'revdelete-concurrent-change' => 'May mali sa pagbabago ng bagay na may petsang $2, $1: ang katayuan nito ay tila nagpapakitang binago ng ibang tao habang sinubukan mong baguhin ito.
 Pakitingnan ang mga talaan.',
 'revdelete-only-restricted' => 'May mali sa pagtatago ng bagay na may petsang $2, $1: hindi mo mapipigil ang mga bagay na matingnan ng mga tagapangasiwa na hindi rin pipili ng isa sa mga pagpipiliang kaugnay ng antas ng pagpapakita.',
-'revdelete-reason-dropdown' => '*Mga karaniwang dahilan sa pagbubura
+'revdelete-reason-dropdown' => '*Mga karaniwang dahilan ng pagbura
 ** Paglabag sa karapatang-ari (kopirayt)
 ** Hindi nararapat na personal na impormasyon
+** Hindi nararapat na pangalan ng tagagamit
 ** Impormasyong maaaring mapanirang-puri',
 'revdelete-otherreason' => 'Iba/karagdagang dahilan:',
 'revdelete-reasonotherlist' => 'Ibang dahilan',
@@ -1192,8 +1207,6 @@ Matatagpuan ang mga detalye sa loob ng [{{fullurl:{{#Special:Log}}/delete|page={
 'search-interwiki-caption' => 'Kapatid na mga proyekto',
 'search-interwiki-default' => '$1 mga resulta:',
 'search-interwiki-more' => '(mas marami pa)',
-'search-mwsuggest-enabled' => 'may mga mungkahi',
-'search-mwsuggest-disabled' => 'walang mga mungkahi',
 'search-relatedarticle' => 'Kaugnay',
 'mwsuggest-disable' => 'Huwag paganahin ang mga mungkahi ng AJAX',
 'searcheverything-enable' => 'Maghanap sa lahat ng ngalan-espasyo:',
@@ -2834,7 +2847,6 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 
 # JavaScriptTest
 'javascripttest' => 'Pagsubok sa JavaScript',
-'javascripttest-disabled' => 'Hindi gumagana ang tungkuling ito sa wiking ito.',
 'javascripttest-title' => 'Pinatatakbo ang mga pagsubok ng $1',
 'javascripttest-pagetext-noframework' => 'Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Hindi napag-aalamang balangkas ng pagsubok na "$1".',
@@ -2894,7 +2906,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-ca-nstab-project' => 'Tingnan ang pahina ng proyekto',
 'tooltip-ca-nstab-image' => 'Tingnan ang pahina ng talaksan',
 'tooltip-ca-nstab-mediawiki' => 'Tingnan ang mensahe ng sistema',
-'tooltip-ca-nstab-template' => 'Tingnan ang suleras',
+'tooltip-ca-nstab-template' => 'Tingnan ang padron',
 'tooltip-ca-nstab-help' => 'Tingnan ang pahina ng tulong',
 'tooltip-ca-nstab-category' => 'Tingnan ang pahina ng kaurian/kategorya',
 'tooltip-minoredit' => 'Tandaan ito bilang isang maliit na pagbabago',
@@ -2999,7 +3011,6 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-authors' => 'Kabuuang bilang ng magkakabukod na mga may-akda',
 'pageinfo-recent-edits' => 'Kamakailang bilang ng mga pamamatnugot (sa loob ng huling $1)',
 'pageinfo-recent-authors' => 'Kamakailang bilang ng magkakabukod na mga may-akda',
-'pageinfo-restriction' => 'Pruteksiyon ng pahina (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Salita|Mga salita}}ng mahiwaga ($1)',
 'pageinfo-hidden-categories' => 'Nakatagong {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
@@ -4053,6 +4064,10 @@ O kaya, maaari mong gamitin ang maginhawang pormularyo sa ibaba. Ang iyong pagpu
 'feedback-bugcheck' => 'Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].',
 'feedback-bugnew' => 'Sinuri ko na. Mag-ulat ng panibagong sira',
 
+# Search suggestions
+'searchsuggest-search' => 'Maghanap',
+'searchsuggest-containing' => 'naglalaman ng ...',
+
 # API errors
 'api-error-badaccess-groups' => 'Hindi ka pinapayagang makapagkarga ng mga talaksan papunta sa wiking ito.',
 'api-error-badtoken' => 'Panloob na kamalian: masamang kahalip.',
index ac88d59..48da335 100644 (file)
@@ -19,17 +19,142 @@ $namespaceNames = array(
        NS_TALK             => 'Nopegət',
        NS_USER             => 'Okoədə',
        NS_USER_TALK        => 'Okoədəj_nopegət',
-       NS_PROJECT_TALK     => '$1_Nopegətəti',
+       NS_PROJECT_TALK     => '$1_Nopegət',
        NS_FILE             => 'Fajl',
-       NS_FILE_TALK        => 'Fajli_nopegət',
+       NS_FILE_TALK        => 'Fajl_nopegət',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'MediaWiki_nopegət',
        NS_TEMPLATE         => 'Numunə',
        NS_TEMPLATE_TALK    => 'Numunə_nopegət',
        NS_HELP             => 'Koməg',
-       NS_HELP_TALK        => 'Koməgi_nopegət',
+       NS_HELP_TALK        => 'Koməg_nopegət',
        NS_CATEGORY         => 'Tispir',
-       NS_CATEGORY_TALK    => 'Tispiron_nopegət',
+       NS_CATEGORY_TALK    => 'Tispir_nopegət',
+);
+
+$namespaceAliases = array(
+       '$1_Nopegətəti'    => NS_PROJECT_TALK,
+       'Fajli_nopegət'    => NS_FILE_TALK,
+       'Koməgi_nopegət'   => NS_HELP_TALK,
+       'Tispiron_nopegət' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+       'Allpages'                  => array( 'Һәммәј_сәһифон' ),
+       'Blankpage'                 => array( 'Тәјлијә_сәһифә' ),
+       'ChangeEmail'               => array( 'Е-номә_дәгиш_кардеј' ),
+       'ChangePassword'            => array( 'Пароли_дәгиш_кардеј' ),
+       'Emailuser'                 => array( 'Бә_иштирокәкә_номә_вығандеј' ),
+       'Longpages'                 => array( 'Дырозә_сәһифон' ),
+       'Movepage'                  => array( 'Сәһифә_номи_дәгиш_кардеј' ),
+       'Mypage'                    => array( 'Чымы_сәһифә' ),
+       'Mytalk'                    => array( 'Чымы_мызокирә' ),
+       'Myuploads'                 => array( 'Чымы_бо_жә_быә_чијон' ),
+       'Newimages'                 => array( 'Нујә_фајлон' ),
+       'Newpages'                  => array( 'Нујә_сәһифон' ),
+       'PasswordReset'             => array( 'Пароли_ләғв_кардеј' ),
+       'Protectedpages'            => array( 'Мыдофијә_кардә_быә_сәһифон' ),
+       'Protectedtitles'           => array( 'Мыдофијә_кардә_быә_номон' ),
+       'Randompage'                => array( 'Рајрастә_сәһифә._Рајрастә' ),
+       'Recentchanges'             => array( 'Ән_нујә_дәгишон' ),
+       'Recentchangeslinked'       => array( 'Ангыл_кардә_быә_дәгишон' ),
+       'Revisiondelete'            => array( 'Рәдд_кардә_быә_дәгишон' ),
+       'Search'                    => array( 'Нәве' ),
+       'Shortpages'                => array( 'Кыртә_сәһифон' ),
+       'Tags'                      => array( 'Нышонон' ),
+       'Undelete'                  => array( 'Бәрпо_кардеј' ),
+       'Version'                   => array( 'Рәвојәт' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#ТОЖӘДӘН_ИСТИҒОМӘТ_ДОЈ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕМЫНДӘРИҸОТ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__МӘҸБУРИЈӘ_МЫНДӘРИҸОТ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__МЫНДӘРИҸОТ__', '__TOC__' ),
+       'noheader'                  => array( '0', '__БЕСӘРЛОВҺӘ__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ЕСӘТНӘ_МАНГ', 'ЕСӘТНӘ_МАНГ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ЕСӘТНӘ_МАНГ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ЕСӘТНӘ_МАНГИ_НОМ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ЕСӘТНӘ_МАНГИ_НОМ_ҸИНС', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'ЕСӘТНӘ_РУЖ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ЕСӘТНӘ_РУЖ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ЕСӘТНӘ_РУЖИ_НОМ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ЕСӘТНӘ_СОР', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ЕСӘТНӘ_ВАХТ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ЕСӘТНӘ_СААТ', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'БУМИНӘ_МАНГ', 'БУМИНӘ_МАНГ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'БУМИНӘ_МАНГ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'БУМИНӘ_МАНГИ_НОМ', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'БУМИНӘ_МАНГИ_НОМ_ҸИНС', 'LOCALMONTHNAMEGEN' ),
+       'localday'                  => array( '1', 'БУМИНӘ_РУЖ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'БУМИНӘ_РУЖ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'БУМИНӘ_РУЖИ_НОМ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'БУМИНӘ_СОР', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'БУМИНӘ_ВАХТ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'БУМИНӘ_СААТ', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'СӘҺИФОН_ҒӘДӘР', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'МӘҒОЛОН_ҒӘДӘР', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'ФАЈЛОН_ҒӘДӘР', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'ТИЛИКӘ_ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'ДӘГИШОН_ҒӘДӘР', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'ДИЈӘ_КАРДЕ_ҒӘДӘР', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СӘҺИФӘ_НОМ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СӘҺИФӘ_НОМ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'НОМОН_МӘКОН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'НОМОН_МӘКОН_2', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'НОМОН_МӘКОН_ҒӘДӘР', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'МЫЗОКИРОН_МӘКОН', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'МЫЗОКИРОН_МӘКОН_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'МӘҒОЛОН_МӘКОН', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'МӘҒОЛОН_МӘКОН_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'СӘҺИФӘ_ПУРӘ_НОМ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'СӘҺИФӘ_ПУРӘ_НОМ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ЖИНТОНӘДӘ_СӘҺИФӘ_НОМ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ЖИНТОНӘДӘ_СӘҺИФӘ_НОМ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'СӘҺИФӘ_НОМИ_ӘСОС', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'СӘҺИФӘ_НОМИ_ӘСОС_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'МЫЗОКИРӘ_СӘҺИФӘ_НОМ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'МЫЗОКИРӘ_СӘҺИФӘ_НОМ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'МӘҒОЛӘ_СӘҺИФӘ_НОМ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'МӘҒОЛӘ_СӘҺИФӘ_НОМ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ХӘБӘ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ӘВӘЗ_КАРДЕ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'БЕВИКИ_ХӘБӘ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'миниатјур', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'миниатјур=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'росто', 'right' ),
+       'img_left'                  => array( '1', 'чәпо', 'left' ),
+       'img_none'                  => array( '1', 'бе', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'мәрәнго', 'center', 'centre' ),
+       'img_page'                  => array( '1', 'сәһифә=$1', 'сәһифә_$1', 'page=$1', 'page $1' ),
+       'sitename'                  => array( '1', 'САЈТИ_НОМ', 'SITENAME' ),
+       'localurl'                  => array( '0', 'БУМИНӘ_УНВОН:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'БУМИНӘ_УНВОН_2:', 'LOCALURLE:' ),
+       'currentweek'               => array( '1', 'ЕСӘТНӘ_ҺАФТӘ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ЕСӘТНӘ_ҺАФТӘ_РУЖ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'БУМИНӘ_ҺАФТӘ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'БУМИНӘ_ҺАФТӘ_РУЖ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'РӘВОЈӘТИ_ID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'РӘВОЈӘТИ_РУЖ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'РӘВОЈӘТИ_РУЖ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'РӘВОЈӘТИ_МАНГ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'РӘВОЈӘТИ_МАНГ_2', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'РӘВОЈӘТИ_СОР', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'РӘВОЈӘТИ_ВАХТИ_ҒЕЈД', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ИШТИРОКӘКӘ_РӘВОЈӘТ', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'ПУРӘ_УНВОН:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПУРӘ_УНВОН_2:', 'FULLURLE:' ),
+       'currentversion'            => array( '1', 'ЕСӘТНӘ_РӘВОЈӘТ', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'ЕСӘТНӘ_ВАХТИ_ҒЕЈД', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'БУМИНӘ_ВАХТИ_ҒЕЈД', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'НОМӘ_ИСТИҒОМӘТ', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#ЗЫВОН:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'МЫҒДОРИ_ЗЫВОН', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СӘҺИФОН_БӘ_НОМОН_МӘКОНӘДӘ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'pagesize'                  => array( '1', 'СӘҺИФӘ_ПАМЈӘ', 'PAGESIZE' ),
+       'url_wiki'                  => array( '0', 'ВИКИ', 'WIKI' ),
 );
 
 $messages = array(
@@ -121,6 +246,7 @@ $messages = array(
 'listingcontinuesabbrev' => '(дәвом)',
 'index-category' => 'Индекс быә сәһифон.',
 'noindex-category' => 'Индекс нибыә саһифон',
+'broken-file-category' => 'Сәһифон де ко ныкардә фајлинә сәбонон',
 
 'about' => 'Тәсвир',
 'article' => 'Мәғолә',
@@ -235,7 +361,7 @@ $messages = array(
 'privacy' => 'Мәхфијәти сијосәт',
 'privacypage' => 'Project:Мәхфијәти сијосәт',
 
-'badaccess' => 'Ð\98ҹазÓ\99 Ñ\85Ó\99Ñ\82а.',
+'badaccess' => 'Ð\94аÑ\81Ñ\82Ñ\80Ó\99Ñ\81и Ò\93Ó\99лÓ\99Ñ\82',
 'badaccess-group0' => 'Ын фәалијјәти ичра карде әзынишон.',
 
 'ok' => 'OK',
@@ -243,6 +369,7 @@ $messages = array(
 'youhavenewmessages' => 'Шымә сәјоне $1 ($2).',
 'newmessageslink' => 'нујә хәбон',
 'newmessagesdifflink' => 'охонә дәгиши',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|охонә дәгиши|охонә дәгишон}}',
 'editsection' => 'Сәрост кардеј',
 'editold' => 'Сәрост кардеј',
 'viewsourceold' => 'бешемонә коди дијә кардеј',
@@ -280,15 +407,16 @@ $messages = array(
 Хаһиш кардәмон че сәһифә URL-и бә [[Special:ListUsers/sysop|администратори]] бывғандәнән.',
 'missingarticle-rev' => '(рәвојәт#: $1)',
 'missingarticle-diff' => '(Фәрг: $1, $2)',
-'internalerror' => 'Дахили хәта',
-'internalerror_info' => 'Дахили хәта: $1',
-'fileappenderrorread' => 'Ó\98лавон Ð³ејд карде быәдә"$1" һанде ныбе.',
-'formerror' => 'Ð¥Ó\99Ñ\82а: Ð§Ðµ Ñ\84оÑ\80мÓ\99 Ð¼Ó\99лÑ\83моÑ\82он Ó\99кÑ\81 ÐºÐ°Ñ\80де Ò\93еÑ\80Ñ\80и Ð¼Ñ\83мкуне.',
+'internalerror' => 'Дыләтонә ғәләт',
+'internalerror_info' => 'Дыләтонә ғәләт: $1',
+'fileappenderrorread' => 'Ó\98ловон Ò\93ејд карде быәдә"$1" һанде ныбе.',
+'formerror' => 'СÓ\99һв: Ð§Ðµ Ñ\84оÑ\80мÓ\99 Ð¼Ó\99лÑ\83моÑ\82он Ó\99кÑ\81 ÐºÐ°Ñ\80де Ò\93еÑ\80Ñ\80и Ð¼Ñ\8bмкуне.',
 'cannotdelete-title' => 'Сәһифә әбыни рәдд кардеј "$1"',
 'badtitle' => 'Роныдоә ном',
 'badtitletext' => 'Ахтар кардә быә сәһифә ном сәһве, тәјлије, јаанки сәрост доә быәнин мијонзывонон ја мијонвики номон.
 Бе бәзне ки кали рәмзон сәрловһәдә око дој әбыни.',
 'viewsource' => 'Дијә кардеј',
+'exception-nologin' => 'Ыштәни едаштәнијоне',
 
 # Login and logout pages
 'yourname' => 'Иштирокәкә ном:',
@@ -310,6 +438,7 @@ $messages = array(
 'gotaccountlink' => 'Ыштәни едаштеј',
 'userlogin-resetlink' => 'Бә системә дәше мәлумоти јодәдә бекардәјоне?',
 'createaccountmail' => 'бә е-номә',
+'createaccountreason' => 'Сәбәб:',
 'mailmypassword' => 'Нујә парол вығандеј бә Е-номә.',
 'loginlanguagelabel' => 'Зывон: $1',
 
@@ -373,7 +502,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>, интаси шымәку изн ни ым сәһифә офәје.',
 'previewnote' => "'''Јодәдә огәтән ки ым һәлә сыфтәнә нишо доје.'''
 Шымә дәгишон һәлә огәтә быәнин!",
 'editing' => 'Редәктә кардеј $1',
@@ -431,6 +560,7 @@ $messages = array(
 'revdelete-show-file-submit' => 'Бәле',
 'revdelete-radio-set' => 'Бәле',
 'revdelete-radio-unset' => 'Не',
+'revdelete-log' => 'Сәбәб:',
 'revdel-restore' => 'Винде дәрәҹә дәгиш карде',
 'revdel-restore-deleted' => 'Рәдд кардә быә рәвојәтон',
 'revdel-restore-visible' => 'Чијә рәвојәтон',
@@ -480,7 +610,7 @@ $messages = array(
 'powersearch-toggleall' => 'Һәммәј',
 
 # Preferences page
-'preferences' => 'ЧиÑ\87Ñ\81Ó\99 Ð¿ÐµÑ\87Ñ\8bниÑ\98е',
+'preferences' => 'Ð\9aÑ\83кон',
 'mypreferences' => 'Кукон',
 'prefsnologin' => 'Ыштәни едаштәнијоне',
 'prefsnologintext' => 'Шымә бәбе <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ыштәни едәштән]</span> бо иштирокәкә пеғәндон дәгиш кардеј.',
@@ -489,7 +619,9 @@ $messages = array(
 'prefs-user-pages' => 'Иштирокәкә сәһифон',
 'prefs-rc' => 'Ән нујә дәгишон',
 'prefs-changeemail' => 'Е-номә дәгиш кардеј',
+'prefs-email' => 'Е-номә кукон',
 'saveprefs' => 'Огәтеј',
+'rows' => 'Сәтырон:',
 'searchresultshead' => 'Нәве',
 'timezoneregion-america' => 'Америка',
 'timezoneregion-europe' => 'Авропа',
@@ -505,6 +637,12 @@ $messages = array(
 'prefs-help-email' => 'Е-номә унвони нывыштеј һукман ни, интаси ав бә шымә гәрәк бәбе гирам шымә пароли виро бебәкардејон.',
 'prefs-help-email-others' => 'Комәг бәка бә ҹо иштироәкон шымә е-номә унвони оныкарде, че шымә шәхси сәһифәдә быә линки де шымә әлогә огәтеј.',
 
+# User rights
+'userrights-reason' => 'Сәбәб:',
+
+# Groups
+'group-user' => 'Иштирокәкон',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Ым сәһифә сәрост кардеј',
 
@@ -588,6 +726,10 @@ $messages = array(
 'sharedupload-desc-here' => 'Ым фајл чыјо пегәтә быә $1 ијән бәзыне истифодә бе бә ҹо нәхшонәдә.
 Мәлумот чн әчәј [$2 тәсвири сәһифәку] бә жиј доә быә.',
 
+# File deletion
+'filedelete-comment' => 'Сәбәб:',
+'filedelete-submit' => 'Рәдд кардеј',
+
 # Random page
 'randompage' => 'Рајрастә мәғолә',
 
@@ -649,6 +791,7 @@ $messages = array(
 'actioncomplete' => 'Һәрәкәт иҹро кардә быә',
 'actionfailed' => 'Һәрәкәт иҹро кардә бәни',
 'dellogpage' => 'Рәдд кардә быә чијон журнал',
+'deletecomment' => 'Сәбәб:',
 
 # Rollback
 'rollbacklink' => 'Окырнијеј',
@@ -656,10 +799,12 @@ $messages = array(
 # Protect
 'protectlogpage' => 'Мыдофијә журнал',
 'protectedarticle' => 'мыдофијә быә "[[$1]]"',
+'protectcomment' => 'Сәбәб:',
 
 # Undelete
 'undeletelink' => 'чәшику дәвонијеј/бәрпо кардеј',
 'undeleteviewlink' => 'тәмшо кардеј',
+'undeletecomment' => 'Сәбәб:',
 'undelete-search-submit' => 'Нәве',
 'undelete-show-file-submit' => 'Бәле',
 
@@ -706,8 +851,12 @@ $messages = array(
 'whatlinkshere-filters' => 'Филтрон',
 
 # Block/unblock
+'ipbreason' => 'Сәбәб:',
 'ipboptions' => '2 саат:2 hours,1 руж:1 day,3 руж:3 days,1 һафтә:1 week,2 һафтә:2 weeks,1 манг:1 month,3 манг:3 months,6 манг:6 months,1 сор:1 year,бемыһләт:infinite',
+'ipbotheroption' => 'ҹо',
 'ipblocklist' => 'Бастә быә иштирокәкон',
+'blocklist-reason' => 'Сәбәб',
+'ipblocklist-submit' => 'Нәве',
 'blocklink' => 'Бә гырд гәтеј',
 'unblocklink' => 'Ошко кардеј',
 'change-blocklink' => 'Блок быә ҹо дәгиш кардеј',
@@ -726,11 +875,12 @@ $messages = array(
 # Export
 'export' => 'Сәһифон ихроҹ кардеј',
 'export-addcat' => 'Зијод кардеј',
+'export-addns' => 'Зијод кардеј',
 
 # Namespace 8 related
 'allmessagesname' => 'Хәбә',
 'allmessagesdefault' => 'Иминә огәтә быә мәтн',
-'allmessages-filter-all' => 'Һаммај',
+'allmessages-filter-all' => 'Һәммәј',
 'allmessages-filter-submit' => 'Давард',
 
 # Thumbnails
@@ -795,7 +945,8 @@ $messages = array(
 'tooltip-summary' => 'Кыртә тәсвир бынывыштән',
 
 # Info page
-'pageinfo-header-edits' => 'Сәрост кардеј',
+'pageinfo-header-edits' => 'Дәгиш кардә быә чијон тарых',
+'pageinfo-redirects-value' => '$1',
 
 # Browsing diffs
 'previousdiff' => '← Навынәни дәгиши',
@@ -895,5 +1046,6 @@ $messages = array(
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|нышонон]] филтр:',
+'tags-title' => 'Нышонон',
 
 );
index ff23e81..cebf739 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Tshipi',
-'monday'        => 'Mosupologo',
-'tuesday'       => 'Labobedi',
-'wednesday'     => 'Laboraro',
-'thursday'      => 'Labone',
-'friday'        => 'Labotlhano',
-'saturday'      => 'Matlhatso',
-'january'       => 'Firikgong',
-'february'      => 'Tlhakole',
-'march'         => 'Mopitlo',
-'april'         => 'Moranang',
-'may_long'      => 'Motsheganong',
-'june'          => 'Seetebosigo',
-'july'          => 'Phukwi',
-'august'        => 'Phatwe',
-'september'     => 'Lwetse',
-'october'       => 'Phalane',
-'november'      => 'Ngwanatsele',
-'december'      => 'Sedimonthole',
-'january-gen'   => 'Firikgong',
-'february-gen'  => 'Tlhakole',
-'march-gen'     => 'Mopitlo',
-'april-gen'     => 'Moranang',
-'may-gen'       => 'Motsheganong',
-'june-gen'      => 'Seetebosigo',
-'july-gen'      => 'Phukwi',
-'august-gen'    => 'Phatwe',
+'sunday' => 'Tshipi',
+'monday' => 'Mosupologo',
+'tuesday' => 'Labobedi',
+'wednesday' => 'Laboraro',
+'thursday' => 'Labone',
+'friday' => 'Labotlhano',
+'saturday' => 'Matlhatso',
+'january' => 'Firikgong',
+'february' => 'Tlhakole',
+'march' => 'Mopitlo',
+'april' => 'Moranang',
+'may_long' => 'Motsheganong',
+'june' => 'Seetebosigo',
+'july' => 'Phukwi',
+'august' => 'Phatwe',
+'september' => 'Lwetse',
+'october' => 'Phalane',
+'november' => 'Ngwanatsele',
+'december' => 'Sedimonthole',
+'january-gen' => 'Firikgong',
+'february-gen' => 'Tlhakole',
+'march-gen' => 'Mopitlo',
+'april-gen' => 'Moranang',
+'may-gen' => 'Motsheganong',
+'june-gen' => 'Seetebosigo',
+'july-gen' => 'Phukwi',
+'august-gen' => 'Phatwe',
 'september-gen' => 'Lwetse',
-'october-gen'   => 'Phalane',
-'november-gen'  => 'Ngwanatsele',
-'december-gen'  => 'Sedimonthole',
+'october-gen' => 'Phalane',
+'november-gen' => 'Ngwanatsele',
+'december-gen' => 'Sedimonthole',
 
-'cancel'     => 'Sutlha',
-'mytalk'     => 'Puo yame',
+'cancel' => 'Sutlha',
+'mytalk' => 'Puo yame',
 'navigation' => 'Tsweletso',
 
-'help'             => 'Thuso',
-'search'           => 'Senka',
-'searchbutton'     => 'Senka',
-'go'               => 'Tsamaya',
-'searcharticle'    => 'Tsamaya',
-'history_short'    => 'Ditso',
+'help' => 'Thuso',
+'search' => 'Senka',
+'searchbutton' => 'Senka',
+'go' => 'Tsamaya',
+'searcharticle' => 'Tsamaya',
+'history_short' => 'Ditso',
 'printableversion' => 'Mokwalo o o ka gatisiwang motlhofo',
-'permalink'        => 'Kgolagano ya sennelaruri',
-'edit'             => 'Baakanya',
-'delete'           => 'Sutlha',
-'protect'          => 'Sireletsa',
-'talk'             => 'Puisano',
-'toolbox'          => 'Lebokoso la dithulusu',
-'otherlanguages'   => 'Ka dipuo di sele',
+'permalink' => 'Kgolagano ya sennelaruri',
+'edit' => 'Baakanya',
+'delete' => 'Sutlha',
+'protect' => 'Sireletsa',
+'talk' => 'Puisano',
+'toolbox' => 'Lebokoso la dithulusu',
+'otherlanguages' => 'Ka dipuo di sele',
 
 # 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).
-'currentevents'        => 'Ditiragalo tsa sešeng',
-'disclaimers'          => 'Tlhapa diatla',
-'edithelp'             => 'Thuso ya go fetola',
-'mainpage'             => 'Tsebe ya konokono',
+'currentevents' => 'Ditiragalo tsa sešeng',
+'disclaimers' => 'Tlhapa diatla',
+'edithelp' => 'Thuso ya go fetola',
+'mainpage' => 'Tsebe ya konokono',
 'mainpage-description' => 'Tsebe ya konokono',
-'portal'               => 'Patlelo ya setšhaba',
-'portal-url'           => 'Project:Patlelo ya setšhaba',
-'privacy'              => 'Melawana ya sephiri',
+'portal' => 'Patlelo ya setšhaba',
+'portal-url' => 'Project:Patlelo ya setšhaba',
+'privacy' => 'Melawana ya sephiri',
 
-'youhavenewmessages'      => 'O na le $1 ($2).',
-'newmessageslink'         => 'molaetsa o moša',
+'youhavenewmessages' => 'O na le $1 ($2).',
+'newmessageslink' => 'molaetsa o moša',
 'youhavenewmessagesmulti' => 'O na le molaetsa o moša mo $1',
-'editsection'             => 'baakanya',
-'editold'                 => 'baakanya',
+'editsection' => 'baakanya',
+'editold' => 'baakanya',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Mokwalo',
+'nstab-main' => 'Mokwalo',
 'nstab-mediawiki' => 'Molaetsa',
 
 # General errors
 'viewsource' => 'Lebelela motswedi',
 
 # Login and logout pages
-'welcomecreation'    => '== Amogelesega, $1! ==
+'welcomecreation' => '== Amogelesega, $1! ==
 
 O ipuletse akhaonte. O seka wa lebala go fetola tse o di dikgatlhegelo tsa gago tsa {{SITENAME}}.',
-'yourname'           => 'Leina la modirisi:',
-'yourpassword'       => 'Selotlolo sa sephiri:',
-'yourpasswordagain'  => 'Kwala selotlolo sa gago sa sephiri gape:',
+'yourname' => 'Leina la modirisi:',
+'yourpassword' => 'Selotlolo sa sephiri:',
+'yourpasswordagain' => 'Kwala selotlolo sa gago sa sephiri gape:',
 'remembermypassword' => 'Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'              => 'Ikwadise',
-'userlogin'          => 'Ikwadise / ipulela tsebe',
-'logout'             => 'Tswala',
-'userlogout'         => 'Tswala',
-'notloggedin'        => 'Ga o a ikwadisa',
-'createaccount'      => 'Ipulela tsebe',
+'login' => 'Ikwadise',
+'userlogin' => 'Ikwadise / ipulela tsebe',
+'logout' => 'Tswala',
+'userlogout' => 'Tswala',
+'notloggedin' => 'Ga o a ikwadisa',
+'createaccount' => 'Ipulela tsebe',
 
 # Edit pages
-'summary'     => 'Tshoboko:',
-'minoredit'   => 'Se ke paakanyo e potlana',
-'watchthis'   => 'Lebelela tsebe e',
+'summary' => 'Tshoboko:',
+'minoredit' => 'Se ke paakanyo e potlana',
+'watchthis' => 'Lebelela tsebe e',
 'savearticle' => 'Boloka tsebe',
 'showpreview' => 'Supa gore go tlaa lebega jang',
-'showdiff'    => 'Supa diphetogo',
+'showdiff' => 'Supa diphetogo',
 
 # History pages
-'currentrev'          => 'Dipaakanyo tsa sešeng',
+'currentrev' => 'Dipaakanyo tsa sešeng',
 'currentrevisionlink' => 'Dipaakanyo tsa sešeng',
 
 # Preferences page
 'mypreferences' => 'Dikgatlhegelo tsa me',
-'youremail'     => 'E-mail:',
-'username'      => 'Leina la modirisi:',
+'youremail' => 'E-mail:',
+'username' => 'Leina la modirisi:',
 
 # Recent changes
 'recentchanges' => 'Diphetogo tsa sešeng',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Diphetogo tse di tsamaelanang',
-'recentchangeslinked-feed'    => 'Diphetogo tse di tsamaelanang',
+'recentchangeslinked' => 'Diphetogo tse di tsamaelanang',
+'recentchangeslinked-feed' => 'Diphetogo tse di tsamaelanang',
 'recentchangeslinked-toolbox' => 'Diphetogo tse di tsamaelanang',
 
 # Upload
-'upload'          => 'Tsenya mokwalo o o tswang kwantle',
-'uploadbtn'       => 'Tsenya mokwalo o o tswang kwantle',
+'upload' => 'Tsenya mokwalo o o tswang kwantle',
+'uploadbtn' => 'Tsenya mokwalo o o tswang kwantle',
 'watchthisupload' => 'Lebelela tsebe e',
 
 # Random page
 'randompage' => 'Tsebe e e sa tlhomamang',
 
 # Miscellaneous special pages
-'move'         => 'Suta',
+'move' => 'Suta',
 'movethispage' => 'Sutisa tsebe e',
 
 # Watchlist
-'mywatchlist'   => 'Mafoko a ke a etseng tlhoko',
-'watchnologin'  => 'Ga o a ikwadisa',
-'watch'         => 'Lebelela',
+'mywatchlist' => 'Mafoko a ke a etseng tlhoko',
+'watchnologin' => 'Ga o a ikwadisa',
+'watch' => 'Lebelela',
 'watchthispage' => 'Lebelela tsebe e',
 
 # Protect
@@ -159,11 +159,11 @@ O ipuletse akhaonte. O seka wa lebala go fetola tse o di dikgatlhegelo tsa gago
 
 # Move page
 'move-page-legend' => 'Sutisa tsebe',
-'movearticle'      => 'Sutisa tsebe:',
-'movenologin'      => 'Ga o a ikwadisa',
-'movepagebtn'      => 'Sutisa tsebe',
-'movedto'          => 'sutela kwa',
-'movereason'       => 'Lebaka:',
+'movearticle' => 'Sutisa tsebe:',
+'movenologin' => 'Ga o a ikwadisa',
+'movepagebtn' => 'Sutisa tsebe',
+'movedto' => 'sutela kwa',
+'movereason' => 'Lebaka:',
 
 # Namespace 8 related
 'allmessages' => 'Melaetsa ya maranyane',
index 37356a3..c203762 100644 (file)
@@ -438,8 +438,6 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'viewprevnext' => 'Vakai ki he ($1 {{int:pipe-separator}} $2) ($3).',
 'search-suggest' => 'Mahalo pē naʻa ke fiemaʻu: $1',
 'search-interwiki-more' => '(lahi ange)',
-'search-mwsuggest-enabled' => 'mo e fokotuʻu atu',
-'search-mwsuggest-disabled' => 'taʻe fokotuʻu atu',
 'showingresults' => "ʻOku ʻasi ʻi lalo ʻa e ngaahi fua ʻoku kamata mo e #'''$2''' (aʻu ki he '''$1''').",
 'showingresultsnum' => "ʻOku ʻasi ʻi lalo ha fua ʻe '''$3''', ʻoku kamata mo e #'''$2'''.",
 'nonefound' => "Ko e ngaahi kumi naʻe ʻikai ke siaʻa. Mahalo pē te ke fiefeinga kumi ʻi he ngaahi vā hingoa kotoa (kupu, alea, sīpinga, mo e hā fua). Tānaki ''all:'' ʻi muʻa ʻo hoʻo fehuʻi.",
index 1169a4d..2982ae2 100644 (file)
 
 $messages = array(
 # Dates
-'january'   => 'tenpo mun pi nanpa wan',
-'february'  => 'tenpo mun pi nanpa tu',
-'march'     => 'tenpo mun pi nanpa tu wan',
-'april'     => 'tenpo mun pi nanpa tu tu',
-'may_long'  => 'tenpo mun pi nanpa luka',
-'june'      => 'tenpo mun pi nanpa luka wan',
-'july'      => 'tenpo mun pi nanpa luka tu',
-'august'    => 'tenpo mun pi nanpa luka tu wan',
+'january' => 'tenpo mun pi nanpa wan',
+'february' => 'tenpo mun pi nanpa tu',
+'march' => 'tenpo mun pi nanpa tu wan',
+'april' => 'tenpo mun pi nanpa tu tu',
+'may_long' => 'tenpo mun pi nanpa luka',
+'june' => 'tenpo mun pi nanpa luka wan',
+'july' => 'tenpo mun pi nanpa luka tu',
+'august' => 'tenpo mun pi nanpa luka tu wan',
 'september' => 'tenpo mun pi nanpa luka tu tu',
-'october'   => 'tenpo mun pi nanpa luka luka',
-'november'  => 'tenpo mun pi nanpa luka luka wan',
-'december'  => 'tenpo mun pi nanpa luka luka tu',
+'october' => 'tenpo mun pi nanpa luka luka',
+'november' => 'tenpo mun pi nanpa luka luka wan',
+'december' => 'tenpo mun pi nanpa luka luka tu',
 
 # Categories related messages
-'category_header'        => 'lipu lon kulupu lipu "$1"',
-'subcategories'          => 'kulupu lipu lili',
+'category_header' => 'lipu lon kulupu lipu "$1"',
+'subcategories' => 'kulupu lipu lili',
 'listingcontinuesabbrev' => ' li awen',
 
-'article'    => 'lipu sona',
-'newwindow'  => '(ona li open e lupa sin)',
-'cancel'     => 'ike',
-'mytalk'     => 'toki mi',
+'article' => 'lipu sona',
+'newwindow' => '(ona li open e lupa sin)',
+'cancel' => 'ike',
+'mytalk' => 'toki mi',
 'navigation' => 'lipu suli',
 
-'help'              => 'mi sona ala',
-'search'            => 'o lukin jo',
-'go'                => 'o tawa',
-'history'           => 'o lukin e lipu ni pi tenpo pini',
-'history_short'     => 'lipu ni pi tenpo pini',
-'printableversion'  => 'lipu ni o kama lipu len',
-'permalink'         => 'nimi open kiwen',
-'edit'              => 'o ante',
-'editthispage'      => 'o ante e lipu ni',
-'delete'            => 'o weka',
-'deletethispage'    => 'o weka e lipu ni',
-'protect'           => 'mi taso o ken ante',
-'protectthispage'   => 'mi taso o ken ante e lipu ni',
-'unprotect'         => 'jan ali o ken ante',
+'help' => 'mi sona ala',
+'search' => 'o lukin jo',
+'go' => 'o tawa',
+'history' => 'o lukin e lipu ni pi tenpo pini',
+'history_short' => 'lipu ni pi tenpo pini',
+'printableversion' => 'lipu ni o kama lipu len',
+'permalink' => 'nimi open kiwen',
+'edit' => 'o ante',
+'editthispage' => 'o ante e lipu ni',
+'delete' => 'o weka',
+'deletethispage' => 'o weka e lipu ni',
+'protect' => 'mi taso o ken ante',
+'protectthispage' => 'mi taso o ken ante e lipu ni',
+'unprotect' => 'jan ali o ken ante',
 'unprotectthispage' => 'jan ale o ken ante e lipu ni',
-'talkpage'          => 'Talk page',
-'specialpage'       => 'lipu suli',
-'talk'              => 'o toki',
-'toolbox'           => 'ilo',
-'otherlanguages'    => 'toki ante',
-'redirectedfrom'    => '(tan $1)',
+'talkpage' => 'Talk page',
+'specialpage' => 'lipu suli',
+'talk' => 'o toki',
+'toolbox' => 'ilo',
+'otherlanguages' => 'toki ante',
+'redirectedfrom' => '(tan $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'            => 'lipu sona pi toki pona li seme?',
-'aboutpage'            => 'Project:lipu sona pi toki pona li seme?',
-'copyright'            => 'lipu ken $1 li lawa e lipu ni.',
-'currentevents'        => 'seme li sin lon ma?',
-'disclaimers'          => 'wile ala',
-'edithelp'             => 'mi sona ala e ante',
-'mainpage'             => 'lipu lawa',
+'aboutsite' => 'lipu sona pi toki pona li seme?',
+'aboutpage' => 'Project:lipu sona pi toki pona li seme?',
+'copyright' => 'lipu ken $1 li lawa e lipu ni.',
+'currentevents' => 'seme li sin lon ma?',
+'disclaimers' => 'wile ala',
+'edithelp' => 'mi sona ala e ante',
+'mainpage' => 'lipu lawa',
 'mainpage-description' => 'lipu lawa',
-'portal'               => 'lipu pi kulupu ni',
-'privacy'              => 'ken pi awen weka',
+'portal' => 'lipu pi kulupu ni',
+'privacy' => 'ken pi awen weka',
 
-'ok'            => 'pona',
+'ok' => 'pona',
 'retrievedfrom' => 'tan $1',
-'editsection'   => 'o ante',
-'toc'           => 'poki lawa',
-'showtoc'       => 'o suli e poki ni.',
-'hidetoc'       => 'o lili e poki ni',
+'editsection' => 'o ante',
+'toc' => 'poki lawa',
+'showtoc' => 'o suli e poki ni.',
+'hidetoc' => 'o lili e poki ni',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'lipu sona',
-'nstab-user'      => 'lipu jan',
-'nstab-special'   => 'suli',
-'nstab-image'     => 'lipu nanpa',
+'nstab-main' => 'lipu sona',
+'nstab-user' => 'lipu jan',
+'nstab-special' => 'suli',
+'nstab-image' => 'lipu nanpa',
 'nstab-mediawiki' => 'nimi',
-'nstab-template'  => 'lipu mama',
-'nstab-help'      => 'pana pona',
-'nstab-category'  => 'kulupu lipu',
+'nstab-template' => 'lipu mama',
+'nstab-help' => 'pana pona',
+'nstab-category' => 'kulupu lipu',
 
 # Login and logout pages
-'logout'     => 'mi o tawa',
+'logout' => 'mi o tawa',
 'userlogout' => 'mi o tawa',
 
 # Edit pages
-'summary'          => 'ante li seme:',
-'minoredit'        => 'ante ni li lili taso',
-'watchthis'        => 'mi wile sona e ante ale pi lipu ni lon tenpo kama',
-'savearticle'      => 'o awen',
-'preview'          => 'lukin taso',
-'showpreview'      => 'mi wile lukin taso e ante',
-'editing'          => 'mi ante e: $1',
-'editingcomment'   => 'mi ante e lipu $1 (wan sin)',
+'summary' => 'ante li seme:',
+'minoredit' => 'ante ni li lili taso',
+'watchthis' => 'mi wile sona e ante ale pi lipu ni lon tenpo kama',
+'savearticle' => 'o awen',
+'preview' => 'lukin taso',
+'showpreview' => 'mi wile lukin taso e ante',
+'editing' => 'mi ante e: $1',
+'editingcomment' => 'mi ante e lipu $1 (wan sin)',
 'copyrightwarning' => "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />
 kin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.
 '''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
-'templatesused'    => '{{PLURAL:$1|Template|Templates}} used on this page:',
+'templatesused' => '{{PLURAL:$1|Template|Templates}} used on this page:',
 
 # History pages
 'histfirst' => 'pini taso',
-'histlast'  => 'sin taso',
+'histlast' => 'sin taso',
 
 # Search results
-'prevn'        => 'nanpa {{PLURAL:$1|$1}} pini',
-'nextn'        => 'nanpa {{PLURAL:$1|$1}} kama',
+'prevn' => 'nanpa {{PLURAL:$1|$1}} pini',
+'nextn' => 'nanpa {{PLURAL:$1|$1}} kama',
 'viewprevnext' => 'o lukin e ($1 {{int:pipe-separator}} $2) ($3).',
 
 # Preferences page
 'preferences' => 'seme li pona tawa mi',
 
 # Recent changes
-'recentchanges'   => 'lipu seme li ante?',
+'recentchanges' => 'lipu seme li ante?',
 'minoreditletter' => 'ante lili',
-'newpageletter'   => 'lipu sin',
+'newpageletter' => 'lipu sin',
 
 # Recent changes linked
-'recentchangeslinked'         => 'ante sama',
-'recentchangeslinked-feed'    => 'ante sama',
+'recentchangeslinked' => 'ante sama',
+'recentchangeslinked-feed' => 'ante sama',
 'recentchangeslinked-toolbox' => 'ante sama',
 
 # Upload
-'upload'            => 'o pana e lipu nanpa',
-'filedesc'          => 'ante li seme',
+'upload' => 'o pana e lipu nanpa',
+'filedesc' => 'ante li seme',
 'fileuploadsummary' => 'ante li seme:',
 
 # File description page
@@ -139,8 +139,8 @@ kin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.
 'randompage' => 'mi wile lukin e lipu ante',
 
 # Miscellaneous special pages
-'lonelypages'  => 'lipu ni li jo ala e lipu sama',
-'move'         => 'o tawa',
+'lonelypages' => 'lipu ni li jo ala e lipu sama',
+'move' => 'o tawa',
 'movethispage' => 'o pana e nimi sin',
 
 # Special:AllPages
@@ -150,11 +150,11 @@ kin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.
 'categories' => 'kulupu lipu',
 
 # Watchlist
-'watchlist'       => 'mi sona e ante pi lipu seme',
-'watch'           => 'o sona e ante',
-'watchthispage'   => 'mi wile sona e ante ale pi lipu ni lon tenpo kama',
+'watchlist' => 'mi sona e ante pi lipu seme',
+'watch' => 'o sona e ante',
+'watchthispage' => 'mi wile sona e ante ale pi lipu ni lon tenpo kama',
 'unwatchthispage' => 'mi wile ala sona e ante ale pi lipu ni lon tenpo kama',
-'watchnochange'   => 'None of your watched items was edited in the time period displayed.',
+'watchnochange' => 'None of your watched items was edited in the time period displayed.',
 
 # Contributions
 'mycontris' => 'mi ante e lipu seme',
index 3ce9a38..c05c6fd 100644 (file)
  * @author לערי ריינהארט
  */
 
+$namespaceNames = array(
+       NS_SPECIAL          => 'Sipesol',
+       NS_TALK             => 'Toktok',
+       NS_USER             => 'Yusa',
+       NS_USER_TALK        => 'Toktok_bilong_yusa',
+       NS_PROJECT_TALK     => '$1_toktok',
+       NS_FILE             => 'Fail',
+       NS_FILE_TALK        => 'Toktok_bilong_fail',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Toktok_bilong_mediawiki',
+       NS_TEMPLATE         => 'Templet',
+       NS_TEMPLATE_TALK    => 'Toktok_bilong_templet',
+       NS_HELP             => 'Halivim',
+       NS_HELP_TALK        => 'Toktok_bilong_halivim',
+       NS_CATEGORY         => 'Grup',
+       NS_CATEGORY_TALK    => 'Toktok_bilong_grup',
+);
+
 $specialPageAliases = array(
        'Confirmemail'              => array( 'Orait long imel' ),
        'Contributions'             => array( 'Ol senis bilong yusa' ),
@@ -189,8 +207,10 @@ $messages = array(
 'create-this-page' => 'Kirapim dispela pes',
 'delete' => 'Rausim',
 'deletethispage' => 'Rausim dispela pes',
+'viewdeleted_short' => '{{PLURAL:$1|wanpela senis i raus pinis|$1 senis i raus pinis}}',
 'protect' => 'Tambuim',
 'protect_change' => 'senisim',
+'protectthispage' => 'Tambuim dispela pes',
 'newpage' => 'Nupela pes',
 'talkpage' => 'Toktok bilong dispela pes',
 'talkpagelinktext' => 'Toktok',
@@ -276,6 +296,9 @@ $messages = array(
 # Login and logout pages
 'yourname' => 'Yusanem:',
 'yourpassword' => 'Paswot:',
+'remembermypassword' => 'Holim yusanem bilong mi long dispela komputa (holim pas longpela taim $1 {{PLURAL:$1|de|de}})',
+'login' => 'Log in',
+'userloginnocreate' => 'Log in',
 'logout' => 'Logaut',
 'userlogout' => 'Logaut',
 'gotaccountlink' => 'Log in',
@@ -365,8 +388,6 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'search-suggest' => 'Yu laik tok: $1',
 'search-interwiki-default' => '$1 ol painim:',
 'search-interwiki-more' => '(moa)',
-'search-mwsuggest-enabled' => 'halivim mi',
-'search-mwsuggest-disabled' => 'nogat halivim mi',
 'searchall' => 'olgeta',
 'powersearch' => 'Mobeta Painim',
 'powersearch-legend' => 'Mobeta Painim',
@@ -489,6 +510,7 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'uploaderror' => 'Salim i kranki',
 'uploadlogpage' => 'Ripot long salim',
 'filename' => 'Nem bilong fail',
+'filedesc' => 'Liklik toksave bilong senis',
 'filesource' => 'As:',
 'watchthisupload' => 'Lukautim dispela fail',
 
@@ -863,4 +885,7 @@ Yu inap lukim as tok bilong em',
 # HTML forms
 'htmlform-selectorother-other' => 'Narapela',
 
+# Search suggestions
+'searchsuggest-search' => 'Painim',
+
 );
index 67a7b33..9a0981e 100644 (file)
@@ -138,7 +138,7 @@ $specialPageAliases = array(
        'PasswordReset'             => array( 'ParolaSıfırlama' ),
        'PermanentLink'             => array( 'KalıcıBağ' ),
        'Popularpages'              => array( 'PopülerSayfalar' ),
-       'Preferences'               => array( 'Tercihler' ),
+       'Preferences'               => array( 'Tercihler', 'Ayarlar' ),
        'Prefixindex'               => array( 'ÖnekDizini' ),
        'Protectedpages'            => array( 'KorunanSayfalar' ),
        'Protectedtitles'           => array( 'KorunanBaşlıklar' ),
@@ -179,142 +179,144 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__İÇİNDEKİLERYOK__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__GALERİYOK__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__İÇİNDEKİLERZORUNLU__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__İÇİNDEKİLER__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__DEĞİŞTİRYOK__', '__DÜZENLEMEYOK__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'MEVCUTAY', 'MEVCUTAY2', 'GÜNCELAY', 'GÜNCELAY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'MEVCUTAY1', 'GÜNCELAY1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'MEVCUTAYADI', 'GÜNCELAYADI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'MEVCUTAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'MEVCUTAYKISALTMASI', 'GÜNCELAYKISALTMASI', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'MEVCUTGÜN', 'GÜNCELGÜN', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'MEVCUTGÜN2', 'GÜNCELGÜN2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'MEVCUTGÜNADI', 'GÜNCELGÜNADI', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'MEVCUTYIL', 'GÜNCELYIL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'MEVCUTZAMAN', 'GÜNCELZAMAN', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'MEVCUTSAAT', 'GÜNCELSAAT', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'YERELAY', 'YERELAY2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'YERELAY1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'YERELAYADI', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'YERELAYADIİYELİK', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'YERELAYKISALTMASI', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'YERELGÜN', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'YERELGÜN2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'YERELGÜNADI', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'YERELYIL', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'YERELZAMAN', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'YERELSAAT', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'SAYFASAYISI', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'MADDESAYISI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'DOSYASAYISI', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'KULLANICISAYISI', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'AKTİFKULLANICISAYISI', 'ETKİNKULLANICISAYISI', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'DEĞİŞİKLİKSAYISI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'GÖRÜNTÜLEMESAYISI', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'SAYFAADI', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ADALANIU', 'İSİMALANIU', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'TARTIŞMAALANI', 'TARTIŞMABOŞLUĞU', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'TARTIŞMAALANIU', 'TARTIŞMABOŞLUĞUU', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'KONUALANI', 'MADDEALANI', 'KONUBOŞLUĞU', 'MADDEBOŞLUĞU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'KONUALANIU', 'MADDEALANIU', 'KONUBOŞLUĞUU', 'MADDEBOŞLUĞUU', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'TAMSAYFAADI', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'TAMSAYFAADIU', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'ALTSAYFAADI', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'ALTSAYFAADIU', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ÜSTSAYFAADI', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ÜSTSAYFAADIU', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'TARTIŞMASAYFASIADI', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'TARTIŞMASAYFASIADIU', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'MSJ:', 'İLT:', 'MSG:' ),
-       'subst'                   => array( '0', 'KOPYALA:', 'AKTAR:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'GÜVENLİAKTAR:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'MSJNW:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'küçükresim', 'küçük', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'küçükresim=$1', 'küçük=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'sağ', 'right' ),
-       'img_left'                => array( '1', 'sol', 'left' ),
-       'img_none'                => array( '1', 'yok', 'none' ),
-       'img_width'               => array( '1', '$1pik', '$1piksel', '$1px' ),
-       'img_center'              => array( '1', 'orta', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'çerçeveli', 'çerçeve', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'çerçevesiz', 'frameless' ),
-       'img_page'                => array( '1', 'sayfa=$1', 'sayfa $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'dikey', 'dikey=$1', 'dikey $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'sınır', 'border' ),
-       'img_baseline'            => array( '1', 'tabançizgisi', 'altçizgi', 'baseline' ),
-       'img_sub'                 => array( '1', 'alt', 'sub' ),
-       'img_super'               => array( '1', 'üst', 'üs', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'tavan', 'tepe', 'top' ),
-       'img_text_top'            => array( '1', 'metin-tavan', 'metin-tepe', 'text-top' ),
-       'img_middle'              => array( '1', 'merkez', 'middle' ),
-       'img_bottom'              => array( '1', 'taban', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'metin-taban', 'text-bottom' ),
-       'img_link'                => array( '1', 'bağlantı=$1', 'link=$1' ),
-       'int'                     => array( '0', 'İNT:', 'INT:' ),
-       'sitename'                => array( '1', 'SİTEADI', 'SITENAME' ),
-       'ns'                      => array( '0', 'AA:', 'AB:', 'NS:' ),
-       'nse'                     => array( '0', 'AAU:', 'ABU:', 'NSE:' ),
-       'localurl'                => array( '0', 'YERELURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'YERELURLU:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'SUNUCU', 'SERVER' ),
-       'servername'              => array( '0', 'SUNUCUADI', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'BETİKYOLU', 'SCRIPTPATH' ),
-       'stylepath'               => array( '0', 'BİÇEMYOLU', 'STYLEPATH' ),
-       'grammar'                 => array( '0', 'GRAMER:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'CİNSİYET:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__BAŞLIKDÖNÜŞÜMÜYOK__', '__BDY__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__İÇERİKDÖNÜŞÜMÜYOK__', '__İDY__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'MEVCUTHAFTA', 'GÜNCELHAFTA', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'MEVCUTHAFTANINGÜNÜ', 'GÜNCELHAFTANINGÜNÜ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'YERELHAFTA', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'YERELHAFTANINGÜNÜ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'SÜRÜMNU', 'SÜRÜMNO', 'REVİZYONNU', 'REVİZYONNO', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'SÜRÜMGÜNÜ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'SÜRÜMGÜNÜ2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'SÜRÜMAYI', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'SÜRÜMYILI', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'SÜRÜMZAMANBİLGİSİ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'SÜRÜMKULLANICI', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'ÇOĞUL:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TAMURL:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'TAMURLU:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'KHİLK:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'BHİLK:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'KH:', 'LC:' ),
-       'uc'                      => array( '0', 'BH:', 'UC:' ),
-       'raw'                     => array( '0', 'HAM:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'BAŞLIKGÖSTER', 'DISPLAYTITLE' ),
-       'newsectionlink'          => array( '1', '__YENİBAŞLIKBAĞLANTISI__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__YENİBAŞLIKBAĞLANTISIYOK__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'MEVCUTSÜRÜM', 'GÜNCELSÜRÜM', 'CURRENTVERSION' ),
-       'currenttimestamp'        => array( '1', 'MEVCUTZAMANBİLGİSİ', 'GÜNCELZAMANBİLGİSİ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'YERELZAMANBİLGİSİ', 'LOCALTIMESTAMP' ),
-       'language'                => array( '0', '#DİL:', '#LİSAN:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'İÇERİKDİLİ', 'İÇERİKLİSANI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'İSİMALANINDAKİSAYFALAR', 'İADAKİSAYFALAR', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'HİZMETLİSAYISI', 'NUMBEROFADMINS' ),
-       'special'                 => array( '0', 'özel', 'special' ),
-       'defaultsort'             => array( '1', 'VARSAYILANSIRALA:', 'VARSAYILANSIRALAMAANAHTARI:', 'VARSAYILANKATEGORİSIRALA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'DOSYA_YOLU:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'etiket', 'tag' ),
-       'hiddencat'               => array( '1', '__GİZLİKAT__', '__GİZLİKATEGORİ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'KATEGORİDEKİSAYFALAR', 'KATTAKİSAYFALAR', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'SAYFABOYUTU', 'PAGESIZE' ),
-       'index'                   => array( '1', '__DİZİN__', '__ENDEKS__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__DİZİNYOK__', '__ENDEKSYOK__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'GRUPTAKİSAYI', 'GRUBUNSAYISI', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__STATİKYÖNLENDİRME__', '__SABİTYÖNLENDİRME__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'KORUMASEVİYESİ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
-       'url_wiki'                => array( '0', 'VİKİ', 'WIKI' ),
+       'redirect'                  => array( '0', '#YÖNLENDİRME', '#YÖNLENDİR', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__İÇİNDEKİLERYOK__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__GALERİYOK__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__İÇİNDEKİLERZORUNLU__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__İÇİNDEKİLER__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__DEĞİŞTİRYOK__', '__DÜZENLEMEYOK__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'MEVCUTAY', 'MEVCUTAY2', 'GÜNCELAY', 'GÜNCELAY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'MEVCUTAY1', 'GÜNCELAY1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'MEVCUTAYADI', 'GÜNCELAYADI', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'MEVCUTAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'MEVCUTAYKISALTMASI', 'GÜNCELAYKISALTMASI', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'MEVCUTGÜN', 'GÜNCELGÜN', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'MEVCUTGÜN2', 'GÜNCELGÜN2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'MEVCUTGÜNADI', 'GÜNCELGÜNADI', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'MEVCUTYIL', 'GÜNCELYIL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'MEVCUTZAMAN', 'GÜNCELZAMAN', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'MEVCUTSAAT', 'GÜNCELSAAT', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'YERELAY', 'YERELAY2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'YERELAY1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'YERELAYADI', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'YERELAYADIİYELİK', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'YERELAYKISALTMASI', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'YERELGÜN', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'YERELGÜN2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'YERELGÜNADI', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'YERELYIL', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'YERELZAMAN', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'YERELSAAT', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SAYFASAYISI', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'MADDESAYISI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'DOSYASAYISI', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'KULLANICISAYISI', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'AKTİFKULLANICISAYISI', 'ETKİNKULLANICISAYISI', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'DEĞİŞİKLİKSAYISI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'GÖRÜNTÜLEMESAYISI', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'SAYFAADI', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ADALANIU', 'İSİMALANIU', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'TARTIŞMAALANI', 'TARTIŞMABOŞLUĞU', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'TARTIŞMAALANIU', 'TARTIŞMABOŞLUĞUU', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'KONUALANI', 'MADDEALANI', 'KONUBOŞLUĞU', 'MADDEBOŞLUĞU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'KONUALANIU', 'MADDEALANIU', 'KONUBOŞLUĞUU', 'MADDEBOŞLUĞUU', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'TAMSAYFAADI', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'TAMSAYFAADIU', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ALTSAYFAADI', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ALTSAYFAADIU', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ÜSTSAYFAADI', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ÜSTSAYFAADIU', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'TARTIŞMASAYFASIADI', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'TARTIŞMASAYFASIADIU', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'MSJ:', 'İLT:', 'MSG:' ),
+       'subst'                     => array( '0', 'KOPYALA:', 'AKTAR:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'GÜVENLİAKTAR:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'MSJNW:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'küçükresim', 'küçük', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'küçükresim=$1', 'küçük=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'sağ', 'right' ),
+       'img_left'                  => array( '1', 'sol', 'left' ),
+       'img_none'                  => array( '1', 'yok', 'none' ),
+       'img_width'                 => array( '1', '$1pik', '$1piksel', '$1px' ),
+       'img_center'                => array( '1', 'orta', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'çerçeveli', 'çerçeve', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'çerçevesiz', 'frameless' ),
+       'img_page'                  => array( '1', 'sayfa=$1', 'sayfa $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'dikey', 'dikey=$1', 'dikey $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'sınır', 'border' ),
+       'img_baseline'              => array( '1', 'tabançizgisi', 'altçizgi', 'baseline' ),
+       'img_sub'                   => array( '1', 'alt', 'sub' ),
+       'img_super'                 => array( '1', 'üst', 'üs', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'tavan', 'tepe', 'top' ),
+       'img_text_top'              => array( '1', 'metin-tavan', 'metin-tepe', 'text-top' ),
+       'img_middle'                => array( '1', 'merkez', 'middle' ),
+       'img_bottom'                => array( '1', 'taban', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'metin-taban', 'text-bottom' ),
+       'img_link'                  => array( '1', 'bağlantı=$1', 'link=$1' ),
+       'int'                       => array( '0', 'İNT:', 'INT:' ),
+       'sitename'                  => array( '1', 'SİTEADI', 'SITENAME' ),
+       'ns'                        => array( '0', 'AA:', 'AB:', 'NS:' ),
+       'nse'                       => array( '0', 'AAU:', 'ABU:', 'NSE:' ),
+       'localurl'                  => array( '0', 'YERELURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'YERELURLU:', 'LOCALURLE:' ),
+       'pageid'                    => array( '0', 'SAYFANO', 'PAGEID' ),
+       'server'                    => array( '0', 'SUNUCU', 'SERVER' ),
+       'servername'                => array( '0', 'SUNUCUADI', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'BETİKYOLU', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'BİÇEMYOLU', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'GRAMER:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'CİNSİYET:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__BAŞLIKDÖNÜŞÜMÜYOK__', '__BDY__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__İÇERİKDÖNÜŞÜMÜYOK__', '__İDY__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'MEVCUTHAFTA', 'GÜNCELHAFTA', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'MEVCUTHAFTANINGÜNÜ', 'GÜNCELHAFTANINGÜNÜ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'YERELHAFTA', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'YERELHAFTANINGÜNÜ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'SÜRÜMNU', 'SÜRÜMNO', 'REVİZYONNU', 'REVİZYONNO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'SÜRÜMGÜNÜ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'SÜRÜMGÜNÜ2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'SÜRÜMAYI', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'SÜRÜMYILI', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'SÜRÜMZAMANBİLGİSİ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'SÜRÜMKULLANICI', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'ÇOĞUL:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TAMURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'TAMURLU:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'KANONİKURL', 'CANONICALURL:' ),
+       'lcfirst'                   => array( '0', 'KHİLK:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'BHİLK:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'KH:', 'LC:' ),
+       'uc'                        => array( '0', 'BH:', 'UC:' ),
+       'raw'                       => array( '0', 'HAM:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'BAŞLIKGÖSTER', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__YENİBAŞLIKBAĞLANTISI__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__YENİBAŞLIKBAĞLANTISIYOK__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'MEVCUTSÜRÜM', 'GÜNCELSÜRÜM', 'CURRENTVERSION' ),
+       'currenttimestamp'          => array( '1', 'MEVCUTZAMANBİLGİSİ', 'GÜNCELZAMANBİLGİSİ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'YERELZAMANBİLGİSİ', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#DİL:', '#LİSAN:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'İÇERİKDİLİ', 'İÇERİKLİSANI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'İSİMALANINDAKİSAYFALAR', 'İADAKİSAYFALAR', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'HİZMETLİSAYISI', 'NUMBEROFADMINS' ),
+       'special'                   => array( '0', 'özel', 'special' ),
+       'defaultsort'               => array( '1', 'VARSAYILANSIRALA:', 'VARSAYILANSIRALAMAANAHTARI:', 'VARSAYILANKATEGORİSIRALA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'DOSYA_YOLU:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'etiket', 'tag' ),
+       'hiddencat'                 => array( '1', '__GİZLİKAT__', '__GİZLİKATEGORİ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'KATEGORİDEKİSAYFALAR', 'KATTAKİSAYFALAR', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'SAYFABOYUTU', 'PAGESIZE' ),
+       'index'                     => array( '1', '__DİZİN__', '__ENDEKS__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__DİZİNYOK__', '__ENDEKSYOK__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'GRUPTAKİSAYI', 'GRUBUNSAYISI', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__STATİKYÖNLENDİRME__', '__SABİTYÖNLENDİRME__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'KORUMASEVİYESİ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
+       'url_wiki'                  => array( '0', 'VİKİ', 'WIKI' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -586,6 +588,8 @@ $1',
 'youhavenewmessages' => 'Yeni $1 var ($2).',
 'newmessageslink' => 'mesajınız',
 'newmessagesdifflink' => 'son değişiklik',
+'newmessageslinkplural' => 'mesajınız',
+'newmessagesdifflinkplural' => 'son {{PLURAL:$1|değişiklik|değişiklikler}}',
 'youhavenewmessagesmulti' => "$1'de yeni mesajınız var.",
 'editsection' => 'düzenle',
 'editold' => 'değiştir',
@@ -696,7 +700,7 @@ Lütfen birkaç dakika sonra yeniden deneyin.',
 'protectedpagetext' => 'Bu sayfa değişiklik yapılmaması 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 kilitlenmiştir.',
+'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.",
 'editinginterface' => "'''UYARI:''' Yazılım için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
 'sqlhidden' => '(SQL gizli sorgu)',
 'cascadeprotected' => 'Bu sayfa değişiklik yapılması engellenmiştir, çünkü  "kademeli" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:
@@ -719,7 +723,7 @@ Verilen sebep: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Oturumu kapattınız.'''
 
-Ş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 [[Special:UserLogin|yeniden oturum açabilirsiniz]].
+Ş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! ==
 
@@ -1074,6 +1078,9 @@ Silinmiş görünüyor.',
 Sayfa zaten mevcut.',
 'defaultmessagetext' => 'Varsayılan mesaj metni',
 
+# Content models
+'content-model-javascript' => 'JavaScript',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısı içeriyor.
 
@@ -1290,7 +1297,7 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'prevn-title' => 'Önceki $1 {{PLURAL:$1|sonuç|sonuç}}',
 'nextn-title' => 'Sonraki $1 {{PLURAL:$1|sonuç|sonuç}}',
 'shown-title' => 'Sayfa başına $1 {{PLURAL:$1|sonuç|sonuç}} göster',
-'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) gör',
 'searchmenu-legend' => 'Arama seçenekleri',
 'searchmenu-exists' => "'''Bu vikide \"[[:\$1]]\" adında bir sayfa mevcut'''",
 'searchmenu-new' => "'''Bu vikide \"[[:\$1]]\" sayfasını oluştur!'''",
@@ -1315,8 +1322,6 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'search-interwiki-caption' => 'Kardeş projeler',
 'search-interwiki-default' => '$1 sonuçlar:',
 'search-interwiki-more' => '(daha çok)',
-'search-mwsuggest-enabled' => 'önerilerle',
-'search-mwsuggest-disabled' => 'öneri yok',
 'search-relatedarticle' => 'ilgili',
 'mwsuggest-disable' => 'AJAX önerilerini devre dışı bırak',
 'searcheverything-enable' => 'Tüm ad alanlarında ara',
@@ -2092,8 +2097,8 @@ Lütfen unutmayın ki, diğer web siteleri bir dosyaya doğrudan bir URL ile ba
 'notargettext' => 'Bu fonksiyonu uygulamak için bir hedef sayfası ya da kullanıcısı belirtmediniz.',
 'nopagetitle' => 'Böyle bir hedef sayfası yok',
 'nopagetext' => 'Belirttiğiniz hedef sayfası mevcut değil.',
-'pager-newer-n' => '{{PLURAL:$1|1 daha yeni|$1 daha yeni}}',
-'pager-older-n' => '{{PLURAL:$1|1 daha eski|$1 daha eski}}',
+'pager-newer-n' => '$1 daha yeni',
+'pager-older-n' => '$1 daha eski',
 'suppress' => 'Gözetim',
 'querypage-disabled' => 'Bu özel sayfa, performansa dayalı nedenlerle devre dışı bırakılır.',
 
@@ -2868,7 +2873,6 @@ Geçici dosya kayıp.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript denemesi',
-'javascripttest-disabled' => 'Bu işlev, bu viki üzerinde etkinleştirilmedi.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Kullanıcı sayfanız',
@@ -2974,6 +2978,7 @@ Geçici dosya kayıp.',
 'pageinfo-header-edits' => 'Değişiklikler',
 'pageinfo-views' => 'Görüntülenme sayısı',
 'pageinfo-watchers' => 'İzleyen sayısı',
+'pageinfo-redirects-value' => '$1',
 'pageinfo-edits' => 'Değişiklik sayısı',
 
 # Skin names
@@ -3816,6 +3821,10 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'feedback-bugcheck' => 'Harika! Sadece [bilinen $1 hatalarından] olmadığını kontrol et.',
 'feedback-bugnew' => 'Kontrol ettim. Yeni hata bildir',
 
+# Search suggestions
+'searchsuggest-search' => 'Ara',
+'searchsuggest-containing' => 'içeren...',
+
 # API errors
 'api-error-badaccess-groups' => 'Bu wiki için dosya yüklemenize izin verilmiyor.',
 'api-error-badtoken' => 'İç hata: Bozuk simge.',
index 061e4a8..3e9b3aa 100644 (file)
@@ -162,8 +162,8 @@ $messages = array(
 'aboutsite' => '3al {{SITENAME}}',
 'aboutpage' => 'Project: 3al',
 'copyrightpage' => '{{ns:project}}:Ḥaqat duKaṭowo',
-'currentevents' => 'Gedşe du³do',
-'currentevents-url' => 'Project:Gedşe du3do',
+'currentevents' => 'Gedşe ḥaṭe',
+'currentevents-url' => 'Project:Gedşe du³do',
 'disclaimers' => 'Disclaimers',
 'disclaimerpage' => 'Project: Disclaimer gawonoyo',
 'edithelp' => 'Editing help',
@@ -865,6 +865,9 @@ iFaṭaṭe u3do kitla Qaṫre.',
 'feedback-message' => 'Ṫebo:',
 'feedback-cancel' => 'Mbaṫel',
 
+# Search suggestions
+'searchsuggest-search' => 'Kruxyo',
+
 # API errors
 'api-error-unknownerror' => 'Fawdo nuxroyo: $1',
 
index 726ecba..45cecda 100644 (file)
@@ -372,7 +372,7 @@ Hikwlaho ka xivangelo xa "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Uhumile eka wiki leyi.'''
 
-Ungaya emahlweni utirhisa {{SITENAME}} handle ko tipaluxa, kumbe unga [[Special:UserLogin|pfula unghena nakambe]] tani hi mutirhisa un'wana kumbe kumbe hivuxokoxoko bya wena.
+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.
index bcf74ec..ea2fc37 100644 (file)
@@ -172,38 +172,38 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ЮНӘЛТҮ', '#перенаправление', '#перенапр', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БАШЛЫКЮК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__ETTIQ__', '__ОБЯЗ_ОГЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЭЧТЕЛЕК__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БҮЛЕКҮЗГӘРТҮЮК__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'АГЫМДАГЫ_АЙ', 'АГЫМДАГЫ_АЙ2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ_GEN', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'АГЫМДАГЫ_КӨН', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'АГЫМДАГЫ_КӨН2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'АГЫМДАГЫ_КӨН_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'АГЫМДАГЫ_ЕЛ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'АГЫМДАГЫ_ВАКЫТ', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'МӘКАЛӘ_САНЫ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'БИТ_ИСЕМЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'namespace'               => array( '1', 'ИСЕМНӘР_МӘЙДАНЫ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'msg'                     => array( '0', 'ХӘБӘР', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'TÖPÇEK:', 'ПОДСТ:', 'ПОДСТАНОВКА:', 'SUBST:' ),
-       'img_right'               => array( '1', 'уңда', 'справа', 'right' ),
-       'img_left'                => array( '1', 'сулда', 'слева', 'left' ),
-       'img_none'                => array( '1', 'юк', 'без', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'үзәк', 'центр', 'center', 'centre' ),
-       'int'                     => array( '0', 'ЭЧКЕ:', 'ВНУТР:', 'INT:' ),
-       'sitename'                => array( '1', 'СӘХИФӘ_ИСЕМЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'İA:', 'ПИ:', 'NS:' ),
-       'localurl'                => array( '0', 'URINLIURL:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URINLIURLE:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
-       'language'                => array( '0', '#ТЕЛ:', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'махсус', 'служебная', 'special' ),
-       'tag'                     => array( '0', 'тамга', 'метка', 'тег', 'тэг', 'tag' ),
-       'noindex'                 => array( '1', '__ИНДЕКССЫЗ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
+       'redirect'                  => array( '0', '#ЮНӘЛТҮ', '#перенаправление', '#перенапр', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БАШЛЫКЮК__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__ETTIQ__', '__ОБЯЗ_ОГЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЭЧТЕЛЕК__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БҮЛЕКҮЗГӘРТҮЮК__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'АГЫМДАГЫ_АЙ', 'АГЫМДАГЫ_АЙ2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'АГЫМДАГЫ_АЙ_ИСЕМЕ_GEN', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'АГЫМДАГЫ_КӨН', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'АГЫМДАГЫ_КӨН2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'АГЫМДАГЫ_КӨН_ИСЕМЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'АГЫМДАГЫ_ЕЛ', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'АГЫМДАГЫ_ВАКЫТ', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'МӘКАЛӘ_САНЫ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'БИТ_ИСЕМЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'ИСЕМНӘР_МӘЙДАНЫ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'msg'                       => array( '0', 'ХӘБӘР', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'TÖPÇEK:', 'ПОДСТ:', 'ПОДСТАНОВКА:', 'SUBST:' ),
+       'img_right'                 => array( '1', 'уңда', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'сулда', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'юк', 'без', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'үзәк', 'центр', 'center', 'centre' ),
+       'int'                       => array( '0', 'ЭЧКЕ:', 'ВНУТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'СӘХИФӘ_ИСЕМЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'İA:', 'ПИ:', 'NS:' ),
+       'localurl'                  => array( '0', 'URINLIURL:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URINLIURLE:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+       'language'                  => array( '0', '#ТЕЛ:', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'махсус', 'служебная', 'special' ),
+       'tag'                       => array( '0', 'тамга', 'метка', 'тег', 'тэг', 'tag' ),
+       'noindex'                   => array( '1', '__ИНДЕКССЫЗ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
 );
 
 $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюяӘәӨөҮүҖҗҢңҺһ]+)(.*)$/sDu';
@@ -606,7 +606,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Сез хисап язмагыздан чыктыгыз.'''
 
-Сез {{SITENAME}} проектында аноним рәвештә кала яисә шул ук яки башка исем белән яңадан [[Special:UserLogin|керә]] аласыз.
+Сез {{SITENAME}} проектында аноним рәвештә кала яисә шул ук яки башка исем белән яңадан <span class='plainlinks'>[$1 керә]</span> аласыз.
 Кайбер битләр Сез кергән кебек күрсәтелергә мөмкин. Моны бетерү өчен браузер кэшын чистартыгыз.",
 'welcomecreation' => '== Рәхим итегез, $1! ==
 Сез теркәлдегез.
@@ -1150,8 +1150,6 @@ $1",
 'search-interwiki-caption' => 'Тугандаш проектлар',
 'search-interwiki-default' => '$1 нәтиҗә:',
 'search-interwiki-more' => '(тагын)',
-'search-mwsuggest-enabled' => 'киңәшләр белән',
-'search-mwsuggest-disabled' => 'киңәшсез',
 'search-relatedarticle' => 'Бәйләнгән',
 'mwsuggest-disable' => 'AJAX-ярдәмне ябу',
 'searcheverything-enable' => 'Барлык исемнәр мәйданында эзләү',
@@ -2556,6 +2554,10 @@ $1',
 'feedback-close' => 'Әзер',
 'feedback-bugnew' => 'Мин тикшердем. Яңа хата турында хәбәр итү',
 
+# Search suggestions
+'searchsuggest-search' => 'Эзләү',
+'searchsuggest-containing' => 'эчтәлек...',
+
 # API errors
 'api-error-badaccess-groups' => 'Сезгә бу викигә файллар өстәү рөхсәт ителмәгән',
 'api-error-badtoken' => 'Эчке хата: дөрес булмаган токен.',
index c7681f0..57755f7 100644 (file)
@@ -61,30 +61,30 @@ $dateFormats = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#YÜNÄLTÜ', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__ETYUQ__', '__NOTOC__' ),
-       'forcetoc'                => array( '0', '__ETTIQ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ET__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__BÜLEMTÖZÄTÜYUQ__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'AĞIMDAĞI_AY', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonthname'        => array( '1', 'AĞIMDAĞI_AY_İSEME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'AĞIMDAĞI_AY_İSEME_GEN', 'CURRENTMONTHNAMEGEN' ),
-       'currentday'              => array( '1', 'AĞIMDAĞI_KÖN', 'CURRENTDAY' ),
-       'currentdayname'          => array( '1', 'AĞIMDAĞI_KÖN_İSEME', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'AĞIMDAĞI_YIL', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'AĞIMDAĞI_WAQIT', 'CURRENTTIME' ),
-       'numberofarticles'        => array( '1', 'MÄQÄLÄ_SANI', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'BİTİSEME', 'PAGENAME' ),
-       'namespace'               => array( '1', 'İSEMARA', 'NAMESPACE' ),
-       'subst'                   => array( '0', 'TÖPÇEK:', 'SUBST:' ),
-       'img_right'               => array( '1', 'uñda', 'right' ),
-       'img_left'                => array( '1', 'sulda', 'left' ),
-       'img_none'                => array( '1', 'yuq', 'none' ),
-       'int'                     => array( '0', 'EÇKE:', 'INT:' ),
-       'sitename'                => array( '1', 'SÄXİFÄİSEME', 'SITENAME' ),
-       'ns'                      => array( '0', 'İA:', 'NS:' ),
-       'localurl'                => array( '0', 'URINLIURL:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'URINLIURLE:', 'LOCALURLE:' ),
+       'redirect'                  => array( '0', '#YÜNÄLTÜ', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__ETYUQ__', '__NOTOC__' ),
+       'forcetoc'                  => array( '0', '__ETTIQ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ET__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__BÜLEMTÖZÄTÜYUQ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'AĞIMDAĞI_AY', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonthname'          => array( '1', 'AĞIMDAĞI_AY_İSEME', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'AĞIMDAĞI_AY_İSEME_GEN', 'CURRENTMONTHNAMEGEN' ),
+       'currentday'                => array( '1', 'AĞIMDAĞI_KÖN', 'CURRENTDAY' ),
+       'currentdayname'            => array( '1', 'AĞIMDAĞI_KÖN_İSEME', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'AĞIMDAĞI_YIL', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'AĞIMDAĞI_WAQIT', 'CURRENTTIME' ),
+       'numberofarticles'          => array( '1', 'MÄQÄLÄ_SANI', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'BİTİSEME', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'İSEMARA', 'NAMESPACE' ),
+       'subst'                     => array( '0', 'TÖPÇEK:', 'SUBST:' ),
+       'img_right'                 => array( '1', 'uñda', 'right' ),
+       'img_left'                  => array( '1', 'sulda', 'left' ),
+       'img_none'                  => array( '1', 'yuq', 'none' ),
+       'int'                       => array( '0', 'EÇKE:', 'INT:' ),
+       'sitename'                  => array( '1', 'SÄXİFÄİSEME', 'SITENAME' ),
+       'ns'                        => array( '0', 'İA:', 'NS:' ),
+       'localurl'                  => array( '0', 'URINLIURL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'URINLIURLE:', 'LOCALURLE:' ),
 );
 
 $fallback8bitEncoding = "windows-1254";
@@ -477,7 +477,7 @@ Ul kürsätkän säbäp: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Sez xisap yazmağızdan çıqtığız.'''
 
-Sez {{SITENAME}} proyektında anonim räweştä qala yäisä şul uq yäki başqa isem belän yañadan [[Special:UserLogin|kerä]] alasız.
+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.
@@ -924,8 +924,6 @@ Sez idaräçe bulu säbäple, [$1 yäşerelgän yuramanı qarıy alasız]",
 'search-interwiki-caption' => 'Tuğandaş proyektlar',
 'search-interwiki-default' => '$1 näticä:',
 'search-interwiki-more' => '(tağın)',
-'search-mwsuggest-enabled' => 'kiñäşlär belän',
-'search-mwsuggest-disabled' => 'kiñäşsez',
 'search-relatedarticle' => 'Bäylängän',
 'mwsuggest-disable' => 'AJAX-yärdämne yabu',
 'searcheverything-enable' => 'Barlıq isemnär mäydanında ezläw',
index 9854cb8..e12c76d 100644 (file)
@@ -16,101 +16,101 @@ $fallback = 'fr';
 
 $messages = array(
 # Dates
-'sunday'        => 'tāpati',
-'monday'        => 'monirē',
-'tuesday'       => 'mahana piti',
-'wednesday'     => 'mahana toru',
-'thursday'      => 'mahana maha',
-'friday'        => 'mahana pae',
-'saturday'      => 'mahana mā’a',
-'sun'           => 'tāpati',
-'mon'           => 'monirē',
-'tue'           => 'mahana piti',
-'wed'           => 'mahana toru',
-'thu'           => 'mahana maha',
-'fri'           => 'mahana pae',
-'sat'           => 'mahana mā’a',
-'january'       => 'nō tēnuare',
-'february'      => 'nō fepuare',
-'march'         => 'nō māti',
-'april'         => 'nō ’ēperēra',
-'may_long'      => 'nō mē',
-'june'          => 'nō tiunu',
-'july'          => 'nō tiurai',
-'august'        => 'nō tiurai',
-'september'     => 'nō tetepa',
-'october'       => 'nō ’ātopa',
-'november'      => 'nō novema',
-'december'      => 'nō tītema',
-'january-gen'   => 'nō tēnuare',
-'february-gen'  => 'nō fepuare',
-'march-gen'     => 'nō māti',
-'april-gen'     => 'nō ’ēperēra',
-'may-gen'       => 'nō mē',
-'june-gen'      => 'nō tiunu',
-'july-gen'      => 'nō tiurai',
-'august-gen'    => 'nō tiurai',
+'sunday' => 'tāpati',
+'monday' => 'monirē',
+'tuesday' => 'mahana piti',
+'wednesday' => 'mahana toru',
+'thursday' => 'mahana maha',
+'friday' => 'mahana pae',
+'saturday' => 'mahana mā’a',
+'sun' => 'tāpati',
+'mon' => 'monirē',
+'tue' => 'mahana piti',
+'wed' => 'mahana toru',
+'thu' => 'mahana maha',
+'fri' => 'mahana pae',
+'sat' => 'mahana mā’a',
+'january' => 'nō tēnuare',
+'february' => 'nō fepuare',
+'march' => 'nō māti',
+'april' => 'nō ’ēperēra',
+'may_long' => 'nō mē',
+'june' => 'nō tiunu',
+'july' => 'nō tiurai',
+'august' => 'nō tiurai',
+'september' => 'nō tetepa',
+'october' => 'nō ’ātopa',
+'november' => 'nō novema',
+'december' => 'nō tītema',
+'january-gen' => 'nō tēnuare',
+'february-gen' => 'nō fepuare',
+'march-gen' => 'nō māti',
+'april-gen' => 'nō ’ēperēra',
+'may-gen' => 'nō mē',
+'june-gen' => 'nō tiunu',
+'july-gen' => 'nō tiurai',
+'august-gen' => 'nō tiurai',
 'september-gen' => 'nō tetepa',
-'october-gen'   => 'nō ’ātopa',
-'november-gen'  => 'nō novema',
-'december-gen'  => 'nō tītema',
-'jan'           => 'nō tēnuare',
-'feb'           => 'nō fepuare',
-'mar'           => 'nō māti',
-'apr'           => 'nō ’ēperēra',
-'may'           => 'nō mē',
-'jun'           => 'nō tiunu',
-'jul'           => 'nō tiurai',
-'aug'           => 'nō tiurai',
-'sep'           => 'nō tetepa',
-'oct'           => 'nō ’ātopa',
-'nov'           => 'nō novema',
-'dec'           => 'nō tītema',
-
-'about'      => 'Nō',
-'article'    => 'Parau pāpa’i',
+'october-gen' => 'nō ’ātopa',
+'november-gen' => 'nō novema',
+'december-gen' => 'nō tītema',
+'jan' => 'nō tēnuare',
+'feb' => 'nō fepuare',
+'mar' => 'nō māti',
+'apr' => 'nō ’ēperēra',
+'may' => 'nō mē',
+'jun' => 'nō tiunu',
+'jul' => 'nō tiurai',
+'aug' => 'nō tiurai',
+'sep' => 'nō tetepa',
+'oct' => 'nō ’ātopa',
+'nov' => 'nō novema',
+'dec' => 'nō tītema',
+
+'about' => 'Nō',
+'article' => 'Parau pāpa’i',
 'navigation' => 'Arata’i',
 
 # Cologne Blue skin
-'qbedit'         => 'Fa’ahuru ’ē',
-'qbmyoptions'    => 'ta’u ’api',
+'qbedit' => 'Fa’ahuru ’ē',
+'qbmyoptions' => 'ta’u ’api',
 'qbspecialpages' => 'Te mau ’api ta’a ’ē',
 
-'help'             => 'Tauturu',
-'search'           => 'Roromā’imi',
-'searchbutton'     => 'Roromā’imi',
-'searcharticle'    => 'Haere',
-'history_short'    => 'Parau tuatāpapa',
-'edit'             => 'Fa’ahuru ’ē',
-'delete'           => 'Fa’a’ore',
-'protect'          => 'Pāruru',
-'specialpage'      => '’Api ta’a ’ē',
-'talk'             => 'Paraparaura’a',
+'help' => 'Tauturu',
+'search' => 'Roromā’imi',
+'searchbutton' => 'Roromā’imi',
+'searcharticle' => 'Haere',
+'history_short' => 'Parau tuatāpapa',
+'edit' => 'Fa’ahuru ’ē',
+'delete' => 'Fa’a’ore',
+'protect' => 'Pāruru',
+'specialpage' => '’Api ta’a ’ē',
+'talk' => 'Paraparaura’a',
 'jumptonavigation' => 'arata’i',
-'jumptosearch'     => 'haere',
+'jumptosearch' => 'haere',
 
 # 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'            => 'Nō {{SITENAME}}',
-'aboutpage'            => 'Project:Nō',
-'edithelp'             => 'Tauturu',
-'mainpage'             => 'Fa’ari’ira’a',
+'aboutsite' => 'Nō {{SITENAME}}',
+'aboutpage' => 'Project:Nō',
+'edithelp' => 'Tauturu',
+'mainpage' => 'Fa’ari’ira’a',
 'mainpage-description' => 'Fa’ari’ira’a',
-'portal'               => 'Fare auhoa',
+'portal' => 'Fare auhoa',
 
-'newmessageslink'     => 'Te mau poro’i ’āpī',
+'newmessageslink' => 'Te mau poro’i ’āpī',
 'newmessagesdifflink' => 'fa’ahuru-’ē-ra’a hope’a',
-'editsection'         => 'fa’ahuru ’ē',
-'editold'             => 'fa’ahuru ’ē',
+'editsection' => 'fa’ahuru ’ē',
+'editold' => 'fa’ahuru ’ē',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Parau pāpa’i',
-'nstab-user'      => 'Ta’ata',
-'nstab-special'   => 'Ta’a ’ē',
-'nstab-image'     => 'Hōho’a',
+'nstab-main' => 'Parau pāpa’i',
+'nstab-user' => 'Ta’ata',
+'nstab-special' => 'Ta’a ’ē',
+'nstab-image' => 'Hōho’a',
 'nstab-mediawiki' => 'Poro’i',
-'nstab-template'  => 'Hōho’a fāito',
-'nstab-help'      => 'Tauturu',
-'nstab-category'  => 'Huru',
+'nstab-template' => 'Hōho’a fāito',
+'nstab-help' => 'Tauturu',
+'nstab-category' => 'Huru',
 
 # Revision feed
 'history-feed-title' => 'Parau tuatāpapa',
@@ -119,11 +119,11 @@ $messages = array(
 'powersearch' => 'Roromā’imi',
 
 # Preferences page
-'prefs-rc'     => 'Te mau fa’ahuru-’ē-ra’a ’āpī',
-'prefs-files'  => 'Te mau putu’ite',
-'youremail'    => 'Tā’u ’āfata rata uira',
+'prefs-rc' => 'Te mau fa’ahuru-’ē-ra’a ’āpī',
+'prefs-files' => 'Te mau putu’ite',
+'youremail' => 'Tā’u ’āfata rata uira',
 'yourlanguage' => 'Te reo:',
-'email'        => '’Imere',
+'email' => '’Imere',
 
 # Recent changes
 'recentchanges' => 'Te mau fa’ahuru-’ē-ra’a ’āpī',
@@ -133,7 +133,7 @@ $messages = array(
 
 # File description page
 'file-anchor-link' => 'Hōho’a',
-'filehist-user'    => 'Ta’ata',
+'filehist-user' => 'Ta’ata',
 
 # Random page
 'randompage' => '’Api mā’iti-haere-noa',
index a759d0d..92291c9 100644 (file)
@@ -542,8 +542,6 @@ Please check if you want to create/edit this page.',
 'search-section' => '(«$1» деп салбыр)',
 'search-suggest' => 'Силер «$1» деп бодадыңар чадавас',
 'search-interwiki-more' => '(артык)',
-'search-mwsuggest-enabled' => 'саналдар',
-'search-mwsuggest-disabled' => 'саналдар чок',
 'searcheverything-enable' => 'Шупту аттар делгемнеринден дилээри',
 'searchrelated' => 'холбаалыг',
 'searchall' => 'шупту',
index 1c5a17c..74e0783 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Udmurt (Удмурт)
+/** Udmurt (удмурт)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -44,215 +44,215 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Линкъёс ултӥз гожен сызоно',
-'tog-hideminor'               => 'Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны',
-'tog-hidepatrolled'           => 'Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны',
-'tog-newpageshidepatrolled'   => 'Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны',
-'tog-extendwatchlist'         => 'Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)',
-'tog-usenewrc'                => 'Выль тупатонъёслэн списоксэс умояллям сямен возьматыны (JavsScript кулэ)',
-'tog-numberheadings'          => 'Заголовокъёсты автоматически нумеровать карыны',
-'tog-showtoolbar'             => 'Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)',
-'tog-editondblclick'          => 'Бамъёсты шырлэн валтӥсь зӥбонэз кык пол ӝог зӥбиськыкуз тупатыны (JavaScript кулэ)',
-'tog-editsection'             => 'Котькуд секциез [тапатоно] чӧлсконэн возьматыны',
+'tog-underline' => 'Линкъёс ултӥз гожен сызоно',
+'tog-hideminor' => 'Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны',
+'tog-hidepatrolled' => 'Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны',
+'tog-newpageshidepatrolled' => 'Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны',
+'tog-extendwatchlist' => 'Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)',
+'tog-usenewrc' => 'Выль тупатонъёслэн списоксэс умояллям сямен возьматыны (JavsScript кулэ)',
+'tog-numberheadings' => 'Заголовокъёсты автоматически нумеровать карыны',
+'tog-showtoolbar' => 'Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)',
+'tog-editondblclick' => 'Бамъёсты шырлэн валтӥсь зӥбонэз кык пол ӝог зӥбиськыкуз тупатыны (JavaScript кулэ)',
+'tog-editsection' => 'Котькуд секциез [тапатоно] чӧлсконэн возьматыны',
 'tog-editsectiononrightclick' => 'Cекциосты шырлэн бур кнопкаез заголовок вылын зӥбиськыкуз тупатыны (JavaScript кулэ)',
-'tog-showtoc'                 => 'Пуштросэз возьматоно (2-лэсь трос заголовокъем бамъёс понна)',
-'tog-rememberpassword'        => 'Мынам пыроннимме та браузерлэн тодаз возьыны ($1 яке $1-лэсь ӧжытгес нунал ӵоже гинэ)',
-'tog-watchcreations'          => 'Бамъёсты, кудъёстэс мон кылдытӥсько, мынам чаклкан списокам пыртыны',
-'tog-watchdefault'            => 'Бамъёсты, кудъёстэс мон тупатӥсько, мынам чаклкан списокам пыртыны',
-'tog-watchmoves'              => 'Бамъёсты, кудъёстэс мон мукет интые выжтӥсько, мынам чаклкан списокам пыртыны',
-'tog-watchdeletion'           => 'Бамъёсты, кудъёстэс мон ӵушисько, мынам чаклкан списоке пыртыны',
-'tog-minordefault'            => 'Вань воштонъёсты «ичи воштон» пусэн пусйыны',
-'tog-previewontop'            => 'Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны',
-'tog-previewonfirst'          => 'Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны',
-
-'underline-always'  => 'Котьку',
-'underline-never'   => 'Ноку',
+'tog-showtoc' => 'Пуштросэз возьматоно (2-лэсь трос заголовокъем бамъёс понна)',
+'tog-rememberpassword' => 'Мынам пыроннимме та браузерлэн тодаз возьыны ($1 яке $1-лэсь ӧжытгес нунал ӵоже гинэ)',
+'tog-watchcreations' => 'Бамъёсты, кудъёстэс мон кылдытӥсько, мынам чаклкан списокам пыртыны',
+'tog-watchdefault' => 'Бамъёсты, кудъёстэс мон тупатӥсько, мынам чаклкан списокам пыртыны',
+'tog-watchmoves' => 'Бамъёсты, кудъёстэс мон мукет интые выжтӥсько, мынам чаклкан списокам пыртыны',
+'tog-watchdeletion' => 'Бамъёсты, кудъёстэс мон ӵушисько, мынам чаклкан списоке пыртыны',
+'tog-minordefault' => 'Вань воштонъёсты «ичи воштон» пусэн пусйыны',
+'tog-previewontop' => 'Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны',
+'tog-previewonfirst' => 'Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны',
+
+'underline-always' => 'Котьку',
+'underline-never' => 'Ноку',
 'underline-default' => 'Браузерысь настройкаосты уже кутоно',
 
 # Font style option in Special:Preferences
-'editfont-style'     => 'Тупатон бусыысь шрифтлэн стилез',
-'editfont-default'   => 'Браузерлэн настройкаосысьтыз шрифтэз уже кутоно',
+'editfont-style' => 'Тупатон бусыысь шрифтлэн стилез',
+'editfont-default' => 'Браузерлэн настройкаосысьтыз шрифтэз уже кутоно',
 'editfont-monospace' => 'Огпасьтала пусъёсын шрифт',
 'editfont-sansserif' => 'Засечкатэк шрифт',
-'editfont-serif'     => 'Засечкаен шрифт',
+'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'    => 'гудырикошконэ',
+'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'           => 'тст',
+'october-gen' => 'коньывуонэ',
+'november-gen' => 'шуркынмонэ',
+'december-gen' => 'толсурэ',
+'jan' => 'тшт',
+'feb' => 'тпт',
+'mar' => 'южт',
+'apr' => 'ошт',
+'may' => 'южт',
+'jun' => 'ивт',
+'jul' => 'пст',
+'aug' => 'гкт',
+'sep' => 'кст',
+'oct' => 'квт',
+'nov' => 'шкт',
+'dec' => 'тст',
 
 # Categories related messages
-'pagecategories'                 => '$1 категория',
-'category_header'                => '«$1» категориысь бамъёс',
-'subcategories'                  => 'Подкатегориос',
-'category-media-header'          => '«$1» категориысь файлъёс',
-'category-empty'                 => "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
-'hidden-categories'              => '{{PLURAL:$1|Ватэм категория|Ватэм категориос}}',
-'hidden-category-category'       => 'Ватэм категориос',
-'category-subcat-count'          => '{{PLURAL:$2|Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}',
-'category-subcat-count-limited'  => 'Со категориын $1 подкатегория.',
-'category-article-count'         => '{{PLURAL:$2|Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}',
+'pagecategories' => '$1 категория',
+'category_header' => '«$1» категориысь бамъёс',
+'subcategories' => 'Подкатегориос',
+'category-media-header' => '«$1» категориысь файлъёс',
+'category-empty' => "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
+'hidden-categories' => '{{PLURAL:$1|Ватэм категория|Ватэм категориос}}',
+'hidden-category-category' => 'Ватэм категориос',
+'category-subcat-count' => '{{PLURAL:$2|Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}',
+'category-subcat-count-limited' => 'Со категориын $1 подкатегория.',
+'category-article-count' => '{{PLURAL:$2|Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}',
 'category-article-count-limited' => 'Со категориын $1 бам.',
-'category-file-count'            => '{{PLURAL:$2|Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}',
-'category-file-count-limited'    => 'Со категориын $1 файл.',
-'listingcontinuesabbrev'         => 'азьлань',
-'index-category'                 => 'Индексировать кароно бамъёс',
-'noindex-category'               => 'Индексировать каронтэм бамъёс',
+'category-file-count' => '{{PLURAL:$2|Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}',
+'category-file-count-limited' => 'Со категориын $1 файл.',
+'listingcontinuesabbrev' => 'азьлань',
+'index-category' => 'Индексировать кароно бамъёс',
+'noindex-category' => 'Индексировать каронтэм бамъёс',
 
 'linkprefix' => '/^(.*?)(„|«)$/sDu',
 
-'about'      => 'Та сярысь',
-'article'    => 'Статья',
-'mypage'     => 'Ас бам',
-'mytalk'     => 'викиавтор сярысь вераськон',
-'anontalk'   => 'Со IP-адрес сярысь вераськон',
+'about' => 'Та сярысь',
+'article' => 'Статья',
+'mypage' => 'Ас бам',
+'mytalk' => 'викиавтор сярысь вераськон',
+'anontalk' => 'Со IP-адрес сярысь вераськон',
 'navigation' => 'Навигация',
 
 # Cologne Blue skin
-'qbpageoptions'  => 'Бамлэн настройкаосыз',
+'qbpageoptions' => 'Бамлэн настройкаосыз',
 'qbspecialpages' => 'Ваньмыз панельёс',
-'faq'            => 'Юан-веран',
-'faqpage'        => 'Project:Юан-веран',
+'faq' => 'Юан-веран',
+'faqpage' => 'Project:Юан-веран',
 
 # Vector skin
 'vector-action-addsection' => 'Выль темаез ватсано',
-'vector-action-delete'     => 'Быдтоно',
-'vector-action-move'       => 'Мукет интые выжтыны',
-'vector-action-protect'    => 'Утьыны',
-'vector-view-create'       => 'Кылдытоно',
-'vector-view-edit'         => 'Тупатоно',
-'vector-view-history'      => 'История',
-'vector-view-view'         => 'Лыдӟоно',
-'vector-view-viewsource'   => 'Кодзэ учкыны',
-
-'errorpagetitle'   => 'Янгыш',
-'tagline'          => '{{SITENAME}}-ысь материал',
-'help'             => 'Валэктонъёс',
-'search'           => 'Утчан',
-'searchbutton'     => 'Утчано',
-'searcharticle'    => 'Мыноно',
-'history'          => 'Бамлэн историез',
-'history_short'    => 'история',
+'vector-action-delete' => 'Быдтоно',
+'vector-action-move' => 'Мукет интые выжтыны',
+'vector-action-protect' => 'Утьыны',
+'vector-view-create' => 'Кылдытоно',
+'vector-view-edit' => 'Тупатоно',
+'vector-view-history' => 'История',
+'vector-view-view' => 'Лыдӟоно',
+'vector-view-viewsource' => 'Кодзэ учкыны',
+
+'errorpagetitle' => 'Янгыш',
+'tagline' => '{{SITENAME}}-ысь материал',
+'help' => 'Валэктонъёс',
+'search' => 'Утчан',
+'searchbutton' => 'Утчано',
+'searcharticle' => 'Мыноно',
+'history' => 'Бамлэн историез',
+'history_short' => 'история',
 'printableversion' => 'Печатламон версия',
-'permalink'        => 'Ӵапак та версиезлы линк',
-'print'            => 'Печатлано',
-'edit'             => 'тупатыны',
-'delete'           => 'Быдтыны',
-'protect'          => 'Утьыны',
+'permalink' => 'Ӵапак та версиезлы линк',
+'print' => 'Печатлано',
+'edit' => 'тупатыны',
+'delete' => 'Быдтыны',
+'protect' => 'Утьыны',
 'talkpagelinktext' => 'Вераськон',
-'talk'             => 'Вераськон',
-'toolbox'          => 'Инструментъёс',
+'talk' => 'Вераськон',
+'toolbox' => 'Инструментъёс',
 'jumptonavigation' => 'навигация',
-'jumptosearch'     => 'утчан',
+'jumptosearch' => 'утчан',
 
 # 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).
-'currentevents'        => 'Выль иворъёс',
-'currentevents-url'    => 'Project:Выль иворъёс',
-'helppage'             => 'Help:Валэктон',
-'mainpage'             => 'Кутскон бам',
+'currentevents' => 'Выль иворъёс',
+'currentevents-url' => 'Project:Выль иворъёс',
+'helppage' => 'Help:Валэктон',
+'mainpage' => 'Кутскон бам',
 'mainpage-description' => 'Кутскон бам',
-'portal'               => 'Сообщество',
-'portal-url'           => 'Project:Портал сообщества',
+'portal' => 'Сообщество',
+'portal-url' => 'Project:Портал сообщества',
 
-'retrievedfrom'   => '«$1»-лэсь басьтэмын',
-'editsection'     => 'тупатыны',
+'retrievedfrom' => '«$1»-лэсь басьтэмын',
+'editsection' => 'тупатыны',
 'editsectionhint' => '$1 секциез тупатоно',
-'site-rss-feed'   => '$1 — RSS-лента',
-'site-atom-feed'  => '$1 — Atom-лента',
-'red-link-title'  => '$1 (со бам ӧвӧл на)',
+'site-rss-feed' => '$1 — RSS-лента',
+'site-atom-feed' => '$1 — Atom-лента',
+'red-link-title' => '$1 (со бам ӧвӧл на)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-user'      => 'Викиавтор',
+'nstab-user' => 'Викиавтор',
 'nstab-mediawiki' => 'Ивортон',
 
 # General errors
 'viewsource' => 'Кодзэ учкыны',
 
 # Login and logout pages
-'login'                   => 'Википедие пырон',
+'login' => 'Википедие пырон',
 'nav-login-createaccount' => 'Нимдэс вераны / Регистрациез ортчытыны',
-'userlogin'               => 'Регистрациез ортчытыны яке Википедие пырыны',
-'logout'                  => 'Кошкыны',
-'userlogout'              => 'Кошкыны',
-'createaccount'           => 'выль вики-авторлэн регистрациез',
+'userlogin' => 'Регистрациез ортчытыны яке Википедие пырыны',
+'logout' => 'Кошкыны',
+'userlogout' => 'Кошкыны',
+'createaccount' => 'выль вики-авторлэн регистрациез',
 
 # Edit pages
-'summary'       => 'Мар но малы тупатэмын? (вакчияк):',
-'minoredit'     => 'Ичи воштон',
+'summary' => 'Мар но малы тупатэмын? (вакчияк):',
+'minoredit' => 'Ичи воштон',
 'noarticletext' => "В настоящий момент текст на данной странице отсутствует.
 Вы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],
 или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
 
 # Revision deletion
-'revdelete-radio-set'   => 'Бен',
+'revdelete-radio-set' => 'Бен',
 'revdelete-radio-unset' => 'Ӧвӧл',
 
 # Search results
-'searchresults'      => 'Шедьтэмын',
-'searchresulttext'   => 'Проектлэн бамъёстӥз утчан сярысь тыро-быдогес тодэмды потӥз ке, учке [[{{MediaWiki:Helppage}}|«Юан-веран» люкетэз]].',
-'searchhelp-url'     => 'Help:Валэктон',
+'searchresults' => 'Шедьтэмын',
+'searchresulttext' => 'Проектлэн бамъёстӥз утчан сярысь тыро-быдогес тодэмды потӥз ке, учке [[{{MediaWiki:Helppage}}|«Юан-веран» люкетэз]].',
+'searchhelp-url' => 'Help:Валэктон',
 'search-result-size' => '$1 кыл({{PLURAL:$2|1 word|$2 words}})',
 
 # Preferences page
-'preferences'     => 'настройкаос',
-'mypreferences'   => 'Настройкаос',
+'preferences' => 'настройкаос',
+'mypreferences' => 'Настройкаос',
 'prefs-watchlist' => 'Чаклан список',
 
 # Recent changes
 'recentchanges' => 'Выль тупатонъёс',
-'hist'          => 'история',
+'hist' => 'история',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Герӟаськем тупатонъёс',
-'recentchangeslinked-feed'    => 'Герӟаськем тупатонъёс',
+'recentchangeslinked' => 'Герӟаськем тупатонъёс',
+'recentchangeslinked-feed' => 'Герӟаськем тупатонъёс',
 'recentchangeslinked-toolbox' => 'Герӟаськем тупатонъёс',
 
 # Upload
@@ -266,16 +266,16 @@ $messages = array(
 
 # Miscellaneous special pages
 'nbytes' => '$1 байт',
-'move'   => 'Мукет интые выжтыны',
+'move' => 'Мукет интые выжтыны',
 
 # E-mail user
 'emailmessage' => 'Ивортон:',
 
 # Watchlist
-'watchlist'   => 'Чаклано статьяос',
+'watchlist' => 'Чаклано статьяос',
 'mywatchlist' => 'Чаклан список',
-'watch'       => 'Чаклано',
-'unwatch'     => 'Чакламысь дугдыны',
+'watch' => 'Чаклано',
+'unwatch' => 'Чакламысь дугдыны',
 
 # Contributions
 'mycontris' => 'Мынам гожтэмъёсы',
@@ -284,23 +284,23 @@ $messages = array(
 'whatlinkshere' => 'Татчы линкъёс',
 
 # Move page
-'movearticle'     => 'Статьяез мукет интые выжтыны',
-'move-watch'      => 'Та бамез чаклан списоке пыртыны',
+'movearticle' => 'Статьяез мукет интые выжтыны',
+'move-watch' => 'Та бамез чаклан списоке пыртыны',
 'delete_and_move' => 'Быдтыны но мукет интые выжтыны',
 
 # Namespace 8 related
 'allmessagesname' => 'Ивортон',
 
 # Tooltip help for the actions
-'tooltip-ca-talk'                => 'Бамлэн контентэз сярысь вераськон',
-'tooltip-search'                 => 'Утчано {{SITENAME}}',
-'tooltip-n-mainpage'             => 'Кутскон баме мыноно',
+'tooltip-ca-talk' => 'Бамлэн контентэз сярысь вераськон',
+'tooltip-search' => 'Утчано {{SITENAME}}',
+'tooltip-n-mainpage' => 'Кутскон баме мыноно',
 'tooltip-n-mainpage-description' => 'Кутскон баме мыноно',
-'tooltip-n-portal'               => 'Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно',
-'tooltip-n-recentchanges'        => 'Берпуметӥ тупатонъёслэн списоксы',
-'tooltip-n-randompage'           => 'Олокыӵе бамез учконо',
-'tooltip-t-whatlinkshere'        => 'Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань',
-'tooltip-t-specialpages'         => 'Специальной бамъёслэн списоксы',
+'tooltip-n-portal' => 'Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно',
+'tooltip-n-recentchanges' => 'Берпуметӥ тупатонъёслэн списоксы',
+'tooltip-n-randompage' => 'Олокыӵе бамез учконо',
+'tooltip-t-whatlinkshere' => 'Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань',
+'tooltip-t-specialpages' => 'Специальной бамъёслэн списоксы',
 
 # Special:SpecialPages
 'specialpages' => 'Ваньмыз панельёс',
index bf2740e..44df07a 100644 (file)
@@ -468,7 +468,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''ھازىر تىزىمدىن چىقتىڭىز.'''
 
-سىز نامسىز ھالەتتە {{SITENAME}} نى ئىشلىتەلەيسىز ياكى ئوخشاش ۋە ياكى ئوخشاش بولمىغان ئىشلەتكۈچى سالاھىيىتىدە [[Special:UserLogin|تىزىمغا كىر]]ەلەيسىز.
+سىز نامسىز ھالەتتە {{SITENAME}} نى ئىشلىتەلەيسىز ياكى ئوخشاش ۋە ياكى ئوخشاش بولمىغان ئىشلەتكۈچى سالاھىيىتىدە <span class='plainlinks'>[$1 تىزىمغا كىر]</span>ەلەيسىز.
 دىققەت، بەزى بەتلەر توركۆرگۈنىڭ غەملىكى تازىلانمىغۇچە يەنىلا سىزنى تىزىمغا كىرگەن ھالەتتە كۆرسىتىشى مۇمكىن.",
 'welcomecreation' => '==  $1! خۇش كەپسىز ==
 
@@ -1113,8 +1113,6 @@ $1",
 'search-interwiki-caption' => 'ھەمشىرە قۇرۇلۇشلار',
 'search-interwiki-default' => '$1 نەتىجە:',
 'search-interwiki-more' => '(تېخىمۇ كۆپ)',
-'search-mwsuggest-enabled' => 'تەكلىپ بار',
-'search-mwsuggest-disabled' => 'تەكلىپ يوق',
 'search-relatedarticle' => 'ئالاقىدار',
 'mwsuggest-disable' => 'AJAX تەكلىپىنى چەكلە',
 'searcheverything-enable' => 'ھەممە ئات بوشلۇقىدىن ئىزدە',
index 2be90f1..1653977 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Uyghur (Latin script) (Uyghurche)
+/** Uyghur (Latin script) (Uyghurche)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
 
 $messages = array(
 # Dates
-'sunday'        => 'Yekshenbe',
-'monday'        => 'Düshenbe',
-'tuesday'       => 'Seyshenbe',
-'wednesday'     => 'Charshenbe',
-'thursday'      => 'Peyshenbe',
-'friday'        => 'Jüme',
-'saturday'      => 'Shenbe',
-'january'       => 'Yanwar',
-'february'      => 'Féwral',
-'march'         => 'Mart',
-'april'         => 'Aprél',
-'may_long'      => 'May',
-'june'          => 'Iyun',
-'july'          => 'Iyul',
-'august'        => 'Awghust',
-'september'     => 'Séntebr',
-'october'       => 'Öktebir',
-'november'      => 'Noyabr',
-'december'      => 'Dékabr',
-'may-gen'       => 'May',
+'sunday' => 'Yekshenbe',
+'monday' => 'Düshenbe',
+'tuesday' => 'Seyshenbe',
+'wednesday' => 'Charshenbe',
+'thursday' => 'Peyshenbe',
+'friday' => 'Jüme',
+'saturday' => 'Shenbe',
+'january' => 'Yanwar',
+'february' => 'Féwral',
+'march' => 'Mart',
+'april' => 'Aprél',
+'may_long' => 'May',
+'june' => 'Iyun',
+'july' => 'Iyul',
+'august' => 'Awghust',
+'september' => 'Séntebr',
+'october' => 'Öktebir',
+'november' => 'Noyabr',
+'december' => 'Dékabr',
+'may-gen' => 'May',
 'september-gen' => 'Séntebr',
-'october-gen'   => 'Öktebir',
-'november-gen'  => 'Noyabr',
-'december-gen'  => 'Dékabr',
-'jan'           => '1-Ay',
-'feb'           => '2-Ay',
-'mar'           => '3-Ay',
-'apr'           => '4-Ay',
-'may'           => 'May',
-'jun'           => '6-Ay',
-'jul'           => '7-Ay',
-'aug'           => '8-Ay',
-'sep'           => '9-Ay',
-'oct'           => '10-Ay',
-'nov'           => '11-Ay',
-'dec'           => '12-Ay',
-
-'mypage'     => 'Mening beti',
+'october-gen' => 'Öktebir',
+'november-gen' => 'Noyabr',
+'december-gen' => 'Dékabr',
+'jan' => '1-Ay',
+'feb' => '2-Ay',
+'mar' => '3-Ay',
+'apr' => '4-Ay',
+'may' => 'May',
+'jun' => '6-Ay',
+'jul' => '7-Ay',
+'aug' => '8-Ay',
+'sep' => '9-Ay',
+'oct' => '10-Ay',
+'nov' => '11-Ay',
+'dec' => '12-Ay',
+
+'mypage' => 'Mening beti',
 'navigation' => 'Körüsh',
 
 # Cologne Blue skin
-'qbedit'         => 'Uzgartish',
+'qbedit' => 'Uzgartish',
 'qbspecialpages' => 'Alahida tor batleri',
 
-'help'             => 'Yardem',
-'search'           => 'Izdash',
-'searchbutton'     => 'Izdash',
-'go'               => 'Kuchush',
-'searcharticle'    => 'Kuchush',
-'history_short'    => 'Tarih',
+'help' => 'Yardem',
+'search' => 'Izdash',
+'searchbutton' => 'Izdash',
+'go' => 'Kuchush',
+'searcharticle' => 'Kuchush',
+'history_short' => 'Tarih',
 'printableversion' => 'Basma Nushisi',
-'permalink'        => 'Menggülük bet',
-'edit'             => 'Uzgartish',
-'delete'           => 'Yukhutush',
-'protect'          => 'Koghdash',
+'permalink' => 'Menggülük bet',
+'edit' => 'Uzgartish',
+'delete' => 'Yukhutush',
+'protect' => 'Koghdash',
 'talkpagelinktext' => 'Monazire',
-'talk'             => 'Monazire',
-'toolbox'          => 'Qural sanduqlari',
-'otherlanguages'   => 'Bashqa tillarda',
-'jumptosearch'     => 'izdash',
+'talk' => 'Monazire',
+'toolbox' => 'Qural sanduqlari',
+'otherlanguages' => 'Bashqa tillarda',
+'jumptosearch' => 'izdash',
 
 # 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).
-'currentevents'        => 'Hazirqi weqeler',
-'edithelp'             => 'Uzgartish yardemi',
-'mainpage'             => 'Bash Bet',
+'currentevents' => 'Hazirqi weqeler',
+'edithelp' => 'Uzgartish yardemi',
+'mainpage' => 'Bash Bet',
 'mainpage-description' => 'Bash Bet',
-'portal'               => 'Tor Jemiyiti',
+'portal' => 'Tor Jemiyiti',
 
-'ok'             => 'MAQUL',
-'editsection'    => 'uzgartish',
-'editold'        => 'uzgartish',
+'ok' => 'MAQUL',
+'editsection' => 'uzgartish',
+'editold' => 'uzgartish',
 'red-link-title' => '$1 (bet yoq)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'    => 'Bet',
-'nstab-user'    => 'Ishletkuqi tor beti',
+'nstab-main' => 'Bet',
+'nstab-user' => 'Ishletkuqi tor beti',
 'nstab-special' => 'Alahide betleri',
-'nstab-help'    => 'Yardem beti',
+'nstab-help' => 'Yardem beti',
 
 # Login and logout pages
-'yourname'           => 'Ishletkuqi ismi:',
-'yourpassword'       => 'Achkuch:',
-'yourpasswordagain'  => 'Achkuchni khayta besing:',
-'login'              => 'Kirish',
-'logout'             => 'Chiqish',
-'userlogout'         => 'Chikish',
-'gotaccountlink'     => 'Kirish',
+'yourname' => 'Ishletkuqi ismi:',
+'yourpassword' => 'Achkuch:',
+'yourpasswordagain' => 'Achkuchni khayta besing:',
+'login' => 'Kirish',
+'logout' => 'Chiqish',
+'userlogout' => 'Chikish',
+'gotaccountlink' => 'Kirish',
 'loginlanguagelabel' => 'Til: $1',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Ishletkuchi ismi:',
 
 # Edit pages
-'summary'      => 'Hulasa:',
-'minoredit'    => 'Bu Kichik Uzgartish',
-'watchthis'    => 'Bu Batka Kharang',
-'savearticle'  => 'Betni saqlang',
-'showpreview'  => 'Aldinala kurux',
-'showdiff'     => 'Uzgurushlerni kursutung',
+'summary' => 'Hulasa:',
+'minoredit' => 'Bu Kichik Uzgartish',
+'watchthis' => 'Bu Batka Kharang',
+'savearticle' => 'Betni saqlang',
+'showpreview' => 'Aldinala kurux',
+'showdiff' => 'Uzgurushlerni kursutung',
 'loginreqlink' => 'kirish',
-'newarticle'   => '(Yéngi)',
+'newarticle' => '(Yéngi)',
 
 # Search results
-'prevn'       => 'aldinqi {{PLURAL:$1|$1}}',
-'nextn'       => 'kéyinki {{PLURAL:$1|$1}}',
+'prevn' => 'aldinqi {{PLURAL:$1|$1}}',
+'nextn' => 'kéyinki {{PLURAL:$1|$1}}',
 'powersearch' => 'Izdash',
 
 # Preferences page
-'prefs-rc'              => 'Yengi uzgurush',
-'searchresultshead'     => 'Izdash',
-'timezoneregion-asia'   => 'Asiya',
+'prefs-rc' => 'Yengi uzgurush',
+'searchresultshead' => 'Izdash',
+'timezoneregion-asia' => 'Asiya',
 'timezoneregion-europe' => 'Yawropa',
-'youremail'             => 'Élxet:',
-'username'              => 'Ishletkuqi ismi:',
-'yourlanguage'          => 'Til:',
-'email'                 => 'Élxet:',
+'youremail' => 'Élxet:',
+'username' => 'Ishletkuqi ismi:',
+'yourlanguage' => 'Til:',
+'email' => 'Élxet:',
 
 # Recent changes
 'recentchanges' => 'Yéngi özgirish',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Yéqinqi özgirishler',
-'recentchangeslinked-feed'    => 'Yéqinqi özgirishler',
+'recentchangeslinked' => 'Yéqinqi özgirishler',
+'recentchangeslinked-feed' => 'Yéqinqi özgirishler',
 'recentchangeslinked-toolbox' => 'Yéqinqi özgirishler',
-'recentchangeslinked-page'    => 'Betning ismi:',
+'recentchangeslinked-page' => 'Betning ismi:',
 
 # Upload
-'upload'          => 'Yéngi höjjet kirgüzush',
-'uploadbtn'       => 'Yengi Hujjat Kirguzush',
-'filedesc'        => 'Hulasa',
+'upload' => 'Yéngi höjjet kirgüzush',
+'uploadbtn' => 'Yengi Hujjat Kirguzush',
+'filedesc' => 'Hulasa',
 'watchthisupload' => 'Bu Batka Kharang',
 
 # File description page
@@ -155,29 +155,29 @@ $messages = array(
 # Random page
 'randompage' => 'Halighan Tor Beti',
 
-'brokenredirects-edit'   => 'uzgartish',
+'brokenredirects-edit' => 'uzgartish',
 'brokenredirects-delete' => 'yukhutush',
 
 # Miscellaneous special pages
-'newpages'          => 'Yéngi betler',
+'newpages' => 'Yéngi betler',
 'newpages-username' => 'Ishletkuqi ismi:',
-'move'              => 'Yotkash',
-'movethispage'      => 'Bu batni yotkang',
+'move' => 'Yotkash',
+'movethispage' => 'Bu batni yotkang',
 
 # Book sources
 'booksources-go' => 'Kuchush',
 
 # Special:AllPages
-'nextpage'       => 'Kéyinki bet ($1)',
-'prevpage'       => 'Aldinqi bet ($1)',
+'nextpage' => 'Kéyinki bet ($1)',
+'prevpage' => 'Aldinqi bet ($1)',
 'allpagessubmit' => 'Kuchush',
 
 # Special:LinkSearch
 'linksearch-ok' => 'Izdash',
 
 # Watchlist
-'watchlist'     => 'Men kharawatkhan tor betleri',
-'watch'         => 'Karang',
+'watchlist' => 'Men kharawatkhan tor betleri',
+'watch' => 'Karang',
 'watchthispage' => 'Bu Batka Kharang',
 
 # Restrictions (nouns)
@@ -187,11 +187,11 @@ $messages = array(
 # Undelete
 'undelete-search-submit' => 'Izdash',
 
-'sp-contributions-talk'   => 'Monazire',
+'sp-contributions-talk' => 'Monazire',
 'sp-contributions-submit' => 'Izdash',
 
 # What links here
-'whatlinkshere'      => 'Bashqa tor betler',
+'whatlinkshere' => 'Bashqa tor betler',
 'whatlinkshere-page' => 'Bet:',
 
 # Block/unblock
@@ -199,7 +199,7 @@ $messages = array(
 
 # Move page
 'movearticle' => 'Yotkigen beti:',
-'move-watch'  => 'Bu Batka Kharang',
+'move-watch' => 'Bu Batka Kharang',
 'movepagebtn' => 'Yotkigen beti',
 
 # Namespace 8 related
@@ -207,9 +207,9 @@ $messages = array(
 
 # Tooltip help for the actions
 'tooltip-pt-logout' => 'Chikish',
-'tooltip-ca-move'   => 'Bu batni yotkang',
-'tooltip-search'    => 'Izdash {{SITENAME}}',
-'tooltip-p-logo'    => 'Bash Bet',
+'tooltip-ca-move' => 'Bu batni yotkang',
+'tooltip-search' => 'Izdash {{SITENAME}}',
+'tooltip-p-logo' => 'Bash Bet',
 
 # Special:NewFiles
 'ilsubmit' => 'Izdash',
@@ -220,13 +220,13 @@ $messages = array(
 # Multipage image navigation
 'imgmultipageprev' => '← aldinqi bet',
 'imgmultipagenext' => 'kéyinki bet →',
-'imgmultigo'       => 'Kuchush!',
+'imgmultigo' => 'Kuchush!',
 
 # Table pager
-'table_pager_next'         => 'Kéyinki bet',
-'table_pager_prev'         => 'Aldinqi bet',
-'table_pager_first'        => 'Birinchi bet',
-'table_pager_last'         => 'Eng axirqi bet',
+'table_pager_next' => 'Kéyinki bet',
+'table_pager_prev' => 'Aldinqi bet',
+'table_pager_first' => 'Birinchi bet',
+'table_pager_last' => 'Eng axirqi bet',
 'table_pager_limit_submit' => 'Kuchush',
 
 # Special:SpecialPages
index 651f21a..e02c793 100644 (file)
@@ -102,7 +102,7 @@ $bookstoreList = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'Активні_учасники' ),
+       'Activeusers'               => array( 'Активні_дописувачі' ),
        'Allmessages'               => array( 'Системні_повідомлення' ),
        'Allpages'                  => array( 'Усі_сторінки' ),
        'Ancientpages'              => array( 'Давні_сторінки' ),
@@ -123,14 +123,14 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'Вилучений_внесок' ),
        'Disambiguations'           => array( 'Неоднозначні_посилання' ),
        'DoubleRedirects'           => array( 'Подвійні_перенаправлення' ),
-       'EditWatchlist'             => array( 'Ð\9fÑ\80авити_список_спостереження' ),
+       'EditWatchlist'             => array( 'РедагÑ\83вати_список_спостереження' ),
        'Emailuser'                 => array( 'Лист_користувачеві' ),
        'Export'                    => array( 'Експорт' ),
-       'Fewestrevisions'           => array( 'Ð\9dайменÑ\88Ñ\96_пеÑ\80евÑ\96Ñ\80ки' ),
+       'Fewestrevisions'           => array( 'Ð\9dайменÑ\88Ñ\80едагованÑ\96' ),
        'FileDuplicateSearch'       => array( 'Пошук_дублікатів_файлів' ),
        'Filepath'                  => array( 'Шлях_до_файлу' ),
        'Import'                    => array( 'Імпорт' ),
-       'Invalidateemail'           => array( 'Нечинна_e-mail' ),
+       'Invalidateemail'           => array( 'Неперевірена_email-адреса' ),
        'BlockList'                 => array( 'Список_блокувань', 'Блокування', 'Блокування_IP-адрес' ),
        'LinkSearch'                => array( 'Пошук_посилань' ),
        'Listadmins'                => array( 'Список_адміністраторів' ),
@@ -144,9 +144,9 @@ $specialPageAliases = array(
        'Lonelypages'               => array( 'Ізольовані_сторінки' ),
        'Longpages'                 => array( 'Найдовші_сторінки' ),
        'MergeHistory'              => array( 'Об\'єднання_історії' ),
-       'MIMEsearch'                => array( 'Ð\9fоÑ\88Ñ\83к_по_MIME' ),
-       'Mostcategories'            => array( 'Ð\9dайкаÑ\82егоÑ\80изовÑ\83ванÑ\96Ñ\88і' ),
-       'Mostimages'                => array( 'Найбільш_використовувані_файли' ),
+       'MIMEsearch'                => array( 'Ð\9fоÑ\88Ñ\83к_за_MIME' ),
+       'Mostcategories'            => array( 'Ð\9dайбÑ\96лÑ\8cÑ\88_каÑ\82егоÑ\80изовані' ),
+       'Mostimages'                => array( 'Найуживаніші_файли' ),
        'Mostlinkedcategories'      => array( 'Найуживаніші_категорії' ),
        'Mostlinkedtemplates'       => array( 'Найуживаніші_шаблони' ),
        'Mostrevisions'             => array( 'Найбільш_редаговані' ),
@@ -167,7 +167,7 @@ $specialPageAliases = array(
        'Randomredirect'            => array( 'Випадкове_перенаправлення' ),
        'Recentchanges'             => array( 'Нові_редагування' ),
        'Recentchangeslinked'       => array( 'Пов\'язані_редагування' ),
-       'Revisiondelete'            => array( 'Ð\9fеÑ\80евÑ\96Ñ\80иÑ\82и_видалення' ),
+       'Revisiondelete'            => array( 'Ð\92илÑ\83Ñ\87иÑ\82и_Ñ\80едагÑ\83вання' ),
        'Search'                    => array( 'Пошук' ),
        'Shortpages'                => array( 'Короткі_сторінки' ),
        'Specialpages'              => array( 'Спеціальні_сторінки' ),
@@ -181,8 +181,8 @@ $specialPageAliases = array(
        'Undelete'                  => array( 'Відновити' ),
        'Unlockdb'                  => array( 'Розблокувати_базу_даних' ),
        'Unusedcategories'          => array( 'Порожні_категорії' ),
-       'Unusedimages'              => array( 'Ð\9dевикоÑ\80иÑ\81Ñ\82овÑ\83ванÑ\96\84айли' ),
-       'Unusedtemplates'           => array( 'Ð\9dевикоÑ\80иÑ\81Ñ\82овÑ\83ванÑ\96\88аблони' ),
+       'Unusedimages'              => array( 'Невикористані_файли' ),
+       'Unusedtemplates'           => array( 'Невикористані_шаблони' ),
        'Unwatchedpages'            => array( 'Неспостережувані' ),
        'Upload'                    => array( 'Завантаження' ),
        'UploadStash'               => array( 'Приховане_завантаження' ),
@@ -200,148 +200,153 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ПЕРЕНАПРАВЛЕННЯ', '#ПЕРЕНАПР', '#перенапр', '#перенаправление', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__БЕЗ_ЗМІСТУ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__БЕЗ_ГАЛЕРЕЇ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__ОБОВ_ЗМІСТ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__ЗМІСТ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__БЕЗ_ЗАГОЛОВКУ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
-       'currentmonth'            => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ', 'ПОТОЧНИЙ_МІСЯЦЬ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'ПОТОЧНИЙ_ДЕНЬ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'ПОТОЧНИЙ_ДЕНЬ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'НАЗВА_ПОТОЧНОГО_ДНЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'ПОТОЧНИЙ_РІК', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'ПОТОЧНИЙ_ЧАС', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
-       'currenthour'             => array( '1', 'ПОТОЧНА_ГОДИНА', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
-       'localmonth'              => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'       => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
-       'localmonthabbrev'        => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_ДНЯ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'ЛОКАЛЬНИЙ_РІК', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'ЛОКАЛЬНИЙ_ЧАС', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
-       'localhour'               => array( '1', 'ЛОКАЛЬНА_ГОДИНА', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
-       'numberofpages'           => array( '1', 'КІЛЬКІСТЬ_СТОРІНОК', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'КІЛЬКІСТЬ_СТАТЕЙ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'КІЛЬКІСТЬ_ФАЙЛІВ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'КІЛЬКІСТЬ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'КІЛЬКІСТЬ_АКТИВНИХ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'КІЛЬКІСТЬ_РЕДАГУВАНЬ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'КІЛЬКІСТЬ_ПЕРЕГЛЯДІВ', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'НАЗВА_СТОРІНКИ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'НАЗВА_СТОРІНКИ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'ПРОСТІР_НАЗВ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
-       'namespacee'              => array( '1', 'ПРОСТІР_НАЗВ_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
-       'talkspace'               => array( '1', 'ПРОСТІР_ОБГОВОРЕННЯ', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
-       'talkspacee'              => array( '1', 'ПРОСТІР_ОБГОВОРЕННЯ_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
-       'subjectspace'            => array( '1', 'ПРОСТІР_СТАТЕЙ', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'subjectspacee'           => array( '1', 'ПРОСТІР_СТАТЕЙ_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'            => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
-       'fullpagenamee'           => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
-       'subpagename'             => array( '1', 'НАЗВА_ПІДСТОРІНКИ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
-       'subpagenamee'            => array( '1', 'НАЗВА_ПІДСТОРІНКИ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
-       'basepagename'            => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
-       'basepagenamee'           => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
-       'talkpagename'            => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
-       'talkpagenamee'           => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
-       'subjectpagename'         => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'        => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
-       'msg'                     => array( '0', 'ПОВІД:', 'ПОВІДОМЛЕННЯ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
-       'subst'                   => array( '0', 'ПІДСТ:', 'ПІДСТАНОВКА:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
-       'safesubst'               => array( '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'ЗАЩПОДСТ:', 'SAFESUBST:' ),
-       'msgnw'                   => array( '0', 'ПОВІД_БЕЗ_ВІКІ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'міні', 'мініатюра', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'міні=$1', 'мініатюра=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'праворуч', 'справа', 'right' ),
-       'img_left'                => array( '1', 'ліворуч', 'слева', 'left' ),
-       'img_none'                => array( '1', 'без', 'none' ),
-       'img_width'               => array( '1', '$1пкс', '$1px' ),
-       'img_center'              => array( '1', 'центр', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'обрамити', 'рамка', 'обрамить', 'framed', 'enframed', 'frame' ),
-       'img_frameless'           => array( '1', 'безрамки', 'frameless' ),
-       'img_page'                => array( '1', 'сторінка=$1', 'сторінка $1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч $1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_border'              => array( '1', 'межа', 'граница', 'border' ),
-       'img_baseline'            => array( '1', 'основа', 'основание', 'baseline' ),
-       'img_sub'                 => array( '1', 'під', 'под', 'sub' ),
-       'img_super'               => array( '1', 'над', 'super', 'sup' ),
-       'img_top'                 => array( '1', 'зверху', 'сверху', 'top' ),
-       'img_text_top'            => array( '1', 'текст-зверху', 'текст-сверху', 'text-top' ),
-       'img_middle'              => array( '1', 'посередині', 'посередине', 'middle' ),
-       'img_bottom'              => array( '1', 'знизу', 'снизу', 'bottom' ),
-       'img_text_bottom'         => array( '1', 'текст-знизу', 'текст-снизу', 'text-bottom' ),
-       'img_link'                => array( '1', 'посилання=$1', 'ссылка=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'альт=$1', 'alt=$1' ),
-       'int'                     => array( '0', 'ВНУТР:', 'INT:' ),
-       'sitename'                => array( '1', 'НАЗВА_САЙТУ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
-       'ns'                      => array( '0', 'ПН:', 'ПИ:', 'NS:' ),
-       'nse'                     => array( '0', 'ПН_2:', 'ПИК:', 'NSE:' ),
-       'localurl'                => array( '0', 'ЛОКАЛЬНА_АДРЕСА:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
-       'localurle'               => array( '0', 'ЛОКАЛЬНА_АДРЕСА_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
-       'server'                  => array( '0', 'СЕРВЕР', 'SERVER' ),
-       'servername'              => array( '0', 'НАЗВА_СЕРВЕРА', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ШЛЯХ_ДО_СКРИПТУ', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'ВІДМІНОК:', 'ПАДЕЖ:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'СТАТЬ:', 'ПОЛ:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__БЕЗ_ПЕРЕТВОРЕННЯ_ЗАГОЛОВКУ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__БЕЗ_ПЕРЕТВОРЕННЯ_ТЕКСТУ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'ПОТОЧНИЙ_ТИЖДЕНЬ', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
-       'currentdow'              => array( '1', 'ПОТОЧНИЙ_ДЕНЬ_ТИЖНЯ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
-       'localweek'               => array( '1', 'ЛОКАЛЬНИЙ_ТИЖДЕНЬ', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
-       'localdow'                => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_ТИЖНЯ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
-       'revisionid'              => array( '1', 'ІД_ВЕРСІЇ', 'ИД_ВЕРСИИ', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'ДЕНЬ_ВЕРСІЇ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'ДЕНЬ_ВЕРСІЇ_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'МІСЯЦЬ_ВЕРСІЇ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
-       'revisionyear'            => array( '1', 'РІК_ВЕРСІЇ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
-       'revisiontimestamp'       => array( '1', 'МІТКА_ЧАСУ_ВЕРСІЇ', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'            => array( '1', 'ВЕРСІЯ_КОРИСТУВАЧА', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
-       'plural'                  => array( '0', 'МНОЖИНА:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'ПОВНА_АДРЕСА:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                => array( '0', 'ПОВНА_АДРЕСА_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
-       'lcfirst'                 => array( '0', 'НР_ПЕРША:', 'ПЕРША_БУКВА_МАЛА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
-       'ucfirst'                 => array( '0', 'ВР_ПЕРША:', 'ПЕРША_БУКВА_ВЕЛИКА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
-       'lc'                      => array( '0', 'НР:', 'НИЖНІЙ_РЕГІСТР:', 'МАЛИМИ_БУКВАМИ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
-       'uc'                      => array( '0', 'ВР:', 'ВЕРХНІЙ_РЕГІСТР:', 'ВЕЛИКИМИ_БУКВАМИ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
-       'raw'                     => array( '0', 'НЕОБРОБ:', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ПОКАЗАТИ_ЗАГОЛОВОК', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
-       'rawsuffix'               => array( '1', 'Н', 'R' ),
-       'newsectionlink'          => array( '1', '__ПОСИЛАННЯ_НА_НОВИЙ_РОЗДІЛ__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__БЕЗ_ПОСИЛАННЯ_НА_НОВИЙ_РОЗДІЛ__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'ПОТОЧНА_ВЕРСІЯ', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'ЗАКОДОВАНА_АДРЕСА:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
-       'anchorencode'            => array( '0', 'КОДУВАТИ_МІТКУ', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
-       'currenttimestamp'        => array( '1', 'МІТКА_ПОТОЧНОГО_ЧАСУ', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'          => array( '1', 'МІТКА_ЛОКАЛЬНОГО_ЧАСУ', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
-       'directionmark'           => array( '1', 'НАПРЯМОК_ПИСЬМА', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
-       'language'                => array( '0', '#МОВА:', '#ЯЗЫК:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'МОВА_ВМІСТУ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'СТОРІНОК_У_ПРОСТОРІ_НАЗВ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'КІЛЬКІСТЬ_АДМІНІСТРАТОРІВ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'ФОРМАТУВАТИ_ЧИСЛО', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
-       'padleft'                 => array( '0', 'ЗАПОВНИТИ_ЛІВОРУЧ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
-       'padright'                => array( '0', 'ЗАПОВНИТИ_ПРАВОРУЧ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
-       'special'                 => array( '0', 'спеціальна', 'служебная', 'special' ),
-       'defaultsort'             => array( '1', 'СТАНДАРТНЕ_СОРТУВАННЯ:', 'СОРТУВАННЯ:', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ШЛЯХ_ДО_ФАЙЛУ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'тег', 'мітка', 'метка', 'тэг', 'tag' ),
-       'hiddencat'               => array( '1', '__ПРИХОВ_КАТ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'СТОР_В_КАТ', 'СТОР_У_КАТ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'РОЗМІР', 'РОЗМІР_СТОРІНКИ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
-       'index'                   => array( '1', '__ІНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
-       'noindex'                 => array( '1', '__БЕЗ_ІНДЕКСУ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
-       'numberingroup'           => array( '1', 'КІЛЬКІСТЬ_У_ГРУПІ', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__СТАТИЧНЕ_ПЕРЕНАПРАВЛЕННЯ__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
-       'protectionlevel'         => array( '1', 'РІВЕНЬ_ЗАХИСТУ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
-       'formatdate'              => array( '0', 'форматдати', 'форматдаты', 'formatdate', 'dateformat' ),
+       'redirect'                  => array( '0', '#ПЕРЕНАПРАВЛЕННЯ', '#ПЕРЕНАПР', '#перенапр', '#перенаправление', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗ_ЗМІСТУ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗ_ГАЛЕРЕЇ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__ОБОВ_ЗМІСТ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ЗМІСТ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКУ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
+       'currentmonth'              => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ', 'ПОТОЧНИЙ_МІСЯЦЬ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ПОТОЧНИЙ_ДЕНЬ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ПОТОЧНИЙ_ДЕНЬ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'НАЗВА_ПОТОЧНОГО_ДНЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ПОТОЧНИЙ_РІК', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ПОТОЧНИЙ_ЧАС', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ПОТОЧНА_ГОДИНА', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_2', 'МЕСТНЫЙ_МЕСЯЦ', 'МЕСТНЫЙ_МЕСЯЦ_2', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'ЛОКАЛЬНИЙ_МІСЯЦЬ_1', 'МЕСТНЫЙ_МЕСЯЦ_1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
+       'localmonthabbrev'          => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_ДНЯ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'ЛОКАЛЬНИЙ_РІК', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'ЛОКАЛЬНИЙ_ЧАС', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'ЛОКАЛЬНА_ГОДИНА', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'КІЛЬКІСТЬ_СТОРІНОК', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'КІЛЬКІСТЬ_СТАТЕЙ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'КІЛЬКІСТЬ_ФАЙЛІВ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'КІЛЬКІСТЬ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'КІЛЬКІСТЬ_АКТИВНИХ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'КІЛЬКІСТЬ_РЕДАГУВАНЬ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'КІЛЬКІСТЬ_ПЕРЕГЛЯДІВ', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'НАЗВА_СТОРІНКИ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'НАЗВА_СТОРІНКИ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ПРОСТІР_НАЗВ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ПРОСТІР_НАЗВ_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
+       'talkspace'                 => array( '1', 'ПРОСТІР_ОБГОВОРЕННЯ', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', 'ПРОСТІР_ОБГОВОРЕННЯ_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
+       'subjectspace'              => array( '1', 'ПРОСТІР_СТАТЕЙ', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'subjectspacee'             => array( '1', 'ПРОСТІР_СТАТЕЙ_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+       'fullpagename'              => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПОВНА_НАЗВА_СТОРІНКИ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'НАЗВА_ПІДСТОРІНКИ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'НАЗВА_ПІДСТОРІНКИ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+       'basepagename'              => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+       'basepagenamee'             => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'msg'                       => array( '0', 'ПОВІД:', 'ПОВІДОМЛЕННЯ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ПІДСТ:', 'ПІДСТАНОВКА:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'ЗАЩПОДСТ:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'ПОВІД_БЕЗ_ВІКІ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'міні', 'мініатюра', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'міні=$1', 'мініатюра=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'праворуч', 'справа', 'right' ),
+       'img_left'                  => array( '1', 'ліворуч', 'слева', 'left' ),
+       'img_none'                  => array( '1', 'без', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
+       'img_center'                => array( '1', 'центр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'обрамити', 'рамка', 'обрамить', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безрамки', 'frameless' ),
+       'img_page'                  => array( '1', 'сторінка=$1', 'сторінка $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч $1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'межа', 'граница', 'border' ),
+       'img_baseline'              => array( '1', 'основа', 'основание', 'baseline' ),
+       'img_sub'                   => array( '1', 'під', 'под', 'sub' ),
+       'img_super'                 => array( '1', 'над', 'super', 'sup' ),
+       'img_top'                   => array( '1', 'зверху', 'сверху', 'top' ),
+       'img_text_top'              => array( '1', 'текст-зверху', 'текст-сверху', 'text-top' ),
+       'img_middle'                => array( '1', 'посередині', 'посередине', 'middle' ),
+       'img_bottom'                => array( '1', 'знизу', 'снизу', 'bottom' ),
+       'img_text_bottom'           => array( '1', 'текст-знизу', 'текст-снизу', 'text-bottom' ),
+       'img_link'                  => array( '1', 'посилання=$1', 'ссылка=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'альт=$1', 'alt=$1' ),
+       'int'                       => array( '0', 'ВНУТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'НАЗВА_САЙТУ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ПН:', 'ПИ:', 'NS:' ),
+       'nse'                       => array( '0', 'ПН_2:', 'ПИК:', 'NSE:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЬНА_АДРЕСА:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЬНА_АДРЕСА_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЕРВЕР', 'SERVER' ),
+       'servername'                => array( '0', 'НАЗВА_СЕРВЕРА', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ШЛЯХ_ДО_СКРИПТУ', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ШЛЯХ_ДО_СТИЛЮ', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'ВІДМІНОК:', 'ПАДЕЖ:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'СТАТЬ:', 'ПОЛ:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__БЕЗ_ПЕРЕТВОРЕННЯ_ЗАГОЛОВКУ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__БЕЗ_ПЕРЕТВОРЕННЯ_ТЕКСТУ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'ПОТОЧНИЙ_ТИЖДЕНЬ', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ПОТОЧНИЙ_ДЕНЬ_ТИЖНЯ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
+       'localweek'                 => array( '1', 'ЛОКАЛЬНИЙ_ТИЖДЕНЬ', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
+       'localdow'                  => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_ТИЖНЯ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
+       'revisionid'                => array( '1', 'ІД_ВЕРСІЇ', 'ИД_ВЕРСИИ', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕНЬ_ВЕРСІЇ', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕНЬ_ВЕРСІЇ_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МІСЯЦЬ_ВЕРСІЇ', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'МІСЯЦЬ_ВЕРСІЇ_1', 'МЕСЯЦ_ВЕРСИИ_1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'РІК_ВЕРСІЇ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'МІТКА_ЧАСУ_ВЕРСІЇ', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ВЕРСІЯ_КОРИСТУВАЧА', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'МНОЖИНА:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПОВНА_АДРЕСА:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОВНА_АДРЕСА_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'НР_ПЕРША:', 'ПЕРША_БУКВА_МАЛА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ВР_ПЕРША:', 'ПЕРША_БУКВА_ВЕЛИКА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'НР:', 'НИЖНІЙ_РЕГІСТР:', 'МАЛИМИ_БУКВАМИ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
+       'uc'                        => array( '0', 'ВР:', 'ВЕРХНІЙ_РЕГІСТР:', 'ВЕЛИКИМИ_БУКВАМИ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
+       'raw'                       => array( '0', 'НЕОБРОБ:', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПОКАЗАТИ_ЗАГОЛОВОК', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
+       'rawsuffix'                 => array( '1', 'Н', 'R' ),
+       'newsectionlink'            => array( '1', '__ПОСИЛАННЯ_НА_НОВИЙ_РОЗДІЛ__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__БЕЗ_ПОСИЛАННЯ_НА_НОВИЙ_РОЗДІЛ__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'ПОТОЧНА_ВЕРСІЯ', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'ЗАКОДОВАНА_АДРЕСА:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'КОДУВАТИ_МІТКУ', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'МІТКА_ПОТОЧНОГО_ЧАСУ', 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'МІТКА_ЛОКАЛЬНОГО_ЧАСУ', 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'НАПРЯМОК_ПИСЬМА', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
+       'language'                  => array( '0', '#МОВА:', '#ЯЗЫК:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'МОВА_ВМІСТУ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'СТОРІНОК_У_ПРОСТОРІ_НАЗВ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'КІЛЬКІСТЬ_АДМІНІСТРАТОРІВ', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'ФОРМАТУВАТИ_ЧИСЛО', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'ЗАПОВНИТИ_ЛІВОРУЧ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
+       'padright'                  => array( '0', 'ЗАПОВНИТИ_ПРАВОРУЧ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
+       'special'                   => array( '0', 'спеціальна', 'служебная', 'special' ),
+       'defaultsort'               => array( '1', 'СТАНДАРТНЕ_СОРТУВАННЯ:', 'СОРТУВАННЯ:', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ШЛЯХ_ДО_ФАЙЛУ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'тег', 'мітка', 'метка', 'тэг', 'tag' ),
+       'hiddencat'                 => array( '1', '__ПРИХОВ_КАТ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'СТОР_В_КАТ', 'СТОР_У_КАТ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'РОЗМІР', 'РОЗМІР_СТОРІНКИ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
+       'index'                     => array( '1', '__ІНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗ_ІНДЕКСУ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'КІЛЬКІСТЬ_У_ГРУПІ', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__СТАТИЧНЕ_ПЕРЕНАПРАВЛЕННЯ__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'РІВЕНЬ_ЗАХИСТУ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', 'форматдати', 'форматдаты', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'ШЛЯХ', 'ПУТЬ', 'PATH' ),
+       'url_wiki'                  => array( '0', 'ВІКІ', 'ВИКИ', 'WIKI' ),
+       'url_query'                 => array( '0', 'ЗАПИТ', 'ЗАПРОС', 'QUERY' ),
 );
 
 $linkTrail = '/^([a-zабвгґдеєжзиіїйклмнопрстуфхцчшщьєюяёъы“»]+)(.*)$/sDu';
@@ -615,6 +620,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' => 'ред.',
 'editsection-brackets' => '[$1]',
@@ -730,7 +739,7 @@ $1',
 'viewsourcetext' => 'Ви можете переглянути та скопіювати початковий текст цієї сторінки:',
 'viewyourtext' => "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
 'protectedinterface' => 'Ця сторінка є частиною інтерфейсу програмного забезпечення і її можуть редагувати лише адміністратори проекту.',
-'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',
 'namespaceprotected' => 'У вас нема дозволу редагувати сторінки в просторі назв «$1».',
@@ -754,7 +763,7 @@ $1',
 # Login and logout pages
 'logouttext' => "'''Тепер ви працюєте в тому ж режимі, який був до вашого входу до системи.'''
 
-Ви можете продовжувати використовувати {{grammar:accusative|{{SITENAME}}}} анонімно або знову [[Special:UserLogin|ввійти до системи]] як той самий або інший користувач. Деякі сторінки можуть відображатися, ніби ви ще представлені системі під іменем, щоб уникнути цього, оновіть кеш браузера.",
+Ви можете продовжувати використовувати {{grammar:accusative|{{SITENAME}}}} анонімно або знову <span class='plainlinks'>[$1 ввійти до системи]</span> як той самий або інший користувач. Деякі сторінки можуть відображатися, ніби ви ще представлені системі під іменем, щоб уникнути цього, оновіть кеш браузера.",
 'welcomecreation' => '== Вітаємо вас, $1! ==
 Ваш обліковий запис створено.
 Не забудьте змінити свої [[Special:Preferences|налаштування для сайту]].',
@@ -764,6 +773,7 @@ $1',
 'remembermypassword' => "Запам'ятати мій обліковий запис на цьому комп'ютері (на строк не більше $1 {{PLURAL:$1|дня|днів}})",
 'securelogin-stick-https' => 'Залишайтись підключенним через HTTPS після входу',
 'yourdomainname' => 'Ваш домен:',
+'password-change-forbidden' => 'Ви не можна змінити пароль на цій вікі.',
 'externaldberror' => 'Сталася помилка при автентифікації за допомогою зовнішньої бази даних, або у вас недостатньо прав для внесення змін до свого зовнішнього облікового запису.',
 'login' => 'Вхід до системи',
 'nav-login-createaccount' => 'Вхід / реєстрація',
@@ -1009,17 +1019,17 @@ $2
 Одна IP-адреса може використовуватися декількома користувачами.
 Якщо ви — анонімний користувач і вважаєте, що отримали коментарі, адресовані не вам, будь ласка [[Special:UserLogin/signup|зареєструйтесь]] або [[Special:UserLogin|увійдіть до системи]], щоб у майбутньому уникнути можливої плутанини з іншими анонімними користувачами.''",
 'noarticletext' => 'Зараз на цій сторінці нема тексту.
\92и Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\88Ñ\83каÑ\82и Ñ\86Ñ\8e Ð½Ð°Ð·Ð²Ñ\83]] Ð² інших сторінках,
\92и Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\88Ñ\83каÑ\82и Ñ\86Ñ\8e Ð½Ð°Ð·Ð²Ñ\83]] Ð½Ð° інших сторінках,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати в журналах]
 або [{{fullurl:{{FULLPAGENAME}}|action=edit}} створити сторінку з такою назвою]</span>.',
-'noarticletext-nopermission' => 'Ð\97аÑ\80аз Ð½Ð° Ñ\86Ñ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 Ð²Ñ\96дÑ\81Ñ\83Ñ\82нÑ\96й Ñ\82екÑ\81Ñ\82.
\92и Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\88Ñ\83каÑ\82и Ñ\82акий Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº]] Ñ\81еÑ\80ед Ñ\96нÑ\88иÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нок,
-або <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати пов\'язані записи в журналах]</span>.',
+'noarticletext-nopermission' => 'Ð\97аÑ\80аз Ð½Ð° Ñ\86Ñ\96й Ñ\81Ñ\82оÑ\80Ñ\96нÑ\86Ñ\96 Ð½ÐµÐ¼Ð°Ñ\94 Ñ\82екÑ\81Ñ\82Ñ\83.
\92и Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\88Ñ\83каÑ\82и Ñ\86Ñ\8e Ð½Ð°Ð·Ð²Ñ\83]] Ð½Ð° Ñ\96нÑ\88иÑ\85 Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85,
+або <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати пов\'язані записи в журналах]</span>, але ви не маєте дозволу на створення такої сторінки.',
 'userpage-userdoesnotexist' => 'Користувач під назвою "<nowiki>$1</nowiki>" не зареєстрований. Переконайтеся, що ви хочете створити/редагувати цю сторінку.',
 'userpage-userdoesnotexist-view' => 'Обліковий запис користувача „$1“ не зареєстровано.',
 'blocked-notice-logextract' => 'Цей користувач наразі заблокований.
 Останній запис у журналі блокувань такий:',
-'clearyourcache' => "'''Увага:''' Ð\9fÑ\96Ñ\81лÑ\8f Ð·Ð±ÐµÑ\80еженнÑ\8f Ñ\81лÑ\96д Ð¾Ñ\87иÑ\81Ñ\82иÑ\82и ÐºÐµÑ\88 Ð±Ñ\80аÑ\83зеÑ\80а, щоб побачити зміни.
+'clearyourcache' => "'''Увага:''' Ð\9fÑ\96Ñ\81лÑ\8f Ð·Ð±ÐµÑ\80еженнÑ\8f Ñ\81лÑ\96д Ð¾Ñ\87иÑ\81Ñ\82иÑ\82и ÐºÐµÑ\88 Ð¾Ð³Ð»Ñ\8fдаÑ\87а, щоб побачити зміни.
 * '''Firefox / Safari:''' тримайте ''Shift'', коли натискаєте ''Оновити'', або натисніть ''Ctrl-F5'' чи ''Ctrl-Shift-R'' (''⌘-R'' на Apple Mac)
 * '''Google Chrome:''' натисніть ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Apple Mac)
 * '''Internet Explorer:''' тримайте ''Ctrl'', коли натискаєте ''Оновити'', або натисніть ''Ctrl-F5''
@@ -1373,8 +1383,6 @@ $1",
 'search-interwiki-caption' => 'Братні проекти',
 'search-interwiki-default' => '$1 результати:',
 'search-interwiki-more' => '(більше)',
-'search-mwsuggest-enabled' => 'з порадами',
-'search-mwsuggest-disabled' => 'без порад',
 'search-relatedarticle' => "Пов'язаний",
 'mwsuggest-disable' => 'Вимкнути поради AJAX',
 'searcheverything-enable' => 'Пошук у всіх просторах назв',
@@ -1908,7 +1916,7 @@ $1',
 'backend-fail-internal' => 'Сталася невідома помилка у сховищі рушія "$1".',
 'backend-fail-contenttype' => 'Не вдалося визначити тип вмісту файла, щоб зберегти його в "$1".',
 'backend-fail-batchsize' => 'Серверна частина отримала блок із $1 {{PLURAL:$1|файлової операції|файлових операцій}}; обмеження складає $2 {{PLURAL:$2|файлову операцію|файлові операції|файлових операцій}}.',
-'backend-fail-usable' => 'Файл $1 не може бути записано через недостатні повноваження чи відсутність каталогів (контейнерів).',
+'backend-fail-usable' => 'Файл «$1» не може бути прочитано чи записано через недостатні повноваження або відсутність каталогів (контейнерів).',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не вдалося підключитися до бази даних журналу для сховища «$1».',
@@ -2045,6 +2053,7 @@ $1',
 'shared-repo' => 'спільного сховища',
 'shared-repo-name-wikimediacommons' => 'Вікісховища',
 'filepage.css' => '/* Розміщений тут CSS-код розміщений на сторінці опису файла, також і для іноземних користувачів вікі */',
+'upload-disallowed-here' => 'На жаль, Ви не можете перезаписати це зображення',
 
 # File reversion
 'filerevert' => 'Повернення до старої версії $1',
@@ -2177,6 +2186,7 @@ $1',
 'mostlinkedtemplates' => 'Найуживаніші шаблони',
 'mostcategories' => 'Статті з найбільшою кількістю категорій',
 'mostimages' => 'Найуживаніші зображення',
+'mostinterwikis' => 'Сторінки з найбільшою кількістю інтервікі-посилань',
 'mostrevisions' => 'Статті з найбільшою кількістю редагувань',
 'prefixindex' => 'Покажчик за початком назв сторінок',
 'prefixindex-namespace' => 'Усі сторінки з префіксом (простір назв $1)',
@@ -2187,7 +2197,7 @@ $1',
 'protectedpages' => 'Захищені сторінки',
 'protectedpages-indef' => 'Тільки безстроково захищені',
 'protectedpages-cascade' => 'Тільки каскадний захист',
-'protectedpagestext' => 'Ð\9dаÑ\81Ñ\82Ñ\83пні сторінки захищені від перейменування або зміни.',
+'protectedpagestext' => 'Такі сторінки захищені від перейменування або зміни.',
 'protectedpagesempty' => 'Зараз нема захищених сторінок із зазначеними параметрами',
 'protectedtitles' => 'Заборонені назви',
 'protectedtitlestext' => 'Наступні назви не дозволено використовувати',
@@ -2325,6 +2335,8 @@ $1',
 'mailnologin' => 'Відсутня адреса для відправки',
 'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.',
 'emailuser' => 'Надіслати листа',
+'emailuser-title-target' => 'Надіслати електронного листа користувачеві',
+'emailuser-title-notarget' => 'Надіслати електронного листа користувачеві',
 'emailpage' => 'Лист користувачеві',
 'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення цьому користувачу.
 Електронна адреса, яку ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.',
@@ -3002,7 +3014,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'Тестування JavaScript',
-'javascripttest-disabled' => 'Цю функцію відключено.',
 'javascripttest-title' => 'Працює  $1  випробувань',
 'javascripttest-pagetext-noframework' => 'Ця сторінка призначений для тестування JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Невідоме середовище тестування " $1 ".',
@@ -3034,7 +3045,7 @@ $1',
 'tooltip-ca-move' => 'Перейменувати цю сторінку',
 'tooltip-ca-watch' => 'Додати цю сторінку до вашого списку спостереження',
 'tooltip-ca-unwatch' => 'Вилучити цю сторінку з вашого списку спостереження',
-'tooltip-search' => 'Шукати у {{GRAMMAR:locative|{{SITENAME}}}}',
+'tooltip-search' => 'Шукати',
 'tooltip-search-go' => 'Перейти до сторінки, що має точно таку назву (якщо вона існує)',
 'tooltip-search-fulltext' => 'Знайти сторінки, що містять зазначений текст',
 'tooltip-p-logo' => 'Головна сторінка',
@@ -3155,11 +3166,14 @@ The wiki server can't provide data in a format your client can read.",
 
 # Info page
 'pageinfo-title' => 'Інформація про " $1 "',
-'pageinfo-header-edits' => 'РедагÑ\83ваннÑ\8f',
+'pageinfo-header-edits' => 'Ð\86Ñ\81Ñ\82оÑ\80Ñ\96Ñ\8f Ñ\80едагÑ\83ванÑ\8c',
 'pageinfo-views' => 'Кількість переглядів',
 'pageinfo-watchers' => 'Кількість спостерігачів',
-'pageinfo-edits' => 'Кількість редагувань',
-'pageinfo-authors' => 'Кількість унікальних авторів',
+'pageinfo-firsttime' => 'Дата створення сторінки',
+'pageinfo-lastuser' => 'Останній редактор',
+'pageinfo-lasttime' => 'Дата останньої правки',
+'pageinfo-edits' => 'Загальна кількість редагувань',
+'pageinfo-authors' => 'Загальна кількість унікальних авторів',
 
 # Skin names
 'skinname-standard' => 'Стандартне',
@@ -4181,6 +4195,10 @@ MediaWiki поширюється в надії, що вона буде кори
 'feedback-bugcheck' => 'Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].',
 'feedback-bugnew' => 'Я перевірив. Повідомити про нову помилку',
 
+# Search suggestions
+'searchsuggest-search' => 'Пошук',
+'searchsuggest-containing' => 'що містять...',
+
 # API errors
 'api-error-badaccess-groups' => 'Вам не дозволено завантажувати файли до цього вікіпроекту.',
 'api-error-badtoken' => 'Внутрішня помилка: некоректний токен.',
index a3b9bba..0dbd2cd 100644 (file)
@@ -276,8 +276,8 @@ $1',
 'edithelp' => 'معاونت براۓ ترمیم',
 'edithelppage' => 'Help:ترمیم',
 'helppage' => 'Help:فہرست',
-'mainpage' => 'سرÙ\88رÙ\82',
-'mainpage-description' => 'سرÙ\88رÙ\82',
+'mainpage' => 'صÙ\81Ø­Û\81 Ø§Ù\88Ù\84',
+'mainpage-description' => 'صÙ\81Ø­Û\81 Ø§Ù\88Ù\84',
 'policy-url' => 'Project:حکمتِ عملی',
 'portal' => 'دیوان عام',
 'portal-url' => 'Project:دیوان عام',
@@ -418,7 +418,7 @@ Warning: Page may not contain recent updates.',
 # Login and logout pages
 'logouttext' => "'''اب آپ خارج ہوچکے ہیں'''
 
-آپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے [[Special:UserLogin|دوبارہ داخلِ نوشتہ]] بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
+آپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
 'welcomecreation' => '== خوش آمدید، $1 ! ==
 آپ کا کھاتہ بنا دیا گیا ہے۔ اپنی [[Special:Preferences|{{SITENAME}} ترجیحات]] مرتب کرنا مت بھولئے گا.',
 'yourname' => 'اسمِ رکنیت',
@@ -790,8 +790,6 @@ $1",
 'search-interwiki-caption' => 'ساتھی منصوبے',
 'search-interwiki-default' => '$1 نتائج:',
 'search-interwiki-more' => '(مزید)',
-'search-mwsuggest-enabled' => 'بمع تجاویز',
-'search-mwsuggest-disabled' => 'تجاویز نہیں',
 'search-relatedarticle' => 'متعلقہ',
 'mwsuggest-disable' => 'AJAX تجاویز غیرفعال',
 'searchrelated' => 'متعلقہ',
@@ -900,13 +898,22 @@ HTML tags جانچئے.',
 'prefs-i18n' => 'بین الاقوامیت',
 'prefs-signature' => 'دستخط',
 'prefs-dateformat' => 'شکلبندِ تاریخ',
+'prefs-diffs' => 'فروق',
 
 # User rights
 'userrights' => 'حقوقِ صارف کی نظامت',
 'userrights-lookup-user' => 'گروہائے صارف کا انتظام',
 'userrights-user-editname' => 'کوئی اسم‌صارف داخل کیجئے:',
+'editusergroup' => 'ترمیم گروہائے صارف',
 'editinguser' => "تبدیلئ حقوق برائے صارف '''[[صارف:$1|$1]]''' $2",
+'userrights-editusergroup' => 'ترمیم گروہائے صارف',
+'saveusergroups' => 'گروہائے صارف محفوظ',
 'userrights-groupsmember' => 'رکنِ:',
+'userrights-groupsmember-auto' => 'اعتباری صارف در',
+'userrights-groups-help' => 'آپ ان گروہان میں تبدیلی کرسکتے ہیں جن سے صارف متعلق ہے: 
+* نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے ہے۔ 
+* غیر نشان زد خانہ کا مطلب یہ ہے کہ صارف کا تعلق اس گروہ سے نہیں ہے۔ 
+* یہ * علامت اس بات کا اشارہ ہے کہ آپ اس گروہ کو نہیں ہٹا سکتے جسے ایک مرتبہ آپ نے شامل کردیا ہو، یا اس کے بر عکس۔',
 'userrights-reason' => 'وجہ:',
 'userrights-no-interwiki' => 'دوسرے ویکیوں پر حقوقِ صارف میں ترمیم کی آپ کو اجازت نہیں ہے.',
 'userrights-changeable-col' => 'مجموعات جو آپ تبدیل کرسکتے ہیں',
@@ -915,17 +922,31 @@ HTML tags جانچئے.',
 # Groups
 'group' => 'گروہ:',
 'group-user' => 'صارفین',
+'group-autoconfirmed' => 'خود توثیق شدہ صارفین',
 'group-bot' => 'روبالات',
 'group-sysop' => 'منتظمین',
+'group-bureaucrat' => 'مامورین اداری',
+'group-suppress' => 'نگران',
 'group-all' => '(تمام)',
 
 'group-user-member' => 'صارف',
 'group-autoconfirmed-member' => 'خودتصدیق شدہ صارف',
 'group-bot-member' => 'خودکار صارف',
 'group-sysop-member' => 'منتظم',
+'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}}:منتظمین',
 
+# User rights log
+'rightslog' => 'نوشتہ صارفی اختیارات',
+'rightslogtext' => 'یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔',
+'rightslogentry' => 'گروہ رکنیت میں برائے $1 از $2 تا $3 تبدیلی ہوئی',
+'rightsnone' => '(کچھ نہیں)',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'اس صفحہ میں ترمیم کریں',
 
@@ -1003,6 +1024,7 @@ HTML tags جانچئے.',
 'uploadlogpagetext' => 'درج ذیل میں حالیہ زبراثقال (اپ لوڈ) کی گئی املاف (فائلوں) کی فہرست دی گئی ہے۔',
 'filedesc' => 'خلاصہ',
 'fileuploadsummary' => 'خلاصہ :',
+'filesource' => 'ذرائع',
 'uploadedfiles' => 'زبراثقال ملف (فائل اپ لوڈ)',
 'ignorewarning' => 'انتباہ نظرانداز کرتے ہوۓ بہرصورت ملف (فائل) کو محفوظ کرلیا جاۓ۔',
 'ignorewarnings' => 'ہر انتباہ نظرانداز کردیا جاۓ۔',
@@ -1193,10 +1215,17 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Undelete
 'undelete' => 'ضائع کردہ صفحات دیکھیں',
 'undeletepage' => 'معائنہ خذف شدہ صفحات',
+'undeletepagetitle' => "'''ذیل میں [[:$1|$1]] کے حذف شدہ ترامیم درج ہیں۔'''",
 'viewdeletedpage' => 'حذف شدہ صفحات دیکھیے',
+'undelete-fieldset-title' => 'ترامیم بحال کریں',
+'undeletehistory' => 'اگر آپ اس صفحہ کو بحال کرتے ہیں، تو اس صفحہ کے تاریخچہ میں تمام ترامیم بھی بحال ہوجائیگی۔
+اگر حذف شدگی کے بعد کوئی نیا صفحہ اسی نام سے تخلیق کیا گیا ہو، تو تمام بحال شدہ ترامیم گذشتہ تاریخچہ میں ظاہر ہوگی۔',
+'undeleterevdel' => 'بحالیٔ صفحہ کا اقدام مکمل نہیں ہوگا اگر اس کا تنیجہ صفحہ کے اوپر کے حصہ کی ترمیم یا ملف کا اعادہ جزوی طور پر حذف کیا جارہا ہو۔
+ایسی صورت میں لازمی طور آپ حالیہ حذف شدہ اعادے کو ظاہر کریں۔',
 'undeletebtn' => 'بحال',
 'undeletelink' => 'دیکھو/بحال کرو',
 'undeleteviewlink' => 'دکھاؤ',
+'undeleteinvert' => 'انتخاب بالعکس',
 'undeletecomment' => 'وجہ:',
 
 # Namespace form on various pages
@@ -1253,6 +1282,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'proxyblocksuccess' => 'کردیا.',
 
 # Move page
+'move-page' => 'منتقلی',
 'move-page-legend' => 'منتقلئ صفحہ',
 'movepagetext' => "نیچے دیا گیا تشکیلہ (فـارم) استعمال کرکے اس صفحہ کا عنوان دوبارہ منتخب کیا جاسکتا ہے، ساتھ ہی اس سے منسلک تاریخچہ بھی نۓ نام پر منتقل ہوجاۓ گا۔ اسکے بعد سے اس صفحے کا پرانا نام ، نۓ نام کی جانب -- لوٹایا گیا صفحہ -- کی حیثیت اختیار کرلے گا۔ لیکن یادآوری کرلیجیۓ دیگر صفحات پر ، پرانے صفحہ کی جانب دیۓ گۓ روابط (لنکس) تبدیل نہیں ہونگے؛ اس بات کو یقینی بنانا ضروری ہے کہ کوئی دوہرا یا شکستہ -- پلٹایا گیا ربط -- نہ رہ جاۓ۔
 
@@ -1262,6 +1292,18 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 ''' انـتـبـاہ !'''
  کسی اہم اور مقبول صفحہ کی منتقلی ، غیرمتوقع اور پریشان کن بھی ہی ہوسکتی ہے اس لیۓ ؛ منتقلی سے قبل براہ کرم یقین کرلیجۓ کہ آپ اسکے منطقی نتائج سے باخبر ہیں۔",
+'movepagetext-noredirectfixer' => "درج ذیل ورقہ کے ذریعہ صفحہ کو نیا نام دیا جاسکتا ہے، اس کے ساتھ صفحہ کا تاریخچہ بھی منتقل ہوجائیگا۔
+نئے عنوان کے جانب قدیم عنوان کو رجوع مکرر کردیا جائیگا۔
+
+یقین کرلیں کہ [[Special:DoubleRedirects|مکرر]] یا [[Special:BrokenRedirects|شکستہ رجوع مکررات]] موجود نہیں ہیں۔
+آپ اس بات کو یقینی بنانے کے ذمہ دار ہیں کہ روابط انہیں جگہوں سے مربوط ہیں جن کو فرض کیا گیا ہے۔
+
+خیال رہے کہ یہ صفحہ منتقل '''نہیں''' ہوگا اگر نئے عنوان کے ساتھ صفحہ پہلے سے موجود ہو، سوائے اس کے کہ صفحہ خالی ہو اور اس کا گذشتہ ترمیمی تاریخچہ موجود نہ ہو۔
+اس کا مطلب ہے آپ سے اگر غلطی ہوجائے تو آپ صفحہ کو اسی جگہ لوٹا سکتے ہیں، تاہم موجود صفحہ پر برتحریر (overwrite) نہیں کرسکتے۔
+
+'''انتباہ!'''
+کسی اہم اور مقبول صفحہ کی منتقلی، غیرمتوقع اور پریشان کن بھی ہی ہوسکتی ہے اس لیۓ؛ 
+منتقلی سے قبل براہ کرم یقین کرلیجۓ کہ آپ اسکے منطقی نتائج سے باخبر ہیں۔",
 'movearticle' => 'مـنـتـقـل کـریں',
 'newtitle' => 'نـیــا عـنــوان',
 'move-watch' => 'صفحہ زیر نظر',
@@ -1356,6 +1398,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'anonymous' => '{{SITENAME}} گمنام صارف',
 'others' => 'دیگر',
 
+# Patrolling
+'markaspatrolledtext' => 'اس صفحہ کو بطور مراجعت شدہ نشان زد کریں',
+
 # Image deletion
 'deletedrevision' => 'حذف شدہ پرانی ترمیم $1۔',
 
@@ -1441,4 +1486,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:SpecialPages
 'specialpages' => 'خصوصی صفحات',
 
+# Search suggestions
+'searchsuggest-search' => 'تلاش',
+
 );
index 1aa0f86..c54ceea 100644 (file)
@@ -10,6 +10,7 @@
  * @author Abdulla
  * @author Behzod Saidov <behzodsaidov@gmail.com>
  * @author Casual
+ * @author CoderSI
  * @author Lyncos
  * @author Sociologist
  * @author Urhixidur
@@ -53,25 +54,43 @@ $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 
 $messages = array(
 # User preference toggles
-'tog-hideminor' => 'Yangi oʻzgarishlardagi kichik tahrirlani yashir',
+'tog-underline' => 'Havolalarning tagiga chizish:',
+'tog-justify' => "Matnni sahifaning eni bo'yicha tekislash",
+'tog-hideminor' => "Yangi oʻzgarishlar ro'yxatida kichik tahrirlarni yashirish",
+'tog-hidepatrolled' => 'Yangi oʻzgarishlar roʻyxatida patrullangan tahrirlarni yashirish',
+'tog-newpageshidepatrolled' => "Yangi sahifalar ro'yxatida patrullangan sahifalarni yashirish",
+'tog-numberheadings' => 'Sarlavhalarni avtomatik tarzda raqamlash',
+'tog-showtoolbar' => "Tahrirlash vaqtida yuqorigi unsurlar darchasini ko'rsatish (JavaScript)",
+'tog-editsection' => "[tahrir] havolasini har bir seksiyada ko'rsatish",
+'tog-showtoc' => "Mundarijani ko'rsatish (3 ta sarlavhadan ko'p bo'lgan sahifalar uchun)",
 'tog-rememberpassword' => 'Hisob ma’lumotlarini ushbu kompyuterda eslab qolish (eng ko‘pi bilan $1 {{PLURAL:$1|kunga|kunga}})',
 'tog-watchcreations' => 'Men yaratgan sahifalarni va yuklagan fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchdefault' => 'Men tahrirlagan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchmoves' => 'Men koʻchirgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchdeletion' => 'Men yoʻqotgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-minordefault' => "Boshlang'ich holatga barcha tahrirlarni kamahamiyatli qilib belgilash",
+'tog-previewontop' => "Oldindan ko'rishni tahrirlash oynasi oldiga joylashtirish",
+'tog-previewonfirst' => "Tahrirlashga o'tishda batafsil ko'rinishni ko'rsatish",
+'tog-nocache' => "Brauzerda sahifalarni keshda saqlashni o'chirish",
 'tog-enotifwatchlistpages' => 'Kuzatuv roʻyxatimdagi sahifa yoki fayllar oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
 'tog-enotifusertalkpages' => 'Munozara sahifam oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
-'tog-oldsig' => 'Mavjud imzo:',
+'tog-oldsig' => 'Joriy imzo:',
 'tog-fancysig' => 'Imzoni wikimatn sifatida qara (avtomatik ishoratsiz)',
+'tog-showjumplinks' => '"ga o\'tish" yordamchi havolalarini yoqish',
 'tog-ccmeonemails' => 'Men boshqa foydalanuvchilarga yuborayotgan xatnig nusxasi oʻzimning e-pochtamga ham yuborilsin',
-'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsat',
+'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsatish',
+'tog-noconvertlink' => "Sarlavhaga aylantirish dastagini o'chirib qo'yish",
 
 'underline-always' => 'Har doim',
 'underline-never' => 'Hech qachon',
 'underline-default' => 'Brauzer moslamari boʻyicha',
 
 # Font style option in Special:Preferences
+'editfont-style' => 'Tahrirlash maydoni bosma harflari turi',
 'editfont-default' => 'Brauzer moslamari boʻyicha',
+'editfont-monospace' => 'Monoenli bosma harflar',
+'editfont-sansserif' => 'Sans-serif bosma harflari',
+'editfont-serif' => 'Serif bosma harflari',
 
 # Dates
 'sunday' => 'Yakshanba',
@@ -129,38 +148,55 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Turkum|Turkumlar}}',
 'category_header' => '"$1" turkumidagi maqolalar.',
 'subcategories' => 'Ostturkumlar',
+'category-media-header' => '"$1" turkumidagi fayllar',
 'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
 'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
 'hidden-category-category' => 'Yashirin turkumlar',
 'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
 'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
+'category-file-count' => "{{PLURAL:$2|Ushbu turkum faqat bitta faylga ega.|Ushbu turkumdagi $2 ta fayldan quyidagi $1 tasi ko'rsatildi.}}",
 'listingcontinuesabbrev' => 'davomi',
+'index-category' => 'Indekslanadigan sahifalar',
+'noindex-category' => 'Indekslanmaydigan sahifalar',
+'broken-file-category' => 'Ishlamaydigan fayl havolalariga ega sahifalar',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
 
 'about' => 'Haqida',
+'article' => 'Sahifa',
 'newwindow' => '(yangi oynada ochiladi)',
-'cancel' => 'Voz kechish',
+'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
+'mypage' => 'Shaxsiy sahifa',
 'mytalk' => 'Suhbatim',
 'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
 
 # Cologne Blue skin
+'qbfind' => 'Qidiruv',
+'qbbrowse' => "Ko'rish",
 'qbedit' => 'Tahrirlash',
+'qbpageoptions' => 'Ushbu sahifa',
+'qbpageinfo' => "Sahifa haqida ma'lumot",
+'qbmyoptions' => 'Mening sahifalarim',
 'qbspecialpages' => 'Maxsus sahifalar',
 'faq' => 'TSS',
+'faqpage' => 'Project:TSS',
 
 # Vector skin
-'vector-action-addsection' => 'Mavzuni qoʻsh',
+'vector-action-addsection' => 'Mavzu qoʻshish',
 'vector-action-delete' => 'O‘chirish',
 'vector-action-move' => 'Ko‘chirish',
-'vector-view-create' => 'Yarat',
-'vector-view-edit' => 'Tahrirla',
+'vector-action-protect' => 'Himoyalash',
+'vector-action-undelete' => 'Tiklash',
+'vector-action-unprotect' => "Himoyani o'zgartirish",
+'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv uskunasini yoqish (faqat "Vektor" tashqi ko\'rinishi uchun)',
+'vector-view-create' => 'Yaratish',
+'vector-view-edit' => 'Tahrirlash',
 'vector-view-history' => 'Tarix',
 'vector-view-view' => 'Mutolaa',
-'vector-view-viewsource' => 'Manbasini koʻrsat',
+'vector-view-viewsource' => "Manbasini ko'rish",
 'actions' => 'Amallar',
 'namespaces' => 'Nomfazolar',
 'variants' => 'Variantlar',
@@ -169,12 +205,13 @@ $messages = array(
 'returnto' => '$1 sahifasiga qaytish.',
 'tagline' => '{{SITENAME}} dan',
 'help' => 'Yordam',
-'search' => 'Qidirish',
+'search' => 'Qidiruv',
 'searchbutton' => 'Qidirish',
 'go' => "O'tish",
 'searcharticle' => 'O‘tish',
 'history' => 'Sahifa tarixi',
 'history_short' => 'Tarix',
+'updatedmarker' => 'mening oxirgi tashrifimdan keyin yangilandi',
 'printableversion' => 'Bosma uchun versiya',
 'permalink' => 'Doimiy ishorat',
 'print' => 'Chop et',
@@ -182,22 +219,32 @@ $messages = array(
 'edit' => 'Tahrirlash',
 'create' => 'Yaratish',
 'editthispage' => 'Sahifani tahrirlash',
-'create-this-page' => 'Bu sahifani yarat',
+'create-this-page' => 'Ushbu sahifani yaratish',
 'delete' => 'O‘chirish',
-'deletethispage' => 'Bu sahifani oʻchir',
+'deletethispage' => 'Ushbu sahifani o‘chirish',
+'undelete_short' => '{{PLURAL:$1|tahrir|$1 tahrirlar}}ni tiklash',
+'viewdeleted_short' => "{{PLURAL:$1|o'chirilgan tahrir|$1 ta o'chirilgan tahrirlar}}ni ko'rish",
 'protect' => 'Himoyalash',
 'protect_change' => 'o‘zgartirish',
 'protectthispage' => 'Ushbu sahifani himoyalash',
 'unprotect' => 'Himoyadan chiqarish',
+'unprotectthispage' => "Ushbu sahifaning himoyasini o'zgaritish",
 'newpage' => 'Yangi sahifa',
 'talkpage' => 'Bu sahifa haqida munozara',
 'talkpagelinktext' => 'Munozara',
 'specialpage' => 'Maxsus sahifa',
 'personaltools' => 'Shaxsiy uskunalar',
 'postcomment' => 'Yangi boʻlim',
+'articlepage' => 'Sahifani ko‘rish',
 'talk' => 'Munozara',
 'views' => 'Ko‘rinishlar',
 'toolbox' => 'Asboblar',
+'userpage' => "Foydalanuvchi sahifasini ko'rish",
+'projectpage' => "Loyiha sahifasini ko'rish",
+'imagepage' => "Fayl sahifasini ko'rish",
+'mediawikipage' => "Xabar sahifasini ko'rsatish",
+'templatepage' => "Andoza sahifasini ko'rish",
+'viewhelppage' => 'Yordam olish',
 'categorypage' => 'Turkum sahifasi',
 'viewtalkpage' => 'Munozara',
 'otherlanguages' => 'Boshqa tillarda',
@@ -207,8 +254,11 @@ $messages = array(
 'viewcount' => 'Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.',
 'protectedpage' => 'Himoyalangan sahifa',
 'jumpto' => 'Oʻtish:',
-'jumptonavigation' => 'foydalanish',
-'jumptosearch' => 'Qidir',
+'jumptonavigation' => 'saytda harakatlanish',
+'jumptosearch' => 'qidiruv',
+'pool-timeout' => "Muhosara (to'sish) ni kutish vaqti tugadi",
+'pool-queuefull' => "So'rovlar jamlanmasi to'ldi",
+'pool-errorunknown' => "Noma'lum xato",
 
 # 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}} haqida',
@@ -224,50 +274,99 @@ $messages = array(
 'helppage' => 'Help:Mundarija',
 'mainpage' => 'Bosh sahifa',
 'mainpage-description' => 'Bosh sahifa',
+'policy-url' => 'Project:Qoida',
 'portal' => 'Jamoa portali',
 'portal-url' => 'Project:Jamoa portali',
 'privacy' => 'Konfidensiallik siyosati',
 'privacypage' => 'Project:Konfidensiallik siyosati',
 
+'badaccess' => 'Ruxsatlilik xatosi',
+'badaccess-group0' => "Siz so'ralgan amallarni bajara olmaysiz",
+'badaccess-groups' => "So'ralgan amallarni kamida $1 {{PLURAL:$2|guruhi|guruhlari}} foydalanuvchilarigina amalga oshirishi mumkin.",
+
+'versionrequired' => '$1 versiyasidagi MediaWiki talab etiladi',
+'versionrequiredtext' => "Ushbu sahifani bilan ishlash uchun $1 versiyasidagi MediaWiki talab etiladi.
+[[Special:Version|Dasturiy ta'minot haqida axborot]]ni ko'ring.",
+
 'ok' => 'OK',
 'retrievedfrom' => ' "$1" dan olindi',
 'youhavenewmessages' => 'Sizga $1 keldi ($2).',
 'newmessageslink' => 'yangi xabarlar',
 'newmessagesdifflink' => 'soʻnggi oʻzgarish',
-'youhavenewmessagesmulti' => 'Sizga yangi xat keldi: $1',
+'youhavenewmessagesfromusers' => 'Siz {{PLURAL:$3|$3 ta foydalanuvchidan}} $1 oldingiz ($2).',
+'youhavenewmessagesmanyusers' => "Siz ko'p foydalanuvchilardan $1 oldingiz ($2).",
+'newmessageslinkplural' => '{{PLURAL:$1|yangi xabar|yangi xabarlar}}',
+'newmessagesdifflinkplural' => "oxirgi {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
+'youhavenewmessagesmulti' => 'Siz $1ga yangi xat oldingiz',
 'editsection' => 'tahrirlash',
-'editold' => 'tahrir',
-'editlink' => 'tahrirla',
-'viewsourcelink' => 'manbasini koʻr',
+'editold' => 'tahrirlash',
+'viewsourceold' => 'manbasini koʻrish',
+'editlink' => 'tahrirlash',
+'viewsourcelink' => 'manbasini koʻrish',
 'editsectionhint' => 'Boʻlimni tahrirlash: $1',
 'toc' => 'Mundarija',
 'showtoc' => 'koʻrsatish',
 'hidetoc' => 'yashirish',
-'collapsible-collapse' => 'Yashir',
-'collapsible-expand' => 'Koʻrsat',
+'collapsible-collapse' => "Yig'ish",
+'collapsible-expand' => 'Yoyish',
+'thisisdeleted' => "$1ni ko'rib chiqasizmi yoki tiklaysizmi?",
+'viewdeleted' => "$1ni ko'rib chiqasizmi?",
+'restorelink' => "{{PLURAL:$1|o'chirilgan tahrir|$1 ta o'chirilgan tahrirlar}}ni",
+'feedlinks' => "Ko'rinishida:",
+'feed-invalid' => "Obuna uchun no'tog'ri turdagi kanal",
+'feed-unavailable' => "Sindikatsiya tasmalariga yo'lashning imkoni yo'q",
+'site-rss-feed' => '$1 — RSS-tasmasi',
+'site-atom-feed' => '$1 — Atom-tasma',
+'page-rss-feed' => '"$1" — RSS-tasmasi',
 'page-atom-feed' => '«$1» — Atom-lenta',
 'red-link-title' => '$1 (sahifa yaratilmagan)',
+'sort-descending' => "Kamayish bo'yicha tartiblash",
+'sort-ascending' => "O'sish bo'yicha tartiblash",
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Maqola',
 'nstab-user' => 'Foydalanuvchi sahifasi',
+'nstab-media' => 'Media sahifasi',
 'nstab-special' => 'Maxsus sahifa',
-'nstab-project' => 'Vikipediya',
+'nstab-project' => 'Loyiha sahifasi',
 'nstab-image' => 'Fayl',
 'nstab-mediawiki' => 'Xabar',
 'nstab-template' => 'Andoza',
 'nstab-help' => 'Yordam sahifasi',
 'nstab-category' => 'Turkum',
 
+# Main script and global functions
+'nosuchaction' => "Bunday amal yo'q",
+'nosuchspecialpage' => "Bunday maxsus sahifa yo'q",
+
 # General errors
 'error' => 'Xato',
+'laggedslavemode' => "'''Diqqat:''' sahifa oxirgi yangilashlarga ega bo'lmasligi mumkin.",
+'readonly' => "Ma'lumotlar bazasiga yozish to'sildi",
+'missingarticle-rev' => '(versiya №: $1)',
+'missingarticle-diff' => '(Farq: $1, $2)',
+'internalerror' => 'Ichki xato',
+'internalerror_info' => 'Ichki xato: $1',
 'badtitle' => 'Notoʻgʻri sarlavha',
-'viewsource' => 'Manbasini koʻrish',
+'viewsource' => "Manbasini ko'rish",
+'viewsource-title' => "$1 sahifasining manbasini ko'rish",
+'actionthrottled' => "Tezlik bo'yicha cheklov",
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
 'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+'editinginterface' => "'''Diqqat:''' Siz dasturiy ta'minot interfeysi matni mavjud bo'lgan sahifani tahrirlamoqdasiz.
+Uning o'zgartirilishi ushbu vikidagi boshqa foydalanuvchilar uchun ham interfeysning tashqi ko'rinishiga ta'sir qiladi.
+Ushbu xabar tarjimasini qo'shish yoki o'zgartirish uchun, iltimos, MediaWikining [//translatewiki.net/ translatewiki.net] lokalizatsiya saytidan foydalaning.",
 'namespaceprotected' => "Sizda '''$1''' nomfazosi sahifalarini tahrirlash huquqi yoʻq",
 'customcssprotected' => 'Sizda uchbu CSS sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
 'customjsprotected' => 'Sizda uchbu JavaScript sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
+'ns-specialprotected' => '"{{ns:special}}" nomfazosi sahifalari tahrirlanishi mumkin emas.',
+'exception-nologin' => "Siz tizimda o'zingizni tanishtirmadingiz",
+'exception-nologin-text' => "Bu sahifani ko'rish yoki so'ralgan amalni bajarish uchun o'zingizni tizimda tanitishingiz zarur.",
+
+# Virus scanner
+'virus-badscanner' => "Moslamada xato. Noma'lum virus aniqlovchi: ''$1''",
+'virus-scanfailed' => 'tekshirishda xatolik (kod $1)',
+'virus-unknownscanner' => "noma'lum antivirus:",
 
 # Login and logout pages
 'logouttext' => "'''Siz saytdan muvaffaqiyatli chiqdingiz.'''
@@ -281,6 +380,9 @@ Siz yangi hisob yaratdingiz.
 'yourpassword' => 'Maxfiy soʻz',
 'yourpasswordagain' => 'Maxfiy so‘zni qayta kiriting:',
 'remembermypassword' => 'Hisob ma’lumotlarini ushbu kompyuterda eslab qolish (eng ko‘pi bilan $1 {{PLURAL:$1|kun|kun}} uchun)',
+'securelogin-stick-https' => "Kirgandan keyin HTTPS bo'yicha ulanishni davom ettirish",
+'yourdomainname' => 'Sizning domeningiz:',
+'password-change-forbidden' => "Siz bu vikida maxfiy so'zni o'zgartira olmaysiz.",
 'login' => 'Kirish',
 'nav-login-createaccount' => 'Kirish / Hisob yaratish',
 'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
@@ -288,67 +390,125 @@ Siz yangi hisob yaratdingiz.
 'userloginnocreate' => 'Kirish',
 'logout' => 'Chiqish',
 'userlogout' => 'Chiqish',
-'notloggedin' => 'Kirish amalga oshirilmadi',
+'notloggedin' => "Siz tizimda o'zingizni tanitmadingiz",
 'nologin' => "Hisobingiz yoʻqmi? '''$1'''.",
 'nologinlink' => 'Hisob yaratish',
 'createaccount' => 'Hisob yaratish',
 'gotaccount' => "Hisobingiz bormi? '''$1'''.",
 'gotaccountlink' => 'Kirish',
 'userlogin-resetlink' => 'Kirish maʻlumotlaringiz esdan chiqdimi?',
+'createaccountmail' => "E-mail orqali maxfiy so'zni jo'natish",
+'createaccountreason' => 'Sabab:',
+'badretype' => "Siz tomondan kiritilgan maxfiy so'zlar mos kelmayapti.",
+'loginerror' => 'Foydalanuvchini aniqlashda xatolik',
+'createaccounterror' => "Hisob yozuvini yaratishning iloji yo'q: $1",
 'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
 'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
 'nosuchusershort' => '"$1" ismli ishtirokchi yoʻq.
 Xatosiz yozishga urinib koʻring.',
+'nouserspecified' => "Siz foydalanuvchining ismini ko'rsatishingiz lozim.",
+'login-userblocked' => "Bu foydalanuvchi muhosara qilingan. Tizimga kirishga ruxsat yo'q.",
 'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
-'mailmypassword' => 'Yangi parolni e-mail qil',
+'wrongpasswordempty' => "Iltimos, bo'sh bo'lmagan maxfiy so'z kiriting.",
+'mailmypassword' => "Elektron pochta orqali yangi maxfiy so'zni jo'natish",
+'passwordremindertitle' => "{{SITENAME}} uchun vaqtinchalik yangi maxfiy so'z",
 'emailauthenticated' => 'Sizning e-mail manzilingiz $2, $3 da tasdiqlangan.',
+'emailconfirmlink' => 'Sizning elektron pochta manzilingizni tasdiqlash',
+'emaildisabled' => 'Bu sayt elektron pochta xatlarini yubora olmaydi.',
+'accountcreated' => 'Hisob yozuvi yaratildi',
+'login-abort-generic' => 'Tizimga kirishga mufavvaqiyatsiz urinish',
 'loginlanguagelabel' => 'Til: $1',
 
 # Change password dialog
 'resetpass' => 'Maxfiy soʻzni oʻzgartirish',
+'resetpass_header' => "Hisob mahfiy so'zini o'zgartirish",
+'oldpassword' => "Eski mahfiy so'z:",
+'newpassword' => "Yangi mahfiy so'z:",
 'retypenew' => 'Yangi mahfiy soʻzni qayta tering:',
+'resetpass_submit' => "Maxfiy so'zni o'rnatish va kirish",
+'resetpass_forbidden' => "Maxfiy so'z o'zgartirilishi mumkin emas",
 'resetpass-submit-loggedin' => 'Maxfiy soʻzni oʻzgartirish',
+'resetpass-submit-cancel' => 'Bekor',
+
+# Special:PasswordReset
+'passwordreset-legend' => "Maxfiy so'zni yo'q qilish",
+'passwordreset-username' => 'Ishtirokchi nomi:',
+'passwordreset-domain' => 'Domen:',
+'passwordreset-email' => 'Elektron pochta manzili:',
+'passwordreset-emailelement' => "Foydalanuvchi ismi: $1
+Vaqtinchalik maxfiy so'z: $2",
+
+# Special:ChangeEmail
+'changeemail' => "Elektron pochta manzilini o'zgartirish",
+'changeemail-header' => "Elektron pochta manzilini o'zgaritish",
+'changeemail-oldemail' => 'Joriy elektron pochta manzili',
+'changeemail-newemail' => 'Elektron pochtaning yangi manzili',
+'changeemail-none' => "(yo'q)",
+'changeemail-submit' => "Manzilni o'zgartirish",
+'changeemail-cancel' => 'Bekor',
 
 # Edit page toolbar
 'bold_sample' => 'Qalin matn',
 'bold_tip' => 'Qalin matn',
-'italic_sample' => 'Kursiv',
-'italic_tip' => 'Kursiv',
+'italic_sample' => 'Yotiq matn',
+'italic_tip' => 'Yotiq matn',
 'link_sample' => 'Ishorat nomi',
 'link_tip' => 'Ichki ishorat',
 'extlink_sample' => 'http://www.example.com ishorat nomi',
 'extlink_tip' => 'Tashqi ishorat (http:// prefiksini unutmang)',
 'headline_sample' => 'Sarlavha',
+'headline_tip' => '2-darajadagi sarlavha',
+'nowiki_sample' => "Bu yerga formatlash zarur bo'lmagan matnni qo'ying",
+'nowiki_tip' => "Viki-formatlashga e'tibor qilmaslik",
 'image_tip' => 'Qoʻshilgan tasvir',
-'media_tip' => 'Faylga ishorat',
+'media_tip' => 'Faylga havola',
 'sig_tip' => 'Imzoingiz va sana',
+'hr_tip' => "Yotiq (gorizontal) chiziq (ko'p ishlatmang)",
 
 # Edit pages
 'summary' => 'Qisqa izoh:',
+'subject' => 'Mavzu/sarlavha',
 'minoredit' => 'Bu kichik tahrir',
 'watchthis' => 'Sahifani kuzatish',
 'savearticle' => 'Saqlash',
 'preview' => 'Ko‘rib chiqish',
 'showpreview' => 'Ko‘rib chiqish',
+'showlivepreview' => "Tezkor ko'rib chiqish",
 'showdiff' => 'O‘zgarishlarni ko‘rsatish',
 'anoneditwarning' => "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
+'summary-preview' => "Tavsif shunday bo'ladi:",
+'subject-preview' => "Sarlavha shunday bo'ladi:",
+'blockedtitle' => 'Foydalanuvchi chetlashtirildi',
 'blockedtext' => "'''Siz (foydalanuvchi ismingiz yoki IP manzilingiz) tahrir qilishdan chetlashtirildingiz.'''
 
 Sizni $1 chetlashtirdi. Bunga sabab: ''$2''.
 
 * Chetlashtirish muddati boshi: $8
 * Chetlashtirish muddati yakuni: $6
+* Chetlashtirish maqsadi: $7
 
 Siz $1 yoki boshqa [[{{MediaWiki:Grouppage-sysop}}|administrator]] bilan bogʻlanib, arz qilishingiz mumkin.
 You cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
 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",
+'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.',
-'clearyourcache' => "'''Etibor bering:''' O'zgartirishlaringiz ko'rish uchun, yangi moslamalaringizning saqlashdan keyin, brauser keshini tozalash kerak:<br />
-'''Mozilla / Firefox:''' ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari:''' ''Cmd+Shift+R'', '''Konqueror:''' ''F5'', '''Opera:''' ''Tools → Preferences'' orqali keshni tozalang.",
+'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
+* '''Internet Explorer:''' ''Ctrl''ni bosgan holda, ''Yangilash''ni bosing, yoki ''Ctrl-F5''ni bosing
+* '''Opera:''' ''Asboblar → Moslamalar'' menyusidan keshni tozalashni tanlang",
+'updated' => '(Yangilandi)',
+'note' => "'''Izoh:'''",
 'previewnote' => "'''Bu shunchaki ko‘rib chiqish. O‘zgartirishlar hali saqlangani yo‘q!'''",
 'editing' => '$1 tahrirlanmoqda',
 'editingsection' => '$1 (boʻlim) tahrirlanmoqda',
@@ -360,20 +520,45 @@ Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini
 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).
 '''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}}:",
+'templatesusedsection' => "Ushbu bo'limda foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
 'template-protected' => '(himoyalangan)',
 'template-semiprotected' => '(yarim-himoyalangan)',
-'nocreatetext' => 'Ushbu sayt yangi sahifa yaratishni taqiqlagan.
+'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.",
+'sectioneditnotsupported-title' => "Bo'limlarni tahrirlash imkoniyati yo'q",
+'sectioneditnotsupported-text' => "Ushbu sahifada bo'limlarni tahrirlash imkoniyati yo'q.",
+'permissionserrors' => 'Ruxsat huquqida xato',
+'permissionserrorstext-withaction' => "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga ko'ra '''$2'''ga ruxsat mavjud emas:",
 'recreate-moveddeleted-warn' => "'''Diqqat: Siz avval yoʻqotilgan sahifani yana yaratmoqchisiz.'''
 
 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.",
+'log-fulllog' => "Qaydlarni to'liq ko'rish",
+'edit-conflict' => "Tashrirlash to'qnashuvi.",
+'defaultmessagetext' => "Boshlang'ich matn",
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''Diqqat:''' Qo'llanilayotgan andozalarning jami hajmi juda katta.
+Ayrim andozalar qo'shilmaydi.",
+'post-expand-template-inclusion-category' => "Qo'llaniladigan andozalarning mumkin bo'lgan miqdoridan oshgan sahifalar",
+'post-expand-template-argument-category' => "Andozalarning to'ldirilmagan o'zgaruvchilariga ega sahifalar",
+
+# "Undo" feature
+'undo-summary' => '[[Special:Contributions/$2|$2]] tomonidan qilingan $1 tahriri qaytarildi ([[User talk:$2|mun.]])',
 
 # History pages
 'viewpagelogs' => 'Ushbu sahifaga doir qaydlarni koʻrsat',
+'nohistory' => "Ushbu sahifa uchun o'zgarishlar tarixi mavjud emas.",
 'currentrev' => 'Hozirgi koʻrinishi',
 'currentrev-asof' => '$1dagi, joriy koʻrinishi',
 'revisionasof' => '$1 paytdagi koʻrinishi',
+'revision-info' => '$1; $2 dagi versiya',
 'previousrevision' => '←Avvalgi koʻrinishi',
 'nextrevision' => 'Yangiroq koʻrinishi→',
 'currentrevisionlink' => 'Hozirgi koʻrinishi',
@@ -385,7 +570,7 @@ Qulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
 'histlegend' => 'Farqlar: solishtirish uchun kerakli radiobokslarni belgilang va pastdagi tugmani yoki Enterni bosing.<br />
 Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 (oxirgi) = avvalgi koʻrinish bilan farq, k = kichkina tahrir.',
-'history-fieldset-title' => 'Tarixni koʻr',
+'history-fieldset-title' => 'Tarixni koʻrish',
 'history-show-deleted' => 'Faqat o‘chirilganlari',
 'histfirst' => 'Eng avvalgi',
 'histlast' => 'Eng soʻnggi',
@@ -393,20 +578,53 @@ 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-item-nocomment' => '$1 $2 da',
 
 # Revision deletion
-'rev-delundel' => 'koʻrsat/yashir',
+'rev-deleted-comment' => "(tahrir izohi o'chirildi)",
+'rev-deleted-user' => "(ishtirokchi ismi o'chirildi)",
+'rev-deleted-event' => "(qayd yozuvi o'chirildi)",
+'rev-delundel' => 'koʻrsatish/yashirish',
 'rev-showdeleted' => 'koʻrsatish',
+'revdelete-show-file-submit' => 'Ha',
+'revdelete-hide-text' => 'Sahifaning ushbu versiyasi matnini yashirish',
+'revdelete-radio-same' => "(o'zgartirilmasin)",
+'revdelete-radio-set' => 'Ha',
+'revdelete-radio-unset' => "Yo'q",
 'revdelete-log' => 'Sabab:',
+'revdel-restore' => "Ko'rinuvchanlikni o'zgartirish",
+'revdel-restore-deleted' => "o'chirilgan versiyalar",
+'revdel-restore-visible' => "ko'rinuvchan versiyalar",
 'revdelete-otherreason' => 'Boshqa/qoʻshimcha sabab:',
 'revdelete-reasonotherlist' => 'Boshqa sabab',
 
+# History merging
+'mergehistory' => 'Tahrirlar tarixlarini birlashtirish',
+'mergehistory-box' => 'Ikkita sahifa tahrirlari tarixini birlashtirish:',
+'mergehistory-from' => 'Manba sahifa:',
+'mergehistory-into' => "Mo'ljal sahifa:",
+'mergehistory-list' => 'Birlashtiriladigan tahrirlar tarixi',
+'mergehistory-go' => "Birlashtiriladigan tahrirlarni ko'rsatish",
+'mergehistory-submit' => 'Tahrirlarni birlashtirish',
+'mergehistory-reason' => 'Sabab:',
+
+# Merge log
+'mergelog' => 'Birlashtirish qaydlari',
+'pagemerge-logentry' => "[[$1]] va [[$2]]lar birlashtirildi ($3 gacha bo'lgan versiyalar)",
+'revertmerge' => "Bo'lish",
+
 # Diffs
-'history-title' => '"$1"ning 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)',
 'lineno' => 'Qator $1:',
 'compareselectedversions' => 'Tanlangan versiyalarni solishtir',
-'editundo' => 'qaytar',
+'showhideselectedversions' => "Tanlangan versiyalarni ko'rsatish/yashirish",
+'editundo' => 'qaytarish',
+'diff-multi' => "({{PLURAL:$2|$2 ta foydalanuvching}} {{PLURAL:$1|$1 ta oraliq versiyasi|$1 ta oraliq versiyalari}} ko'rsatilmadi)",
 
 # Search results
 'searchresults' => 'Qidiruv natijalari',
@@ -414,71 +632,112 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'searchresulttext' => "{{SITENAME}}da qidirish haqida qo'shimcha ma'lumotga ega bo'lishini xoxlasangiz, [[{{MediaWiki:Helppage}}|{{SITENAME}}da qidiruv]] sahifasini o'qing.",
 'searchsubtitle' => '\'\'\'[[:$1]]\'\'\'ni qidirdingiz ([[Special:Prefixindex/$1|"$1" bilan boshlanadigan sahifalar]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"ga bogʻlangan sahifalar]])',
 'searchsubtitleinvalid' => "'''$1'''ni qidirdingiz",
+'toomanymatches' => "Juda ko'p o'xshashliklar topildi, iltimos, boshqa so'rov bilan urinib ko'ring",
+'titlematches' => 'Sahifalar nomlaridagi mos kelishlar',
 'notitlematches' => 'Bunday sarlavha topilmadi',
+'textmatches' => 'Sahifalar matnlaridagi mos kelishlar',
 'notextmatches' => 'Bunday matn topilmadi',
-'prevn' => 'oldingi $1',
+'prevn' => 'oldingi {{PLURAL:$1|$1}}',
 'nextn' => 'keyingi {{PLURAL:$1|$1}}',
 'prevn-title' => 'Avvalgi $1 {{PLURAL:$1|natija|natijalar}}',
 'nextn-title' => 'Keyingi $1 {{PLURAL:$1|natija|natijalar}}',
-'shown-title' => 'Har sahifada $1 natija koʻrsat',
+'shown-title' => 'Sahifada $1 ta {{PLURAL:$1|natija}} koʻrsatish',
 'viewprevnext' => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Qidiruv shartlari',
 'searchmenu-exists' => "'''Ushbu vikida \"[[:\$1]]\" nomli sahifa mavjud.'''",
-'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
+'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifasini yarat!'''",
 'searchhelp-url' => 'Help:Mundarija',
+'searchmenu-prefix' => "[[Special:PrefixIndex/$1|Ushbu prefiks mavjud bo'lgan sahifalarni ko'rsatish]]",
 'searchprofile-articles' => 'Asosiy sahifalar',
-'searchprofile-project' => 'Yordam va proekt sahifalari.',
+'searchprofile-project' => 'Yordam va loyiha sahifalari',
 'searchprofile-images' => 'Multimediya',
 'searchprofile-everything' => 'Har yerda',
-'searchprofile-advanced' => 'Kengaytirilgan',
-'searchprofile-articles-tooltip' => '$1da qidir',
-'searchprofile-project-tooltip' => '$1da qidir',
+'searchprofile-advanced' => "Qo'shimcha",
+'searchprofile-articles-tooltip' => '$1da qidirish',
+'searchprofile-project-tooltip' => '$1da qidirish',
 'searchprofile-images-tooltip' => 'Fayllarni qidir',
-'search-result-size' => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
+'searchprofile-everything-tooltip' => "Barcha sahifalardan (munozara sahifalarini qo'shgan holda) qidirish",
+'searchprofile-advanced-tooltip' => 'Belgilangan nomfazolardan qidirish',
+'search-result-size' => '$1 ({{PLURAL:$2|1 ta soʻz|$2 ta soʻz}})',
+'search-result-category-size' => "$1 {{PLURAL:$1|a'zo|a'zolar}} ($2 {{PLURAL:$2|ostturkum|ostturkumlar}}, $3 {{PLURAL:$3|fayl|fayllar}}).",
+'search-result-score' => 'Relavantlik: $1%.',
 'search-redirect' => '(yoʻnaltirish $1)',
 'search-section' => '($1 boʻlimi)',
 'search-suggest' => 'Balki buni nazarda tutgandirsiz: $1',
+'search-interwiki-caption' => 'Aloqador loyihalar',
 'search-interwiki-default' => '$1 natijalar:',
+'search-interwiki-more' => '(yana)',
+'search-relatedarticle' => "Bog'liq",
+'mwsuggest-disable' => "AJAX-takliflarini o'chirish",
 'searcheverything-enable' => 'Barcha nomfazolarda qidir',
+'searchrelated' => "bog'langan",
 'searchall' => 'barchasi',
-'showingresults' => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
+'showingresults' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
+'showingresultsnum' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
 'showingresultsheader' => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
 'search-nonefound' => 'Talabga javob beradigan natija topilmadi.',
 'powersearch' => 'Qidiruv',
 'powersearch-legend' => 'Kengaytirilgan qidiruv',
 'powersearch-ns' => 'Bu nom-fazolarda izla:',
-'powersearch-redir' => 'Yoʻnaltirishlarni koʻrsat',
-'powersearch-field' => 'Qidir',
+'powersearch-redir' => 'Qayta yoʻnaltirishlarni koʻrsatish',
+'powersearch-field' => 'Qidiruv',
+'powersearch-togglelabel' => 'Belgilash:',
+'powersearch-toggleall' => 'Hammasini',
+'powersearch-togglenone' => 'Hech qaysini',
+'search-external' => 'Tashqi qidiruv',
+
+# Quickbar
+'qbsettings' => 'Saytda harakatlanish darchasi',
+'qbsettings-none' => "Ko'rsatmaslik",
+'qbsettings-fixedleft' => "Qo'zg'almas chap",
+'qbsettings-fixedright' => "Qo'zg'almas o'ng",
+'qbsettings-floatingleft' => 'Suzuvchi chap',
+'qbsettings-floatingright' => "Suzuvchi o'ng",
 
 # Preferences page
 'preferences' => 'Moslamalar',
 'mypreferences' => 'Moslamalarim',
 'prefs-edits' => 'Tahrirlar soni',
+'prefsnologin' => "Siz tizimda o'zingizni tanitmadingiz",
 'changepassword' => 'Maxfiy soʻzni oʻzgartirish',
 'prefs-skin' => 'Tashqi ko‘rinishi',
+'skin-preview' => 'Ko‘rib chiqish',
 'datedefault' => 'Farqi yoʻq',
+'prefs-beta' => 'Beta-imkoniyatlar',
 'prefs-datetime' => 'Sana va vaqt',
+'prefs-labs' => 'Tajribaviy imkoniyatlar',
+'prefs-user-pages' => 'Foydalanuvchi sahifalari',
 'prefs-personal' => 'Shaxsiy ma’lumotlar',
 'prefs-rc' => 'Yangi o‘zgartirishlar',
 'prefs-watchlist' => "Kuzatuv ro'yxati",
-'prefs-watchlist-days-max' => 'Eng ko‘pi $1 {{PLURAL:$1|kun|kun}}',
+'prefs-watchlist-days' => 'Kunlar soni:',
+'prefs-watchlist-days-max' => 'Eng ko‘pi bilan $1 {{PLURAL:$1|kun}}',
+'prefs-watchlist-edits-max' => 'Eng katta son: 1000',
 'prefs-misc' => 'Boshqa moslamalar',
 'prefs-resetpass' => 'Maxfiy soʻzni oʻzgartirish',
 'prefs-changeemail' => 'E-mail manzilingizni o‘zgartirish',
+'prefs-email' => 'Elektron pochta moslamalari',
 'prefs-rendering' => 'Tashqi ko‘rinishi',
 'saveprefs' => 'Saqlash',
 'resetprefs' => 'Bekor qilish',
-'restoreprefs' => 'Barcha moslamalarni dastlabki holiga qaytar',
+'restoreprefs' => 'Barcha moslamalarni dastlabki holatiga qaytarish',
 'prefs-editing' => 'Tahrirlash',
 'prefs-edit-boxsize' => 'Tahrir oynasining oʻlchami',
 'rows' => 'Qatorlar soni:',
 'columns' => 'Ustunlar soni:',
-'searchresultshead' => 'Qidiruv natijalari',
+'searchresultshead' => 'Qidiruv',
+'resultsperpage' => 'Sahifaga topilgan yozuvlar miqdori',
+'stub-threshold' => '<a href="#" class="stub">Tayyorlanmaga havolalar</a>ni rasmiylashtirish uchun boshlash ostonasi (baytlarda).',
+'stub-threshold-disabled' => "O'chirib qo'yilgan",
 'recentchangesdays-max' => 'Eng koʻpi $1 kun',
 'recentchangescount' => 'Sukut boʻyicha koʻrsatiladigan tahrirlar soni',
 'timezonelegend' => 'Vaqt mintaqangiz:',
 'localtime' => 'Mahalliy vaqt:',
+'timezoneuseserverdefault' => 'Server moslamalaridan foydalanish ($1)',
+'timezoneuseoffset' => "Boshqa (siljishni ko'rsating)",
+'timezoneoffset' => 'Siljish¹:',
 'servertime' => 'Server vaqti:',
+'guesstimezone' => "Brauzerdan to'ldirish",
 'timezoneregion-africa' => 'Afrika',
 'timezoneregion-america' => 'Amerika',
 'timezoneregion-antarctica' => 'Antarktika',
@@ -490,10 +749,14 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'timezoneregion-indian' => 'Hind okeani',
 'timezoneregion-pacific' => 'Tinch okeani',
 'allowemail' => 'Boshqa foydalanuvchilardan elektron xat olishga ruxsat berish',
-'prefs-searchoptions' => 'Qidiruv shartlari',
+'prefs-searchoptions' => 'Qidiruv',
 'prefs-namespaces' => 'Nomfazolar',
-'defaultns' => 'Aks holda quyidagi nomfazolarda qidir:',
+'defaultns' => 'Aks holda quyidagi nomfazolardan qidirish:',
+'default' => "boshlang'ich",
 'prefs-files' => 'Fayllar',
+'prefs-custom-css' => 'Shaxsiy CSS',
+'prefs-custom-js' => 'Shaxsiy JavaScript',
+'prefs-common-css-js' => "Barcha tashqi ko'rinishlar uchun umumiy CSS/JavaScript:",
 'prefs-emailconfirm-label' => 'Elektron pochta manzilini tasdiqlash:',
 'prefs-textboxsize' => 'Tahrir oynasining oʻlchami',
 'youremail' => 'E-mail:',
@@ -503,15 +766,24 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'prefs-registration' => 'Hisob ochilgan vaqt',
 'yourrealname' => 'Haqiqiy ism *:',
 'yourlanguage' => 'Til:',
+'yourvariant' => 'Tarkib tili varianti',
+'prefs-help-variant' => "Viki sahifalari matnini tasvirlash uchun ma'qul ko'rilgan til varianti",
 'yournick' => 'Yangi imzo',
 'prefs-help-signature' => 'Munozara sahifalarida imzo "<nowiki>~~~~</nowiki>" orqali qoʻyiladi (u sizning imzoingiz va joriy vaqtga aylantiriladi).',
 'yourgender' => 'Jinsi:',
 'gender-unknown' => 'Koʻrsatilmagan',
 'gender-male' => 'Erkak',
 'gender-female' => 'Ayol',
+'prefs-help-gender' => "Ixtiyoriy: Foydalanuvching jinsiga bog'liq bo'lgan loyihaning ayrim xabarlarida foydalaniladi.
+Ushbu axborot ommaviy xususiyatga ega bo'ladi.",
 'email' => 'E-mail:',
+'prefs-help-realname' => "Haqiqiy ism (ixtiyoriy maydon).
+Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini ko'rsatish uchun foydalaniladi.",
+'prefs-help-email' => "Elektron pochta manzilini ko'rsatish majburiy emas, lekin u siz maxfiy so'zni unutib qo'ysangiz kerak bo'lishi mumkin.",
+'prefs-help-email-others' => "U shuningdek, sizning elektron pochtangiz manzilini oshkora qilmasdan, boshqa ishtirokchilar bilan shaxsiy sahifangiz orqali bog'lanish imkonini ham beradi.",
 'prefs-help-email-required' => 'E-mail manzilni koʻrsatish shart emas',
 'prefs-info' => 'Asosiy maʼlumot',
+'prefs-i18n' => 'Internatsionallashtirish',
 'prefs-signature' => 'Imzo',
 'prefs-dateformat' => 'Sana formati',
 'prefs-timeoffset' => 'Vaqt farqi',
@@ -520,10 +792,17 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'prefs-advancedrendering' => 'Qoʻshimcha moslamalar',
 'prefs-advancedsearchoptions' => 'Qoʻshimcha moslamalar',
 'prefs-advancedwatchlist' => 'Qoʻshimcha moslamalar',
+'prefs-displayrc' => 'Tasvirlash moslamalari',
+'prefs-displaysearchoptions' => 'Tasvirlash moslamalari',
+'prefs-displaywatchlist' => 'Tasvirlash moslamalari',
+'prefs-diffs' => 'Versiyalar farqi',
 
 # User rights
 'userrights-groupsmember' => 'Aʼzolik:',
+'userrights-groupsmember-auto' => "Noaniq a'zo",
 'userrights-reason' => 'Sabab:',
+'userrights-changeable-col' => "Siz o'zgartirishingiz mumkin bo'lgan guruhlar",
+'userrights-unchangeable-col' => "Siz o'zgartira olmaydigan guruhlar",
 
 # Groups
 'group' => 'Guruh',
@@ -533,6 +812,14 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'group-sysop' => 'Administratorlar',
 'group-bureaucrat' => 'Rasmiyatchilar',
 'group-suppress' => 'Tekshiruvchilar',
+'group-all' => '(hamma)',
+
+'group-user-member' => '{{GENDER:$1|ishtirokchi}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|avtotasdiqlangan ishtirokchi}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|administrator}}',
+'group-bureaucrat-member' => '{{GENDER:$1|rasmiyatchi}}',
+'group-suppress-member' => '{{GENDER:$1|tekshiruvchi}}',
 
 'grouppage-user' => '{{ns:project}}:Foydalanuvchilar',
 'grouppage-autoconfirmed' => '{{ns:project}}:Tasdiqlangan foydalanuvchilar',
@@ -541,19 +828,32 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'grouppage-bureaucrat' => '{{ns:project}}:Rasmiyatchilar',
 'grouppage-suppress' => '{{ns:project}}:Tekshiruvchilar',
 
+# Rights
+'right-read' => "Sahifalarni o'qish",
+'right-edit' => 'Sahifalarni tahrirlash',
+
+# 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',
-'action-move' => 'bu sahifani koʻchir',
-'action-move-subpages' => 'Bu sahifani va uning ostsahifalarini koʻchir',
+'action-move' => 'bu sahifani koʻchirish',
+'action-move-subpages' => 'Bu sahifani va uning ostsahifalarini koʻchirish',
+'action-sendemail' => "elektron xatlar jo'natish",
 
 # Recent changes
+'nchanges' => "$1 {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
 'recentchanges' => 'Yangi o‘zgartirishlar',
+'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",
 'recentchanges-label-newpage' => 'Bu tahrir orqali yangi sahifa yaratildi',
 'recentchanges-label-minor' => 'Bu kichik tahrir',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajardi',
 'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
 'rcnote' => "Quyida $5, $4ga koʻra oxirgi {{PLURAL:$2|kun|'''$2''' kun}} davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgartirish|'''$1''' oʻzgartirishlar}} koʻrsatilgan.",
+'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
 'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
 'rcshowhidebots' => '$1 ta bot',
@@ -564,12 +864,14 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'rclinks' => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
 'diff' => 'farq',
 'hist' => 'tarix',
-'hide' => 'yashirish',
-'show' => 'koʻrsat',
+'hide' => 'Yashirish',
+'show' => 'Koʻrsatish',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
-'rc-enhanced-expand' => 'Tasfilotlarni koʻrsat (JavaScript talab qilinadi)',
-'rc-enhanced-hide' => 'Tafsilotlolarni yashir',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Tasfilotlarni koʻrsatish (JavaScript talab qilinadi)',
+'rc-enhanced-hide' => 'Tafsilotlolarni yashirish',
+'rc-old-title' => 'dastlab "$1" sifatida yaratilgan',
 
 # Recent changes linked
 'recentchangeslinked' => 'Bogʻlangan oʻzgarishlar',
@@ -579,51 +881,72 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'recentchangeslinked-noresult' => 'Berilgan davrda bogʻlangan sahifalarda oʻzgarishlar boʻlmagan.',
 'recentchangeslinked-summary' => "Ushbu maxsus sahifa unga bogʻlangan sahifalardagi soʻnggi oʻzgarishlarni koʻrsatadi. [[Special:Watchlist|Kuzatuv roʻyxatingizdagi]] sahifalar '''qalin''' qilib koʻrsatilgan.",
 'recentchangeslinked-page' => 'Sahifa nomi:',
+'recentchangeslinked-to' => "Teskarisiga, ko'rsatilgan sahifaga yo'naltirilgan sahifalardagi o'zgarishlarni ko'rish",
 
 # Upload
 'upload' => 'Fayl yuklash',
-'uploadbtn' => 'Fayl yukla',
+'uploadbtn' => 'Fayl yuklash',
 'uploaderror' => 'Yuklashda xatolik',
 'uploadlogpage' => 'Yuklash qaydlari',
+'filename' => 'Fayl nomi',
 'filedesc' => 'Qisqa izoh',
+'fileuploadsummary' => 'Qisqa izoh:',
 'filereuploadsummary' => 'Fayldagi oʻzgarishlar:',
+'filestatus' => 'Tarqatish shartlari:',
 'filesource' => 'Manba:',
-'uploadedimage' => '"[[$1]]" yuklandi',
+'uploadedfiles' => 'Yuklangan fayllar',
+'uploadedimage' => '"[[$1]]"ni yukladi',
+'overwroteimage' => '"[[$1]]"ning yangi versiyasini yukladi',
+
+'license' => 'Litsenziyalash:',
+'license-header' => 'Litsenziyalash',
 
 # Special:ListFiles
 'imgfile' => 'fayl',
 'listfiles' => 'Fayllar roʻyxati',
+'listfiles_thumb' => 'Miniatura',
 'listfiles_date' => 'Sana',
+'listfiles_name' => 'Nomi',
 'listfiles_user' => 'Foydalanuvchi',
 'listfiles_size' => 'Oʻlchami',
 'listfiles_description' => 'Taʻrif',
+'listfiles_count' => 'Versiyalar',
 
 # File description page
 'file-anchor-link' => 'Fayl',
 'filehist' => 'Fayl tarixi',
 'filehist-help' => 'Faylning biror paytdagi holatini koʻrish uchun tegishli sana/vaqtga bosingiz.',
+'filehist-deleteall' => "barini o'chirish",
 'filehist-deleteone' => 'o‘chirish',
 'filehist-revert' => 'qaytarish',
 'filehist-current' => 'joriy',
 'filehist-datetime' => 'Sana/Vaqt',
-'filehist-thumb' => 'Miniatyura',
+'filehist-thumb' => 'Miniatura',
+'filehist-thumbtext' => '$1 dagi versiya uchun tasvir',
+'filehist-nothumb' => "Miniatura yo'q",
 'filehist-user' => 'Foydalanuvchi',
 'filehist-dimensions' => 'Oʻlchamlari',
 'filehist-filesize' => 'Fayl hajmi',
 'filehist-comment' => 'Izoh',
+'filehist-missing' => 'Fayl mavjud emas',
 'imagelinks' => 'Fayllarga ishoratlar',
 'linkstoimage' => 'Bu faylga quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}} bogʻlangan:',
 'nolinkstoimage' => 'Bu faylga bogʻlangan sahifalar yoʻq.',
-'sharedupload' => 'This file is from $1 and may be used by other projects.',
+'sharedupload' => "Ushbu fayl $1dan va boshqa loyihalarda ham qo'llanilishi mumkin.",
 'sharedupload-desc-here' => 'Ushbu fayl $1dan boʻlib, boshqa loyihalarda ham ishlatilishi mumkin.
 Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
-'uploadnewversion-linktext' => 'Bu faylning yangi versiyasini yukla',
+'uploadnewversion-linktext' => 'Bu faylning yangi versiyasini yuklash',
 
 # File reversion
 'filerevert-comment' => 'Sabab:',
 
 # File deletion
 'filedelete-comment' => 'Sabab:',
+'filedelete-submit' => 'O‘chirish',
+
+# MIME search
+'mimetype' => 'MIME-tur:',
+'download' => 'yuklash',
 
 # Unused templates
 'unusedtemplates' => 'Ishlatilinmagan andozalar',
@@ -638,43 +961,55 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'disambiguationspage' => '{{ns:template}}:Disambig',
 
 # Miscellaneous special pages
-'nbytes' => '$1 bayt',
+'nbytes' => '$1 {{PLURAL:$1|bayt}}',
 'ncategories' => '$1 {{PLURAL:$1|turkum|turkumlar}}',
+'nmembers' => "$1 {{PLURAL:$1|ta a'zo}}",
 'lonelypages' => 'Yetim sahifalar',
 'uncategorizedpages' => 'Turkumlashtirilmagan sahifalar',
 'uncategorizedcategories' => 'Turkumlashtirilmagan turkumlar',
-'uncategorizedimages' => 'Kategoriyasiz tasvirlar',
+'uncategorizedimages' => 'Turkumlashtirilmagan fayllar',
 'uncategorizedtemplates' => 'Turkumlashtirilmagan andozalar',
 'unusedcategories' => 'Ishlatilinmagan turkumlar',
 'unusedimages' => 'Ishlatilinmagan fayllar',
 'wantedcategories' => 'Talab qilinayotgan turkumlar',
 'mostcategories' => 'Eng koʻp turkumli sahifalar',
+'prefixindex' => 'Prefiksli barcha sahifalar',
 'protectedpages' => 'Himoyalangan sahifalar',
 'listusers' => 'Foydalanuvchilar roʻyxati',
+'usercreated' => "$1 $2da {{GENDER:$3|ro'yxatdan o'tdi}}",
 'newpages' => 'Yangi sahifalar',
 'move' => 'Ko‘chirish',
-'movethispage' => 'Bu sahifani koʻchir',
+'movethispage' => 'Bu sahifani koʻchirish',
 'pager-newer-n' => '{{PLURAL:$1|yangiroq 1|yangiroq $1}}',
 'pager-older-n' => '{{PLURAL:$1|eskiroq 1|eskiroq $1}}',
+'suppress' => 'Bekitish',
 
 # Book sources
-'booksources' => 'Kitob manbaʻlar',
+'booksources' => 'Kitob manbalari',
+'booksources-search-legend' => "Kitob haqida ma'lumot qidirish",
 'booksources-go' => 'O‘tish',
 
 # Special:Log
+'specialloguserlabel' => 'Ijrochi:',
+'speciallogtitlelabel' => "Mo'ljal (nom yoki ishtirokchi):",
 'log' => 'Qaydlar',
-'all-logs-page' => 'Barcha qaydlar',
+'all-logs-page' => 'Barcha ochiq qaydlar',
+'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
 
 # Special:AllPages
 'allpages' => 'Barcha sahifalar',
 'alphaindexline' => '$1 dan $2 ga',
 'nextpage' => 'Keyingi sahifa ($1)',
 'prevpage' => 'Avvalgi sahifa ($1)',
-'allpagesfrom' => 'Sahifalarni koʻrsat:',
+'allpagesfrom' => 'Quyidagidan boshlanuvchi sahifalarni koʻrsatish:',
 'allarticles' => 'Barcha sahifalar',
+'allpagesprev' => 'Oldingi',
 'allpagesnext' => 'Keyingi',
-'allpagessubmit' => 'Oʻt',
-'allpagesprefix' => 'Bunday prefiksli sahifalarni koʻrsat:',
+'allpagessubmit' => 'Oʻtish',
+'allpagesprefix' => 'Shunday prefiksli sahifalarni koʻrsatish:',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => "Oxirgi versiyasini ko'rish",
 
 # Special:Categories
 'categories' => 'Turkumlar',
@@ -688,9 +1023,13 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-ns' => 'Nomfazo:',
 'linksearch-ok' => 'Qidirish',
+'linksearch-line' => '$2 ichidan $1 ga havola',
 
 # Special:ListUsers
-'listusers-submit' => 'Koʻrsat',
+'listusers-submit' => 'Koʻrsatish',
+
+# Special:Log/newusers
+'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
 
 # Special:ListGroupRights
 'listgrouprights-group' => 'Guruh',
@@ -698,66 +1037,179 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-members' => '(a’zolar ro‘yxati)',
 
 # E-mail user
-'emailuser' => 'Bu foydalanuvchiga e-maktub joʻnat',
+'emailuser' => 'Bu foydalanuvchiga e-maktub',
+'noemailtitle' => 'Elektron pochta manzili mavjud emas',
 'noemailtext' => "Bu foydalanuvchi e-mail manzil ko'rsatgani yo'q.",
+'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
+'emailusername' => 'Ishtirokchi nomi:',
+'emailusernamesubmit' => "Jo'natish",
+'email-legend' => "Boshqa {{SITENAME}} ishtirokchisiga xat jo'natish",
+'emailfrom' => 'Kimdan:',
+'emailto' => 'Kimga:',
+'emailsubject' => 'Sarlavha:',
+'emailmessage' => 'Xabar',
 'emailsend' => 'Joʻnatish',
+'emailsent' => "Xat jo'natildi",
+
+# User Messenger
+'usermessage-summary' => 'Tizimli xabar qoldirish.',
+'usermessage-editor' => 'Tizimli etkazish',
 
 # Watchlist
 'watchlist' => 'Kuzatuv roʻyxatim',
 'mywatchlist' => 'Kuzatuv roʻyxatim',
+'watchlistfor2' => '$1 $2 uchun',
 'nowatchlist' => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
+'watchnologin' => "Siz tizimda o'zingizni tanishtirmadingiz",
+'addwatch' => "Kuzatuv ro'yxatiga qo'shish",
 'addedwatchtext' => "\"[[:\$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv ro'yxatingizga]] qo'shildi. Bu sahifada va unga mos munozara sahifasida bo'ladigan kelajakdagi o'zgarishlar bu yerda ro'yxatga olinadi, hamda bu sahifa topish qulay bo'lishi uchun [[Special:RecentChanges|yangi o'zgarishlar ro'yxati]]da '''qalin''' harflar bilan ko'rsatiladi.
 
 Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmaslik\" yozuvini bosing.",
+'removewatch' => "Kuzatuv ro'yxatidan o'chirish",
 'removedwatchtext' => '"[[:$1]]" sahifasi kuzatuv ro\'yxatingizdan o\'chirildi.',
-'watch' => 'kuzatish',
+'watch' => 'Kuzatish',
 'watchthispage' => 'Sahifani kuzatish',
-'unwatch' => 'kuzatmaslik',
+'unwatch' => 'Kuzatmaslik',
+'unwatchthispage' => "Kuzatuvni to'xtatish",
+'notanarticle' => 'Maqola emas',
+'watchlist-details' => "Sizning kuzatuv ro'yxatingizda $1 {{PLURAL:$1|ta sahifa}} (munozara sahifalarini hisobga olmaganda)",
 'wlnote' => "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
 'wlshowlast' => 'Oxirgi $1 soatdagi $2 kundagi tahrirlarni ko‘rsatish. $3 tahrirlarni ko‘rsatish',
+'watchlist-options' => "Kuzatuv ro'yxati moslamalari",
+
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'Kuzatish...',
+'unwatching' => "Kuzatuv ro'yxatidan o'chirish...",
+
+'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_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.
+
+\$NEWPAGE
+
+O'zgarish bo'yicha qisqacha izoh: \$PAGESUMMARY \$PAGEMINOREDIT
+
+Tahrirlovchiga murojaat qilish:
+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.
+
+             {{grammar:genitive|{{SITENAME}}}}ning axborot berish tizimi
+
+--
+Bildirishlar moslamalarini o'zgartirish
+{{canonicalurl:{{#special:Preferences}}}}
+
+O'zingizning kuzatuv ro'yxatingiz moslamalarini o'zgartirish
+{{canonicalurl:{{#special:EditWatchlist}}}}
+
+Sizning kuzatuv ro'yxatingizdagi sahifalarni o'chirish
+\$UNWATCHURL
+
+Qayta aloqa va yordam
+{{canonicalurl:{{MediaWiki:Helppage}}}}",
 
 # Delete
+'deletepage' => "Sahifani o'chirish",
+'confirm' => 'Tasdiqlash',
 'actioncomplete' => 'Bajarildi',
 'actionfailed' => 'Jarayon amalga oshmadi',
 'deletedtext' => '"$1" yoʻqotildi.
 Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'dellogpage' => 'Yoʻqotish qaydlari',
+'deletionlog' => 'yoʻqotish qaydlari',
 'deletecomment' => 'Sabab:',
 'deleteotherreason' => 'Boshqa/qoʻshimcha sabab:',
 'deletereasonotherlist' => 'Boshqa sabab',
 
 # Rollback
-'rollbacklink' => 'eski holiga keltir',
+'rollbacklink' => 'eski holiga keltirish',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|munozara]]) tahrirlari [[User:$1|$1]] versiyasiga qaytarildi',
 
 # 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-level-sysop' => 'Faqat administratorlar uchun',
-'protect-expiry-options' => '2 soat:2 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',
+'protect-expiry-indefinite' => 'muddatsiz',
+'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:',
+'restriction-level' => 'Ruxsat etilganlik darajasi:',
+'minimum-size' => 'Eng kichik hajm',
+'maximum-size' => 'Eng katta hajm:',
+'pagesize' => '(bayt)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Tahrirlash',
+'restriction-move' => "Ko'chirish",
+'restriction-create' => 'Yaratish',
+'restriction-upload' => 'Yuklash',
+
+# Restriction levels
+'restriction-level-sysop' => "to'liq himoya",
+'restriction-level-autoconfirmed' => 'qisman himoya',
+'restriction-level-all' => 'barcha darajalar',
 
 # Undelete
-'undeletebtn' => 'Qayta tikla',
+'undelete' => "O'chirilgan sahifalarni ko'rish",
+'undeletepage' => "O'chirilgan sahifalarni ko'rish va tiklash",
+'viewdeletedpage' => "O'chirilgan sahifalarni ko'rish",
+'undelete-nodiff' => 'Oldingi versiya topilmadi.',
+'undeletebtn' => 'Tiklash',
 'undeletelink' => 'ko‘rib chiqish/tiklash',
 'undeleteviewlink' => "ko'rib chiqish",
+'undeletereset' => 'Tozalash',
+'undeleteinvert' => 'Tanlash tartibini almashtirish',
+'undeletecomment' => 'Sabab:',
+'undelete-search-title' => "O'chirilgan sahifalarni qidirish",
+'undelete-search-box' => "O'chirilgan sahifalarni qidirish",
+'undelete-search-prefix' => "Bundan boshlangan sahifalarni ko'rsatish:",
+'undelete-search-submit' => 'Qidirish',
+'undelete-show-file-submit' => 'Ha',
 
 # Namespace form on various pages
-'namespace' => 'Soha:',
+'namespace' => 'Nomfazo:',
 'invert' => 'Tanlash tartibini almashtirish',
+'namespace_association' => "Bog'liq nomfazo",
 'blanknamespace' => '(asosiy)',
 
 # Contributions
 'contributions' => 'Foydalanuvchining hissasi',
+'contributions-title' => '$1 {{GENDER:$1|foydalanuvchisining}} hissasi',
 'mycontris' => 'Hissam',
 'contribsub2' => '$1 uchun ($2)',
+'nocontribs' => "Belgilangan shartlarga muvofiq o'zgarishlar topilmadi",
+'uctop' => '(oxirgi)',
+'month' => 'Oydan (va avvalroq)',
+'year' => 'Yildan (va avvalroq)',
 
 '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-deleted' => "o'chirilgan tahrirlar",
+'sp-contributions-uploads' => 'yuklanmalar',
+'sp-contributions-logs' => 'qaydlar',
 'sp-contributions-talk' => 'munozara',
-'sp-contributions-search' => 'Hissalarni qidir',
-'sp-contributions-username' => 'IP manzil yoki foydalanuvchi ismi:',
-'sp-contributions-submit' => 'Qidir',
+'sp-contributions-userrights' => 'foydalanuvchining huquqlarini boshqarish',
+'sp-contributions-search' => 'Hissalarni qidirish',
+'sp-contributions-username' => 'IP-manzil yoki foydalanuvchi nomi:',
+'sp-contributions-toponly' => "Faqat oxirgi versiya hisoblangan tahrirlarni ko'rsatish",
+'sp-contributions-submit' => 'Qidirish',
 
 # What links here
 'whatlinkshere' => "Bu sahifaga bog'langan sahifalar",
@@ -767,35 +1219,83 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'nolinkshere' => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
 'isredirect' => 'yoʻnaltiruvchi sahifa',
 'istemplate' => 'qoʻshimcha',
+'isimage' => 'faylli havola',
+'whatlinkshere-prev' => '{{PLURAL:$1|oldingi}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|keyingi}} $1',
 'whatlinkshere-links' => '← ishoratlar',
+'whatlinkshere-hideredirs' => "$1 qayta yo'naltirishlar",
+'whatlinkshere-hidetrans' => '$1 kiritmalar',
+'whatlinkshere-hidelinks' => '$1 havolalar',
+'whatlinkshere-hideimages' => '$1 rasmlar uchun havolalar',
 'whatlinkshere-filters' => 'Filtrlar',
 
 # Block/unblock
+'autoblockid' => 'Avtochetlashtirish #$1',
+'block' => 'Foydalanuvchini muhosara qilish',
+'unblock' => "Foydalanuvchiga yo'l ochish",
 'blockip' => 'Foydalanuvchini chetlashtir',
+'blockip-title' => 'Foydalanuvchini muhosara qilish',
+'blockip-legend' => 'Foydalanuvchini muhosara qilish',
+'ipadressorusername' => 'IP-manzil yoki foydalanuvchi nomi:',
+'ipbexpiry' => 'Tugaydi:',
+'ipbreason' => 'Sabab:',
+'ipbreasonotherlist' => 'Boshqa sabab',
+'ipbreason-dropdown' => "* Chetlashtirishning andazaviy sabablari
+** Yolg'on axborot kiritish
+** Sahifa matnini o'chirish
+** Tashqi saytlarga spam-yo'llanmalar
+** Ma'nosiz matn/axlat qo'shish
+** Tahdid, ishtirokchilarni ta'qib qilish
+** Bir necha hisob yozuvlaridan o'z manfaatlarida foydalanish
+** Ishtirokchining nomaqbul ismi",
+'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',
-'blocklink' => 'chetlashtir',
+'emailblock' => "xatlar jo'natish taqiqlandi",
+'blocklink' => 'chetlashtirish',
+'unblocklink' => "muhosarani (to'sishni) bekor qilish",
+'change-blocklink' => "Muhosarani (to'siqni) o'zgartirmoq",
 'contribslink' => 'hissasi',
 'blocklogpage' => 'Chetlashtirish 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",
 
 # Move page
 'movearticle' => "Sahifani ko'chirish",
-'movepagebtn' => 'Sahifani koʻchir',
+'movepagebtn' => 'Sahifani koʻchirish',
 'pagemovedsub' => 'Koʻchirildi',
 'movepage-moved' => '\'\'\'"$1" nomli sahifa "$2" nomli sahifaga koʻchirildi\'\'\'',
 'movelogpage' => 'Koʻchirish qaydlari',
 'movereason' => 'Sabab:',
-'revertmove' => 'qaytar',
+'revertmove' => 'qaytarish',
 
 # Export
 'export' => 'Sahifalar eksporti',
+'export-submit' => 'Eksport',
+'export-addcattext' => "Shu turkumdan sahifalarni qo'shish:",
+'export-addcat' => "Qo'shish",
+'export-addnstext' => "Shu nomfazodan sahifalarni qo'shish:",
+'export-addns' => "Qo'shish",
+'export-download' => 'Fayl sifatida saqlash',
+'export-templates' => 'Andozalarni kiritish',
 
 # Namespace 8 related
-'allmessagesname' => 'Ism',
+'allmessages' => 'Tizim xabarlari',
+'allmessagesname' => 'Nomi',
+'allmessagesdefault' => "Boshlang'ich matn",
+'allmessagescurrent' => 'Joriy xabar matni',
+'allmessages-filter-all' => 'Barcha',
+'allmessages-language' => 'Til:',
+'allmessages-filter-submit' => 'Oʻtish',
 
 # Thumbnails
 'thumbnail-more' => 'Kattalashtir',
+'thumbnail_error' => 'Tasvir yaratishda xatolik: $1',
+
+# Import log
+'importlogpage' => 'Import qilish qaydlari',
+'import-logentry-upload' => '"[[$1]]"ni yuklash yo\'li bilan import qildi',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Foydalanuvchi sahifangiz',
@@ -810,16 +1310,17 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-pt-logout' => 'Chiqish',
 '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 och',
+'tooltip-ca-addsection' => 'Yangi boʻlim ochish',
 '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-delete' => 'Ushbu sahifani o‘chirib tashlash',
+'tooltip-ca-unprotect' => "Ushbu sahifaning himoyasini o'zgaritish",
+'tooltip-ca-delete' => 'Ushbu sahifani o‘chirish',
 'tooltip-ca-undelete' => "Bu sahifa o'chirilmasdan oldin qilingan tahrirlarni tiklash",
 'tooltip-ca-move' => 'Bu sahifani koʻchir',
 'tooltip-ca-watch' => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
 'tooltip-ca-unwatch' => "Bu sahifani kuzatuv ro'yxatingizga o'chirish",
-'tooltip-search' => '{{SITENAME}}da qidirish',
+'tooltip-search' => '{{SITENAME}}dan qidirish',
 'tooltip-search-go' => 'Xuddi shu nomli sahifa bor boʻlsa, uni och',
 'tooltip-search-fulltext' => 'Sahifalarda ushbu matnni izlash',
 'tooltip-p-logo' => 'Bosh sahifaga o‘tish',
@@ -864,29 +1365,48 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 # Info page
 'pageinfo-title' => '"$1" sahifasi haqida maʼlumot',
-'pageinfo-header-edits' => 'Tahrirlar',
-'pageinfo-watchers' => 'Kuzatuvchilar soni',
-'pageinfo-edits' => 'Tahrirlar soni',
+'pageinfo-header-basic' => 'Asosiy maʼlumot',
+'pageinfo-header-edits' => "O'zgarishlar tarixi",
+'pageinfo-display-title' => "Ko'rsatiladigan sarlavha",
+'pageinfo-article-id' => 'Sahifa identifikatori',
+'pageinfo-watchers' => 'Sahifa kuzatuvchilari soni',
+'pageinfo-edits' => 'Jami tahrirlar soni',
+'pageinfo-toolboxlink' => 'Sahifa haqida maʼlumot',
+
+# Skin names
+'skinname-standard' => 'Klassik',
+'skinname-nostalgia' => "Sog'inch",
+'skinname-cologneblue' => "Kyolncha sog'inch",
+'skinname-myskin' => "O'zimniki",
+'skinname-chick' => "Jo'ja",
+'skinname-simple' => 'Oddiy',
+'skinname-modern' => 'Zamonaviy',
+'skinname-vector' => 'Vektor',
+
+# Patrol log
+'patrol-log-page' => 'Patrullash qaydlari',
 
 # Browsing diffs
 'previousdiff' => '← Avvalgi tahrir',
 'nextdiff' => 'Keyingi tahrir →',
 
 # Media information
-'imagemaxsize' => 'Tasvir taʼrifi sahifasidagi tasvirning oʻlchami:',
+'imagemaxsize' => "Tasvir oʻlchamining chegarasi:<br />
+''(fayl taʼrifi sahifasi uchun)''",
 'thumbsize' => 'Tasvirning kichiklashtirilgan versiyasining oʻlchami:',
 'file-info-size' => '$1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4',
 'file-nohires' => 'Bundan kattaroq tasvir yoʻq.',
 'svg-long-desc' => 'SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3',
-'show-big-image' => 'Asl hajmdagi tasvir',
+'show-big-image' => "To'liq hajmdagi tasvir",
 
 # Special:NewFiles
+'noimages' => 'Tasvir mavjud emas.',
 'ilsubmit' => 'Qidirish',
 
 # Metadata
 'metadata' => 'Metama’lumot',
-'metadata-expand' => 'Batafsil axborot koʻrsat',
-'metadata-collapse' => 'Batafsil axborotni yashir',
+'metadata-expand' => 'Batafsil axborot koʻrsatisg',
+'metadata-collapse' => 'Batafsil axborotni yashirish',
 
 # EXIF tags
 'exif-imagewidth' => 'Eni',
@@ -930,7 +1450,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'namespacesall' => 'Barchasi',
 'monthsall' => 'barchasi',
 
-'unit-pixel' => 'piksel',
+'unit-pixel' => ' piksel',
 
 # Multipage image navigation
 'imgmultipageprev' => '← oldingi sahifa',
@@ -947,28 +1467,44 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'autoredircomment' => '[[$1]]ga yoʻnaltirildi',
 'autosumm-new' => '"$1" yozuvi orqali yangi sahifa yaratildi',
 
+# Size units
+'size-bytes' => '$1 bayt',
+
 # Watchlist editing tools
+'watchlisttools-view' => "Muhim o'zgarishlarni ko'rish",
 'watchlisttools-edit' => 'Kuzatuv roʻyxatimni koʻrish/oʻzgartirish',
 'watchlisttools-raw' => 'Kuzatuv roʻyxatimni tahrirlash',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|munozara]])',
 
+# Core parser functions
+'duplicate-defaultsort' => "'''Diqqat:''' \"\$2\" boshlang'ich saralash kaliti oldingi \"\$1\" boshlang'ich saralash kalitini qayta aniqlayapti.",
+
 # Special:Version
 'version-specialpages' => 'Maxsus sahifalar',
 
 # Special:SpecialPages
 'specialpages' => 'Maxsus sahifalar',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|nishonlar]] filtri:',
+
 # HTML forms
 'htmlform-reset' => 'Oʻzgarishlarni bekor qilish',
+'htmlform-selectorother-other' => 'Boshqa',
 
 # New logging system
 'logentry-move-move' => '$1 $3 sahifasini $4ga koʻchirdi',
+'logentry-newusers-newusers' => '$1 ishtirokchisining hisob yozuvi yaratildi',
+'logentry-newusers-create' => '$1 ishtirokchisining hisob yozuvi yaratildi',
 
 # Feedback
 'feedback-close' => 'Bajarildi',
 
+# Search suggestions
+'searchsuggest-search' => 'Qidiruv',
+
 # API errors
 'api-error-unknown-code' => 'Noaniq xato: "$1".',
 'api-error-unknownerror' => 'Noaniq xato: "$1".',
index b8b41a4..1848d6f 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 $magicWords = array(
-       'redirect'                => array( '0', '#VARDA', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#VARDA', '#RINVIA', '#RINVIO', '#RIMANDO', '#REDIRECT' ),
 );
 
 $fallback = 'it';
@@ -548,7 +548,7 @@ L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 # Login and logout pages
 'logouttext' => "'''Te sì 'ndà fora da la to utensa.'''
 
-Te poli 'ndar vanti doparando {{SITENAME}} come utente anonimo o se nò [[Special:UserLogin|entrar da novo]], col stesso nome utente o uno difarente.
+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! ==
 
@@ -1139,8 +1139,6 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.',
 'search-interwiki-caption' => 'Projeti fradei',
 'search-interwiki-default' => 'Risultati da $1:',
 'search-interwiki-more' => '(altro)',
-'search-mwsuggest-enabled' => 'con sujerimenti',
-'search-mwsuggest-disabled' => 'sensa sujerimenti',
 'search-relatedarticle' => 'Ligà',
 'mwsuggest-disable' => 'Disabilita sugerimenti AJAX',
 'searcheverything-enable' => 'Serca in tuti quanti i namespace',
@@ -3378,4 +3376,8 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'logentry-newusers-autocreate' => "L'utensa $1 xè stà creà automategamente",
 'newuserlog-byemail' => 'password spedìa par e-mail',
 
+# Search suggestions
+'searchsuggest-search' => 'Serca',
+'searchsuggest-containing' => 'che contien...',
+
 );
index 5ffdd28..9a25185 100644 (file)
@@ -70,20 +70,20 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'img_right'               => array( '1', 'oiged', 'paremal', 'right' ),
-       'img_left'                => array( '1', 'hura', 'vasakul', 'left' ),
-       'img_none'                => array( '1', 'eile', 'tühi', 'none' ),
-       'img_width'               => array( '1', '$1piks', '$1px' ),
-       'img_border'              => array( '1', 'röun', 'ääris', 'border' ),
-       'img_top'                 => array( '1', 'üläh', 'top' ),
-       'img_middle'              => array( '1', 'kesk', 'middle' ),
-       'img_bottom'              => array( '1', 'ala', 'bottom' ),
-       'sitename'                => array( '1', 'SAITANNIMI', 'KOHANIMI', 'SITENAME' ),
-       'grammar'                 => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'SUGU:', 'GENDER:' ),
-       'plural'                  => array( '0', 'ÄILUGU:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'TÄUZ\'URL:', 'KOGUURL:', 'FULLURL:' ),
-       'index'                   => array( '1', '__INDEKS__', 'INDEKSIGA', '__INDEX__' ),
+       'img_right'                 => array( '1', 'oiged', 'paremal', 'right' ),
+       'img_left'                  => array( '1', 'hura', 'vasakul', 'left' ),
+       'img_none'                  => array( '1', 'eile', 'tühi', 'none' ),
+       'img_width'                 => array( '1', '$1piks', '$1px' ),
+       'img_border'                => array( '1', 'röun', 'ääris', 'border' ),
+       'img_top'                   => array( '1', 'üläh', 'top' ),
+       'img_middle'                => array( '1', 'kesk', 'middle' ),
+       'img_bottom'                => array( '1', 'ala', 'bottom' ),
+       'sitename'                  => array( '1', 'SAITANNIMI', 'KOHANIMI', 'SITENAME' ),
+       'grammar'                   => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'SUGU:', 'GENDER:' ),
+       'plural'                    => array( '0', 'ÄILUGU:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'TÄUZ\'URL:', 'KOGUURL:', 'FULLURL:' ),
+       'index'                     => array( '1', '__INDEKS__', 'INDEKSIGA', '__INDEX__' ),
 );
 
 $messages = array(
@@ -471,7 +471,7 @@ Sü om "\'\'$2\'\'".',
 # Login and logout pages
 'logouttext' => "'''Tö olet lähtnuded sistemaspäi.'''
 
-Sab jatkta rad {{SITENAME}}-saital anonimižikš, vai [[Special:UserLogin|kirjutagatoiš udes]] sil-žo vai toižel kävutajan nimel.
+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.
@@ -954,8 +954,6 @@ Tö ei voigoi kävutada sidä.',
 'search-interwiki-caption' => 'Heimolaižed projektad',
 'search-interwiki-default' => "$1 rezul'tatad:",
 'search-interwiki-more' => '(völ)',
-'search-mwsuggest-enabled' => 'ozuta taričendad',
-'search-mwsuggest-disabled' => 'taričendoita',
 'search-relatedarticle' => 'Sidotud lehtpoled',
 'mwsuggest-disable' => 'Ala ozuta AJAX-taričendoid',
 'searcheverything-enable' => 'Ectä kaikiš nimiavarusiš',
@@ -2282,7 +2280,6 @@ Ei ole pordaigašt failhodrad.',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptan kodvmine',
-'javascripttest-disabled' => 'Nece funkcii ei ole kävutamas neciš vikiš.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => "Teiden kävutajan lehtpol'",
@@ -3061,6 +3058,10 @@ Kävutagat normaline ezikacund.',
 'feedback-error3' => 'Petuz. API ei anda vastust',
 'feedback-close' => 'Vaumiž',
 
+# Search suggestions
+'searchsuggest-search' => 'Ectä',
+'searchsuggest-containing' => 'mülütajad...',
+
 # API errors
 'api-error-empty-file' => "Teil oigetud fail om pall'az.",
 'api-error-filename-tooshort' => 'Lühudahk failannimi.',
index fe75596..ae36f9c 100644 (file)
@@ -157,100 +157,102 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#đổi', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__KHÔNGMỤCMỤC__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__KHÔNGALBUM__', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '__LUÔNMỤCLỤC__', '__FORCETOC__' ),
-       'toc'                     => array( '0', '__MỤCLỤC__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__KHÔNGSỬAMỤC__', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', 'THÁNGNÀY', 'THÁNGNÀY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', 'THÁNGNÀY1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', 'TÊNTHÁNGNÀY', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'     => array( '1', 'TÊNDÀITHÁNGNÀY', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'      => array( '1', 'TÊNNGẮNTHÁNGNÀY', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', 'NGÀYNÀY', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', 'NGÀYNÀY2', 'CURRENTDAY2' ),
-       'currentdayname'          => array( '1', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
-       'currentyear'             => array( '1', 'NĂMNÀY', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', 'GIỜNÀY', 'CURRENTTIME' ),
-       'localmonth'              => array( '1', 'THÁNGĐỊAPHƯƠNG', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'             => array( '1', 'THÁNGĐỊAPHƯƠNG1', 'LOCALMONTH1' ),
-       'localmonthname'          => array( '1', 'TÊNTHÁNGĐỊAPHƯƠNG', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'        => array( '1', 'THÁNGĐỊAPHƯƠNGTẮT', 'LOCALMONTHABBREV' ),
-       'localday'                => array( '1', 'NGÀYĐỊAPHƯƠNG', 'LOCALDAY' ),
-       'localday2'               => array( '1', 'NGÀYĐỊAPHƯƠNG2', 'LOCALDAY2' ),
-       'localdayname'            => array( '1', 'TÊNNGÀYĐỊAPHƯƠNG', 'LOCALDAYNAME' ),
-       'localyear'               => array( '1', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
-       'localtime'               => array( '1', 'GIỜĐỊAPHƯƠNG', 'LOCALTIME' ),
-       'numberofpages'           => array( '1', 'SỐTRANG', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'SỐBÀI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', 'SỐTẬPTIN', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', 'TÊNTRANG', 'PAGENAME' ),
-       'pagenamee'               => array( '1', 'TÊNTRANG2', 'PAGENAMEE' ),
-       'namespace'               => array( '1', 'KHÔNGGIANTÊN', 'NAMESPACE' ),
-       'talkspace'               => array( '1', 'KGTTHẢOLUẬN', 'TALKSPACE' ),
-       'subjectspace'            => array( '1', 'KGTNỘIDUNG', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'            => array( '1', 'TÊNTRANGĐỦ', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'TÊNTRANGPHỤ', 'SUBPAGENAME' ),
-       'basepagename'            => array( '1', 'TÊNTRANGGỐC', 'BASEPAGENAME' ),
-       'talkpagename'            => array( '1', 'TÊNTRANGTHẢOLUẬN', 'TALKPAGENAME' ),
-       'subjectpagename'         => array( '1', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'msg'                     => array( '0', 'NHẮN:', 'MSG:' ),
-       'subst'                   => array( '0', 'THẾ:', 'SUBST:' ),
-       'msgnw'                   => array( '0', 'NHẮNMỚI:', 'MSGNW:' ),
-       'img_thumbnail'           => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'phải', 'right' ),
-       'img_left'                => array( '1', 'trái', 'left' ),
-       'img_none'                => array( '1', 'không', 'none' ),
-       'img_center'              => array( '1', 'giữa', 'center', 'centre' ),
-       'img_framed'              => array( '1', 'khung', 'framed', 'enframed', 'frame' ),
-       'img_page'                => array( '1', 'trang=$1', 'trang $1', 'page=$1', 'page $1' ),
-       'img_upright'             => array( '1', 'đứng', 'đứng=$1', 'đứng $1', 'upright', 'upright=$1', 'upright $1' ),
-       'img_link'                => array( '1', 'liên_kết=$1', 'link=$1' ),
-       'int'                     => array( '0', 'NỘI:', 'INT:' ),
-       'sitename'                => array( '1', 'TÊNMẠNG', 'SITENAME' ),
-       'ns'                      => array( '0', 'KGT:', 'NS:' ),
-       'localurl'                => array( '0', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ),
-       'articlepath'             => array( '0', 'LỐIBÀI', 'ARTICLEPATH' ),
-       'server'                  => array( '0', 'MÁYCHỦ', 'SERVER' ),
-       'servername'              => array( '0', 'TÊNMÁYCHỦ', 'SERVERNAME' ),
-       'scriptpath'              => array( '0', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
-       'grammar'                 => array( '0', 'NGỮPHÁP:', 'GRAMMAR:' ),
-       'gender'                  => array( '0', 'GIỐNG:', 'GENDER:' ),
-       'notitleconvert'          => array( '0', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'        => array( '0', '__KHÔNGCHUYỂNNỘIDUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'             => array( '1', 'TUẦNNÀY', 'CURRENTWEEK' ),
-       'localweek'               => array( '1', 'TUẦNĐỊAPHƯƠNG', 'LOCALWEEK' ),
-       'revisionid'              => array( '1', 'SỐBẢN', 'REVISIONID' ),
-       'revisionday'             => array( '1', 'NGÀYBẢN', 'REVISIONDAY' ),
-       'revisionday2'            => array( '1', 'NGÀYBẢN2', 'REVISIONDAY2' ),
-       'revisionmonth'           => array( '1', 'THÁNGBẢN', 'REVISIONMONTH' ),
-       'revisionmonth1'          => array( '1', 'THÁNGBẢN1', 'REVISIONMONTH1' ),
-       'revisionyear'            => array( '1', 'NĂMBẢN', 'REVISIONYEAR' ),
-       'plural'                  => array( '0', 'SỐNHIỀU:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'URLĐỦ:', 'FULLURL:' ),
-       'newsectionlink'          => array( '1', '__LIÊNKẾTMỤCMỚI__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '__KHÔNGLIÊNKẾTMỤCMỚI__', '__NONEWSECTIONLINK__' ),
-       'currentversion'          => array( '1', 'BẢNNÀY', 'CURRENTVERSION' ),
-       'urlencode'               => array( '0', 'MÃHÓAURL:', 'URLENCODE:' ),
-       'language'                => array( '0', '#NGÔNNGỮ:', '#LANGUAGE:' ),
-       'contentlanguage'         => array( '1', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'        => array( '1', 'CỠKHÔNGGIANTÊN:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'          => array( '1', 'SỐQUẢNLÝ', 'NUMBEROFADMINS' ),
-       'formatnum'               => array( '0', 'PHÂNCHIASỐ', 'FORMATNUM' ),
-       'defaultsort'             => array( '1', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                => array( '0', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
-       'tag'                     => array( '0', 'thẻ', 'tag' ),
-       'hiddencat'               => array( '1', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
-       'pagesincategory'         => array( '1', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                => array( '1', 'CỠTRANG', 'PAGESIZE' ),
-       'numberingroup'           => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'          => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       'redirect'                  => array( '0', '#đổi', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__KHÔNGMỤCMỤC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__KHÔNGALBUM__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__LUÔNMỤCLỤC__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__MỤCLỤC__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__KHÔNGSỬAMỤC__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'THÁNGNÀY', 'THÁNGNÀY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'THÁNGNÀY1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TÊNTHÁNGNÀY', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TÊNDÀITHÁNGNÀY', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TÊNNGẮNTHÁNGNÀY', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NGÀYNÀY', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NGÀYNÀY2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NĂMNÀY', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'GIỜNÀY', 'CURRENTTIME' ),
+       'localmonth'                => array( '1', 'THÁNGĐỊAPHƯƠNG', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'THÁNGĐỊAPHƯƠNG1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'TÊNTHÁNGĐỊAPHƯƠNG', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'THÁNGĐỊAPHƯƠNGTẮT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'NGÀYĐỊAPHƯƠNG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'NGÀYĐỊAPHƯƠNG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'TÊNNGÀYĐỊAPHƯƠNG', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'GIỜĐỊAPHƯƠNG', 'LOCALTIME' ),
+       'numberofpages'             => array( '1', 'SỐTRANG', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'SỐBÀI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'SỐTẬPTIN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'TÊNTRANG', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'TÊNTRANG2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'KHÔNGGIANTÊN', 'NAMESPACE' ),
+       'talkspace'                 => array( '1', 'KGTTHẢOLUẬN', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'KGTNỘIDUNG', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'TÊNTRANGĐỦ', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'TÊNTRANGPHỤ', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'TÊNTRANGGỐC', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'TÊNTRANGTHẢOLUẬN', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'msg'                       => array( '0', 'NHẮN:', 'MSG:' ),
+       'subst'                     => array( '0', 'THẾ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'NHẮNMỚI:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'phải', 'right' ),
+       'img_left'                  => array( '1', 'trái', 'left' ),
+       'img_none'                  => array( '1', 'không', 'none' ),
+       'img_center'                => array( '1', 'giữa', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'khung', 'framed', 'enframed', 'frame' ),
+       'img_page'                  => array( '1', 'trang=$1', 'trang $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'đứng', 'đứng=$1', 'đứng $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_link'                  => array( '1', 'liên_kết=$1', 'link=$1' ),
+       'int'                       => array( '0', 'NỘI:', 'INT:' ),
+       'sitename'                  => array( '1', 'TÊNMẠNG', 'SITENAME' ),
+       'ns'                        => array( '0', 'KGT:', 'NS:' ),
+       'localurl'                  => array( '0', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ),
+       'articlepath'               => array( '0', 'LỐIBÀI', 'ARTICLEPATH' ),
+       'server'                    => array( '0', 'MÁYCHỦ', 'SERVER' ),
+       'servername'                => array( '0', 'TÊNMÁYCHỦ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'NGỮPHÁP:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'GIỐNG:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__KHÔNGCHUYỂNNỘIDUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TUẦNNÀY', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'TUẦNĐỊAPHƯƠNG', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'SỐBẢN', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'NGÀYBẢN', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'NGÀYBẢN2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'THÁNGBẢN', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'THÁNGBẢN1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'NĂMBẢN', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'SỐNHIỀU:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URLĐỦ:', 'FULLURL:' ),
+       'displaytitle'              => array( '1', 'TÊNHIỂNTHỊ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LIÊNKẾTMỤCMỚI__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__KHÔNGLIÊNKẾTMỤCMỚI__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'BẢNNÀY', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'MÃHÓAURL:', 'URLENCODE:' ),
+       'language'                  => array( '0', '#NGÔNNGỮ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'CỠKHÔNGGIANTÊN:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'SỐQUẢNLÝ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'PHÂNCHIASỐ', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
+       'tag'                       => array( '0', 'thẻ', 'tag' ),
+       'hiddencat'                 => array( '1', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'CỠTRANG', 'PAGESIZE' ),
+       'numberingroup'             => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       'url_path'                  => array( '0', 'ĐƯỜNGDẪN', 'PATH' ),
 );
 
 $datePreferences = array(
@@ -412,11 +414,11 @@ $messages = array(
 '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  {{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 có {{PLURAL:$1||$1}} tiểu thể loại sau.',
+'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-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  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.}}',
+'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.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại hiện hành.',
 'listingcontinuesabbrev' => '(tiếp theo)',
 'index-category' => 'Trang được ghi chỉ mục',
@@ -452,7 +454,7 @@ $messages = array(
 'vector-action-protect' => 'Khóa',
 'vector-action-undelete' => 'Phục hồi',
 'vector-action-unprotect' => 'Đổi mức khóa',
-'vector-simplesearch-preference' => 'Gợi ý tìm kiếm nâng cao (cần bề ngoài Vectơ)',
+'vector-simplesearch-preference' => 'Hộp tìm kiếm đơn giản (cần bề ngoài Vectơ)',
 'vector-view-create' => 'Tạo',
 'vector-view-edit' => 'Sửa',
 'vector-view-history' => 'Xem lịch sử',
@@ -672,8 +674,8 @@ Truy vấn: $2',
 'protectedpagetext' => 'Trang này đã bị khóa không cho sửa đổi.',
 '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.',
-'editinginterface' => "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông báo giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng website này. Để dịch thuật, hãy xem xét sử dụng [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
+'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.',
+'editinginterface' => "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông báo giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này. Để 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.",
 'sqlhidden' => '(đã giấu truy vấn SQL)',
 'cascadeprotected' => 'Trang này đã bị khóa không cho sửa đổi, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} đã bị khóa với tùy chọn “khóa theo tầng” được kích hoạt:
 $2',
@@ -699,7 +701,7 @@ Bảo quản viên khóa nó đưa lý do là: “$3”.',
 # Login and logout pages
 '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ể [[Special:UserLogin|đăng nhập lại]] 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.",
+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}}]].',
@@ -949,8 +951,7 @@ Nếu bạn là một thành viên vô danh và cảm thấy rằng có những
 Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] trong các trang khác, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm trong các nhật trình liên quan],
 hoặc [{{fullurl:{{FULLPAGENAME}}|action=edit}} sửa đổi trang này]</span>.',
 'noarticletext-nopermission' => 'Trang này hiện đang trống.
-Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác,
-hoặc <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>.',
+Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác, hoặc <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>, nhưng bạn không có phép tạo trang này.',
 'missing-revision' => 'Phiên bản #$1 của trang có tên “{{PAGENAME}}” không tồn tại.
 
 Lỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến phiên bản cũ của một trang đã bị xóa.
@@ -1214,7 +1215,9 @@ Xin hãy kiểm tra nhật trình.',
 'revdelete-only-restricted' => 'Có lỗi khi ẩn mục vào $2, $1: nếu ẩn mục để cho bảo quản viên khỏi nhìn thấy được thì cũng cần chọn một trong những tùy chọn ẩn khác.',
 'revdelete-reason-dropdown' => '*Các lý do thường gặp khi xóa
 ** Vi phạm bản quyền
-** Thông tin cá nhân không thích hợp',
+** Bình luận hoặc thông tin cá nhân không thích hợp
+** Tên người dùng không thích hợp
+** Thông tin có thể bôi nhọ người khác',
 'revdelete-otherreason' => 'Lý do khác/bổ sung:',
 'revdelete-reasonotherlist' => 'Lý do khác',
 'revdelete-edit-reasonlist' => 'Sửa lý do xóa',
@@ -1311,8 +1314,6 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'search-interwiki-caption' => 'Các dự án liên quan',
 'search-interwiki-default' => '$1 kết quả:',
 'search-interwiki-more' => '(thêm)',
-'search-mwsuggest-enabled' => 'có gợi ý',
-'search-mwsuggest-disabled' => 'không có gợi ý',
 'search-relatedarticle' => 'Liên quan',
 'mwsuggest-disable' => 'Tắt gợi ý bằng AJAX',
 'searcheverything-enable' => 'Tìm trong tất cả không gian tên',
@@ -1835,7 +1836,7 @@ Nếu vẫn còn bị lỗi, xin hãy liên hệ với một [[Special:ListUsers
 'backend-fail-internal' => 'Lỗi không rõ xuất hiện trong phía sau lưu trữ “$1”.',
 'backend-fail-contenttype' => 'Không thể xác định kiểu nội dung của tập tin để lưu giữ tại “$1”.',
 'backend-fail-batchsize' => 'Phía sau lưu trữ đã nhận một loạt $1 thao tác tập tin; mức hạn là $2 thao tác.',
-'backend-fail-usable' => 'Không thể ghi tập tin $1 vì không có đủ quyền hoặc những thư mục hay nơi đựng bị thiếu.',
+'backend-fail-usable' => 'Không thể đọc/ghi tập tin “$1” vì không có đủ quyền hoặc những thư mục hay nơi đựng bị thiếu.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Không thể kết nối với cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
@@ -1968,6 +1969,7 @@ Có lẽ bạn muốn miêu tả nó trên [$2 trang miêu tả tập tin] tại
 'shared-repo-from' => 'tại $1',
 'shared-repo' => 'kho lưu trữ dùng chung',
 'filepage.css' => '/* Mã CSS tại đây sẽ ảnh hướng đến trang miêu tả tập tin, cũng như các wiki khách bên ngoài dựa trên wiki này */',
+'upload-disallowed-here' => 'Rất tiếc, bạn không có thể ghi đè lên hình ảnh này.',
 
 # File reversion
 'filerevert' => 'Lùi lại phiên bản của $1',
@@ -2934,7 +2936,6 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 
 # JavaScriptTest
 'javascripttest' => 'Kiểm thử JavaScript',
-'javascripttest-disabled' => 'Chức năng này chưa được kích hoạt trên wiki này.',
 'javascripttest-title' => 'Đang chạy $1 ca kiểm thử',
 'javascripttest-pagetext-noframework' => 'Trang này dành cho việc chạy các ca kiểm thử JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Nền tảng kiểm thử không rõ “$1”.',
@@ -3083,6 +3084,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-length' => 'Chiều dài của trang (byte)',
 'pageinfo-article-id' => 'Mã số trang',
 'pageinfo-robot-policy' => 'Trạng thái công cụ tìm kiếm',
+'pageinfo-robot-index' => 'Có thể ghi chỉ mục',
+'pageinfo-robot-noindex' => 'Không thể ghi chỉ mục',
 'pageinfo-views' => 'Số lần xem',
 'pageinfo-watchers' => 'Số người theo dõi trang',
 'pageinfo-redirects-name' => 'Số trang đổi hướng đến trang này',
@@ -3097,10 +3100,10 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-authors' => 'Tổng số tác giả riêng',
 'pageinfo-recent-edits' => 'Số lần sửa đổi gần đây (trong $1 qua)',
 'pageinfo-recent-authors' => 'Số người dùng sửa đổi gần đây',
-'pageinfo-restriction' => 'Mức khóa trang ($1)',
-'pageinfo-magic-words' => 'Số từ thần chú ($1)',
-'pageinfo-hidden-categories' => 'Số thể loại ẩn ($1)',
-'pageinfo-templates' => 'Số bản mẫu được nhúng ($1)',
+'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-toolboxlink' => 'Thông tin trang',
 
 # Skin names
 'skinname-standard' => 'Cổ điển',
@@ -3147,12 +3150,14 @@ $1',
 Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'imagemaxsize' => "Giới hạn cỡ hình:<br />''(trên trang miêu tả tập tin)''",
 'thumbsize' => 'Cỡ hình thu nhỏ:',
+'widthheight' => '$1×$2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|trang|trang}}',
 'file-info' => 'kích thước tập tin: $1, kiểu MIME: $2',
 'file-info-size' => '$1×$2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4',
 'file-info-size-pages' => '$1×$2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4, $5 trang',
 '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',
 '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.',
@@ -3162,6 +3167,8 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'file-info-png-looped' => 'có lặp',
 'file-info-png-repeat' => 'chơi $1 lần',
 'file-info-png-frames' => '$1 khung ảnh',
+'file-no-thumb-animation' => "'''Lưu ý: Do hạn chế kỹ thuật, các hình nhỏ của tập tin này sẽ không phải là hình động.'''",
+'file-no-thumb-animation-gif' => "'''Lưu ý: Do hạn chế kỹ thuật, các hình nhỏ của những hình GIF có độ phân giải cao, chẳng hạn tập tin này, sẽ không phải là hình động.'''",
 
 # Special:NewFiles
 'newimages' => 'Trang trưng bày hình ảnh mới',
@@ -3176,6 +3183,7 @@ Nếu thực thi nó máy tính của bạn có thể bị tiếm quyền.",
 'sp-newimages-showfrom' => 'Trưng bày những tập tin mới, bắt đầu từ lúc $2, ngày $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'video-dims' => '$1, $2×$3',
 'seconds-abbrev' => '$1s',
 'minutes-abbrev' => '$1m',
 'hours-abbrev' => '$1h',
@@ -3729,7 +3737,8 @@ Mã xác nhận này sẽ hết hạn vào $4.',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Nhúng giữa các wiki bị tắt]',
-'scarytranscludefailed' => '[Truy xuất bản mẫu cho $1 thất bại]',
+'scarytranscludefailed' => '[Truy xuất bản mẫu $1 bị thất bại]',
+'scarytranscludefailed-httpstatus' => '[Truy xuất bản mẫu $1 bị thất bại: HTTP $2]',
 'scarytranscludetoolong' => '[Địa chỉ URL quá dài]',
 
 # Delete conflict
@@ -3752,6 +3761,7 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 'confirm-unwatch-top' => 'Bạn có muốn gỡ trang này khỏi danh sách theo dõi của bạn?',
 
 # Separators for various lists, etc.
+'autocomment-prefix' => '–&#32;',
 'ellipsis' => '…',
 
 # Multipage image navigation
@@ -3781,6 +3791,17 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 # Size units
 'size-kilobytes' => '$1 kB',
 
+# Bitrate units
+'bitrate-bits' => '$1 bps',
+'bitrate-kilobits' => '$1 kbps',
+'bitrate-megabits' => '$1 Mbps',
+'bitrate-gigabits' => '$1 Gbps',
+'bitrate-terabits' => '$1 Tbps',
+'bitrate-petabits' => '$1 Pbps',
+'bitrate-exabits' => '$1 Ebps',
+'bitrate-zetabits' => '$1 Zbps',
+'bitrate-yottabits' => '$1 Ybps',
+
 # Live preview
 'livepreview-loading' => 'Đang tải…',
 'livepreview-ready' => 'Đang tải… Xong!',
@@ -3902,6 +3923,8 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 'version-entrypoints' => 'Các URL lối vào',
 'version-entrypoints-header-entrypoint' => 'Lối vào',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath?uselang=vi Đường dẫn bài]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath?uselang=vi Đường dẫn kịch bản]',
 
 # Special:FilePath
 'filepath' => 'Đường dẫn tập tin',
@@ -4052,6 +4075,10 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'feedback-bugcheck' => 'Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].',
 'feedback-bugnew' => 'Tôi đã kiểm tra – báo cáo lỗi mới',
 
+# Search suggestions
+'searchsuggest-search' => 'Tìm kiếm',
+'searchsuggest-containing' => 'có chứa…',
+
 # API errors
 'api-error-badaccess-groups' => 'Bạn không được phép tải tập tin lên wiki này.',
 'api-error-badtoken' => 'Lỗi nội bộ: Dấu hiệu bị hỏng.',
index 9609b6f..44efa56 100644 (file)
@@ -35,125 +35,125 @@ $namespaceNames = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'           => 'Links ounderstreepn:',
-'tog-hideminor'           => 'Klêne veranderiengn verdukn van juste veranderd',
-'tog-enotifrevealaddr'    => 'Tôog min e-mailadres in e-mails',
+'tog-underline' => 'Links ounderstreepn:',
+'tog-hideminor' => 'Klêne veranderiengn verdukn van juste veranderd',
+'tog-enotifrevealaddr' => 'Tôog min e-mailadres in e-mails',
 'tog-shownumberswatching' => 'Tôog et aantal gebrukers dan et blad volgn',
 
-'underline-always'  => 'Olsan',
-'underline-never'   => 'Noois',
+'underline-always' => 'Olsan',
+'underline-never' => 'Noois',
 'underline-default' => 'Browser standoard',
 
 # Dates
-'sunday'        => 'zundag',
-'monday'        => 'moandag',
-'tuesday'       => 'disndag',
-'wednesday'     => 'woesdag',
-'thursday'      => 'dunderdag',
-'friday'        => 'vrydag',
-'saturday'      => 'zoaterdag',
-'sun'           => 'zu',
-'mon'           => 'moa',
-'tue'           => 'din',
-'wed'           => 'woe',
-'thu'           => 'dun',
-'fri'           => 'vry',
-'sat'           => 'zat',
-'january'       => 'januoari',
-'february'      => 'februoari',
-'march'         => 'moarte',
-'april'         => 'april',
-'may_long'      => 'mei',
-'june'          => 'juni',
-'july'          => 'juli',
-'august'        => 'ogustus',
-'september'     => 'september',
-'october'       => 'oktober',
-'november'      => 'november',
-'december'      => 'december',
-'january-gen'   => 'januari',
-'february-gen'  => 'februoari',
-'march-gen'     => 'moarte',
-'april-gen'     => 'april',
-'may-gen'       => 'mei',
-'june-gen'      => 'juni',
-'july-gen'      => 'juli',
-'august-gen'    => 'ogustus',
+'sunday' => 'zundag',
+'monday' => 'moandag',
+'tuesday' => 'disndag',
+'wednesday' => 'woesdag',
+'thursday' => 'dunderdag',
+'friday' => 'vrydag',
+'saturday' => 'zoaterdag',
+'sun' => 'zu',
+'mon' => 'moa',
+'tue' => 'din',
+'wed' => 'woe',
+'thu' => 'dun',
+'fri' => 'vry',
+'sat' => 'zat',
+'january' => 'januoari',
+'february' => 'februoari',
+'march' => 'moarte',
+'april' => 'april',
+'may_long' => 'mei',
+'june' => 'juni',
+'july' => 'juli',
+'august' => 'ogustus',
+'september' => 'september',
+'october' => 'oktober',
+'november' => 'november',
+'december' => 'december',
+'january-gen' => 'januari',
+'february-gen' => 'februoari',
+'march-gen' => 'moarte',
+'april-gen' => 'april',
+'may-gen' => 'mei',
+'june-gen' => 'juni',
+'july-gen' => 'juli',
+'august-gen' => 'ogustus',
 'september-gen' => 'september',
-'october-gen'   => 'oktober',
-'november-gen'  => 'november',
-'december-gen'  => 'december',
-'jan'           => 'jan',
-'feb'           => 'feb',
-'mar'           => 'mrt',
-'apr'           => 'apr',
-'may'           => 'mei',
-'jun'           => 'jun',
-'jul'           => 'jul',
-'aug'           => 'ogs',
-'sep'           => 'sep',
-'oct'           => 'okt',
-'nov'           => 'nov',
-'dec'           => 'dec',
+'october-gen' => 'oktober',
+'november-gen' => 'november',
+'december-gen' => 'december',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mrt',
+'apr' => 'apr',
+'may' => 'mei',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'ogs',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
 
 # Categories related messages
 'listingcontinuesabbrev' => 'vervolg',
 
-'newwindow'     => '(opent in e nieuw veister)',
+'newwindow' => '(opent in e nieuw veister)',
 'moredotdotdot' => 'Mêer…',
-'mypage'        => 'Myn gebrukersblad',
-'mytalk'        => 'Myn discuusjeblad',
-'and'           => '&#32;en',
+'mypage' => 'Myn gebrukersblad',
+'mytalk' => 'Myn discuusjeblad',
+'and' => '&#32;en',
 
 # Cologne Blue skin
-'qbedit'         => 'Bewerkn',
+'qbedit' => 'Bewerkn',
 'qbspecialpages' => 'Specioale bloadn',
 
 # Vector skin
-'vector-action-delete'   => 'Wegdoen',
-'vector-action-move'     => 'Ernoemn',
-'vector-view-create'     => 'Anmoakn',
-'vector-view-edit'       => 'Bewerkn',
-'vector-view-history'    => 'Geschiedenisse bekykn',
-'vector-view-view'       => 'Leezn',
+'vector-action-delete' => 'Wegdoen',
+'vector-action-move' => 'Ernoemn',
+'vector-view-create' => 'Anmoakn',
+'vector-view-edit' => 'Bewerkn',
+'vector-view-history' => 'Geschiedenisse bekykn',
+'vector-view-view' => 'Leezn',
 'vector-view-viewsource' => 'Brontekst bekykn',
 
-'tagline'           => 'Van {{SITENAME}}',
-'help'              => 'Ulpe',
-'search'            => 'Zoekn',
-'searchbutton'      => 'Zoekn',
-'history_short'     => 'Geschiedenisse',
-'updatedmarker'     => 'bygewerkt sinds min latste visite',
-'printableversion'  => 'Drukboare versie',
-'permalink'         => 'Bluuvende link',
-'print'             => 'Drukn',
-'edit'              => "Bewerk'n",
-'create'            => 'Anmoakn',
-'editthispage'      => 'Da blad ier bewerkn',
-'create-this-page'  => 'Da blad ier anmoakn',
-'delete'            => 'Wegdoen',
-'deletethispage'    => 'Da blad ier verwydern',
-'undelete_short'    => '{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern',
-'protect'           => 'Beveilign',
-'protectthispage'   => 'Da blad ier beveilign',
-'unprotect'         => 'beveiliginge wegdoen',
+'tagline' => 'Van {{SITENAME}}',
+'help' => 'Ulpe',
+'search' => 'Zoekn',
+'searchbutton' => 'Zoekn',
+'history_short' => 'Geschiedenisse',
+'updatedmarker' => 'bygewerkt sinds min latste visite',
+'printableversion' => 'Drukboare versie',
+'permalink' => 'Bluuvende link',
+'print' => 'Drukn',
+'edit' => "Bewerk'n",
+'create' => 'Anmoakn',
+'editthispage' => 'Da blad ier bewerkn',
+'create-this-page' => 'Da blad ier anmoakn',
+'delete' => 'Wegdoen',
+'deletethispage' => 'Da blad ier verwydern',
+'undelete_short' => '{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern',
+'protect' => 'Beveilign',
+'protectthispage' => 'Da blad ier beveilign',
+'unprotect' => 'beveiliginge wegdoen',
 'unprotectthispage' => 'De beveiliginge van da blad ier ofleggn',
-'newpage'           => 'Nieuw blad',
-'talkpagelinktext'  => 'Discuusje',
-'specialpage'       => 'Specioal blad',
-'talk'              => 'Discuusje',
-'toolbox'           => 'Ulpmiddeln',
+'newpage' => 'Nieuw blad',
+'talkpagelinktext' => 'Discuusje',
+'specialpage' => 'Specioal blad',
+'talk' => 'Discuusje',
+'toolbox' => 'Ulpmiddeln',
 
 # 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'   => 'Over {{SITENAME}}',
-'aboutpage'   => 'Project:Info',
+'aboutsite' => 'Over {{SITENAME}}',
+'aboutpage' => 'Project:Info',
 'disclaimers' => 'Aansprakelekeid',
-'mainpage'    => 'Voorblad',
-'privacy'     => 'Privacybeleid',
+'mainpage' => 'Voorblad',
+'privacy' => 'Privacybeleid',
 
-'viewsourceold'  => 'Brontekst bekykn',
+'viewsourceold' => 'Brontekst bekykn',
 'viewsourcelink' => 'Brontekst bekykn',
-'site-rss-feed'  => '$1 RSS-feed',
+'site-rss-feed' => '$1 RSS-feed',
 'site-atom-feed' => '$1 Atom-feed',
 'red-link-title' => '$1 (Blad bestoat nie)',
 
@@ -173,20 +173,20 @@ $messages = array(
 'recentchanges' => 'Juste veranderd',
 
 # Upload
-'upload'            => 'Bestand toevoegn',
-'uploadbtn'         => 'Bestand toevoegn',
-'uploadnologin'     => 'Ge zyt nie angemeld',
-'uploadlog'         => 'logboek upgeloade bestandn',
-'uploadlogpage'     => 'Logboek upgeloade bestandn',
+'upload' => 'Bestand toevoegn',
+'uploadbtn' => 'Bestand toevoegn',
+'uploadnologin' => 'Ge zyt nie angemeld',
+'uploadlog' => 'logboek upgeloade bestandn',
+'uploadlogpage' => 'Logboek upgeloade bestandn',
 'uploadlogpagetext' => 'Hier stoa e lyste met de mêest recente upgeloade bestandn.',
-'uploadedfiles'     => 'Upgeloade bestandn',
-'uploadedimage'     => '"[[$1]]" upgeload',
+'uploadedfiles' => 'Upgeloade bestandn',
+'uploadedimage' => '"[[$1]]" upgeload',
 
 # Unwatched pages
 'unwatchedpages' => "Pagina's die ip niemands volglyste stoan",
 
 # Miscellaneous special pages
-'newpages'          => 'Nieuwe bloadn',
+'newpages' => 'Nieuwe bloadn',
 'newpages-username' => 'Gebrukersnoame:',
 
 # Special:Log/newusers
@@ -194,22 +194,22 @@ $messages = array(
 
 # Watchlist
 'mywatchlist' => 'Myn volglyste',
-'watch'       => 'Volgn',
-'unwatch'     => 'Nie volgn',
+'watch' => 'Volgn',
+'unwatch' => 'Nie volgn',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'unwatching' => 'Stoppn me volgn...',
 
 # Undelete
-'undelete'               => 'Weggedoane bloadn bekykn',
-'undeletepage'           => 'Weggedoane bloadn erstelln of bekykn',
+'undelete' => 'Weggedoane bloadn bekykn',
+'undeletepage' => 'Weggedoane bloadn erstelln of bekykn',
 'undeletehistorynoadmin' => "'t Artikel is weggedoan. De reden davôorn ku je zien in de soamnvattienge ieronder, tôpe me uutleg over wie dat 't blad bewerkt èt vôorn dat weggedoan es gewist. Den tekst van die weggedoane versies kan allêene door sysops gelezen wordn.",
-'undeletebtn'            => 'Erstelln',
-'undeletedfiles'         => '{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld',
+'undeletebtn' => 'Erstelln',
+'undeletedfiles' => '{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld',
 
 # Contributions
 'mycontris' => 'Myn bydroagn',
-'uctop'     => '(latste veranderienge)',
+'uctop' => '(latste veranderienge)',
 
 # Block/unblock
 'contribslink' => 'bydroagn',
index 3b9e36f..8060c4f 100644 (file)
@@ -462,8 +462,6 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 'search-interwiki-caption' => 'Schwesder-brojägd',
 'search-interwiki-default' => 'Af $1 gfundn:',
 'search-interwiki-more' => '(noch mäa´)',
-'search-mwsuggest-enabled' => 'mid foorschleech',
-'search-mwsuggest-disabled' => 'ghane foorschlääch',
 'search-relatedarticle' => 'Fârwande',
 'mwsuggest-disable' => 'Foorschlääch iwâr AJAX abschdelâ',
 'searcheverything-enable' => 'In aln naamsrajm suuchn',
index 7f0775d..1cb1e80 100644 (file)
@@ -474,7 +474,7 @@ Kod binon: ''$2''.",
 # Login and logout pages
 'logouttext' => "'''Esenunädol oli.'''
 
-Kanol laigebön {{SITENAME}} nennemiko, u kanol [[Special:UserLogin|nunädön oli dönu]] me gebananem ot u gebenanem votik.
+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.
@@ -931,8 +931,6 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'search-interwiki-caption' => 'Svistaproyegs',
 'search-interwiki-default' => 'Seks se $1:',
 'search-interwiki-more' => '(pluikos)',
-'search-mwsuggest-enabled' => 'sa mobs',
-'search-mwsuggest-disabled' => 'nen mobs',
 'search-relatedarticle' => 'Tefik',
 'mwsuggest-disable' => 'Nemögükön mobis ela AJAX',
 'searcheverything-enable' => 'Sukolöd in nemaspads valik',
@@ -2822,4 +2820,8 @@ Magods pajonons ma fomät gudikün, ragivasots votik pamaifükons stedöfo kobü
 'revdelete-unrestricted' => 'miedükams pro guvans pemoükons',
 'newuserlog-byemail' => 'letavöd pesedon me pot leäktronik',
 
+# Search suggestions
+'searchsuggest-search' => 'Suk',
+'searchsuggest-containing' => 'ninädöl...',
+
 );
index 460de6a..e607908 100644 (file)
@@ -379,8 +379,6 @@ Mõnõd šabloonad eväd lee lizettü.",
 'search-interwiki-caption' => 'Sõzarprojektid',
 'search-interwiki-default' => 'tulõmuhsõd $1:',
 'search-interwiki-more' => '(lisä)',
-'search-mwsuggest-enabled' => 'tarittsõmisijõkaa',
-'search-mwsuggest-disabled' => 'tarittsõmizõtta',
 'searchrelated' => 'sittu',
 'searchall' => 'kõik',
 'showingresultsheader' => "{{PLURAL:$5|Tuloz '''$1''' '''$3'''-ss|Tulohsõd '''$1-$2''' '''$3'''-ss}} «$4» vart",
index 830d17d..8eee3d9 100644 (file)
@@ -38,7 +38,7 @@ $namespaceNames = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#saadaq', '#suuna', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#saadaq', '#suuna', '#REDIRECT' ),
 );
 
 $messages = array(
@@ -423,7 +423,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Olõt nime alt vällä lännüq.'''
 
-Võit {{SITENAME}}t ilma nimeldä edesi toimõndaq vai [[Special:UserLogin|vahtsõst sama vai tõõsõ nimega sisse minnäq]].
+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',
@@ -792,8 +792,6 @@ Lisateedüst või ollaq [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME
 'search-interwiki-caption' => 'Sõsarprojektiq',
 'search-interwiki-default' => '$1 tulõmiq:',
 'search-interwiki-more' => '(viil)',
-'search-mwsuggest-enabled' => 'näütäq soovituisi',
-'search-mwsuggest-disabled' => 'ilma soovituisilda',
 'search-relatedarticle' => 'Otsiq samasugutsit lehti',
 'mwsuggest-disable' => 'Näüdäku-i AJAX-i soovituisi',
 'searchrelated' => 'samasugunõ',
index ba804e7..86cd086 100644 (file)
@@ -59,11 +59,17 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Totes_les_pådjes' ),
        'Block'                     => array( 'Bloker', 'Blocaedje' ),
        'Categories'                => array( 'Categoreyes' ),
+       'Listusers'                 => array( 'Djivêye_des_uzeus' ),
+       'Log'                       => array( 'Djournå', 'Djournås' ),
        'Preferences'               => array( 'Preferinces' ),
        'Prefixindex'               => array( 'Indecse_pa_betchete' ),
        'Search'                    => array( 'Cweri' ),
        'Specialpages'              => array( 'Pådjes_sipeciåles' ),
        'Statistics'                => array( 'Sitatistikes' ),
+       'Undelete'                  => array( 'Rapexhî' ),
+       'Upload'                    => array( 'Eberweter', 'Eberwetaedje' ),
+       'Userlogin'                 => array( 'Elodjaedje' ),
+       'Userlogout'                => array( 'Dislodjaedje' ),
        'Version'                   => array( 'Modêye' ),
        'Watchlist'                 => array( 'Pådjes_shuvowes' ),
 );
@@ -417,7 +423,7 @@ $2",
 # Login and logout pages
 'logouttext' => "'''Vos vs avoz dislodjî.'''
 
-Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén [[Special:UserLogin|vos relodjî]], dizo l' minme uzeu ou dizo èn uzeu diferin.
+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! ==
 
@@ -2355,6 +2361,10 @@ Acertinez s' i vs plait ki vos vloz vormint rifé cisse pådje ci.",
 'feedback-error2' => "Aroke : Li candjaedje n' a nén stî",
 'feedback-close' => 'Fwait',
 
+# Search suggestions
+'searchsuggest-search' => 'Cweri',
+'searchsuggest-containing' => 'ki contént...',
+
 # API errors
 'api-error-badaccess-groups' => "Vos n' avoz nén l' droet d' eberweter des fitchîs so ç' wiki cial",
 'api-error-copyuploaddisabled' => "Les eberwetaedjes pa URL ni vont nén so ç' sierveu cial.",
index d968f4e..a4b7635 100644 (file)
@@ -78,21 +78,23 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Tugoti in pagliwat hin seksyon ha pag klik-ha-tuo dida hin mga ngaran o titulo hin seksyon (nakinahanglan hin JavaScript)',
 'tog-showtoc' => 'Igpakita in tabla hin sulod (para hin mga pakli nga sobra hin 3 ka titulo o pagngaran)',
 'tog-rememberpassword' => 'Hinumdomi an akon pan-sakob dinhi nga browser (para hin maximum nga $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
-'tog-watchcreations' => 'Igdugang in mga pakli nga akon ginhimo ngadto han akon angay timan-an',
-'tog-watchdefault' => 'Igdugang in mga pakli nga akon ginliwat ngadto han akon angay timan-an',
-'tog-watchmoves' => 'Igdugang in mga pakli nga akon ginpamalhin ngadto han akon angay timan-an',
-'tog-watchdeletion' => 'Igdugang in mga pakli nga akon ginpamara ngadto han akon angay timan-an',
+'tog-watchcreations' => 'Igdugang in mga pakli nga akon ginhimo ngan mga paypay nga akon ginkarga ngadto han akon angay timan-an',
+'tog-watchdefault' => 'Igdugang in mga pakli ngan mga paypay nga akon ginliwat ngadto han akon angay timan-an',
+'tog-watchmoves' => 'Igdugang in mga pakli nga mga paypay nga akon ginpamalhin ngadto han akon angay timan-an',
+'tog-watchdeletion' => 'Igdugang in mga pakli ngan mga paypay nga akon ginpamara ngadto han akon angay timan-an',
 'tog-minordefault' => 'Tigamni an ngatanan nga mga pagliwat nga gudti hin default',
 'tog-previewontop' => 'Igpakita in prevista o pan-ugsa-nga-lantaw ugsa hiton pagliwat nga kahon',
 'tog-previewonfirst' => 'Igpakita in prevista o pan-ugsa-nga-lantaw ha syahan nga pagliwat',
 'tog-nocache' => 'Ayaw patiroka an mga pakli nga pamiling',
-'tog-enotifwatchlistpages' => 'Ig-e-mail ako kun may nagbag-o ha pakli nga akon gintitiman-an (watchlist)',
+'tog-enotifwatchlistpages' => 'Ig-e-mail ako kun may pakli o paypay ha akon gintitiman-an nga gin-iba',
 'tog-enotifusertalkpages' => 'Ig-e-mail ako kun may nagbag-o han akon pakli-himangrawon',
-'tog-enotifminoredits' => 'Ig-e-mail liwat ako ha mga gudti nga mga pagliwat hin mga pakli',
+'tog-enotifminoredits' => 'Ig-e-mail liwat ako hin mga gudti nga mga pagliwat hin mga pakli ngan mga paypay',
 'tog-enotifrevealaddr' => 'Igpakita an akon e-mail nga adres ha mga e-mail hin pagsumat',
 'tog-shownumberswatching' => 'Igpakita an ihap han mga nangingita nga mga nagamit',
 'tog-oldsig' => 'Aada nga pirma:',
 'tog-fancysig' => 'Tratuha it pirma komo uska wikitext (nga waray automatiko nga sumpay)',
+'tog-externaleditor' => 'Gamit hin ha-gawas nga pagliwat ha default (ha mga experto la ini, nakinahanglan hin mga pinaurog nga mga seting ha imo kompyuter. [//www.mediawiki.org/wiki/Manual:External_editors More information.]  )',
+'tog-externaldiff' => 'Gamit hin ha-gawas nga diff ha default (ha mga experto la, nakinahanglan hin mga pinaurog nga mga seting ha imo kompyuter.  [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Enable "jump to" accessibility links',
 'tog-uselivepreview' => 'Gamita an buhi nga pahiuna nga pagawas (nagkikinahanglan hin JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Pasabti ako kun waray ko ginsurat ha dalikyat-nga-tigaman han pagliwat (edit summary)',
@@ -112,6 +114,9 @@ $messages = array(
 'underline-default' => 'An aada-nga-daan nga panngaykayan',
 
 # Font style option in Special:Preferences
+'editfont-style' => 'Estilo hin font ha lugar hin pagliwat',
+'editfont-default' => 'Pandalikyat nga default',
+'editfont-monospace' => 'Monospaced nga font',
 'editfont-sansserif' => 'Sans-serif nga agi',
 'editfont-serif' => 'Serif nga agi',
 
@@ -184,6 +189,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'pdyn.',
 'index-category' => 'Mga nakatudlokan nga pagkli',
 'noindex-category' => 'Mga diri nakatudlokan nga pagkli',
+'broken-file-category' => 'Mga pakli nga mayda utod nga mga sumpay hin paypay',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
@@ -322,6 +328,10 @@ $1',
 'youhavenewmessages' => 'Mayda ka $1 ($2).',
 'newmessageslink' => 'bag-o nga mga mensahe',
 'newmessagesdifflink' => 'kataposan nga pagbag-o',
+'youhavenewmessagesfromusers' => 'May-ada ka $1 tikang ha {{PLURAL:$3|iba nga gumaramit|$3 mga gumaramit}} ($2).',
+'youhavenewmessagesmanyusers' => 'May-ada ka $1 tikang ha damo nga mga gumaramit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|uska bag-o nga mensahe|bag-o nga mga mensahe}}',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|nga pagbag-o|nga mga pagbag-o}}',
 'youhavenewmessagesmulti' => 'Mayda ka mga bag-o nga mensahe ha $1',
 'editsection' => 'igliwat',
 'editsection-brackets' => '[$1]',
@@ -373,9 +383,9 @@ Listahan o talaan hin puyde nga mga pinaurog nga pakli in mabibilngan ha [[Speci
 'dberrortext' => 'Mayda nahinabo nga sayop hin syntax ha database nga kwery.
 Bangin ini nagpapakita hin bug dida han softweyr.
 An kataposan nga ginsari nga database nga kweri amo in:
-<blockquote><tt>$1</tt></blockquote>
-tikang ha sakob han funsyon nga "<tt>$2</tt>".
-Nagbalik an database hin sayop nga "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+tikang ha sakob han funsyon nga "<code>$2</code>".
+Nagbalik an database hin sayop nga "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Mayda nahitabo nga sayop hin syntax ha database nga kwery.
 An kataposan nga ginsari nga kweri han database amo an:
 "$1"
@@ -392,31 +402,46 @@ Kun diri ini an kaso, bangin ka nakabiling hin bug ha software.
 Alayon la igsumat ini ha [[Special:ListUsers/sysop|administrator]], igsurat la an URL.',
 'missingarticle-rev' => '(pagbag-o#: $1)',
 'missingarticle-diff' => '(Kaibhan: $1, $2)',
+'readonly_lag' => 'Ginlugaring pagtranka han database samtang an mga nasunod nga mga database nga server naglalanat pa han agaron',
 'internalerror' => 'Sayop ha sulod',
 'internalerror_info' => 'Sayop ha sulod: $1',
 'fileappenderrorread' => "Diri nababasahan an ''$1'' han pagdugang.",
 'fileappenderror' => "Diri nadudugngan an ''$1'' ha ''$2''.",
-'filecopyerror' => "Diri nakokopya an fayl nga ''$1'' ha ''$2''.",
-'filerenameerror' => "Diri nababalyuan an ngaran han fayl nga ''$1'' ha ''$2''.",
-'filedeleteerror' => "Diri napapara an fayl nga ''$1''.",
-'fileexistserror' => "Diri nasusuratan ha fayl ''$1'': An fayl aada na.",
+'filecopyerror' => "Diri nakokopya an paypay nga ''$1'' ha ''$2''.",
+'filerenameerror' => "Diri nababalyuan an ngaran han paypay nga ''$1'' ha ''$2''.",
+'filedeleteerror' => "Diri napapara an paypay nga ''$1''.",
+'directorycreateerror' => 'Waray makahimo han direktoryo nga "$1".',
+'filenotfound' => 'Diri nabibilngan an paypay nga "$1"',
+'fileexistserror' => "Diri nasusuratan ha paypay nga ''$1'': Aada na an paypay.",
 'formerror' => 'Sayop: Diri nasusumite an porma.',
 'badarticleerror' => 'Ini nga pagbuhat diri mahihimo dinhi nga pakli',
 'cannotdelete' => 'An pakli o an fayl nga "$1" diri napapara.
 Bangin na ini ginpara hin iba.',
+'cannotdelete-title' => 'diri nakakapara han pakli "$1"',
 'badtitle' => 'Maraot nga titulo',
 'badtitletext' => 'An ginhangyo nga pakli diri puyde, waray sulod, o sayop nga nasumpay nga inter-pinunongan o inter-wiki nga titulo.
 Bangin mayda usa o damo nga mga agi nga diri puyde magamit ha mga titulo.',
-'perfcached' => 'An nasunod nga data gin-cache ngan bangin diri amo an yana. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'An nasunod nga data gin-cache, ngan kataposan ginbag-o dida han $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'An nasunod nga data gin-cache ngan bangin diri amo an yana. In maximum hin {{PLURAL:$1|usa ka resulta|$1 ka mga resulta}} aada hit cache.',
+'perfcachedts' => 'An nasunod nga data gin-cache, ngan kataposan ginbag-o dida han $1. In maximum hin {{PLURAL:$4|usa ka resulta|$4 ka resulta}} aada hit cache.',
 'querypage-no-updates' => 'An mga kabag-ohan para hini nga pakli ha yana diri mahihimo.
 An data dini diri mahihimo nga bag-o.',
+'wrong_wfQuery_params' => 'Sayop nga mga parameter ha wfQuery()<br />
+Funsyon: $1<br />
+Kweri: $2',
 'viewsource' => 'Kitaa an ginkuhaan',
+'viewsource-title' => 'Kitaa an tinikangan para han $1',
+'actionthrottledtext' => 'Komo uska pangontra ha spam, ikaw in ginlilimitaran paghimo hini nga pagbuhat hin sobra kadamo ha sulod hin gutiay nga oras, ngan ikaw in naglapos hini nga katubtuban.
+Alayon pagutro kahuman hin pipira ka mga minuto.',
+'protectedpagetext' => 'Ini nga pakli in pinasaliporan para mapugngan an mga pagliwat.',
 'viewsourcetext' => 'Puydi ka kinmita ngan kinmopya han gintikangan han pakli:',
+'viewyourtext' => "Puydi nim makit-an ngan makopya an tinikangan han '''imo mga pagliwat''' ha dinhi nga pakli:",
+'sqlhidden' => '(nakatago an SQL query)',
 'namespaceprotected' => "Diri ka gintutugutan pagliwat han mga pakli ha ngaran-lat'ang nga '''$1'''.",
 'ns-specialprotected' => 'Diri maliliwat an mga ispisyal nga pakli.',
 'titleprotected' => 'Ini nga titulo pinasalipod ha paghimo ni [[User:$1|$1]].
 An katadungan nga ginhatag amo in "\'\'$2\'\'".',
+'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.',
 
 # Virus scanner
 'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
@@ -429,7 +454,9 @@ Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga g
 'yourpassword' => 'Tigaman-pagsulod:',
 'yourpasswordagain' => 'Utroha pagbutang an tigaman-han-pagsakob:',
 'remembermypassword' => "Hinumdumi an akon pan-sakob dinhi nga panngaykay ''(browser)'' (para ha pinakamaiha $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
+'securelogin-stick-https' => 'Nagpapabilin nga masumpay ha HTTPS kahuman makalog-in',
 'yourdomainname' => 'Imo dominyo:',
+'password-change-forbidden' => 'Diri ka makakabalyo hin pulong-pagsulod ha dinhi nga wiki.',
 'login' => 'Sakob',
 'nav-login-createaccount' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
 'loginprompt' => "Kinahanglan mo hin mga kuki (''cookie'') para makapag log-in ha {{SITENAME}}.",
@@ -469,10 +496,13 @@ Alayon pagutro pagbutang.',
 'mailerror' => 'Sayop han pagpadangat hin surat: $1',
 'emailauthenticated' => 'Ginpamatuod an imo e-mail adres han $2 ha $3.',
 'emailconfirmlink' => 'Igkompirma an imo e-mail address',
+'emaildisabled' => 'Ini nga sityo in diri nakakapadangat hin mga e-mail.',
 'accountcreated' => 'Nahimo an akawnt',
 'accountcreatedtext' => 'An akwant han gumaramit para kan $1 in ginhimo.',
 'createaccount-title' => 'Paghimo hin akawnt para han {{SITENAME}}',
-'loginlanguagelabel' => 'Yinaknan: $1',
+'usernamehasherror' => 'Agnay-hin-gumaramit in diri puydi magkamay-ada hin mga hash karakter',
+'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
+'loginlanguagelabel' => 'Pinulongan: $1',
 
 # Change password dialog
 'resetpass' => 'Igliwat an tigaman-pagsulod',
@@ -495,6 +525,8 @@ Temporaryo nga tigaman han pagsakob: $2',
 'passwordreset-emailsent' => 'Ginpadara hin usa ka pahinumdom nga e-mail.',
 
 # Special:ChangeEmail
+'changeemail-none' => '(waray)',
+'changeemail-submit' => 'Igbalyo an e-mail',
 'changeemail-cancel' => 'Pasagdi',
 
 # Edit page toolbar
@@ -510,8 +542,8 @@ Temporaryo nga tigaman han pagsakob: $2',
 'headline_tip' => 'Katupngan 2 nga katukiban',
 'nowiki_sample' => 'Igsuksok an diri-nakaayos nga mga teksto dinhi',
 'nowiki_tip' => 'Pabay-i la an pagfoformat nga wiki',
-'image_tip' => 'Nakatampo nga fayl',
-'media_tip' => 'sumpay han fayl',
+'image_tip' => 'Nakatampo nga paypay',
+'media_tip' => 'sumpay han paypay',
 'sig_tip' => 'Imo pirma nga may-ada marka hin oras',
 'hr_tip' => 'Patumba nga bagis (hinay-hinay la it paggamit)',
 
@@ -546,9 +578,9 @@ Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bi
 Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling para han ngaran hini nga pakli]] ha iba nga mga pakli,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} binga an mga nanginginlabot nga mga log],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli]</span>.',
-'noarticletext-nopermission' => 'Ha yana waray surat ini nga pakli.
-Puydi nimo [[Special:Search/{{PAGENAME}}|pamilngon ini nga titulo han pakli]] ha iba nga mga pakli,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pamilngon ha mga kasumpay nga talaan]</span>.',
+'noarticletext-nopermission' => 'Waray yana nahasurat hini nga pakli
+Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,
+o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.',
 'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
 'updated' => '(Ginbag-ohan)',
 'note' => "'''Pahibaro:'''",
@@ -690,8 +722,6 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
 'search-suggest' => 'Buot sidngon mo ba: $1',
 'search-interwiki-caption' => 'Mga bugto nga proyekto',
 'search-interwiki-default' => '$1 nga resulta:',
-'search-mwsuggest-enabled' => 'upod hin mga suhestyon',
-'search-mwsuggest-disabled' => 'waray mga suhestyon',
 'searchrelated' => 'kadugtong',
 'searchall' => 'ngatanan',
 'showingresultsheader' => "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
@@ -741,16 +771,21 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Kalawdan Indyana',
 'timezoneregion-pacific' => 'Kalawdan Pasipiko',
-'prefs-searchoptions' => 'Mga pagpipilian han pamiling',
+'prefs-searchoptions' => 'Pamilnga',
 'prefs-namespaces' => "Ngaran-lat'ang",
+'prefs-files' => 'Mga paypay',
 'youremail' => 'E-mail:',
 'username' => 'Agnay hiton gumaramit:',
 'uid' => 'ID han gumaramit:',
+'prefs-memberingroups' => 'Api han {{PLURAL:$1| nga hugpo|nga mga hugpo}}:',
+'prefs-registration' => 'Oras han pagrehistro:',
 'yourrealname' => 'Tinuod nga ngaran:',
 'yourlanguage' => 'Yinaknan:',
 'yournick' => 'Bag-o nga pirma:',
 'badsiglength' => 'Hilaba hin duro it im pirma.
 Dapat diri malabaw ha $1 {{PLURAL:$1|agi|mga agi}} nga kahilaba.',
+'yourgender' => 'Henero:',
+'gender-unknown' => 'Waray ginpasabot',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babaye',
 'email' => 'E-mail',
@@ -759,16 +794,36 @@ Dapat diri malabaw ha $1 {{PLURAL:$1|agi|mga agi}} nga kahilaba.',
 An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makontak ha imo.',
 'prefs-help-email-required' => 'Kinahanglanon it e-mail address.',
 'prefs-info' => 'Panguna nga pananabotan',
+'prefs-i18n' => 'Internasyonalisasyon',
 'prefs-signature' => 'Pirma',
+'prefs-advancedediting' => 'Abansado nga mga pagpipilian',
+'prefs-advancedrc' => 'Abansado nga mga pagpipilian',
+'prefs-advancedrendering' => 'Abansado nga mga pagpipilian',
+'prefs-advancedsearchoptions' => 'Abansado nga mga pagpipilian',
+'prefs-advancedwatchlist' => 'Abansado nga mga pagpipilian',
 'prefs-diffs' => 'Mga kaibhan',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'E-mail address in baga puydi',
+
 # User rights
+'userrights' => 'Pagdudumara hin mga katungod han gumaramit',
+'userrights-lookup-user' => 'Pagdumaraa han mga hugpo han gumaramit',
+'userrights-user-editname' => 'Igbutang an agnay han gumaramit:',
+'editusergroup' => 'Igliwat han mga hugpo han gumaramit',
+'editinguser' => "Igliliwat an mga katungod han gumaramit han gumaramit '''[[Gumaramit:$1|$1]]''' $2",
 'userrights-groupsmember' => 'Api han:',
 'userrights-reason' => 'Katadungan:',
+'userrights-no-interwiki' => '
+Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki.',
+'userrights-nodatabase' => 'Waray kaaagii an Database $1 o diri ini aada ha lokal.',
+'userrights-changeable-col' => 'Mga hugpo nga puydi mo labtan',
+'userrights-unchangeable-col' => 'Mga hugpo nga diri mo puydi labtan',
 
 # Groups
 'group' => 'Hugpo:',
 'group-user' => 'Mga gumaramit',
+'group-autoconfirmed' => 'Mga gumaramit nga lugaring nakokonpirma',
 'group-bot' => 'Mga bot',
 'group-sysop' => 'Mga magdudumara',
 'group-bureaucrat' => 'Mga burokrata',
@@ -778,9 +833,12 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'group-user-member' => '{{HENERO:$1|gumaramit}}',
 'group-bot-member' => 'bot',
 'group-sysop-member' => 'magdudumara',
+'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
 
 'grouppage-user' => '{{ns:project}}:Mga gumaramit',
+'grouppage-bot' => '{{ns:project}}:Mga bot',
 'grouppage-sysop' => '{{ns:project}}:Mga magdudumara',
+'grouppage-bureaucrat' => '{{ns:project}}:Mga burokrata',
 'grouppage-suppress' => '{{ns:project}}:Nanginginano',
 
 # Rights
@@ -788,11 +846,24 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'right-edit' => 'Igliwat an mga pakli',
 'right-createpage' => 'Paghimo hin mga pakli (nga diri an mga hiruhimangraw nga mga pakli)',
 'right-createtalk' => 'Paghimo hin hiruhimangraw nga mga pakli',
+'right-createaccount' => 'Paghimo hin bag-o nga mga akawnt hin gumaramit',
 'right-minoredit' => 'Igmarka an mga ginliwat komo gutiay la',
 'right-move' => 'Igbalhin an mga pakli',
+'right-move-subpages' => 'Igbalhin an pakli lakip an ira mga bahinpakli',
+'right-move-rootuserpages' => 'Igbalhin an gamot nga mga pakli han gumaramit',
 'right-movefile' => 'Balhina an mga paypay',
+'right-upload' => 'Igkarga paigbaw an mga paypay',
+'right-reupload' => 'Sapawa an mga aada nga mga paypay',
+'right-upload_by_url' => 'Igkarga paigbaw an mga paypay tikang ha uska URL',
+'right-bot' => 'Igtrato komo uska naglulugaring nga proseso',
 'right-delete' => 'Igpara an mga pakli',
+'right-bigdelete' => 'Igpara an mga pakli nga may-ada dagko nga mga kaagi',
+'right-browsearchive' => 'Pamiling hin mga ginpara nga mga pakli',
 'right-undelete' => 'Igpawara an pagpara han pakli',
+'right-suppressionlog' => 'Kitaa an mga pribado nga mga talaan',
+'right-block' => 'Pugnga an iba nga mga gumaramit ha pagliwat',
+'right-blockemail' => 'Pugnga an uska gumaramit tikang ha pagpadangat hin e-mail',
+'right-hideuser' => 'Pugnga an uska agnay-hin-gumaramit, tago-a ito tikang ha publiko',
 
 # User rights log
 'rightsnone' => '(waray)',
@@ -1195,6 +1266,8 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'blockip' => 'Pugngi an gumaramit',
 'blockip-title' => 'Pugngi an gumaramit',
 'blockip-legend' => 'Pugngi an gumaramit',
+'ipbreason' => 'Katadungan:',
+'ipbreasonotherlist' => 'Lain nga katadungan',
 'ipbreason-dropdown' => '*Agsob nga mga rason hit pagpugong
 ** Pagsusuksok hin sayop nga pananabutan
 ** Pagtatangtang hin sulod tikang ha mga pakli
@@ -1209,6 +1282,9 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'ipbotherreason' => 'Lain/dugang nga katadungan:',
 'blockipsuccesssub' => 'Malinamposon an pagpugong',
 'ipblocklist' => 'Mga ginpugngan nga gumaramit',
+'blocklist-target' => 'Gin-iigo',
+'blocklist-expiry' => 'Napan-os',
+'blocklist-by' => 'Ginpupugngan an admin',
 'ipblocklist-submit' => 'Bilnga',
 'blocklink' => 'igpugong',
 'unblocklink' => 'igtanggal an pagpugong',
@@ -1224,6 +1300,7 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 
 # Move page
 'move-page' => 'Mabalhin an $1',
+'move-page-legend' => 'Balhina an pakli:',
 'movearticle' => 'Balhina an pakli:',
 'moveuserpage-warning' => "'''Pahimatngon:''' Tibalhin ka hin pakli hin gumaramit. Alayon pagtigaman nga an pakli là an mababalhin ngan an gumaramit in ''diri'' mababalyoan hin ngaran.",
 'newtitle' => 'Para ha bag-o nga titulo:',
@@ -1256,6 +1333,7 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'thumbnail_image-type' => 'An klase han hulagway in diri suportado',
 
 # Special:Import
+'import-upload-filename' => 'Ngaran han paypay:',
 'import-comment' => 'Komento:',
 
 # Tooltip help for the actions
@@ -1322,6 +1400,22 @@ Makikit-an nimo an ginkuhaaan',
 # Attribution
 'othercontribs' => 'Ginbasihan ha binuhat ni $1.',
 
+# Info page
+'pageinfo-header-edits' => 'Kaagi han pagliwat',
+'pageinfo-header-restrictions' => 'Panalipod han pakli',
+'pageinfo-robot-index' => 'Matutudlok',
+'pageinfo-robot-noindex' => 'Diri matutudlok',
+'pageinfo-views' => 'Ihap han mga naglantaw',
+'pageinfo-watchers' => 'Ihap han nangingita hin pakli',
+'pageinfo-redirects-name' => 'Nairedirekta ha dinhi nga pakli',
+'pageinfo-subpages-name' => 'Mga bahinpakli hin nga pakli',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirekta|mga redirekta}}; $3 {{PLURAL:$3|diri redirekta|mga diri redirekta}})',
+'pageinfo-firstuser' => 'Naghimo han pakli',
+'pageinfo-firsttime' => 'Adlaw han pagkahimo han pakli',
+'pageinfo-lastuser' => 'Giurhii nga nagliwat',
+'pageinfo-lasttime' => 'Petsa han kataposan nga pagliwat',
+'pageinfo-edits' => 'Ngatanan nga ihap han mga pakli',
+
 # Browsing diffs
 'previousdiff' => '← Durudaan nga pagliwat',
 'nextdiff' => 'Burubag-o nga pagliwat',
@@ -1332,6 +1426,7 @@ Makikit-an nimo an ginkuhaaan',
 'file-nohires' => 'Waray mas hiruhitaas nga resolusyon.',
 'svg-long-desc' => 'SVG nga fayl, ginbabanabanahan nga $1 × $2 nga mga pixel, kadako han fayl: $3',
 'show-big-image' => 'Bug-os nga resolusyon',
+'show-big-image-size' => '$1 × $2 nga mga pixel',
 
 # Special:NewFiles
 'newimages-legend' => 'Panara',
@@ -1355,8 +1450,8 @@ Kon an paypay ginliwat tikang han orihinal nga kamutangan, mayda mga detalye nga
 'metadata-fields' => 'An mga rumbay han hulagway han metadato nga nakatala dinhi nga mensahe in iglalakip ha padayag hin hulagway nga pakli kun an taramdan metadato in nakalukot.
 An iba in daan nakatago.
 * make
-* model
-* datetimeoriginal
+* modelo
+* pitsaorasorihinal
 * exposuretime
 * fnumber
 * isospeedratings
@@ -1364,9 +1459,9 @@ An iba in daan nakatago.
 * artist
 * copyright
 * imagedescription
-* gpslatitude
-* gpslongitude
-* gpsaltitude',
+* gpsngalatitud
+* gpsngalongitud
+* gpsngaaltitud',
 
 # EXIF tags
 'exif-imagewidth' => 'Kahaluag',
@@ -1375,6 +1470,7 @@ An iba in daan nakatago.
 'exif-imagedescription' => 'Titulo han hulagway',
 'exif-artist' => 'Tag-iya',
 'exif-sharpness' => 'Pagkatarom',
+'exif-gpstimestamp' => 'GPS nga oras (atomiko nga relo)',
 'exif-gpsspeedref' => 'Sukol han kalaksi',
 'exif-headline' => 'Katukiban',
 'exif-source' => 'Tinikangan',
@@ -1405,6 +1501,14 @@ An iba in daan nakatago.
 'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|metro|mga metro}} bawbaw han katupngan ha dagat',
 'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|metro|mga metro}} ubos han katupngan ha dagat',
 
+# Pseudotags used for GPSSpeedRef
+'exif-gpsspeed-k' => 'Mga kilometro kada oras',
+'exif-gpsspeed-m' => 'Mga milya kada oras',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'Mga kilometro',
+'exif-gpsdestdistance-m' => 'Mga milya',
+
 'exif-objectcycle-a' => 'Aga la',
 'exif-objectcycle-p' => 'Gab-i la',
 
@@ -1463,7 +1567,8 @@ An iba in daan nakatago.
 'table_pager_prev' => 'Naha-una nga pakli',
 'table_pager_first' => 'Una nga pakli',
 'table_pager_last' => 'Kataposan nga pakli',
-'table_pager_limit' => 'Igpakita in $1 nga mga item ha tagsa pakli',
+'table_pager_limit' => 'Igpakita in $1 nga mga butang ha tagsa pakli',
+'table_pager_limit_label' => 'Mga butang ha tagsa pakli:',
 'table_pager_limit_submit' => 'Kadto-a',
 'table_pager_empty' => 'Waray mga resulta',
 
@@ -1491,15 +1596,19 @@ An iba in daan nakatago.
 
 # Special:Version
 'version' => 'Bersyon',
+'version-version' => '(Bersion $1)',
 'version-license' => 'Lisensya',
 'version-software-product' => 'Produkto',
+'version-software-version' => 'Bersyon',
 
 # Special:FilePath
+'filepath' => 'Aragian han paypay',
 'filepath-page' => 'Paypay:',
 'filepath-submit' => 'Kadto-a',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-submit' => 'Pamilnga',
+'fileduplicatesearch-noresults' => 'Waray nabilngan nga paypay nga an ngaran "$".',
 
 # Special:SpecialPages
 'specialpages' => 'Mga pinaurog nga pakli',
@@ -1523,6 +1632,7 @@ An iba in daan nakatago.
 'tag-filter' => '[[Special:Tags|Tag]] panara:',
 'tag-filter-submit' => 'Panara',
 'tags-edit' => 'igliwat',
+'tags-hitcount' => '$1 {{PLURAL:$1|nga pagbag-o|nga mga pagbag-o}}',
 
 # Special:ComparePages
 'comparepages' => 'Igkumpara an mga pakli',
@@ -1541,9 +1651,48 @@ An iba in daan nakatago.
 'htmlform-selectorother-other' => 'iba',
 
 # New logging system
+'logentry-newusers-newusers' => '$1 in naghimo hin gumaramit nga akawnt',
+'logentry-newusers-create' => '$1 in naghimo hin gumaramit nga akawnt',
+'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
+'logentry-newusers-autocreate' => 'An akawnt nga $1 in lugaring nga nahimo',
 'newuserlog-byemail' => 'Ginpadangat an tigaman-pagsulod pinaagi han e-mail',
 
 # Feedback
 'feedback-close' => 'Human na.',
 
+# Search suggestions
+'searchsuggest-search' => 'Pamilnga',
+'searchsuggest-containing' => 'nagsusulod. . .',
+
+# API errors
+'api-error-badaccess-groups' => 'Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.',
+'api-error-badtoken' => 'Sayop ha sulod: Maraot nga token.',
+'api-error-copyuploaddisabled' => 'Pagkarga paigbaw pinaagi han URL in diri mahihimo ha dinhi nga serbidor.',
+'api-error-filename-tooshort' => 'An ngaran han paypay in halipot hin duro.',
+'api-error-filetype-banned' => 'Diri gintutugotan ini nga klase nga paypay.',
+'api-error-filetype-missing' => 'Ini nga ngaran han paypay in nawawad-an hin ekstensyon.',
+'api-error-http' => 'Sayop ha sulod: Diri nakakasumpay ha serbidor.',
+'api-error-illegal-filename' => 'Diri gintutugotan an ngaran-han-paypay.',
+'api-error-overwrite' => 'Pagsasapaw in aada nga paypay in diri gintutugotan.',
+'api-error-stashfailed' => 'Sayop ha sulod:  An serbidor in waray makatipig han temporaryo nga paypay.',
+'api-error-timeout' => 'An serbidor in diri nabaton ha sulod han ginaasahan nga oras.',
+'api-error-unclassified' => 'Nahitabo an waray kasabti nga sayop.',
+'api-error-unknown-code' => 'Waray kasabti nga sayop: "$1".',
+'api-error-unknown-error' => 'Sayop ha sulod: May-ada nagkasayop han pagkakarga paigbaw han imo paypay.',
+'api-error-unknown-warning' => 'Waray kasabti nga pahimatngon: "$1".',
+'api-error-unknownerror' => 'Waray kasabti nga sayop: "$1".',
+'api-error-uploaddisabled' => 'Diri ginpapakarga paigbaw ha dinhi nga wiki.',
+'api-error-verification-error' => 'Ini nga paypay in bangin naraot, o may-ada iba nga ekstensyon.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|mga segundo}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|mga minuto}}',
+'duration-hours' => '$1 {{PLURAL:$1|oras|mga oras}}',
+'duration-days' => '$1 {{PLURAL:$1|adlaw|mga adlaw}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|mga semana}}',
+'duration-years' => '$1 {{PLURAL:$1|tuig|mga tuig}}',
+'duration-decades' => '$1 {{PLURAL:$1|dekada|mga dekada}}',
+'duration-centuries' => '$1 {{PLURAL:$1|gatostuig|mga gatostuig}}',
+'duration-millennia' => '$1 {{PLURAL:$1|yukottuig|mga yukottuig}}',
+
 );
index 6f079c7..da7837b 100644 (file)
@@ -450,7 +450,7 @@ Ngirte li mu joxe mooy ne « ''$2'' ».",
 # Login and logout pages
 'logouttext' => "Fi mu nekk nii génn nga.'''
 
-Man ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  [[Special:UserLogin|duggewaat]] ak wenn tur wi walla ak weneen.",
+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]].',
@@ -907,8 +907,6 @@ Soo jëfandikoo lëkkalekaayu joow yi day neenal boyot yi nga jotoon a fal.',
 'search-interwiki-caption' => 'Sémbu niroowaale',
 'search-interwiki-default' => '$1 ngérte :',
 'search-interwiki-more' => '(yeneen)',
-'search-mwsuggest-enabled' => 'ak xelal',
-'search-mwsuggest-disabled' => 'ci lu dul xelal',
 'search-relatedarticle' => 'Yeneeni ngérte',
 'mwsuggest-disable' => 'Doxadil xelal yu AJAX',
 'searcheverything-enable' => 'Seet ci barabi tur yépp',
index a9d7dd5..0b31e31 100644 (file)
@@ -382,7 +382,7 @@ $2',
 # Login and logout pages
 'logouttext' => "侬已经登出哉。'''
 
-侬可以继续匿名使用{{SITENAME}} ,也可以再次以相同或者两样个用户名[[Special:UserLogin|登录]]
+侬可以继续匿名使用{{SITENAME}} ,也可以再次以相同或者两样个用户名<span class='plainlinks'>[$1 登录]</span>
 注意,有眼页面作兴还是会搭侬登出前头一样显示,一脚到侬清除浏览器缓存。",
 'welcomecreation' => '== 欢迎侬, $1! ==
 
@@ -884,8 +884,6 @@ $1",
 'search-interwiki-caption' => '姊妹项目',
 'search-interwiki-default' => '$1项结果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '与建议',
-'search-mwsuggest-disabled' => ' 呒没建议',
 'search-relatedarticle' => '相关',
 'mwsuggest-disable' => '禁用AJAX建议',
 'searcheverything-enable' => '垃拉所有名字空间里向搜索',
index 8f77bc5..c5ef036 100644 (file)
@@ -397,7 +397,7 @@ $1',
 # Login and logout pages
 'logouttext' => "'''Та һарад бәәнәт.'''
 
-Та {{SITENAME}} гидг ормиг нертә уга олзлҗ чаднат, аль та [[Special:UserLogin|дәкәд орҗ]] цацу аль талдан нертә чаднат.
+Та {{SITENAME}} гидг ормиг нертә уга олзлҗ чаднат, аль та <span class='plainlinks'>[$1 дәкәд орҗ]</span> цацу аль талдан нертә чаднат.
 Зәрм халхс цааранднь та ода чигн орсн мет үзүлҗ чаддг тускар темдглтн (та хәләчин санлиг цеврлтл).",
 'welcomecreation' => '== Ирхитн эрҗәнәвидн, $1! ==
 Таднар шин бичгдлһн бүтв.
@@ -596,8 +596,6 @@ $1',
 'search-interwiki-caption' => 'Садта проектмуд',
 'search-interwiki-default' => '$1 ашуд:',
 'search-interwiki-more' => '(дәкәд)',
-'search-mwsuggest-enabled' => 'селвгтә',
-'search-mwsuggest-disabled' => 'селвг уга',
 'mwsuggest-disable' => 'AJAX селвг унтрах',
 'searcheverything-enable' => 'Цуг нернә ууд хәәх',
 'searchall' => 'цуг',
index 4fd23a8..0fb07c3 100644 (file)
 
 $messages = array(
 # Dates
-'sunday'        => 'Icawe',
-'monday'        => 'UMvulo',
-'tuesday'       => 'ULwesibini',
-'wednesday'     => 'ULwesithathu',
-'thursday'      => 'ULwesine',
-'friday'        => 'ULwesihlanu',
-'saturday'      => 'UMgqibelo',
-'january'       => 'EyoMqungu',
-'february'      => 'EyoMdumba',
-'march'         => 'EyoKwindla',
-'april'         => 'EkaTshazimpuzi',
-'june'          => 'EyeSilimela',
-'july'          => 'EyeKhala',
-'august'        => 'EyeThupha',
-'september'     => 'Eyo Msintsi',
-'october'       => 'Eye Dwarha',
-'november'      => 'Eye Nkanga',
-'december'      => 'Eyo Mnga',
-'january-gen'   => 'EyoMqungu',
-'february-gen'  => 'Eyo Mdumba',
-'march-gen'     => 'Eyo Kwindla',
-'april-gen'     => 'Ekatshazimpuzi',
-'may-gen'       => 'EkaCanzibe',
-'june-gen'      => 'Eyesilimela',
-'july-gen'      => 'Eye Khala',
-'august-gen'    => 'Eye Thupha',
+'sunday' => 'Icawe',
+'monday' => 'UMvulo',
+'tuesday' => 'ULwesibini',
+'wednesday' => 'ULwesithathu',
+'thursday' => 'ULwesine',
+'friday' => 'ULwesihlanu',
+'saturday' => 'UMgqibelo',
+'january' => 'EyoMqungu',
+'february' => 'EyoMdumba',
+'march' => 'EyoKwindla',
+'april' => 'EkaTshazimpuzi',
+'june' => 'EyeSilimela',
+'july' => 'EyeKhala',
+'august' => 'EyeThupha',
+'september' => 'Eyo Msintsi',
+'october' => 'Eye Dwarha',
+'november' => 'Eye Nkanga',
+'december' => 'Eyo Mnga',
+'january-gen' => 'EyoMqungu',
+'february-gen' => 'Eyo Mdumba',
+'march-gen' => 'Eyo Kwindla',
+'april-gen' => 'Ekatshazimpuzi',
+'may-gen' => 'EkaCanzibe',
+'june-gen' => 'Eyesilimela',
+'july-gen' => 'Eye Khala',
+'august-gen' => 'Eye Thupha',
 'september-gen' => 'Eyo Msintsi',
-'october-gen'   => 'Eye Dwarha',
-'november-gen'  => 'Eye Nkanga',
-'december-gen'  => 'Eyo Mnga',
-'may'           => 'EkaCanzibe',
+'october-gen' => 'Eye Dwarha',
+'november-gen' => 'Eye Nkanga',
+'december-gen' => 'Eyo Mnga',
+'may' => 'EkaCanzibe',
 
 'article' => 'Inqaku',
-'mypage'  => 'Inqaku yam',
-'mytalk'  => 'Inthetho yam',
+'mypage' => 'Inqaku yam',
+'mytalk' => 'Inthetho yam',
 
 # Cologne Blue skin
 'qbspecialpages' => 'Amaphepha Abalulekileyo',
@@ -55,29 +55,29 @@ $messages = array(
 # Vector skin
 'vector-view-edit' => 'Tshintsha',
 
-'help'             => 'Uncedo',
-'search'           => 'Khangela',
-'searchbutton'     => 'Khangela',
-'go'               => 'Hamba',
-'searcharticle'    => 'Hamba',
-'edit'             => 'Tshintsha',
-'delete'           => 'Cima',
-'protect'          => 'Khusela',
+'help' => 'Uncedo',
+'search' => 'Khangela',
+'searchbutton' => 'Khangela',
+'go' => 'Hamba',
+'searcharticle' => 'Hamba',
+'edit' => 'Tshintsha',
+'delete' => 'Cima',
+'protect' => 'Khusela',
 'talkpagelinktext' => 'Inthetho',
-'talk'             => 'Ingxoxo',
-'otherlanguages'   => 'Kwezinye Ilwimi',
+'talk' => 'Ingxoxo',
+'otherlanguages' => 'Kwezinye Ilwimi',
 
 # 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).
-'currentevents'        => 'Imisebenzi Eyenzekayo',
-'edithelp'             => 'Uncedo ngoTshintsho',
-'mainpage'             => 'Iphepha Elingundoqo',
+'currentevents' => 'Imisebenzi Eyenzekayo',
+'edithelp' => 'Uncedo ngoTshintsho',
+'mainpage' => 'Iphepha Elingundoqo',
 'mainpage-description' => 'Iphepha Elingundoqo',
 
-'newmessageslink'         => 'imiyalezo emitsha',
+'newmessageslink' => 'imiyalezo emitsha',
 'youhavenewmessagesmulti' => 'Unemiyalezo emitsha ku $1',
-'editsection'             => 'tshintsha',
-'editold'                 => 'tshintsha',
-'editlink'                => 'tshintsha',
+'editsection' => 'tshintsha',
+'editold' => 'tshintsha',
+'editlink' => 'tshintsha',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Inqaba',
@@ -86,48 +86,48 @@ $messages = array(
 'viewsource' => 'Jonga i Source',
 
 # Login and logout pages
-'welcomecreation'    => '== Wamkelekile, $1! ==
+'welcomecreation' => '== Wamkelekile, $1! ==
 
 I Account yakhgo ivuliwe, ungalibali ukutshitsha izinto ozithandayo ngo {{SITENAME}}.',
-'yourname'           => 'Igama lelungu:',
-'yourpassword'       => 'Igama elifihlakeleyo lelungu:',
-'yourpasswordagain'  => 'Faka kwakhona igama elifihlakeleyo:',
+'yourname' => 'Igama lelungu:',
+'yourpassword' => 'Igama elifihlakeleyo lelungu:',
+'yourpasswordagain' => 'Faka kwakhona igama elifihlakeleyo:',
 'remembermypassword' => 'Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'createaccount'      => 'Vula I Account',
+'createaccount' => 'Vula I Account',
 'loginlanguagelabel' => 'Ulwimi: $1',
 
 # Edit pages
-'summary'     => 'Isishwankathelo:',
-'minoredit'   => 'Lutshitsho oluncinci olu',
-'watchthis'   => 'Bukela le Page',
+'summary' => 'Isishwankathelo:',
+'minoredit' => 'Lutshitsho oluncinci olu',
+'watchthis' => 'Bukela le Page',
 'savearticle' => 'Gcina eliphepha',
 'showpreview' => 'Bonisa Utshintsho',
-'showdiff'    => 'Gcina Utshitshi',
+'showdiff' => 'Gcina Utshitshi',
 
 # Search results
 'powersearch' => 'Khangela',
 
 # Preferences page
-'mypreferences'     => 'Ezithandwa ndim',
+'mypreferences' => 'Ezithandwa ndim',
 'searchresultshead' => 'Khangela',
-'username'          => 'Igama lelungu:',
+'username' => 'Igama lelungu:',
 
 # Recent changes
-'recentchanges'   => 'Utshitsho olusandokwenziwa',
+'recentchanges' => 'Utshitsho olusandokwenziwa',
 'minoreditletter' => 'nc',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Utsitsho olufana nolu',
-'recentchangeslinked-feed'    => 'Utsitsho olufana nolu',
+'recentchangeslinked' => 'Utsitsho olufana nolu',
+'recentchangeslinked-feed' => 'Utsitsho olufana nolu',
 'recentchangeslinked-toolbox' => 'Utsitsho olufana nolu',
 
 # Upload
-'upload'          => 'Faka Ifile',
-'filedesc'        => 'Isishwankathelo',
+'upload' => 'Faka Ifile',
+'filedesc' => 'Isishwankathelo',
 'watchthisupload' => 'Bukela le Page',
 
 # Miscellaneous special pages
-'move'         => 'Dlulisa',
+'move' => 'Dlulisa',
 'movethispage' => 'Dlulisa eliphepha',
 
 # Special:AllPages
@@ -135,9 +135,9 @@ I Account yakhgo ivuliwe, ungalibali ukutshitsha izinto ozithandayo ngo {{SITENA
 'allpagessubmit' => 'Hamba',
 
 # Watchlist
-'watchlist'     => 'Endizibukeleyo',
-'mywatchlist'   => 'Endizibukeleyo',
-'watch'         => 'Bukela',
+'watchlist' => 'Endizibukeleyo',
+'mywatchlist' => 'Endizibukeleyo',
+'watch' => 'Bukela',
 'watchthispage' => 'Bukela le Page',
 
 # Protect
@@ -145,9 +145,9 @@ I Account yakhgo ivuliwe, ungalibali ukutshitsha izinto ozithandayo ngo {{SITENA
 
 # Contributions
 'contributions' => 'Imisebenzi ye lungu',
-'mycontris'     => 'Inkxaso yam',
+'mycontris' => 'Inkxaso yam',
 
-'sp-contributions-talk'   => 'Inthetho',
+'sp-contributions-talk' => 'Inthetho',
 'sp-contributions-submit' => 'Khangela',
 
 # Block/unblock
@@ -155,9 +155,9 @@ I Account yakhgo ivuliwe, ungalibali ukutshitsha izinto ozithandayo ngo {{SITENA
 
 # Move page
 'move-page-legend' => 'Dlulisa eliphepha',
-'movepagebtn'      => 'DLulisa eliphepha',
-'movedto'          => 'Lidluliselwe',
-'movereason'       => 'Isizathu',
+'movepagebtn' => 'DLulisa eliphepha',
+'movedto' => 'Lidluliselwe',
+'movereason' => 'Isizathu',
 
 # Special:NewFiles
 'ilsubmit' => 'Khangela',
index c01c802..ae6ff8e 100644 (file)
@@ -431,8 +431,6 @@ $messages = array(
 'search-interwiki-caption' => 'ჯიმაია პროექტეფ',
 'search-interwiki-default' => 'მოღალირეფი $1-შე:',
 'search-interwiki-more' => '(უმოს)',
-'search-mwsuggest-enabled' => 'ელაჩამეფით',
-'search-mwsuggest-disabled' => 'ელაჩამეფიშ უმუშოთ',
 'searchrelated' => 'მათანგეფ',
 'searchall' => 'არძო',
 'showingresultsheader' => "{{PLURAL:$5|მოღალუ '''$1''' '''$3'''-შე|მოღალუეფ '''$1 - $2''' '''$3'''-შე}} '''$4'''-შო",
@@ -925,4 +923,7 @@ $messages = array(
 # Special:Tags
 'tag-filter' => '[[Special:Tags|ხინტკეფიშ]] ტკიბირი:',
 
+# Search suggestions
+'searchsuggest-search' => 'გორუა',
+
 );
index f28a7af..cc7e5a6 100644 (file)
@@ -141,43 +141,43 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#ווייטערפירן', '#הפניה', '#REDIRECT' ),
-       'notoc'                   => array( '0', '__קיין_אינהאלט_טאבעלע__', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
-       'nogallery'               => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
-       'toc'                     => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
-       'noeditsection'           => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                => array( '0', '__קיינקעפל__', '__ללא_כותרת__', '__NOHEADER__' ),
-       'currentday'              => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
-       'numberofpages'           => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
-       'pagename'                => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
-       'namespace'               => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
-       'fullpagename'            => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
-       'subpagename'             => array( '1', 'אונטערבלאטנאמען', 'שם דף המשנה', 'SUBPAGENAME' ),
-       'talkpagename'            => array( '1', 'רעדנבלאטנאמען', 'שם דף השיחה', 'TALKPAGENAME' ),
-       'subst'                   => array( '0', 'ס:', 'SUBST:' ),
-       'img_thumbnail'           => array( '1', 'קליין', 'ממוזער', 'thumbnail', 'thumb' ),
-       'img_manualthumb'         => array( '1', 'קליין=$1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'               => array( '1', 'רעכטס', 'ימין', 'right' ),
-       'img_left'                => array( '1', 'לינקס', 'שמאל', 'left' ),
-       'img_none'                => array( '1', 'אן', 'ללא', 'none' ),
-       'img_center'              => array( '1', 'צענטער', 'מרכז', 'center', 'centre' ),
-       'img_sub'                 => array( '1', 'אונטער', 'תחתי', 'sub' ),
-       'img_top'                 => array( '1', 'אויבן', 'למעלה', 'top' ),
-       'img_bottom'              => array( '1', 'אונטן', 'למטה', 'bottom' ),
-       'img_link'                => array( '1', 'לינק=$1', 'קישור=$1', 'link=$1' ),
-       'img_alt'                 => array( '1', 'טעקסט=$1', 'טקסט=$1', 'alt=$1' ),
-       'grammar'                 => array( '0', 'גראמאטיק:', 'דקדוק:', 'GRAMMAR:' ),
-       'plural'                  => array( '0', 'מערצאל:', 'רבים:', 'PLURAL:' ),
-       'fullurl'                 => array( '0', 'פֿולער_נאמען:', 'כתובת מלאה:', 'FULLURL:' ),
-       'raw'                     => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ),
-       'displaytitle'            => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ),
-       'language'                => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
-       'special'                 => array( '0', 'באזונדער', 'מיוחד', 'special' ),
-       'defaultsort'             => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'               => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
-       'pagesize'                => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
-       'url_wiki'                => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
+       'redirect'                  => array( '0', '#ווייטערפירן', '#הפניה', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__קיין_אינהאלט_טאבעלע__', '__ללא_תוכן_עניינים__', '__ללא_תוכן__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
+       'toc'                       => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
+       'noheader'                  => array( '0', '__קיינקעפל__', '__ללא_כותרת__', '__NOHEADER__' ),
+       'currentday'                => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
+       'numberofpages'             => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
+       'pagename'                  => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
+       'namespace'                 => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
+       'fullpagename'              => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'אונטערבלאטנאמען', 'שם דף המשנה', 'SUBPAGENAME' ),
+       'talkpagename'              => array( '1', 'רעדנבלאטנאמען', 'שם דף השיחה', 'TALKPAGENAME' ),
+       'subst'                     => array( '0', 'ס:', 'SUBST:' ),
+       'img_thumbnail'             => array( '1', 'קליין', 'ממוזער', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'קליין=$1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'רעכטס', 'ימין', 'right' ),
+       'img_left'                  => array( '1', 'לינקס', 'שמאל', 'left' ),
+       'img_none'                  => array( '1', 'אן', 'ללא', 'none' ),
+       'img_center'                => array( '1', 'צענטער', 'מרכז', 'center', 'centre' ),
+       'img_sub'                   => array( '1', 'אונטער', 'תחתי', 'sub' ),
+       'img_top'                   => array( '1', 'אויבן', 'למעלה', 'top' ),
+       'img_bottom'                => array( '1', 'אונטן', 'למטה', 'bottom' ),
+       'img_link'                  => array( '1', 'לינק=$1', 'קישור=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', 'טעקסט=$1', 'טקסט=$1', 'alt=$1' ),
+       'grammar'                   => array( '0', 'גראמאטיק:', 'דקדוק:', 'GRAMMAR:' ),
+       'plural'                    => array( '0', 'מערצאל:', 'רבים:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'פֿולער_נאמען:', 'כתובת מלאה:', 'FULLURL:' ),
+       'raw'                       => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'באזונדער', 'מיוחד', 'special' ),
+       'defaultsort'               => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
+       'pagesize'                  => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
+       'url_wiki'                  => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
 );
 
 $messages = array(
@@ -378,7 +378,7 @@ $messages = array(
 'protect_change' => 'טוישן',
 'protectthispage' => 'באשיץ דעם בלאט',
 'unprotect' => 'ענדערונג באַשיצונג',
-'unprotectthispage' => '×¢× ×\93ער×\95× ×\92 באַשיצונג פון דעם בלאַט',
+'unprotectthispage' => '×¢× ×\93ער×\9f באַשיצונג פון דעם בלאַט',
 'newpage' => 'נייער בלאַט',
 'talkpage' => 'שמועסט איבער דעם בלאט',
 'talkpagelinktext' => 'שמועס',
@@ -566,9 +566,10 @@ $1',
 'protectedpagetext' => 'דער בלאט איז פארשפארט צו אפהאלטן ענדערונגן.',
 'viewsourcetext' => 'איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:',
 'viewyourtext' => "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
-'protectedinterface' => 'דער בלאַט שטעלט צו אינטערפֿייס טעקסט פֿאַרן װײכװאַרג, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.',
-'editinginterface' => "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן די אויסזען פון דער סיסטעם מודעות פאר אלע אנדערע באניצערס.
-פֿאַר איבערזעצן, באַטראַכטס באַניצן [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
+'protectedinterface' => 'דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.
+כדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.',
+'editinginterface' => "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אלע אנדערע באניצער אויף דער וויקי.
+כדי צולייגן אדער ענדערן איבערזעצונגען, באַטראַכטס באַניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
 'sqlhidden' => '(SQL פארלאנג באהאלטן)',
 'cascadeprotected' => 'דער בלאט איז פארשפארט צום ענדערן וויבאלד ער איז איינגעשלאסן אין איינע פון די פאלגנדע {{PLURAL:$1|בלאט, וואס איז|בלעטער, וואס זענען}} באשיצט מיט דער קאסקייד אפציע:
 
@@ -594,7 +595,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''איר האָט זיך ארויסלאָגירט.'''
 
-איר קענט ממשיך זיין ניצן {{SITENAME}} אַנאנים, אדער איר קענט  [[Special:UserLogin|צוריק אריינלאגירן]] מיט דעם זעלבן אדער אן אנדער באַניצער נאָמען. באמערקט אז געוויסע בלעטער קענען זיך ווייטער ארויסשטעלן אזוי ווי ווען איר זענט אריינלאגירט, ביז איר וועט אויסליידיגן דעם בלעטערער זאפאס.",
+איר קענט ממשיך זיין ניצן {{SITENAME}} אַנאנים, אדער איר קענט  <span class='plainlinks'>[$1 צוריק אריינלאגירן]</span> מיט דעם זעלבן אדער אן אנדער באַניצער נאָמען. באמערקט אז געוויסע בלעטער קענען זיך ווייטער ארויסשטעלן אזוי ווי ווען איר זענט אריינלאגירט, ביז איר וועט אויסליידיגן דעם בלעטערער זאפאס.",
 'welcomecreation' => '== ברוך הבא, $1! ==
 אייער קאנטע איז באשאפן געווארן. נישט פארגעסן צו ענדערן אייערע [[Special:Preferences|{{SITENAME}} פרעפֿערענצן]].',
 'yourname' => 'באַניצער נאָמען:',
@@ -854,8 +855,13 @@ $2
 אדער [{{fullurl:{{FULLPAGENAME}}|action=edit}} רעדאַקטירן דעם בלאט]</span>.',
 'noarticletext-nopermission' => 'דערווײַל איז נישט פאַראַן קיין שום טעקסט אין דעם בלאַט.
 איר קענט [[Special:Search/{{PAGENAME}}| זוכן דעם בלאט טיטל]] אין אנדערע בלעטער,
-אדער <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>.',
-'userpage-userdoesnotexist' => 'באניצער קאנטע "<nowiki>$1</nowiki>" איז נישט אײַנגעשריבן. קוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.',
+אדער <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>., אבער איר זענט נישט ערלויבט צו שאפֿן דעם בלאט.',
+'missing-revision' => 'די רעוויזיע #$1 פונעם בלאט "{{PAGENAME}}" עקזיסטירט נישט.
+
+דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
+פרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].',
+'userpage-userdoesnotexist' => 'באניצער קאנטע "$1" איז נישט אײַנגעשריבן. 
+קוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.',
 'userpage-userdoesnotexist-view' => 'באניצער קאנטע "$1" איז נישט איינגעשריבן.',
 'blocked-notice-logextract' => 'דער באַניצער איז דערווייַל פֿאַרשפאַרט.
 די לעצטע בלאָקירן לאג אַקציע איז צוגעשטעלט אונטן:',
@@ -977,6 +983,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' => 'די ענדערונג קען ווערן מבוטל. ביטע נאכקוקן די פארגלייך פון אונטן צו זיין זיכער אז דאס איז וואס איר ווילט טאן, און דערנאך היט-אפ די ענדערונגן פון אונטן צו ענדיגן דאס בטל מאכן די ענדערונג.',
@@ -1112,7 +1119,8 @@ $1",
 'revdelete-only-restricted' => 'פֿעלער בײַם באַהאַלטן דאס איינסל פֿון  $2, $1: איר קענט נישט באהאלטן פרטים פון אַדמיניסטראטורן נאר אויב איר וויילט אויס איינע פון די אַנדערע באַהאַלטן ברירות.',
 'revdelete-reason-dropdown' => '*אלגעמיינע אויסמעקן סיבות
 ** קאפירעכט ברעכן
-** פערזענלעכע אינפֿארמאַציע
+** נישט פאַסנדיקע הערה אדער פערזענלעכע אינפֿארמאַציע
+** נישט פאַסנדיקער באַניצער נאמען
 ** אינפֿארמאַציע מעגלעך צו זיין לשון הרע',
 'revdelete-otherreason' => 'אנדער/צוגעגעבענע סיבה:',
 'revdelete-reasonotherlist' => 'אנדער סיבה',
@@ -1203,8 +1211,6 @@ $1",
 'search-interwiki-caption' => 'שוועסטער פראיעקטן',
 'search-interwiki-default' => '$1 רעזולטאטן:',
 'search-interwiki-more' => '(נאך)',
-'search-mwsuggest-enabled' => 'מיט פארשלאגן',
-'search-mwsuggest-disabled' => 'אן פארשלאגן',
 'search-relatedarticle' => 'פארבינדן',
 'mwsuggest-disable' => 'בטל מאכן פארשלאגן AJAX',
 'searcheverything-enable' => 'זוכן אין אלע נאמענטיילן',
@@ -1300,7 +1306,7 @@ $1",
 'timezoneregion-indian' => 'אינדישער אקעאן',
 'timezoneregion-pacific' => 'פאציפישער אקעאן',
 'allowemail' => 'ערלויבן אנדערע צו שיקן אײַך ע־פאסט',
-'prefs-searchoptions' => '×\91ר×\99ר×\95ת ×¤×\90ר ×\96×\95×\9b×\9f',
+'prefs-searchoptions' => 'זוכן',
 'prefs-namespaces' => 'נאָמענטיילן',
 'defaultns' => 'אנדערשט זוך אין די נאמענטיילן:',
 'default' => 'גרונטלעך',
@@ -1424,6 +1430,7 @@ $1",
 'right-writeapi' => 'ניצן דעם שרײַבן API',
 'right-delete' => 'מעקן בלעטער',
 'right-bigdelete' => 'אויסמעקן בלעטער מיט לאַנגע היסטאריעס',
+'right-deletelogentry' => 'אויסמען און צוריקשטעלן געוויסע לאגבוך אקציעס',
 'right-deleterevision' => 'מעקן און צוריקשטעלן ספעציפישע רעוויזיעס פון בלעטער',
 'right-deletedhistory' => 'אײַערע אויסגעמעקטע היסטאריע פֿאַרשרײַבונגען, אן זייער אסאציאירטן טעקסט',
 'right-deletedtext' => 'באַקוקן אויסגעמעקטן טעקסט און ענדערונגען צווישן אויסגעמעקטע ווערסיעס',
@@ -1624,15 +1631,19 @@ $1",
 אויב איר ווילט דאך אַרויפֿלאָדן אײַער טעקע, ביטע גיין צוריק און ניצן אַן אַנדער נאָמען. 
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'די טעקע איז א דופליקאַט פון די פֿאלגנדע {{PLURAL:$1|טעקע|טעקעס}}:',
+'file-deleted-duplicate' => "א טעקע אידענטיש מיט דער טעקע ([[:$1]]) האט מען שוין אויסגעמעקט.
+איר זאלט קאנטראלירן דער טעקע'ס אויסמעקן היסטאריע איידער איר טוט ארויפלאדן פונדאסניי.",
 'uploadwarning' => 'אַרויפֿלאָדן וואָרענונג',
 'uploadwarning-text' => 'זײַט אַזוי גוט מאדיפֿיצירן די טעקע באַשרייבונג און פרובירט נאכאַמאָל.',
-'savefile' => '×\98עקע ×\90ױפֿ×\94×\99×\98×\9f',
+'savefile' => '×\90ױפֿ×\94×\99×\98×\9f ×\98עקע',
 'uploadedimage' => 'אַרױפֿגעלאָדן "[[$1]]"',
 'overwroteimage' => 'אַרויפֿגעלאָדן א נײַע ווערסיע פון "[[$1]]"',
 'uploaddisabled' => 'אַרויפֿלאָדן טעקעס מבוטל',
 'copyuploaddisabled' => 'ארויפלאדן דורך URL אומאקטיווירט',
-'uploadfromurl-queued' => 'אייער ארויפלאד איז אין דער רייע.',
-'uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אצינד.',
+'uploadfromurl-queued' => 'אייער ארויפֿלאד איז אין דער רייע.',
+'uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט.',
+'php-uploaddisabledtext' => 'אַרויפֿלאָדן טעקעס נישט דערמעגלעכט אין PHP.
+זייט אזוי גוט בודק זיין די file_uploads שטעלונג.',
 'uploadscripted' => 'די טעקע האט א סקריפט אדער HTML קאד וואס קען ווערן פֿאלש אויסגעטייטשט דורך א בלעטערער',
 'uploadvirus' => 'די טעקע האָט אַ ווירוס! פרטים: <div dir="rtl">$1</div>',
 'upload-source' => 'מקור טעקע',
@@ -1643,6 +1654,8 @@ $1",
 'upload-description' => 'טעקע שילדערונג',
 'upload-options' => "אַרויפֿלאָדן ברירה'ס",
 'watchthisupload' => 'אויפֿפאַסן דעם בלאט',
+'filewasdeleted' => 'א טעקע מיט דעם נאמען האט מען שוין ארויפגעלאדן און דערנאך אויסגעמעקט.
+איר זאלט בודק זיין דעם $1 איידער איר הייבט אן ארויפלאדן ווידעראמאל.',
 'upload-success-subj' => 'דערפֿאלגרייכער ארויפֿלאָד',
 'upload-success-msg' => 'אײַער אַרויפֿלאָד פֿון [$2] איז געווען דערפֿאלגרייך. עס איז פֿאַראָן דאָ: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'אַרויפֿלאָדן פראבלעם',
@@ -1653,10 +1666,14 @@ $1",
 'upload-warning-msg' => 'געווען א פראבלעם מיט אײַער ארויפֿלאָד פֿון [$2]. איר קענט צוריקקערן צום [[Special:Upload/stash/$1|ארויפֿלאָדן פֿארעם]] צו פֿאררעכטן דעם פראבלעם.',
 
 'upload-proto-error' => 'פֿאלשער פראטאקאל',
+'upload-proto-error-text' => 'ביי א ווייטן ארויפלאד דארף דער URL אנהייבן מיט <code>http://</code> אדער <code>ftp://</code>.',
 'upload-file-error' => 'אינערליכער פֿעלער',
 'upload-file-error-text' => 'אן אינערלעכע פֿעלער האט פאסירט ביים פרובירן צו שאפֿן א פראוויזארישע טעקע אויפֿן סארווער.
 ביטע פֿארבינדט זיך מיט א [[Special:ListUsers/sysop|סיסאפ]].',
 'upload-misc-error' => 'אומבאַוואוסטער ארויפֿלאָדן גרײַז',
+'upload-misc-error-text' => 'אן אומבאקאנטער גרייז האט פאסירט בשעת דעם ארויפלאד.
+ביטע באשטעטיקט אז דער  URL איז גילטיק און דערגרייכבאר און פרובירט נאכאמאל.
+ווען דער פראבלעם בלייבט ווייטער, קאנטאקטירט  א [[Special:ListUsers/sysop|סיסאפ]].',
 'upload-too-many-redirects' => 'דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.',
 'upload-unknown-size' => 'אומוויסנדע גרייס',
 'upload-http-error' => 'א HTTP גרײַז האט פאַסירט: $1',
@@ -1675,9 +1692,11 @@ $1",
 'backend-fail-closetemp' => 'קען נישט שליסן צייַטווייַליקע טעקע.',
 'backend-fail-read' => 'קען נישט ליינען טעקע "$1".',
 'backend-fail-create' => 'קען נישט שרייבן טעקע "$1".',
+'backend-fail-maxsize' => 'מ\'האט נישט געקענט שרייבן די טעקע "$1" ווייל זי איז גרעסער פון {{PLURAL:$2|איין בייט|$2 בייטן}}.',
 
 # Lock manager
 'lockmanager-notlocked' => 'מ\'קען נישט אויפֿשליסן "$1"; ער איז נישט פֿארשלאסן.',
+'lockmanager-fail-deletelock' => 'נישט מעגלעך אויסמעקן שלאס טעקע פאר "$1".',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'ספעציפירטע טעקע איז נישט קיין ZIP טעקע.',
@@ -1767,6 +1786,7 @@ $1",
 'shared-repo-from' => 'פֿון $1',
 'shared-repo' => 'א געמיינזאַמער זאַפאַס',
 'shared-repo-name-wikimediacommons' => 'וויקימעדיע קאמאנס',
+'upload-disallowed-here' => 'ליידער קענט איר נישט איבערשרייבן דאס בילד.',
 
 # File reversion
 'filerevert' => 'צוריקדרייען $1',
@@ -1793,6 +1813,7 @@ $1",
 ** קאפירעכט פֿאַרלעצונג
 ** דופליקאַט',
 'filedelete-edit-reasonlist' => 'רעדאַקטירן אויסמעקן סיבות',
+'filedelete-maintenance' => 'אויסמעקן און צוריקשטעלן טעקעס צײַטווײַליק אומדערמעגלעכט בשעת אויפהאלטן.',
 'filedelete-maintenance-title' => 'מען קען נישט אויסמעקן די טעקע',
 
 # MIME search
@@ -1860,13 +1881,14 @@ $1",
 'withoutinterwiki' => 'בלעטער אן שפראך פֿארבינדונגען',
 'withoutinterwiki-summary' => 'די פֿאלגנדע בלעטער פֿאַרבינדן נישט מיט אַנדערע שפראַך ווערסיעס',
 'withoutinterwiki-legend' => 'פרעפֿיקס',
-'withoutinterwiki-submit' => 'ווײַז',
+'withoutinterwiki-submit' => 'ווײַזן',
 
 'fewestrevisions' => 'בלעטער מיט די מינדערסטע רעוויזיעס',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|בייט|בייטן}}',
 'ncategories' => '{{PLURAL:$1|קאטעגאריע|$1 קאטעגאריעס}}',
+'ninterwikis' => '$1 {{PLURAL:$1|אינטערוויקי|אינטערוויקיס}}',
 'nlinks' => '$1 {{PLURAL:$1|לינק|לינקען}}',
 'nmembers' => '$1 {{PLURAL:$1|בלאט|בלעטער}}',
 'nrevisions' => '{{PLURAL:$1|איין רעוויזיע|$1 רעוויזיעס}}',
@@ -1894,6 +1916,7 @@ $1",
 'mostlinkedtemplates' => 'מערסט פֿארבינדענע מוסטערן',
 'mostcategories' => 'אַרטיקלען מיט די מערסטע קאַטעגאָריעס',
 'mostimages' => 'מערסט פֿארבונדענע טעקעס',
+'mostinterwikis' => 'בלעטער מיט די מערסטע אינטערוויקיס',
 'mostrevisions' => 'אַרטיקלען מיט די מערסטע באַאַרבעטונגען',
 'prefixindex' => 'פּרעפֿיקס אינדעקס',
 'prefixindex-namespace' => 'אלע בלעטער מיט פרעפֿיקס ($1 נאמענטייל)',
@@ -1920,7 +1943,7 @@ $1",
 'move' => 'באַװעגן',
 'movethispage' => 'באוועג דעם בלאט',
 'unusedimagestext' => 'די פֿאלגנדע טעקעס עקזיסטירן אבער ווערן נישט גענוצט אין קיין שום בלאַט.
\92×\99×\90 אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.',
\92×\99×\98 אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.',
 'unusedcategoriestext' => 'די פֿאלגנדע קאטעגאריעס עקסיסטירן, אבער קיין בלאט אדער קאטעגאריע ניצט זיי נישט.',
 'notargettitle' => 'קיין ציל',
 'notargettext' => 'איר האט נישט ספעציפֿירט קיין ציל בלאַט אדער באַניצער אויף וועמען אויסצופֿירן די פעולה.',
@@ -2033,8 +2056,10 @@ $1",
 # E-mail user
 'mailnologin' => 'נישטא קיין אדרעס צו שיקן',
 'mailnologintext' => 'איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.',
-'emailuser' => 'אַרויסשיקן ע-פאסט צו דעם באַניצער',
-'emailpage' => 'אַרויסשיקן ע-פאסט צו באַניצער.',
+'emailuser' => 'שיקן ע-פאסט צו דעם באַניצער',
+'emailuser-title-target' => 'שיקן {{GENDER:$1|דעם באניצער|די באניצערין}} ע־פאסט',
+'emailuser-title-notarget' => 'שיקן א באניצער ע־פאסט',
+'emailpage' => 'שיקן ע-פאסט צו באַניצער',
 'emailpagetext' => 'איר קענט ניצן דעם פֿארעם אונטן צו שיקן אן בליצבריוו צו דעם דאזיגן באַניצער.
 דער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באניצער פרעפערנעצן]] וועט זיך ווייזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.',
 'usermailererror' => 'בליצבריוו האט צוריקגעשיקט א טעות:',
@@ -2073,7 +2098,7 @@ $1",
 'nowatchlist' => 'איר האט נישט קיין שום בלעטער אין אייער אויפפַּאסונג ליסטע.',
 'watchlistanontext' => 'ביטע $1 כדי צו זען אדער ענדערן בלעטער אין אייער אַכטגעבן ליסטע.',
 'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
-'watchnologintext' => '×\90×\99ר ×\9e×\95×\96×\98 ×\96×\99×\99×\9f ×\90ר×\99×\99× ×\92עס×\99×\99× ×\98 [[Special:UserLogin|×\90ר×\99×\99× ×\92×\9c×\90×\92×\99ר×\98]] ×¦×\95 ×\9e×\90×\93×\99פֿ×\99צ×\99ר×\9f ×\90×\99×\99ער ×\90×\95×\99פפַּ×\90ס×\9f ליסטע.',
+'watchnologintext' => '×\90×\99ר ×\93×\90רפֿ×\98 ×\96×\99×\99×\9f [[Special:UserLogin|×\90ר×\99×\99× ×\92×\9c×\90×\92×\99ר×\98]] ×¦×\95 ×\9e×\90×\93×\99פֿ×\99צ×\99ר×\9f ×\90×\99×\99ער ×\90×\95×\99פפַּ×\90ס×\95× ×\92Ö¾ליסטע.',
 'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
 'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
 
@@ -2087,12 +2112,12 @@ $1",
 'unwatchthispage' => 'ענדיגן אויפֿפאַסן',
 'notanarticle' => 'דאס איז נישט קיין אינהאלט בלאט',
 'notvisiblerev' => 'די באארבעטונג איז געווארן אויסגעמעקט',
-'watchnochange' => 'ק×\99×\99× ×¢ ×¤Ö¿×\95×\9f ×\90ײַערע ×\90×\95×\99פֿ×\92עפ×\90ַס×\98×¢ ×\91×\9c×¢×\98ער ×\96×¢× ×¢×\9f ×\91×\90Ö·×\90ַר×\91×¢×\98 ×\92×¢×\95×\95×\90ר×\9f אין דעם צײַט פעריאד געוויזן.',
+'watchnochange' => 'ק×\99×\99× ×¢ ×¤Ö¿×\95×\9f ×\90ײַערע ×\90×\95×\99פֿ×\92עפ×\90ַס×\98×¢ ×\91×\9c×¢×\98ער ×\94×\90×\91×\9f ×\96×\99×\9a ×\92×¢×¢× ×\93ער×\98 אין דעם צײַט פעריאד געוויזן.',
 'watchlist-details' => '{{PLURAL:$1|איין בלאט|$1 בלעטער}} אין אייער אויפֿפאסן ליסטע (נישט רעכענען  רעדן בלעטער).',
 'wlheader-enotif' => '* ע-פאסט מעלדונג ערמעגליכט.',
 'wlheader-showupdated' => "* בלעטער געענדערט זײַט אײַער לעצטן וויזיט זען געוויזן '''דיק'''",
 'watchmethod-recent' => 'קאנטראלירן לעצטע ענדערונגען פֿאַר אויפֿגעפאַסטע בלעטער',
-'watchmethod-list' => 'ק×\90× ×\98ר×\90×\9c×\99ר×\9f ×\91×\9c×¢×\98ער ×\90×\99×\9f ×\90Ö·×\9b×\98×\92×¢×\91×\9fÖ¾×\9c×\99ס×\98×¢ ×¤Ö¿×\90ַר × ×²Ö·×¢ ×¨×¢×\93×\90ַק×\98×\99רונגען',
+'watchmethod-list' => 'ק×\90× ×\98ר×\90×\9c×\99ר×\9f ×\91×\9c×¢×\98ער ×\90×\99×\9f ×\90Ö·×\9b×\98×\95× ×\92Ö¾×\9c×\99ס×\98×¢ ×¤Ö¿×\90ַר ×\9cעצ×\98×¢ ×¢× ×\93×¢רונגען',
 'watchlistcontains' => 'אייער אויפֿפאסונג ליסטע אנטהאלט {{PLURAL:$1|איין בלאט|$1 בלעטער}}.',
 'iteminvalidname' => "פּראָבלעם מיט '$1', אומגילטיקער נאָמען ...",
 'wlnote' => "אונטן {{PLURAL:$1|איז די לעצטע ענדערונג|זענען די לעצטע '''$1''' ענדערונגען}} אין {{PLURAL:$2|דער לעצטער שעה|די לעצטע '''$2''' שעה'ן}} ביז $3, $4.",
@@ -2298,6 +2323,7 @@ $UNWATCHURL
 'undelete-search-box' => 'זוכן אויסגעמעקטע בלעטער',
 'undelete-search-prefix' => 'ווײַז בלעטער וואס הייבן אן מיט:',
 'undelete-search-submit' => 'זוכן',
+'undelete-error' => 'גרייז ביים צוריקשטעלן בלאט',
 'undelete-error-short' => 'טעות ביים צוריקשטעלן טעקע: $1',
 'undelete-error-long' => 'גרײַזן געטראפֿן בײַם ווידערשטעלן די טעקע:
 
@@ -2501,6 +2527,8 @@ $1',
 'locknoconfirm' => 'איר האט נישט אָנגעצייכנט דאָס באַשטעטיקונג קעסטל.',
 'lockdbsuccesssub' => 'דאַטנבאַזע פֿאַרשפאַרט מיט הצלחה',
 'unlockdbsuccesssub' => 'דאטנבאזע שלאס אראפגענומען',
+'lockdbsuccesstext' => 'די דאטנבאזע איז געשלאסן .<br />
+געדענקט [[Special:UnlockDB|אוועקנעמען דעם שלאס ]] ווען אייער אויפהאלטונד איז געענדיקט.',
 'unlockdbsuccesstext' => 'די דאַטנבאַזע איז געווארן אויפֿגעשלאסן',
 'databasenotlocked' => 'די דאַטנבאַזע איז נישט פֿאַרשלאסן.',
 'lockedbyandtime' => '(דורך $1 אום $2 בײַ $3)',
@@ -2704,7 +2732,6 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript טעסט',
-'javascripttest-disabled' => 'די  פֿונקציע איז אומאַקטיווירט אין דער דאזיקער וויקי.',
 'javascripttest-title' => 'דורכפירנדיק $1 בדיקות',
 'javascripttest-pagetext-skins' => 'קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:',
 'javascripttest-qunit-intro' => 'זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.',
@@ -2838,7 +2865,6 @@ $1',
 'pageinfo-authors' => 'סה"כ צאָל באַזונדערע שרײַבער',
 'pageinfo-recent-edits' => 'לעצטיקע צאל רעדאקטירונגען (במשך די לעצטע $1)',
 'pageinfo-recent-authors' => 'לעצטיקע צאָל באַזונדערע שרײַבער',
-'pageinfo-restriction' => 'בלאט שוץ (<code>$1</code>)',
 'pageinfo-magic-words' => '{{PLURAL:$1|מאגיש ווארט|מאגישע ווערטער}} ($1)',
 'pageinfo-hidden-categories' => 'באהאלטענע {{PLURAL:$1|קאטעגאריע|קאטעגאריעס}} ($1)',
 'pageinfo-templates' => ' {{PLURAL:$1|אריבערגעשלאסענער מוסטער|אריבערגשלאסענע מוסטערן}} ($1)',
@@ -2886,6 +2912,9 @@ $1',
 'nextdiff' => 'קומענדיקע ווערסיע ←',
 
 # Media information
+'mediawarning' => "'''ווארענונג''': דער טעקע טיפ קען אנטהאלטן בייזוויליקן קאד.
+דורכפירן דעם קאד קען שעדיקן אייער סיסטעם.",
+'imagemaxsize' => "מאקסימאלע בילד גרייס :<br />''(פאר טעקע באשרייבונג בלעטער)''",
 'thumbsize' => 'קליינבילד גרייס:',
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, {{PLURAL:$3|איין בלאט|$3 בלעטער}}',
@@ -2967,6 +2996,7 @@ $1',
 'exif-orientation' => 'אריענטאַציע',
 'exif-samplesperpixel' => 'צאל קאמאפאנענטן',
 'exif-planarconfiguration' => 'דאטן איינארדנונג',
+'exif-jpeginterchangeformatlength' => 'בייטן פון JPEG דאטן',
 'exif-datetime' => 'טעקע ענדערונג דאטע און צײַט',
 'exif-imagedescription' => 'בילד טיטל',
 'exif-make' => 'פֿאטא-אפאראט פֿאבריצירער',
@@ -3607,6 +3637,10 @@ $5
 'feedback-bugcheck' => 'געוואלדיק! אבער זייט בודק אז עס איז נישט איינער פון די [$1 באוואוסטע באגן].',
 'feedback-bugnew' => "כ'האב בודק געווען. רעפארטירט א נייעם באג.",
 
+# Search suggestions
+'searchsuggest-search' => 'זוכן',
+'searchsuggest-containing' => 'כולל…',
+
 # API errors
 'api-error-badaccess-groups' => 'איר האט נישט קיין רעכטן אַרויפֿלאָדן טעקעס אויף דער וויקי.',
 'api-error-badtoken' => 'אינערלעכער גרײַז: סימן טויג נישט.',
index 87aa016..d20de05 100644 (file)
@@ -60,7 +60,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn àtúnṣe oníìṣọ́ nínú àwọn àtúnṣe tuntun',
 'tog-newpageshidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn ojúewé oníìṣọ́ lọ́dọ̀ àtòjọ ojúewé tuntun',
 'tog-extendwatchlist' => "Ìfẹ̀ àmójútó láti ṣ'àfihàn gbogbo àtúnṣe, kìí ṣe tuntun nìkan",
-'tog-usenewrc' => 'Ìlò áwọn àtúnṣe tuntun aláàmúdára (JavaScript pọndandan)',
+'tog-usenewrc' => 'Ìtò àwọn àtúnṣe gẹ́gẹ́bí ojúewé nínú àwọn àtúnṣe tuntun àti ìmújútó (JavaScript pọndandan)',
 'tog-numberheadings' => 'Àwọn àkọlé nọmba-araẹni',
 'tog-showtoolbar' => 'Ìfihàn pẹpẹ irinṣẹ́ àtúnṣe (JavaScript pọndandan)',
 'tog-editondblclick' => "Ṣ'àtúnṣe àwọn ojúewé ní kíkàn lẹ́mẹjì (JavaScript)",
@@ -68,17 +68,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala (JavaScript pọndandan)',
 'tog-showtoc' => 'Ìfihàn tábìlì àkóónú (fún àwọn ojúewé tó ní ju orí ọ̀rọ̀ 3 lọ)',
 'tog-rememberpassword' => "Ṣè'rántí àkọọ́lẹ̀ ìwọlé mi lórí agbétàkùn yìí (fún {{PLURAL:$1|ọjọ́|ọjọ́}} $1 pípẹ́jùlọ)",
-'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá mọ́ ìmójútó mi",
-'tog-watchdefault' => "S'àfikún ojúewé tí mo s'àtúnse mọ́ ìmójútó mi",
-'tog-watchmoves' => "S'àfikún ojúewé tí mo yípò mọ́ ìmójútó mi",
-'tog-watchdeletion' => "S'àfikún ojúewé tí mo parẹ́ mọ́ ìmójútó mi",
+'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá àti àwọn fáìlì tí mo rùsókè mọ́ ìmójútó mi",
+'tog-watchdefault' => "Ṣ'àfikún àwọn ojúewé àti fáìlì tí mo ṣ'àtúnse mọ́ ìmójútó mi",
+'tog-watchmoves' => "Ṣ'àfikún àwọn ojúewé ati fáìlì tí mo yípò mọ́ ìmójútó mi",
+'tog-watchdeletion' => "Ṣ'àfikún àwọn ojúewé àti fáìlì tí mo parẹ́ mọ́ ìmójútó mi",
 'tog-minordefault' => "Se àmì sí gbogbo àtúnse gẹ́gẹ́ bi kékeré lát'ìbẹ̀rẹ̀.",
 'tog-previewontop' => "Se àyẹ̀wò kí ẹ tó s'àtúnṣe",
 'tog-previewonfirst' => "S'àfihàn àgbéwò fún àtúnse àkọ́kọ́",
 'tog-nocache' => 'Ìdínà fífi ojúewé pamọ́ sínú cache',
-'tog-enotifwatchlistpages' => 'Fi e-mail ránṣẹ́ sími tí ojúewé tí mò ún mójútó bá yípadà',
+'tog-enotifwatchlistpages' => 'Fi e-mail ránṣẹ́ sí mi tí ojúewé tàbí fáìlì tí mò ún mójútó bá yípadà',
 'tog-enotifusertalkpages' => 'Fi e-mail ránṣẹ́ sími tí ojúewé oníṣe mi bá yípadà',
-'tog-enotifminoredits' => 'Fi e-mail ránṣẹ́ sími bákannà fún àtúnṣe kékékèé sí ojúewé',
+'tog-enotifminoredits' => 'Fi e-mail ránṣẹ́ sí mi bákannà fún àtúnṣe kékékèé sí àwọn ojúewé àti fáìlì',
 'tog-enotifrevealaddr' => "Ṣ'àfihàn àdírẹ́ẹ̀sì e-mail mi nínú àwọn ìránṣẹ́ e-mail",
 'tog-shownumberswatching' => "S'àfihàn iye àwọn oníṣe tí wọn tẹjú mọ́ọ",
 'tog-oldsig' => 'Ìtọwọ́bọ̀wé tówà:',
@@ -371,9 +371,9 @@ $1',
 'dberrortext' => 'Àṣìṣe ìsoọ̀rọ̀pọ̀ ìtọrọ ibùdó-dátà kan ti ṣẹlẹ̀.
 Ó lè jẹ́ nítorí àṣìṣe inú atòlànà.
 Ìgbìyànjú ìtọrọ ibùdó-dátà ṣẹlẹ̀ jẹ́: 
-<blockquote><tt>$1</tt></blockquote>
-láti inú ìmúṣiṣẹ́ "<tt>$2</tt>".
-Ibùdó-dátà mú àṣìṣe "<tt>$3: $4</tt>" padà.',
+<blockquote><code>$1</code></blockquote>
+láti inú ìmúṣiṣẹ́ "<code>$2</code>".
+Ibùdó-dátà mú àṣìṣe "<samp>$3: $4</samp>" padà.',
 'dberrortextcl' => 'Àṣìṣe ìsoọ̀rọ̀pọ̀ ìtọrọ ibùdó-dátà kan ti ṣẹlẹ̀.
 Ìgbìyànjú ìtọrọ ibùdó-dátà ṣẹlẹ̀ jẹ́: 
 "$1"
@@ -428,10 +428,10 @@ Oníṣe mìíràn le ti paárẹ́.',
 'protectedpagetext' => 'Ojúewé yìí tijẹ́ títìpa. Ẹ kò le se àtúnṣe.',
 '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ìí n pèsè ìfojúkojú ìkọ̀wé fún software, a ti dínà si láti mọ́ gba ìlòkulò ní àà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ò.',
 'editinginterface' => "'''Ìkìlọ̀:''' Ẹ ún ṣàtúnṣe ojúewé tó jẹ́ lílò láti pèsè ìkọ ìfojúkojú fún àtòlànà kọ̀mpútà.
-Àwọn ìyípadà sí ojúewé yìí yíò kan ìhànsí ìfojúkojú oníṣe fún àwọn oníṣe míràn.
-Fún ìyédèpadà, ẹ jọ̀wọ́ ẹ lo [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], iṣẹ́-ọwọ́ ìṣọdìbílẹ̀ MediaWiki.",
+Àwọn ìyípadà sí ojúewé yìí yíò kan ìhànsí ìfojúkojú oníṣe fún àwọn oníṣe míràn lọ́rí wiki yìí.
+Láti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àwọn wiki, ẹ jọ̀wọ́ ẹ lo [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], iṣẹ́-ọwọ́ ìṣọdìbílẹ̀ MediaWiki.",
 'sqlhidden' => '(bíbòmọ́lẹ̀ ìbéèrè SQL)',
 'cascadeprotected' => 'Ojúewé yìí ti jẹ́ dídáàbòbò sí àtùnṣe, nítorípé ó wà nínú {{PLURAL:$1|ojúewé ìsàlẹ̀ yìí, tó jẹ́|àwọn ojúewé ìsàlẹ̀ wọ̀nyí, tí wọ́n jẹ́}} dídáàbòbò pẹ̀lú ìyàn "ajámọ́ra" ní títàn: $2',
 'namespaceprotected' => "A kò gbàyín ní ààyè láti ṣ'àtúnṣe àwọn ojúewé tó wà nínú orúkọàyè '''$1'''.",
@@ -448,7 +448,7 @@ Fún ìyédèpadà, ẹ jọ̀wọ́ ẹ lo [//translatewiki.net/wiki/Main_Page?
 # Login and logout pages
 'logouttext' => "'''Ẹ ti bọ́sọ́de.'''
 
-Ẹ le tẹ̀síwájú sí ní lo {{SITENAME}} láìmorúkọ yín, tàbí kí ẹ [[Special:UserLogin|padà wọlé]] bí ẹnikanan tàbí ẹlòmíràn.
+Ẹ 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! ==
 
@@ -610,7 +610,7 @@ $2
 'changeemail-no-info' => 'Ẹ gbódọ̀ wọlé láti bósí ojúewé yìí tààrà.',
 'changeemail-oldemail' => 'Àdírẹ̀sì E-mail ìsinsìnyí:',
 'changeemail-newemail' => 'Àdírẹ̀sì E-mail tuntun:',
-'changeemail-none' => '(kósí)',
+'changeemail-none' => '(kòsí)',
 'changeemail-submit' => 'Ìyípadà E-mail',
 'changeemail-cancel' => 'Fagilé',
 
@@ -709,7 +709,7 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àkọọ́lẹ̀ rẹ̀], tàbí [{{fullurl:{{FULLPAGENAME}}|action=edit}} kí ẹ ṣ\'àtúnṣe ojúewé òún]</span>.',
 '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>.',
+<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ìí.',
 '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ẹ̀.',
@@ -719,7 +719,6 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 * '''Firefox / Safari:''' Ẹ di ''Shift'' mú bí ẹ ṣe ún tẹ ''Reload'', tàbí kí ẹ tẹ ''Ctrl-F5'' tàbí ''Ctrl-R'' (''⌘-R'' lórí Mac)
 * '''Google Chrome:''' Ẹ tẹ ''Ctrl-Shift-R'' (''⌘-Shift-R'' lórí Mac)
 * '''Internet Explorer:''' Ẹ di ''Ctrl'' mú bí ẹ ṣe ún tẹ ''Refresh,'' tàbí kí ẹ tẹ ''Ctrl-F5''
-* '''Konqueror: '''Ẹ tẹ ''Reload'' tàbí kí ẹ tẹ ''F5''
 * '''Opera:''' Ẹ pa cache rẹ́ nínú ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò CSS tuntun yín kí ẹ tó múupamọ́.",
 'userjsyoucanpreview' => "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò JavaScript tuntun yín kí ẹ tó múupamọ́.",
@@ -965,10 +964,11 @@ Kò ṣe é bòmọ́lẹ̀.',
 'revdelete-concurrent-change' => 'Àsìṣe ìṣàtúnṣe ohun ọjọ́ọdún $2, $1: Ó dà bíi pé ẹ̀lòmíràn ti yí ibi-ipò rẹ̀ padà lásìkò kannáà tí ẹ̀yin ṣàtúnṣe rẹ̀.
 Ẹ jọ̀wọ́ ẹ yẹ àwọn àkọọ́lẹ̀ wò.',
 'revdelete-only-restricted' => 'Àsìṣe ìbòmọ́lẹ̀ ohun ọjọ́ọdún $2, $1: Ẹ kò le fi àwọn ohun sílẹ̀ láti wò lọ́wọ́ àwọn olùmójútó láì ṣe ìsàyàn ìkan nínú àwọn àṣàyàn ìhàn míràn.',
-'revdelete-reason-dropdown' => '*Àwọn ìdí ìdarẹ́ awọ́pọ̀
+'revdelete-reason-dropdown' => '*Àwọn ìdí tọ́ únsábà fa ìparẹ́ 
 ** Àìtẹ̀lé ẹ̀tọ́àwòkọ
-** Ìwífún taraẹni aláìyẹ
-** Ìwífún tó le fa ẹjọ́',
+** Àwísọ tí kò tọ́ tàbí àròyé àdáni
+** Orúkọ oníṣe tí kò tọ́
+** Àròyé tó le fa ẹjọ́ wá',
 'revdelete-otherreason' => 'Ìdíẹ̀ míràn/àfikún',
 'revdelete-reasonotherlist' => 'Ìdí míràn',
 'revdelete-edit-reasonlist' => 'Àtúnṣe àwọn ìdí ìparẹ́',
@@ -1062,8 +1062,6 @@ Kò ṣe é bòmọ́lẹ̀.',
 'search-interwiki-caption' => 'Àwọn iṣẹ́-ọwọ́ mìràn',
 'search-interwiki-default' => 'èsì $1',
 'search-interwiki-more' => '(tókù)',
-'search-mwsuggest-enabled' => 'pẹ̀lú àbá',
-'search-mwsuggest-disabled' => 'láìsí àbá',
 'search-relatedarticle' => 'Tóbáramu',
 'mwsuggest-disable' => 'Ìdálẹ́kun àwọn àbá AJAX',
 'searcheverything-enable' => 'Àwárí nínú gbogbo orúkọàyè:',
@@ -1157,7 +1155,7 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'timezoneregion-indian' => 'Òkun India',
 'timezoneregion-pacific' => 'Òkun Pàsífíkì',
 'allowemail' => 'Ìgbàláyè e-mail látọ̀dọ̀ àwọn oníṣe mìíràn',
-'prefs-searchoptions' => 'Àwọn àṣàyàn àwáàrí',
+'prefs-searchoptions' => 'Ṣàwárí',
 'prefs-namespaces' => 'Àwọn orúkọàyè',
 'defaultns' => 'Bíbẹ́ẹ̀kọ́ ṣe àwárí nínú àwọn orúkọàyè yìí:',
 'default' => 'níbẹ̀rẹ̀',
@@ -1325,7 +1323,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 '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í)',
+'rightsnone' => '(kòsí)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'wo ojúewé yìí',
@@ -1771,9 +1769,9 @@ Tó bá jẹ́ jíjọ̀ gẹ́gẹ́bí oníṣe, àwọn fáìlì tí oníṣe
 
 'disambiguations' => 'Àwọn ojúewé tó jápọ̀ mọ́ àwọn ojúewé ìṣeojútùú',
 'disambiguationspage' => 'Template:ojútùú',
-'disambiguations-text' => "Àwọn ojúewé ìsàlẹ̀ yìí jápọ̀ sí '''ojúewé ìṣeojúùtú'''.
-Ó yẹ kí wọn ó jápọ̀ sí oríọ̀rọ̀ tó yẹ wọ́n.<br />
-Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàkọ tó jápọ̀ láti [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Àwọn ojúewé ìsàlẹ̀ yìí, ó kéréjù ní àjápọ̀ kan sí '''ojúewé ìṣeojúùtú'''.
+Ó yẹ kí wọn ó jápọ̀ sí ojúewé tó yẹ wọ́n.<br />
+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ì',
 'double-redirect-fixed-move' => '[[$1]] ti yípò padà.
@@ -2288,6 +2286,14 @@ $1',
 'ipbexpiry' => 'Ìwásópin:',
 'ipbreason' => 'Ìdíẹ̀:',
 'ipbreasonotherlist' => 'Ìdí mìíràn',
+'ipbreason-dropdown' => '*Àwọn ìdí fún ìdínà
+** Àròyé tí kò jẹ́ òtítọ́
+** Yíyọ àkóónú kúrò nínú ojúewé
+** Kíkọ àjápọ̀ sí àwọn ibi tí kò ní ìbámu mọ́ ojúewé
+** Ìkọkúkọ sínú ojúewé
+** Iwùwà ìpayà sí ẹlòmíràn
+** Ìlòkulò ọ̀pọ̀lọpọ̀ àpamọ́
+** Lílo orúkọ oníṣe tí kò tọ́',
 'ipb-hardblock' => 'Ìdínà àwọn oníṣe agbàwọlé láti ṣàtúnṣe láti ibi àdírẹ́ẹ̀sì IP yìí',
 'ipbcreateaccount' => 'Ìdínà dídá àpamọ́',
 'ipbemailban' => 'Ìdínà oníṣe láti fi e-mail ránṣẹ́',
@@ -2328,6 +2334,7 @@ $1',
 'blocklist-timestamp' => 'Àmì àsìkò',
 'blocklist-target' => 'Afojúsùn',
 'blocklist-expiry' => 'Ìparí',
+'blocklist-by' => 'Olùmójútó tó ṣe ìdínà',
 'blocklist-reason' => 'Ìdíẹ̀',
 'ipblocklist-submit' => 'Ṣàwárí',
 'ipblocklist-localblock' => 'Ìdínà abẹ́lé',
@@ -2618,11 +2625,11 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 
 # Info page
 'pageinfo-title' => 'Àròyé fún "$1"',
-'pageinfo-header-edits' => 'Ã\80wá»\8dn àtúnṣe',
+'pageinfo-header-edits' => 'Ã\8ctàn àtúnṣe',
 'pageinfo-views' => 'Iye àwọn ìwò',
-'pageinfo-watchers' => 'Iye àwọn aláàbójúwò',
-'pageinfo-edits' => 'Iye àwọn àtúnṣe',
-'pageinfo-authors' => 'Iye àwọn olùdá ọ̀tọ̀ọ̀tọ̀',
+'pageinfo-watchers' => 'Iye àwọn olùṣọ́ ojúewé',
+'pageinfo-edits' => 'Àpapọ̀ iye àwọn àtúnṣe',
+'pageinfo-authors' => 'Àpapọ̀ iye àwọn olùdá ọ̀tọ̀ọ̀tọ̀',
 
 # Patrolling
 'markaspatrolleddiff' => 'Ìṣààmí sí bíi sísọ́',
@@ -2647,6 +2654,7 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 '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',
 'show-big-image' => 'Pẹ̀lú ìgbéhàn gíga',
+'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-png-looped' => 'lílọ́po',
@@ -2876,6 +2884,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 # Special:Version
 'version' => 'Àtẹ̀jáde',
 'version-specialpages' => 'Àwọn ojúewé pàtàkì',
+'version-variables' => 'Ayàtọ̀',
 'version-skins' => 'Skin (Àwọ̀)',
 'version-other' => 'Òmíràn',
 'version-version' => '(Àtẹ̀jáde $1)',
@@ -2900,7 +2909,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'specialpages' => 'Àwọn ojúewé pàtàkì',
 '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é / ìforúkọsílẹ́',
+'specialpages-group-login' => 'Ìwọlé / ìdá àpamọ́',
 'specialpages-group-users' => 'Àwọn oníṣe àti àwọn ẹ̀tọ́ wọn',
 'specialpages-group-pages' => 'Àkójọ àwọn ojúewé',
 'specialpages-group-pagetools' => 'Àwọn irinṣẹ́ ojúewé',
@@ -2981,6 +2990,10 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'feedback-error3' => 'Àsìṣe: Kò sí ìdáhùn látọ̀dọ̀ API',
 'feedback-close' => 'Ṣetán',
 
+# Search suggestions
+'searchsuggest-search' => 'Ṣàwárí',
+'searchsuggest-containing' => 'tó ní...',
+
 # API errors
 'api-error-filename-tooshort' => 'Orúkọ fáílì kéréjú bó ṣe yẹ lọ.',
 'api-error-unknown-code' => 'Àsìṣe aláìlójúùtú: "$1".',
index fe79a49..9f99887 100644 (file)
@@ -613,7 +613,7 @@ $1',
 # Login and logout pages
 'logouttext' => "'''你而家已經登出咗。'''
 
-你重可以用匿名身份用{{SITENAME}},又或者[[Special:UserLogin|重新登入]]
+你重可以用匿名身份用{{SITENAME}},又或者<span class='plainlinks'>[$1 重新登入]</span>
 但係留意某啲頁面可能會繼續話你未登入,除非等你清除瀏覽器嘅快取儲存。",
 'welcomecreation' => '== 歡迎, $1! ==
 
@@ -1147,8 +1147,6 @@ $1",
 'search-interwiki-caption' => '姊妹計劃',
 'search-interwiki-default' => '$1項結果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '有建議',
-'search-mwsuggest-disabled' => '無建議',
 'search-relatedarticle' => '有關',
 'mwsuggest-disable' => '停用AJAX建議',
 'searcheverything-enable' => '搵全部空間名',
@@ -3376,4 +3374,8 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 'revdelete-unrestricted' => '已經拎走對於操作員嘅限制',
 'newuserlog-byemail' => '密碼已由電郵寄出',
 
+# Search suggestions
+'searchsuggest-search' => '搵嘢',
+'searchsuggest-containing' => '名單傳送緊...',
+
 );
index 3dc35f0..bf2e700 100644 (file)
@@ -17,193 +17,191 @@ $messages = array(
 'underline-never' => 'coengz mbouj swjyungh',
 
 # Dates
-'sunday'        => 'Swnggeiz Yaet',
-'monday'        => 'Swnggeiz Wtx',
-'tuesday'       => 'Swnggeiz Yeih',
-'wednesday'     => 'Swnggeiz Sam',
-'thursday'      => 'Swnggeiz Seiq',
-'friday'        => 'Swnggeiz Haj',
-'saturday'      => 'Swnggeiz Lokj',
-'sun'           => 'Ngoenz',
-'mon'           => 'It',
-'tue'           => 'Ngeih',
-'wed'           => 'Sam',
-'thu'           => 'Seiq',
-'fri'           => 'Ngux',
-'sat'           => 'Loeg',
-'january'       => 'Nin Wtj',
-'february'      => 'Nin Yeih',
-'march'         => 'Nin Sam',
-'april'         => 'Nin Seiq',
-'may_long'      => 'Nin Haj',
-'june'          => 'Nin Loekj',
-'july'          => 'Nin Caet',
-'august'        => 'Nin Betq',
-'september'     => 'Nin Gouj',
-'october'       => 'Nin Cwbx',
-'november'      => 'Nin Cwbx Wtj',
-'december'      => 'Nin Cwbx Yeih',
-'january-gen'   => 'It nyied',
-'february-gen'  => 'Ngeih nyied',
-'march-gen'     => 'Sam nyied',
-'april-gen'     => 'Seiq nyied',
-'may-gen'       => 'Nin Haj',
-'june-gen'      => 'Loeg nyied',
-'july-gen'      => 'Caet nyied',
-'august-gen'    => 'Bet nyied',
+'sunday' => 'Swnggeiz Yaet',
+'monday' => 'Swnggeiz Wtx',
+'tuesday' => 'Swnggeiz Yeih',
+'wednesday' => 'Swnggeiz Sam',
+'thursday' => 'Swnggeiz Seiq',
+'friday' => 'Swnggeiz Haj',
+'saturday' => 'Swnggeiz Lokj',
+'sun' => 'Ngoenz',
+'mon' => 'It',
+'tue' => 'Ngeih',
+'wed' => 'Sam',
+'thu' => 'Seiq',
+'fri' => 'Ngux',
+'sat' => 'Loeg',
+'january' => 'Nin Wtj',
+'february' => 'Nin Yeih',
+'march' => 'Nin Sam',
+'april' => 'Nin Seiq',
+'may_long' => 'Nin Haj',
+'june' => 'Nin Loekj',
+'july' => 'Nin Caet',
+'august' => 'Nin Betq',
+'september' => 'Nin Gouj',
+'october' => 'Nin Cwbx',
+'november' => 'Nin Cwbx Wtj',
+'december' => 'Nin Cwbx Yeih',
+'january-gen' => 'It nyied',
+'february-gen' => 'Ngeih nyied',
+'march-gen' => 'Sam nyied',
+'april-gen' => 'Seiq nyied',
+'may-gen' => 'Nin Haj',
+'june-gen' => 'Loeg nyied',
+'july-gen' => 'Caet nyied',
+'august-gen' => 'Bet nyied',
 'september-gen' => 'Nin Gouj',
-'october-gen'   => 'Cib nyied',
-'november-gen'  => 'Cibit nyied',
-'december-gen'  => 'Cibngeih nyied',
-'jan'           => 'Itnyied',
-'feb'           => 'Ngeihnyied',
-'mar'           => 'Samnyied',
-'apr'           => 'Seiqnyied',
-'may'           => 'Nguxnyied',
-'jun'           => 'Loegnyied',
-'jul'           => 'Caetnyied',
-'aug'           => 'Batnyied',
-'sep'           => 'Goujnyied',
-'oct'           => 'Cibnyied',
-'nov'           => "Cib'itnyied",
-'dec'           => 'Cibngeihnyied',
+'october-gen' => 'Cib nyied',
+'november-gen' => 'Cibit nyied',
+'december-gen' => 'Cibngeih nyied',
+'jan' => 'Itnyied',
+'feb' => 'Ngeihnyied',
+'mar' => 'Samnyied',
+'apr' => 'Seiqnyied',
+'may' => 'Nguxnyied',
+'jun' => 'Loegnyied',
+'jul' => 'Caetnyied',
+'aug' => 'Batnyied',
+'sep' => 'Goujnyied',
+'oct' => 'Cibnyied',
+'nov' => "Cib'itnyied",
+'dec' => 'Cibngeihnyied',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1$1 aen|faendingz|faendingz}}',
-'subcategories'  => 'Faendingz lwgsai',
+'subcategories' => 'Faendingz lwgsai',
 
-'about'      => 'Gvendaengz',
-'article'    => 'Banjbienj',
-'cancel'     => 'Fwtqfex',
-'mytalk'     => 'Gaeq gou gangj',
+'about' => 'Gvendaengz',
+'article' => 'Banjbienj',
+'cancel' => 'Fwtqfex',
+'mytalk' => 'Gaeq gou gangj',
 'navigation' => 'Dazzaeuh',
 
 # Cologne Blue skin
-'qbfind'         => 'Ra',
-'qbedit'         => 'Gaij',
-'qbmyoptions'    => 'Yieb gou',
+'qbfind' => 'Ra',
+'qbedit' => 'Gaij',
+'qbmyoptions' => 'Yieb gou',
 'qbspecialpages' => 'Doenghmae daegxsei',
-'faq'            => 'Cam caeuq dap',
-'faqpage'        => 'Project:Cam caeuq dap',
+'faq' => 'Cam caeuq dap',
+'faqpage' => 'Project:Cam caeuq dap',
 
 # Vector skin
-'vector-action-delete'  => 'Ca',
-'vector-action-move'    => 'Daen',
+'vector-action-delete' => 'Ca',
+'vector-action-move' => 'Daen',
 'vector-action-protect' => 'Bauj',
-'vector-view-create'    => 'Laeb',
-'vector-view-edit'      => 'gaij',
-'vector-view-history'   => 'Cazyawj lizsij',
-
-'errorpagetitle'   => 'Loengloek',
-'tagline'          => 'okcih {{SITENAME}}',
-'help'             => 'Bangcoh',
-'search'           => 'Cwmh',
-'searchbutton'     => 'Cwmh',
-'go'               => 'Bae',
-'searcharticle'    => 'Bae',
-'history'          => 'Lizsij',
-'history_short'    => 'Lizsij',
+'vector-view-create' => 'Laeb',
+'vector-view-edit' => 'gaij',
+'vector-view-history' => 'Cazyawj lizsij',
+
+'errorpagetitle' => 'Loengloek',
+'tagline' => 'okcih {{SITENAME}}',
+'help' => 'Bangcoh',
+'search' => 'Cwmh',
+'searchbutton' => 'Cwmh',
+'go' => 'Bae',
+'searcharticle' => 'Bae',
+'history' => 'Lizsij',
+'history_short' => 'Lizsij',
 'printableversion' => 'Gojyaenq banj',
-'permalink'        => 'Gaeq-lamh kaemdaengz',
-'edit'             => 'gaij',
-'create'           => 'Laeb',
-'delete'           => 'Duz',
-'protect'          => 'Hahdiuz',
-'protect_change'   => 'gaij',
-'newpage'          => 'Bienj moq',
-'talkpage'         => 'Dunjlun yieb neix',
+'permalink' => 'Gaeq-lamh kaemdaengz',
+'edit' => 'gaij',
+'create' => 'Laeb',
+'delete' => 'Duz',
+'protect' => 'Hahdiuz',
+'protect_change' => 'gaij',
+'newpage' => 'Bienj moq',
+'talkpage' => 'Dunjlun yieb neix',
 'talkpagelinktext' => 'Daujlun',
-'personaltools'    => 'Hongdawz bonjfaenh',
-'talk'             => 'Kwng',
-'views'            => 'Cazyawj',
-'toolbox'          => 'Loengx hong',
-'jumpto'           => 'Diuq bae',
+'personaltools' => 'Hongdawz bonjfaenh',
+'talk' => 'Kwng',
+'views' => 'Cazyawj',
+'toolbox' => 'Loengx hong',
+'jumpto' => 'Diuq bae',
 'jumptonavigation' => 'Dazzaeuh',
-'jumptosearch'     => 'Ra',
+'jumptosearch' => 'Ra',
 
 # 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'            => 'Gvanhyih {{SITENAME}}',
-'aboutpage'            => 'Project:gvanhyih',
-'currentevents'        => 'Saehgienh seizneix',
-'disclaimers'          => 'gangjmingz mienxcwz',
-'disclaimerpage'       => 'Project:Itbuen mienxcwz',
-'edithelp'             => 'Caeuq mungz san-zonz',
-'edithelppage'         => 'Help:gaij',
-'helppage'             => 'Help:moegloeg',
-'mainpage'             => 'Yiebdaeuz',
+'aboutsite' => 'Gvanhyih {{SITENAME}}',
+'aboutpage' => 'Project:gvanhyih',
+'currentevents' => 'Saehgienh seizneix',
+'disclaimers' => 'gangjmingz mienxcwz',
+'disclaimerpage' => 'Project:Itbuen mienxcwz',
+'edithelp' => 'Caeuq mungz san-zonz',
+'edithelppage' => 'Help:gaij',
+'helppage' => 'Help:moegloeg',
+'mainpage' => 'Yiebdaeuz',
 'mainpage-description' => 'Yiebdeauz',
-'policy-url'           => 'Project:fuengcim',
-'portal'               => 'Segih',
-'portal-url'           => 'Project:seqgih',
-'privacy'              => 'Seiyaem cwngcwz',
-'privacypage'          => 'Project:Seiyaem cwngcwz',
+'policy-url' => 'Project:fuengcim',
+'portal' => 'Segih',
+'portal-url' => 'Project:seqgih',
+'privacy' => 'Seiyaem cwngcwz',
+'privacypage' => 'Project:Seiyaem cwngcwz',
 
-'badaccess'        => 'Loengloek gienzhanh',
+'badaccess' => 'Loengloek gienzhanh',
 'badaccess-group0' => 'Cingjgouz mwngz mbouj haengj ciuqguh.',
 'badaccess-groups' => 'Cingjgouz mwngz hanh youq {{PLURAL:$2|neix|gijneix}} bouxyungh: $1',
 
-'versionrequired'     => 'Sihyau MediaWiki $1',
+'versionrequired' => 'Sihyau MediaWiki $1',
 'versionrequiredtext' => 'Sihyau MediaWik $1 caengj daeng sawjyungh.',
 
 'youhavenewmessages' => 'Mungz meiz $1($2)。',
-'editsection'        => 'gaij',
-'editold'            => 'gaij',
-'editlink'           => 'gaij',
-'editsectionhint'    => 'Gaij duenh:$1',
-'showtoc'            => "yienh'ok",
-'hidetoc'            => 'cangz',
+'editsection' => 'gaij',
+'editold' => 'gaij',
+'editlink' => 'gaij',
+'editsectionhint' => 'Gaij duenh:$1',
+'showtoc' => "yienh'ok",
+'hidetoc' => 'cangz',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Feanzcieng',
-'nstab-user'      => 'Yieb bouxsawjyungq',
-'nstab-project'   => 'Yieb giva',
-'nstab-image'     => 'Vwnzgen',
+'nstab-main' => 'Feanzcieng',
+'nstab-user' => 'Yieb bouxsawjyungq',
+'nstab-project' => 'Yieb giva',
+'nstab-image' => 'Vwnzgen',
 'nstab-mediawiki' => 'Siuhsik',
-'nstab-template'  => 'Mozbanj',
-'nstab-help'      => 'Yieb bangcoh',
-'nstab-category'  => 'Faendingz',
+'nstab-template' => 'Mozbanj',
+'nstab-help' => 'Yieb bangcoh',
+'nstab-category' => 'Faendingz',
 
 # General errors
 'viewsource' => 'Liuq lagh mae-nej',
 
 # Login and logout pages
-'yourname'                => 'Ciu bouxdeiz:',
-'yourpassword'            => 'Mizmak:',
-'login'                   => 'Dwnghluz',
+'yourname' => 'Ciu bouxdeiz:',
+'yourpassword' => 'Mizmak:',
+'login' => 'Dwnghluz',
 'nav-login-createaccount' => 'dwngh haeuj/laebbaen canghu',
-'userlogin'               => 'Daengh haeuj/Laeb bouxdeiz',
-'logout'                  => 'Doiq ok',
-'userlogout'              => 'Doiq ok',
-'notloggedin'             => 'Maengx laezhaej',
-'nologinlink'             => 'Laeb bouxdeiz',
+'userlogin' => 'Daengh haeuj/Laeb bouxdeiz',
+'logout' => 'Doiq ok',
+'userlogout' => 'Doiq ok',
+'notloggedin' => 'Maengx laezhaej',
+'nologinlink' => 'Laeb bouxdeiz',
 
 # Edit pages
-'summary'     => 'Saegmangj:',
-'minoredit'   => 'Di-nej gaij noix',
-'watchthis'   => 'Gamyawj yieb neix',
+'summary' => 'Saegmangj:',
+'minoredit' => 'Di-nej gaij noix',
+'watchthis' => 'Gamyawj yieb neix',
 'savearticle' => 'Zonzdiuz mae-nej',
 'showpreview' => 'Okqhaej piu-ngoengx',
-'showdiff'    => 'Okqhaej gaeqgaei',
-'newarticle'  => '(Moq)',
+'showdiff' => 'Okqhaej gaeqgaei',
+'newarticle' => '(Moq)',
 
 # Diffs
 'editundo' => 'siu',
 
 # Search results
-'searchresults'             => 'gietgoj ra',
-'searchresults-title'       => 'doiq "$1" gij gietgoj ra',
-'search-interwiki-more'     => '(more)',
-'search-mwsuggest-enabled'  => 'miz genyi',
-'search-mwsuggest-disabled' => 'mbouj miz genyi',
-'powersearch'               => 'Cwmh goeggiz',
-'powersearch-legend'        => 'Gauhgiz saeu',
-'powersearch-redir'         => 'Cungzdinghyiengq liedbiuj',
+'searchresults' => 'gietgoj ra',
+'searchresults-title' => 'doiq "$1" gij gietgoj ra',
+'search-interwiki-more' => '(more)',
+'powersearch' => 'Cwmh goeggiz',
+'powersearch-legend' => 'Gauhgiz saeu',
+'powersearch-redir' => 'Cungzdinghyiengq liedbiuj',
 
 # Preferences page
-'mypreferences'     => 'Doenghgaeq gou hae',
-'prefsnologin'      => 'Maengx laezhaej',
+'mypreferences' => 'Doenghgaeq gou hae',
+'prefsnologin' => 'Maengx laezhaej',
 'searchresultshead' => 'Cwmh',
-'username'          => 'Ciu bouxdeiz:',
+'username' => 'Ciu bouxdeiz:',
 
 'group-user-member' => '{{GENDER:$1|Bouxsawjyungq}}',
 
@@ -211,33 +209,33 @@ $messages = array(
 'action-edit' => 'gaij yieb neix',
 
 # Recent changes
-'recentchanges'   => 'Gaeqgaij seizneix',
-'diff'            => 'Faenbied',
-'hide'            => 'Cangz',
-'show'            => "Yienh'ok",
+'recentchanges' => 'Gaeqgaij seizneix',
+'diff' => 'Faenbied',
+'hide' => 'Cangz',
+'show' => "Yienh'ok",
 'minoreditletter' => 'n',
-'newpageletter'   => 'M',
-'boteditletter'   => 'g',
+'newpageletter' => 'M',
+'boteditletter' => 'g',
 
 # Recent changes linked
 'recentchangeslinked' => 'Lienh ok gaengaij',
 
 # Upload
-'upload'            => 'Cienz vwnzgen',
-'uploadnologin'     => 'Maengx laezhaej',
-'filedesc'          => 'Saegmangj',
+'upload' => 'Cienz vwnzgen',
+'uploadnologin' => 'Maengx laezhaej',
+'filedesc' => 'Saegmangj',
 'fileuploadsummary' => 'Saegmangj:',
-'uploadedimage'     => 'senq cienz "[[$1]]"',
-'watchthisupload'   => 'Demq mae-nej',
+'uploadedimage' => 'senq cienz "[[$1]]"',
+'watchthisupload' => 'Demq mae-nej',
 
 # Special:ListFiles
 'listfiles_user' => 'Bouxyungh',
 
 # File description page
-'filehist-current'  => 'seizneix',
+'filehist-current' => 'seizneix',
 'filehist-datetime' => 'Ngoenz/Seizgan',
-'filehist-user'     => 'Bouxsawjyungh',
-'filehist-comment'  => 'Gejgangj',
+'filehist-user' => 'Bouxsawjyungh',
+'filehist-comment' => 'Gejgangj',
 
 # Random page
 'randompage' => 'Mae zaihzex',
@@ -246,11 +244,11 @@ $messages = array(
 'statistics-pages' => 'Yieb',
 
 # Miscellaneous special pages
-'nbytes'            => '$1 {{PLURAL:$1|cihciet|cihciet}}',
-'newpages'          => 'Yieb moq',
+'nbytes' => '$1 {{PLURAL:$1|cihciet|cihciet}}',
+'newpages' => 'Yieb moq',
 'newpages-username' => 'Ciu bouxdeiz:',
-'move'              => 'Daen',
-'movethispage'      => 'Caen mae nej',
+'move' => 'Daen',
+'movethispage' => 'Caen mae nej',
 
 # Book sources
 'booksources-go' => 'Bae',
@@ -259,19 +257,19 @@ $messages = array(
 'log' => 'Ngoenzceiq',
 
 # Special:AllPages
-'allpages'       => 'Sojmiz yieb',
-'allarticles'    => 'Sojmiz yieb',
+'allpages' => 'Sojmiz yieb',
+'allarticles' => 'Sojmiz yieb',
 'allpagessubmit' => 'Bae',
 
 # Watchlist
-'watchlist'     => 'Yieb gou yawj',
-'mywatchlist'   => 'Gaeq gou demq',
-'watchnologin'  => 'Maengx laezhaej',
-'watch'         => 'Demq',
+'watchlist' => 'Yieb gou yawj',
+'mywatchlist' => 'Gaeq gou demq',
+'watchnologin' => 'Maengx laezhaej',
+'watch' => 'Demq',
 'watchthispage' => 'Demq mae-nej',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Bawxndu……',
+'watching' => 'Bawxndu……',
 'unwatching' => 'Souma bawxndu……',
 
 # Protect
@@ -281,48 +279,48 @@ $messages = array(
 'restriction-move' => 'Caen',
 
 # Namespace form on various pages
-'namespace'      => 'ndawhoengq mingzcih:',
+'namespace' => 'ndawhoengq mingzcih:',
 'blanknamespace' => '(Cujyau)',
 
 # Contributions
 'contributions' => 'Gaeq bouxdeiz haej',
-'mycontris'     => 'Gaeq gou haej',
-'uctop'         => '(dingz)',
+'mycontris' => 'Gaeq gou haej',
+'uctop' => '(dingz)',
 
 'sp-contributions-submit' => 'Ra',
 
 # What links here
-'whatlinkshere'      => 'Maelaez lamh haenznej',
+'whatlinkshere' => 'Maelaez lamh haenznej',
 'whatlinkshere-page' => 'Yieb:',
 
 # Block/unblock
 'ipblocklist-submit' => 'Cwmh',
-'contribslink'       => "gung'yen",
+'contribslink' => "gung'yen",
 
 # Move page
 'move-page-legend' => 'Caen doengh mae',
-'movearticle'      => 'Caen doengh mae:',
-'movenologin'      => 'Maengx laezhaej',
-'move-watch'       => 'Demq mae-nej',
-'movepagebtn'      => 'Caen doengh mae',
-'movedto'          => 'Caen bei',
-'movereason'       => 'Haujgaemj',
-'revertmove'       => 'siu',
+'movearticle' => 'Caen doengh mae:',
+'movenologin' => 'Maengx laezhaej',
+'move-watch' => 'Demq mae-nej',
+'movepagebtn' => 'Caen doengh mae',
+'movedto' => 'Caen bei',
+'movereason' => 'Haujgaemj',
+'revertmove' => 'siu',
 
 # Tooltip help for the actions
-'tooltip-pt-mytalk'      => 'Yieb daujlun mwngz',
+'tooltip-pt-mytalk' => 'Yieb daujlun mwngz',
 'tooltip-pt-preferences' => 'Doenghgaeq gou hae',
-'tooltip-pt-logout'      => 'Doiq ok',
-'tooltip-ca-talk'        => 'Gvanhyih cingqfaenz yieb gij daojun',
-'tooltip-ca-history'     => 'yieb neix gij banj lizsij',
-'tooltip-ca-move'        => 'Dean yieb neix',
-'tooltip-search'         => 'Ra {{SITENAME}}',
-'tooltip-p-logo'         => 'Mae meh',
-'tooltip-n-mainpage'     => 'Raen Yiebdaeuz',
-'tooltip-n-randompage'   => 'Cang haeuj yieb seizgih',
-'tooltip-n-help'         => 'Cimh gouz bangcoh',
-'tooltip-t-upload'       => 'Cienz vwnzgen',
-'tooltip-ca-nstab-main'  => 'Cazyawj ndawyungz yieb',
+'tooltip-pt-logout' => 'Doiq ok',
+'tooltip-ca-talk' => 'Gvanhyih cingqfaenz yieb gij daojun',
+'tooltip-ca-history' => 'yieb neix gij banj lizsij',
+'tooltip-ca-move' => 'Dean yieb neix',
+'tooltip-search' => 'Ra {{SITENAME}}',
+'tooltip-p-logo' => 'Mae meh',
+'tooltip-n-mainpage' => 'Raen Yiebdaeuz',
+'tooltip-n-randompage' => 'Cang haeuj yieb seizgih',
+'tooltip-n-help' => 'Cimh gouz bangcoh',
+'tooltip-t-upload' => 'Cienz vwnzgen',
+'tooltip-ca-nstab-main' => 'Cazyawj ndawyungz yieb',
 
 # Special:NewFiles
 'ilsubmit' => 'Cwmh',
@@ -330,7 +328,7 @@ $messages = array(
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'cenzbu',
 'namespacesall' => 'cenzbu',
-'monthsall'     => 'cenzbu',
+'monthsall' => 'cenzbu',
 
 # Multipage image navigation
 'imgmultigo' => 'Bei!',
index 0bc9f3e..8226da9 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Simplified Chinese (‪中文(简体)‬)
+/** Simplified Chinese (中文(简体)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -211,33 +211,44 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                => array( '0', '#重定向', '#REDIRECT' ),
-       'notoc'                   => array( '0', '_无目录_', '__NOTOC__' ),
-       'nogallery'               => array( '0', '_无图库_', '__NOGALLERY__' ),
-       'forcetoc'                => array( '0', '_强显目录_', '__FORCETOC__' ),
-       'toc'                     => array( '0', '_目录_', '__TOC__' ),
-       'noeditsection'           => array( '0', '_无段落编辑_', '__NOEDITSECTION__' ),
-       'currentmonth'            => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'           => array( '1', '本月1', 'CURRENTMONTH1' ),
-       'currentmonthname'        => array( '1', '本月名称', 'CURRENTMONTHNAME' ),
-       'currentmonthabbrev'      => array( '1', '本月简称', 'CURRENTMONTHABBREV' ),
-       'currentday'              => array( '1', '今天', 'CURRENTDAY' ),
-       'currentday2'             => array( '1', '今天2', 'CURRENTDAY2' ),
-       'currentyear'             => array( '1', '今年', 'CURRENTYEAR' ),
-       'currenttime'             => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
-       'numberofpages'           => array( '1', '页数', 'NUMBEROFPAGES' ),
-       'numberofarticles'        => array( '1', '条目数', 'NUMBEROFARTICLES' ),
-       'numberoffiles'           => array( '1', '文件数', 'NUMBEROFFILES' ),
-       'numberofusers'           => array( '1', '用户数', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'     => array( '1', '活跃用户数', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'           => array( '1', '编辑数', 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( '1', '访问数', 'NUMBEROFVIEWS' ),
-       'pagename'                => array( '1', '页名', 'PAGENAME' ),
-       'fullpagename'            => array( '1', '全页名', 'FULLPAGENAME' ),
-       'newsectionlink'          => array( '1', '_新段落链接_', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'        => array( '1', '_无新段落链接_', '__NONEWSECTIONLINK__' ),
-       'language'                => array( '0', '#语言:', '#LANGUAGE:' ),
-       'pagesize'                => array( '1', '页面大小', 'PAGESIZE' ),
+       'redirect'                  => array( '0', '#重定向', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__无目录__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__无图库__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__强显目录__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__目录__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__无段落编辑__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', '本月1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', '本月名称', 'CURRENTMONTHNAME' ),
+       'currentmonthabbrev'        => array( '1', '本月简称', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', '今天', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', '今天2', 'CURRENTDAY2' ),
+       'currentyear'               => array( '1', '今年', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
+       'numberofpages'             => array( '1', '页面数', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', '条目数', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', '文件数', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', '用户数', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', '活跃用户数', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', '编辑数', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', '访问数', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', '页面名', 'PAGENAME' ),
+       'fullpagename'              => array( '1', '完整页面名', 'FULLPAGENAME' ),
+       'img_thumbnail'             => array( '1', '缩略图', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', '缩略图=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', '右', 'right' ),
+       'img_left'                  => array( '1', '左', 'left' ),
+       'img_none'                  => array( '1', '无', 'none' ),
+       'img_width'                 => array( '1', '$1像素', '$1px' ),
+       'img_center'                => array( '1', '居中', 'center', 'centre' ),
+       'img_page'                  => array( '1', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+       'img_link'                  => array( '1', '链接=$1', 'link=$1' ),
+       'img_alt'                   => array( '1', '替代文本=$1', 'alt=$1' ),
+       'newsectionlink'            => array( '1', '__新段落链接__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__无新段落链接__', '__NONEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#语言:', '#LANGUAGE:' ),
+       'tag'                       => array( '0', '标记', 'tag' ),
+       'pagesize'                  => array( '1', '页面大小', 'PAGESIZE' ),
 );
 
 $linkTrail = '/^()(.*)$/sD';
@@ -425,7 +436,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' => '查看历史',
@@ -585,9 +596,12 @@ $1',
 # General errors
 'error' => '错误',
 'databaseerror' => '数据库错误',
-'dberrortext' => '发生了数据库查询语法错误,可能是由于软件自身的错误所引起。最后一次数据库查询指令是:
-<blockquote><tt>$1</tt></blockquote>
-来自函数“<tt>$2</tt>”内。数据库返回错误“<tt>$3: $4</tt>”。',
+'dberrortext' => '发生资料库查询语法错误。
+可能是由于软体自身的错误所引起。
+最后一次资料库查询指令是:
+<blockquote><code>$1</code></blockquote>
+来自于函数 "<code>$2</code>"。
+数据库返回错误 "<samp>$3: $4</samp>"。',
 'dberrortextcl' => '发生了数据库查询语法错误。最后一次数据库查询指令是:
 “$1”
 来自函数“$2”内。数据库返回错误“$3: $4”。',
@@ -619,7 +633,7 @@ $1',
 'unexpected' => '非正常值:“$1”=“$2”。',
 'formerror' => '错误:无法提交表单',
 'badarticleerror' => '无法在此页进行该操作。',
-'cannotdelete' => '无法删除页面或图像 "$1"
+'cannotdelete' => '无法删除页面或图像“$1”
 它可能已被其他人删除了。',
 'cannotdelete-title' => '无法删除“$1”',
 'delete-hook-aborted' => '删除被扩展钩子取消。钩子并没有给出解释。',
@@ -638,8 +652,11 @@ $1',
 'protectedpagetext' => '该页面已被保护以防止编辑。',
 'viewsourcetext' => '您可以查看并复制此页面的源代码:',
 'viewyourtext' => "您可以查看并复制'''您对此页面作出编辑后'''的源代码:",
-'protectedinterface' => '该页提供了软件的界面文本,它已被保护以防止随意的修改。',
-'editinginterface' => "'''警告:''' 您正在编辑的页面是用于提供软件的界面文本。改变此页将影响其他用户的界面外观。如要翻译,请考虑使用[//translatewiki.net/wiki/Main_Page?setlang=zh-hans translatewiki.net],一个用来为MediaWiki软件本地化的计划。",
+'protectedinterface' => '该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。
+如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。',
+'editinginterface' => "'''警告:'''您正在编辑的页面是用于提供软件的界面文字。
+改变此页将影响其他在此wiki上的用户界面外观。
+如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
 'sqlhidden' => '(SQL查询已隐藏)',
 'cascadeprotected' => '此页面已被保护,因为这个页面被以下已标注“联锁保护”的{{PLURAL:$1|一个|多个}}被保护页面包含:
 $2',
@@ -664,7 +681,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''您现在已经退出。'''
 
-您可以继续以匿名方式使用{{SITENAME}},或再次以相同或不同用户身份[[Special:UserLogin|登录]]。请注意一些页面可能仍然显示您为登录状态,直到您清空您的浏览器缓存为止。",
+您可以继续以匿名方式使用{{SITENAME}},或再次以相同或不同用户身份<span class='plainlinks'>[$1 登录]</span>。请注意一些页面可能仍然显示您为登录状态,直到您清空您的浏览器缓存为止。",
 'welcomecreation' => '== 欢迎,$1! ==
 你的账户已创建。请别忘记更改你的[[Special:Preferences|{{SITENAME}}系统设置]]。',
 'yourname' => '用户名:',
@@ -882,8 +899,8 @@ $2
 如果您误入此页,请点击浏览器中的“返回”按钮。',
 'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
 'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索该页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
-'noarticletext-nopermission' => '此页目前没有内容,您可以在其它页[[Special:Search/{{PAGENAME}}|搜索此页标题]],
\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9cç´¢æ\9c\89å\85³æ\97¥å¿\97]</span>。',
+'noarticletext-nopermission' => '此页目前没有内容
\82¨å\8f¯ä»¥å\9c¨å\85¶å®\83页[[Special:Search/{{PAGENAME}}|æ\90\9c寻此页æ \87é¢\98]]ï¼\8cæ\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9c寻æ\9c\89å\85³æ\97¥å¿\97]</span>ï¼\8cä½\86æ\82¨æ²¡æ\9c\89æ\9d\83é\99\90建ç«\8b此页。',
 'missing-revision' => '“{{PAGENAME}}”的修订#$1不存在。
 
 这通常是因为进入了一个已被删除的页面的历史链接。
@@ -896,7 +913,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}}”按钮来测试您新的 JavaScript 。",
@@ -1126,7 +1142,8 @@ $1",
 'revdelete-only-restricted' => '在隐藏$1 $2的项目时发生错误:您不能在选择了另一可见性选项后废止管理员查看该项目。',
 'revdelete-reason-dropdown' => '*常用删除理由
 ** 侵犯版权
-** 不合适的个人资料',
+** 不合适的个人资料
+** 潜在毁谤性信息',
 'revdelete-otherreason' => '其他/附加原因:',
 'revdelete-reasonotherlist' => '其他原因',
 'revdelete-edit-reasonlist' => '编辑删除埋由',
@@ -1222,8 +1239,6 @@ $1",
 'search-interwiki-caption' => '姊妹项目',
 'search-interwiki-default' => '$1项结果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '有建议',
-'search-mwsuggest-disabled' => '无建议',
 'search-relatedarticle' => '相关',
 'mwsuggest-disable' => '禁用AJAX建议',
 'searcheverything-enable' => '在所有名字空间中搜索',
@@ -1718,7 +1733,7 @@ $1',
 'backend-fail-internal' => '存储后端“$1”发生了一个未知错误。',
 'backend-fail-contenttype' => '无法判断文件的内容类型来储存于“$1”。',
 'backend-fail-batchsize' => '存储后端被给予了一批$1个文件{{PLURAL:$1|操作|操作}};限值为$2个{{PLURAL:$2|操作|操作}}。',
-'backend-fail-usable' => '权限不足或缺少目录/贮存器,无法写入文件$1。',
+'backend-fail-usable' => '权限不足或缺少目录/贮存器,无法读取或写入文件“$1”。',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '无法连接到后端存储的日志数据库“$1”。',
@@ -1951,6 +1966,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1字节',
 'ncategories' => '$1个分类',
+'ninterwikis' => '$1个跨语言链接',
 'nlinks' => '$1个链接',
 'nmembers' => '$1个成员',
 'nrevisions' => '$1个版本',
@@ -1979,6 +1995,7 @@ $1',
 'mostlinkedtemplates' => '最多链接模板',
 'mostcategories' => '最多分类页面',
 'mostimages' => '最多链接文件',
+'mostinterwikis' => '跨语言链接最多的页面',
 'mostrevisions' => '最多版本页面',
 'prefixindex' => '所有有前缀的页面',
 'prefixindex-namespace' => '所有有前缀的页面($1名字空间)',
@@ -2123,6 +2140,8 @@ $1',
 'mailnologin' => '无电邮地址',
 'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
+'emailuser-title-target' => '电邮联系该{{GENDER:$1|用户}}',
+'emailuser-title-notarget' => '电邮联系',
 'emailpage' => '电邮联系',
 'emailpagetext' => '你可以使用下面的表格向该用户发送电子邮件信息。你在[[Special:Preferences|你的系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。',
 'usermailererror' => 'Mail 对象返回错误:',
@@ -2195,14 +2214,14 @@ $1',
 'changed' => '更改',
 'created' => '创建',
 'enotif_subject' => '{{SITENAME}}页面“$PAGETITLE”已被$PAGEEDITOR$CHANGEDORCREATED',
-'enotif_lastvisited' => '请浏览$1查看你上次访问后的所有更改。',
-'enotif_lastdiff' => '请浏览$1查看该更改。',
+'enotif_lastvisited' => '请浏览 $1 查看你上次访问后的所有更改。',
+'enotif_lastdiff' => '请浏览 $1 查看该更改。',
 'enotif_anon_editor' => '匿名用户$1',
 'enotif_body' => '亲爱的$WATCHINGUSERNAME:
 
 你好!
 
-{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR$CHANGEDORCREATED,请浏览$PAGETITLE_URL查看当前版本。
+{{SITENAME}}页面$PAGETITLE已于$PAGEEDITDATE被$PAGEEDITOR $CHANGEDORCREATED,请浏览 $PAGETITLE_URL 查看当前版本。
 $NEWPAGE
 编辑摘要:$PAGESUMMARY $PAGEMINOREDIT
 
@@ -2772,6 +2791,8 @@ $1被封禁的理由是:“$2”',
 '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' => '导入日志',
@@ -2783,7 +2804,6 @@ $1被封禁的理由是:“$2”',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript测试',
-'javascripttest-disabled' => '该wiki站点上尚未启用此功能。',
 'javascripttest-title' => '运行$1测试',
 'javascripttest-pagetext-noframework' => '此页面被保留用于运行JavaScript测试。',
 'javascripttest-pagetext-unknownframework' => '未知的框架“$1”。',
@@ -2919,11 +2939,33 @@ $1被封禁的理由是:“$2”',
 
 # 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-robot-policy' => '搜索引擎状态',
+'pageinfo-robot-index' => '可索引',
+'pageinfo-robot-noindex' => '不可索引',
 'pageinfo-views' => '视图的数量',
-'pageinfo-watchers' => '监视者数目',
-'pageinfo-edits' => '编辑数量',
-'pageinfo-authors' => '作者数量',
+'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' => '魔术字 ($1)',
+'pageinfo-hidden-categories' => '隐藏分类 ($1)',
+'pageinfo-templates' => '使用的模板 ($1)',
 
 # Skin names
 'skinname-standard' => '标准',
@@ -2966,7 +3008,7 @@ $1',
 # Media information
 'mediawarning' => "'''警告''':该文件类型可能包含恶意代码。
 运行它可能对您的系统带来危险。",
-'imagemaxsize' => "图像大小限制:<br />''(文件说明页面)''",
+'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
 'thumbsize' => '缩略图大小:',
 'widthheightpage' => '$1×$2,$3页',
 'file-info' => '文件大小:$1,MIME类型:$2',
@@ -2974,6 +3016,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' => '动画SVG文件,图像大小为$1 × $2像素,文件大小:$3',
 'show-big-image' => '完全分辨率',
 'show-big-image-preview' => '本预览的大小:$1。',
 'show-big-image-other' => '其他{{PLURAL:$2|分辨率}}:$1。',
@@ -2983,6 +3026,8 @@ $1',
 'file-info-png-looped' => '循环',
 'file-info-png-repeat' => '已播放$1遍',
 'file-info-png-frames' => '$1帧',
+'file-no-thumb-animation' => "'''注意:由于技术限制,该文件的缩略图无法进行动画处理。'''",
+'file-no-thumb-animation-gif' => "'''注意:由于技术限制,高分辨率GIF图像的缩略图无法进行动画处理。'''",
 
 # Special:NewFiles
 'newimages' => '新文件库',
@@ -3792,6 +3837,10 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'feedback-bugcheck' => '请检查本bug是否为[$1 已知bug]。',
 'feedback-bugnew' => '我检查了。报告新bug',
 
+# Search suggestions
+'searchsuggest-search' => '搜索',
+'searchsuggest-containing' => '含有...',
+
 # API errors
 'api-error-badaccess-groups' => '你没有将文件上传到此wiki的权限。',
 'api-error-badtoken' => '内部错误:会话无效。',
index d68aac4..1be7036 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Traditional Chinese (‪中文(繁體)‬)
+/** Traditional Chinese (中文(繁體)‎)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -33,6 +33,7 @@
  * @author PhiLiP
  * @author Philip
  * @author Shinjiman
+ * @author Shirayuki
  * @author Shizhao
  * @author Simon Shek
  * @author Skjackey tse
@@ -250,7 +251,7 @@ $messages = array(
 'tog-watchlisthideliu' => '監視列表中隱藏登入用戶',
 'tog-watchlisthideanons' => '監視列表中隱藏匿名用戶',
 'tog-watchlisthidepatrolled' => '監視清單中隱藏已巡查的編輯',
-'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份複本到我的信箱',
+'tog-ccmeonemails' => '當我寄電子郵件給其他用戶時,也寄一份複本到我的信箱',
 'tog-diffonly' => '比較版本差異時不顯示頁面內容',
 'tog-showhiddencats' => '顯示隱藏分類',
 'tog-noconvertlink' => '不轉換連結標題',
@@ -367,7 +368,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' => '檢視歷史',
@@ -568,7 +569,7 @@ $1',
 'unexpected' => '不正常值:"$1"="$2"。',
 'formerror' => '錯誤:無法提交表單',
 'badarticleerror' => '無法在此頁進行該操作。',
-'cannotdelete' => '無法刪除頁面或圖片"$1"
+'cannotdelete' => '無法刪除頁面或圖片“$1”
 它可能已經被其他人刪除了。',
 'cannotdelete-title' => '無法刪除“$1”',
 'delete-hook-aborted' => '刪除被勾點中止。
@@ -588,8 +589,11 @@ $1',
 'protectedpagetext' => '該頁面已被保護以防止編輯。',
 'viewsourcetext' => '{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。',
 'viewyourtext' => "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
-'protectedinterface' => '該頁提供了軟體的介面文字,它已被保護以防止隨意的修改。',
-'editinginterface' => "'''警告:''' 您正在編輯的頁面是用於提供軟體的介面文字。改變此頁將影響其他用戶的介面外觀。如要翻譯,請考慮使用[//translatewiki.net/wiki/Main_Page?setlang=zh-hant translatewiki.net],一個用來為MediaWiki軟件本地化的計劃。",
+'protectedinterface' => '該頁提供此wiki軟體的介面文字,它已被保護以防止惡意修改。
+如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。',
+'editinginterface' => "'''警告:'''您正在編輯的頁面是用於提供軟體的介面文字。
+改變此頁將影響其他在此wiki上的用戶介面外觀。
+如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
 'sqlhidden' => '(隱藏SQL查詢)',
 'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含:
 $2',
@@ -611,10 +615,10 @@ $2',
 'virus-unknownscanner' => '未知的防病毒:',
 
 # Login and logout pages
-'logouttext' => '您已經登出。
+'logouttext' => "您已經登出。
 
-您可以以匿名方式繼續使用{{SITENAME}},或以相同或不同用戶身份[[Special:UserLogin|登入]]
-請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器緩存。',
+您可以以匿名方式繼續使用{{SITENAME}},或以相同或不同用戶身份<span class='plainlinks'>[$1 登入]</span>
+請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器緩存。",
 'welcomecreation' => '== 歡迎,$1! ==
 您的賬號已經建立。
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
@@ -851,8 +855,8 @@ $2
 'noarticletext' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索有關日誌],
 或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。',
-'noarticletext-nopermission' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]],
\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9cç´¢æ\9c\89é\97\9cæ\97¥èª\8c]</span>。',
+'noarticletext-nopermission' => '此頁目前沒有內容
\82¨å\8f¯ä»¥å\9c¨å\85¶å®\83é \81[[Special:Search/{{PAGENAME}}|æ\90\9cå°\8bæ­¤é \81æ¨\99é¡\8c]]ï¼\8cæ\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9cå°\8bæ\9c\89é\97\9cæ\97¥èª\8c]</span>ï¼\8cä½\86æ\82¨æ²\92æ\9c\89æ¬\8aé\99\90建ç«\8bæ­¤é \81。',
 'missing-revision' => '「{{PAGENAME}}」的#$1修訂版本不存在。
 
 這通常是因為過時的頁面歷史鏈接被刪除。
@@ -1101,7 +1105,9 @@ $1",
 'revdelete-only-restricted' => '在隱藏$1 $2的項目時發生錯誤:您不能在選擇了另一可見性選項後廢止管理員查看該項目。',
 'revdelete-reason-dropdown' => '*常用刪除理由
 ** 侵犯版權
-** 不合適的個人資料',
+** 不合適的評論或個人資料
+** 不當的用戶名
+** 潛在誹謗的資料',
 'revdelete-otherreason' => '其它/附加的理由:',
 'revdelete-reasonotherlist' => '其它理由',
 'revdelete-edit-reasonlist' => '編輯刪除埋由',
@@ -1197,8 +1203,6 @@ $1",
 'search-interwiki-caption' => '姊妹計劃',
 'search-interwiki-default' => '$1項結果:',
 'search-interwiki-more' => '(更多)',
-'search-mwsuggest-enabled' => '有建議',
-'search-mwsuggest-disabled' => '無建議',
 'search-relatedarticle' => '相關',
 'mwsuggest-disable' => '停用AJAX建議',
 'searcheverything-enable' => '在所有名字空間中搜尋',
@@ -1294,7 +1298,7 @@ $1",
 'timezoneregion-indian' => '印度洋',
 'timezoneregion-pacific' => '太平洋',
 'allowemail' => '接受來自其他用戶的郵件',
-'prefs-searchoptions' => '搜尋選項',
+'prefs-searchoptions' => '搜尋',
 'prefs-namespaces' => '頁面名稱空間',
 'defaultns' => '否則在這些名字空間搜尋:',
 'default' => '預設',
@@ -1698,7 +1702,7 @@ $1',
 'backend-fail-internal' => '存儲後方“$1”發生了一個未知錯誤。',
 'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於“$1”。',
 'backend-fail-batchsize' => '存儲後端被給予了$1次檔𣗈 {{PLURAL:$1|操作|操作}} ;限制是$2次{{PLURAL:$2|操作|操作}}。',
-'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法寫å\85¥æª\94ð£\97\88 $1 ã\80\82',
+'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法è®\80å\8f\96æ\88\96寫å\85¥æª\94æ¡\88 $1 ã\80\82',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '無法連接到後端存儲的日誌資料庫" $1 "。',
@@ -2194,8 +2198,8 @@ Template:消除歧義',
 'changed' => '更改',
 'created' => '建立了',
 'enotif_subject' => '{{SITENAME}}頁面“$PAGETITLE”已被$PAGEEDITOR$CHANGEDORCREATED',
-'enotif_lastvisited' => '檢視您上次訪問後的所有更改請參閱$1。',
-'enotif_lastdiff' => '檢視更改請參閱$1。',
+'enotif_lastvisited' => '請參閱 $1 檢視你上次訪問後的所有更改。',
+'enotif_lastdiff' => '請參閱 $1 檢視該更改。',
 'enotif_anon_editor' => '匿名用戶$1',
 'enotif_body' => '親愛的$WATCHINGUSERNAME:
 
@@ -2804,7 +2808,6 @@ $1被封禁的理由是“$2”',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript測試',
-'javascripttest-disabled' => '此功能在此Wiki上未被使用。',
 'javascripttest-title' => '運行$1測試。',
 'javascripttest-pagetext-noframework' => '這個頁面預留了作JavaScript測試。',
 'javascripttest-pagetext-unknownframework' => '未知框架"$1"',
@@ -2964,10 +2967,10 @@ $1被封禁的理由是“$2”',
 'pageinfo-authors' => '作者總數',
 'pageinfo-recent-edits' => '最近編輯次數 (過去 $1 內)',
 'pageinfo-recent-authors' => '最近作者數目',
-'pageinfo-restriction' => '保護頁面 ( <code>$1</code> )',
 'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}} ( $1 )',
 'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}} ( $1 )',
 'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}} ( $1 )',
+'pageinfo-toolboxlink' => '頁面資訊',
 
 # Skin names
 'skinname-standard' => '標準',
@@ -3563,6 +3566,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[跨wiki轉換代碼不可用]',
 'scarytranscludefailed' => '[模板$1讀取失敗]',
+'scarytranscludefailed-httpstatus' => '[模板$1讀取失敗:HTTP$2]',
 'scarytranscludetoolong' => '[URL 地址太長]',
 
 # Delete conflict
@@ -3838,6 +3842,10 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'feedback-bugcheck' => '請檢查此bug是否為[$1 已知bug]。',
 'feedback-bugnew' => '我已經檢查過。報告一個新的bug',
 
+# Search suggestions
+'searchsuggest-search' => '搜尋',
+'searchsuggest-containing' => '包含...',
+
 # API errors
 'api-error-badaccess-groups' => '您沒有權限在此維基項目上傳文件。',
 'api-error-badtoken' => '內部錯誤:標記無效。',
index a7768fc..5efa16a 100644 (file)
@@ -16,210 +16,210 @@ $messages = array(
 'underline-always' => 'Njalo',
 
 # Dates
-'sunday'        => 'iSonto',
-'monday'        => 'uMsombuluko',
-'tuesday'       => 'uLwesibili',
-'wednesday'     => 'uLwesithathu',
-'thursday'      => 'uLwesine',
-'friday'        => 'uLwesihlanu',
-'saturday'      => 'uMgqibelo',
-'january'       => 'uJanuwali',
-'february'      => 'uFebruwari',
-'march'         => 'uMashi',
-'april'         => 'u-Apreli',
-'may_long'      => 'uMeyi',
-'june'          => 'uJuni',
-'july'          => 'uJulayi',
-'august'        => 'u-Agasti',
-'september'     => 'uSepthemba',
-'october'       => 'u-Okthoba',
-'november'      => 'uNovemba',
-'december'      => 'uDisemba',
-'january-gen'   => 'uJanuwali',
-'february-gen'  => 'uFebruwari',
-'march-gen'     => 'uMashi',
-'april-gen'     => 'u-Apreli',
-'may-gen'       => 'uMeyi',
-'june-gen'      => 'uJuni',
-'july-gen'      => 'uJulayi',
-'august-gen'    => 'u-Agasti',
+'sunday' => 'iSonto',
+'monday' => 'uMsombuluko',
+'tuesday' => 'uLwesibili',
+'wednesday' => 'uLwesithathu',
+'thursday' => 'uLwesine',
+'friday' => 'uLwesihlanu',
+'saturday' => 'uMgqibelo',
+'january' => 'uJanuwali',
+'february' => 'uFebruwari',
+'march' => 'uMashi',
+'april' => 'u-Apreli',
+'may_long' => 'uMeyi',
+'june' => 'uJuni',
+'july' => 'uJulayi',
+'august' => 'u-Agasti',
+'september' => 'uSepthemba',
+'october' => 'u-Okthoba',
+'november' => 'uNovemba',
+'december' => 'uDisemba',
+'january-gen' => 'uJanuwali',
+'february-gen' => 'uFebruwari',
+'march-gen' => 'uMashi',
+'april-gen' => 'u-Apreli',
+'may-gen' => 'uMeyi',
+'june-gen' => 'uJuni',
+'july-gen' => 'uJulayi',
+'august-gen' => 'u-Agasti',
 'september-gen' => 'uSepthemba',
-'october-gen'   => 'u-Okthoba',
-'november-gen'  => 'uNovemba',
-'december-gen'  => 'uDisemba',
-'may'           => 'uMeyi',
+'october-gen' => 'u-Okthoba',
+'november-gen' => 'uNovemba',
+'december-gen' => 'uDisemba',
+'may' => 'uMeyi',
 
-'cancel'        => 'Nqamula',
+'cancel' => 'Nqamula',
 'moredotdotdot' => 'Amanye...',
-'mypage'        => 'Ikhasi lami',
-'mytalk'        => 'Ingxoxo yami',
-'navigation'    => 'Ukuqondiswa kwemikhumbi',
+'mypage' => 'Ikhasi lami',
+'mytalk' => 'Ingxoxo yami',
+'navigation' => 'Ukuqondiswa kwemikhumbi',
 
 # Cologne Blue skin
-'qbfind'        => 'Thola',
-'qbbrowse'      => 'Cinga',
-'qbedit'        => 'Ukuhlela',
+'qbfind' => 'Thola',
+'qbbrowse' => 'Cinga',
+'qbedit' => 'Ukuhlela',
 'qbpageoptions' => 'Leli khasi',
-'qbmyoptions'   => 'Amakhasi ami',
-
-'errorpagetitle'   => 'Icala',
-'help'             => 'Usizo',
-'search'           => 'Sesha',
-'searchbutton'     => 'Sesha',
-'go'               => 'Hamba',
-'searcharticle'    => 'Hamba',
-'history_short'    => 'Umlando',
+'qbmyoptions' => 'Amakhasi ami',
+
+'errorpagetitle' => 'Icala',
+'help' => 'Usizo',
+'search' => 'Sesha',
+'searchbutton' => 'Sesha',
+'go' => 'Hamba',
+'searcharticle' => 'Hamba',
+'history_short' => 'Umlando',
 'printableversion' => 'Inguqulo eshicilelekayo',
-'print'            => 'Shicilela',
-'edit'             => 'Hlela',
-'editthispage'     => 'Hlela leli khasi',
-'delete'           => 'Sula',
-'deletethispage'   => 'Sula lelikhasi',
-'protect'          => 'Londoloza',
-'protectthispage'  => 'Londoloza lelikhasi',
-'newpage'          => 'Ikhasi elisha',
-'talkpage'         => 'Xoxa ngalelikhasi',
-'personaltools'    => 'Amathuluzi kamsebenzisi',
-'talk'             => 'Ingxoxo',
-'toolbox'          => 'Amathuluzi',
-'otherlanguages'   => 'Ngezilimi ezinahlukene',
-'redirectpagesub'  => 'Ikhasi likakuphambukisa',
-'protectedpage'    => 'Ikhasi elilondolozwa',
-'jumpto'           => 'Eqa e:',
+'print' => 'Shicilela',
+'edit' => 'Hlela',
+'editthispage' => 'Hlela leli khasi',
+'delete' => 'Sula',
+'deletethispage' => 'Sula lelikhasi',
+'protect' => 'Londoloza',
+'protectthispage' => 'Londoloza lelikhasi',
+'newpage' => 'Ikhasi elisha',
+'talkpage' => 'Xoxa ngalelikhasi',
+'personaltools' => 'Amathuluzi kamsebenzisi',
+'talk' => 'Ingxoxo',
+'toolbox' => 'Amathuluzi',
+'otherlanguages' => 'Ngezilimi ezinahlukene',
+'redirectpagesub' => 'Ikhasi likakuphambukisa',
+'protectedpage' => 'Ikhasi elilondolozwa',
+'jumpto' => 'Eqa e:',
 'jumptonavigation' => 'Ukuqondiswa kwemikhumbi',
-'jumptosearch'     => 'Sesha',
+'jumptosearch' => 'Sesha',
 
 # 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).
-'currentevents'        => 'Izehlakalo ezimanje',
-'currentevents-url'    => 'Project:Izehlakalo ezimanje',
-'edithelp'             => 'Usizo ngokuhlela',
-'helppage'             => 'Help:Isiqikili',
-'mainpage'             => 'Ikhasi Elikhulu',
+'currentevents' => 'Izehlakalo ezimanje',
+'currentevents-url' => 'Project:Izehlakalo ezimanje',
+'edithelp' => 'Usizo ngokuhlela',
+'helppage' => 'Help:Isiqikili',
+'mainpage' => 'Ikhasi Elikhulu',
 'mainpage-description' => 'Ikhasi Elikhulu',
-'portal'               => 'Umnyango wamgwamanda',
-'portal-url'           => 'Project:Umnyango wamgwamanda',
+'portal' => 'Umnyango wamgwamanda',
+'portal-url' => 'Project:Umnyango wamgwamanda',
 
-'newmessageslink'         => 'Imilayezo emisha',
+'newmessageslink' => 'Imilayezo emisha',
 'youhavenewmessagesmulti' => 'Uyanemilayezo emisha e $1',
-'editsection'             => 'hlela',
-'toc'                     => 'Isiqikili',
-'showtoc'                 => 'Bukisa',
-'hidetoc'                 => 'Fihla',
+'editsection' => 'hlela',
+'toc' => 'Isiqikili',
+'showtoc' => 'Bukisa',
+'hidetoc' => 'Fihla',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Umlayezo',
-'nstab-user'      => 'Ikhasi lomsebenzisi',
-'nstab-special'   => 'Kukhulu',
-'nstab-image'     => 'Ifayela',
+'nstab-main' => 'Umlayezo',
+'nstab-user' => 'Ikhasi lomsebenzisi',
+'nstab-special' => 'Kukhulu',
+'nstab-image' => 'Ifayela',
 'nstab-mediawiki' => 'Umlayezo',
-'nstab-help'      => 'Usizo',
-'nstab-category'  => 'Uhlobo',
+'nstab-help' => 'Usizo',
+'nstab-category' => 'Uhlobo',
 
 # General errors
-'error'         => 'Icala',
+'error' => 'Icala',
 'databaseerror' => 'Idatabheyisi linecala',
 'internalerror' => 'Icala lingaphakathi',
 
 # Login and logout pages
-'welcomecreation'         => '== Umbingelelo, $1! ==
+'welcomecreation' => '== Umbingelelo, $1! ==
 
 ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}} wakho.',
-'yourname'                => 'Isiga',
-'yourpassword'            => 'Izwi elingenangozi',
-'yourpasswordagain'       => 'Bhala izwi elingenangozi lakho kabusha',
-'remembermypassword'      => 'Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                   => 'Ngena',
+'yourname' => 'Isiga',
+'yourpassword' => 'Izwi elingenangozi',
+'yourpasswordagain' => 'Bhala izwi elingenangozi lakho kabusha',
+'remembermypassword' => 'Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Ngena',
 'nav-login-createaccount' => 'Ngena / Dala ikhawundi',
-'userlogin'               => 'Ngena / Dala ikhawundi',
-'logout'                  => 'Phuma',
-'userlogout'              => 'Phuma',
-'notloggedin'             => 'Awungenile',
-'nologin'                 => "Awunekhawundi? '''$1'''.",
-'nologinlink'             => 'Dala ikhawundi',
-'createaccount'           => 'Dala ikhawundi',
-'gotaccountlink'          => 'Ngena',
-'loginsuccesstitle'       => 'Ubengena',
-'nosuchuser'              => 'Akukho umsebenzisi unegama "$1". Hlola umbhalo wakho, noma dala ikhawundi elisha.',
-'nosuchusershort'         => 'Akukho umsebenzisi unegama "$1". Hlola umbhalo wakho.',
-'emailconfirmlink'        => 'Qinisekisa ikheli likagesi lakho',
-'loginlanguagelabel'      => 'Ulimi: $1',
+'userlogin' => 'Ngena / Dala ikhawundi',
+'logout' => 'Phuma',
+'userlogout' => 'Phuma',
+'notloggedin' => 'Awungenile',
+'nologin' => "Awunekhawundi? '''$1'''.",
+'nologinlink' => 'Dala ikhawundi',
+'createaccount' => 'Dala ikhawundi',
+'gotaccountlink' => 'Ngena',
+'loginsuccesstitle' => 'Ubengena',
+'nosuchuser' => 'Akukho umsebenzisi unegama "$1". Hlola umbhalo wakho, noma dala ikhawundi elisha.',
+'nosuchusershort' => 'Akukho umsebenzisi unegama "$1". Hlola umbhalo wakho.',
+'emailconfirmlink' => 'Qinisekisa ikheli likagesi lakho',
+'loginlanguagelabel' => 'Ulimi: $1',
 
 # Change password dialog
 'newpassword' => 'Izwi elingenangozi elisha:',
 
 # Edit page toolbar
 'italic_sample' => 'Amazwi ama-italiki',
-'italic_tip'    => 'Amazwi ama-italiki',
-'hr_tip'        => 'Umugqa uhleliwe  (use sparingly)',
+'italic_tip' => 'Amazwi ama-italiki',
+'hr_tip' => 'Umugqa uhleliwe  (use sparingly)',
 
 # Edit pages
-'summary'            => 'Isifinyezo:',
-'minoredit'          => 'Lokho ngukuhlela okuncane',
-'watchthis'          => 'Bukela ngalelikhasi',
-'savearticle'        => 'Ukonga ikhasi',
-'preview'            => 'Isibonakalo',
-'showpreview'        => 'Bukisa isibonakalo',
-'showdiff'           => 'Bukisa izinguquko',
+'summary' => 'Isifinyezo:',
+'minoredit' => 'Lokho ngukuhlela okuncane',
+'watchthis' => 'Bukela ngalelikhasi',
+'savearticle' => 'Ukonga ikhasi',
+'preview' => 'Isibonakalo',
+'showpreview' => 'Bukisa isibonakalo',
+'showdiff' => 'Bukisa izinguquko',
 'missingcommenttext' => 'Ake ubhale uvo ngaphansi.',
-'loginreqtitle'      => 'Lidinga ukuthi uyangena',
-'loginreqlink'       => 'Ngena',
-'noarticletext'      => 'Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].',
-'yourtext'           => 'Umbhalo wakho',
-'yourdiff'           => 'Izinguquko',
+'loginreqtitle' => 'Lidinga ukuthi uyangena',
+'loginreqlink' => 'Ngena',
+'noarticletext' => 'Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].',
+'yourtext' => 'Umbhalo wakho',
+'yourdiff' => 'Izinguquko',
 
 # History pages
-'next'      => 'Kulandela',
-'last'      => 'Amagcino',
+'next' => 'Kulandela',
+'last' => 'Amagcino',
 'histfirst' => 'lokuqala',
-'histlast'  => 'ligcinileyo',
+'histlast' => 'ligcinileyo',
 
 # Revision deletion
 'rev-delundel' => 'bukisa/fihla',
 
 # Search results
-'searchresults'  => 'Umphumela wokusesha',
+'searchresults' => 'Umphumela wokusesha',
 'searchhelp-url' => 'Help:Isiqikili',
-'powersearch'    => 'Sesha',
+'powersearch' => 'Sesha',
 
 # Quickbar
 'qbsettings' => 'Imeniyu',
 
 # Preferences page
-'preferences'       => 'Amakhethelo',
-'mypreferences'     => 'Amakhethelo ami',
-'prefsnologin'      => 'Awungenile',
-'changepassword'    => 'Guqula izwi elingenangozi',
-'saveprefs'         => 'Saveprefs',
+'preferences' => 'Amakhethelo',
+'mypreferences' => 'Amakhethelo ami',
+'prefsnologin' => 'Awungenile',
+'changepassword' => 'Guqula izwi elingenangozi',
+'saveprefs' => 'Saveprefs',
 'searchresultshead' => 'Sesha',
-'timezonelegend'    => 'Isifunda sasikhathi',
-'localtime'         => 'Isikhathi siyalapha',
-'username'          => 'Isiga:',
-'yourrealname'      => 'Igama eliqinisileyo',
-'yourlanguage'      => 'Ulimi:',
-'email'             => 'Iposi likagesi',
+'timezonelegend' => 'Isifunda sasikhathi',
+'localtime' => 'Isikhathi siyalapha',
+'username' => 'Isiga:',
+'yourrealname' => 'Igama eliqinisileyo',
+'yourlanguage' => 'Ulimi:',
+'email' => 'Iposi likagesi',
 
 # Recent changes
 'recentchanges' => 'Izinguquko ezimanje',
-'hide'          => 'Fihla',
-'show'          => 'Bukisa',
+'hide' => 'Fihla',
+'show' => 'Bukisa',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Izinguquko ezilandiweyo',
-'recentchangeslinked-feed'    => 'Izinguquko ezilandiweyo',
+'recentchangeslinked' => 'Izinguquko ezilandiweyo',
+'recentchangeslinked-feed' => 'Izinguquko ezilandiweyo',
 'recentchangeslinked-toolbox' => 'Izinguquko ezilandiweyo',
 
 # Upload
-'upload'              => 'Layisha ifayili',
-'uploadbtn'           => 'Layisha ifayili',
-'filesource'          => 'Umthombo:',
-'ignorewarnings'      => 'Duba imiyalo',
+'upload' => 'Layisha ifayili',
+'uploadbtn' => 'Layisha ifayili',
+'filesource' => 'Umthombo:',
+'ignorewarnings' => 'Duba imiyalo',
 'upload-success-subj' => 'Ukulayisha okuchumile',
 
 'nolicense' => 'Ubekhetha lutho',
 
 # File description page
 'file-anchor-link' => 'Ifayela',
-'nolinkstoimage'   => 'Akukho amakhasi akhomba kuleli fayela.',
+'nolinkstoimage' => 'Akukho amakhasi akhomba kuleli fayela.',
 
 # Random page
 'randompage' => 'Ikhasi elingaphandle kokucabanga',
@@ -228,12 +228,12 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 'statistics-header-users' => 'Ukwaziswa wamsebenzisi',
 
 # Miscellaneous special pages
-'shortpages'        => 'Amakhasi amafishane',
-'longpages'         => 'Amakhasi amade',
-'newpages'          => 'Amakhasi amasha',
+'shortpages' => 'Amakhasi amafishane',
+'longpages' => 'Amakhasi amade',
+'newpages' => 'Amakhasi amasha',
 'newpages-username' => 'Isiga:',
-'move'              => 'Sunduza',
-'movethispage'      => 'Thuthisa leli khasi',
+'move' => 'Sunduza',
+'movethispage' => 'Thuthisa leli khasi',
 
 # Special:Log
 'specialloguserlabel' => 'Umsebenzisi:',
@@ -243,25 +243,25 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 'allpagessubmit' => 'Hamba',
 
 # E-mail user
-'emailuser'    => 'Thumela umlayezo lo msebenzisi',
+'emailuser' => 'Thumela umlayezo lo msebenzisi',
 'noemailtitle' => 'Akukho ikheli likaposi',
 'emailsubject' => 'Indaba',
 'emailmessage' => 'Umlayezo',
-'emailsend'    => 'Thuma',
-'emailsent'    => 'Umlayezo uthumwa',
+'emailsend' => 'Thuma',
+'emailsent' => 'Umlayezo uthumwa',
 
 # Watchlist
-'watchlist'    => 'Uhlelo ubukelwa wami',
-'watch'        => 'Bukela',
-'unwatch'      => "Mus'ukubukela",
+'watchlist' => 'Uhlelo ubukelwa wami',
+'watch' => 'Bukela',
+'unwatch' => "Mus'ukubukela",
 'notanarticle' => 'Akulona ikhasi elinakho okuqukethwe',
 
 'enotif_newpagetext' => 'Lelikhasi liyasha.',
 
 # Delete
 'deletepage' => 'Sula ikhasi',
-'confirm'    => 'Qinisekisa',
-'exblank'    => 'ikhasi elize',
+'confirm' => 'Qinisekisa',
+'exblank' => 'ikhasi elize',
 
 # Protect
 'protectcomment' => 'Isizathu',
@@ -275,31 +275,31 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 
 # Contributions
 'contributions' => 'Amanikelo amsebenzisi',
-'mycontris'     => 'Amanikelo ami',
+'mycontris' => 'Amanikelo ami',
 
 # What links here
 'isredirect' => 'Ikhasi silayela',
 
 # Block/unblock
-'blockip'            => 'Vimbela lo msebenzisi',
-'ipbexpiry'          => 'Ukuphela',
-'ipbreason'          => 'Isizathu',
-'ipbsubmit'          => 'Vimbela lo msebenzisi',
-'ipusubmit'          => 'Qeda isivimbelo lo msebenzisi',
+'blockip' => 'Vimbela lo msebenzisi',
+'ipbexpiry' => 'Ukuphela',
+'ipbreason' => 'Isizathu',
+'ipbsubmit' => 'Vimbela lo msebenzisi',
+'ipusubmit' => 'Qeda isivimbelo lo msebenzisi',
 'createaccountblock' => 'Ukudala kwekhawundi kuvimbelwa',
-'proxyblocksuccess'  => 'Kuphelile.',
+'proxyblocksuccess' => 'Kuphelile.',
 
 # Developer tools
 'databasenotlocked' => 'Idatabheyisi alikhiyiwi.',
 
 # Move page
-'move-page-legend'        => 'Thuthisa ikhasi',
-'movearticle'             => 'Thuthisa ikhasi',
-'movenologin'             => 'Awungenile',
-'movepagebtn'             => 'Thuthisa ikhasi',
-'movedto'                 => 'Lithuthiselwe e',
-'movereason'              => 'Isizathu',
-'delete_and_move'         => 'Sula futhi sunduza',
+'move-page-legend' => 'Thuthisa ikhasi',
+'movearticle' => 'Thuthisa ikhasi',
+'movenologin' => 'Awungenile',
+'movepagebtn' => 'Thuthisa ikhasi',
+'movedto' => 'Lithuthiselwe e',
+'movereason' => 'Isizathu',
+'delete_and_move' => 'Sula futhi sunduza',
 'delete_and_move_confirm' => 'Yebo, sula ikhasi',
 
 # Export
@@ -310,7 +310,7 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 
 # Thumbnails
 'thumbnail-more' => 'Khulisa',
-'filemissing'    => 'Ifayili lilahlekile',
+'filemissing' => 'Ifayili lilahlekile',
 
 # Special:Import
 'import-interwiki-submit' => 'Ngenisa',
@@ -321,27 +321,27 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 # Patrolling
 'markaspatrolleddiff' => 'Dweba ukuthi lelikhasi liyagadwa',
 'markaspatrolledtext' => 'Dweba ukuthi lelikhasi liyagadwa',
-'markedaspatrolled'   => 'Dweba ukuthi lelikhasi liyagadwa',
+'markedaspatrolled' => 'Dweba ukuthi lelikhasi liyagadwa',
 
 # Special:NewFiles
 'newimages' => 'Uhlelo lwamafayela amasha',
-'noimages'  => 'Awuboni lutho.',
-'ilsubmit'  => 'Sesha',
+'noimages' => 'Awuboni lutho.',
+'ilsubmit' => 'Sesha',
 
 # Metadata
-'metadata-expand'   => 'Bukisa imininingwane yonke',
+'metadata-expand' => 'Bukisa imininingwane yonke',
 'metadata-collapse' => 'Fihla imininingwane yonke',
 
 # EXIF tags
 'exif-orientation' => 'Ukuma okumaqondana nempumalanga',
-'exif-artist'      => 'Umbhali',
-'exif-sharpness'   => 'Ububukhali',
+'exif-artist' => 'Umbhali',
+'exif-sharpness' => 'Ububukhali',
 
 'exif-orientation-1' => 'Kuphelele',
 
 'exif-meteringmode-5' => 'Umhlobiso',
 
-'exif-lightsource-4'  => 'Umbani',
+'exif-lightsource-4' => 'Umbani',
 'exif-lightsource-11' => 'Umthunzi',
 
 'exif-sensingmethod-1' => 'Akucaci',
@@ -362,7 +362,7 @@ ikhawundi lakho liyadalwa. musa ukukhohlwa ukuguqula amakhethelo a-{{SITENAME}}
 'exif-sharpness-2' => 'Kulukhuni',
 
 # E-mail address confirmation
-'confirmemail'          => 'Qinisekisa ikheli likagesi',
+'confirmemail' => 'Qinisekisa ikheli likagesi',
 'confirmemail_loggedin' => 'Ikheli likagesi lakho liqinisekiswa.',
 
 # Delete conflict
diff --git a/languages/utils/CLDRPluralRuleEvaluator.php b/languages/utils/CLDRPluralRuleEvaluator.php
new file mode 100644 (file)
index 0000000..be2b8c3
--- /dev/null
@@ -0,0 +1,575 @@
+<?php
+/**
+ * Parse and evaluate a plural rule.
+ *
+ * http://unicode.org/reports/tr35/#Language_Plural_Rules
+ *
+ * @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
+ * @file
+ * @since 1.20
+ */
+
+class CLDRPluralRuleEvaluator {
+       /**
+        * Evaluate a number against a set of plural rules. If a rule passes,
+        * return the index of plural rule.
+        *
+        * @param int The number to be evaluated against the rules
+        * @param array The associative array of plural rules in pluralform => rule format.
+        * @return int The index of the plural form which passed the evaluation
+        */
+       public static function evaluate( $number, array $rules ) {
+               $rules = self::compile( $rules );
+               return self::evaluateCompiled( $number, $rules );
+       }
+
+       /**
+        * Convert a set of rules to a compiled form which is optimised for
+        * fast evaluation. The result will be an array of strings, and may be cached.
+        *
+        * @param $rules The rules to compile
+        * @return An array of compile rules.
+        */
+       public static function compile( array $rules ) {
+               // We can't use array_map() for this because it generates a warning if
+               // there is an exception.
+               foreach ( $rules as &$rule ) {
+                       $rule = CLDRPluralRuleConverter::convert( $rule );
+               }
+               return $rules;
+       }
+
+       /**
+        * Evaluate a compiled set of rules returned by compile(). Do not allow
+        * the user to edit the compiled form, or else PHP errors may result.
+        */
+       public static function evaluateCompiled( $number, array $rules ) {
+               // The compiled form is RPN, with tokens strictly delimited by
+               // spaces, so this is a simple RPN evaluator.
+               foreach ( $rules as $i => $rule  ) {
+                       $stack = array();
+                       $zero = ord( '0' );
+                       $nine = ord( '9' );
+                       foreach ( StringUtils::explode( ' ', $rule ) as $token ) {
+                               $ord = ord( $token );
+                               if ( $token === 'n' ) {
+                                       $stack[] = $number;
+                               } elseif ( $ord >= $zero && $ord <= $nine ) {
+                                       $stack[] = intval( $token );
+                               } else {
+                                       $right = array_pop( $stack );
+                                       $left = array_pop( $stack );
+                                       $result = self::doOperation( $token, $left, $right );
+                                       $stack[] = $result;
+                               }
+                       }
+                       if ( $stack[0] ) {
+                               return $i;
+                       }
+               }
+               // None of the provided rules match. The number belongs to caregory
+               // 'other' which comes last.
+               return count( $rules );
+       }
+
+       /**
+        * Do a single operation
+        *
+        * @param $token string The token string
+        * @param $left The left operand. If it is an object, its state may be destroyed.
+        * @param $right The right operand
+        * @throws CLDRPluralRuleError
+        * @return mixed
+        */
+       private static function doOperation( $token, $left, $right ) {
+               if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
+                       if ( !($right instanceof CLDRPluralRuleEvaluator_Range ) ) {
+                               $right = new CLDRPluralRuleEvaluator_Range( $right );
+                       }
+               }
+               switch ( $token ) {
+                       case 'or':
+                               return $left || $right;
+                       case 'and':
+                               return $left && $right;
+                       case 'is':
+                               return $left == $right;
+                       case 'is-not':
+                               return $left != $right;
+                       case 'in':
+                               return $right->isNumberIn( $left );
+                       case 'not-in':
+                               return !$right->isNumberIn( $left );
+                       case 'within':
+                               return $right->isNumberWithin( $left );
+                       case 'not-within':
+                               return !$right->isNumberWithin( $left );
+                       case 'mod':
+                               if ( is_int( $left ) ) {
+                                       return (int) fmod( $left, $right );
+                               }
+                               return fmod( $left, $right );
+                       case ',':
+                               if ( $left instanceof CLDRPluralRuleEvaluator_Range ) {
+                                       $range = $left;
+                               } else {
+                                       $range = new CLDRPluralRuleEvaluator_Range( $left );
+                               }
+                               $range->add( $right );
+                               return $range;
+                       case '..':
+                               return new CLDRPluralRuleEvaluator_Range( $left, $right );
+                       default:
+                               throw new CLDRPluralRuleError( "Invalid RPN token" );
+               }
+       }
+}
+
+/**
+ * Evaluator helper class representing a range list.
+ */
+class CLDRPluralRuleEvaluator_Range {
+       public $parts = array();
+
+       function __construct( $start, $end = false ) {
+               if ( $end === false ) {
+                       $this->parts[] = $start;
+               } else {
+                       $this->parts[] = array( $start, $end );
+               }
+       }
+
+       /**
+        * Determine if the given number is inside the range. If $integerConstraint
+        * is true, the number must additionally be an integer if it is to match
+        * any interval part.
+        */
+       function isNumberIn( $number, $integerConstraint = true ) {
+               foreach ( $this->parts as $part ) {
+                       if ( is_array( $part ) ) {
+                               if ( ( !$integerConstraint || floor( $number ) === (float)$number )
+                                       && $number >= $part[0] && $number <= $part[1] )
+                               {
+                                       return true;
+                               }
+                       } else {
+                               if ( $number == $part ) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Readable alias for isNumberIn( $number, false ), and the implementation
+        * of the "within" operator.
+        */
+       function isNumberWithin( $number ) {
+               return $this->isNumberIn( $number, false );
+       }
+
+       /**
+        * Add another part to this range. The supplied new part may either be a
+        * range object itself, or a single number.
+        */
+       function add( $other ) {
+               if ( $other instanceof self ) {
+                       $this->parts = array_merge( $this->parts, $other->parts );
+               } else {
+                       $this->parts[] = $other;
+               }
+       }
+
+       /**
+        * For debugging
+        */
+       function __toString() {
+               $s = 'Range(';
+               foreach ( $this->parts as $i => $part ) {
+                       if ( $i ) {
+                               $s .= ', ';
+                       }
+                       if ( is_array( $part ) ) {
+                               $s .= $part[0] . '..' . $part[1];
+                       } else {
+                               $s .= $part;
+                       }
+               }
+               $s .= ')';
+               return $s;
+       }
+
+}
+
+/**
+ * Helper class for converting rules to reverse polish notation (RPN).
+ */
+class CLDRPluralRuleConverter {
+       public $rule, $pos, $end;
+       public $operators = array();
+       public $operands = array();
+
+       /**
+        * Precedence levels. Note that there's no need to worry about associativity
+        * for the level 4 operators, since they return boolean and don't accept
+        * boolean inputs.
+        */
+       static $precedence = array(
+               'or' => 2,
+               'and' => 3,
+               'is' => 4,
+               'is-not' => 4,
+               'in' => 4,
+               'not-in' => 4,
+               'within' => 4,
+               'not-within' => 4,
+               'mod' => 5,
+               ',' => 6,
+               '..' => 7,
+       );
+
+       /**
+        * A character list defining whitespace, for use in strspn() etc.
+        */
+       const WHITESPACE_CLASS = " \t\r\n";
+
+       /**
+        * Same for digits. Note that the grammar given in UTS #35 doesn't allow
+        * negative numbers or decimals.
+        */
+       const NUMBER_CLASS = '0123456789';
+
+       /**
+        * An anchored regular expression which matches a word at the current offset.
+        */
+       const WORD_REGEX = '/[a-zA-Z]+/A';
+
+       /**
+        * Convert a rule to RPN. This is the only public entry point.
+        */
+       public static function convert( $rule ) {
+               $parser = new self( $rule );
+               return $parser->doConvert();
+       }
+
+       /**
+        * Private constructor.
+        */
+       protected function __construct( $rule ) {
+               $this->rule = $rule;
+               $this->pos = 0;
+               $this->end = strlen( $rule );
+       }
+
+       /**
+        * Do the operation.
+        */
+       protected function doConvert() {
+               $expectOperator = true;
+
+               // Iterate through all tokens, saving the operators and operands to a
+               // stack per Dijkstra's shunting yard algorithm.
+               while ( false !== ( $token = $this->nextToken() ) ) {
+                       // In this grammar, there are only binary operators, so every valid
+                       // rule string will alternate between operator and operand tokens.
+                       $expectOperator = !$expectOperator;
+
+                       if ( $token instanceof CLDRPluralRuleConverter_Expression ) {
+                               // Operand
+                               if ( $expectOperator ) {
+                                       $token->error( 'unexpected operand' );
+                               }
+                               $this->operands[] = $token;
+                               continue;
+                       } else {
+                               // Operator
+                               if  ( !$expectOperator ) {
+                                       $token->error( 'unexpected operator' );
+                               }
+                               // Resolve higher precedence levels
+                               $lastOp = end( $this->operators );
+                               while ( $lastOp && self::$precedence[$token->name] <= self::$precedence[$lastOp->name] ) {
+                                       $this->doOperation( $lastOp, $this->operands );
+                                       array_pop( $this->operators );
+                                       $lastOp = end( $this->operators );
+                               }
+                               $this->operators[] = $token;
+                       }
+               }
+
+               // Finish off the stack
+               while ( $op = array_pop( $this->operators ) ) {
+                       $this->doOperation( $op, $this->operands );
+               }
+
+               // Make sure the result is sane. The first case is possible for an empty
+               // string input, the second should be unreachable.
+               if ( !count( $this->operands ) ) {
+                       $this->error( 'condition expected' );
+               } elseif ( count( $this->operands ) > 1 ) {
+                       $this->error( 'missing operator or too many operands' );
+               }
+
+               $value = $this->operands[0];
+               if ( $value->type !== 'boolean' ) {
+                       $this->error( 'the result must have a boolean type' );
+               }
+
+               return $this->operands[0]->rpn;
+       }
+
+       /**
+        * Fetch the next token from the input string. Return it as a
+        * CLDRPluralRuleConverter_Fragment object.
+        */
+       protected function nextToken() {
+               if ( $this->pos >= $this->end ) {
+                       return false;
+               }
+
+               // Whitespace
+               $length = strspn( $this->rule, self::WHITESPACE_CLASS, $this->pos );
+               $this->pos += $length;
+
+               if ( $this->pos >= $this->end ) {
+                       return false;
+               }
+
+               // Number
+               $length = strspn( $this->rule, self::NUMBER_CLASS, $this->pos );
+               if ( $length !== 0 ) {
+                       $token = $this->newNumber( substr( $this->rule, $this->pos, $length ), $this->pos );
+                       $this->pos += $length;
+                       return $token;
+               }
+
+               // Comma
+               if ( $this->rule[$this->pos] === ',' ) {
+                       $token = $this->newOperator( ',', $this->pos, 1 );
+                       $this->pos ++;
+                       return $token;
+               }
+
+               // Dot dot
+               if ( substr( $this->rule, $this->pos, 2 ) === '..' ) {
+                       $token = $this->newOperator( '..', $this->pos, 2 );
+                       $this->pos += 2;
+                       return $token;
+               }
+
+               // Word
+               if ( !preg_match( self::WORD_REGEX, $this->rule, $m, 0, $this->pos ) ) {
+                       $this->error( 'unexpected character "' . $this->rule[$this->pos] . '"'  );
+               }
+               $word1 = strtolower( $m[0] );
+               $word2 = '';
+               $nextTokenPos = $this->pos + strlen( $word1 );
+               if ( $word1 === 'not' || $word1 === 'is' ) {
+                       // Look ahead one word
+                       $nextTokenPos += strspn( $this->rule, self::WHITESPACE_CLASS, $nextTokenPos );
+                       if ( $nextTokenPos < $this->end
+                                       && preg_match( self::WORD_REGEX, $this->rule, $m, 0, $nextTokenPos ) )
+                       {
+                               $word2 = strtolower( $m[0] );
+                               $nextTokenPos += strlen( $word2 );
+                       }
+               }
+
+               // Two-word operators like "is not" take precedence over single-word operators like "is"
+               if ( $word2 !== '' ) {
+                       $bothWords = "{$word1}-{$word2}";
+                       if ( isset( self::$precedence[$bothWords] ) ) {
+                               $token = $this->newOperator( $bothWords, $this->pos, $nextTokenPos - $this->pos );
+                               $this->pos = $nextTokenPos;
+                               return $token;
+                       }
+               }
+
+               // Single-word operators
+               if ( isset( self::$precedence[$word1] ) ) {
+                       $token = $this->newOperator( $word1, $this->pos, strlen( $word1 ) );
+                       $this->pos += strlen( $word1 );
+                       return $token;
+               }
+
+               // The special numerical keyword "n"
+               if ( $word1 === 'n' ) {
+                       $token = $this->newNumber( 'n', $this->pos );
+                       $this->pos ++;
+                       return $token;
+               }
+
+               $this->error( 'unrecognised word' );
+       }
+
+       /**
+        * For the binary operator $op, pop its operands off the stack and push
+        * a fragment with rpn and type members describing the result of that
+        * operation.
+        */
+       protected function doOperation( $op ) {
+               if ( count( $this->operands ) < 2 ) {
+                       $op->error( 'missing operand' );
+               }
+               $right = array_pop( $this->operands );
+               $left = array_pop( $this->operands );
+               $result = $op->operate( $left, $right );
+               $this->operands[] = $result;
+       }
+
+       /**
+        * Create a numerical expression object
+        */
+       protected function newNumber( $text, $pos ) {
+               return new CLDRPluralRuleConverter_Expression( $this, 'number', $text, $pos, strlen( $text ) );
+       }
+
+       /**
+        * Create a binary operator
+        */
+       protected function newOperator( $type, $pos, $length ) {
+               return new CLDRPluralRuleConverter_Operator( $this, $type, $pos, $length );
+       }
+
+       /**
+        * Throw an error
+        */
+       protected function error( $message ) {
+               throw new CLDRPluralRuleError( $message );
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * The base class for operators and expressions, describing a region of the input string.
+ */
+class CLDRPluralRuleConverter_Fragment {
+       public $parser, $pos, $length, $end;
+
+       function __construct( $parser, $pos, $length ) {
+               $this->parser = $parser;
+               $this->pos = $pos;
+               $this->length = $length;
+               $this->end = $pos + $length;
+       }
+
+       public function error( $message ) {
+               $text = $this->getText();
+               throw new CLDRPluralRuleError( "$message at position " . ( $this->pos + 1 ) . ": \"$text\"" );
+       }
+
+       public function getText() {
+               return substr( $this->parser->rule, $this->pos, $this->length );
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * An expression object, representing a region of the input string (for error
+ * messages), the RPN notation used to evaluate it, and the result type for
+ * validation.
+ */
+class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragment {
+       public $type, $rpn;
+
+       function __construct( $parser, $type, $rpn, $pos, $length ) {
+               parent::__construct( $parser, $pos, $length );
+               $this->type = $type;
+               $this->rpn = $rpn;
+       }
+
+       public function isType( $type ) {
+               if ( $type === 'range' && ( $this->type === 'range' || $this->type === 'number' ) ) {
+                       return true;
+               }
+               if ( $type === $this->type ) {
+                       return true;
+               }
+               return false;
+       }
+}
+
+/**
+ * Helper for CLDRPluralRuleConverter.
+ * An operator object, representing a region of the input string (for error
+ * messages), and the binary operator at that location.
+ */
+class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
+       public $name;
+
+       /**
+        * Each op type has three characters: left operand type, right operand type and result type
+        *
+        *   b = boolean
+        *   n = number
+        *   r = range
+        *
+        * A number is a kind of range.
+        */
+       static $opTypes = array(
+               'or' => 'bbb',
+               'and' => 'bbb',
+               'is' => 'nnb',
+               'is-not' => 'nnb',
+               'in' => 'nrb',
+               'not-in' => 'nrb',
+               'within' => 'nrb',
+               'not-within' => 'nrb',
+               'mod' => 'nnn',
+               ',' => 'rrr',
+               '..' => 'nnr',
+       );
+
+       /**
+        * Map converting from the abbrevation to the full form.
+        */
+       static $typeSpecMap = array(
+               'b' => 'boolean',
+               'n' => 'number',
+               'r' => 'range',
+       );
+
+       function __construct( $parser, $name, $pos, $length ) {
+               parent::__construct( $parser, $pos, $length );
+               $this->name = $name;
+       }
+
+       public function operate( $left, $right ) {
+               $typeSpec = self::$opTypes[$this->name];
+
+               $leftType = self::$typeSpecMap[$typeSpec[0]];
+               $rightType = self::$typeSpecMap[$typeSpec[1]];
+               $resultType = self::$typeSpecMap[$typeSpec[2]];
+
+               $start = min( $this->pos, $left->pos, $right->pos );
+               $end = max( $this->end, $left->end, $right->end );
+               $length = $end - $start;
+
+               $newExpr = new CLDRPluralRuleConverter_Expression( $this->parser, $resultType,
+                       "{$left->rpn} {$right->rpn} {$this->name}",
+                       $start, $length );
+
+               if ( !$left->isType( $leftType ) ) {
+                       $newExpr->error( "invalid type for left operand: expected $leftType, got {$left->type}" );
+               }
+
+               if ( !$right->isType( $rightType ) ) {
+                       $newExpr->error( "invalid type for right operand: expected $rightType, got {$right->type}" );
+               }
+               return $newExpr;
+       }
+}
+
+/**
+ * The exception class for all the classes in this file. This will be thrown
+ * back to the caller if there is any validation error.
+ */
+class CLDRPluralRuleError extends MWException {
+       function __construct( $message ) {
+               parent::__construct( 'CLDR plural rule error: ' . $message );
+       }
+}
index 4c72080..f363c3f 100644 (file)
--- a/load.php
+++ b/load.php
@@ -24,6 +24,7 @@
 
 // Bail if PHP is too low
 if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'load.php' );
 }
@@ -31,7 +32,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 wfProfileIn( 'load.php' );
index b60a196..e3ba4e5 100644 (file)
@@ -5,7 +5,6 @@
 # {{OUTPUT_DIRECTORY}}
 # {{CURRENT_VERSION}}
 # {{STRIP_FROM_PATH}}
-# {{SVNSTAT}}
 # {{INPUT}}
 #
 # To generate documentation run: php mwdocgen.php --no-extensions
@@ -114,7 +113,7 @@ SHOW_USED_FILES        = YES
 SHOW_DIRECTORIES       = YES
 SHOW_FILES             = YES
 SHOW_NAMESPACES        = NO
-FILE_VERSION_FILTER    = {{SVNSTAT}}
+FILE_VERSION_FILTER    =
 LAYOUT_FILE            =
 CITE_BIB_FILES         =
 #---------------------------------------------------------------------------
@@ -174,7 +173,6 @@ FILE_PATTERNS          = *.c \
                          *.MM \
                          *.PY
 RECURSIVE              = YES
-EXCLUDE                = {{EXCLUDE}}
 EXCLUDE_SYMLINKS       = YES
 EXCLUDE_PATTERNS       = LocalSettings.php AdminSettings.php StartProfiler.php .svn */.git/* {{EXCLUDE_PATTERNS}}
 EXCLUDE_SYMBOLS        =
index cec1270..ea649a6 100644 (file)
  * @defgroup Maintenance Maintenance
  */
 
+// Make sure we're on PHP5.3.2 or better
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
+       // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
+       require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+       wfPHPVersionError( 'cli' );
+}
+
 /**
  * @defgroup MaintenanceArchive Maintenance archives
  * @ingroup Maintenance
  */
 
 // Define this so scripts can easily find doMaintenance.php
-define( 'RUN_MAINTENANCE_IF_MAIN', dirname( __FILE__ ) . '/doMaintenance.php' );
+define( 'RUN_MAINTENANCE_IF_MAIN', __DIR__ . '/doMaintenance.php' );
 define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
 
 $maintClass = false;
 
-// Make sure we're on PHP5 or better
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
-       require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
-       wfPHPVersionError( 'cli' );
-}
-
 /**
  * Abstract maintenance class for quickly writing and churning out
  * maintenance scripts with minimal effort. All that _must_ be defined
@@ -123,7 +124,7 @@ abstract class Maintenance {
                global $IP;
                $IP = strval( getenv( 'MW_INSTALL_PATH' ) ) !== ''
                        ? getenv( 'MW_INSTALL_PATH' )
-                       : realpath( dirname( __FILE__ ) . '/..' );
+                       : realpath( __DIR__ . '/..' );
 
                $this->addDefaultParams();
                register_shutdown_function( array( $this, 'outputChanneled' ), false );
@@ -481,19 +482,11 @@ abstract class Maintenance {
                        $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true );
                }
 
-               if ( version_compare( phpversion(), '5.2.4' ) >= 0 ) {
-                       // Send PHP warnings and errors to stderr instead of stdout.
-                       // This aids in diagnosing problems, while keeping messages
-                       // out of redirected output.
-                       if ( ini_get( 'display_errors' ) ) {
-                               ini_set( 'display_errors', 'stderr' );
-                       }
-
-                       // Don't touch the setting on earlier versions of PHP,
-                       // as setting it would disable output if you'd wanted it.
-
-                       // Note that exceptions are also sent to stderr when
-                       // command-line mode is on, regardless of PHP version.
+               // Send PHP warnings and errors to stderr instead of stdout.
+               // This aids in diagnosing problems, while keeping messages
+               // out of redirected output.
+               if ( ini_get( 'display_errors' ) ) {
+                       ini_set( 'display_errors', 'stderr' );
                }
 
                $this->loadParamsAndArgs();
@@ -988,7 +981,7 @@ abstract class Maintenance {
         * @return string
         */
        protected function getDir() {
-               return dirname( __FILE__ );
+               return __DIR__;
        }
 
        /**
@@ -1009,9 +1002,9 @@ abstract class Maintenance {
        protected static function getCoreScripts() {
                if ( !self::$mCoreScripts ) {
                        $paths = array(
-                               dirname( __FILE__ ),
-                               dirname( __FILE__ ) . '/language',
-                               dirname( __FILE__ ) . '/storage',
+                               __DIR__,
+                               __DIR__ . '/language',
+                               __DIR__ . '/storage',
                        );
                        self::$mCoreScripts = array();
                        foreach ( $paths as $p ) {
@@ -1067,7 +1060,7 @@ abstract class Maintenance {
         */
        private function lockSearchindex( &$db ) {
                $write = array( 'searchindex' );
-               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache' );
+               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache', 'user' );
                $db->lockTables( $read, $write, __CLASS__ . '::' . __METHOD__ );
        }
 
@@ -1143,7 +1136,8 @@ abstract class Maintenance {
                        $title = $titleObj->getPrefixedDBkey();
                        $this->output( "$title..." );
                        # Update searchindex
-                       $u = new SearchUpdate( $pageId, $titleObj->getText(), $rev->getText() );
+                       # TODO: pass the Content object to SearchUpdate, let the search engine decide how to deal with it.
+                       $u = new SearchUpdate( $pageId, $titleObj->getText(), $rev->getContent()->getTextForSearchIndex() );
                        $u->doUpdate();
                        $this->output( "\n" );
                }
diff --git a/maintenance/archives/patch-archive-ar_content_format.sql b/maintenance/archives/patch-archive-ar_content_format.sql
new file mode 100644 (file)
index 0000000..81f9fca
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD ar_content_format varbinary(64) DEFAULT NULL;
diff --git a/maintenance/archives/patch-archive-ar_content_model.sql b/maintenance/archives/patch-archive-ar_content_model.sql
new file mode 100644 (file)
index 0000000..1a8b630
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD ar_content_model varbinary(32) DEFAULT NULL;
diff --git a/maintenance/archives/patch-cat_hidden.sql b/maintenance/archives/patch-cat_hidden.sql
new file mode 100644 (file)
index 0000000..933188c
--- /dev/null
@@ -0,0 +1,3 @@
+-- cat_hidden is no longer used, delete it
+
+ALTER TABLE /*$wgDBprefix*/category DROP COLUMN cat_hidden;
diff --git a/maintenance/archives/patch-drop-ss_admins.sql b/maintenance/archives/patch-drop-ss_admins.sql
new file mode 100644 (file)
index 0000000..13c3d3b
--- /dev/null
@@ -0,0 +1,2 @@
+-- field is deprecated and no longer updated as of 1.5
+ALTER TABLE /*_*/site_stats DROP COLUMN ss_admins;
\ No newline at end of file
index 35950f5..0a375c4 100644 (file)
@@ -1,8 +1,8 @@
 -- Add img_sha1, oi_sha1 and related indexes
 ALTER TABLE /*$wgDBprefix*/image
   ADD COLUMN img_sha1 varbinary(32) NOT NULL default '',
-  ADD INDEX img_sha1 (img_sha1);
+  ADD INDEX img_sha1 (img_sha1(10));
 
 ALTER TABLE /*$wgDBprefix*/oldimage
   ADD COLUMN oi_sha1 varbinary(32) NOT NULL default '',
-  ADD INDEX oi_sha1 (oi_sha1);
+  ADD INDEX oi_sha1 (oi_sha1(10));
diff --git a/maintenance/archives/patch-page-page_content_model.sql b/maintenance/archives/patch-page-page_content_model.sql
new file mode 100644 (file)
index 0000000..30434d9
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/page
+  ADD page_content_model varbinary(32) DEFAULT NULL;
diff --git a/maintenance/archives/patch-rc_moved.sql b/maintenance/archives/patch-rc_moved.sql
new file mode 100644 (file)
index 0000000..2fa1de6
--- /dev/null
@@ -0,0 +1,4 @@
+-- rc_moved_to_ns and rc_moved_to_title is no longer used, delete the fields
+
+ALTER TABLE /*$wgDBprefix*/recentchanges DROP COLUMN rc_moved_to_ns,
+                                         DROP COLUMN rc_moved_to_title;
diff --git a/maintenance/archives/patch-revision-rev_content_format.sql b/maintenance/archives/patch-revision-rev_content_format.sql
new file mode 100644 (file)
index 0000000..22aeb8a
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_content_format varbinary(64) DEFAULT NULL;
diff --git a/maintenance/archives/patch-revision-rev_content_model.sql b/maintenance/archives/patch-revision-rev_content_model.sql
new file mode 100644 (file)
index 0000000..1ba0572
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_content_model varbinary(32) DEFAULT NULL;
index 1765bd9..a957957 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Replication-safe online upgrade script for log_id/log_deleted
+ * Replication-safe online upgrade for log_id/log_deleted fields.
  *
  * 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
  * @ingroup MaintenanceArchive
  */
 
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
+/**
+ * Maintenance script that upgrade for log_id/log_deleted fields in a
+ * replication-safe way.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateLogging {
 
        /**
         * @var DatabaseBase
         */
-       var $dbw;
-       var $batchSize = 1000;
-       var $minTs = false;
+       public $dbw;
+       public $batchSize = 1000;
+       public $minTs = false;
 
        function execute() {
                $this->dbw = wfGetDB( DB_MASTER );
@@ -63,21 +69,21 @@ CREATE TABLE $logging_1_10 (
   -- action field, but only the type controls categorization.
   log_type varbinary(10) NOT NULL default '',
   log_action varbinary(10) NOT NULL default '',
-  
+
   -- Timestamp. Duh.
   log_timestamp binary(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,
 
@@ -124,7 +130,7 @@ EOT;
                $minTs = $this->dbw->selectField( $srcTable, 'MIN(log_timestamp)', false, __METHOD__ );
                $minTsUnix = wfTimestamp( TS_UNIX, $minTs );
                $numRowsCopied = 0;
-               
+
                while ( true ) {
                        $maxTs = $this->dbw->selectField( $srcTable, 'MAX(log_timestamp)', false, __METHOD__ );
                        $copyPos = $this->dbw->selectField( $dstTable, 'MAX(log_timestamp)', false, __METHOD__ );
@@ -137,7 +143,7 @@ EOT;
                                $percent = ( $copyPosUnix - $minTsUnix ) / ( $maxTsUnix - $minTsUnix ) * 100;
                        }
                        printf( "%s  %.2f%%\n", $copyPos, $percent );
-                       
+
                        # Handle all entries with timestamp equal to $copyPos
                        if ( $copyPos !== null ) {
                                $numRowsCopied += $this->copyExactMatch( $srcTable, $dstTable, $copyPos );
index 78cae8c..475cafc 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to correct wrong values in the `page_latest` field
index 04c65ba..e3dc488 100644 (file)
@@ -259,7 +259,7 @@ class BackupDumper {
                        $dbr = wfGetDB( DB_SLAVE );
                }
                $this->maxCount = $dbr->selectField( $table, "MAX($field)", '', __METHOD__ );
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->lastTime = $this->startTime;
                $this->ID = getmypid();
        }
@@ -328,9 +328,9 @@ class BackupDumper {
        function showReport() {
                if ( $this->reporting ) {
                        $now = wfTimestamp( TS_DB );
-                       $nowts = wfTime();
-                       $deltaAll = wfTime() - $this->startTime;
-                       $deltaPart = wfTime() - $this->lastTime;
+                       $nowts = microtime( true );
+                       $deltaAll = $nowts - $this->startTime;
+                       $deltaPart = $nowts - $this->lastTime;
                        $this->pageCountPart = $this->pageCount - $this->pageCountLast;
                        $this->revCountPart = $this->revCount - $this->revCountLast;
 
index 3ca3025..81e61b7 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/backup.inc' );
+require_once( __DIR__ . '/backup.inc' );
 
 /**
  * @ingroup Maintenance
@@ -169,7 +169,7 @@ class TextPassDumper extends BackupDumper {
                $this->xmlwriterobj = new XmlDumpWriter();
 
                $input = fopen( $this->input, "rt" );
-               $result = $this->readDump( $input );
+               $this->readDump( $input );
 
                if ( $this->spawnProc ) {
                        $this->closeSpawn();
@@ -247,9 +247,9 @@ class TextPassDumper extends BackupDumper {
 
                if ( $this->reporting ) {
                        $now = wfTimestamp( TS_DB );
-                       $nowts = wfTime();
-                       $deltaAll = wfTime() - $this->startTime;
-                       $deltaPart = wfTime() - $this->lastTime;
+                       $nowts = microtime( true );
+                       $deltaAll = $nowts - $this->startTime;
+                       $deltaPart = $nowts - $this->lastTime;
                        $this->pageCountPart = $this->pageCount - $this->pageCountLast;
                        $this->revCountPart = $this->revCount - $this->revCountLast;
 
index 0056c3c..c198e0f 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 /**
- * Create a doxygen subgroup of Maintenance for benchmarks
+ * Base code for benchmark scripts.
  *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
+
+/**
+ * Base class for benchmark scripts.
+ *
+ * @ingroup Benchmark
+ */
 abstract class Benchmarker extends Maintenance {
        private $results;
 
@@ -47,11 +53,11 @@ abstract class Benchmarker extends Maintenance {
                        }
 
                        $bench_number++;
-                       $start = wfTime();
+                       $start = microtime( true );
                        for( $i=0; $i<$count; $i++ ) {
                                call_user_func_array( $bench['function'], $bench['args'] );
                        }
-                       $delta = wfTime() - $start;
+                       $delta = microtime( true ) - $start;
 
                        // function passed as a callback
                        if( is_array( $bench['function'] ) ) {
@@ -61,7 +67,7 @@ abstract class Benchmarker extends Maintenance {
 
                        $this->results[$bench_number] = array(
                                'function'  => $bench['function'],
-                               'arguments' => $bench['args'], 
+                               'arguments' => $bench['args'],
                                'count'     => $count,
                                'delta'     => $delta,
                                'average'   => $delta / $count,
index cf62aad..fa76ae2 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
- * This come from r75429 message
+ * Benchmark HTTP request vs HTTPS request.
+ *
+ * This come from r75429 message.
  *
  * 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  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmarks HTTP request vs HTTPS request.
+ *
+ * @ingroup Benchmark
+ */
 class bench_HTTP_HTTPS extends Benchmarker {
 
        public function __construct() {
index 7138552..d974149 100644 (file)
@@ -1,11 +1,33 @@
 <?php
 /**
+ * Benchmark SQL DELETE vs SQL TRUNCATE.
+ *
+ * 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
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks SQL DELETE vs SQL TRUNCATE.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkDeleteTruncate extends Benchmarker {
 
        public function __construct() {
@@ -24,24 +46,24 @@ class BenchmarkDeleteTruncate extends Benchmarker {
 
                $this->insertData( $dbw );
 
-               $start = wfTime();
+               $start = microtime( true );
 
                $this->delete( $dbw );
 
-               $end = wfTime();
+               $end = microtime( true );
 
-               echo "Delete: " . $end - $start;
+               echo "Delete: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
                echo "\r\n";
 
                $this->insertData( $dbw );
 
-               $start = wfTime();
+               $start = microtime( true );
 
                $this->truncate( $dbw );
 
-               $end = wfTime();
+               $end = microtime( true );
 
-               echo "Truncate: " . $end - $start;
+               echo "Truncate: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
                echo "\r\n";
 
                $dbw->dropTable( 'test' );
index dafce05..1f590d4 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Benchmark if elseif... versus switch case.
+ *
  * This come from r75429 message
  *
  * This program is free software; you can redistribute it and/or modify
  * @author  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmark if elseif... versus switch case.
+ *
+ * @ingroup Maintenance
+ */
 class bench_if_switch extends Benchmarker {
 
        public function __construct() {
index 73ace2b..9fa7c8e 100644 (file)
@@ -1,10 +1,29 @@
 <?php
 /**
+ * Benchmark for strtr() vs str_replace().
+ *
+ * This come from r75429 message.
+ *
+ * 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
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
 function bfNormalizeTitleStrTr( $str ) {
     return strtr( $str, '_', ' ' );
@@ -14,6 +33,11 @@ function bfNormalizeTitleStrReplace( $str ) {
     return str_replace( '_', ' ', $str );
 }
 
+/**
+ * Maintenance script that benchmarks for strtr() vs str_replace().
+ *
+ * @ingroup Benchmark
+ */
 class bench_strtr_str_replace extends Benchmarker {
 
        public function __construct() {
index 2e4b902..f598780 100644 (file)
@@ -1,22 +1,41 @@
 <?php
-/**\r
- * @file\r
- * @ingroup Benchmark\r
- */\r
-\r
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );\r
+/**
+ * Benchmark for using a regexp vs. mb_check_encoding to check for UTF-8 encoding.
+ *
+ * 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
+ */
+
+require_once( __DIR__ . '/Benchmarker.php' );
 
 /**
- * This little benchmark executes the regexp used in Language->checkTitleEncoding() and compares its execution time
- * against that of mb_check_encoding, if available.
- */\r
+ * This little benchmark executes the regexp used in Language->checkTitleEncoding()
+ * and compares its execution time against that of mb_check_encoding, if available.
+ *
+ * @ingroup Benchmark
+ */
 class bench_utf8_title_check extends Benchmarker {
 
        private $canRun;
 
        private $data;
 
-       public function __construct() {\r
+       public function __construct() {
                parent::__construct();
 
                $this->data = array (
@@ -43,14 +62,14 @@ class bench_utf8_title_check extends Benchmarker {
 
                $this->canRun = function_exists ( 'mb_check_encoding' );
 
-               if ( $this->canRun ) {\r
+               if ( $this->canRun ) {
                        $this->mDescription = "Benchmark for using a regexp vs. mb_check_encoding to check for UTF-8 encoding.";
                        mb_internal_encoding( 'UTF-8' );
                } else {
                        $this->mDescription = "CANNOT RUN benchmark using mb_check_encoding: function not available.";
-               }\r
-       }\r
-\r
+               }
+       }
+
        public function execute() {
                if ( !$this->canRun ) {
                        return;
@@ -69,22 +88,22 @@ class bench_utf8_title_check extends Benchmarker {
                                'function' => array( $this, 'use_regexp_once_only' ),
                                'args' => array( rawurldecode ( $val ) )
                        );
-                       $benchmarks[] = array(\r
-                               'function' => array( $this, 'use_mb_check_encoding' ),\r
-                               'args' => array( rawurldecode ( $val ) )\r
+                       $benchmarks[] = array(
+                               'function' => array( $this, 'use_mb_check_encoding' ),
+                               'args' => array( rawurldecode ( $val ) )
                        );
-               }\r
+               }
                $this->bench( $benchmarks );
-               print $this->getFormattedResults();\r
-       }\r
+               print $this->getFormattedResults();
+       }
 
        private $isutf8;
-\r
+
        function use_regexp( $s ) {
                $this->isutf8 = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
-                               '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );\r
-       }\r
-\r
+                               '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
+       }
+
        function use_regexp_non_capturing( $s ) {
                // Same as above with a non-capturing subgroup.
                $this->isutf8 = preg_match( '/^(?:[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
@@ -97,11 +116,11 @@ class bench_utf8_title_check extends Benchmarker {
                                '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
        }
 
-       function use_mb_check_encoding( $s ) {\r
-               $this->isutf8 = mb_check_encoding( $s, 'UTF-8' );\r
-       }\r
-\r
-}\r
-\r
-$maintClass = 'bench_utf8_title_check';\r
-require_once( RUN_MAINTENANCE_IF_MAIN );\r
+       function use_mb_check_encoding( $s ) {
+               $this->isutf8 = mb_check_encoding( $s, 'UTF-8' );
+       }
+
+}
+
+$maintClass = 'bench_utf8_title_check';
+require_once( RUN_MAINTENANCE_IF_MAIN );
index 4caebc5..8543982 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
- * This come from r75429 message
+ * Benchmark for wfIsWindows().
+ *
+ * This come from r75429 message.
  *
  * 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  Platonides
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
+
+/**
+ * Maintenance script that benchmarks wfIsWindows().
+ *
+ * @ingroup Benchmark
+ */
 class bench_wfIsWindows extends Benchmarker {
 
        public function __construct() {
index 4ec2616..fdb016f 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Benchmark %MediaWiki hooks.
+ *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks %MediaWiki hooks.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkHooks extends Benchmarker {
 
        public function __construct() {
@@ -58,14 +65,14 @@ class BenchmarkHooks extends Benchmarker {
         * @return string
         */
        private function benchHooks( $trials = 10 ) {
-               $start = wfTime();
+               $start = microtime( true );
                for ( $i = 0; $i < $trials; $i++ ) {
                        wfRunHooks( 'Test' );
                }
-               $delta = wfTime() - $start;
+               $delta = microtime( true ) - $start;
                $pertrial = $delta / $trials;
-               return sprintf( "Took %6.2fs",
-                       $pertrial );
+               return sprintf( "Took %6.3fms",
+                       $pertrial * 1000 );
        }
 
        /**
index e9d2ec7..ec686b2 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Squid purge benchmark script
+ * Benchmark for Squid purge.
  *
  * 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
  * @ingroup Benchmark
  */
 
-require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+require_once( __DIR__ . '/Benchmarker.php' );
 
+/**
+ * Maintenance script that benchmarks Squid purge.
+ *
+ * @ingroup Benchmark
+ */
 class BenchmarkPurge extends Benchmarker {
 
        public function __construct() {
@@ -57,11 +62,11 @@ class BenchmarkPurge extends Benchmarker {
         * @return string
         */
        private function benchSquid( $urls, $trials = 1 ) {
-               $start = wfTime();
+               $start = microtime( true );
                for ( $i = 0; $i < $trials; $i++ ) {
                        SquidUpdate::purge( $urls );
                }
-               $delta = wfTime() - $start;
+               $delta = microtime( true ) - $start;
                $pertrial = $delta / $trials;
                $pertitle = $pertrial / count( $urls );
                return sprintf( "%4d titles in %6.2fms (%6.2fms each)",
index 270f7a6..c06c2cd 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 /** */
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 function cdbShowHelp( $command ) {
        $commandList = array(
index e4063f9..f276fc1 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to change the password of a given user.
index ea6c09f..8d0e442 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check classes definitions in the autoloader.
index f8b8955..4ba7e66 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check that pages marked as being redirects really are.
@@ -50,7 +50,7 @@ class CheckBadRedirects extends Maintenance {
                        $title = Title::makeTitle( $row->page_namespace, $row->page_title );
                        $rev = Revision::newFromId( $row->page_latest );
                        if ( $rev ) {
-                               $target = Title::newFromRedirect( $rev->getText() );
+                               $target = $rev->getContent()->getRedirectTarget();
                                if ( !$target ) {
                                        $this->output( $title->getPrefixedText() . "\n" );
                                }
index d7463ec..c05d915 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  * @ingroup Maintenance
  */
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check images to see if they exist, are readable, etc.
index 3019b84..0a22f58 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check syntax of all PHP files in MediaWiki.
index 6a9294a..dd5e002 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to check that database usernames are actually valid.
index d449d6c..dbc2e0d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to cleans up old database tables, dropping old indexes
index b61f6ff..ec2aa95 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken page links when somebody turns on $wgCapitalLinks.
index 2beed72..4e7b937 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken, unparseable upload filenames.
index 706f87f..f37af77 100755 (executable)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance\r
  */\r
 \r
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );\r
+require_once( __DIR__ . '/Maintenance.php' );\r
 \r
 /**\r
  * Maintenance script that removes hidden preferences from the database.\r
index b339bfc..2085da9 100644 (file)
@@ -22,7 +22,7 @@
  * @author Roan Kattouw
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove cache entries for removed ResourceLoader modules
index 2051c89..9838569 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to cleanup all spam from a given hostname.
@@ -103,7 +103,8 @@ class CleanupSpam extends Maintenance {
                $rev = Revision::newFromTitle( $title );
                $currentRevId = $rev->getId();
 
-               while ( $rev && ( $rev->isDeleted( Revision::DELETED_TEXT ) || LinkFilter::matchEntry( $rev->getText() , $domain ) ) ) {
+               while ( $rev && ( $rev->isDeleted( Revision::DELETED_TEXT )
+                                               || LinkFilter::matchEntry( $rev->getContent( Revision::RAW ), $domain ) ) ) {
                        $rev = $rev->getPrevious();
                }
 
@@ -117,8 +118,10 @@ class CleanupSpam extends Maintenance {
                        $page = WikiPage::factory( $title );
                        if ( $rev ) {
                                // Revert to this revision
+                               $content = $rev->getContent( Revision::RAW );
+
                                $this->output( "reverting\n" );
-                               $page->doEdit( $rev->getText(), wfMessage( 'spam_reverting', $domain )->inContentLanguage()->text(),
+                               $page->doEditContent( $content, wfMessage( 'spam_reverting', $domain )->inContentLanguage()->text(),
                                        EDIT_UPDATE, $rev->getId() );
                        } elseif ( $this->hasOption( 'delete' ) ) {
                                // Didn't find a non-spammy revision, blank the page
@@ -126,8 +129,11 @@ class CleanupSpam extends Maintenance {
                                $page->doDeleteArticle( wfMessage( 'spam_deleting', $domain )->inContentLanguage()->text() );
                        } else {
                                // Didn't find a non-spammy revision, blank the page
+                               $handler = ContentHandler::getForTitle( $title );
+                               $content = $handler->makeEmptyContent();
+
                                $this->output( "blanking\n" );
-                               $page->doEdit( '', wfMessage( 'spam_blanking', $domain )->inContentLanguage()->text() );
+                               $page->doEditContent( $content, wfMessage( 'spam_blanking', $domain )->inContentLanguage()->text() );
                        }
                        $dbw->commit( __METHOD__ );
                }
index 898bdf4..57acfd8 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Generic class to cleanup a database table. Already subclasses Maintenance.
@@ -62,7 +62,7 @@ class TableCleanup extends Maintenance {
                $this->processed = 0;
                $this->updated = 0;
                $this->count = $count;
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->table = $table;
        }
 
@@ -75,7 +75,7 @@ class TableCleanup extends Maintenance {
                $portion = $this->processed / $this->count;
                $updateRate = $this->updated / $this->processed;
 
-               $now = wfTime();
+               $now = microtime( true );
                $delta = $now - $this->startTime;
                $estimatedTotalTime = $delta / $portion;
                $eta = $this->startTime + $estimatedTotalTime;
index a2dc3a3..ad2577a 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to clean up broken, unparseable titles.
index 32377b6..6afe9e1 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove old or broken uploads from temporary uploaded
@@ -41,18 +41,20 @@ class UploadStashCleanup extends Maintenance {
        }
 
        public function execute() {
+               global $wgUploadStashMaxAge;
+
                $repo = RepoGroup::singleton()->getLocalRepo();
 
                $dbr = $repo->getSlaveDb();
 
                // how far back should this look for files to delete?
-               global $wgUploadStashMaxAge;
+               $cutoff = time() - $wgUploadStashMaxAge;
 
                $this->output( "Getting list of files to clean up...\n" );
                $res = $dbr->select(
                        'uploadstash',
                        'us_key',
-                       'us_timestamp < ' . $dbr->addQuotes( $dbr->timestamp( time() - $wgUploadStashMaxAge ) ),
+                       'us_timestamp < ' . $dbr->addQuotes( $dbr->timestamp( $cutoff ) ),
                        __METHOD__
                );
 
@@ -82,6 +84,24 @@ class UploadStashCleanup extends Maintenance {
                                $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" );
+
+               $tempRepo = $repo->getTempRepo();
+               $dir      = $tempRepo->getZonePath( 'thumb' );
+               $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
+
+               $this->output( "Deleting old thumbnails...\n" );
+               $i = 0;
+               foreach ( $iterator as $file ) {
+                       if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
+                               $tempRepo->quickPurge( "$dir/$file" );
                        }
                        if ( $i % 100 == 0 ) {
                                $this->output( "$i\n" );
index 840337c..fbab6a3 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
+require_once( __DIR__ . '/cleanupTable.inc' );
 
 /**
  * Maintenance script to remove broken, unparseable titles in the watchlist table.
index 638a475..88769df 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to clear the cache of interwiki prefixes for all local wikis.
index 2ed5a67..4581d53 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove all statistics tracking from the cache.
index c7adbfb..86a558d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 global $optionsWithArgs;
 if ( !isset( $optionsWithArgs ) ) {
index 9d7f5c7..1f3ac1c 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
+require_once( __DIR__ . '/dumpIterator.php' );
 
 /**
  * Maintenance script to take page text out of an XML dump file and render
@@ -114,15 +114,24 @@ class CompareParsers extends DumpIterator {
                $parser1 = new $parser1Name();
                $parser2 = new $parser2Name();
 
-               $output1 = $parser1->parse( $rev->getText(), $title, $this->options );
-               $output2 = $parser2->parse( $rev->getText(), $title, $this->options );
+               $content = $rev->getContent();
+
+               if ( $content->getModel() !== CONTENT_MODEL_WIKITEXT ) {
+                       $this->error( "Page {$title->getPrefixedText()} does not contain wikitext but {$content->getModel()}\n" );
+                       return;
+               }
+
+               $text = strval( $content->getNativeData() );
+
+               $output1 = $parser1->parse( $text, $title, $this->options );
+               $output2 = $parser2->parse( $text, $title, $this->options );
 
                if ( $output1->getText() != $output2->getText() ) {
                        $this->failed++;
                        $this->error( "Parsing for {$title->getPrefixedText()} differs\n" );
 
                        if ( $this->saveFailed ) {
-                               file_put_contents( $this->saveFailed . '/' . rawurlencode( $title->getPrefixedText() ) . ".txt", $rev->getText());
+                               file_put_contents( $this->saveFailed . '/' . rawurlencode( $title->getPrefixedText() ) . ".txt", $text );
                        }
                        if ( $this->showDiff ) {
                                $this->output( wfDiff( $this->stripParameters( $output1->getText() ), $this->stripParameters( $output2->getText() ), '' ) );
index 275d8fa..5f7b02e 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to convert from the old links schema (string->ID)
index e666b65..7c9ca26 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to convert user options to the new `user_properties` table.
index 2363d40..aebdee1 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Copy all files in one container of one backend to another.
index 3f328f9..ad5333f 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to create an account and grant it administrator rights.
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 8709ee8..85ffc23 100644 (file)
@@ -24,8 +24,8 @@
  * @author Aaron Schulz
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/deleteArchivedFiles.inc' );
+require_once( __DIR__ . '/Maintenance.php' );
+require_once( __DIR__ . '/deleteArchivedFiles.inc' );
 
 /**
  * Maintenance script to delete archived (non-current) files from the database.
index 353661a..4b658bb 100644 (file)
@@ -24,8 +24,8 @@
  * @author Aaron Schulz
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/deleteArchivedRevisions.inc' );
+require_once( __DIR__ . '/Maintenance.php' );
+require_once( __DIR__ . '/deleteArchivedRevisions.inc' );
 
 /**
  * Maintenance script to delete archived (deleted from public) revisions
index 6860a5a..936a52b 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to delete a batch of pages.
index 540d225..4ab6d1d 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes all pages in the MediaWiki namespace
index 2029b57..3c8c5fd 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes image information from the object cache.
index 45a6b34..6a3e211 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes old (non-current) revisions from the database.
index 13b9c91..5dc7567 100644 (file)
@@ -24,7 +24,7 @@
  * @todo More efficient cleanup of text records
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes revisions which refer to a nonexisting page.
index fe3b515..ad6470d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes one or more revisions by moving them
index 162dcb4..da220d6 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that deletes self-references to $wgServer
index 95bb1fa..ac96f45 100644 (file)
@@ -1,7 +1,25 @@
 <?php
-
-# Router for the php cli-server built-in webserver
-# http://ca2.php.net/manual/en/features.commandline.webserver.php
+/**
+ * Router for the php cli-server built-in webserver.
+ * http://www.php.net/manual/en/features.commandline.webserver.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
+ */
 
 if ( php_sapi_name() != 'cli-server' ) {
        die( "This script can only be run by php's cli-server sapi." );
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 4638468..c9546c6 100644 (file)
@@ -29,8 +29,8 @@ $originalDir = getcwd();
 
 $optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend');
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( dirname( __FILE__ ) . '/backup.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/backup.inc' );
 
 $dumper = new BackupDumper( $argv );
 
index 4c04d86..870d632 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Base class for interating over a dump.
@@ -62,7 +62,7 @@ abstract class DumpIterator extends Maintenance {
                        return;
                }
 
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                if ( $this->getOption('dump') == '-' ) {
                        $source = new ImportStreamSource( $this->getStdin() );
@@ -80,7 +80,7 @@ abstract class DumpIterator extends Maintenance {
 
                $this->conclusions();
 
-               $delta = wfTime() - $this->startTime;
+               $delta = microtime( true ) - $this->startTime;
                $this->error( "Done {$this->count} revisions in " . round($delta, 2) . " seconds " );
                if ($delta > 0)
                        $this->error( round($this->count / $delta, 2) . " pages/sec" );
@@ -168,7 +168,7 @@ class SearchDump extends DumpIterator {
         * @param $rev Revision
         */
        public function processRevision( $rev ) {
-               if ( preg_match( $this->getOption( 'regex' ), $rev->getText() ) ) {
+               if ( preg_match( $this->getOption( 'regex' ), $rev->getContent()->getTextForSearchIndex() ) ) {
                        $this->output( $rev->getTitle() . " matches at edit from " . $rev->getTimestamp() . "\n" );
                }
        }
index ad440e7..153fdd7 100644 (file)
@@ -30,7 +30,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a plaintext link dump.
index 5dbb5e2..e05e154 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a page name dump for SisterSites usage.
index 41a7a68..72d7d97 100644 (file)
@@ -26,8 +26,8 @@
 
 $originalDir = getcwd();
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( dirname( __FILE__ ) . '/backupTextPass.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/backupTextPass.inc' );
 
 
 $dumper = new TextPassDumper( $argv );
index b16b0c2..0d0dfcf 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to dump a the list of files uploaded,
index 13b3c49..ad4c12f 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to make a page edit.
@@ -68,10 +68,11 @@ class EditCLI extends Maintenance {
 
                # Read the text
                $text = $this->getStdin( Maintenance::STDIN_ALL );
+               $content = ContentHandler::makeContent( $text, $wgTitle );
 
                # Do the edit
                $this->output( "Saving... " );
-               $status = $page->doEdit( $text, $summary,
+               $status = $page->doEditContent( $content, $summary,
                        ( $minor ? EDIT_MINOR : 0 ) |
                        ( $bot ? EDIT_FORCE_BOT : 0 ) |
                        ( $autoSummary ? EDIT_AUTOSUMMARY : 0 ) |
index 3bd164f..5aefe1c 100644 (file)
@@ -34,7 +34,7 @@
 $optionsWithArgs = array( 'd' );
 
 /** */
-require_once( dirname( __FILE__ ) . "/commandLine.inc" );
+require_once( __DIR__ . "/commandLine.inc" );
 
 if ( isset( $options['d'] ) ) {
        $d = $options['d'];
index 2833081..a705bcc 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script used to fetch page text in a subprocess.
index 0f73e88..d98cfe3 100644 (file)
@@ -25,7 +25,7 @@ $initialTime = microtime( true );
 $wgProfiler = array( 'class' => 'ProfilerSimpleText' );
 error_reporting( E_ALL );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to test fileop performance.
@@ -40,7 +40,8 @@ class TestFileOpPerformance extends Maintenance {
                $this->addOption( 'b2', 'Backend 2', false, true );
                $this->addOption( 'srcdir', 'File source directory', true, true );
                $this->addOption( 'maxfiles', 'Max files', false, true );
-               $this->addOption( 'quick', 'Avoid operation pre-checks' );
+               $this->addOption( 'quick', 'Avoid operation pre-checks (use doQuickOperations())' );
+               $this->addOption( 'parallelize', '"parallelize" flag for doOperations()', false, true );
        }
 
        public function execute() {
@@ -95,8 +96,13 @@ class TestFileOpPerformance extends Maintenance {
 
                $method = $this->hasOption( 'quick' ) ? 'doQuickOperations' : 'doOperations';
 
+               $opts = array( 'force' => 1 );
+               if ( $this->hasOption( 'parallelize' ) ) {
+                       $opts['parallelize'] = ( $this->getOption( 'parallelize' ) === 'true' );
+               }
+
                $start = microtime( true );
-               $status = $backend->$method( $ops1, array( 'force' => 1 ) );
+               $status = $backend->$method( $ops1, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -105,7 +111,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Stored " . count( $ops1 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops2, array( 'force' => 1 ) );
+               $backend->$method( $ops2, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -114,7 +120,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Copied " . count( $ops2 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops3, array( 'force' => 1 ) );
+               $backend->$method( $ops3, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -123,7 +129,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Moved " . count( $ops3 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops4, array( 'force' => 1 ) );
+               $backend->$method( $ops4, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -132,7 +138,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Deleted " . count( $ops4 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops5, array( 'force' => 1 ) );
+               $backend->$method( $ops5, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
index e4fa5de..e273c54 100644 (file)
@@ -34,7 +34,7 @@
  * @author Antoine Musso <hashar at free dot fr>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that compares documented and actually present mismatches.
index e52c6c3..d808500 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes double redirects.
@@ -55,7 +55,12 @@ class FixDoubleRedirects extends Maintenance {
 
                $dbr = wfGetDB( DB_SLAVE );
 
-               $tables = array( 'redirect', 'pa' => 'page', 'pb' => 'page' );
+               // See also SpecialDoubleRedirects
+               $tables = array(
+                       'redirect',
+                       'pa' => 'page',
+                       'pb' => 'page',
+               );
                $fields = array(
                        'pa.page_namespace AS pa_namespace',
                        'pa.page_title AS pa_title',
@@ -66,6 +71,7 @@ class FixDoubleRedirects extends Maintenance {
                        'rd_from = pa.page_id',
                        'rd_namespace = pb.page_namespace',
                        'rd_title = pb.page_title',
+                       '(rd_interwiki IS NULL OR rd_interwiki = "")', // bug 40352
                        'pb.page_is_redirect' => 1,
                );
 
@@ -83,12 +89,18 @@ class FixDoubleRedirects extends Maintenance {
                }
 
                $jobs = array();
+               $processedTitles = "\n";
                $n = 0;
                foreach ( $res as $row ) {
                        $titleA = Title::makeTitle( $row->pa_namespace, $row->pa_title );
                        $titleB = Title::makeTitle( $row->pb_namespace, $row->pb_title );
 
-                       $job = new DoubleRedirectJob( $titleA, array( 'reason' => 'maintenance', 'redirTitle' => $titleB->getPrefixedDBkey() ) );
+                       $processedTitles .= "* [[$titleA]]\n";
+
+                       $job = new DoubleRedirectJob( $titleA, array(
+                               'reason' => 'maintenance',
+                               'redirTitle' => $titleB->getPrefixedDBkey()
+                       ) );
 
                        if ( !$async ) {
                                $success = ( $dryrun ? true : $job->run() );
@@ -112,7 +124,7 @@ class FixDoubleRedirects extends Maintenance {
                if ( count( $jobs ) ) {
                        $this->queueJobs( $jobs, $dryrun );
                }
-               $this->output( "$n double redirects processed.\n" );
+               $this->output( "$n double redirects processed" . $processedTitles . "\n" );
        }
 
        protected function queueJobs( $jobs, $dryrun = false ) {
index d247862..2403ec6 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes any entriy for protocol-relative URLs
index 126eed2..8bf556f 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes erroneous page_latest values
index 3a95251..84d08d3 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes timestamp corruption caused by one or
index 4eca396..91d42a5 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fixes the user_registration field.
index 474caab..600ca97 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) .'/Maintenance.php' );
+require_once( __DIR__ .'/Maintenance.php' );
 
 /**
  * Maintenance script that formats RELEASE-NOTE file to wiki text or HTML markup.
index 8f3b8e5..1c96a57 100644 (file)
@@ -181,7 +181,7 @@ TODO:
 // ///////////////////////// COMMAND LINE HELP ////////////////////////////////////
 
 // This is a command line script, load MediaWiki env (gives command line options);
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 // if the user asked for an explanation of command line options.
 if ( isset( $options["help"] ) ) {
index a81e3d9..adea97e 100644 (file)
@@ -26,7 +26,7 @@
  * @see http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that generates a sitemap for the site.
@@ -44,7 +44,7 @@ class GenerateSitemap extends Maintenance {
         *
         * @var int
         */
-       var $url_limit;
+       public $url_limit;
 
        /**
         * The maximum size of a sitemap file
@@ -53,77 +53,77 @@ class GenerateSitemap extends Maintenance {
         *
         * @var int
         */
-       var $size_limit;
+       public $size_limit;
 
        /**
         * The path to prepend to the filename
         *
         * @var string
         */
-       var $fspath;
+       public $fspath;
 
        /**
         * The URL path to prepend to filenames in the index; should resolve to the same directory as $fspath
         *
         * @var string
         */
-       var $urlpath;
+       public $urlpath;
 
        /**
         * Whether or not to use compression
         *
         * @var bool
         */
-       var $compress;
+       public $compress;
 
        /**
         * Whether or not to include redirection pages
         *
         * @var bool
         */
-       var $skipRedirects;
+       public $skipRedirects;
 
        /**
         * The number of entries to save in each sitemap file
         *
         * @var array
         */
-       var $limit = array();
+       public $limit = array();
 
        /**
         * Key => value entries of namespaces and their priorities
         *
         * @var array
         */
-       var $priorities = array();
+       public $priorities = array();
 
        /**
         * A one-dimensional array of namespaces in the wiki
         *
         * @var array
         */
-       var $namespaces = array();
+       public $namespaces = array();
 
        /**
         * When this sitemap batch was generated
         *
         * @var string
         */
-       var $timestamp;
+       public $timestamp;
 
        /**
         * A database slave object
         *
         * @var object
         */
-       var $dbr;
+       public $dbr;
 
        /**
         * A resource pointing to the sitemap index file
         *
         * @var resource
         */
-       var $findex;
+       public $findex;
 
 
        /**
@@ -131,7 +131,7 @@ class GenerateSitemap extends Maintenance {
         *
         * @var resource
         */
-       var $file;
+       public $file;
 
        /**
         * Identifier to use in filenames, default $wgDBname
index c47c61e..72b1d48 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that displays replication lag times.
index 0270052..ec9ed20 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that reports the hostname of a slave server.
index 34558b6..f6adfe2 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that outputs page text to stdout.
@@ -52,12 +52,12 @@ class GetTextMaint extends Maintenance {
                        $titleText = $title->getPrefixedText();
                        $this->error( "Page $titleText does not exist.\n", true );
                }
-               $text = $rev->getText( $this->hasOption( 'show-private' ) ? Revision::RAW : Revision::FOR_PUBLIC );
-               if ( $text === false ) {
+               $content = $rev->getContent( $this->hasOption( 'show-private' ) ? Revision::RAW : Revision::FOR_PUBLIC );
+               if ( $content === false ) {
                        $titleText = $title->getPrefixedText();
                        $this->error( "Couldn't extract the text from $titleText.\n", true );
                }
-               $this->output( $text );
+               $this->output( $content->serialize() );
        }
 }
 
old mode 100755 (executable)
new mode 100644 (file)
index 2bb9951..2fa70dc
@@ -2,7 +2,7 @@
 <?php
 
 define( 'MW_CONFIG_CALLBACK', 'MakeHipHop::noConfigNeeded' );
-require( dirname( __FILE__ ) . '/../Maintenance.php' );
+require( __DIR__ . '/../Maintenance.php' );
 
 class MakeHipHop extends Maintenance {
        function noConfigNeeded() {}
@@ -12,7 +12,7 @@ class MakeHipHop extends Maintenance {
 
                $startTime = time();
 
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                if ( strval( $wgHipHopBuildDirectory ) !== '' ) {
                        $buildDir = $wgHipHopBuildDirectory;
@@ -278,7 +278,7 @@ class MakeHipHop extends Maintenance {
                        }
                }
 
-               $extraCoreFiles = array_map( 'trim', file( dirname( __FILE__ ) . '/extra-files' ) );
+               $extraCoreFiles = array_map( 'trim', file( __DIR__ . '/extra-files' ) );
                foreach ( $extraCoreFiles as $file ) {
                        if ( $file === '' ) {
                                continue;
old mode 100755 (executable)
new mode 100644 (file)
index 0ad4313..1c4b51f
@@ -1,7 +1,7 @@
 #!/usr/bin/hphpi -f
 <?php
 
-require( dirname( __FILE__ ) . '/../Maintenance.php' );
+require( __DIR__ . '/../Maintenance.php' );
 
 class RunHipHopServer extends Maintenance {
        function __construct() {
@@ -19,7 +19,7 @@ class RunHipHopServer extends Maintenance {
 
        function runCompiled() {
                global $wgHipHopBuildDirectory;
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                if ( strval( $wgHipHopBuildDirectory ) !== '' ) {
                        $buildDir = $wgHipHopBuildDirectory;
@@ -51,7 +51,7 @@ class RunHipHopServer extends Maintenance {
        }
 
        function runInterpreted() {
-               $thisDir = realpath( dirname( __FILE__ ) );
+               $thisDir = realpath( __DIR__ );
                $IP = realpath( "$thisDir/../.." );
                $sourceBase = realpath( "$IP/.." );
 
index b6e0fe0..904b624 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that imports XML dump files into the current wiki.
@@ -32,13 +32,13 @@ require_once( dirname( __FILE__ ) . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class BackupReader extends Maintenance {
-       var $reportingInterval = 100;
-       var $pageCount = 0;
-       var $revCount  = 0;
-       var $dryRun    = false;
-       var $uploads   = false;
-       var $imageBasePath = false;
-       var $nsFilter  = false;
+       public $reportingInterval = 100;
+       public $pageCount = 0;
+       public $revCount  = 0;
+       public $dryRun    = false;
+       public $uploads   = false;
+       public $imageBasePath = false;
+       public $nsFilter  = false;
 
        function __construct() {
                parent::__construct();
@@ -208,7 +208,7 @@ TEXT;
 
        function showReport() {
                if ( !$this->mQuiet ) {
-                       $delta = wfTime() - $this->startTime;
+                       $delta = microtime( true ) - $this->startTime;
                        if ( $delta ) {
                                $rate = sprintf( "%.2f", $this->pageCount / $delta );
                                $revrate = sprintf( "%.2f", $this->revCount / $delta );
@@ -254,7 +254,7 @@ TEXT;
        }
 
        function importFromHandle( $handle ) {
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                $source = new ImportStreamSource( $handle );
                $importer = new WikiImporter( $source );
index 76ec565..a8cd2ff 100644 (file)
  * @author Mij <mij@bitchx.it>
  */
 
-$optionsWithArgs = array( 'extensions', 'comment', 'comment-file', 'comment-ext', 'user', 'license', 'sleep', 'limit', 'from', 'source-wiki-url' );
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( dirname( __FILE__ ) . '/importImages.inc' );
+$optionsWithArgs = array(
+       'extensions', 'comment', 'comment-file', 'comment-ext', 'summary', 'user',
+       'license', 'sleep', 'limit', 'from', 'source-wiki-url', 'timestamp',
+);
+require_once( __DIR__ . '/commandLine.inc' );
+require_once( __DIR__ . '/importImages.inc' );
 $processed = $added = $ignored = $skipped = $overwritten = $failed = 0;
 
 echo( "Import Images\n\n" );
@@ -98,6 +101,8 @@ if ( $limit ) {
        $limit = (int)$limit;
 }
 
+$timestamp = isset( $options['timestamp'] ) ? $options['timestamp'] : false;
+
 # Get the upload comment. Provide a default one in case there's no comment given.
 $comment = 'Importing image file';
 
@@ -112,6 +117,8 @@ if ( isset( $options['comment-file'] ) ) {
 
 $commentExt = isset( $options['comment-ext'] ) ? $options['comment-ext'] : false;
 
+$summary = isset( $options['summary'] ) ? $options['summary'] : '';
+
 # Get the license specifier
 $license = isset( $options['license'] ) ? $options['license'] : '';
 
@@ -230,9 +237,14 @@ if ( $count > 0 ) {
                        }
                }
 
+               $commentText = SpecialUpload::getInitialPageText( $commentText, $license );
+               if ( !$summary ) {
+                       $summary = $commentText;
+               }
+
                if ( isset( $options['dry'] ) ) {
                        echo( "done.\n" );
-               } elseif ( $image->recordUpload( $archive->value, $commentText, $license ) ) {
+               } elseif ( $image->recordUpload2( $archive->value, $summary, $commentText, false, $timestamp ) ) {
                        # We're done!
                        echo( "done.\n" );
 
@@ -315,24 +327,26 @@ USAGE: php importImages.php [options] <dir>
 
 Options:
 --extensions=<exts>    Comma-separated list of allowable extensions, defaults to \$wgFileExtensions
---overwrite            Overwrite existing images with the same name (default is to skip them)
---limit=<num>          Limit the number of images to process. Ignored or skipped images are not counted.
---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)
---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.
---comment=<text>       Set upload summary comment, default 'Importing image file'.
---comment-file=<file>          Set upload summary comment the the content of <file>.
---comment-ext=<ext>    Causes the comment for each file to be loaded from a file with the same name
-                       but the extension <ext>. If a global comment is also given, it is appended.
---license=<code>       Use an optional license template
---dry                  Dry run, don't import anything
+--overwrite             Overwrite existing images with the same name (default is to skip them)
+--limit=<num>           Limit the number of images to process. Ignored or skipped images are not counted.
+--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)
+--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.
+--comment=<text>        Set file description, default 'Importing image file'.
+--comment-file=<file>   Set description to the content of <file>.
+--comment-ext=<ext>     Causes the description for each file to be loaded from a file with the same name
+                        but the extension <ext>. If a global description is also given, it is appended.
+--license=<code>        Use an optional license template
+--dry                   Dry run, don't import anything
 --protect=<protect>     Specify the protect value (autoconfirmed,sysop)
+--summary=<summary>     Upload summary, description will be used if not provided
+--timestamp=<timestamp> Override upload time/date, all MediaWiki timestamp formats are accepted
 --unprotect             Unprotects all uploaded images
---source-wiki-url   if specified, take User and Comment data for each imported file from this URL.
-                                       For example, --source-wiki-url="http://en.wikipedia.org/"
+--source-wiki-url       If specified, take User and Comment data for each imported file from this URL.
+                        For example, --source-wiki-url="http://en.wikipedia.org/"
 
 TEXT;
        exit( 1 );
index b4a1bac..fabc6dc 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to import all scripts in the MediaWiki namespace from a
@@ -56,16 +56,14 @@ class ImportSiteScripts extends Maintenance {
                        }
 
                        $this->output( "Importing $page\n" );
-                       $uri = new Uri( $baseUrl );
-                       $uri->extendQuery( array(
+                       $url = wfAppendQuery( $baseUrl, array(
                                'action' => 'raw',
                                'title' => "MediaWiki:{$page}" ) );
-                       $url = $uri->toString();
-
                        $text = Http::get( $url );
 
                        $wikiPage = WikiPage::factory( $title );
-                       $wikiPage->doEdit( $text, "Importing from $url", 0, false, $user );
+                       $content = ContentHandler::makeContent( $text, $wikiPage->getTitle() );
+                       $wikiPage->doEditContent( $content, "Importing from $url", 0, false, $user );
                }
 
        }
@@ -82,9 +80,7 @@ class ImportSiteScripts extends Maintenance {
                $pages = array();
 
                do {
-                       $uri = new Uri( $baseUrl );
-                       $uri->extendQuery( $data );
-                       $url = $uri->toString();
+                       $url = wfAppendQuery( $baseUrl, $data );
                        $strResult = Http::get( $url );
                        //$result = FormatJson::decode( $strResult ); // Still broken
                        $result = unserialize( $strResult );
index 5623fb0..c04989c 100644 (file)
@@ -24,7 +24,7 @@
 
 $options = array( 'help', 'nooverwrite', 'norc' );
 $optionsWithArgs = array( 'title', 'user', 'comment' );
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 echo( "Import Text File\n\n" );
 
 if ( count( $args ) < 1 || isset( $options['help'] ) ) {
@@ -56,7 +56,8 @@ if ( count( $args ) < 1 || isset( $options['help'] ) ) {
 
                                        echo( "\nPerforming edit..." );
                                        $page = WikiPage::factory( $title );
-                                       $page->doEdit( $text, $comment, $flags, false, $user );
+                                       $content = ContentHandler::makeContent( $text, $title );
+                                       $page->doEditContent( $content, $comment, $flags, false, $user );
                                        echo( "done.\n" );
 
                                } else {
index 0f13645..3135b4c 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 class InitEditCount extends Maintenance {
        public function __construct() {
index 35918bb..5d8b886 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to re-initialise or update the site statistics table
index 6339773..39e613f 100644 (file)
@@ -30,7 +30,7 @@ if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );
 
-require_once( dirname( dirname( __FILE__ ) )."/maintenance/Maintenance.php" );
+require_once( dirname( __DIR__ )."/maintenance/Maintenance.php" );
 
 /**
  * Maintenance script to install and configure MediaWiki
@@ -45,7 +45,8 @@ class CommandLineInstaller extends Maintenance {
                $this->addArg( 'name', 'The name of the wiki', true);
 
                $this->addArg( 'admin', 'The username of the wiki administrator (WikiSysop)', true );
-               $this->addOption( 'pass', 'The password for the wiki administrator.', true, true );
+               $this->addOption( 'pass', 'The password for the wiki administrator.', false, true );
+               $this->addOption( 'passfile', 'An alternative way to provide pass option, as the contents of this file', false, true );
                /* $this->addOption( 'email', 'The email for the wiki administrator', false, true ); */
                $this->addOption( 'scriptpath', 'The relative path of the wiki in the web server (/wiki)', false, true );
 
@@ -77,6 +78,9 @@ class CommandLineInstaller extends Maintenance {
 
                $dbpassfile = $this->getOption( 'dbpassfile', false );
                if ( $dbpassfile !== false ) {
+                       if ( $this->getOption( 'dbpass', false ) !== false ) {
+                               $this->error( 'WARNING: You provide the options "dbpass" and "dbpassfile". The content of "dbpassfile" overwrites "dbpass".' );
+                       }
                        wfSuppressWarnings();
                        $dbpass = file_get_contents( $dbpassfile );
                        wfRestoreWarnings();
@@ -86,6 +90,22 @@ class CommandLineInstaller extends Maintenance {
                        $this->mOptions['dbpass'] = trim( $dbpass, "\r\n" );
                }
 
+               $passfile = $this->getOption( 'passfile', false );
+               if ( $passfile !== false ) {
+                       if ( $this->getOption( 'pass', false ) !== false ) {
+                               $this->error( 'WARNING: You provide the options "pass" and "passfile". The content of "passfile" overwrites "pass".' );
+                       }
+                       wfSuppressWarnings();
+                       $pass = file_get_contents( $passfile );
+                       wfRestoreWarnings();
+                       if ( $pass === false ) {
+                               $this->error( "Couldn't open $passfile", true );
+                       }
+                       $this->mOptions['pass'] = str_replace( array( "\n", "\r" ), "", $pass );
+               } elseif ( $this->getOption( 'pass', false ) === false ) {
+                       $this->error( 'You need to provide the option "pass" or "passfile"', true );
+               }
+
                $installer =
                        InstallerOverrides::getCliInstaller( $siteName, $adminName, $this->mOptions );
 
index c0a4dba..1a2e121 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to do test JavaScript validity parses using jsmin+'s parser
@@ -29,7 +29,7 @@ require_once( dirname( __FILE__ ) . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class JSParseHelper extends Maintenance {
-       var $errs = 0;
+       public $errs = 0;
 
        public function __construct() {
                parent::__construct();
index 19c549a..3ad0864 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to show database lag.
index f872e6a..8caf867 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that gets all messages as defined by the
+ * English language file.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class AllTrans extends Maintenance {
        public function __construct() {
                parent::__construct();
index ea5b187..6abf7b4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to print out duplicates in message array
+ * Print out duplicates in message array
  *
  * 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
@@ -21,8 +21,8 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
-$messagesDir = dirname( __FILE__ ) . '/../../languages/messages/';
+require_once( __DIR__ . '/../commandLine.inc' );
+$messagesDir = __DIR__ . '/../../languages/messages/';
 $runTest = false;
 $run = false;
 $runMode = 'text';
index a58a8f5..ebc62b6 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
 require_once( 'checkLanguage.inc' );
 
index 11b00e1..1860f4a 100644 (file)
@@ -43,7 +43,7 @@ class CheckLanguageCLI {
         * Constructor.
         * @param $options array Options for script.
         */
-       public function __construct( Array $options ) {
+       public function __construct( array $options ) {
                if ( isset( $options['help'] ) ) {
                        echo $this->help();
                        exit(1);
@@ -305,6 +305,7 @@ ENDS;
        /**
         * Check a language.
         * @param $code string The language code.
+        * @throws MWException
         * @return array The results.
         */
        protected function checkLanguage( $code ) {
@@ -484,7 +485,7 @@ class CheckExtensionsCLI extends CheckLanguageCLI {
         * @param $options array Options for script.
         * @param $extension string The extension name (or names).
         */
-       public function __construct( Array $options, $extension ) {
+       public function __construct( array $options, $extension ) {
                if ( isset( $options['help'] ) ) {
                        echo $this->help();
                        exit(1);
@@ -641,6 +642,7 @@ ENDS;
        /**
         * Check a language and show the results.
         * @param $code string The language code.
+        * @throws MWException
         */
        protected function checkLanguage( $code ) {
                foreach( $this->extensions as $extension ) {
index 69f6108..99ba4e9 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'checkLanguage.inc' );
 require_once( 'languages.inc' );
 
index f949ddc..5058a54 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that counts how many messages we have defined
+ * for each language.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class CountMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
index 04f5e8b..ed12b78 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that tests various language time and date functions.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class DateFormats extends Maintenance {
 
        private $ts = '20010115123456';
index a80ac01..9d4cbe7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Check digit transformation
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that check digit transformation.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class Digit2Html extends Maintenance {
 
        # A list of unicode numerals is available at:
index b7ca88d..0292d31 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
- * @todo Make this more useful, right now just dumps $wgContentLang
+ * @todo Make this more useful, right now just dumps $wgContLang
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that dumps an entire language, using the keys from English.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class DumpMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Dump an entire language, using the keys from English";
        }
-       
+
        public function execute() {
                global $wgVersion;
 
index 4cb90ff..e2ad6a7 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @ingroup Maintenance
  * @file
+ * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) .'/../Maintenance.php' );
+require_once( __DIR__ .'/../Maintenance.php' );
 
 /**
  * Generate first letter data files for Collation.php
+ *
+ * @ingroup MaintenanceLanguage
  */
 class GenerateCollationData extends Maintenance {
        /** The directory with source data files in it */
-       var $dataDir;
+       public $dataDir;
 
        /** The primary weights, indexed by codepoint */
-       var $weights;
+       public $weights;
 
        /**
         * A hashtable keyed by codepoint, where presence indicates that a character
         * has a decomposition mapping. This makes it non-preferred for group header
         * selection.
         */
-       var $mappedChars;
+       public $mappedChars;
 
-       var $debugOutFile;
+       public $debugOutFile;
 
        /**
         * Important tertiary weights from UTS #10 section 7.2
@@ -283,12 +285,12 @@ class GenerateCollationData extends Maintenance {
 }
 
 class UcdXmlReader {
-       var $fileName;
-       var $callback;
-       var $groupAttrs;
-       var $xml;
-       var $blocks = array();
-       var $currentBlock;
+       public $fileName;
+       public $callback;
+       public $groupAttrs;
+       public $xml;
+       public $blocks = array();
+       public $currentBlock;
 
        function __construct( $fileName ) {
                $this->fileName = $fileName;
index 3dfda92..33163d4 100644 (file)
  * @ingroup MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
-require_once( dirname( __FILE__ ) . '/../../includes/normal/UtfNormalUtil.php' );
+require_once( __DIR__ . '/../../includes/normal/UtfNormalUtil.php' );
 
 /**
  * Generates normalizer data files for Arabic and Malayalam.
  * For NFC see includes/normal.
+ *
+ * @ingroup MaintenanceLanguage
  */
 class GenerateNormalizerData extends Maintenance {
-       var $dataFile;
+       public $dataFile;
 
        public function __construct() {
                parent::__construct();
index 28fe120..ad29efb 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Dumb program that tries to get the memory usage
- * for each language file.
+ * Dumb program that tries to get the memory usage for each language file.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 /** This is a command line script */
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
-require_once( dirname( __FILE__ ) . '/languages.inc' );
+require_once( __DIR__ . '/../Maintenance.php' );
+require_once( __DIR__ . '/languages.inc' );
 
+/**
+ * Maintenance script that tries to get the memory usage for each language file.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class LangMemUsage extends Maintenance {
 
        public function __construct() {
@@ -41,7 +46,7 @@ class LangMemUsage extends Maintenance {
                $memlast = $memstart = memory_get_usage();
 
                $this->output( "Base memory usage: $memstart\n" );
-       
+
                foreach ( $langtool->getLanguages() as $langcode ) {
                        Language::factory( $langcode );
                        $memstep = memory_get_usage();
index 15fa712..b76f921 100644 (file)
@@ -46,7 +46,7 @@ class languages {
         * @param $exif bool Treat the EXIF messages?
         */
        function __construct( $exif = true ) {
-               require( dirname(__FILE__) . '/messageTypes.inc' );
+               require( __DIR__ . '/messageTypes.inc' );
                $this->mIgnoredMessages = $wgIgnoredMessages;
                if ( $exif ) {
                        $this->mOptionalMessages = array_merge( $wgOptionalMessages );
index 2d0f90f..ce1dbb9 100644 (file)
@@ -189,6 +189,7 @@ $wgIgnoredMessages = array(
        'wantedtemplates-summary',
        'activeusers-summary',
        'search-summary',
+       'editpage-head-copy-warn',
        'editpage-tos-summary',
        'addsection-preload',
        'addsection-editintro',
@@ -243,6 +244,8 @@ $wgIgnoredMessages = array(
        'version-entrypoints-api-php',
        'version-entrypoints-load-php',
        'ipb-default-expiry',
+       'pageinfo-header',
+       'pageinfo-footer',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
index 33c104b..45b24c4 100644 (file)
@@ -653,6 +653,7 @@ $wgMessageStructure = array(
                'yourdiff',
                'copyrightwarning',
                'copyrightwarning2',
+               'editpage-head-copy-warn',
                'editpage-tos-summary',
                'longpage-hint',
                'longpageerror',
@@ -688,6 +689,15 @@ $wgMessageStructure = array(
                'addsection-preload',
                'addsection-editintro',
                'defaultmessagetext',
+               'content-failed-to-parse',
+               'invalid-content-data',
+               'content-not-allowed-here',
+       ),
+       'contentmodels' => array(
+               'content-model-wikitext',
+               'content-model-text',
+               'content-model-javascript',
+               'content-model-css',
        ),
        'parserwarnings' => array(
                'expensive-parserfunction-warning',
@@ -909,8 +919,6 @@ $wgMessageStructure = array(
                'search-interwiki-default',
                'search-interwiki-custom',
                'search-interwiki-more',
-               'search-mwsuggest-enabled',
-               'search-mwsuggest-disabled',
                'search-relatedarticle',
                'mwsuggest-disable',
                'searcheverything-enable',
@@ -2336,6 +2344,7 @@ $wgMessageStructure = array(
                'immobile-target-namespace-iw',
                'immobile-source-page',
                'immobile-target-page',
+               'bad-target-model',
                'immobile_namespace',
                'imagenocrossnamespace',
                'nonfile-cannot-move-to-file',
@@ -2452,7 +2461,6 @@ $wgMessageStructure = array(
        'javaccripttest' => array(
                'javascripttest',
                'javascripttest-backlink',
-               'javascripttest-disabled',
                'javascripttest-title',
                'javascripttest-pagetext-noframework',
                'javascripttest-pagetext-unknownframework',
@@ -2663,6 +2671,7 @@ $wgMessageStructure = array(
                'spam_deleting',
        ),
        'info' => array(
+               'pageinfo-header',
                'pageinfo-title',
                'pageinfo-header-basic',
                'pageinfo-header-edits',
@@ -2689,10 +2698,11 @@ $wgMessageStructure = array(
                'pageinfo-authors',
                'pageinfo-recent-edits',
                'pageinfo-recent-authors',
-               'pageinfo-restriction',
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
+               'pageinfo-footer',
+               'pageinfo-toolboxlink',
        ),
        'skin' => array(
                'skinname-standard',
@@ -3342,6 +3352,7 @@ $wgMessageStructure = array(
        'scarytransclusion' => array(
                'scarytranscludedisabled',
                'scarytranscludefailed',
+               'scarytranscludefailed-httpstatus',
                'scarytranscludetoolong',
        ),
        'deleteconflict' => array(
@@ -3735,6 +3746,10 @@ $wgMessageStructure = array(
                'feedback-bugcheck',
                'feedback-bugnew',
        ),
+       'searchsuggestions' => array(
+               'searchsuggest-search',
+               'searchsuggest-containing',
+       ),
        'apierrors' => array(
                'api-error-badaccess-groups',
                'api-error-badtoken',
@@ -3824,6 +3839,7 @@ XHTML id names.",
        'toolbar'             => 'Edit page toolbar',
        'edit'                => 'Edit pages',
        'parserwarnings'      => 'Parser/template warnings',
+       'contentmodels'       => 'Content models',
        'undo'                => '"Undo" feature',
        'cantcreateaccount'   => 'Account creation failure',
        'history'             => 'History pages',
@@ -4024,6 +4040,7 @@ Variants for Chinese language",
        'logging'               => 'New logging system',
        'logging-irc'           => 'For IRC, see bug 34508. Do not change',
        'feedback'              => 'Feedback',
+       'searchsuggestions'     => 'Search suggestions',
        'apierrors'             => 'API errors',
        'duration'              => 'Durations',
        'cachedspecial'         => 'SpecialCachedPage',
index ed2dae7..ad83905 100644 (file)
@@ -22,7 +22,7 @@
  * @defgroup MaintenanceLanguage MaintenanceLanguage
  */
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
 require_once( 'writeMessagesArray.inc' );
 
index a298841..ba50322 100644 (file)
@@ -28,9 +28,9 @@
  */
 $optionsWithArgs = array( 'output' );
 
-require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+require_once( __DIR__ . '/../commandLine.inc' );
 require_once( 'languages.inc' );
-require_once( dirname( __FILE__ ) . '/StatOutputs.php' );
+require_once( __DIR__ . '/StatOutputs.php' );
 
 
 if ( isset( $options['help'] ) ) {
index 1e97c37..751e744 100644 (file)
@@ -30,7 +30,7 @@ array_shift( $argv );
 define( 'MEDIAWIKI', 1 );
 define( 'NOT_REALLY_MEDIAWIKI', 1 );
 
-$IP = dirname( __FILE__ ) . '/../..';
+$IP = __DIR__ . '/../..';
 
 require_once( "$IP/includes/Defines.php" );
 require_once( "$IP/languages/Language.php" );
index cd36847..b2e04c7 100644 (file)
@@ -105,7 +105,7 @@ $messages = array(
         */
        public static function writeMessagesArray( $messages, $ignoredComments = false, $prefix = false, $removeUnknown = false ) {
                # Load messages
-               $dir = $prefix ? $prefix : dirname( __FILE__ );
+               $dir = $prefix ? $prefix : __DIR__;
 
                require( $dir . '/messages.inc' );
                self::$messageStructure = $wgMessageStructure;
index 689c930..c591665 100644 (file)
@@ -39,6 +39,8 @@ LockServerDaemon::init(
 
 /**
  * Simple lock server daemon that accepts lock/unlock requests
+ *
+ * @ingroup LockManager Maintenance
  */
 class LockServerDaemon {
        /** @var resource */
@@ -66,6 +68,8 @@ class LockServerDaemon {
 
        /**
         * @params $config Array
+        * @param array $config
+        * @throws Exception
         * @return LockServerDaemon
         */
        public static function init( array $config ) {
@@ -111,6 +115,7 @@ class LockServerDaemon {
        }
 
        /**
+        * @throws Exception
         * @return void
         */
        protected function setupServerSocket() {
index 0244527..e07e62d 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 /** */
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 $mcc = new MWMemcached( array( 'persistent' => true/*, 'debug' => true*/ ) );
 $mcc->set_servers( $wgMemCachedServers );
index ed8250b..691b832 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that  makes several 'set', 'incr' and 'get' requests
index 8107016..cea6433 100644 (file)
@@ -25,7 +25,7 @@
 # Start from scratch
 define( 'MW_NO_EXTENSION_MESSAGES', 1 );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 $maintClass = 'MergeMessageFileList';
 $mmfl = false;
 
@@ -104,7 +104,7 @@ $s =
 
 $dirs = array(
        $IP,
-       dirname( dirname( __FILE__ ) ),
+       dirname( __DIR__ ),
        realpath( $IP )
 );
 
index 451b598..496af72 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that re-assigns users from an old group to a new one.
@@ -60,7 +60,15 @@ class MigrateUserGroup extends Maintenance {
                        $dbw->update( 'user_groups',
                                array( 'ug_group' => $newGroup ),
                                array( 'ug_group' => $oldGroup,
-                                       "ug_user BETWEEN $blockStart AND $blockEnd" )
+                                       "ug_user BETWEEN $blockStart AND $blockEnd" ),
+                               __METHOD__,
+                               array( 'IGNORE' )
+                       );
+                       $count += $dbw->affectedRows();
+                       $dbw->delete( 'user_groups',
+                               array( 'ug_group' => $oldGroup,
+                                       "ug_user BETWEEN $blockStart AND $blockEnd" ),
+                               __METHOD__
                        );
                        $count += $dbw->affectedRows();
                        $dbw->commit( __METHOD__ );
index b17d8fe..0846a64 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that minifies a file or set of files.
@@ -29,7 +29,7 @@ require_once( dirname( __FILE__ ) . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class MinifyScript extends Maintenance {
-       var $outDir;
+       public $outDir;
 
        public function __construct() {
                parent::__construct();
index 78db8b9..7d15959 100644 (file)
@@ -34,7 +34,7 @@
  * e.g. immobile_namespace for namespaces which can't be moved
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to move a batch of pages.
index a59ba17..e36674e 100644 (file)
@@ -49,7 +49,7 @@ if ( php_sapi_name() != 'cli' ) {
 }
 
 /** Figure out the base directory for MediaWiki location */
-$mwPath = dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR;
+$mwPath = dirname( __DIR__ ) . DIRECTORY_SEPARATOR;
 
 /** doxygen binary script */
 $doxygenBin = 'doxygen';
@@ -60,9 +60,6 @@ $doxygenTemplate = $mwPath . 'maintenance/Doxyfile';
 /** doxygen input filter to tweak source file before they are parsed */
 $doxygenInputFilter = "php {$mwPath}maintenance/mwdoc-filter.php";
 
-/** svnstat command, used to get the version of each file */
-$svnstat = $mwPath . 'bin/svnstat';
-
 /** where Phpdoc should output documentation */
 $doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ;
 
@@ -104,31 +101,12 @@ function readaline( $prompt = '' ) {
        return $resp;
 }
 
-/**
- * Copied from SpecialVersion::getSvnRevision()
- * @param $dir String
- * @return Mixed: string or false
- */
-function getSvnRevision( $dir ) {
-       // http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html
-       $entries = $dir . '/.svn/entries';
-
-       if ( !file_exists( $entries ) ) {
-               return false;
-       }
-
-       $content = file( $entries );
-
-       return intval( $content[3] );
-}
-
 /**
  * Generate a configuration file given user parameters and return the temporary filename.
  * @param $doxygenTemplate String: full path for the template.
  * @param $outputDirectory String: directory where the stuff will be output.
  * @param $stripFromPath String: path that should be stripped out (usually mediawiki base path).
  * @param $currentVersion String: Version number of the software
- * @param $svnstat String: path to the svnstat file
  * @param $input String: Path to analyze.
  * @param $exclude String: Additionals path regex to exclude
  * @param $excludePatterns String: Additionals path regex to exclude
@@ -136,7 +114,7 @@ function getSvnRevision( $dir ) {
  * @param $doxyGenerateMan Boolean
  * @return string
  */
-function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $svnstat, $input, $exclude, $excludePatterns, $doxyGenerateMan ) {
+function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath, $currentVersion, $input, $exclude, $excludePatterns, $doxyGenerateMan ) {
        global $doxygenInputFilter;
 
        $template = file_get_contents( $doxygenTemplate );
@@ -145,7 +123,6 @@ function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath,
                '{{OUTPUT_DIRECTORY}}' => $outputDirectory,
                '{{STRIP_FROM_PATH}}'  => $stripFromPath,
                '{{CURRENT_VERSION}}'  => $currentVersion,
-               '{{SVNSTAT}}'          => $svnstat,
                '{{INPUT}}'            => $input,
                '{{EXCLUDE}}'          => $exclude,
                '{{EXCLUDE_PATTERNS}}' => $excludePatterns,
@@ -258,20 +235,14 @@ case 6:
        $excludePatterns = 'extensions';
 }
 
-$versionNumber = getSvnRevision( $input );
-if ( $versionNumber === false ) { # Not using subversion ?
-       $svnstat = ''; # Not really useful if subversion not available
-       # @todo FIXME
-       $version = 'trunk';
-} else {
-       $version = "trunk (r$versionNumber)";
-}
+// @todo FIXME to work on git
+$version = 'master';
 
 // Generate path exclusions
 $excludedPaths = $mwPath . join( " $mwPath", $mwExcludePaths );
 print "EXCLUDE: $excludedPaths\n\n";
 
-$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $svnstat, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan );
+$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan );
 $command = $doxygenBin . ' ' . $generatedConf;
 
 echo <<<TEXT
index e2de686..4197a35 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that checks for articles to fix after
index bee4065..e66e981 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that picks a database that has pending jobs.
index 1defe1b..c471a44 100644 (file)
@@ -33,7 +33,7 @@
  * based on nukePage by Rob Church
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that removes pages with only one revision from the
index 3193d43..89dffe0 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that erases a page record from the database.
index aa20782..a46c5e1 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 /**
  * When using shared tables that are referenced by foreign keys on local
  * tables you have to change the constraints on local tables.
- * 
+ *
  * The shared tables have to have GRANT REFERENCE on shared tables to local schema
  * i.e.: GRANT REFERENCES (user_id) ON mwuser TO hubclient;
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class AlterSharedConstraints extends Maintenance {
        public function __construct() {
@@ -40,12 +41,12 @@ class AlterSharedConstraints extends Maintenance {
 
        public function execute() {
                global $wgSharedDB, $wgSharedTables, $wgSharedPrefix, $wgDBprefix;
-               
+
                if ( $wgSharedDB == null ) {
                        $this->output( "Database sharing is not enabled\n" );
                        return;
                }
-               
+
                $dbw = wfGetDB( DB_MASTER );
                foreach ( $wgSharedTables as $table ) {
                        $stable = $dbw->tableNameInternal($table);
@@ -54,7 +55,7 @@ class AlterSharedConstraints extends Maintenance {
                        } else {
                                $ltable = "{$wgDBprefix}{$stable}" ;
                        }
-                       
+
                        $result = $dbw->query( "SELECT uc.constraint_name, uc.table_name, ucc.column_name, uccpk.table_name pk_table_name, uccpk.column_name pk_column_name, uc.delete_rule, uc.deferrable, uc.deferred
                                          FROM user_constraints uc, user_cons_columns ucc, user_cons_columns uccpk
                                         WHERE uc.constraint_type = 'R'
@@ -62,9 +63,9 @@ class AlterSharedConstraints extends Maintenance {
                                           AND uccpk.constraint_name = uc.r_constraint_name
                                           AND uccpk.table_name = '$ltable'" );
                        while (($row = $result->fetchRow()) !== false) {
-                               
+
                                        $this->output( "Altering {$row['constraint_name']} ...");
-                                       
+
                                        try {
                                                $dbw->query( "ALTER TABLE {$row['table_name']} DROP CONSTRAINT {$wgDBprefix}{$row['constraint_name']}" );
                                        } catch (DBQueryError $exdb) {
@@ -72,13 +73,13 @@ class AlterSharedConstraints extends Maintenance {
                                                        throw $exdb;
                                                }
                                        }
-                                       
+
                                        $deleteRule = $row['delete_rule'] == 'NO ACTION' ? '' : "ON DELETE {$row['delete_rule']}";
-                                       $dbw->query( "ALTER TABLE {$row['table_name']} ADD CONSTRAINT {$wgDBprefix}{$row['constraint_name']} 
-                                               FOREIGN KEY ({$row['column_name']}) 
-                                               REFERENCES {$wgSharedDB}.$stable({$row['pk_column_name']}) 
+                                       $dbw->query( "ALTER TABLE {$row['table_name']} ADD CONSTRAINT {$wgDBprefix}{$row['constraint_name']}
+                                               FOREIGN KEY ({$row['column_name']})
+                                               REFERENCES {$wgSharedDB}.$stable({$row['pk_column_name']})
                                                {$deleteRule} {$row['deferrable']} INITIALLY {$row['deferred']}" );
-                                       
+
                                        $this->output( "DONE\n" );
                        }
                }
index 1ab3b99..78f98f5 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that looks for 'orphan' revisions hooked to pages which
index c1a890b..b0ab624 100644 (file)
@@ -49,7 +49,7 @@
  * @license GNU General Public License 2.0 or later
  */
 
-require_once( dirname(__FILE__) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to parse some wikitext.
index 0271e1a..1f39355 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that manually runs an SQL patch outside of the general updaters.
index 037849b..ae54d69 100644 (file)
@@ -22,7 +22,7 @@
  * @author Simetrical
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Mainteance script to populate the category table.
index 0bbb5a2..37429a3 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to populate the img_sha1 field.
index 8a2366a..99d8155 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for populating the
index 3b4b2db..059b6fe 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for
index 6a1b5c8..e81d4ff 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that makes the required database updates for rev_parent_id
index 65dd91f..07c395f 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that populates the rev_len field for old revisions
@@ -74,16 +74,16 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                        # Go through and update rev_len from these rows.
                        foreach ( $res as $row ) {
                                $rev = new Revision( $row );
-                               $text = $rev->getRawText();
-                               if ( !is_string( $text ) ) {
+                               $content = $rev->getContent();
+                               if ( !$content ) {
                                        # This should not happen, but sometimes does (bug 20757)
-                                       $this->output( "Text of revision {$row->rev_id} unavailable!\n" );
+                                       $this->output( "Content of revision {$row->rev_id} unavailable!\n" );
                                        $missing++;
                                }
                                else {
                                        # Update the row...
                                        $db->update( 'revision',
-                                                        array( 'rev_len' => strlen( $text ) ),
+                                                        array( 'rev_len' => $content->getSize() ),
                                                         array( 'rev_id' => $row->rev_id ),
                                                         __METHOD__ );
                                        $count++;
index bb620c5..382b7be 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that fills the rev_sha1 and ar_sha1 columns of revision
@@ -143,14 +143,14 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                        $rev = ( $table === 'archive' )
                                ? Revision::newFromArchiveRow( $row )
                                : new Revision( $row );
-                       $text = $rev->getRawText();
+                       $text = $rev->getSerializedData();
                } catch ( MWException $e ) {
-                       $this->output( "Text of revision with {$idCol}={$row->$idCol} unavailable!\n" );
+                       $this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" );
                        return false; // bug 22624?
                }
                if ( !is_string( $text ) ) {
                        # This should not happen, but sometimes does (bug 20757)
-                       $this->output( "Text of revision with {$idCol}={$row->$idCol} unavailable!\n" );
+                       $this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" );
                        return false;
                } else {
                        $db->update( $table,
@@ -174,10 +174,10 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                        $this->output( "Text of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
                        return false; // bug 22624?
                }
-               $text = $rev->getRawText();
+               $text = $rev->getSerializedData();
                if ( !is_string( $text ) ) {
                        # This should not happen, but sometimes does (bug 20757)
-                       $this->output( "Text of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
+                       $this->output( "Data of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
                        return false;
                } else {
                        # Archive table as no PK, but (NS,title,time) should be near unique.
index 5c2b0d4..87fc997 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
+require_once( __DIR__ . '/dumpIterator.php' );
 
 /**
  * Maintenance script that takes page text out of an XML dump file and
@@ -78,8 +78,14 @@ class PreprocessDump extends DumpIterator {
         * @param $rev Revision
         */
        public function processRevision( $rev ) {
+               $content = $rev->getContent( Revision::RAW );
+
+               if ( $content->getModel() !== CONTENT_MODEL_WIKITEXT ) {
+                       return;
+               }
+
                try {
-                       $this->mPreprocessor->preprocessToObj( $rev->getText(), 0 );
+                       $this->mPreprocessor->preprocessToObj( strval( $content->getNativeData() ), 0 );
                }
                catch(Exception $e) {
                        $this->error("Caught exception " . $e->getMessage() . " in " . $rev->getTitle()->getPrefixedText() );
index 9dee67e..49c7aee 100644 (file)
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook';
 
 class PPFuzzTester {
-       var $hairs = array(
+       public $hairs = array(
                '[[', ']]', '{{', '{{', '}}', '}}', '{{{', '}}}',
                '<', '>', '<nowiki', '<gallery', '</nowiki>', '</gallery>', '<nOwIkI>', '</NoWiKi>',
                '<!--' , '-->',
@@ -39,12 +39,12 @@ class PPFuzzTester {
                // extensions
                // '<ref>', '</ref>', '<references/>',
        );
-       var $minLength = 0;
-       var $maxLength = 20;
-       var $maxTemplates = 5;
-       // var $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' );
-       var $entryPoints = array( 'testSrvus', 'testPst', 'testPreprocess' );
-       var $verbose = false;
+       public $minLength = 0;
+       public $maxLength = 20;
+       public $maxTemplates = 5;
+       // public $outputTypes = array( 'OT_HTML', 'OT_WIKI', 'OT_PREPROCESS' );
+       public $entryPoints = array( 'testSrvus', 'testPst', 'testPreprocess' );
+       public $verbose = false;
        static $currentTest = false;
 
        function execute() {
@@ -140,7 +140,7 @@ class PPFuzzTester {
 }
 
 class PPFuzzTest {
-       var $templates, $mainText, $title, $entryPoint, $output;
+       public $templates, $mainText, $title, $entryPoint, $output;
 
        function __construct( $tester ) {
                global $wgMaxSigChars;
@@ -219,7 +219,7 @@ class PPFuzzTest {
 }
 
 class PPFuzzUser extends User {
-       var $ppfz_test, $mDataLoaded;
+       public $ppfz_test, $mDataLoaded;
 
        function load() {
                if ( $this->mDataLoaded ) {
index e60ee08..ff13bd6 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that protects or unprotects a page.
@@ -58,6 +58,7 @@ class Protect extends Maintenance {
                        $this->error( "Invalid username", true );
                }
 
+               // @todo FIXME: This is reset 7 lines down.
                $restrictions = array( 'edit' => $protection, 'move' => $protection );
 
                $t = Title::newFromText( $this->getArg() );
index 7828049..e058e3e 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that prunes file cache for pages, objects, resources, etc.
index e9d149b..cd62716 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that scans the deletion log and purges affected files
index 049d6e3..4b3c382 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that sends purge requests for listed pages to squid.
index e68047c..1f0b063 100644 (file)
@@ -22,7 +22,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that purges old text records from the database.
index b56794b..f067dc6 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require( dirname( __FILE__ ) . '/Maintenance.php' );
+require( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to remove old objects from the parser cache.
@@ -30,7 +30,7 @@ require( dirname( __FILE__ ) . '/Maintenance.php' );
  * @ingroup Maintenance
  */
 class PurgeParserCache extends Maintenance {
-       var $lastProgress;
+       public $lastProgress;
 
        function __construct() {
                parent::__construct();
diff --git a/maintenance/purgeStaleMemcachedText.php b/maintenance/purgeStaleMemcachedText.php
deleted file mode 100644 (file)
index ec7b081..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance Memcached
- */
-
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-
-function purgeStaleMemcachedText() {
-       global $wgMemc, $wgDBname;
-       $db = wfGetDB( DB_MASTER );
-       $maxTextId = $db->selectField( 'text', 'max(old_id)' );
-       $latestReplicatedTextId = $db->selectField( array( 'recentchanges', 'revision' ), 'rev_text_id', 
-               array( 'rev_id = rc_this_oldid', "rc_timestamp < '20101225183000'"),  'purgeStaleMemcachedText', 
-               array( 'ORDER BY' => 'rc_timestamp DESC' ) );
-       $latestReplicatedTextId -= 100; # A bit of paranoia
-
-       echo "Going to purge text entries from $latestReplicatedTextId to $maxTextId in $wgDBname\n";
-
-       for ( $i = $latestReplicatedTextId; $i < $maxTextId; $i++ ) {
-               $key = wfMemcKey( 'revisiontext', 'textid', $i );
-               
-               while (1) {
-                       if (! $wgMemc->delete( $key ) ) {
-                               echo "Memcache delete for $key returned false\n";
-                       }
-                       if ( $wgMemc->get( $key ) ) {
-                               echo "There's still content in $key!\n";
-                       } else {
-                               break;
-                       }
-               }
-               
-       }
-}
-
-purgeStaleMemcachedText();
-
index 2afd6e0..a91abf9 100644 (file)
@@ -23,7 +23,7 @@
  * @licence GNU General Public Licence 2.0 or later
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that reassigns edits from a user or IP address
index 4dbe267..3165b97 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that builds file cache for content pages.
index 936efd7..2842b40 100644 (file)
@@ -30,7 +30,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to update image metadata records.
@@ -91,7 +91,7 @@ class ImageBuilder extends Maintenance {
                $this->processed = 0;
                $this->updated = 0;
                $this->count = $count;
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
                $this->table = $table;
        }
 
@@ -104,7 +104,7 @@ class ImageBuilder extends Maintenance {
                $portion = $this->processed / $this->count;
                $updateRate = $this->updated / $this->processed;
 
-               $now = wfTime();
+               $now = microtime( true );
                $delta = $now - $this->startTime;
                $estimatedTotalTime = $delta / $portion;
                $eta = $this->startTime + $estimatedTotalTime;
index c48fb74..83849de 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to rebuild the localisation cache.
index bc9f732..882ae1b 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds link tracking tables from scratch.
index a22d3af..a70e591 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that purges all languages from the message cache.
index 5caa0a8..bfaaab5 100644 (file)
@@ -23,7 +23,7 @@
  * @todo Document
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds recent changes from scratch.
@@ -218,24 +218,17 @@ class RebuildRecentchanges extends Maintenance {
         * DOCUMENT ME!
         */
        private function rebuildRecentChangesTablePass4() {
-               global $wgGroupPermissions, $wgUseRCPatrol;
+               global $wgUseRCPatrol;
 
                $dbw = wfGetDB( DB_MASTER );
 
                list( $recentchanges, $usergroups, $user ) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' );
 
-               $botgroups = $autopatrolgroups = array();
-               foreach ( $wgGroupPermissions as $group => $rights ) {
-                       if ( isset( $rights['bot'] ) && $rights['bot'] ) {
-                               $botgroups[] = $dbw->addQuotes( $group );
-                       }
-                       if ( $wgUseRCPatrol && isset( $rights['autopatrol'] ) && $rights['autopatrol'] ) {
-                               $autopatrolgroups[] = $dbw->addQuotes( $group );
-                       }
-               }
+               $botgroups = User::getGroupsWithPermission( 'bot' );
+               $autopatrolgroups = $wgUseRCPatrol ? User::getGroupsWithPermission( 'autopatrol' ) : array();
                # Flag our recent bot edits
                if ( !empty( $botgroups ) ) {
-                       $botwhere = implode( ',', $botgroups );
+                       $botwhere = $dbw->makeList( $botgroups );
                        $botusers = array();
 
                        $this->output( "Flagging bot account edits...\n" );
@@ -259,7 +252,7 @@ class RebuildRecentchanges extends Maintenance {
                global $wgMiserMode;
                # Flag our recent autopatrolled edits
                if ( !$wgMiserMode && !empty( $autopatrolgroups ) ) {
-                       $patrolwhere = implode( ',', $autopatrolgroups );
+                       $patrolwhere = $dbw->makeList( $autopatrolgroups );
                        $patrolusers = array();
 
                        $this->output( "Flagging auto-patrolled edits...\n" );
index a37d603..41b245f 100644 (file)
@@ -25,7 +25,7 @@
  * @todo document
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that rebuilds search index table from scratch.
diff --git a/maintenance/refreshImageCount.php b/maintenance/refreshImageCount.php
deleted file mode 100644 (file)
index f9bdeea..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Quickie hack; patch-ss_images.sql uses variables which don't
- * replicate properly.
- *
- * 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
- *
- * @ingroup Maintenance
- */
-
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-
-class RefreshImageCount extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "Resets ss_image count, forcing slaves to pick it up.";
-       }
-
-       public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Load the current value from the master
-               $count = $dbw->selectField( 'site_stats', 'ss_images' );
-
-               $this->output( wfWikiID() . ": forcing ss_images to $count\n" );
-
-               // First set to NULL so that it changes on the master
-               $dbw->update( 'site_stats',
-                       array( 'ss_images' => null ),
-                       array( 'ss_row_id' => 1 ) );
-
-               // Now this update will be forced to go out
-               $dbw->update( 'site_stats',
-                       array( 'ss_images' => $count ),
-                       array( 'ss_row_id' => 1 ) );
-                       }
-}
-
-$maintClass = "RefreshImageCount";
-require_once( RUN_MAINTENANCE_IF_MAIN );
-
index 6623bea..12da7a8 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to refresh image metadata fields.
index 699d885..535808d 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to refresh link tables.
@@ -216,18 +216,16 @@ class RefreshLinks extends Maintenance {
                        return;
                }
 
-               $text = $page->getRawText();
-               if ( $text === false ) {
+               $content = $page->getContent( REVISION::RAW );
+               if ( null === false ) {
                        return;
                }
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
 
-               $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
-               $parserOutput = $wgParser->parse( $text, $page->getTitle(), $options, true, true, $page->getLatest() );
-               $update = new LinksUpdate( $page->getTitle(), $parserOutput, false );
-               $update->doUpdate();
+               $updates = $content->getSecondaryDataUpdates( $page->getTitle() );
+               DataUpdate::runUpdates( $updates );
 
                $dbw->commit( __METHOD__ );
        }
index 490602d..8bc27c1 100644 (file)
@@ -23,7 +23,7 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that removes unused user accounts from the database.
index d8e53ee..6f24479 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that changes the prefix of database tables.
index c76a89b..ad9a380 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that takes page text out of an XML dump file
@@ -52,7 +52,7 @@ class DumpRenderer extends Maintenance {
        public function execute() {
                $this->outputDirectory = $this->getOption( 'output-dir' );
                $this->prefix = $this->getOption( 'prefix', 'wiki' );
-               $this->startTime = wfTime();
+               $this->startTime = microtime( true );
 
                if ( $this->hasOption( 'parser' ) ) {
                        global $wgParserConf;
@@ -68,7 +68,7 @@ class DumpRenderer extends Maintenance {
 
                $importer->doImport();
 
-               $delta = wfTime() - $this->startTime;
+               $delta = microtime( true ) - $this->startTime;
                $this->error( "Rendered {$this->count} pages in " . round($delta, 2) . " seconds " );
                if ($delta > 0)
                        $this->error( round($this->count / $delta, 2) . " pages/sec" );
@@ -100,10 +100,10 @@ class DumpRenderer extends Maintenance {
                $this->output( sprintf( "%s\n", $filename, $display ) );
 
                $user = new User();
-               $parser = new $wgParserConf['class']();
                $options = ParserOptions::newFromUser( $user );
 
-               $output = $parser->parse( $rev->getText(), $title, $options );
+               $content = $rev->getContent();
+               $output = $content->getParserOutput( $title, null, $options );
 
                file_put_contents( $filename,
                        "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
index ef8f5b0..d7f8c6d 100644 (file)
@@ -23,7 +23,7 @@
  * @author Daniel Friesen <mediawiki@danielfriesen.name>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to reset the user_token for all users on the wiki.
index c9f607e..4660bce 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to rollback all edits by a given user or IP provided
index 6322d31..e113916 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script to run a database query in batches and wait for slaves.
index af7c906..e909bc0 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that runs pending jobs.
index ff7d3fc..1dceb79 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /**
- * Based on runJobs.php
- *
  * Report number of jobs currently waiting in master database.
  *
+ * Based on runJobs.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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Tim Starling
  * @author Antoine Musso
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that reports the number of jobs currently waiting
+ * in master database.
+ *
+ * @ingroup Maintenance
+ */
 class ShowJobs extends Maintenance {
        public function __construct() {
                parent::__construct();
index b284a9a..982c7cb 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Maintenance script to show the cached statistics.
+ * Show the cached statistics.
  * Give out the same output as [[Special:Statistics]]
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Antoine Musso <hashar at free dot fr>
  * Based on initStats.php by:
  * @license GNU General Public License 2.0 or later
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to show the cached statistics.
+ *
+ * @ingroup Maintenance
+ */
 class ShowStats extends Maintenance {
        public function __construct() {
                parent::__construct();
index c4af630..04e98d9 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that sends SQL queries from the specified file to the database.
+ *
+ * @ingroup Maintenance
+ */
 class MwSql extends Maintenance {
        public function __construct() {
                parent::__construct();
index 1f82191..16568ac 100644 (file)
@@ -23,6 +23,8 @@
 
 /**
  * This class contains code common to different SQLite-related maintenance scripts
+ *
+ * @ingroup Maintenance
  */
 class Sqlite {
 
@@ -41,6 +43,8 @@ class Sqlite {
         * Checks given files for correctness of SQL syntax. MySQL DDL will be converted to
         * SQLite-compatible during processing.
         * Will throw exceptions on SQL errors
+        * @param $files
+        * @throws MWException
         * @return mixed true if no error or error string in case of errors
         */
        public static function checkSqlSyntax( $files ) {
@@ -85,4 +89,4 @@ class Sqlite {
                $db->close();
                return true;
        }
- };
\ No newline at end of file
+ };
index 864d5ab..4085c59 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Performs some operations specific to SQLite database backend
+ * Performs some operations specific to SQLite database backend.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that performs some operations specific to SQLite database backend.
+ *
+ * @ingroup Maintenance
+ */
 class SqliteMaintenance extends Maintenance {
        public function __construct() {
                parent::__construct();
diff --git a/maintenance/sqlite/archives/patch-cat_hidden.sql b/maintenance/sqlite/archives/patch-cat_hidden.sql
new file mode 100644 (file)
index 0000000..272b8ef
--- /dev/null
@@ -0,0 +1,20 @@
+-- cat_hidden is no longer used, delete it
+
+CREATE TABLE /*_*/category_tmp (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/category_tmp
+       SELECT cat_id, cat_title, cat_pages, cat_subcats, cat_files
+               FROM /*_*/category;
+
+DROP TABLE /*_*/category;
+
+ALTER TABLE /*_*/category_tmp RENAME TO /*_*/category;
+
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
diff --git a/maintenance/sqlite/archives/patch-drop-ss_admins.sql b/maintenance/sqlite/archives/patch-drop-ss_admins.sql
new file mode 100644 (file)
index 0000000..9951e17
--- /dev/null
@@ -0,0 +1,22 @@
+-- field is deprecated and no longer updated as of 1.5
+CREATE TABLE /*_*/site_stats_tmp (
+  ss_row_id int unsigned NOT NULL,
+  ss_total_views bigint unsigned default 0,
+  ss_total_edits bigint unsigned default 0,
+  ss_good_articles bigint unsigned default 0,
+  ss_total_pages bigint default '-1',
+  ss_users bigint default '-1',
+  ss_active_users bigint default '-1',
+  ss_images int default 0
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/site_stats_tmp
+       SELECT ss_row_id, ss_total_views, ss_total_edits, ss_good_articles,
+               ss_total_pages, ss_users, ss_active_users, ss_images
+               FROM /*_*/site_stats;
+
+DROP TABLE /*_*/site_stats;
+
+ALTER TABLE /*_*/site_stats_tmp RENAME TO /*_*/site_stats;
+
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
\ No newline at end of file
diff --git a/maintenance/sqlite/archives/patch-rc_moved.sql b/maintenance/sqlite/archives/patch-rc_moved.sql
new file mode 100644 (file)
index 0000000..70248d5
--- /dev/null
@@ -0,0 +1,46 @@
+-- rc_moved_to_ns and rc_moved_to_title is no longer used, delete the fields
+
+CREATE TABLE /*_*/recentchanges_tmp (
+  rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  rc_user int unsigned NOT NULL default 0,
+  rc_user_text varchar(255) binary NOT NULL,
+  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 unsigned NOT NULL default 0,
+  rc_bot tinyint unsigned NOT NULL default 0,
+  rc_new tinyint unsigned NOT NULL default 0,
+  rc_cur_id int unsigned NOT NULL default 0,
+  rc_this_oldid int unsigned NOT NULL default 0,
+  rc_last_oldid int unsigned NOT NULL default 0,
+  rc_type tinyint unsigned NOT NULL default 0,
+  rc_patrolled tinyint unsigned NOT NULL default 0,
+  rc_ip varbinary(40) NOT NULL default '',
+  rc_old_len int,
+  rc_new_len int,
+  rc_deleted tinyint unsigned NOT NULL default 0,
+  rc_logid int unsigned NOT NULL default 0,
+  rc_log_type varbinary(255) NULL default NULL,
+  rc_log_action varbinary(255) NULL default NULL,
+  rc_params blob NULL
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/recentchanges_tmp
+       SELECT 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
+               FROM /*_*/recentchanges;
+
+DROP TABLE /*_*/recentchanges;
+
+ALTER TABLE /*_*/recentchanges_tmp RENAME TO /*_*/recentchanges;
+
+CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
+CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
+CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
+CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
+CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
+CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
index 46926dd..be448f9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Show statistics from the cache
+ * Show statistics from the cache.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that shows statistics from the cache.
+ *
+ * @ingroup Maintenance
+ */
 class CacheStats extends Maintenance {
 
        public function __construct() {
index 29904db..fd9393f 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 if ( !defined( 'MEDIAWIKI' ) ) {
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../commandLine.inc' );
 
        $cs = new CheckStorage;
        $fix = isset( $options['fix'] );
@@ -38,14 +38,16 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 // ----------------------------------------------------------------------------------
 
 /**
+ * Maintenance script to do various checks on external storage.
+ *
  * @ingroup Maintenance ExternalStorage
  */
 class CheckStorage {
        const CONCAT_HEADER = 'O:27:"concatenatedgziphistoryblob"';
-       var $oldIdMap, $errors;
-       var $dbStore = null;
+       public $oldIdMap, $errors;
+       public $dbStore = null;
 
-       var $errorDescriptions = array(
+       public $errorDescriptions = array(
                'restore text' => 'Damaged text, need to be restored from a backup',
                'restore revision' => 'Damaged revision row, need to be restored from a backup',
                'unfixable' => 'Unexpected errors with no automated fixing method',
index 5064fe7..951ab1a 100644 (file)
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that compress the text of a wiki.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class CompressOld extends Maintenance {
        /**
         * @todo document
diff --git a/maintenance/storage/drop_content_model_info.sql b/maintenance/storage/drop_content_model_info.sql
new file mode 100644 (file)
index 0000000..7bd9aba
--- /dev/null
@@ -0,0 +1,7 @@
+ALTER TABLE /*$wgDBprefix*/archive  DROP COLUMN ar_content_model;
+ALTER TABLE /*$wgDBprefix*/archive  DROP COLUMN ar_content_format;
+
+ALTER TABLE /*$wgDBprefix*/revision  DROP COLUMN rev_content_model;
+ALTER TABLE /*$wgDBprefix*/revision  DROP COLUMN rev_content_format;
+
+ALTER TABLE /*$wgDBprefix*/page  DROP COLUMN page_content_model;
index b200d8a..39f08f9 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Get the text of a revision, resolving external storage if needed.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that gets the text of a revision,
+ * resolving external storage if needed.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class DumpRev extends Maintenance {
        public function __construct() {
                parent::__construct();
index cf30b0e..d394558 100644 (file)
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script to fix bug 20757.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class FixBug20757 extends Maintenance {
-       var $batchSize = 10000;
-       var $mapCache = array();
-       var $mapCacheSize = 0;
-       var $maxMapCacheSize = 1000000;
+       public $batchSize = 10000;
+       public $mapCache = array();
+       public $mapCacheSize = 0;
+       public $maxMapCacheSize = 1000000;
 
        function __construct() {
                parent::__construct();
old mode 100755 (executable)
new mode 100644 (file)
index 64f3ada..2dcc25c 100644 (file)
@@ -24,8 +24,8 @@
 define( 'REPORTING_INTERVAL', 1 );
 
 if ( !defined( 'MEDIAWIKI' ) ) {
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
-       require_once( dirname( __FILE__ ) . '/../../includes/ExternalStoreDB.php' );
+       require_once( __DIR__ . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../../includes/ExternalStoreDB.php' );
        require_once( 'resolveStubs.php' );
 
        $fname = 'moveToExternal';
index f3b521f..4e24628 100644 (file)
@@ -1,7 +1,6 @@
 <?php
-
 /**
- * Show some statistics on the blob_orphans table, created with trackBlobs.php
+ * Show some statistics on the blob_orphans table, created with trackBlobs.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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance ExternalStorage
  */
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
 
+require_once( __DIR__ . '/../Maintenance.php' );
+
+/**
+ * Maintenance script that shows some statistics on the blob_orphans table,
+ * created with trackBlobs.php.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class OrphanStats extends Maintenance {
        public function __construct() {
                parent::__construct();
index 158aa34..fe62ddf 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 $optionsWithArgs = RecompressTracked::getOptionsWithArgs();
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 if ( count( $args ) < 1 ) {
        echo "Usage: php recompressTracked.php [options] <cluster> [... <cluster>...]
@@ -42,20 +42,26 @@ Options:
 $job = RecompressTracked::newFromCommandLine( $args, $options );
 $job->execute();
 
+/**
+ * Maintenance script that moves blobs indexed by trackBlobs.php to a specified
+ * list of destination clusters, and recompresses them in the process.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class RecompressTracked {
-       var $destClusters;
-       var $batchSize = 1000;
-       var $orphanBatchSize = 1000;
-       var $reportingInterval = 10;
-       var $numProcs = 1;
-       var $useDiff, $pageBlobClass, $orphanBlobClass;
-       var $slavePipes, $slaveProcs, $prevSlaveId;
-       var $copyOnly = false;
-       var $isChild = false;
-       var $slaveId = false;
-       var $noCount = false;
-       var $debugLog, $infoLog, $criticalLog;
-       var $store;
+       public $destClusters;
+       public $batchSize = 1000;
+       public $orphanBatchSize = 1000;
+       public $reportingInterval = 10;
+       public $numProcs = 1;
+       public $useDiff, $pageBlobClass, $orphanBlobClass;
+       public $slavePipes, $slaveProcs, $prevSlaveId;
+       public $copyOnly = false;
+       public $isChild = false;
+       public $slaveId = false;
+       public $noCount = false;
+       public $debugLog, $infoLog, $criticalLog;
+       public $store;
 
        static $optionsWithArgs = array( 'procs', 'slave-id', 'debug-log', 'info-log', 'critical-log' );
        static $cmdLineOptionMap = array(
@@ -670,10 +676,10 @@ class RecompressTracked {
  * Class to represent a recompression operation for a single CGZ blob
  */
 class CgzCopyTransaction {
-       var $parent;
-       var $blobClass;
-       var $cgz;
-       var $referrers;
+       public $parent;
+       public $blobClass;
+       public $cgz;
+       public $referrers;
 
        /**
         * Create a transaction from a RecompressTracked object
index 08d0ee0..0f5cd2b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Script to convert history stubs that point to an external row to direct
- * external pointers.
+ * Convert history stubs that point to an external row to direct external
+ * pointers.
  *
  * 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
@@ -27,7 +27,7 @@ define( 'REPORTING_INTERVAL', 100 );
 if ( !defined( 'MEDIAWIKI' ) ) {
        $optionsWithArgs = array( 'm' );
 
-       require_once( dirname( __FILE__ ) . '/../commandLine.inc' );
+       require_once( __DIR__ . '/../commandLine.inc' );
 
        resolveStubs();
 }
index 817659f..1afecc4 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup Maintenance ExternalStorage
  */
 
-require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 class StorageTypeStats extends Maintenance {
        function execute() {
index 9ae2633..9487bbf 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Test revision text compression and decompression.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Maintenance
- * @see wfWaitForSlaves()
+ * @ingroup Maintenance ExternalStorage
  */
 
 $optionsWithArgs = array( 'start', 'limit', 'type' );
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 if ( !isset( $args[0] )  ) {
        echo "Usage: php testCompression.php [--type=<type>] [--start=<start-date>] [--limit=<num-revs>] <page-title>\n";
@@ -65,7 +66,7 @@ $uncompressedSize = 0;
 $t = -microtime( true );
 foreach ( $res as $row ) {
        $revision = new Revision( $row );
-       $text = $revision->getText();
+       $text = $revision->getSerializedData();
        $uncompressedSize += strlen( $text );
        $hashes[$row->rev_id] = md5( $text );
        $keys[$row->rev_id] = $blob->addItem( $text );
index b5f8004..2f3c8c6 100644 (file)
@@ -22,7 +22,7 @@
  * @see wfWaitForSlaves()
  */
 
-require( dirname( __FILE__ ) . '/../commandLine.inc' );
+require( __DIR__ . '/../commandLine.inc' );
 
 
 if ( count( $args ) < 1 ) {
@@ -37,12 +37,12 @@ $tracker->run();
 echo "All done.\n";
 
 class TrackBlobs {
-       var $clusters, $textClause;
-       var $doBlobOrphans;
-       var $trackedBlobs = array();
+       public $clusters, $textClause;
+       public $doBlobOrphans;
+       public $trackedBlobs = array();
 
-       var $batchSize = 1000;
-       var $reportingInterval = 10;
+       public $batchSize = 1000;
+       public $reportingInterval = 10;
 
        function __construct( $clusters ) {
                $this->clusters = $clusters;
@@ -113,7 +113,7 @@ class TrackBlobs {
                        $dbw->query( 'DROP TABLE ' . $dbw->tableName( 'blob_tracking' ) );
                        $dbw->query( 'DROP TABLE ' . $dbw->tableName( 'blob_orphans' ) );
                }
-               $dbw->sourceFile( dirname( __FILE__ ) . '/blob_tracking.sql' );
+               $dbw->sourceFile( __DIR__ . '/blob_tracking.sql' );
        }
 
        function getTextClause() {
index 2dcf757..e279ccb 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that syncs one file backend to another based on
+ * the journal of later.
+ *
+ * @ingroup Maintenance
+ */
 class SyncFileBackend extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Sync one file backend with another using the journal";
                $this->addOption( 'src', 'Name of backend to sync from', true, true );
-               $this->addOption( 'dst', 'Name of destination backend to sync', true, true );
+               $this->addOption( 'dst', 'Name of destination backend to sync', false, true );
                $this->addOption( 'start', 'Starting journal ID', false, true );
                $this->addOption( 'end', 'Ending journal ID', false, true );
                $this->addOption( 'posdir', 'Directory to read/record journal positions', false, true );
+               $this->addOption( 'posdump', 'Just dump current journal position into the position dir.' );
                $this->addOption( 'verbose', 'Verbose mode', false, false, 'v' );
                $this->setBatchSize( 50 );
        }
 
        public function execute() {
                $src = FileBackendGroup::singleton()->get( $this->getOption( 'src' ) );
-               $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
 
                $posDir = $this->getOption( 'posdir' );
                $posFile = $posDir ? $posDir . '/' . wfWikiID() : false;
 
+               if ( $this->hasOption( 'posdump' ) ) {
+                       // Just dump the current position into the specified position dir
+                       if ( !$this->hasOption( 'posdir' ) ) {
+                               $this->error( "Param posdir required!", 1 );
+                       }
+                       $id = (int)$src->getJournal()->getCurrentPosition(); // default to 0
+                       $this->output( "Current journal position is $id.\n" );
+                       if ( file_put_contents( $posFile, $id, LOCK_EX ) !== false ) {
+                               $this->output( "Saved journal position file.\n" );
+                       } else {
+                               $this->output( "Could not save journal position file.\n" );
+                       }
+                       if ( $this->isQuiet() ) {
+                               print $id; // give a single machine-readable number
+                       }
+                       return;
+               }
+
+               if ( !$this->hasOption( 'dst' ) ) {
+                       $this->error( "Param dst required!", 1 );
+               }
+               $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
+
                $start = $this->getOption( 'start', 0 );
                if ( !$start && $posFile && is_dir( $posDir ) ) {
                        $start = is_file( $posFile )
@@ -202,7 +232,11 @@ class SyncFileBackend extends Maintenance {
                }
 
                $t_start = microtime( true );
-               $status->merge( $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) ) );
+               $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
+               if ( !$status->isOK() ) {
+                       sleep( 10 ); // wait and retry copy again
+                       $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
+               }
                $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( $status->isOK() && $this->getOption( 'verbose' ) ) {
                        $this->output( "Synchronized these file(s) [{$ellapsed_ms}ms]:\n" .
index 0a5b2fb..4a707fd 100644 (file)
@@ -260,7 +260,10 @@ CREATE TABLE /*_*/page (
   page_latest int unsigned NOT NULL,
 
   -- Uncompressed length in bytes of the page's current source text.
-  page_len int unsigned NOT NULL
+  page_len int unsigned NOT NULL,
+
+  -- content model, see CONTENT_MODEL_XXX constants
+  page_content_model  int unsigned  default NULL
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
@@ -316,7 +319,13 @@ CREATE TABLE /*_*/revision (
   rev_parent_id int unsigned default NULL,
 
   -- SHA-1 text content hash in base-36
-  rev_sha1 varbinary(32) NOT NULL default ''
+  rev_sha1 varbinary(32) NOT NULL default '',
+
+  -- content model, see CONTENT_MODEL_XXX constants
+  rev_content_model  int unsigned  default NULL,
+
+  -- content format, see CONTENT_FORMAT_XXX constants
+  rev_content_format int unsigned  default NULL
 
 ) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
 -- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit
@@ -427,7 +436,14 @@ CREATE TABLE /*_*/archive (
   ar_parent_id int unsigned default NULL,
 
   -- SHA-1 text content hash in base-36
-  ar_sha1 varbinary(32) NOT NULL default ''
+  ar_sha1 varbinary(32) NOT NULL default '',
+
+  -- content model, see CONTENT_MODEL_XXX constants
+  ar_content_model  int unsigned default NULL,
+
+  -- content format, see CONTENT_FORMAT_XXX constants
+  ar_content_format int unsigned default NULL
+
 ) /*$wgDBTableOptions*/;
 
 CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
@@ -571,10 +587,7 @@ CREATE TABLE /*_*/category (
   -- ing is not.
   cat_pages int signed NOT NULL default 0,
   cat_subcats int signed NOT NULL default 0,
-  cat_files int signed NOT NULL default 0,
-
-  -- Reserved for future use
-  cat_hidden tinyint unsigned NOT NULL default 0
+  cat_files int signed NOT NULL default 0
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
@@ -692,9 +705,6 @@ CREATE TABLE /*_*/site_stats (
   -- Number of users that still edit
   ss_active_users bigint default '-1',
 
-  -- Deprecated, no longer updated as of 1.5
-  ss_admins int default '-1',
-
   -- Number of images, equivalent to SELECT COUNT(*) FROM image
   ss_images int default 0
 ) /*$wgDBTableOptions*/;
@@ -849,7 +859,7 @@ CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
 -- Used by Special:Newimages and Special:ListFiles
 CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
 -- Used in API and duplicate search
-CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
 
 
 --
@@ -887,7 +897,7 @@ CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timest
 CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
 -- oi_archive_name truncated to 14 to avoid key length overflow
 CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
-CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
 
 
 --
@@ -1048,10 +1058,6 @@ CREATE TABLE /*_*/recentchanges (
   -- The type of change entry (RC_EDIT,RC_NEW,RC_LOG)
   rc_type tinyint unsigned NOT NULL default 0,
 
-  -- These may no longer be used, with the new move log.
-  rc_moved_to_ns tinyint unsigned NOT NULL default 0,
-  rc_moved_to_title varchar(255) binary NOT NULL default '',
-
   -- If the Recent Changes Patrol option is enabled,
   -- users may mark edits as having been reviewed to
   -- remove a warning flag on the RC list.
index ca0f95d..1cb97f9 100644 (file)
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Testing
+ * @ingroup Maintenance Testing
  * @todo Fixme: Make this more generic
  */
 
 /**
  * Terminal that supports ANSI escape sequences.
+ *
+ * @ingroup Maintenance Testing
  */
 class AnsiTermColorer {
        function __construct() {
@@ -56,6 +58,8 @@ class AnsiTermColorer {
 
 /**
  * A colour-less terminal
+ *
+ * @ingroup Maintenance Testing
  */
 class DummyTermColorer {
        public function color( $color ) {
index 1c3b14a..ea8b0c4 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 class Undelete extends Maintenance {
        public function __construct() {
index 741ec90..877f136 100644 (file)
@@ -32,8 +32,13 @@ if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '
 }
 
 $wgUseMasterForMaintenance = true;
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to run database schema updates.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateMediaWiki extends Maintenance {
 
        function __construct() {
index dbbfb80..4d49dd2 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Maintenance script to provide a better count of the number of articles
- * and update the site statistics table, if desired
+ * Provide a better count of the number of articles
+ * and update the site statistics table, if desired.
  *
  * 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 Rob Church <robchur@gmail.com>
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to provide a better count of the number of articles
+ * and update the site statistics table, if desired.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateArticleCount extends Maintenance {
 
        public function __construct() {
index 2363665..04a2d47 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Script will find all rows in the categorylinks table whose collation is
- * out-of-date (cl_collation != $wgCategoryCollation) and repopulate cl_sortkey
+ * Find all rows in the categorylinks table whose collation is out-of-date
+ * (cl_collation != $wgCategoryCollation) and repopulate cl_sortkey
  * using the page title and cl_sortkey_prefix.
  *
  * This program is free software; you can redistribute it and/or modify
 
 #$optionsWithArgs = array( 'begin', 'max-slave-lag' );
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that will find all rows in the categorylinks table
+ * whose collation is out-of-date.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateCollation extends Maintenance {
        const BATCH_SIZE = 50; // Number of rows to process in one batch
        const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
 
-       var $sizeHistogram = array();
+       public $sizeHistogram = array();
 
        public function __construct() {
                parent::__construct();
@@ -53,8 +59,8 @@ TEXT;
                        'collation, though, so it may miss out-of-date rows with a different, ' .
                        'even older collation.', false, true );
                $this->addOption( 'target-collation', 'Set this to the new collation type to ' .
-                       'use instead of $wgCategoryCollation. Usually you should not use this, ' . 
-                       'you should just update $wgCategoryCollation in LocalSettings.php.', 
+                       'use instead of $wgCategoryCollation. Usually you should not use this, ' .
+                       'you should just update $wgCategoryCollation in LocalSettings.php.',
                        false, true );
                $this->addOption( 'dry-run', 'Don\'t actually change the collations, just ' .
                        'compile statistics.' );
index 61545f8..dc7398a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to normalize double-byte latin UTF-8 characters
+ * Normalize double-byte latin UTF-8 characters
  *
  * Usage: php updateDoubleWidthSearch.php
  *
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to normalize double-byte latin UTF-8 characters.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateDoubleWidthSearch extends Maintenance {
 
        public function __construct() {
index ffbdb2b..8699dc2 100644 (file)
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script that updates page_restrictions table from
+ * old page_restriction column.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateRestrictions extends Maintenance {
        public function __construct() {
                parent::__construct();
index eed3571..ac78484 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script for periodic off-peak updating of the search index
+ * Periodic off-peak updating of the search index.
  *
  * Usage: php updateSearchIndex.php [-s START] [-e END] [-p POSFILE] [-l LOCKTIME] [-q]
  * Where START is the starting timestamp
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script for periodic off-peak updating of the search index.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateSearchIndex extends Maintenance {
 
        public function __construct() {
@@ -91,9 +96,9 @@ class UpdateSearchIndex extends Maintenance {
                $end = $dbw->timestamp( $end );
 
                $page = $dbw->tableName( 'page' );
-               $sql = "SELECT rc_cur_id,rc_type,rc_moved_to_ns,rc_moved_to_title FROM $recentchanges
+               $sql = "SELECT rc_cur_id FROM $recentchanges
                  JOIN $page ON rc_cur_id=page_id AND rc_this_oldid=page_latest
-                 WHERE rc_timestamp BETWEEN '$start' AND '$end'
+                 WHERE rc_type != " . RC_LOG . " AND rc_timestamp BETWEEN '$start' AND '$end'
                  ";
                $res = $dbw->query( $sql, __METHOD__ );
 
@@ -103,17 +108,7 @@ class UpdateSearchIndex extends Maintenance {
        }
 
        public function searchIndexUpdateCallback( $dbw, $row ) {
-               if ( $row->rc_type == RC_MOVE || $row->rc_type == RC_MOVE_OVER_REDIRECT ) {
-                       # Rename searchindex entry
-                       $titleObj = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title );
-                       $title = $titleObj->getPrefixedDBkey();
-                       $this->output( "$title..." );
-                       $u = new SearchUpdate( $row->rc_cur_id, $title, false );
-                       $u->doUpdate();
-                       $this->output( "\n" );
-               } elseif ( $row->rc_type !== RC_LOG ) {
-                       $this->updateSearchIndexForPage( $dbw, $row->rc_cur_id );
-               }
+               $this->updateSearchIndexForPage( $dbw, $row->rc_cur_id );
        }
 }
 
index a1a2e2f..3f1a90b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Run this script periodically if you have miser mode enabled, to refresh the
- * caches
+ * Update for cached special pages.
+ * Run this script periodically if you have miser mode enabled.
  *
  * 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
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to update cached special pages.
+ *
+ * @ingroup Maintenance
+ */
 class UpdateSpecialPages extends Maintenance {
        public function __construct() {
                parent::__construct();
index f0807b6..1e268de 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Maintenance
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 define( 'MW_UPGRADE_COPY',     false );
 define( 'MW_UPGRADE_ENCODE',   true  );
@@ -252,7 +252,7 @@ class FiveUpgrade extends Maintenance {
                $this->chunkSize  = $chunksize;
                $this->chunkFinal = $final;
                $this->chunkCount = 0;
-               $this->chunkStartTime = wfTime();
+               $this->chunkStartTime = microtime( true );
                $this->chunkOptions = array( 'IGNORE' );
                $this->chunkTable = $table;
                $this->chunkFunction = $fname;
@@ -273,7 +273,7 @@ class FiveUpgrade extends Maintenance {
                        $this->insertChunk( $chunk );
 
                        $this->chunkCount += count( $chunk );
-                       $now = wfTime();
+                       $now = microtime( true );
                        $delta = $now - $this->chunkStartTime;
                        $rate = $this->chunkCount / $delta;
 
index 5e35747..2a06657 100644 (file)
@@ -25,7 +25,7 @@
 $options = array( 'list', 'nowarn', 'quiet', 'usage', 'dry' );
 $optionsWithArgs = array( 'old', 'new' );
 
-require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( __DIR__ . '/commandLine.inc' );
 
 /**
  * @ingroup Maintenance
index 64368f6..2181e44 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 /**
- * Script to change users skins on the fly.
- * This is for at least MediaWiki 1.10alpha (r19611) and have not been
- * tested with previous versions. It should probably work with 1.7+.
+ * Script to change users preferences on the fly.
  *
  * Made on an original idea by Fooey (freenode)
  *
index 720ca28..655be43 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to wait until slave lag goes under a certain value.
+ * Wait until slave lag goes under a certain value.
  *
  * 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
  * @see wfWaitForSlaves()
  */
 
-require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
+/**
+ * Maintenance script to wait until slave lag goes under a certain value.
+ *
+ * @ingroup Maintenance
+ */
 class WaitForSlave extends Maintenance {
        public function __construct() {
                $this->addArg( 'maxlag', 'How long to wait for the slaves, default 10 seconds', false );
index 3f993f0..2823210 100644 (file)
@@ -2,17 +2,32 @@
 /**
  * New version of MediaWiki web-based config/installation
  *
+ * 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_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );
 
-chdir( dirname( dirname( __FILE__ ) ) );
+chdir( dirname( __DIR__ ) );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require( dirname( dirname( __FILE__ ) ) . '/includes/WebStart.php' );
+       require( dirname( __DIR__ ) . '/includes/WebStart.php' );
 }
 
 wfInstallerMain();
index 8e6ceda..8e9c368 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Version of mw-config/index.php to used in web server requiring .php5
+ * extension to execute scripts with PHP5 egine.
+ *
+ * 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_INSTALL_PHP5_EXT', 1);
 require './index.php';
index ae98295..d3d85bb 100644 (file)
@@ -5,6 +5,23 @@
  * Altering it is preferred over changing anything in /includes.
  *
  * Note: this file doesn't gets included from a global scope, don't use globals directly.
+ *
+ * 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
  */
 
 /*
index 630b05c..95f028a 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-require_once( dirname(__FILE__) . '/includes/WebStart.php' );
+require_once( __DIR__ . '/includes/WebStart.php' );
 
 if( $wgRequest->getVal( 'ctype' ) == 'application/xml' ) {
        // Makes testing tweaks about a billion times easier
index ef038c1..068c58b 100644 (file)
@@ -31,65 +31,135 @@ $wgEnableProfileInfo = $wgProfileToDatabase = false;
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'core/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 
 header( 'Content-Type: text/html; charset=utf-8' );
 
 ?>
+<!DOCTYPE html>
 <html>
 <head>
+<meta charset="UTF-8">
 <title>Profiling data</title>
-<style type="text/css">
-       th {
-               text-align: left;
-               border-bottom: solid 1px black;
+<style>
+       /* noc.wikimedia.org/base.css */
+
+       * {
+               margin: 0;
+               padding: 0;
        }
 
-       th, td {
-               padding-left: 0.5em;
-               padding-right: 0.5em;
+       body {
+               padding: 0.5em 1em;
+               background: #fff;
+               font: 14px/1.6 sans-serif;
+               color: #333;
        }
 
-       td.timep, td.memoryp, td.count, td.cpr, td.tpc, td.mpc, td.tpr, td.mpr {
-               text-align: right;
+       p, ul, ol, table {
+               margin: 0.5em 0;
        }
-       td.timep, td.tpc, td.tpr {
-               background-color: #ffff80;
+
+       a {
+               color: #0645AD;
+               text-decoration: none;
        }
-       td.memoryp, td.mpc, td.mpr {
-               background-color: #80f8ff;
+
+       a:hover {
+               text-decoration: underline;
        }
-       td.count, td,cpr {
-               background-color: #80ff80;
+
+       /*!
+        * Bootstrap v2.1.1
+        *
+        * Copyright 2012 Twitter, Inc
+        * Licensed under the Apache License v2.0
+        * http://www.apache.org/licenses/LICENSE-2.0
+        *
+        * Designed and built with all the love in the world @twitter by @mdo and @fat.
+        */
+
+       table {
+               max-width: 100%;
+               background-color: transparent;
+               border-collapse: collapse;
+               border-spacing: 0;
        }
-       td.name {
-               background-color: #89f9f9;
+
+       .table {
+               width: 100%;
+               margin-bottom: 20px;
+       }
+
+       .table th,
+       .table td {
+               padding: 8px;
+               line-height: 20px;
+               text-align: left;
+               vertical-align: top;
+               border-top: 1px solid #ddd;
        }
 
-       tr:hover {
+       .table th {
                font-weight: bold;
        }
+
+       .table thead th {
+               vertical-align: bottom;
+       }
+
+       .table thead:first-child tr:first-child th,
+       .table thead:first-child tr:first-child td {
+               border-top: 0;
+       }
+
+       .table tbody + tbody {
+               border-top: 2px solid #ddd;
+       }
+
+       .table-condensed th,
+       .table-condensed td {
+               padding: 4px 5px;
+       }
+
+       .table-striped tbody tr:nth-child(odd) td,
+       .table-striped tbody tr:nth-child(odd) th {
+               background-color: #f9f9f9;
+       }
+
+       .table-hover tbody tr:hover td,
+       .table-hover tbody tr:hover th {
+               background-color: #f5f5f5;
+       }
+
+       hr {
+               margin: 20px 0;
+               border: 0;
+               border-top: 1px solid #eee;
+               border-bottom: 1px solid #fff;
+       }
+
 </style>
 </head>
 <body>
 <?php
 
 if ( !$wgEnableProfileInfo ) {
-       echo "<p>Disabled</p>\n";
-       echo "</body></html>";
+       echo '<p>Disabled</p>'
+               . '</body></html>';
        exit( 1 );
 }
 
 $dbr = wfGetDB( DB_SLAVE );
 
 if( !$dbr->tableExists( 'profiling' ) ) {
-       echo "<p>No 'profiling' table exists, so we can't show you anything.</p>\n";
-       echo "<p>If you want to log profiling data, create the table using "
-               . "<tt>maintenance/archives/patch-profiling.sql</tt> and enable "
-               . "<tt>\$wgProfileToDatabase</tt>.</p>\n";
-       echo "</body></html>";
+       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>'
+               . '</body></html>';
        exit( 1 );
 }
 
@@ -126,7 +196,7 @@ class profile_point {
                if ( !$ex ) {
                        if ( count( $this->children ) ) {
                                $url = getEscapedProfileUrl( false, false, $expand + array( $this->name() => true ) );
-                               $extet = " <a href=\"$url\">[+]</a>";
+                               $extet = ' <a href="' . $url . '">[+]</a>';
                        } else {
                                $extet = '';
                        }
@@ -138,21 +208,21 @@ class profile_point {
                                }
                        }
 
-                       $extet = " <a href=\"" . getEscapedProfileUrl( false, false, $e ) . "\">[–]</a>";
+                       $extet = ' <a href="' . getEscapedProfileUrl( false, false, $e ) . '">[–]</a>';
                }
                ?>
                <tr>
-               <td class="name" style="padding-left: <?php echo $indent ?>em;">
+               <th><div style="margin-left: <?php echo (int)$indent; ?>em;">
                        <?php echo htmlspecialchars( $this->name() ) . $extet ?>
-               </td>
-               <td class="timep"><?php echo @wfPercent( $this->time() / self::$totaltime * 100 ) ?></td>
-               <td class="memoryp"><?php echo @wfPercent( $this->memory() / self::$totalmemory * 100 ) ?></td>
-               <td class="count"><?php echo $this->count() ?></td>
-               <td class="cpr"><?php echo round( sprintf( '%.2f', $this->callsPerRequest() ), 2 ) ?></td>
-               <td class="tpc"><?php echo round( sprintf( '%.2f', $this->timePerCall() ), 2 ) ?></td>
-               <td class="mpc"><?php echo round( sprintf( '%.2f' ,$this->memoryPerCall() / 1024 ), 2 ) ?></td>
-               <td class="tpr"><?php echo @round( sprintf( '%.2f', $this->time() / self::$totalcount ), 2 ) ?></td>
-               <td class="mpr"><?php echo @round( sprintf( '%.2f' ,$this->memory() / self::$totalcount / 1024 ), 2 ) ?></td>
+               </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>
+               <td class="mw-profileinfo-count"><?php echo $this->count(); ?></td>
+               <td class="mw-profileinfo-cpr"><?php echo round( sprintf( '%.2f', $this->callsPerRequest() ), 2 ); ?></td>
+               <td class="mw-profileinfo-tpc"><?php echo round( sprintf( '%.2f', $this->timePerCall() ), 2 ); ?></td>
+               <td class="mw-profileinfo-mpc"><?php echo round( sprintf( '%.2f' ,$this->memoryPerCall() / 1024 ), 2 ); ?></td>
+               <td class="mw-profileinfo-tpr"><?php echo @round( sprintf( '%.2f', $this->time() / self::$totalcount ), 2 ); ?></td>
+               <td class="mw-profileinfo-mpr"><?php echo @round( sprintf( '%.2f' ,$this->memory() / self::$totalcount / 1024 ), 2 ); ?></td>
                </tr>
                <?php
                if ( $ex ) {
@@ -173,56 +243,56 @@ class profile_point {
        function time() {
                return $this->time;
        }
-       
+
        function memory() {
                return $this->memory;
        }
-       
+
        function timePerCall() {
                return @( $this->time / $this->count );
        }
-       
+
        function memoryPerCall() {
                return @( $this->memory / $this->count );
        }
-       
+
        function callsPerRequest() {
                return @( $this->count / self::$totalcount );
        }
-       
+
        function timePerRequest() {
                return @( $this->time / self::$totalcount );
        }
-       
+
        function memoryPerRequest() {
                return @( $this->memory / self::$totalcount );
        }
 
        function fmttime() {
-               return sprintf( "%5.02f", $this->time );
+               return sprintf( '%5.02f', $this->time );
        }
 };
 
 function compare_point(profile_point $a, profile_point $b) {
        global $sort;
        switch ( $sort ) {
-       case "name":
+       case 'name':
                return strcmp( $a->name(), $b->name() );
-       case "time":
+       case 'time':
                return $a->time() > $b->time() ? -1 : 1;
-       case "memory":
+       case 'memory':
                return $a->memory() > $b->memory() ? -1 : 1;
-       case "count":
+       case 'count':
                return $a->count() > $b->count() ? -1 : 1;
-       case "time_per_call":
+       case 'time_per_call':
                return $a->timePerCall() > $b->timePerCall() ? -1 : 1;
-       case "memory_per_call":
+       case 'memory_per_call':
                return $a->memoryPerCall() > $b->memoryPerCall() ? -1 : 1;
-       case "calls_per_req":
+       case 'calls_per_req':
                return $a->callsPerRequest() > $b->callsPerRequest() ? -1 : 1;
-       case "time_per_req":
+       case 'time_per_req':
                return $a->timePerRequest() > $b->timePerRequest() ? -1 : 1;
-       case "memory_per_req":
+       case 'memory_per_req':
                return $a->memoryPerRequest() > $b->memoryPerRequest() ? -1 : 1;
        }
 }
@@ -243,25 +313,28 @@ else
 ?>
 <form method="get" action="profileinfo.php">
 <p>
-<input type="text" name="filter" value="<?php echo htmlspecialchars($filter)?>"/>
-<input type="hidden" name="sort" value="<?php echo htmlspecialchars($sort)?>"/>
-<input type="hidden" name="expand" value="<?php echo htmlspecialchars(implode(",", array_keys($expand)))?>"/>
-<input type="submit" value="Filter" />
+<input type="text" name="filter" value="<?php echo htmlspecialchars($filter); ?>">
+<input type="hidden" name="sort" value="<?php echo htmlspecialchars($sort); ?>">
+<input type="hidden" name="expand" value="<?php echo htmlspecialchars(implode(",", array_keys($expand))); ?>">
+<input type="submit" value="Filter">
 </p>
 </form>
 
-<table cellspacing="0" border="1">
-<tr id="top">
-<th><a href="<?php echo getEscapedProfileUrl( false, 'name' ) ?>">Name</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'time' ) ?>">Time (%)</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'memory' ) ?>">Memory (%)</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'count' ) ?>">Count</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'calls_per_req' ) ?>">Calls/req</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'time_per_call' ) ?>">ms/call</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'memory_per_call' ) ?>">kb/call</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'time_per_req' ) ?>">ms/req</a></th>
-<th><a href="<?php echo getEscapedProfileUrl( false, 'memory_per_req' ) ?>">kb/req</a></th>
-</tr>
+<table class="mw-profileinfo-table table table-striped table-hover">
+       <thead>
+               <tr>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'name' ); ?>">Name</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'time' ); ?>">Time (%)</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'memory' ); ?>">Memory (%)</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'count' ); ?>">Count</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'calls_per_req' ); ?>">Calls/req</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'time_per_call' ); ?>">ms/call</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'memory_per_call' ); ?>">kb/call</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'time_per_req' ); ?>">ms/req</a></th>
+                       <th><a href="<?php echo getEscapedProfileUrl( false, 'memory_per_req' ); ?>">kb/req</a></th>
+               </tr>
+       </thead>
+       <tbody>
 <?php
 profile_point::$totaltime = 0.0;
 profile_point::$totalcount = 0;
@@ -274,11 +347,11 @@ function getEscapedProfileUrl( $_filter = false, $_sort = false, $_expand = fals
                $_expand = $expand;
 
        return htmlspecialchars(
-               '?' . 
+               '?' .
                wfArrayToCGI( array(
                        'filter' => $_filter ? $_filter : $filter,
                        'sort' => $_sort ? $_sort : $sort,
-                       'expand' => implode( ',', array_keys( $_expand ) ) 
+                       'expand' => implode( ',', array_keys( $_expand ) )
                ) )
        );
 }
@@ -296,13 +369,13 @@ foreach( $res as $o ) {
                profile_point::$totalmemory = $next->memory();
        }
        if ( $last !== false ) {
-               if ( preg_match( "/^".preg_quote( $last->name(), "/" )."/", $next->name() ) ) {
+               if ( preg_match( '/^'.preg_quote( $last->name(), '/' ).'/', $next->name() ) ) {
                        $last->add_child($next);
                        continue;
                }
        }
        $last = $next;
-       if ( preg_match( "/^query: /", $next->name() ) || preg_match( "/^query-m: /", $next->name() ) ) {
+       if ( preg_match( '/^query: /', $next->name() ) || preg_match( '/^query-m: /', $next->name() ) ) {
                $sqltotal += $next->time();
                $queries[] = $next;
        } else {
@@ -310,12 +383,12 @@ foreach( $res as $o ) {
        }
 }
 
-$s = new profile_point( "SQL Queries", 0, $sqltotal, 0, 0 );
+$s = new profile_point( 'SQL Queries', 0, $sqltotal, 0, 0 );
 foreach ( $queries as $q )
        $s->add_child($q);
 $points[] = $s;
 
-usort( $points, "compare_point" );
+usort( $points, 'compare_point' );
 
 foreach ( $points as $point ) {
        if ( strlen( $filter ) && !strstr( $point->name(), $filter ) )
@@ -324,9 +397,11 @@ foreach ( $points as $point ) {
        $point->display( $expand );
 }
 ?>
+       </tbody>
 </table>
-
-<p>Total time: <tt><?php printf("%5.02f", profile_point::$totaltime) ?></tt></p>
-<p>Total memory: <tt><?php printf("%5.02f", profile_point::$totalmemory / 1024 ) ?></tt></p>
+<hr>
+<p>Total time: <code><?php printf('%5.02f', profile_point::$totaltime); ?></code></p>
+<p>Total memory: <code><?php printf('%5.02f', profile_point::$totalmemory / 1024 ); ?></code></p>
+<hr>
 </body>
 </html>
index fde960e..5e6cfee 100644 (file)
@@ -24,7 +24,7 @@
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require ( 'phase3/includes/WebStart.php' );
 } else {
-       require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require ( __DIR__ . '/includes/WebStart.php' );
 }
 
 global $wgArticlePath;
index 380a099..cccc645 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Definition of core ResourceLoader modules.
+ *
+ * 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
+ */
 
 return array(
 
@@ -160,6 +180,7 @@ return array(
        ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/jquery/jquery.highlightText.js',
+               'dependencies' => 'jquery.mwExtension',
        ),
        'jquery.hoverIntent' => array(
                'scripts' => 'resources/jquery/jquery.hoverIntent.js',
@@ -175,10 +196,6 @@ return array(
                'styles' => 'resources/jquery/jquery.makeCollapsible.css',
                'messages' => array( 'collapsible-expand', 'collapsible-collapse' ),
        ),
-       'jquery.messageBox' => array(
-               'scripts' => 'resources/jquery/jquery.messageBox.js',
-               'styles' => 'resources/jquery/jquery.messageBox.css',
-       ),
        'jquery.mockjax' => array(
                'scripts' => 'resources/jquery/jquery.mockjax.js',
        ),
@@ -204,6 +221,10 @@ return array(
                'scripts' => 'resources/jquery/jquery.spinner.js',
                'styles' => 'resources/jquery/jquery.spinner.css',
        ),
+       'jquery.jStorage' => array(
+               'scripts' => 'resources/jquery/jquery.jStorage.js',
+               'dependencies' => 'jquery.json',
+       ),
        'jquery.suggestions' => array(
                'scripts' => 'resources/jquery/jquery.suggestions.js',
                'styles' => 'resources/jquery/jquery.suggestions.css',
@@ -216,6 +237,7 @@ return array(
                'scripts' => 'resources/jquery/jquery.tablesorter.js',
                'styles' => 'resources/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
+               'dependencies' => 'jquery.mwExtension',
        ),
        'jquery.textSelection' => array(
                'scripts' => 'resources/jquery/jquery.textSelection.js',
@@ -602,6 +624,29 @@ return array(
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
        ),
+       'mediawiki.notification' => array(
+               'styles' => 'resources/mediawiki/mediawiki.notification.css',
+               'scripts' => 'resources/mediawiki/mediawiki.notification.js',
+               'dependencies' => array(
+                       'mediawiki.page.startup',
+               ),
+       ),
+       'mediawiki.notify' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.notify.js',
+       ),
+       'mediawiki.searchSuggest' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.searchSuggest.js',
+               'messages' => array(
+                       'searchsuggest-search',
+                       'searchsuggest-containing',
+               ),
+               'dependencies' => array(
+                       'jquery.autoEllipsis',
+                       'jquery.client',
+                       'jquery.placeholder',
+                       'jquery.suggestions',
+               ),
+       ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/mediawiki/mediawiki.Title.js',
                'dependencies' => 'mediawiki.util',
@@ -614,6 +659,8 @@ return array(
                'dependencies' => array(
                        'jquery.cookie',
                        'mediawiki.api',
+                       'user.options',
+                       'user.tokens',
                ),
        ),
        'mediawiki.util' => array(
@@ -621,8 +668,8 @@ return array(
                'dependencies' => array(
                        'jquery.client',
                        'jquery.cookie',
-                       'jquery.messageBox',
                        'jquery.mwExtension',
+                       'mediawiki.notify',
                ),
                'messages' => array( 'showtoc', 'hidetoc' ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
@@ -638,6 +685,13 @@ return array(
                ),
                'position' => 'top',
        ),
+       'mediawiki.action.edit.preview' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.preview.js',
+               'dependencies' => array(
+                       'jquery.form',
+                       'jquery.spinner',
+               ),
+       ),
        'mediawiki.action.history' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
                'group' => 'mediawiki.action.history',
@@ -648,7 +702,10 @@ return array(
        ),
        'mediawiki.action.view.dblClickEdit' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
-               'dependencies' => 'mediawiki.util',
+               'dependencies' => array(
+                       'mediawiki.util',
+                       'mediawiki.page.startup',
+               ),
        ),
        'mediawiki.action.view.metadata' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.metadata.js',
@@ -670,56 +727,35 @@ return array(
        'mediawiki.language' => array(
                'scripts' => 'resources/mediawiki.language/mediawiki.language.js',
                'languageScripts' => array(
-                       'am' => 'resources/mediawiki.language/languages/am.js',
-                       'ar' => 'resources/mediawiki.language/languages/ar.js',
-                       'bat-smg' => 'resources/mediawiki.language/languages/bat-smg.js',
-                       'be' => 'resources/mediawiki.language/languages/be.js',
-                       'be-tarask' => 'resources/mediawiki.language/languages/be-tarask.js',
-                       'bh' => 'resources/mediawiki.language/languages/bh.js',
                        'bs' => 'resources/mediawiki.language/languages/bs.js',
-                       'cs' => 'resources/mediawiki.language/languages/cs.js',
-                       'cu' => 'resources/mediawiki.language/languages/cu.js',
-                       'cy' => 'resources/mediawiki.language/languages/cy.js',
                        'dsb' => 'resources/mediawiki.language/languages/dsb.js',
                        'fi' => 'resources/mediawiki.language/languages/fi.js',
-                       'fr' => 'resources/mediawiki.language/languages/fr.js',
                        'ga' => 'resources/mediawiki.language/languages/ga.js',
-                       'gd' => 'resources/mediawiki.language/languages/gd.js',
-                       'gv' => 'resources/mediawiki.language/languages/gv.js',
                        'he' => 'resources/mediawiki.language/languages/he.js',
-                       'hi' => 'resources/mediawiki.language/languages/hi.js',
-                       'hr' => 'resources/mediawiki.language/languages/hr.js',
                        'hsb' => 'resources/mediawiki.language/languages/hsb.js',
                        'hu' => 'resources/mediawiki.language/languages/hu.js',
                        'hy' => 'resources/mediawiki.language/languages/hy.js',
-                       'ksh' => 'resources/mediawiki.language/languages/ksh.js',
                        'la' => 'resources/mediawiki.language/languages/la.js',
-                       'ln' => 'resources/mediawiki.language/languages/ln.js',
-                       'lt' => 'resources/mediawiki.language/languages/lt.js',
-                       'lv' => 'resources/mediawiki.language/languages/lv.js',
-                       'mg' => 'resources/mediawiki.language/languages/mg.js',
-                       'mk' => 'resources/mediawiki.language/languages/mk.js',
-                       'mo' => 'resources/mediawiki.language/languages/mo.js',
-                       'mt' => 'resources/mediawiki.language/languages/mt.js',
-                       'nso' => 'resources/mediawiki.language/languages/nso.js',
                        'os' => 'resources/mediawiki.language/languages/os.js',
-                       'pl' => 'resources/mediawiki.language/languages/pl.js',
-                       'ro' => 'resources/mediawiki.language/languages/ro.js',
                        'ru' => 'resources/mediawiki.language/languages/ru.js',
-                       'se' => 'resources/mediawiki.language/languages/se.js',
-                       'sh' => 'resources/mediawiki.language/languages/sh.js',
-                       'sk' => 'resources/mediawiki.language/languages/sk.js',
                        'sl' => 'resources/mediawiki.language/languages/sl.js',
-                       'sma' => 'resources/mediawiki.language/languages/sma.js',
-                       'sr-ec' => 'resources/mediawiki.language/languages/sr-ec.js',
-                       'sr-el' => 'resources/mediawiki.language/languages/sr-el.js',
-                       'sr' => 'resources/mediawiki.language/languages/sr.js',
-                       'ti' => 'resources/mediawiki.language/languages/ti.js',
-                       'tl' => 'resources/mediawiki.language/languages/tl.js',
                        'uk' => 'resources/mediawiki.language/languages/uk.js',
-                       'wa' => 'resources/mediawiki.language/languages/wa.js',
                ),
-               'dependencies' => array( 'mediawiki.language.data' ),
+               'dependencies' => array(
+                               'mediawiki.language.data',
+                               'mediawiki.cldr'
+                       ),
+       ),
+
+       'mediawiki.cldr' => array(
+               'scripts' => 'resources/mediawiki.language/mediawiki.cldr.js',
+               'dependencies' => array(
+                       'mediawiki.libs.pluralruleparser',
+               ),
+       ),
+
+       'mediawiki.libs.pluralruleparser' => array(
+               'scripts' => 'resources/mediawiki.libs/CLDRPluralRuleParser.js',
        ),
 
        'mediawiki.language.init' => array(
@@ -765,7 +801,9 @@ return array(
                'dependencies' => array(
                        'mediawiki.page.startup',
                        'mediawiki.api.watch',
-                       'mediawiki.util'
+                       'mediawiki.util',
+                       'mediawiki.notify',
+                       'jquery.mwExtension',
                ),
                'messages' => array(
                        'watch',
@@ -896,19 +934,6 @@ return array(
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
-       'mediawiki.legacy.mwsuggest' => array(
-               'scripts' => 'common/mwsuggest.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-               'dependencies' => 'mediawiki.legacy.wikibits',
-               'messages' => array( 'search-mwsuggest-enabled', 'search-mwsuggest-disabled' ),
-       ),
-       'mediawiki.legacy.preview' => array(
-               'scripts' => 'common/preview.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-               'dependencies' => 'mediawiki.legacy.wikibits',
-       ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'common/protect.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
index 0149ed7..1e99769 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Blind 1.8.22
+ * jQuery UI Effects Blind 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e376cb9..7927a4a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Bounce 1.8.22
+ * jQuery UI Effects Bounce 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1ae4209..d8b8218 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Clip 1.8.22
+ * jQuery UI Effects Clip 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index a0efe68..91ac575 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects 1.8.22
+ * jQuery UI Effects 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -307,7 +307,7 @@ $.fn.extend({
 /******************************************************************************/
 
 $.extend($.effects, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        // Saves a set of properties in a data storage
        save: function(element, set) {
@@ -564,210 +564,49 @@ $.fn.extend({
 /*********************************** EASING ***********************************/
 /******************************************************************************/
 
-/*
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
- *
- * Uses the built in easing capabilities added In jQuery 1.1
- * to offer multiple easing options
- *
- * TERMS OF USE - jQuery Easing
- *
- * Open source under the BSD License.
- *
- * Copyright 2008 George McGinley Smith
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * Neither the name of the author nor the names of contributors may be used to endorse
- * or promote products derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-*/
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
 
-// t: current time, b: begInnIng value, c: change In value, d: duration
-$.easing.jswing = $.easing.swing;
+var baseEasings = {};
 
-$.extend($.easing,
-{
-       def: 'easeOutQuad',
-       swing: function (x, t, b, c, d) {
-               //alert($.easing.default);
-               return $.easing[$.easing.def](x, t, b, c, d);
-       },
-       easeInQuad: function (x, t, b, c, d) {
-               return c*(t/=d)*t + b;
-       },
-       easeOutQuad: function (x, t, b, c, d) {
-               return -c *(t/=d)*(t-2) + b;
-       },
-       easeInOutQuad: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t + b;
-               return -c/2 * ((--t)*(t-2) - 1) + b;
-       },
-       easeInCubic: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t + b;
-       },
-       easeOutCubic: function (x, t, b, c, d) {
-               return c*((t=t/d-1)*t*t + 1) + b;
-       },
-       easeInOutCubic: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t + b;
-               return c/2*((t-=2)*t*t + 2) + b;
-       },
-       easeInQuart: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t*t + b;
-       },
-       easeOutQuart: function (x, t, b, c, d) {
-               return -c * ((t=t/d-1)*t*t*t - 1) + b;
-       },
-       easeInOutQuart: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
-               return -c/2 * ((t-=2)*t*t*t - 2) + b;
-       },
-       easeInQuint: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t*t*t + b;
-       },
-       easeOutQuint: function (x, t, b, c, d) {
-               return c*((t=t/d-1)*t*t*t*t + 1) + b;
-       },
-       easeInOutQuint: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
-               return c/2*((t-=2)*t*t*t*t + 2) + b;
-       },
-       easeInSine: function (x, t, b, c, d) {
-               return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
-       },
-       easeOutSine: function (x, t, b, c, d) {
-               return c * Math.sin(t/d * (Math.PI/2)) + b;
-       },
-       easeInOutSine: function (x, t, b, c, d) {
-               return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
-       },
-       easeInExpo: function (x, t, b, c, d) {
-               return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
-       },
-       easeOutExpo: function (x, t, b, c, d) {
-               return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
-       },
-       easeInOutExpo: function (x, t, b, c, d) {
-               if (t==0) return b;
-               if (t==d) return b+c;
-               if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
-               return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
-       },
-       easeInCirc: function (x, t, b, c, d) {
-               return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
-       },
-       easeOutCirc: function (x, t, b, c, d) {
-               return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
-       },
-       easeInOutCirc: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
-               return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
-       },
-       easeInElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
-       },
-       easeOutElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
-       },
-       easeInOutElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
-               return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
-       },
-       easeInBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158;
-               return c*(t/=d)*t*((s+1)*t - s) + b;
-       },
-       easeOutBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158;
-               return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+       baseEasings[ name ] = function( p ) {
+               return Math.pow( p, i + 2 );
+       };
+});
+
+$.extend( baseEasings, {
+       Sine: function ( p ) {
+               return 1 - Math.cos( p * Math.PI / 2 );
        },
-       easeInOutBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158;
-               if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
-               return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+       Circ: function ( p ) {
+               return 1 - Math.sqrt( 1 - p * p );
        },
-       easeInBounce: function (x, t, b, c, d) {
-               return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+       Elastic: function( p ) {
+               return p === 0 || p === 1 ? p :
+                       -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
        },
-       easeOutBounce: function (x, t, b, c, d) {
-               if ((t/=d) < (1/2.75)) {
-                       return c*(7.5625*t*t) + b;
-               } else if (t < (2/2.75)) {
-                       return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
-               } else if (t < (2.5/2.75)) {
-                       return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
-               } else {
-                       return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
-               }
+       Back: function( p ) {
+               return p * p * ( 3 * p - 2 );
        },
-       easeInOutBounce: function (x, t, b, c, d) {
-               if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
-               return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+       Bounce: function ( p ) {
+               var pow2,
+                       bounce = 4;
+
+               while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+               return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
        }
 });
 
-/*
- *
- * TERMS OF USE - EASING EQUATIONS
- *
- * Open source under the BSD License.
- *
- * Copyright 2001 Robert Penner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * Neither the name of the author nor the names of contributors may be used to endorse
- * or promote products derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
+$.each( baseEasings, function( name, easeIn ) {
+       $.easing[ "easeIn" + name ] = easeIn;
+       $.easing[ "easeOut" + name ] = function( p ) {
+               return 1 - easeIn( 1 - p );
+       };
+       $.easing[ "easeInOut" + name ] = function( p ) {
+               return p < .5 ?
+                       easeIn( p * 2 ) / 2 :
+                       easeIn( p * -2 + 2 ) / -2 + 1;
+       };
+});
 
 })(jQuery);
index dc5ce44..6d25bd3 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Drop 1.8.22
+ * jQuery UI Effects Drop 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6be5582..1caeca8 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Explode 1.8.22
+ * jQuery UI Effects Explode 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c76e6bf..6124979 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fade 1.8.22
+ * jQuery UI Effects Fade 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1788066..81b15b8 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fold 1.8.22
+ * jQuery UI Effects Fold 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 451b02d..dee0639 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Highlight 1.8.22
+ * jQuery UI Effects Highlight 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f989174..45cdc88 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Pulsate 1.8.22
+ * jQuery UI Effects Pulsate 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d5761a5..44ecee1 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Scale 1.8.22
+ * jQuery UI Effects Scale 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6c2a8db..bc1fd19 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Shake 1.8.22
+ * jQuery UI Effects Shake 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c77fad6..0a43027 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Slide 1.8.22
+ * jQuery UI Effects Slide 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 5a68ae8..64f2a17 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Transfer 1.8.22
+ * jQuery UI Effects Transfer 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d3dbdec..b3340e0 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.22
+ * jQuery UI Accordion 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -518,7 +518,7 @@ $.widget( "ui.accordion", {
 });
 
 $.extend( $.ui.accordion, {
-       version: "1.8.22",
+       version: "1.8.23",
        animations: {
                slide: function( options, additions ) {
                        options = $.extend({
index 501b604..b634cce 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.22
+ * jQuery UI Autocomplete 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index bdee27c..db2637e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.22
+ * jQuery UI Button 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 40211cc..1285a6d 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI 1.8.22
+ * jQuery UI 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -18,7 +18,7 @@ if ( $.ui.version ) {
 }
 
 $.extend( $.ui, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        keyCode: {
                ALT: 18,
index 58d3ff2..7ea5b07 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.22
+ * jQuery UI Datepicker 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -12,7 +12,7 @@
  */
 (function( $, undefined ) {
 
-$.extend($.ui, { datepicker: { version: "1.8.22" } });
+$.extend($.ui, { datepicker: { version: "1.8.23" } });
 
 var PROP_NAME = 'datepicker';
 var dpuuid = new Date().getTime();
@@ -1408,7 +1408,7 @@ $.extend(Datepicker.prototype, {
         */
        _attachHandlers: function(inst) {
                var stepMonths = this._get(inst, 'stepMonths');
-               var id = '#' + inst.id;
+               var id = '#' + inst.id.replace( /\\\\/g, "\\" );
                inst.dpDiv.find('[data-handler]').map(function () {
                        var handler = {
                                prev: function () {
@@ -1845,7 +1845,7 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.8.22";
+$.datepicker.version = "1.8.23";
 
 // Workaround for #4055
 // Add another global to avoid noConflict issues with inline event handlers
index bc66af5..082bf2c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.22
+ * jQuery UI Dialog 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -37,18 +37,6 @@ var uiDialogClasses =
                maxWidth: true,
                minHeight: true,
                minWidth: true
-       },
-       // support for jQuery 1.3.2 - handle common attrFn methods for dialog
-       attrFn = $.attrFn || {
-               val: true,
-               css: true,
-               html: true,
-               text: true,
-               data: true,
-               width: true,
-               height: true,
-               offset: true,
-               click: true
        };
 
 $.widget("ui.dialog", {
@@ -397,7 +385,7 @@ $.widget("ui.dialog", {
                                        if ( key === "click" ) {
                                                return;
                                        }
-                                       if ( key in attrFn ) {
+                                       if ( key in button ) {
                                                button[ key ]( value );
                                        } else {
                                                button.attr( key, value );
@@ -702,7 +690,7 @@ $.widget("ui.dialog", {
 });
 
 $.extend($.ui.dialog, {
-       version: "1.8.22",
+       version: "1.8.23",
 
        uuid: 0,
        maxZ: 0,
index f93bb0b..6da1aaf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Draggable 1.8.22
+ * jQuery UI Draggable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -513,7 +513,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 });
 
 $.extend($.ui.draggable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 $.ui.plugin.add("draggable", "connectToSortable", {
index f4ae96a..4b98b3a 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Droppable 1.8.22
+ * jQuery UI Droppable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -147,7 +147,7 @@ $.widget("ui.droppable", {
 });
 
 $.extend($.ui.droppable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 $.ui.intersect = function(draggable, droppable, toleranceMode) {
index c7f37d2..e051055 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Mouse 1.8.22
+ * jQuery UI Mouse 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -45,9 +45,11 @@ $.widget("ui.mouse", {
        // other instances of mouse
        _mouseDestroy: function() {
                this.element.unbind('.'+this.widgetName);
-               $(document)
-                       .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
-                       .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+               if ( this._mouseMoveDelegate ) {
+                       $(document)
+                               .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+                               .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+               }
        },
 
        _mouseDown: function(event) {
index 881dffe..03f2606 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Position 1.8.22
+ * jQuery UI Position 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -257,6 +257,11 @@ if ( !$.offset.setOffset ) {
        };
 }
 
+// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css
+if ( !$.curCSS ) {
+       $.curCSS = $.css;
+}
+
 // fraction support test (older versions of jQuery don't support fractions)
 (function () {
        var body = document.getElementsByTagName( "body" )[ 0 ], 
index 70ab985..c1d9f3c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.22
+ * jQuery UI Progressbar 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -103,7 +103,7 @@ $.widget( "ui.progressbar", {
 });
 
 $.extend( $.ui.progressbar, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })( jQuery );
index d8f6c88..f6ce694 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.22
+ * jQuery UI Resizable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -540,7 +540,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 });
 
 $.extend($.ui.resizable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 /*
index 9d9e553..ac5bf04 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.22
+ * jQuery UI Selectable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -261,7 +261,7 @@ $.widget("ui.selectable", $.ui.mouse, {
 });
 
 $.extend($.ui.selectable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })(jQuery);
index 4b24fb9..5ea589e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.22
+ * jQuery UI Slider 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -656,7 +656,7 @@ $.widget( "ui.slider", $.ui.mouse, {
 });
 
 $.extend( $.ui.slider, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 }(jQuery));
index 0e11f46..1d87f65 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Sortable 1.8.22
+ * jQuery UI Sortable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -1078,7 +1078,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 });
 
 $.extend($.ui.sortable, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 })(jQuery);
index 7a50626..de453cc 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.22
+ * jQuery UI Tabs 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -698,7 +698,7 @@ $.widget( "ui.tabs", {
 });
 
 $.extend( $.ui.tabs, {
-       version: "1.8.22"
+       version: "1.8.23"
 });
 
 /*
index 8a9cc3f..befdcc2 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Widget 1.8.22
+ * jQuery UI Widget 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e15202f..1ce7d5e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.22
+ * jQuery UI Accordion 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index c697c3d..a9817ce 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.22
+ * jQuery UI Autocomplete 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -13,7 +13,7 @@
 * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
 
 /*
- * jQuery UI Menu 1.8.22
+ * jQuery UI Menu 1.8.23
  *
  * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d4984fb..c1f2600 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.22
+ * jQuery UI Button 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f8e7e5b..c24627e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.22
+ * jQuery UI CSS Framework 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d543625..0282eee 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.22
+ * jQuery UI Datepicker 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index bd264da..ba50ba5 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.22
+ * jQuery UI Dialog 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 8f3774e..c775a33 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.22
+ * jQuery UI Progressbar 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 568b570..420c4af 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.22
+ * jQuery UI Resizable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 54d504b..3320274 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.22
+ * jQuery UI Selectable 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index e0f7bea..650ad7e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.22
+ * jQuery UI Slider 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6da4af3..64ac9bf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.22
+ * jQuery UI Tabs 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 36b331c..536c8e0 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.22
+ * jQuery UI CSS Framework 1.8.23
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
diff --git a/resources/jquery/images/spinner-large.gif b/resources/jquery/images/spinner-large.gif
new file mode 100644 (file)
index 0000000..72203fd
Binary files /dev/null and b/resources/jquery/images/spinner-large.gif differ
index 37d3a43..6146be4 100644 (file)
Binary files a/resources/jquery/images/spinner.gif and b/resources/jquery/images/spinner.gif differ
index 1b414dd..488d106 100644 (file)
  * </script>
  *
  */
-
 ( function ( $ ) {
        $.fn.arrowSteps = function () {
+               var $steps, width, arrowWidth;
                this.addClass( 'arrowSteps' );
-               var $steps = this.find( 'li' );
+               $steps = this.find( 'li' );
 
-               var width = parseInt( 100 / $steps.length, 10 );
+               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.
-               var arrowWidth = parseInt( this.outerHeight(), 10 );
+               arrowWidth = parseInt( this.outerHeight(), 10 );
                $steps.filter( ':not(:last-child)' ).addClass( 'arrow' )
                      .find( 'div' ).css( 'padding-right', arrowWidth.toString() + 'px' );
 
@@ -60,8 +60,8 @@
        };
 
        $.fn.arrowStepsHighlight = function ( selector ) {
-               var $steps = this.data( 'arrowSteps' );
-               var $previous;
+               var $previous,
+                       $steps = this.data( 'arrowSteps' );
                $.each( $steps, function ( i, step ) {
                        var $step = $( step );
                        if ( $step.is( selector ) ) {
index 23ba074..04bb301 100644 (file)
@@ -3,10 +3,12 @@
  */
 ( function ( $ ) {
 
-// Cache ellipsed substrings for every string-width-position combination
-var cache = { };
-// Use a separate cache when match highlighting is enabled
-var matchTextCache = { };
+var
+       // Cache ellipsed substrings for every string-width-position combination
+       cache = { },
+
+       // Use a separate cache when match highlighting is enabled
+       matchTextCache = { };
 
 $.fn.autoEllipsis = function ( options ) {
        options = $.extend( {
@@ -19,7 +21,7 @@ $.fn.autoEllipsis = function ( options ) {
        $(this).each( function () {
                var $container, $trimmableText,
                        text, trimmableText, w, pw,
-                       l, r, i, side,
+                       l, r, i, side, m,
                        $el = $(this);
                if ( options.restoreText ) {
                        if ( !$el.data( 'autoEllipsis.originalText' ) ) {
@@ -90,7 +92,7 @@ $.fn.autoEllipsis = function ( options ) {
                                        l = 0;
                                        r = trimmableText.length;
                                        do {
-                                               var m = Math.ceil( ( l + r ) / 2 );
+                                               m = Math.ceil( ( l + r ) / 2 );
                                                $trimmableText.text( trimmableText.substr( 0, m ) + '...' );
                                                if ( $trimmableText.width() + pw > w ) {
                                                        // Text is too long
index 49063ba..92e7255 100644 (file)
@@ -2,19 +2,19 @@
        min-width: 8px;
        height: 14px;
        border: 1px solid white;
-       border-radius: 8px;
        -moz-border-radius: 8px;
        -webkit-border-radius: 8px;
-       box-shadow: 0px 1px 4px #ccc;
+       border-radius: 8px;
        -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: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        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: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
+       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
        padding: 0 3px;
        text-align: center;
 }
index d40acc6..04495b7 100644 (file)
@@ -1,9 +1,16 @@
-// Badger v1.0 by Daniel Raftery
-// http://thrivingkings.com/badger
-// http://twitter.com/ThrivingKings
-// Modified by Ryan Kaldari <rkaldari@wikimedia.org>
+/**
+ * jQuery Badge plugin
+ *
+ * Based on Badger plugin by Daniel Raftery (http://thrivingkings.com/badger).
+ *
+ * @license MIT
+ */
 
 /**
+ * @author Ryan Kaldari <rkaldari@wikimedia.org>, 2012
+ * @author Andrew Garrett <agarrett@wikimedia.org>, 2012
+ * @author Marius Hoch <hoo@online.de>, 2012
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  *
  * This program is distributed WITHOUT ANY WARRANTY.
  */
+( function ( $ ) {
 
-(function( $ ) {
-       $.fn.badge = function( badge, options ) {
-               var existingBadge = this.find( '.mw-badge' );
-               options = $.extend( {}, options );
+       /**
+        * Allows you to put a numeric "badge" on an item on the page.
+        * 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
+        */
+       $.fn.badge = function ( badgeCount, options ) {
+               var $badge,
+                       oldBadgeCount,
+                       newBadgeCount,
+                       $existingBadge = this.find( '.mw-badge' );
 
-               badge = String(badge);
-               if ( badge.charAt(0) === '+' ) {
-                       if ( existingBadge.length > 0 ) {
-                               oldBadge = existingBadge.text();
-                               badge = Math.round( Number( oldBadge ) + Number( badge.substr(1) ) );
-                       } else {
-                               badge = badge.substr(1);
-                       }
-               } else if ( badge.charAt(0) === '-' ) {
-                       if ( existingBadge.length > 0 ) {
-                               oldBadge = existingBadge.text();
-                               badge = Math.round( Number( oldBadge ) - Number( badge.substr(1) ) );
+               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;
+               }
+
+               // 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 {
-                               badge = 0;
+                               newBadgeCount = 0;
                        }
+               // Other types are not supported, fall back to 0.
+               } else {
+                       newBadgeCount = 0;
                }
 
-               if ( Number(badge) <= 0 ) {
-                       // Clear any existing badge
-                       existingBadge.remove();
+               // 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
-                       var $badge = existingBadge;
-                       if ( existingBadge.length > 0 ) {
-                               this.find( '.mw-badge-content' ).text( badge );
+                       if ( $existingBadge.length ) {
+                               $badge = $existingBadge;
+                               // Insert the new count into the badge
+                               this.find( '.mw-badge-content' ).text( newBadgeCount );
                        } else {
-                               $badge = $('<div/>')
-                                       .addClass('mw-badge')
-                                       .addClass('mw-badge-overlay')
+                               // Contruct a new badge with the count
+                               $badge = $( '<div>' )
+                                       .addClass( 'mw-badge' )
                                        .append(
-                                               $('<span/>')
-                                                       .addClass('mw-badge-content')
-                                                       .text(badge)
+                                               $( '<span>' )
+                                                       .addClass( 'mw-badge-content' )
+                                                       .text( newBadgeCount )
                                        );
-                               this.append($badge);
+                               this.append( $badge );
                        }
 
-                       if ( options.type ) {
-                               if ( options.type == 'inline' ) {
-                                       $badge.removeClass('mw-badge-overlay')
-                                               .addClass('mw-badge-inline');
-                               } else if ( options.type == 'overlay' ) {
-                                       $badge.removeClass('mw-badge-inline')
-                                               .addClass('mw-badge-overlay');
-                               }
+                       if ( options.type === 'inline' ) {
+                               $badge
+                                       .removeClass( 'mw-badge-overlay' )
+                                       .addClass( 'mw-badge-inline' );
+                       // Default: overlay
+                       } else {
+                               $badge
+                                       .removeClass( 'mw-badge-inline' )
+                                       .addClass( 'mw-badge-overlay' );
+
                        }
 
-                       // If a callback was specified, call it with the badge number
-                       if ( options.callback ) {
-                               options.callback( badge );
+                       // If a callback was specified, call it with the badge count
+                       if ( $.isFunction( options.callback ) ) {
+                               options.callback( newBadgeCount );
                        }
                }
        };
-} ) ( jQuery );
+}( jQuery ) );
index 484651e..75dc2b9 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * jQuery byteLimit plugin
+ * jQuery byteLimit plugin.
  *
  * @author Jan Paul Posma, 2011
  * @author Timo Tijhof, 2011-2012
 ( function ( $ ) {
 
        /**
-        * Enforces a byte limit to a textbox, so that UTF-8 entries are counted as well, when, for example,
-        * a database field has a byte limit rather than a character limit.
-        * Plugin rationale: Browser has native maxlength for number of characters, this plugin exists to
-        * limit number of bytes instead.
+        * Utility function to trim down a string, based on byteLimit
+        * and given a safe start position. It supports insertion anywhere
+        * in the string, so "foo" to "fobaro" if limit is 4 will result in
+        * "fobo", not "foba". Basically emulating the native maxlength by
+        * reconstructing where the insertion occured.
         *
-        * Can be called with a custom limit (to use that limit instead of the maxlength attribute value),
-        * a filter function (in case the limit should apply to something other than the exact input value),
-        * or both. Order of arguments is important!
+        * @param {string} safeVal Known value that was previously returned by this
+        * function, if none, pass empty string.
+        * @param {string} newVal New value that may have to be trimmed down.
+        * @param {number} byteLimit Number of bytes the value may be in size.
+        * @param {Function} fn [optional] See $.fn.byteLimit.
+        * @return {Object} Object with:
+        *  - {string} newVal
+        *  - {boolean} trimmed
+        */
+       function trimValForByteLength( safeVal, newVal, byteLimit, fn ) {
+               var startMatches, endMatches, matchesLen, inpParts,
+                       oldVal = safeVal;
+
+               // Run the hook if one was provided, but only on the length
+               // assessment. The value itself is not to be affected by the hook.
+               if ( $.byteLength( fn ? fn( newVal ) : newVal ) <= byteLimit ) {
+                       // Limit was not reached, just remember the new value
+                       // and let the user continue.
+                       return {
+                               newVal: newVal,
+                               trimmed: false
+                       };
+               }
+
+               // Current input is longer than the active limit.
+               // Figure out what was added and limit the addition.
+               startMatches = 0;
+               endMatches = 0;
+
+               // It is important that we keep the search within the range of
+               // the shortest string's length.
+               // Imagine a user adds text that matches the end of the old value
+               // (e.g. "foo" -> "foofoo"). startMatches would be 3, but without
+               // limiting both searches to the shortest length, endMatches would
+               // also be 3.
+               matchesLen = Math.min( newVal.length, oldVal.length );
+
+               // Count same characters from the left, first.
+               // (if "foo" -> "foofoo", assume addition was at the end).
+               while (
+                       startMatches < matchesLen &&
+                       oldVal.charAt( startMatches ) === newVal.charAt( startMatches )
+               ) {
+                       startMatches += 1;
+               }
+
+               while (
+                       endMatches < ( matchesLen - startMatches ) &&
+                       oldVal.charAt( oldVal.length - 1 - endMatches ) === newVal.charAt( newVal.length - 1 - endMatches )
+               ) {
+                       endMatches += 1;
+               }
+
+               inpParts = [
+                       // Same start
+                       newVal.substring( 0, startMatches ),
+                       // Inserted content
+                       newVal.substring( startMatches, newVal.length - endMatches ),
+                       // Same end
+                       newVal.substring( newVal.length - endMatches )
+               ];
+
+               // Chop off characters from the end of the "inserted content" string
+               // until the limit is statisfied.
+               if ( fn ) {
+                       while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit ) {
+                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                       }
+               } else {
+                       while ( $.byteLength( inpParts.join( '' ) ) > byteLimit ) {
+                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                       }
+               }
+
+               newVal = inpParts.join( '' );
+
+               return {
+                       newVal: newVal,
+                       trimmed: true
+               };
+       }
+
+       var eventKeys = [
+               'keyup.byteLimit',
+               'keydown.byteLimit',
+               'change.byteLimit',
+               'mouseup.byteLimit',
+               'cut.byteLimit',
+               'paste.byteLimit',
+               'focus.byteLimit',
+               'blur.byteLimit'
+       ].join( ' ' );
+
+       /**
+        * Enforces a byte limit on an input field, so that UTF-8 entries are counted as well,
+        * when, for example, a database field has a byte limit rather than a character limit.
+        * Plugin rationale: Browser has native maxlength for number of characters, this plugin
+        * exists to limit number of bytes instead.
+        *
+        * Can be called with a custom limit (to use that limit instead of the maxlength attribute
+        * value), a filter function (in case the limit should apply to something other than the
+        * exact input value), or both. Order of parameters is important!
         *
         * @context {jQuery} Instance of jQuery for one or more input elements
-        * @param limit {Number} [optional] Limit to enforce, fallsback to maxLength-attribute,
-        * called with fetched value as argument.
-        * @param fn {Function} [optional] Function to call on the input string before assessing the length
+        * @param {Number} limit [optional] Limit to enforce, fallsback to maxLength-attribute,
+        *  called with fetched value as argument.
+        * @param {Function} fn [optional] Function to call on the string before assessing the length.
         * @return {jQuery} The context
         */
        $.fn.byteLimit = function ( limit, fn ) {
                if ( $.isFunction( limit ) ) {
                        fn = limit;
                        limit = undefined;
+               // Either way, verify it is a function so we don't have to call
+               // isFunction again after this.
+               } else if ( !fn || !$.isFunction( fn ) ) {
+                       fn = undefined;
                }
 
-               // The following is specific to each element in the collection
+               // The following is specific to each element in the collection.
                return this.each( function ( i, el ) {
-                       var $el, elLimit;
+                       var $el, elLimit, prevSafeVal;
 
                        $el = $( el );
 
-                       // Default limit to current attribute value
+                       // If no limit was passed to byteLimit(), use the maxlength value.
                        // Can't re-use 'limit' variable because it's in the higher scope
-                       // that affects the next each() iteration as well.
-                       elLimit = limit === undefined ? $el.prop( 'maxLength' ) : limit;
-       
+                       // that would affect the next each() iteration as well.
+                       // Note that we use attribute to read the value instead of property,
+                       // because in Chrome the maxLength property by default returns the
+                       // highest supported value (no indication that it is being enforced
+                       // by choice). We don't want to bind all of this for some ridiculously
+                       // high default number, unless it was explicitly set in the HTML.
+                       // Also cast to a (primitive) number (most commonly because the maxlength
+                       // attribute contains a string, but theoretically the limit parameter
+                       // could be something else as well).
+                       elLimit = Number( limit === undefined ? $el.attr( 'maxlength' ) : limit );
+
                        // If there is no (valid) limit passed or found in the property,
                        // skip this. The < 0 check is required for Firefox, which returns
                        // -1  (instead of undefined) for maxLength if it is not set.
                                return;
                        }
 
-                       // Update/set attribute value, but only if there is no callback set.
-                       // If there's a callback set, it's possible that the limit being enforced
-                       // is too low (ie. if the callback would return "Foo" for "User:Foo").
-                       // Usually this isn't a problem since browsers ignore maxLength when setting
-                       // the value property through JavaScript, but Safari 4 violates that rule, so
-                       // we have to remove or not set the property if we have a callback.
-                       if ( fn === undefined ) {
-                               $el.prop( 'maxLength', elLimit );
+                       if ( fn ) {
+                               // Save function for reference
+                               $el.data( 'byteLimit.callback', fn );
+                       }
+
+                       // Remove old event handlers (if there are any)
+                       $el.off( '.byteLimit' );
+
+                       if ( fn ) {
+                               // Disable the native maxLength (if there is any), because it interferes
+                               // with the (differently calculated) byte limit.
+                               // Aside from being differently calculated (average chars with byteLimit
+                               // is lower), we also support a callback which can make it to allow longer
+                               // values (e.g. count "Foo" from "User:Foo").
+                               // maxLength is a strange property. Removing or setting the property to
+                               // undefined directly doesn't work. Instead, it can only be unset internally
+                               // by the browser when removing the associated attribute (Firefox/Chrome).
+                               // http://code.google.com/p/chromium/issues/detail?id=136004
+                               $el.removeAttr( 'maxlength' );
+
                        } else {
-                               $el.removeProp( 'maxLength' );
+                               // If we don't have a callback the bytelimit can only be lower than the charlimit
+                               // (that is, there are no characters less than 1 byte in size). So lets (re-)enforce
+                               // the native limit for efficiency when possible (it will make the while-loop below
+                               // faster by there being less left to interate over).
+                               $el.attr( 'maxlength', elLimit );
                        }
-       
-                       // Save function for reference
-                       $el.data( 'byteLimitCallback', fn );
-       
-                       // We've got something, go for it:
-                       $el.keypress( function ( e ) {
-                               var val, len, charLen;
-                               // First check to see if this is actually a character key
-                               // being pressed.
-                               // Based on key-event info from http://unixpapa.com/js/key.html
-                               // jQuery should also normalize e.which to be consistent cross-browser,
-                               // however the same check is still needed regardless of jQuery.
-       
-                               // Note: At the moment, for some older opera versions (~< 10.5)
-                               // some special keys won't be recognized (aka left arrow key).
-                               // Backspace will be, so not big issue.
-       
-                               if ( e.which === 0 || e.charCode === 0 || e.which === 8 ||
-                                       e.ctrlKey || e.altKey || e.metaKey )
-                               {
-                                       // A special key (backspace, etc) so don't interfere
-                                       return true;
-                               }
-       
-                               val = fn !== undefined ? fn( $( this ).val() ): $( this ).val();
-                               len = $.byteLength( val );
-                               // Note that keypress returns a character code point, not a keycode.
-                               // However, this may not be super reliable depending on how keys come in...
-                               charLen = $.byteLength( String.fromCharCode( e.which ) );
-       
-                               if ( ( len + charLen ) > elLimit ) {
-                                       e.preventDefault();
+
+
+                       // Safe base value, used to determine the path between the previous state
+                       // and the state that triggered the event handler below - and enforce the
+                       // limit approppiately (e.g. don't chop from the end if text was inserted
+                       // at the beginning of the string).
+                       prevSafeVal = '';
+
+                       // We need to listen to after the change has already happened because we've
+                       // learned that trying to guess the new value and canceling the event
+                       // accordingly doesn't work because the new value is not always as simple as:
+                       // oldValue + String.fromCharCode( e.which ); because of cut, paste, select-drag
+                       // replacements, and custom input methods and what not.
+                       // Even though we only trim input after it was changed (never prevent it), we do
+                       // listen on events that input text, because there are cases where the text has
+                       // changed while text is being entered and keyup/change will not be fired yet
+                       // (such as holding down a single key, fires keydown, and after each keydown,
+                       // we can trim the previous one).
+                       // See http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboard-event-order for
+                       // the order and characteristics of the key events.
+                       $el.on( eventKeys, function () {
+                               var res = trimValForByteLength(
+                                       prevSafeVal,
+                                       this.value,
+                                       elLimit,
+                                       fn
+                               );
+
+                               // Only set value property if it was trimmed, because whenever the
+                               // value property is set, the browser needs to re-initiate the text context,
+                               // which moves the cursor at the end the input, moving it away from wherever it was.
+                               // This is a side-effect of limiting after the fact.
+                               if ( res.trimmed === true ) {
+                                       this.value = res.newVal;
+                                       prevSafeVal = res.newVal;
                                }
-                       });
-               });
+                       } );
+               } );
        };
 }( jQuery ) );
index 3d7f94d..1990dc0 100644 (file)
@@ -6,10 +6,9 @@
  * @author Krinkle <krinklemail@gmail.com>
  * @license GPL v2
  */
-( function( $ ) {
+( function ( $ ) {
        $.fn.checkboxShiftClick = function ( text ) {
-               var prevCheckbox = null;
-               var $box = this;
+               var prevCheckbox = null, $box = this;
                // When our boxes are clicked..
                $box.click( function ( e ) {
                        // And one has been clicked before...
@@ -18,7 +17,7 @@
                                $box.slice(
                                        Math.min( $box.index( prevCheckbox ), $box.index( e.target ) ),
                                        Math.max( $box.index( prevCheckbox ), $box.index( e.target ) ) + 1
-                               ).prop( 'checked', e.target.checked ? true : false );
+                               ).prop( 'checked', !!e.target.checked );
                        }
                        // Either way, update the prevCheckbox variable to the one clicked now
                        prevCheckbox = e.target;
index 26eea96..24f8959 100644 (file)
@@ -32,7 +32,7 @@
                 *  }
                 */
                profile: function ( nav ) {
-                       /*jshint boss:true */
+                       /*jshint boss: true */
 
                        if ( nav === undefined ) {
                                nav = window.navigator;
index a3396a2..063f260 100644 (file)
        $.fn.expandableField = function () {
 
                // Multi-context fields
-               var returnValue;
-               var args = arguments;
+               var returnValue,
+                       args = arguments;
 
                $( this ).each( function () {
-                       var key;
+                       var key, context;
 
                        /* Construction / Loading */
 
-                       var context = $( this ).data( 'expandableField-context' );
+                       context = $( this ).data( 'expandableField-context' );
 
                        // TODO: Do we need to check both null and undefined?
                        if ( context === undefined || context === null ) {
index fa4416c..0844da7 100644 (file)
@@ -9,8 +9,9 @@
 
                // Split our pattern string at spaces and run our highlight function on the results
                splitAndHighlight: function ( node, pat ) {
-                       var patArray = pat.split( ' ' );
-                       for ( var i = 0; i < patArray.length; i++ ) {
+                       var i,
+                               patArray = pat.split( ' ' );
+                       for ( i = 0; i < patArray.length; i++ ) {
                                if ( patArray[i].length === 0 ) {
                                        continue;
                                }
 
                // scans a node looking for the pattern and wraps a span around each match
                innerHighlight: function ( node, pat ) {
+                       var i, match, pos, spannode, middlebit, middleclone;
                        // if this is a text node
                        if ( node.nodeType === 3 ) {
                                // TODO - need to be smarter about the character matching here.
                                // 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
-                               var match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
+                               match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
                                if ( match ) {
-                                       var pos = match.index + match[1].length; // include length of any matched spaces
+                                       pos = match.index + match[1].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
-                                       var spannode = document.createElement( 'span' );
+                                       spannode = document.createElement( 'span' );
                                        spannode.className = 'highlight';
                                        // shave off the characters preceding the matched text
-                                       var middlebit = node.splitText( pos );
+                                       middlebit = node.splitText( pos );
                                        // shave off any unmatched text off the end
                                        middlebit.splitText( pat.length );
                                        // clone for appending to our span
-                                       var middleclone = middlebit.cloneNode( true );
+                                       middleclone = middlebit.cloneNode( true );
                                        // append the matched text node to the span
                                        spannode.appendChild( middleclone );
                                        // replace the matched node, with our span-wrapped clone of the matched node
@@ -47,7 +49,7 @@
                        // if this is an element with childnodes, and not a script, style or an element we created
                        } else if ( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test( node.tagName )
                                        && !( node.tagName.toLowerCase() === 'span' && node.className.match( /\bhighlight/ ) ) ) {
-                               for ( var i = 0; i < node.childNodes.length; ++i ) {
+                               for ( i = 0; i < node.childNodes.length; ++i ) {
                                        // call the highlight function for each child node
                                        $.highlightText.innerHighlight( node.childNodes[i], pat );
                                }
diff --git a/resources/jquery/jquery.jStorage.js b/resources/jquery/jquery.jStorage.js
new file mode 100644 (file)
index 0000000..6ca21b5
--- /dev/null
@@ -0,0 +1,1143 @@
+/*
+ * ----------------------------- JSTORAGE -------------------------------------
+ * Simple local storage wrapper to save data on the browser side, supporting
+ * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
+ *
+ * Copyright (c) 2010 - 2012 Andris Reinman, andris.reinman@gmail.com
+ * Project homepage: www.jstorage.info
+ *
+ * Licensed under MIT-style license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+ (function(){
+    var
+        /* jStorage version */
+        JSTORAGE_VERSION = "0.3.0",
+
+        /* detect a dollar object or create one if not found */
+        $ = window.jQuery || window.$ || (window.$ = {}),
+
+        /* check for a JSON handling support */
+        JSON = {
+            parse:
+                window.JSON && (window.JSON.parse || window.JSON.decode) ||
+                String.prototype.evalJSON && function(str){return String(str).evalJSON();} ||
+                $.parseJSON ||
+                $.evalJSON,
+            stringify:
+                Object.toJSON ||
+                window.JSON && (window.JSON.stringify || window.JSON.encode) ||
+                $.toJSON
+        };
+
+    // Break if no JSON support was found
+    if(!JSON.parse || !JSON.stringify){
+        throw new Error("No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page");
+    }
+
+    var
+        /* This is the object, that holds the cached values */
+        _storage = {},
+
+        /* Actual browser storage (localStorage or globalStorage['domain']) */
+        _storage_service = {jStorage:"{}"},
+
+        /* DOM element for older IE versions, holds userData behavior */
+        _storage_elm = null,
+
+        /* How much space does the storage take */
+        _storage_size = 0,
+
+        /* which backend is currently used */
+        _backend = false,
+
+        /* onchange observers */
+        _observers = {},
+
+        /* timeout to wait after onchange event */
+        _observer_timeout = false,
+
+        /* last update time */
+        _observer_update = 0,
+
+        /* pubsub observers */
+        _pubsub_observers = {},
+
+        /* skip published items older than current timestamp */
+        _pubsub_last = +new Date(), 
+
+        /* Next check for TTL */
+        _ttl_timeout,
+
+        /* crc32 table */
+        _crc32Table = "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 "+
+             "0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 "+
+             "6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 "+
+             "FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 "+
+             "A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 "+
+             "32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 "+
+             "56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 "+
+             "C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 "+
+             "E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 "+
+             "6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 "+
+             "12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE "+
+             "A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 "+
+             "DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 "+
+             "5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 "+
+             "2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF "+
+             "04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 "+
+             "7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 "+
+             "FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 "+
+             "A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C "+
+             "36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 "+
+             "5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 "+
+             "C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 "+
+             "EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D "+
+             "7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 "+
+             "18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 "+
+             "A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A "+
+             "D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A "+
+             "53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 "+
+             "2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D",
+
+        /**
+         * XML encoding and decoding as XML nodes can't be JSON'ized
+         * XML nodes are encoded and decoded if the node is the value to be saved
+         * but not if it's as a property of another object
+         * Eg. -
+         *   $.jStorage.set("key", xmlNode);        // IS OK
+         *   $.jStorage.set("key", {xml: xmlNode}); // NOT OK
+         */
+        _XMLService = {
+
+            /**
+             * Validates a XML node to be XML
+             * based on jQuery.isXML function
+             */
+            isXML: function(elm){
+                var documentElement = (elm ? elm.ownerDocument || elm : 0).documentElement;
+                return documentElement ? documentElement.nodeName !== "HTML" : false;
+            },
+
+            /**
+             * Encodes a XML node to string
+             * based on http://www.mercurytide.co.uk/news/article/issues-when-working-ajax/
+             */
+            encode: function(xmlNode) {
+                if(!this.isXML(xmlNode)){
+                    return false;
+                }
+                try{ // Mozilla, Webkit, Opera
+                    return new XMLSerializer().serializeToString(xmlNode);
+                }catch(E1) {
+                    try {  // IE
+                        return xmlNode.xml;
+                    }catch(E2){}
+                }
+                return false;
+            },
+
+            /**
+             * Decodes a XML node from string
+             * loosely based on http://outwestmedia.com/jquery-plugins/xmldom/
+             */
+            decode: function(xmlString){
+                var dom_parser = ("DOMParser" in window && (new DOMParser()).parseFromString) ||
+                        (window.ActiveXObject && function(_xmlString) {
+                    var xml_doc = new ActiveXObject('Microsoft.XMLDOM');
+                    xml_doc.async = 'false';
+                    xml_doc.loadXML(_xmlString);
+                    return xml_doc;
+                }),
+                resultXML;
+                if(!dom_parser){
+                    return false;
+                }
+                resultXML = dom_parser.call("DOMParser" in window && (new DOMParser()) || window, xmlString, 'text/xml');
+                return this.isXML(resultXML)?resultXML:false;
+            }
+        },
+
+        _localStoragePolyfillSetKey = function(){};
+
+
+    ////////////////////////// PRIVATE METHODS ////////////////////////
+
+    /**
+     * Initialization function. Detects if the browser supports DOM Storage
+     * or userData behavior and behaves accordingly.
+     */
+    function _init(){
+        /* Check if browser supports localStorage */
+        var localStorageReallyWorks = false;
+        if("localStorage" in window){
+            try {
+                window.localStorage.setItem('_tmptest', 'tmpval');
+                localStorageReallyWorks = true;
+                window.localStorage.removeItem('_tmptest');
+            } catch(BogusQuotaExceededErrorOnIos5) {
+                // Thanks be to iOS5 Private Browsing mode which throws
+                // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
+            }
+        }
+
+        if(localStorageReallyWorks){
+            try {
+                if(window.localStorage) {
+                    _storage_service = window.localStorage;
+                    _backend = "localStorage";
+                    _observer_update = _storage_service.jStorage_update;
+                }
+            } catch(E3) {/* Firefox fails when touching localStorage and cookies are disabled */}
+        }
+        /* Check if browser supports globalStorage */
+        else if("globalStorage" in window){
+            try {
+                if(window.globalStorage) {
+                    _storage_service = window.globalStorage[window.location.hostname];
+                    _backend = "globalStorage";
+                    _observer_update = _storage_service.jStorage_update;
+                }
+            } catch(E4) {/* Firefox fails when touching localStorage and cookies are disabled */}
+        }
+        /* Check if browser supports userData behavior */
+        else {
+            _storage_elm = document.createElement('link');
+            if(_storage_elm.addBehavior){
+
+                /* Use a DOM element to act as userData storage */
+                _storage_elm.style.behavior = 'url(#default#userData)';
+
+                /* userData element needs to be inserted into the DOM! */
+                document.getElementsByTagName('head')[0].appendChild(_storage_elm);
+
+                try{
+                    _storage_elm.load("jStorage");
+                }catch(E){
+                    // try to reset cache
+                    _storage_elm.setAttribute("jStorage", "{}");
+                    _storage_elm.save("jStorage");
+                    _storage_elm.load("jStorage");
+                }
+
+                var data = "{}";
+                try{
+                    data = _storage_elm.getAttribute("jStorage");
+                }catch(E5){}
+
+                try{
+                    _observer_update = _storage_elm.getAttribute("jStorage_update");
+                }catch(E6){}
+
+                _storage_service.jStorage = data;
+                _backend = "userDataBehavior";
+            }else{
+                _storage_elm = null;
+                return;
+            }
+        }
+
+        // Load data from storage
+        _load_storage();
+
+        // remove dead keys
+        _handleTTL();
+
+        // create localStorage and sessionStorage polyfills if needed
+        _createPolyfillStorage("local");
+        _createPolyfillStorage("session");
+
+        // start listening for changes
+        _setupObserver();
+
+        // initialize publish-subscribe service
+        _handlePubSub();
+
+        // handle cached navigation
+        if("addEventListener" in window){
+            window.addEventListener("pageshow", function(event){
+                if(event.persisted){
+                    _storageObserver();
+                }
+            }, false);
+        }
+    }
+
+    /**
+     * Create a polyfill for localStorage (type="local") or sessionStorage (type="session")
+     *
+     * @param {String} type Either "local" or "session"
+     * @param {Boolean} forceCreate If set to true, recreate the polyfill (needed with flush)
+     */
+    function _createPolyfillStorage(type, forceCreate){
+        var _skipSave = false,
+            _length = 0,
+            i, 
+            storage,
+            storage_source = {};
+
+            var rand = Math.random();
+
+        if(!forceCreate && typeof window[type+"Storage"] != "undefined"){
+            return;
+        }
+
+        // Use globalStorage for localStorage if available
+        if(type == "local" && window.globalStorage){
+            localStorage = window.globalStorage[window.location.hostname];
+            return;
+        }
+
+        // only IE6/7 from this point on 
+        if(_backend != "userDataBehavior"){
+            return;
+        }
+
+        // Remove existing storage element if available
+        if(forceCreate && window[type+"Storage"] && window[type+"Storage"].parentNode){
+            window[type+"Storage"].parentNode.removeChild(window[type+"Storage"]);
+        }
+
+        storage = document.createElement("button");
+        document.getElementsByTagName('head')[0].appendChild(storage);
+
+        if(type == "local"){
+            storage_source = _storage;
+        }else if(type == "session"){
+            _sessionStoragePolyfillUpdate();
+        }
+
+        for(i in storage_source){
+
+            if(storage_source.hasOwnProperty(i) && i != "__jstorage_meta" && i != "length" && typeof storage_source[i] != "undefined"){
+                if(!(i in storage)){
+                    _length++;
+                }
+                storage[i] = storage_source[i];
+            }
+        }
+        
+        // Polyfill API
+
+        /**
+         * Indicates how many keys are stored in the storage
+         */
+        storage.length = _length;
+
+        /**
+         * Returns the key of the nth stored value
+         * 
+         * @param {Number} n Index position
+         * @return {String} Key name of the nth stored value
+         */
+        storage.key = function(n){
+            var count = 0, i;
+            _sessionStoragePolyfillUpdate();
+            for(i in storage_source){
+                if(storage_source.hasOwnProperty(i) && i != "__jstorage_meta" && i!="length" && typeof storage_source[i] != "undefined"){
+                    if(count == n){
+                        return i;
+                    }
+                    count++;
+                }
+            }
+        }
+
+        /**
+         * Returns the current value associated with the given key
+         *
+         * @param {String} key key name
+         * @return {Mixed} Stored value
+         */
+        storage.getItem = function(key){
+            _sessionStoragePolyfillUpdate();
+            if(type == "session"){
+                return storage_source[key];
+            }
+            return $.jStorage.get(key);
+        }
+
+        /**
+         * Sets or updates value for a give key
+         *
+         * @param {String} key Key name to be updated
+         * @param {String} value String value to be stored 
+         */
+        storage.setItem = function(key, value){
+            if(typeof value == "undefined"){
+                return;
+            }
+            storage[key] = (value || "").toString();
+        }
+
+        /**
+         * Removes key from the storage
+         *
+         * @param {String} key Key name to be removed
+         */
+        storage.removeItem = function(key){
+            if(type == "local"){
+                return $.jStorage.deleteKey(key);
+            }
+
+            storage[key] = undefined;
+            
+            _skipSave = true;
+            if(key in storage){
+                storage.removeAttribute(key);
+            }
+            _skipSave = false;
+        }
+
+        /**
+         * Clear storage
+         */
+        storage.clear = function(){
+            if(type == "session"){
+                window.name = "";
+                _createPolyfillStorage("session", true);
+                return;
+            }
+            $.jStorage.flush();
+        }
+
+        if(type == "local"){
+
+            _localStoragePolyfillSetKey = function(key, value){
+                if(key == "length"){
+                    return;
+                }
+                _skipSave = true;
+                if(typeof value == "undefined"){
+                    if(key in storage){
+                        _length--;
+                        storage.removeAttribute(key);
+                    }
+                }else{
+                    if(!(key in storage)){
+                        _length++;
+                    }
+                    storage[key] = (value || "").toString();
+                }
+                storage.length = _length;
+                _skipSave = false;
+            }
+        }
+
+        function _sessionStoragePolyfillUpdate(){
+                if(type != "session"){
+                    return;
+                }
+                try{
+                    storage_source = JSON.parse(window.name || "{}");
+                }catch(E){
+                    storage_source = {};
+                }
+            }
+
+        function _sessionStoragePolyfillSave(){
+            if(type != "session"){
+                return;
+            }
+            window.name = JSON.stringify(storage_source);
+        };
+
+        storage.attachEvent("onpropertychange", function(e){
+            if(e.propertyName == "length"){
+                return;
+            }
+
+            if(_skipSave || e.propertyName == "length"){
+                return;
+            }
+
+            if(type == "local"){
+                if(!(e.propertyName in storage_source) && typeof storage[e.propertyName] != "undefined"){
+                    _length ++;
+                }
+            }else if(type == "session"){
+                _sessionStoragePolyfillUpdate();
+                if(typeof storage[e.propertyName] != "undefined" && !(e.propertyName in storage_source)){
+                    storage_source[e.propertyName] = storage[e.propertyName];
+                    _length++;
+                }else if(typeof storage[e.propertyName] == "undefined" && e.propertyName in storage_source){
+                    delete storage_source[e.propertyName];
+                    _length--;
+                }else{
+                    storage_source[e.propertyName] = storage[e.propertyName];
+                }
+
+                _sessionStoragePolyfillSave();
+                storage.length = _length;
+                return;
+            }
+
+            $.jStorage.set(e.propertyName, storage[e.propertyName]);
+            storage.length = _length;
+        });
+
+        window[type+"Storage"] = storage;
+    }
+
+    /**
+     * Reload data from storage when needed
+     */
+    function _reloadData(){
+        var data = "{}";
+
+        if(_backend == "userDataBehavior"){
+            _storage_elm.load("jStorage");
+
+            try{
+                data = _storage_elm.getAttribute("jStorage");
+            }catch(E5){}
+
+            try{
+                _observer_update = _storage_elm.getAttribute("jStorage_update");
+            }catch(E6){}
+
+            _storage_service.jStorage = data;
+        }
+
+        _load_storage();
+
+        // remove dead keys
+        _handleTTL();
+
+        _handlePubSub();
+    }
+
+    /**
+     * Sets up a storage change observer
+     */
+    function _setupObserver(){
+        if(_backend == "localStorage" || _backend == "globalStorage"){
+            if("addEventListener" in window){
+                window.addEventListener("storage", _storageObserver, false);
+            }else{
+                document.attachEvent("onstorage", _storageObserver);
+            }
+        }else if(_backend == "userDataBehavior"){
+            setInterval(_storageObserver, 1000);
+        }
+    }
+
+    /**
+     * Fired on any kind of data change, needs to check if anything has
+     * really been changed
+     */
+    function _storageObserver(){
+        var updateTime;
+        // cumulate change notifications with timeout
+        clearTimeout(_observer_timeout);
+        _observer_timeout = setTimeout(function(){
+
+            if(_backend == "localStorage" || _backend == "globalStorage"){
+                updateTime = _storage_service.jStorage_update;
+            }else if(_backend == "userDataBehavior"){
+                _storage_elm.load("jStorage");
+                try{
+                    updateTime = _storage_elm.getAttribute("jStorage_update");
+                }catch(E5){}
+            }
+
+            if(updateTime && updateTime != _observer_update){
+                _observer_update = updateTime;
+                _checkUpdatedKeys();
+            }
+
+        }, 25);
+    }
+
+    /**
+     * Reloads the data and checks if any keys are changed
+     */
+    function _checkUpdatedKeys(){
+        var oldCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)),
+            newCrc32List;
+
+        _reloadData();
+        newCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32));
+
+        var key,
+            updated = [],
+            removed = [];
+
+        for(key in oldCrc32List){
+            if(oldCrc32List.hasOwnProperty(key)){
+                if(!newCrc32List[key]){
+                    removed.push(key);
+                    continue;
+                }
+                if(oldCrc32List[key] != newCrc32List[key]){
+                    updated.push(key);
+                }
+            }
+        }
+
+        for(key in newCrc32List){
+            if(newCrc32List.hasOwnProperty(key)){
+                if(!oldCrc32List[key]){
+                    updated.push(key);
+                }
+            }
+        }
+
+        _fireObservers(updated, "updated");
+        _fireObservers(removed, "deleted");
+    }
+
+    /**
+     * Fires observers for updated keys
+     *
+     * @param {Array|String} keys Array of key names or a key
+     * @param {String} action What happened with the value (updated, deleted, flushed)
+     */
+    function _fireObservers(keys, action){
+        keys = [].concat(keys || []);
+        if(action == "flushed"){
+            keys = [];
+            for(var key in _observers){
+                if(_observers.hasOwnProperty(key)){
+                    keys.push(key);
+                }
+            }
+            action = "deleted";
+        }
+        for(var i=0, len = keys.length; i<len; i++){
+            if(_observers[keys[i]]){
+                for(var j=0, jlen = _observers[keys[i]].length; j<jlen; j++){
+                    _observers[keys[i]][j](keys[i], action);
+                }
+            }
+        }
+    }
+
+    /**
+     * Publishes key change to listeners
+     */
+    function _publishChange(){
+        var updateTime = (+new Date()).toString();
+
+        if(_backend == "localStorage" || _backend == "globalStorage"){
+            _storage_service.jStorage_update = updateTime;
+        }else if(_backend == "userDataBehavior"){
+            _storage_elm.setAttribute("jStorage_update", updateTime);
+            _storage_elm.save("jStorage");
+        }
+
+        _storageObserver();
+    }
+
+    /**
+     * Loads the data from the storage based on the supported mechanism
+     */
+    function _load_storage(){
+        /* if jStorage string is retrieved, then decode it */
+        if(_storage_service.jStorage){
+            try{
+                _storage = JSON.parse(String(_storage_service.jStorage));
+            }catch(E6){_storage_service.jStorage = "{}";}
+        }else{
+            _storage_service.jStorage = "{}";
+        }
+        _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+
+        if(!_storage.__jstorage_meta){
+            _storage.__jstorage_meta = {};
+        }
+        if(!_storage.__jstorage_meta.CRC32){
+            _storage.__jstorage_meta.CRC32 = {};
+        }
+    }
+
+    /**
+     * This functions provides the "save" mechanism to store the jStorage object
+     */
+    function _save(){
+        _dropOldEvents(); // remove expired events
+        try{
+            _storage_service.jStorage = JSON.stringify(_storage);
+            // If userData is used as the storage engine, additional
+            if(_storage_elm) {
+                _storage_elm.setAttribute("jStorage",_storage_service.jStorage);
+                _storage_elm.save("jStorage");
+            }
+            _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+        }catch(E7){/* probably cache is full, nothing is saved this way*/}
+    }
+
+    /**
+     * Function checks if a key is set and is string or numberic
+     *
+     * @param {String} key Key name
+     */
+    function _checkKey(key){
+        if(!key || (typeof key != "string" && typeof key != "number")){
+            throw new TypeError('Key name must be string or numeric');
+        }
+        if(key == "__jstorage_meta"){
+            throw new TypeError('Reserved key name');
+        }
+        return true;
+    }
+
+    /**
+     * Removes expired keys
+     */
+    function _handleTTL(){
+        var curtime, i, TTL, CRC32, nextExpire = Infinity, changed = false, deleted = [];
+
+        clearTimeout(_ttl_timeout);
+
+        if(!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != "object"){
+            // nothing to do here
+            return;
+        }
+
+        curtime = +new Date();
+        TTL = _storage.__jstorage_meta.TTL;
+
+        CRC32 = _storage.__jstorage_meta.CRC32;
+        for(i in TTL){
+            if(TTL.hasOwnProperty(i)){
+                if(TTL[i] <= curtime){
+                    delete TTL[i];
+                    delete CRC32[i];
+                    delete _storage[i];
+                    changed = true;
+                    deleted.push(i);
+                }else if(TTL[i] < nextExpire){
+                    nextExpire = TTL[i];
+                }
+            }
+        }
+
+        // set next check
+        if(nextExpire != Infinity){
+            _ttl_timeout = setTimeout(_handleTTL, nextExpire - curtime);
+        }
+
+        // save changes
+        if(changed){
+            _save();
+            _publishChange();
+            _fireObservers(deleted, "deleted");
+        }
+    }
+
+    /**
+     * Checks if there's any events on hold to be fired to listeners
+     */
+    function _handlePubSub(){
+        if(!_storage.__jstorage_meta.PubSub){
+            return;
+        }
+        var pubelm,
+            _pubsubCurrent = _pubsub_last;
+
+        for(var i=len=_storage.__jstorage_meta.PubSub.length-1; i>=0; i--){
+            pubelm = _storage.__jstorage_meta.PubSub[i];
+            if(pubelm[0] > _pubsub_last){
+                _pubsubCurrent = pubelm[0];
+                _fireSubscribers(pubelm[1], pubelm[2]);
+            }
+        }
+
+        _pubsub_last = _pubsubCurrent;
+    }
+
+    /**
+     * Fires all subscriber listeners for a pubsub channel
+     *
+     * @param {String} channel Channel name
+     * @param {Mixed} payload Payload data to deliver
+     */
+    function _fireSubscribers(channel, payload){
+        if(_pubsub_observers[channel]){
+            for(var i=0, len = _pubsub_observers[channel].length; i<len; i++){
+                // send immutable data that can't be modified by listeners
+                _pubsub_observers[channel][i](channel, JSON.parse(JSON.stringify(payload)));
+            }
+        }
+    }
+
+    /**
+     * Remove old events from the publish stream (at least 2sec old)
+     */
+    function _dropOldEvents(){
+        if(!_storage.__jstorage_meta.PubSub){
+            return;
+        }
+
+        var retire = +new Date() - 2000;
+
+        for(var i=0, len = _storage.__jstorage_meta.PubSub.length; i<len; i++){
+            if(_storage.__jstorage_meta.PubSub[i][0] <= retire){
+                // deleteCount is needed for IE6
+                _storage.__jstorage_meta.PubSub.splice(i, _storage.__jstorage_meta.PubSub.length - i);
+                break;
+            }
+        }
+
+        if(!_storage.__jstorage_meta.PubSub.length){
+            delete _storage.__jstorage_meta.PubSub;
+        }
+
+    }
+
+    /**
+     * Publish payload to a channel
+     *
+     * @param {String} channel Channel name
+     * @param {Mixed} payload Payload to send to the subscribers
+     */
+    function _publish(channel, payload){
+        if(!_storage.__jstorage_meta){
+            _storage.__jstorage_meta = {};
+        }
+        if(!_storage.__jstorage_meta.PubSub){
+            _storage.__jstorage_meta.PubSub = [];
+        }
+        
+        _storage.__jstorage_meta.PubSub.unshift([+new Date, channel, payload]);
+
+        _save();
+        _publishChange();
+    }
+
+    /**
+     * CRC32 calculation based on http://noteslog.com/post/crc32-for-javascript/
+     *
+     * @param {String} str String to be hashed
+     * @param {Number} [crc] Last crc value in case of streams
+     */
+    function _crc32(str, crc){
+        crc = crc || 0;
+
+        var n = 0, //a number between 0 and 255
+            x = 0; //an hex number
+        crc = crc ^ (-1);
+        for(var i = 0, len = str.length; i < len; i++){
+            n = (crc ^ str.charCodeAt(i)) & 0xFF;
+            x = "0x" + _crc32Table.substr(n * 9, 8);
+            crc = (crc >>> 8)^x;
+        }
+        return crc^(-1);
+    }
+
+    ////////////////////////// PUBLIC INTERFACE /////////////////////////
+
+    $.jStorage = {
+        /* Version number */
+        version: JSTORAGE_VERSION,
+
+        /**
+         * Sets a key's value.
+         *
+         * @param {String} key Key to set. If this value is not set or not
+         *              a string an exception is raised.
+         * @param {Mixed} value Value to set. This can be any value that is JSON
+         *              compatible (Numbers, Strings, Objects etc.).
+         * @param {Object} [options] - possible options to use
+         * @param {Number} [options.TTL] - optional TTL value
+         * @return {Mixed} the used value
+         */
+        set: function(key, value, options){
+            _checkKey(key);
+
+            options = options || {};
+
+            // undefined values are deleted automatically
+            if(typeof value == "undefined"){
+                this.deleteKey(key);
+                return value;
+            }
+
+            if(_XMLService.isXML(value)){
+                value = {_is_xml:true,xml:_XMLService.encode(value)};
+            }else if(typeof value == "function"){
+                return undefined; // functions can't be saved!
+            }else if(value && typeof value == "object"){
+                // clone the object before saving to _storage tree
+                value = JSON.parse(JSON.stringify(value));
+            }
+
+            _storage[key] = value;
+
+            _storage.__jstorage_meta.CRC32[key] = _crc32(JSON.stringify(value));
+
+            this.setTTL(key, options.TTL || 0); // also handles saving and _publishChange
+
+            _localStoragePolyfillSetKey(key, value);
+
+            _fireObservers(key, "updated");
+            return value;
+        },
+
+        /**
+         * Looks up a key in cache
+         *
+         * @param {String} key - Key to look up.
+         * @param {mixed} def - Default value to return, if key didn't exist.
+         * @return {Mixed} the key value, default value or null
+         */
+        get: function(key, def){
+            _checkKey(key);
+            if(key in _storage){
+                if(_storage[key] && typeof _storage[key] == "object" &&
+                        _storage[key]._is_xml &&
+                            _storage[key]._is_xml){
+                    return _XMLService.decode(_storage[key].xml);
+                }else{
+                    return _storage[key];
+                }
+            }
+            return typeof(def) == 'undefined' ? null : def;
+        },
+
+        /**
+         * Deletes a key from cache.
+         *
+         * @param {String} key - Key to delete.
+         * @return {Boolean} true if key existed or false if it didn't
+         */
+        deleteKey: function(key){
+            _checkKey(key);
+            if(key in _storage){
+                delete _storage[key];
+                // remove from TTL list
+                if(typeof _storage.__jstorage_meta.TTL == "object" &&
+                  key in _storage.__jstorage_meta.TTL){
+                    delete _storage.__jstorage_meta.TTL[key];
+                }
+
+                delete _storage.__jstorage_meta.CRC32[key];
+                _localStoragePolyfillSetKey(key, undefined);
+
+                _save();
+                _publishChange();
+                _fireObservers(key, "deleted");
+                return true;
+            }
+            return false;
+        },
+
+        /**
+         * Sets a TTL for a key, or remove it if ttl value is 0 or below
+         *
+         * @param {String} key - key to set the TTL for
+         * @param {Number} ttl - TTL timeout in milliseconds
+         * @return {Boolean} true if key existed or false if it didn't
+         */
+        setTTL: function(key, ttl){
+            var curtime = +new Date();
+            _checkKey(key);
+            ttl = Number(ttl) || 0;
+            if(key in _storage){
+
+                if(!_storage.__jstorage_meta.TTL){
+                    _storage.__jstorage_meta.TTL = {};
+                }
+
+                // Set TTL value for the key
+                if(ttl>0){
+                    _storage.__jstorage_meta.TTL[key] = curtime + ttl;
+                }else{
+                    delete _storage.__jstorage_meta.TTL[key];
+                }
+
+                _save();
+
+                _handleTTL();
+
+                _publishChange();
+                return true;
+            }
+            return false;
+        },
+
+        /**
+         * Gets remaining TTL (in milliseconds) for a key or 0 when no TTL has been set
+         *
+         * @param {String} key Key to check
+         * @return {Number} Remaining TTL in milliseconds
+         */
+        getTTL: function(key){
+            var curtime = +new Date(), ttl;
+            _checkKey(key);
+            if(key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]){
+                ttl = _storage.__jstorage_meta.TTL[key] - curtime;
+                return ttl || 0;
+            }
+            return 0;
+        },
+
+        /**
+         * Deletes everything in cache.
+         *
+         * @return {Boolean} Always true
+         */
+        flush: function(){
+            _storage = {__jstorage_meta:{CRC32:{}}};
+            _createPolyfillStorage("local", true);
+            _save();
+            _publishChange();
+            _fireObservers(null, "flushed");
+            return true;
+        },
+
+        /**
+         * Returns a read-only copy of _storage
+         *
+         * @return {Object} Read-only copy of _storage
+        */
+        storageObj: function(){
+            function F() {}
+            F.prototype = _storage;
+            return new F();
+        },
+
+        /**
+         * Returns an index of all used keys as an array
+         * ['key1', 'key2',..'keyN']
+         *
+         * @return {Array} Used keys
+        */
+        index: function(){
+            var index = [], i;
+            for(i in _storage){
+                if(_storage.hasOwnProperty(i) && i != "__jstorage_meta"){
+                    index.push(i);
+                }
+            }
+            return index;
+        },
+
+        /**
+         * How much space in bytes does the storage take?
+         *
+         * @return {Number} Storage size in chars (not the same as in bytes,
+         *                  since some chars may take several bytes)
+         */
+        storageSize: function(){
+            return _storage_size;
+        },
+
+        /**
+         * Which backend is currently in use?
+         *
+         * @return {String} Backend name
+         */
+        currentBackend: function(){
+            return _backend;
+        },
+
+        /**
+         * Test if storage is available
+         *
+         * @return {Boolean} True if storage can be used
+         */
+        storageAvailable: function(){
+            return !!_backend;
+        },
+
+        /**
+         * Register change listeners
+         *
+         * @param {String} key Key name
+         * @param {Function} callback Function to run when the key changes
+         */
+        listenKeyChange: function(key, callback){
+            _checkKey(key);
+            if(!_observers[key]){
+                _observers[key] = [];
+            }
+            _observers[key].push(callback);
+        },
+
+        /**
+         * Remove change listeners
+         *
+         * @param {String} key Key name to unregister listeners against
+         * @param {Function} [callback] If set, unregister the callback, if not - unregister all
+         */
+        stopListening: function(key, callback){
+            _checkKey(key);
+
+            if(!_observers[key]){
+                return;
+            }
+
+            if(!callback){
+                delete _observers[key];
+                return;
+            }
+
+            for(var i = _observers[key].length - 1; i>=0; i--){
+                if(_observers[key][i] == callback){
+                    _observers[key].splice(i,1);
+                }
+            }
+        },
+
+        /**
+         * Subscribe to a Publish/Subscribe event stream
+         *
+         * @param {String} channel Channel name
+         * @param {Function} callback Function to run when the something is published to the channel
+         */
+        subscribe: function(channel, callback){
+            channel = (channel || "").toString();
+            if(!channel){
+                throw new TypeError('Channel not defined');
+            }
+            if(!_pubsub_observers[channel]){
+                _pubsub_observers[channel] = [];
+            }
+            _pubsub_observers[channel].push(callback);
+        },
+
+        /**
+         * Publish data to an event stream
+         *
+         * @param {String} channel Channel name
+         * @param {Mixed} payload Payload to deliver
+         */
+        publish: function(channel, payload){
+            channel = (channel || "").toString();
+            if(!channel){
+                throw new TypeError('Channel not defined');
+            }
+
+            _publish(channel, payload);
+        },
+
+        /**
+         * Reloads the data from browser storage
+         */
+        reInit: function(){
+            _reloadData();
+        }
+    };
+
+    // Initialize jStorage
+    _init();
+
+})();
index 3774ff9..d4f3bb3 100644 (file)
@@ -1,31 +1,28 @@
 /*!
- * jQuery JavaScript Library v1.7.2
+ * jQuery JavaScript Library v1.8.2
  * http://jquery.com/
  *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
  * Includes Sizzle.js
  * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
  *
- * Date: Wed Mar 21 12:46:34 2012 -0700
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time)
  */
 (function( window, undefined ) {
+var
+       // A central reference to the root jQuery(document)
+       rootjQuery,
 
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-       navigator = window.navigator,
-       location = window.location;
-var jQuery = (function() {
+       // The deferred used on DOM ready
+       readyList,
 
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return new jQuery.fn.init( selector, context, rootjQuery );
-       },
+       // Use the correct document accordingly with window argument (sandbox)
+       document = window.document,
+       location = window.location,
+       navigator = window.navigator,
 
        // Map over jQuery in case of overwrite
        _jQuery = window.jQuery,
@@ -33,63 +30,64 @@ var jQuery = function( selector, context ) {
        // Map over the $ in case of overwrite
        _$ = window.$,
 
-       // A central reference to the root jQuery(document)
-       rootjQuery,
+       // Save a reference to some core methods
+       core_push = Array.prototype.push,
+       core_slice = Array.prototype.slice,
+       core_indexOf = Array.prototype.indexOf,
+       core_toString = Object.prototype.toString,
+       core_hasOwn = Object.prototype.hasOwnProperty,
+       core_trim = String.prototype.trim,
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
 
-       // A simple way to check for HTML strings or ID strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+       // Used for matching numbers
+       core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
 
-       // Check if a string has a non-whitespace character in it
-       rnotwhite = /\S/,
+       // Used for detecting and trimming whitespace
+       core_rnotwhite = /\S/,
+       core_rspace = /\s+/,
 
-       // Used for trimming whitespace
-       trimLeft = /^\s+/,
-       trimRight = /\s+$/,
+       // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
 
        // Match a standalone tag
-       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
 
        // JSON RegExp
        rvalidchars = /^[\],:{}\s]*$/,
-       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
        rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-       // Useragent RegExp
-       rwebkit = /(webkit)[ \/]([\w.]+)/,
-       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-       rmsie = /(msie) ([\w.]+)/,
-       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
 
        // Matches dashed string for camelizing
-       rdashAlpha = /-([a-z]|[0-9])/ig,
        rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([\da-z])/gi,
 
        // Used by jQuery.camelCase as callback to replace()
        fcamelCase = function( all, letter ) {
                return ( letter + "" ).toUpperCase();
        },
 
-       // Keep a UserAgent string for use with jQuery.browser
-       userAgent = navigator.userAgent,
-
-       // For matching the engine and version of the browser
-       browserMatch,
-
-       // The deferred used on DOM ready
-       readyList,
-
-       // The ready event handler
-       DOMContentLoaded,
-
-       // Save a reference to some core methods
-       toString = Object.prototype.toString,
-       hasOwn = Object.prototype.hasOwnProperty,
-       push = Array.prototype.push,
-       slice = Array.prototype.slice,
-       trim = String.prototype.trim,
-       indexOf = Array.prototype.indexOf,
+       // The ready event handler and self cleanup method
+       DOMContentLoaded = function() {
+               if ( document.addEventListener ) {
+                       document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+                       jQuery.ready();
+               } else if ( document.readyState === "complete" ) {
+                       // we're here because readyState === "complete" in oldIE
+                       // which is good enough for us to call the dom ready!
+                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
+                       jQuery.ready();
+               }
+       },
 
        // [[Class]] -> type pairs
        class2type = {};
@@ -99,7 +97,7 @@ jQuery.fn = jQuery.prototype = {
        init: function( selector, context, rootjQuery ) {
                var match, elem, ret, doc;
 
-               // Handle $(""), $(null), or $(undefined)
+               // Handle $(""), $(null), $(undefined), $(false)
                if ( !selector ) {
                        return this;
                }
@@ -111,55 +109,33 @@ jQuery.fn = jQuery.prototype = {
                        return this;
                }
 
-               // The body element only exists once, optimize finding it
-               if ( selector === "body" && !context && document.body ) {
-                       this.context = document;
-                       this[0] = document.body;
-                       this.selector = selector;
-                       this.length = 1;
-                       return this;
-               }
-
                // Handle HTML strings
                if ( typeof selector === "string" ) {
-                       // Are we dealing with HTML string or an ID?
                        if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
                                // Assume that strings that start and end with <> are HTML and skip the regex check
                                match = [ null, selector, null ];
 
                        } else {
-                               match = quickExpr.exec( selector );
+                               match = rquickExpr.exec( selector );
                        }
 
-                       // Verify a match, and that no context was specified for #id
+                       // Match html or make sure no context is specified for #id
                        if ( match && (match[1] || !context) ) {
 
                                // HANDLE: $(html) -> $(array)
                                if ( match[1] ) {
                                        context = context instanceof jQuery ? context[0] : context;
-                                       doc = ( context ? context.ownerDocument || context : document );
-
-                                       // If a single string is passed in and it's a single tag
-                                       // just do a createElement and skip the rest
-                                       ret = rsingleTag.exec( selector );
-
-                                       if ( ret ) {
-                                               if ( jQuery.isPlainObject( context ) ) {
-                                                       selector = [ document.createElement( ret[1] ) ];
-                                                       jQuery.fn.attr.call( selector, context, true );
-
-                                               } else {
-                                                       selector = [ doc.createElement( ret[1] ) ];
-                                               }
+                                       doc = ( context && context.nodeType ? context.ownerDocument || context : document );
 
-                                       } else {
-                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+                                       // scripts is true for back-compat
+                                       selector = jQuery.parseHTML( match[1], doc, true );
+                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+                                               this.attr.call( selector, context, true );
                                        }
 
                                        return jQuery.merge( this, selector );
 
-                               // HANDLE: $("#id")
+                               // HANDLE: $(#id)
                                } else {
                                        elem = document.getElementById( match[2] );
 
@@ -210,7 +186,7 @@ jQuery.fn = jQuery.prototype = {
        selector: "",
 
        // The current version of jQuery being used
-       jquery: "1.7.2",
+       jquery: "1.8.2",
 
        // The default length of a jQuery object is 0
        length: 0,
@@ -221,7 +197,7 @@ jQuery.fn = jQuery.prototype = {
        },
 
        toArray: function() {
-               return slice.call( this, 0 );
+               return core_slice.call( this );
        },
 
        // Get the Nth element in the matched element set OR
@@ -239,15 +215,9 @@ jQuery.fn = jQuery.prototype = {
        // Take an array of elements and push it onto the stack
        // (returning the new matched element set)
        pushStack: function( elems, name, selector ) {
-               // Build a new jQuery matched element set
-               var ret = this.constructor();
 
-               if ( jQuery.isArray( elems ) ) {
-                       push.apply( ret, elems );
-
-               } else {
-                       jQuery.merge( ret, elems );
-               }
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
 
                // Add the old object onto the stack (as a reference)
                ret.prevObject = this;
@@ -272,11 +242,8 @@ jQuery.fn = jQuery.prototype = {
        },
 
        ready: function( fn ) {
-               // Attach the listeners
-               jQuery.bindReady();
-
                // Add the callback
-               readyList.add( fn );
+               jQuery.ready.promise().done( fn );
 
                return this;
        },
@@ -297,8 +264,8 @@ jQuery.fn = jQuery.prototype = {
        },
 
        slice: function() {
-               return this.pushStack( slice.apply( this, arguments ),
-                       "slice", slice.call(arguments).join(",") );
+               return this.pushStack( core_slice.apply( this, arguments ),
+                       "slice", core_slice.call(arguments).join(",") );
        },
 
        map: function( callback ) {
@@ -313,7 +280,7 @@ jQuery.fn = jQuery.prototype = {
 
        // For internal use only.
        // Behaves like an Array's method, not like a jQuery method.
-       push: push,
+       push: core_push,
        sort: [].sort,
        splice: [].splice
 };
@@ -416,73 +383,31 @@ jQuery.extend({
 
        // Handle when the DOM is ready
        ready: function( wait ) {
-               // Either a released hold or an DOMready/load event and not yet ready
-               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                       if ( !document.body ) {
-                               return setTimeout( jQuery.ready, 1 );
-                       }
-
-                       // Remember that the DOM is ready
-                       jQuery.isReady = true;
-
-                       // If a normal DOM Ready event fired, decrement, and wait if need be
-                       if ( wait !== true && --jQuery.readyWait > 0 ) {
-                               return;
-                       }
-
-                       // If there are functions bound, to execute
-                       readyList.fireWith( document, [ jQuery ] );
-
-                       // Trigger any bound ready events
-                       if ( jQuery.fn.trigger ) {
-                               jQuery( document ).trigger( "ready" ).off( "ready" );
-                       }
-               }
-       },
 
-       bindReady: function() {
-               if ( readyList ) {
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
                        return;
                }
 
-               readyList = jQuery.Callbacks( "once memory" );
-
-               // Catch cases where $(document).ready() is called after the
-               // browser event has already occurred.
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( !document.body ) {
                        return setTimeout( jQuery.ready, 1 );
                }
 
-               // Mozilla, Opera and webkit nightlies currently support this event
-               if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", jQuery.ready, false );
-
-               // If IE event model is used
-               } else if ( document.attachEvent ) {
-                       // ensure firing before onload,
-                       // maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", jQuery.ready );
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
 
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var toplevel = false;
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
 
-                       try {
-                               toplevel = window.frameElement == null;
-                       } catch(e) {}
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
 
-                       if ( document.documentElement.doScroll && toplevel ) {
-                               doScrollCheck();
-                       }
+               // Trigger any bound ready events
+               if ( jQuery.fn.trigger ) {
+                       jQuery( document ).trigger("ready").off("ready");
                }
        },
 
@@ -508,7 +433,7 @@ jQuery.extend({
        type: function( obj ) {
                return obj == null ?
                        String( obj ) :
-                       class2type[ toString.call(obj) ] || "object";
+                       class2type[ core_toString.call(obj) ] || "object";
        },
 
        isPlainObject: function( obj ) {
@@ -522,8 +447,8 @@ jQuery.extend({
                try {
                        // Not own constructor property must be Object
                        if ( obj.constructor &&
-                               !hasOwn.call(obj, "constructor") &&
-                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               !core_hasOwn.call(obj, "constructor") &&
+                               !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
                                return false;
                        }
                } catch ( e ) {
@@ -537,11 +462,12 @@ jQuery.extend({
                var key;
                for ( key in obj ) {}
 
-               return key === undefined || hasOwn.call( obj, key );
+               return key === undefined || core_hasOwn.call( obj, key );
        },
 
        isEmptyObject: function( obj ) {
-               for ( var name in obj ) {
+               var name;
+               for ( name in obj ) {
                        return false;
                }
                return true;
@@ -551,8 +477,32 @@ jQuery.extend({
                throw new Error( msg );
        },
 
+       // data: string of html
+       // context (optional): If specified, the fragment will be created in this context, defaults to document
+       // scripts (optional): If true, will include scripts passed in the html string
+       parseHTML: function( data, context, scripts ) {
+               var parsed;
+               if ( !data || typeof data !== "string" ) {
+                       return null;
+               }
+               if ( typeof context === "boolean" ) {
+                       scripts = context;
+                       context = 0;
+               }
+               context = context || document;
+
+               // Single tag
+               if ( (parsed = rsingleTag.exec( data )) ) {
+                       return [ context.createElement( parsed[1] ) ];
+               }
+
+               parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
+               return jQuery.merge( [],
+                       (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
+       },
+
        parseJSON: function( data ) {
-               if ( typeof data !== "string" || !data ) {
+               if ( !data || typeof data !== "string") {
                        return null;
                }
 
@@ -578,10 +528,10 @@ jQuery.extend({
 
        // Cross-browser xml parsing
        parseXML: function( data ) {
-               if ( typeof data !== "string" || !data ) {
+               var xml, tmp;
+               if ( !data || typeof data !== "string" ) {
                        return null;
                }
-               var xml, tmp;
                try {
                        if ( window.DOMParser ) { // Standard
                                tmp = new DOMParser();
@@ -606,7 +556,7 @@ jQuery.extend({
        // Workarounds based on findings by Jim Driscoll
        // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
        globalEval: function( data ) {
-               if ( data && rnotwhite.test( data ) ) {
+               if ( data && core_rnotwhite.test( data ) ) {
                        // We use execScript on Internet Explorer
                        // We use an anonymous function so that context is window
                        // rather than jQuery in Firefox
@@ -623,25 +573,26 @@ jQuery.extend({
        },
 
        nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
        },
 
        // args is for internal usage only
-       each: function( object, callback, args ) {
-               var name, i = 0,
-                       length = object.length,
-                       isObj = length === undefined || jQuery.isFunction( object );
+       each: function( obj, callback, args ) {
+               var name,
+                       i = 0,
+                       length = obj.length,
+                       isObj = length === undefined || jQuery.isFunction( obj );
 
                if ( args ) {
                        if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.apply( object[ name ], args ) === false ) {
+                               for ( name in obj ) {
+                                       if ( callback.apply( obj[ name ], args ) === false ) {
                                                break;
                                        }
                                }
                        } else {
                                for ( ; i < length; ) {
-                                       if ( callback.apply( object[ i++ ], args ) === false ) {
+                                       if ( callback.apply( obj[ i++ ], args ) === false ) {
                                                break;
                                        }
                                }
@@ -650,71 +601,72 @@ jQuery.extend({
                // A special, fast, case for the most common use of each
                } else {
                        if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+                               for ( name in obj ) {
+                                       if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
                                                break;
                                        }
                                }
                        } else {
                                for ( ; i < length; ) {
-                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+                                       if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
                                                break;
                                        }
                                }
                        }
                }
 
-               return object;
+               return obj;
        },
 
        // Use native String.trim function wherever possible
-       trim: trim ?
+       trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
                function( text ) {
                        return text == null ?
                                "" :
-                               trim.call( text );
+                               core_trim.call( text );
                } :
 
                // Otherwise use our own trimming functionality
                function( text ) {
                        return text == null ?
                                "" :
-                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+                               ( text + "" ).replace( rtrim, "" );
                },
 
        // results is for internal usage only
-       makeArray: function( array, results ) {
-               var ret = results || [];
+       makeArray: function( arr, results ) {
+               var type,
+                       ret = results || [];
 
-               if ( array != null ) {
+               if ( arr != null ) {
                        // The window, strings (and functions) also have 'length'
                        // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-                       var type = jQuery.type( array );
+                       type = jQuery.type( arr );
 
-                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-                               push.call( ret, array );
+                       if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
+                               core_push.call( ret, arr );
                        } else {
-                               jQuery.merge( ret, array );
+                               jQuery.merge( ret, arr );
                        }
                }
 
                return ret;
        },
 
-       inArray: function( elem, array, i ) {
+       inArray: function( elem, arr, i ) {
                var len;
 
-               if ( array ) {
-                       if ( indexOf ) {
-                               return indexOf.call( array, elem, i );
+               if ( arr ) {
+                       if ( core_indexOf ) {
+                               return core_indexOf.call( arr, elem, i );
                        }
 
-                       len = array.length;
+                       len = arr.length;
                        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
 
                        for ( ; i < len; i++ ) {
                                // Skip accessing in sparse arrays
-                               if ( i in array && array[ i ] === elem ) {
+                               if ( i in arr && arr[ i ] === elem ) {
                                        return i;
                                }
                        }
@@ -724,11 +676,12 @@ jQuery.extend({
        },
 
        merge: function( first, second ) {
-               var i = first.length,
+               var l = second.length,
+                       i = first.length,
                        j = 0;
 
-               if ( typeof second.length === "number" ) {
-                       for ( var l = second.length; j < l; j++ ) {
+               if ( typeof l === "number" ) {
+                       for ( ; j < l; j++ ) {
                                first[ i++ ] = second[ j ];
                        }
 
@@ -744,12 +697,15 @@ jQuery.extend({
        },
 
        grep: function( elems, callback, inv ) {
-               var ret = [], retVal;
+               var retVal,
+                       ret = [],
+                       i = 0,
+                       length = elems.length;
                inv = !!inv;
 
                // Go through the array, only saving the items
                // that pass the validator function
-               for ( var i = 0, length = elems.length; i < length; i++ ) {
+               for ( ; i < length; i++ ) {
                        retVal = !!callback( elems[ i ], i );
                        if ( inv !== retVal ) {
                                ret.push( elems[ i ] );
@@ -761,7 +717,8 @@ jQuery.extend({
 
        // arg is for internal usage only
        map: function( elems, callback, arg ) {
-               var value, key, ret = [],
+               var value, key,
+                       ret = [],
                        i = 0,
                        length = elems.length,
                        // jquery objects are treated as arrays
@@ -798,8 +755,10 @@ jQuery.extend({
        // Bind a function to a context, optionally partially applying any
        // arguments.
        proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
                if ( typeof context === "string" ) {
-                       var tmp = fn[ context ];
+                       tmp = fn[ context ];
                        context = fn;
                        fn = tmp;
                }
@@ -811,18 +770,18 @@ jQuery.extend({
                }
 
                // Simulated bind
-               var args = slice.call( arguments, 2 ),
-                       proxy = function() {
-                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
-                       };
+               args = core_slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
+               };
 
                // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
 
                return proxy;
        },
 
-       // Mutifunctional method to get and set values to a collection
+       // Multifunctional method to get and set values of a collection
        // The value/s can optionally be executed if it's a function
        access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
                var exec,
@@ -877,136 +836,96 @@ jQuery.extend({
 
        now: function() {
                return ( new Date() ).getTime();
-       },
-
-       // Use of jQuery.browser is frowned upon.
-       // More details: http://docs.jquery.com/Utilities/jQuery.browser
-       uaMatch: function( ua ) {
-               ua = ua.toLowerCase();
+       }
+});
 
-               var match = rwebkit.exec( ua ) ||
-                       ropera.exec( ua ) ||
-                       rmsie.exec( ua ) ||
-                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-                       [];
+jQuery.ready.promise = function( obj ) {
+       if ( !readyList ) {
 
-               return { browser: match[1] || "", version: match[2] || "0" };
-       },
+               readyList = jQuery.Deferred();
 
-       sub: function() {
-               function jQuerySub( selector, context ) {
-                       return new jQuerySub.fn.init( selector, context );
-               }
-               jQuery.extend( true, jQuerySub, this );
-               jQuerySub.superclass = this;
-               jQuerySub.fn = jQuerySub.prototype = this();
-               jQuerySub.fn.constructor = jQuerySub;
-               jQuerySub.sub = this.sub;
-               jQuerySub.fn.init = function init( selector, context ) {
-                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-                               context = jQuerySub( context );
-                       }
+               // Catch cases where $(document).ready() is called after the browser event has already occurred.
+               // we once tried to use readyState "interactive" here, but it caused issues like the one
+               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       setTimeout( jQuery.ready, 1 );
 
-                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-               };
-               jQuerySub.fn.init.prototype = jQuerySub.fn;
-               var rootjQuerySub = jQuerySub(document);
-               return jQuerySub;
-       },
+               // Standards-based browsers support DOMContentLoaded
+               } else if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
 
-       browser: {}
-});
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
 
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
+               // If IE event model is used
+               } else {
+                       // Ensure firing before onload, maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
 
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-       jQuery.browser[ browserMatch.browser ] = true;
-       jQuery.browser.version = browserMatch.version;
-}
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
 
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-       jQuery.browser.safari = true;
-}
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var top = false;
 
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-       trimLeft = /^[\s\xA0]+/;
-       trimRight = /[\s\xA0]+$/;
-}
+                       try {
+                               top = window.frameElement == null && document.documentElement;
+                       } catch(e) {}
 
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
+                       if ( top && top.doScroll ) {
+                               (function doScrollCheck() {
+                                       if ( !jQuery.isReady ) {
 
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-       DOMContentLoaded = function() {
-               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-               jQuery.ready();
-       };
+                                               try {
+                                                       // Use the trick by Diego Perini
+                                                       // http://javascript.nwbox.com/IEContentLoaded/
+                                                       top.doScroll("left");
+                                               } catch(e) {
+                                                       return setTimeout( doScrollCheck, 50 );
+                                               }
 
-} else if ( document.attachEvent ) {
-       DOMContentLoaded = function() {
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( document.readyState === "complete" ) {
-                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
-                       jQuery.ready();
+                                               // and execute any waiting functions
+                                               jQuery.ready();
+                                       }
+                               })();
+                       }
                }
-       };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-       if ( jQuery.isReady ) {
-               return;
-       }
-
-       try {
-               // If IE is used, use the trick by Diego Perini
-               // http://javascript.nwbox.com/IEContentLoaded/
-               document.documentElement.doScroll("left");
-       } catch(e) {
-               setTimeout( doScrollCheck, 1 );
-               return;
        }
+       return readyList.promise( obj );
+};
 
-       // and execute any waiting functions
-       jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
 
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-       var object = flagsCache[ flags ] = {},
-               i, length;
-       flags = flags.split( /\s+/ );
-       for ( i = 0, length = flags.length; i < length; i++ ) {
-               object[ flags[i] ] = true;
-       }
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+       var object = optionsCache[ options ] = {};
+       jQuery.each( options.split( core_rspace ), function( _, flag ) {
+               object[ flag ] = true;
+       });
        return object;
 }
 
 /*
  * Create a callback list using the following parameters:
  *
- *     flags:  an optional list of space-separated flags that will change how
- *                     the callback list behaves
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
  *
  * By default a callback list will act like an event callback list and can be
  * "fired" multiple times.
  *
- * Possible flags:
+ * Possible options:
  *
  *     once:                   will ensure the callback list can only be fired once (like a Deferred)
  *
@@ -1019,17 +938,15 @@ function createFlags( flags ) {
  *     stopOnFalse:    interrupt callings when a callback returns false
  *
  */
-jQuery.Callbacks = function( flags ) {
+jQuery.Callbacks = function( options ) {
 
-       // Convert flags from String-formatted to Object-formatted
+       // Convert options from String-formatted to Object-formatted if needed
        // (we check in cache first)
-       flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+       options = typeof options === "string" ?
+               ( optionsCache[ options ] || createOptions( options ) ) :
+               jQuery.extend( {}, options );
 
-       var // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = [],
-               // Last fire value (for non-forgettable lists)
+       var // Last fire value (for non-forgettable lists)
                memory,
                // Flag to know if list was already fired
                fired,
@@ -1041,53 +958,34 @@ jQuery.Callbacks = function( flags ) {
                firingLength,
                // Index of currently firing callback (modified by remove if needed)
                firingIndex,
-               // Add one or several callbacks to the list
-               add = function( args ) {
-                       var i,
-                               length,
-                               elem,
-                               type,
-                               actual;
-                       for ( i = 0, length = args.length; i < length; i++ ) {
-                               elem = args[ i ];
-                               type = jQuery.type( elem );
-                               if ( type === "array" ) {
-                                       // Inspect recursively
-                                       add( elem );
-                               } else if ( type === "function" ) {
-                                       // Add if not in unique mode and callback is not in
-                                       if ( !flags.unique || !self.has( elem ) ) {
-                                               list.push( elem );
-                                       }
-                               }
-                       }
-               },
+               // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = !options.once && [],
                // Fire callbacks
-               fire = function( context, args ) {
-                       args = args || [];
-                       memory = !flags.memory || [ context, args ];
+               fire = function( data ) {
+                       memory = options.memory && data;
                        fired = true;
-                       firing = true;
                        firingIndex = firingStart || 0;
                        firingStart = 0;
                        firingLength = list.length;
+                       firing = true;
                        for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-                                       memory = true; // Mark as halted
+                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+                                       memory = false; // To prevent further calls using add
                                        break;
                                }
                        }
                        firing = false;
                        if ( list ) {
-                               if ( !flags.once ) {
-                                       if ( stack && stack.length ) {
-                                               memory = stack.shift();
-                                               self.fireWith( memory[ 0 ], memory[ 1 ] );
+                               if ( stack ) {
+                                       if ( stack.length ) {
+                                               fire( stack.shift() );
                                        }
-                               } else if ( memory === true ) {
-                                       self.disable();
-                               } else {
+                               } else if ( memory ) {
                                        list = [];
+                               } else {
+                                       self.disable();
                                }
                        }
                },
@@ -1096,18 +994,28 @@ jQuery.Callbacks = function( flags ) {
                        // Add a callback or a collection of callbacks to the list
                        add: function() {
                                if ( list ) {
-                                       var length = list.length;
-                                       add( arguments );
+                                       // First, we save the current length
+                                       var start = list.length;
+                                       (function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       var type = jQuery.type( arg );
+                                                       if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
+                                                               list.push( arg );
+                                                       } else if ( arg && arg.length && type !== "string" ) {
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               });
+                                       })( arguments );
                                        // Do we need to add the callbacks to the
                                        // current firing batch?
                                        if ( firing ) {
                                                firingLength = list.length;
                                        // With memory, if we're not firing then
-                                       // we should call right away, unless previous
-                                       // firing was halted (stopOnFalse)
-                                       } else if ( memory && memory !== true ) {
-                                               firingStart = length;
-                                               fire( memory[ 0 ], memory[ 1 ] );
+                                       // we should call right away
+                                       } else if ( memory ) {
+                                               firingStart = start;
+                                               fire( memory );
                                        }
                                }
                                return this;
@@ -1115,46 +1023,27 @@ jQuery.Callbacks = function( flags ) {
                        // Remove a callback from the list
                        remove: function() {
                                if ( list ) {
-                                       var args = arguments,
-                                               argIndex = 0,
-                                               argLength = args.length;
-                                       for ( ; argIndex < argLength ; argIndex++ ) {
-                                               for ( var i = 0; i < list.length; i++ ) {
-                                                       if ( args[ argIndex ] === list[ i ] ) {
-                                                               // Handle firingIndex and firingLength
-                                                               if ( firing ) {
-                                                                       if ( i <= firingLength ) {
-                                                                               firingLength--;
-                                                                               if ( i <= firingIndex ) {
-                                                                                       firingIndex--;
-                                                                               }
-                                                                       }
+                                       jQuery.each( arguments, function( _, arg ) {
+                                               var index;
+                                               while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                                       list.splice( index, 1 );
+                                                       // Handle firing indexes
+                                                       if ( firing ) {
+                                                               if ( index <= firingLength ) {
+                                                                       firingLength--;
                                                                }
-                                                               // Remove the element
-                                                               list.splice( i--, 1 );
-                                                               // If we have some unicity property then
-                                                               // we only need to do this once
-                                                               if ( flags.unique ) {
-                                                                       break;
+                                                               if ( index <= firingIndex ) {
+                                                                       firingIndex--;
                                                                }
                                                        }
                                                }
-                                       }
+                                       });
                                }
                                return this;
                        },
                        // Control if a given callback is in the list
                        has: function( fn ) {
-                               if ( list ) {
-                                       var i = 0,
-                                               length = list.length;
-                                       for ( ; i < length; i++ ) {
-                                               if ( fn === list[ i ] ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                               return false;
+                               return jQuery.inArray( fn, list ) > -1;
                        },
                        // Remove all callbacks from the list
                        empty: function() {
@@ -1173,7 +1062,7 @@ jQuery.Callbacks = function( flags ) {
                        // Lock the list in its current state
                        lock: function() {
                                stack = undefined;
-                               if ( !memory || memory === true ) {
+                               if ( !memory ) {
                                        self.disable();
                                }
                                return this;
@@ -1184,13 +1073,13 @@ jQuery.Callbacks = function( flags ) {
                        },
                        // Call all callbacks with the given context and arguments
                        fireWith: function( context, args ) {
-                               if ( stack ) {
+                               args = args || [];
+                               args = [ context, args.slice ? args.slice() : args ];
+                               if ( list && ( !fired || stack ) ) {
                                        if ( firing ) {
-                                               if ( !flags.once ) {
-                                                       stack.push( [ context, args ] );
-                                               }
-                                       } else if ( !( flags.once && memory ) ) {
-                                               fire( context, args );
+                                               stack.push( args );
+                                       } else {
+                                               fire( args );
                                        }
                                }
                                return this;
@@ -1208,98 +1097,85 @@ jQuery.Callbacks = function( flags ) {
 
        return self;
 };
-
-
-
-
-var // Static reference to slice
-       sliceDeferred = [].slice;
-
 jQuery.extend({
 
        Deferred: function( func ) {
-               var doneList = jQuery.Callbacks( "once memory" ),
-                       failList = jQuery.Callbacks( "once memory" ),
-                       progressList = jQuery.Callbacks( "memory" ),
+               var tuples = [
+                               // action, add listener, listener list, final state
+                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+                               [ "notify", "progress", jQuery.Callbacks("memory") ]
+                       ],
                        state = "pending",
-                       lists = {
-                               resolve: doneList,
-                               reject: failList,
-                               notify: progressList
-                       },
                        promise = {
-                               done: doneList.add,
-                               fail: failList.add,
-                               progress: progressList.add,
-
                                state: function() {
                                        return state;
                                },
-
-                               // Deprecated
-                               isResolved: doneList.fired,
-                               isRejected: failList.fired,
-
-                               then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-                                       deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-                                       return this;
-                               },
                                always: function() {
-                                       deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+                                       deferred.done( arguments ).fail( arguments );
                                        return this;
                                },
-                               pipe: function( fnDone, fnFail, fnProgress ) {
+                               then: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
                                        return jQuery.Deferred(function( newDefer ) {
-                                               jQuery.each( {
-                                                       done: [ fnDone, "resolve" ],
-                                                       fail: [ fnFail, "reject" ],
-                                                       progress: [ fnProgress, "notify" ]
-                                               }, function( handler, data ) {
-                                                       var fn = data[ 0 ],
-                                                               action = data[ 1 ],
-                                                               returned;
-                                                       if ( jQuery.isFunction( fn ) ) {
-                                                               deferred[ handler ](function() {
-                                                                       returned = fn.apply( this, arguments );
+                                               jQuery.each( tuples, function( i, tuple ) {
+                                                       var action = tuple[ 0 ],
+                                                               fn = fns[ i ];
+                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
+                                                       deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
+                                                               function() {
+                                                                       var returned = fn.apply( this, arguments );
                                                                        if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                               returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+                                                                               returned.promise()
+                                                                                       .done( newDefer.resolve )
+                                                                                       .fail( newDefer.reject )
+                                                                                       .progress( newDefer.notify );
                                                                        } else {
                                                                                newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
                                                                        }
-                                                               });
-                                                       } else {
-                                                               deferred[ handler ]( newDefer[ action ] );
-                                                       }
+                                                               } :
+                                                               newDefer[ action ]
+                                                       );
                                                });
+                                               fns = null;
                                        }).promise();
                                },
                                // Get a promise for this deferred
                                // If obj is provided, the promise aspect is added to the object
                                promise: function( obj ) {
-                                       if ( obj == null ) {
-                                               obj = promise;
-                                       } else {
-                                               for ( var key in promise ) {
-                                                       obj[ key ] = promise[ key ];
-                                               }
-                                       }
-                                       return obj;
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
                                }
                        },
-                       deferred = promise.promise({}),
-                       key;
+                       deferred = {};
 
-               for ( key in lists ) {
-                       deferred[ key ] = lists[ key ].fire;
-                       deferred[ key + "With" ] = lists[ key ].fireWith;
-               }
+               // Keep pipe for back-compat
+               promise.pipe = promise.then;
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 3 ];
+
+                       // promise[ done | fail | progress ] = list.add
+                       promise[ tuple[1] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(function() {
+                                       // state = [ resolved | rejected ]
+                                       state = stateString;
+
+                               // [ reject_list | resolve_list ].disable; progress_list.lock
+                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+                       }
 
-               // Handle state
-               deferred.done( function() {
-                       state = "resolved";
-               }, failList.disable, progressList.lock ).fail( function() {
-                       state = "rejected";
-               }, doneList.disable, progressList.lock );
+                       // deferred[ resolve | reject | notify ] = list.fire
+                       deferred[ tuple[0] ] = list.fire;
+                       deferred[ tuple[0] + "With" ] = list.fireWith;
+               });
+
+               // Make the deferred a promise
+               promise.promise( deferred );
 
                // Call given func if any
                if ( func ) {
@@ -1311,52 +1187,57 @@ jQuery.extend({
        },
 
        // Deferred helper
-       when: function( firstParam ) {
-               var args = sliceDeferred.call( arguments, 0 ),
-                       i = 0,
-                       length = args.length,
-                       pValues = new Array( length ),
-                       count = length,
-                       pCount = length,
-                       deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-                               firstParam :
-                               jQuery.Deferred(),
-                       promise = deferred.promise();
-               function resolveFunc( i ) {
-                       return function( value ) {
-                               args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                               if ( !( --count ) ) {
-                                       deferred.resolveWith( deferred, args );
-                               }
-                       };
-               }
-               function progressFunc( i ) {
-                       return function( value ) {
-                               pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                               deferred.notifyWith( promise, pValues );
-                       };
-               }
+       when: function( subordinate /* , ..., subordinateN */ ) {
+               var i = 0,
+                       resolveValues = core_slice.call( arguments ),
+                       length = resolveValues.length,
+
+                       // the count of uncompleted subordinates
+                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+                       // Update function for both resolve and progress values
+                       updateFunc = function( i, contexts, values ) {
+                               return function( value ) {
+                                       contexts[ i ] = this;
+                                       values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+                                       if( values === progressValues ) {
+                                               deferred.notifyWith( contexts, values );
+                                       } else if ( !( --remaining ) ) {
+                                               deferred.resolveWith( contexts, values );
+                                       }
+                               };
+                       },
+
+                       progressValues, progressContexts, resolveContexts;
+
+               // add listeners to Deferred subordinates; treat others as resolved
                if ( length > 1 ) {
+                       progressValues = new Array( length );
+                       progressContexts = new Array( length );
+                       resolveContexts = new Array( length );
                        for ( ; i < length; i++ ) {
-                               if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-                                       args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+                                       resolveValues[ i ].promise()
+                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
+                                               .fail( deferred.reject )
+                                               .progress( updateFunc( i, progressContexts, progressValues ) );
                                } else {
-                                       --count;
+                                       --remaining;
                                }
                        }
-                       if ( !count ) {
-                               deferred.resolveWith( deferred, args );
-                       }
-               } else if ( deferred !== firstParam ) {
-                       deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
                }
-               return promise;
-       }
-});
-
-
 
+               // if we're not waiting on anything, resolve the master
+               if ( !remaining ) {
+                       deferred.resolveWith( resolveContexts, resolveValues );
+               }
 
+               return deferred.promise();
+       }
+});
 jQuery.support = (function() {
 
        var support,
@@ -1366,30 +1247,29 @@ jQuery.support = (function() {
                opt,
                input,
                fragment,
-               tds,
-               events,
                eventName,
                i,
                isSupported,
-               div = document.createElement( "div" ),
-               documentElement = document.documentElement;
+               clickFn,
+               div = document.createElement("div");
 
        // Preliminary tests
-       div.setAttribute("className", "t");
-       div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+       div.setAttribute( "className", "t" );
+       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
 
-       all = div.getElementsByTagName( "*" );
-       a = div.getElementsByTagName( "a" )[ 0 ];
+       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 || !a ) {
+       if ( !all || !all.length ) {
                return {};
        }
 
        // First batch of supports tests
-       select = document.createElement( "select" );
+       select = document.createElement("select");
        opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName( "input" )[ 0 ];
+       input = div.getElementsByTagName("input")[ 0 ];
 
        support = {
                // IE strips leading whitespace when .innerHTML is used
@@ -1414,7 +1294,7 @@ jQuery.support = (function() {
                // Make sure that element opacity exists
                // (IE uses filter instead)
                // Use a regex to work around a WebKit issue. See #5145
-               opacity: /^0.55/.test( a.style.opacity ),
+               opacity: /^0.5/.test( a.style.opacity ),
 
                // Verify style float existence
                // (IE uses styleFloat instead of cssFloat)
@@ -1439,6 +1319,9 @@ jQuery.support = (function() {
                // Where outerHTML is undefined, this still works
                html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
 
+               // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+               boxModel: ( document.compatMode === "CSS1Compat" ),
+
                // Will be defined later
                submitBubbles: true,
                changeBubbles: true,
@@ -1448,12 +1331,10 @@ jQuery.support = (function() {
                inlineBlockNeedsLayout: false,
                shrinkWrapBlocks: false,
                reliableMarginRight: true,
-               pixelMargin: true
+               boxSizingReliable: true,
+               pixelPosition: false
        };
 
-       // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
-       jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
-
        // Make sure checked status is properly cloned
        input.checked = true;
        support.noCloneChecked = input.cloneNode( true ).checked;
@@ -1472,22 +1353,23 @@ jQuery.support = (function() {
        }
 
        if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-               div.attachEvent( "onclick", function() {
+               div.attachEvent( "onclick", clickFn = function() {
                        // Cloning a node shouldn't copy over any
                        // bound event handlers (IE does this)
                        support.noCloneEvent = false;
                });
-               div.cloneNode( true ).fireEvent( "onclick" );
+               div.cloneNode( true ).fireEvent("onclick");
+               div.detachEvent( "onclick", clickFn );
        }
 
        // Check if a radio maintains its value
        // after being appended to the DOM
        input = document.createElement("input");
        input.value = "t";
-       input.setAttribute("type", "radio");
+       input.setAttribute( "type", "radio" );
        support.radioValue = input.value === "t";
 
-       input.setAttribute("checked", "checked");
+       input.setAttribute( "checked", "checked" );
 
        // #11217 - WebKit loses check when the name is after the checked attribute
        input.setAttribute( "name", "t" );
@@ -1514,9 +1396,9 @@ jQuery.support = (function() {
        // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
        if ( div.attachEvent ) {
                for ( i in {
-                       submit: 1,
-                       change: 1,
-                       focusin: 1
+                       submit: true,
+                       change: true,
+                       focusin: true
                }) {
                        eventName = "on" + i;
                        isSupported = ( eventName in div );
@@ -1528,16 +1410,10 @@ jQuery.support = (function() {
                }
        }
 
-       fragment.removeChild( div );
-
-       // Null elements to avoid leaks in IE
-       fragment = select = opt = div = input = null;
-
        // Run tests that need a body at doc ready
        jQuery(function() {
-               var container, outer, inner, table, td, offsetSupport,
-                       marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
-                       paddingMarginBorderVisibility, paddingMarginBorder,
+               var container, div, tds, marginDiv,
+                       divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
                        body = document.getElementsByTagName("body")[0];
 
                if ( !body ) {
@@ -1545,17 +1421,8 @@ jQuery.support = (function() {
                        return;
                }
 
-               conMarginTop = 1;
-               paddingMarginBorder = "padding:0;margin:0;border:";
-               positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
-               paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
-               style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
-               html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
-                       "<table " + style + "' cellpadding='0' cellspacing='0'>" +
-                       "<tr><td></td></tr></table>";
-
                container = document.createElement("div");
-               container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+               container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
                body.insertBefore( container, body.firstChild );
 
                // Construct the test element
@@ -1569,8 +1436,9 @@ jQuery.support = (function() {
                // display:none (it is still safe to use offsets if a parent element is
                // hidden; don safety goggles and see bug #4512 for more information).
                // (only IE 8 fails this test)
-               div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
-               tds = div.getElementsByTagName( "td" );
+               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+               tds = div.getElementsByTagName("td");
+               tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
                isSupported = ( tds[ 0 ].offsetHeight === 0 );
 
                tds[ 0 ].style.display = "";
@@ -1580,20 +1448,30 @@ jQuery.support = (function() {
                // (IE <= 8 fail this test)
                support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
 
-               // Check if div with explicit width and no margin-right incorrectly
-               // gets computed margin-right based on width of container. For more
-               // info see bug #3333
-               // Fails in WebKit before Feb 2011 nightlies
-               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+               // Check box-sizing and margin behavior
+               div.innerHTML = "";
+               div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+               support.boxSizing = ( div.offsetWidth === 4 );
+               support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+               // NOTE: To any future maintainer, we've window.getComputedStyle
+               // because jsdom on node.js will break without it.
                if ( window.getComputedStyle ) {
-                       div.innerHTML = "";
-                       marginDiv = document.createElement( "div" );
-                       marginDiv.style.width = "0";
-                       marginDiv.style.marginRight = "0";
-                       div.style.width = "2px";
+                       support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+                       support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+                       // Check if div with explicit width and no margin-right incorrectly
+                       // gets computed margin-right based on width of container. For more
+                       // info see bug #3333
+                       // Fails in WebKit before Feb 2011 nightlies
+                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                       marginDiv = document.createElement("div");
+                       marginDiv.style.cssText = div.style.cssText = divReset;
+                       marginDiv.style.marginRight = marginDiv.style.width = "0";
+                       div.style.width = "1px";
                        div.appendChild( marginDiv );
                        support.reliableMarginRight =
-                               ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+                               !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
                }
 
                if ( typeof div.style.zoom !== "undefined" ) {
@@ -1602,74 +1480,40 @@ jQuery.support = (function() {
                        // them layout
                        // (IE < 8 does this)
                        div.innerHTML = "";
-                       div.style.width = div.style.padding = "1px";
-                       div.style.border = 0;
-                       div.style.overflow = "hidden";
-                       div.style.display = "inline";
-                       div.style.zoom = 1;
+                       div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
                        support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
 
                        // Check if elements with layout shrink-wrap their children
                        // (IE 6 does this)
                        div.style.display = "block";
                        div.style.overflow = "visible";
-                       div.innerHTML = "<div style='width:5px;'></div>";
+                       div.innerHTML = "<div></div>";
+                       div.firstChild.style.width = "5px";
                        support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-               }
-
-               div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
-               div.innerHTML = html;
-
-               outer = div.firstChild;
-               inner = outer.firstChild;
-               td = outer.nextSibling.firstChild.firstChild;
-
-               offsetSupport = {
-                       doesNotAddBorder: ( inner.offsetTop !== 5 ),
-                       doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-               };
-
-               inner.style.position = "fixed";
-               inner.style.top = "20px";
-
-               // safari subtracts parent border width here which is 5px
-               offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-               inner.style.position = inner.style.top = "";
 
-               outer.style.overflow = "hidden";
-               outer.style.position = "relative";
-
-               offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-               offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-               if ( window.getComputedStyle ) {
-                       div.style.marginTop = "1%";
-                       support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
-               }
-
-               if ( typeof container.style.zoom !== "undefined" ) {
                        container.style.zoom = 1;
                }
 
+               // Null elements to avoid leaks in IE
                body.removeChild( container );
-               marginDiv = div = container = null;
-
-               jQuery.extend( support, offsetSupport );
+               container = div = tds = marginDiv = null;
        });
 
+       // Null elements to avoid leaks in IE
+       fragment.removeChild( div );
+       all = a = select = opt = input = fragment = div = null;
+
        return support;
 })();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
        rmultiDash = /([A-Z])/g;
 
 jQuery.extend({
        cache: {},
 
-       // Please use with caution
+       deletedIds: [],
+
+       // Remove at next major release (1.9/2.0)
        uuid: 0,
 
        // Unique for each copy of jQuery on the page
@@ -1695,7 +1539,7 @@ jQuery.extend({
                        return;
                }
 
-               var privateCache, thisCache, ret,
+               var thisCache, ret,
                        internalKey = jQuery.expando,
                        getByName = typeof name === "string",
 
@@ -1709,12 +1553,11 @@ jQuery.extend({
 
                        // Only defining an ID for JS objects if its cache already exists allows
                        // the code to shortcut on the same path as a DOM node with no cache
-                       id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-                       isEvents = name === "events";
+                       id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
 
                // Avoid doing any more work than we need to when trying to get data on an
                // object that has no data at all
-               if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+               if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
                        return;
                }
 
@@ -1722,7 +1565,7 @@ jQuery.extend({
                        // Only DOM nodes need a new unique ID for each element since their data
                        // ends up in the global cache
                        if ( isNode ) {
-                               elem[ internalKey ] = id = ++jQuery.uuid;
+                               elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
                        } else {
                                id = internalKey;
                        }
@@ -1748,7 +1591,7 @@ jQuery.extend({
                        }
                }
 
-               privateCache = thisCache = cache[ id ];
+               thisCache = cache[ id ];
 
                // jQuery data() is stored in a separate object inside the object's internal data
                // cache in order to avoid key collisions between internal data and user-defined
@@ -1765,12 +1608,6 @@ jQuery.extend({
                        thisCache[ jQuery.camelCase( name ) ] = data;
                }
 
-               // Users should not attempt to inspect the internal events object using jQuery.data,
-               // it is undocumented and subject to change. But does anyone listen? No.
-               if ( isEvents && !thisCache[ name ] ) {
-                       return privateCache.events;
-               }
-
                // Check for both converted-to-camel and non-converted data property names
                // If a data property was specified
                if ( getByName ) {
@@ -1798,16 +1635,11 @@ jQuery.extend({
 
                var thisCache, i, l,
 
-                       // Reference to internal data cache key
-                       internalKey = jQuery.expando,
-
                        isNode = elem.nodeType,
 
                        // See jQuery.data for more information
                        cache = isNode ? jQuery.cache : elem,
-
-                       // See jQuery.data for more information
-                       id = isNode ? elem[ internalKey ] : internalKey;
+                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
 
                // If there is already no cache entry for this object, there is no
                // purpose in continuing
@@ -1834,7 +1666,7 @@ jQuery.extend({
                                                if ( name in thisCache ) {
                                                        name = [ name ];
                                                } else {
-                                                       name = name.split( " " );
+                                                       name = name.split(" ");
                                                }
                                        }
                                }
@@ -1857,35 +1689,23 @@ jQuery.extend({
 
                        // Don't destroy the parent cache unless the internal data object
                        // had been the only thing left in it
-                       if ( !isEmptyDataObject(cache[ id ]) ) {
+                       if ( !isEmptyDataObject( cache[ id ] ) ) {
                                return;
                        }
                }
 
-               // Browsers that fail expando deletion also refuse to delete expandos on
-               // the window, but it will allow it on all other JS objects; other browsers
-               // don't care
-               // Ensure that `cache` is not a window object #10080
-               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+               // Destroy the cache
+               if ( isNode ) {
+                       jQuery.cleanData( [ elem ], true );
+
+               // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+               } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
                        delete cache[ id ];
+
+               // When all else fails, null
                } else {
                        cache[ id ] = null;
                }
-
-               // We destroyed the cache and need to eliminate the expando on the node to avoid
-               // false lookups in the cache for entries that no longer exist
-               if ( isNode ) {
-                       // IE does not allow us to delete expando properties from nodes,
-                       // nor does it have a removeAttribute function on Document nodes;
-                       // we must handle all of these cases
-                       if ( jQuery.support.deleteExpando ) {
-                               delete elem[ internalKey ];
-                       } else if ( elem.removeAttribute ) {
-                               elem.removeAttribute( internalKey );
-                       } else {
-                               elem[ internalKey ] = null;
-                       }
-               }
        },
 
        // For internal use only.
@@ -1895,15 +1715,10 @@ jQuery.extend({
 
        // A method for determining if a DOM node can handle the data expando
        acceptData: function( elem ) {
-               if ( elem.nodeName ) {
-                       var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+               var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
 
-                       if ( match ) {
-                               return !(match === true || elem.getAttribute("classid") !== match);
-                       }
-               }
-
-               return true;
+               // nodes accept data unless otherwise specified; rejection can be conditional
+               return !noData || noData !== true && elem.getAttribute("classid") === noData;
        }
 });
 
@@ -1924,7 +1739,7 @@ jQuery.fn.extend({
                                        for ( l = attr.length; i < l; i++ ) {
                                                name = attr[i].name;
 
-                                               if ( name.indexOf( "data-" ) === 0 ) {
+                                               if ( !name.indexOf( "data-" ) ) {
                                                        name = jQuery.camelCase( name.substring(5) );
 
                                                        dataAttr( elem, name, data[ name ] );
@@ -1996,8 +1811,9 @@ function dataAttr( elem, key, data ) {
                                data = data === "true" ? true :
                                data === "false" ? false :
                                data === "null" ? null :
-                               jQuery.isNumeric( data ) ? +data :
-                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                               // Only convert to a number if it doesn't change the string
+                               +data + "" === data ? +data :
+                               rbrace.test( data ) ? jQuery.parseJSON( data ) :
                                        data;
                        } catch( e ) {}
 
@@ -2014,7 +1830,8 @@ function dataAttr( elem, key, data ) {
 
 // checks a cache object for emptiness
 function isEmptyDataObject( obj ) {
-       for ( var name in obj ) {
+       var name;
+       for ( name in obj ) {
 
                // if the public data object is empty, the private is still empty
                if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
@@ -2027,73 +1844,23 @@ function isEmptyDataObject( obj ) {
 
        return true;
 }
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-       var deferDataKey = type + "defer",
-               queueDataKey = type + "queue",
-               markDataKey = type + "mark",
-               defer = jQuery._data( elem, deferDataKey );
-       if ( defer &&
-               ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-               ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-               // Give room for hard-coded callbacks to fire first
-               // and eventually mark/queue something else on the element
-               setTimeout( function() {
-                       if ( !jQuery._data( elem, queueDataKey ) &&
-                               !jQuery._data( elem, markDataKey ) ) {
-                               jQuery.removeData( elem, deferDataKey, true );
-                               defer.fire();
-                       }
-               }, 0 );
-       }
-}
-
 jQuery.extend({
-
-       _mark: function( elem, type ) {
-               if ( elem ) {
-                       type = ( type || "fx" ) + "mark";
-                       jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-               }
-       },
-
-       _unmark: function( force, elem, type ) {
-               if ( force !== true ) {
-                       type = elem;
-                       elem = force;
-                       force = false;
-               }
-               if ( elem ) {
-                       type = type || "fx";
-                       var key = type + "mark",
-                               count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-                       if ( count ) {
-                               jQuery._data( elem, key, count );
-                       } else {
-                               jQuery.removeData( elem, key, true );
-                               handleQueueMarkDefer( elem, type, "mark" );
-                       }
-               }
-       },
-
        queue: function( elem, type, data ) {
-               var q;
+               var queue;
+
                if ( elem ) {
                        type = ( type || "fx" ) + "queue";
-                       q = jQuery._data( elem, type );
+                       queue = jQuery._data( elem, type );
 
                        // Speed up dequeue by getting out quickly if this is just a lookup
                        if ( data ) {
-                               if ( !q || jQuery.isArray(data) ) {
-                                       q = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               if ( !queue || jQuery.isArray(data) ) {
+                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
                                } else {
-                                       q.push( data );
+                                       queue.push( data );
                                }
                        }
-                       return q || [];
+                       return queue || [];
                }
        },
 
@@ -2101,31 +1868,46 @@ jQuery.extend({
                type = type || "fx";
 
                var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
                        fn = queue.shift(),
-                       hooks = {};
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
 
                // If the fx queue is dequeued, always remove the progress sentinel
                if ( fn === "inprogress" ) {
                        fn = queue.shift();
+                       startLength--;
                }
 
                if ( fn ) {
+
                        // Add a progress sentinel to prevent the fx queue from being
                        // automatically dequeued
                        if ( type === "fx" ) {
                                queue.unshift( "inprogress" );
                        }
 
-                       jQuery._data( elem, type + ".run", hooks );
-                       fn.call( elem, function() {
-                               jQuery.dequeue( elem, type );
-                       }, hooks );
+                       // clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
                }
 
-               if ( !queue.length ) {
-                       jQuery.removeData( elem, type + "queue " + type + ".run", true );
-                       handleQueueMarkDefer( elem, type, "queue" );
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
                }
+       },
+
+       // not intended for public consumption - generates a queueHooks object, or returns the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+                       empty: jQuery.Callbacks("once memory").add(function() {
+                               jQuery.removeData( elem, type + "queue", true );
+                               jQuery.removeData( elem, key, true );
+                       })
+               });
        }
 });
 
@@ -2148,6 +1930,9 @@ jQuery.fn.extend({
                        this.each(function() {
                                var queue = jQuery.queue( this, type, data );
 
+                               // ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
                                if ( type === "fx" && queue[0] !== "inprogress" ) {
                                        jQuery.dequeue( this, type );
                                }
@@ -2176,51 +1961,43 @@ jQuery.fn.extend({
        },
        // Get a promise resolved when queues of a certain type
        // are emptied (fx is the type by default)
-       promise: function( type, object ) {
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
                if ( typeof type !== "string" ) {
-                       object = type;
+                       obj = type;
                        type = undefined;
                }
                type = type || "fx";
-               var defer = jQuery.Deferred(),
-                       elements = this,
-                       i = elements.length,
-                       count = 1,
-                       deferDataKey = type + "defer",
-                       queueDataKey = type + "queue",
-                       markDataKey = type + "mark",
-                       tmp;
-               function resolve() {
-                       if ( !( --count ) ) {
-                               defer.resolveWith( elements, [ elements ] );
-                       }
-               }
+
                while( i-- ) {
-                       if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-                                       jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
                                count++;
-                               tmp.add( resolve );
+                               tmp.empty.add( resolve );
                        }
                }
                resolve();
-               return defer.promise( object );
+               return defer.promise( obj );
        }
 });
-
-
-
-
-var rclass = /[\n\t\r]/g,
-       rspace = /\s+/,
+var nodeHook, boolHook, fixSpecified,
+       rclass = /[\t\r\n]/g,
        rreturn = /\r/g,
        rtype = /^(?:button|input)$/i,
        rfocusable = /^(?:button|input|object|select|textarea)$/i,
-       rclickable = /^a(?:rea)?$/i,
+       rclickable = /^a(?:rea|)$/i,
        rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-       getSetAttribute = jQuery.support.getSetAttribute,
-       nodeHook, boolHook, fixSpecified;
+       getSetAttribute = jQuery.support.getSetAttribute;
 
 jQuery.fn.extend({
        attr: function( name, value ) {
@@ -2259,7 +2036,7 @@ jQuery.fn.extend({
                }
 
                if ( value && typeof value === "string" ) {
-                       classNames = value.split( rspace );
+                       classNames = value.split( core_rspace );
 
                        for ( i = 0, l = this.length; i < l; i++ ) {
                                elem = this[ i ];
@@ -2272,7 +2049,7 @@ jQuery.fn.extend({
                                                setClass = " " + elem.className + " ";
 
                                                for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                       if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) {
                                                                setClass += classNames[ c ] + " ";
                                                        }
                                                }
@@ -2286,31 +2063,30 @@ jQuery.fn.extend({
        },
 
        removeClass: function( value ) {
-               var classNames, i, l, elem, className, c, cl;
+               var removes, className, elem, c, cl, i, l;
 
                if ( jQuery.isFunction( value ) ) {
                        return this.each(function( j ) {
                                jQuery( this ).removeClass( value.call(this, j, this.className) );
                        });
                }
-
                if ( (value && typeof value === "string") || value === undefined ) {
-                       classNames = ( value || "" ).split( rspace );
+                       removes = ( value || "" ).split( core_rspace );
 
                        for ( i = 0, l = this.length; i < l; i++ ) {
                                elem = this[ i ];
-
                                if ( elem.nodeType === 1 && elem.className ) {
-                                       if ( value ) {
-                                               className = (" " + elem.className + " ").replace( rclass, " " );
-                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       className = className.replace(" " + classNames[ c ] + " ", " ");
-                                               }
-                                               elem.className = jQuery.trim( className );
 
-                                       } else {
-                                               elem.className = "";
+                                       className = (" " + elem.className + " ").replace( rclass, " " );
+
+                                       // loop over each item in the removal list
+                                       for ( c = 0, cl = removes.length; c < cl; c++ ) {
+                                               // Remove until there is nothing to remove,
+                                               while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) {
+                                                       className = className.replace( " " + removes[ c ] + " " , " " );
+                                               }
                                        }
+                                       elem.className = value ? jQuery.trim( className ) : "";
                                }
                        }
                }
@@ -2335,10 +2111,10 @@ jQuery.fn.extend({
                                        i = 0,
                                        self = jQuery( this ),
                                        state = stateVal,
-                                       classNames = value.split( rspace );
+                                       classNames = value.split( core_rspace );
 
                                while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space seperated list
+                                       // check each className given, space separated list
                                        state = isBool ? state : !self.hasClass( className );
                                        self[ state ? "addClass" : "removeClass" ]( className );
                                }
@@ -2360,7 +2136,7 @@ jQuery.fn.extend({
                        i = 0,
                        l = this.length;
                for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
                                return true;
                        }
                }
@@ -2395,7 +2171,8 @@ jQuery.fn.extend({
                isFunction = jQuery.isFunction( value );
 
                return this.each(function( i ) {
-                       var self = jQuery(this), val;
+                       var val,
+                               self = jQuery(this);
 
                        if ( this.nodeType !== 1 ) {
                                return;
@@ -2497,16 +2274,8 @@ jQuery.extend({
                }
        },
 
-       attrFn: {
-               val: true,
-               css: true,
-               html: true,
-               text: true,
-               data: true,
-               width: true,
-               height: true,
-               offset: true
-       },
+       // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
+       attrFn: {},
 
        attr: function( elem, name, value, pass ) {
                var ret, hooks, notxml,
@@ -2517,7 +2286,7 @@ jQuery.extend({
                        return;
                }
 
-               if ( pass && name in jQuery.attrFn ) {
+               if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
                        return jQuery( elem )[ name ]( value );
                }
 
@@ -2545,7 +2314,7 @@ jQuery.extend({
                                return ret;
 
                        } else {
-                               elem.setAttribute( name, "" + value );
+                               elem.setAttribute( name, value + "" );
                                return value;
                        }
 
@@ -2564,14 +2333,14 @@ jQuery.extend({
        },
 
        removeAttr: function( elem, value ) {
-               var propName, attrNames, name, l, isBool,
+               var propName, attrNames, name, isBool,
                        i = 0;
 
                if ( value && elem.nodeType === 1 ) {
-                       attrNames = value.toLowerCase().split( rspace );
-                       l = attrNames.length;
 
-                       for ( ; i < l; i++ ) {
+                       attrNames = value.split( core_rspace );
+
+                       for ( ; i < attrNames.length; i++ ) {
                                name = attrNames[ i ];
 
                                if ( name ) {
@@ -2701,9 +2470,6 @@ jQuery.extend({
        }
 });
 
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
 // Hook for boolean attributes
 boolHook = {
        get: function( elem, name ) {
@@ -2750,8 +2516,8 @@ if ( !getSetAttribute ) {
                get: function( elem, name ) {
                        var ret;
                        ret = elem.getAttributeNode( name );
-                       return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-                               ret.nodeValue :
+                       return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
+                               ret.value :
                                undefined;
                },
                set: function( elem, value, name ) {
@@ -2761,13 +2527,10 @@ if ( !getSetAttribute ) {
                                ret = document.createAttribute( name );
                                elem.setAttributeNode( ret );
                        }
-                       return ( ret.nodeValue = value + "" );
+                       return ( ret.value = value + "" );
                }
        };
 
-       // Apply the nodeHook to tabindex
-       jQuery.attrHooks.tabindex.set = nodeHook.set;
-
        // Set width and height to auto instead of 0 on empty string( Bug #8150 )
        // This is for removals
        jQuery.each([ "width", "height" ], function( i, name ) {
@@ -2815,7 +2578,7 @@ if ( !jQuery.support.style ) {
                        return elem.style.cssText.toLowerCase() || undefined;
                },
                set: function( elem, value ) {
-                       return ( elem.style.cssText = "" + value );
+                       return ( elem.style.cssText = value + "" );
                }
        };
 }
@@ -2865,35 +2628,12 @@ jQuery.each([ "radio", "checkbox" ], function() {
                }
        });
 });
-
-
-
-
 var rformElems = /^(?:textarea|input|select)$/i,
-       rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-       rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
+       rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
+       rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
        rkeyEvent = /^key/,
        rmouseEvent = /^(?:mouse|contextmenu)|click/,
        rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-       rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-       quickParse = function( selector ) {
-               var quick = rquickIs.exec( selector );
-               if ( quick ) {
-                       //   0  1    2   3
-                       // [ _, tag, id, class ]
-                       quick[1] = ( quick[1] || "" ).toLowerCase();
-                       quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-               }
-               return quick;
-       },
-       quickIs = function( elem, m ) {
-               var attrs = elem.attributes || {};
-               return (
-                       (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-                       (!m[2] || (attrs.id || {}).value === m[2]) &&
-                       (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-               );
-       },
        hoverHack = function( events ) {
                return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
        };
@@ -2908,7 +2648,7 @@ jQuery.event = {
 
                var elemData, eventHandle, events,
                        t, tns, type, namespaces, handleObj,
-                       handleObjIn, quick, handlers, special;
+                       handleObjIn, handlers, special;
 
                // Don't attach events to noData or text/comment nodes (allow plain objects tho)
                if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
@@ -2971,7 +2711,7 @@ jQuery.event = {
                                handler: handler,
                                guid: handler.guid,
                                selector: selector,
-                               quick: selector && quickParse( selector ),
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
                                namespace: namespaces.join(".")
                        }, handleObjIn );
 
@@ -3021,9 +2761,9 @@ jQuery.event = {
        // Detach an event or set of events from an element
        remove: function( elem, types, handler, selector, mappedTypes ) {
 
-               var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-                       t, tns, type, origType, namespaces, origCount,
-                       j, events, special, handle, eventType, handleObj;
+               var t, tns, type, origType, namespaces, origCount,
+                       j, events, special, eventType, handleObj,
+                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
 
                if ( !elemData || !(events = elemData.events) ) {
                        return;
@@ -3048,7 +2788,7 @@ jQuery.event = {
                        type = ( selector? special.delegateType : special.bindType ) || type;
                        eventType = events[ type ] || [];
                        origCount = eventType.length;
-                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
 
                        // Remove matching events
                        for ( j = 0; j < eventType.length; j++ ) {
@@ -3072,7 +2812,7 @@ jQuery.event = {
                        // Remove generic event handler if we removed something and no more handlers exist
                        // (avoids potential for endless recursion during removal of special event handlers)
                        if ( eventType.length === 0 && origCount !== eventType.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
                                        jQuery.removeEvent( elem, type, elemData.handle );
                                }
 
@@ -3082,14 +2822,11 @@ jQuery.event = {
 
                // Remove the expando if it's no longer used
                if ( jQuery.isEmptyObject( events ) ) {
-                       handle = elemData.handle;
-                       if ( handle ) {
-                               handle.elem = null;
-                       }
+                       delete elemData.handle;
 
                        // removeData also checks for emptiness and clears the expando if empty
                        // so use it instead of delete
-                       jQuery.removeData( elem, [ "events", "handle" ], true );
+                       jQuery.removeData( elem, "events", true );
                }
        },
 
@@ -3108,9 +2845,9 @@ jQuery.event = {
                }
 
                // Event object or event type
-               var type = event.type || event,
-                       namespaces = [],
-                       cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+               var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
+                       type = event.type || event,
+                       namespaces = [];
 
                // focus/blur morphs to focusin/out; ensure we're not firing them right now
                if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
@@ -3148,7 +2885,7 @@ jQuery.event = {
                event.isTrigger = true;
                event.exclusive = exclusive;
                event.namespace = namespaces.join( "." );
-               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
                ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
 
                // Handle a global trigger
@@ -3187,14 +2924,13 @@ jQuery.event = {
 
                        bubbleType = special.delegateType || type;
                        cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-                       old = null;
-                       for ( ; cur; cur = cur.parentNode ) {
+                       for ( old = elem; cur; cur = cur.parentNode ) {
                                eventPath.push([ cur, bubbleType ]);
                                old = cur;
                        }
 
                        // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( old && old === elem.ownerDocument ) {
+                       if ( old === (elem.ownerDocument || document) ) {
                                eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
                        }
                }
@@ -3211,7 +2947,7 @@ jQuery.event = {
                        }
                        // Note that this is a bare JS function and not a jQuery handler
                        handle = ontype && cur[ ontype ];
-                       if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+                       if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
                                event.preventDefault();
                        }
                }
@@ -3256,13 +2992,13 @@ jQuery.event = {
                // Make a writable jQuery.Event from the native event object
                event = jQuery.event.fix( event || window.event );
 
-               var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+               var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
+                       handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
                        delegateCount = handlers.delegateCount,
-                       args = [].slice.call( arguments, 0 ),
+                       args = core_slice.call( arguments ),
                        run_all = !event.exclusive && !event.namespace,
                        special = jQuery.event.special[ event.type ] || {},
-                       handlerQueue = [],
-                       i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+                       handlerQueue = [];
 
                // Use the fix-ed jQuery.Event rather than the (read-only) native event
                args[0] = event;
@@ -3277,25 +3013,20 @@ jQuery.event = {
                // Avoid non-left-click bubbling in Firefox (#3861)
                if ( delegateCount && !(event.button && event.type === "click") ) {
 
-                       // Pregenerate a single jQuery object for reuse with .is()
-                       jqcur = jQuery(this);
-                       jqcur.context = this.ownerDocument || this;
-
                        for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
 
-                               // Don't process events on disabled elements (#6911, #8165)
-                               if ( cur.disabled !== true ) {
+                               // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.disabled !== true || event.type !== "click" ) {
                                        selMatch = {};
                                        matches = [];
-                                       jqcur[0] = cur;
                                        for ( i = 0; i < delegateCount; i++ ) {
                                                handleObj = handlers[ i ];
                                                sel = handleObj.selector;
 
                                                if ( selMatch[ sel ] === undefined ) {
-                                                       selMatch[ sel ] = (
-                                                               handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-                                                       );
+                                                       selMatch[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) >= 0 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
                                                }
                                                if ( selMatch[ sel ] ) {
                                                        matches.push( handleObj );
@@ -3429,20 +3160,13 @@ jQuery.event = {
                        event.target = event.target.parentNode;
                }
 
-               // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-               if ( event.metaKey === undefined ) {
-                       event.metaKey = event.ctrlKey;
-               }
+               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
+               event.metaKey = !!event.metaKey;
 
                return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
        },
 
        special: {
-               ready: {
-                       // Make sure the ready event is setup
-                       setup: jQuery.bindReady
-               },
-
                load: {
                        // Prevent triggered image.load events from bubbling to window.load
                        noBubble: true
@@ -3505,8 +3229,17 @@ jQuery.removeEvent = document.removeEventListener ?
                }
        } :
        function( elem, type, handle ) {
+               var name = "on" + type;
+
                if ( elem.detachEvent ) {
-                       elem.detachEvent( "on" + type, handle );
+
+                       // #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;
+                       }
+
+                       elem.detachEvent( name, handle );
                }
        };
 
@@ -3603,11 +3336,11 @@ jQuery.each({
                bindType: fix,
 
                handle: function( event ) {
-                       var target = this,
+                       var ret,
+                               target = this,
                                related = event.relatedTarget,
                                handleObj = event.handleObj,
-                               selector = handleObj.selector,
-                               ret;
+                               selector = handleObj.selector;
 
                        // For mousenter/leave call the handler if related is outside the target.
                        // NB: No relatedTarget if the mouse left/entered the browser window
@@ -3636,16 +3369,16 @@ if ( !jQuery.support.submitBubbles ) {
                                // Node name check avoids a VML-related crash in IE (#9807)
                                var elem = e.target,
                                        form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !form._submit_attached ) {
+                               if ( form && !jQuery._data( form, "_submit_attached" ) ) {
                                        jQuery.event.add( form, "submit._submit", function( event ) {
                                                event._submit_bubble = true;
                                        });
-                                       form._submit_attached = true;
+                                       jQuery._data( form, "_submit_attached", true );
                                }
                        });
                        // return undefined since we don't need an event listener
                },
-               
+
                postDispatch: function( event ) {
                        // If form was submitted by the user, bubble the event up the tree
                        if ( event._submit_bubble ) {
@@ -3688,8 +3421,9 @@ if ( !jQuery.support.changeBubbles ) {
                                        jQuery.event.add( this, "click._change", function( event ) {
                                                if ( this._just_changed && !event.isTrigger ) {
                                                        this._just_changed = false;
-                                                       jQuery.event.simulate( "change", this, event, true );
                                                }
+                                               // Allow triggered, simulated change events (#11500)
+                                               jQuery.event.simulate( "change", this, event, true );
                                        });
                                }
                                return false;
@@ -3698,13 +3432,13 @@ if ( !jQuery.support.changeBubbles ) {
                        jQuery.event.add( this, "beforeactivate._change", function( e ) {
                                var elem = e.target;
 
-                               if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
                                        jQuery.event.add( elem, "change._change", function( event ) {
                                                if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
                                                        jQuery.event.simulate( "change", this.parentNode, event, true );
                                                }
                                        });
-                                       elem._change_attached = true;
+                                       jQuery._data( elem, "_change_attached", true );
                                }
                        });
                },
@@ -3721,7 +3455,7 @@ if ( !jQuery.support.changeBubbles ) {
                teardown: function() {
                        jQuery.event.remove( this, "._change" );
 
-                       return rformElems.test( this.nodeName );
+                       return !rformElems.test( this.nodeName );
                }
        };
 }
@@ -3810,9 +3544,10 @@ jQuery.fn.extend({
                return this.on( types, selector, data, fn, 1 );
        },
        off: function( types, selector, fn ) {
+               var handleObj, type;
                if ( types && types.preventDefault && types.handleObj ) {
                        // ( event )  dispatched jQuery.Event
-                       var handleObj = types.handleObj;
+                       handleObj = types.handleObj;
                        jQuery( types.delegateTarget ).off(
                                handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
                                handleObj.selector,
@@ -3822,7 +3557,7 @@ jQuery.fn.extend({
                }
                if ( typeof types === "object" ) {
                        // ( types-object [, selector] )
-                       for ( var type in types ) {
+                       for ( type in types ) {
                                this.off( type, selector, types[ type ] );
                        }
                        return this;
@@ -3861,7 +3596,7 @@ jQuery.fn.extend({
        },
        undelegate: function( selector, types, fn ) {
                // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+               return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
        },
 
        trigger: function( type, data ) {
@@ -3922,10 +3657,6 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
                        this.trigger( name );
        };
 
-       if ( jQuery.attrFn ) {
-               jQuery.attrFn[ name ] = true;
-       }
-
        if ( rkeyEvent.test( name ) ) {
                jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
        }
@@ -3934,1609 +3665,1799 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
                jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
        }
 });
+/*!\r
+ * Sizzle CSS Selector Engine\r
+ * Copyright 2012 jQuery Foundation and other contributors\r
+ * Released under the MIT license\r
+ * http://sizzlejs.com/\r
+ */\r
+(function( window, undefined ) {\r
+\r
+var cachedruns,\r
+       assertGetIdNotName,\r
+       Expr,\r
+       getText,\r
+       isXML,\r
+       contains,\r
+       compile,\r
+       sortOrder,\r
+       hasDuplicate,\r
+       outermostContext,\r
+\r
+       baseHasDuplicate = true,\r
+       strundefined = "undefined",\r
+\r
+       expando = ( "sizcache" + Math.random() ).replace( ".", "" ),\r
+\r
+       Token = String,\r
+       document = window.document,\r
+       docElem = document.documentElement,\r
+       dirruns = 0,\r
+       done = 0,\r
+       pop = [].pop,\r
+       push = [].push,\r
+       slice = [].slice,\r
+       // Use a stripped-down indexOf if a native one is unavailable\r
+       indexOf = [].indexOf || function( elem ) {\r
+               var i = 0,\r
+                       len = this.length;\r
+               for ( ; i < len; i++ ) {\r
+                       if ( this[i] === elem ) {\r
+                               return i;\r
+                       }\r
+               }\r
+               return -1;\r
+       },\r
+\r
+       // Augment a function for special use by Sizzle\r
+       markFunction = function( fn, value ) {\r
+               fn[ expando ] = value == null || value;\r
+               return fn;\r
+       },\r
+\r
+       createCache = function() {\r
+               var cache = {},\r
+                       keys = [];\r
+\r
+               return markFunction(function( key, value ) {\r
+                       // Only keep the most recent entries\r
+                       if ( keys.push( key ) > Expr.cacheLength ) {\r
+                               delete cache[ keys.shift() ];\r
+                       }\r
+\r
+                       return (cache[ key ] = value);\r
+               }, cache );\r
+       },\r
+\r
+       classCache = createCache(),\r
+       tokenCache = createCache(),\r
+       compilerCache = createCache(),\r
+\r
+       // Regex\r
+\r
+       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\r
+       whitespace = "[\\x20\\t\\r\\n\\f]",\r
+       // http://www.w3.org/TR/css3-syntax/#characters\r
+       characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",\r
+\r
+       // Loosely modeled on CSS identifier characters\r
+       // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\r
+       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r
+       identifier = characterEncoding.replace( "w", "w#" ),\r
+\r
+       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\r
+       operators = "([*^$|!~]?=)",\r
+       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +\r
+               "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",\r
+\r
+       // Prefer arguments not in parens/brackets,\r
+       //   then attribute selectors and non-pseudos (denoted by :),\r
+       //   then anything else\r
+       // These preferences are here to reduce the number of selectors\r
+       //   needing tokenize in the PSEUDO preFilter\r
+       pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",\r
+\r
+       // For matchExpr.POS and matchExpr.needsContext\r
+       pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +\r
+               "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",\r
+\r
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),\r
+\r
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),\r
+       rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),\r
+       rpseudo = new RegExp( pseudos ),\r
+\r
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors\r
+       rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,\r
+\r
+       rnot = /^:not/,\r
+       rsibling = /[\x20\t\r\n\f]*[+~]/,\r
+       rendsWithNot = /:not\($/,\r
+\r
+       rheader = /h\d/i,\r
+       rinputs = /input|select|textarea|button/i,\r
+\r
+       rbackslash = /\\(?!\\)/g,\r
+\r
+       matchExpr = {\r
+               "ID": new RegExp( "^#(" + characterEncoding + ")" ),\r
+               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),\r
+               "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),\r
+               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),\r
+               "ATTR": new RegExp( "^" + attributes ),\r
+               "PSEUDO": new RegExp( "^" + pseudos ),\r
+               "POS": new RegExp( pos, "i" ),\r
+               "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +\r
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +\r
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),\r
+               // For use in libraries implementing .is()\r
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )\r
+       },\r
+\r
+       // Support\r
+\r
+       // Used for testing something on an element\r
+       assert = function( fn ) {\r
+               var div = document.createElement("div");\r
+\r
+               try {\r
+                       return fn( div );\r
+               } catch (e) {\r
+                       return false;\r
+               } finally {\r
+                       // release memory in IE\r
+                       div = null;\r
+               }\r
+       },\r
+\r
+       // Check if getElementsByTagName("*") returns only elements\r
+       assertTagNameNoComments = assert(function( div ) {\r
+               div.appendChild( document.createComment("") );\r
+               return !div.getElementsByTagName("*").length;\r
+       }),\r
+\r
+       // Check if getAttribute returns normalized href attributes\r
+       assertHrefNotNormalized = assert(function( div ) {\r
+               div.innerHTML = "<a href='#'></a>";\r
+               return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\r
+                       div.firstChild.getAttribute("href") === "#";\r
+       }),\r
+\r
+       // Check if attributes should be retrieved by attribute nodes\r
+       assertAttributes = assert(function( div ) {\r
+               div.innerHTML = "<select></select>";\r
+               var type = typeof div.lastChild.getAttribute("multiple");\r
+               // IE8 returns a string for some attributes even when not present\r
+               return type !== "boolean" && type !== "string";\r
+       }),\r
+\r
+       // Check if getElementsByClassName can be trusted\r
+       assertUsableClassName = assert(function( div ) {\r
+               // Opera can't find a second classname (in 9.6)\r
+               div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";\r
+               if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {\r
+                       return false;\r
+               }\r
+\r
+               // Safari 3.2 caches class attributes and doesn't catch changes\r
+               div.lastChild.className = "e";\r
+               return div.getElementsByClassName("e").length === 2;\r
+       }),\r
+\r
+       // Check if getElementById returns elements by name\r
+       // Check if getElementsByName privileges form controls or returns elements by ID\r
+       assertUsableName = assert(function( div ) {\r
+               // Inject content\r
+               div.id = expando + 0;\r
+               div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";\r
+               docElem.insertBefore( div, docElem.firstChild );\r
+\r
+               // Test\r
+               var pass = document.getElementsByName &&\r
+                       // buggy browsers will return fewer than the correct 2\r
+                       document.getElementsByName( expando ).length === 2 +\r
+                       // buggy browsers will return more than the correct 0\r
+                       document.getElementsByName( expando + 0 ).length;\r
+               assertGetIdNotName = !document.getElementById( expando );\r
+\r
+               // Cleanup\r
+               docElem.removeChild( div );\r
+\r
+               return pass;\r
+       });\r
+\r
+// If slice is not available, provide a backup\r
+try {\r
+       slice.call( docElem.childNodes, 0 )[0].nodeType;\r
+} catch ( e ) {\r
+       slice = function( i ) {\r
+               var elem,\r
+                       results = [];\r
+               for ( ; (elem = this[i]); i++ ) {\r
+                       results.push( elem );\r
+               }\r
+               return results;\r
+       };\r
+}\r
+\r
+function Sizzle( selector, context, results, seed ) {\r
+       results = results || [];\r
+       context = context || document;\r
+       var match, elem, xml, m,\r
+               nodeType = context.nodeType;\r
+\r
+       if ( !selector || typeof selector !== "string" ) {\r
+               return results;\r
+       }\r
+\r
+       if ( nodeType !== 1 && nodeType !== 9 ) {\r
+               return [];\r
+       }\r
+\r
+       xml = isXML( context );\r
+\r
+       if ( !xml && !seed ) {\r
+               if ( (match = rquickExpr.exec( selector )) ) {\r
+                       // Speed-up: Sizzle("#ID")\r
+                       if ( (m = match[1]) ) {\r
+                               if ( nodeType === 9 ) {\r
+                                       elem = context.getElementById( m );\r
+                                       // Check parentNode to catch when Blackberry 4.6 returns\r
+                                       // nodes that are no longer in the document #6963\r
+                                       if ( elem && elem.parentNode ) {\r
+                                               // Handle the case where IE, Opera, and Webkit return items\r
+                                               // by name instead of ID\r
+                                               if ( elem.id === m ) {\r
+                                                       results.push( elem );\r
+                                                       return results;\r
+                                               }\r
+                                       } else {\r
+                                               return results;\r
+                                       }\r
+                               } else {\r
+                                       // Context is not a document\r
+                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\r
+                                               contains( context, elem ) && elem.id === m ) {\r
+                                               results.push( elem );\r
+                                               return results;\r
+                                       }\r
+                               }\r
+\r
+                       // Speed-up: Sizzle("TAG")\r
+                       } else if ( match[2] ) {\r
+                               push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\r
+                               return results;\r
+\r
+                       // Speed-up: Sizzle(".CLASS")\r
+                       } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\r
+                               push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\r
+                               return results;\r
+                       }\r
+               }\r
+       }\r
+\r
+       // All others\r
+       return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );\r
+}\r
+\r
+Sizzle.matches = function( expr, elements ) {\r
+       return Sizzle( expr, null, null, elements );\r
+};\r
+\r
+Sizzle.matchesSelector = function( elem, expr ) {\r
+       return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
+};\r
+\r
+// Returns a function to use in pseudos for input types\r
+function createInputPseudo( type ) {\r
+       return function( elem ) {\r
+               var name = elem.nodeName.toLowerCase();\r
+               return name === "input" && elem.type === type;\r
+       };\r
+}\r
+\r
+// Returns a function to use in pseudos for buttons\r
+function createButtonPseudo( type ) {\r
+       return function( elem ) {\r
+               var name = elem.nodeName.toLowerCase();\r
+               return (name === "input" || name === "button") && elem.type === type;\r
+       };\r
+}\r
+\r
+// Returns a function to use in pseudos for positionals\r
+function createPositionalPseudo( fn ) {\r
+       return markFunction(function( argument ) {\r
+               argument = +argument;\r
+               return markFunction(function( seed, matches ) {\r
+                       var j,\r
+                               matchIndexes = fn( [], seed.length, argument ),\r
+                               i = matchIndexes.length;\r
+\r
+                       // Match elements found at the specified indexes\r
+                       while ( i-- ) {\r
+                               if ( seed[ (j = matchIndexes[i]) ] ) {\r
+                                       seed[j] = !(matches[j] = seed[j]);\r
+                               }\r
+                       }\r
+               });\r
+       });\r
+}\r
+\r
+/**\r
+ * Utility function for retrieving the text value of an array of DOM nodes\r
+ * @param {Array|Element} elem\r
+ */\r
+getText = Sizzle.getText = function( elem ) {\r
+       var node,\r
+               ret = "",\r
+               i = 0,\r
+               nodeType = elem.nodeType;\r
+\r
+       if ( nodeType ) {\r
+               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r
+                       // Use textContent for elements\r
+                       // innerText usage removed for consistency of new lines (see #11153)\r
+                       if ( typeof elem.textContent === "string" ) {\r
+                               return elem.textContent;\r
+                       } else {\r
+                               // Traverse its children\r
+                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r
+                                       ret += getText( elem );\r
+                               }\r
+                       }\r
+               } else if ( nodeType === 3 || nodeType === 4 ) {\r
+                       return elem.nodeValue;\r
+               }\r
+               // Do not include comment or processing instruction nodes\r
+       } else {\r
+\r
+               // If no nodeType, this is expected to be an array\r
+               for ( ; (node = elem[i]); i++ ) {\r
+                       // Do not traverse comment nodes\r
+                       ret += getText( node );\r
+               }\r
+       }\r
+       return ret;\r
+};\r
+\r
+isXML = Sizzle.isXML = function( elem ) {\r
+       // documentElement is verified for cases where it doesn't yet exist\r
+       // (such as loading iframes in IE - #4833)\r
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;\r
+       return documentElement ? documentElement.nodeName !== "HTML" : false;\r
+};\r
+\r
+// Element contains another\r
+contains = Sizzle.contains = docElem.contains ?\r
+       function( a, b ) {\r
+               var adown = a.nodeType === 9 ? a.documentElement : a,\r
+                       bup = b && b.parentNode;\r
+               return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\r
+       } :\r
+       docElem.compareDocumentPosition ?\r
+       function( a, b ) {\r
+               return b && !!( a.compareDocumentPosition( b ) & 16 );\r
+       } :\r
+       function( a, b ) {\r
+               while ( (b = b.parentNode) ) {\r
+                       if ( b === a ) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       };\r
+\r
+Sizzle.attr = function( elem, name ) {\r
+       var val,\r
+               xml = isXML( elem );\r
+\r
+       if ( !xml ) {\r
+               name = name.toLowerCase();\r
+       }\r
+       if ( (val = Expr.attrHandle[ name ]) ) {\r
+               return val( elem );\r
+       }\r
+       if ( xml || assertAttributes ) {\r
+               return elem.getAttribute( name );\r
+       }\r
+       val = elem.getAttributeNode( name );\r
+       return val ?\r
+               typeof elem[ name ] === "boolean" ?\r
+                       elem[ name ] ? name : null :\r
+                       val.specified ? val.value : null :\r
+               null;\r
+};\r
+\r
+Expr = Sizzle.selectors = {\r
+\r
+       // Can be adjusted by the user\r
+       cacheLength: 50,\r
+\r
+       createPseudo: markFunction,\r
+\r
+       match: matchExpr,\r
+\r
+       // IE6/7 return a modified href\r
+       attrHandle: assertHrefNotNormalized ?\r
+               {} :\r
+               {\r
+                       "href": function( elem ) {\r
+                               return elem.getAttribute( "href", 2 );\r
+                       },\r
+                       "type": function( elem ) {\r
+                               return elem.getAttribute("type");\r
+                       }\r
+               },\r
+\r
+       find: {\r
+               "ID": assertGetIdNotName ?\r
+                       function( id, context, xml ) {\r
+                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
+                                       var m = context.getElementById( id );\r
+                                       // Check parentNode to catch when Blackberry 4.6 returns\r
+                                       // nodes that are no longer in the document #6963\r
+                                       return m && m.parentNode ? [m] : [];\r
+                               }\r
+                       } :\r
+                       function( id, context, xml ) {\r
+                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
+                                       var m = context.getElementById( id );\r
+\r
+                                       return m ?\r
+                                               m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?\r
+                                                       [m] :\r
+                                                       undefined :\r
+                                               [];\r
+                               }\r
+                       },\r
+\r
+               "TAG": assertTagNameNoComments ?\r
+                       function( tag, context ) {\r
+                               if ( typeof context.getElementsByTagName !== strundefined ) {\r
+                                       return context.getElementsByTagName( tag );\r
+                               }\r
+                       } :\r
+                       function( tag, context ) {\r
+                               var results = context.getElementsByTagName( tag );\r
+\r
+                               // Filter out possible comments\r
+                               if ( tag === "*" ) {\r
+                                       var elem,\r
+                                               tmp = [],\r
+                                               i = 0;\r
+\r
+                                       for ( ; (elem = results[i]); i++ ) {\r
+                                               if ( elem.nodeType === 1 ) {\r
+                                                       tmp.push( elem );\r
+                                               }\r
+                                       }\r
+\r
+                                       return tmp;\r
+                               }\r
+                               return results;\r
+                       },\r
+\r
+               "NAME": assertUsableName && function( tag, context ) {\r
+                       if ( typeof context.getElementsByName !== strundefined ) {\r
+                               return context.getElementsByName( name );\r
+                       }\r
+               },\r
+\r
+               "CLASS": assertUsableClassName && function( className, context, xml ) {\r
+                       if ( typeof context.getElementsByClassName !== strundefined && !xml ) {\r
+                               return context.getElementsByClassName( className );\r
+                       }\r
+               }\r
+       },\r
+\r
+       relative: {\r
+               ">": { dir: "parentNode", first: true },\r
+               " ": { dir: "parentNode" },\r
+               "+": { dir: "previousSibling", first: true },\r
+               "~": { dir: "previousSibling" }\r
+       },\r
+\r
+       preFilter: {\r
+               "ATTR": function( match ) {\r
+                       match[1] = match[1].replace( rbackslash, "" );\r
+\r
+                       // Move the given value to match[3] whether quoted or unquoted\r
+                       match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );\r
+\r
+                       if ( match[2] === "~=" ) {\r
+                               match[3] = " " + match[3] + " ";\r
+                       }\r
+\r
+                       return match.slice( 0, 4 );\r
+               },\r
+\r
+               "CHILD": function( match ) {\r
+                       /* matches from matchExpr["CHILD"]\r
+                               1 type (only|nth|...)\r
+                               2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)\r
+                               3 xn-component of xn+y argument ([+-]?\d*n|)\r
+                               4 sign of xn-component\r
+                               5 x of xn-component\r
+                               6 sign of y-component\r
+                               7 y of y-component\r
+                       */\r
+                       match[1] = match[1].toLowerCase();\r
+\r
+                       if ( match[1] === "nth" ) {\r
+                               // nth-child requires argument\r
+                               if ( !match[2] ) {\r
+                                       Sizzle.error( match[0] );\r
+                               }\r
+\r
+                               // numeric x and y parameters for Expr.filter.CHILD\r
+                               // remember that false/true cast respectively to 0/1\r
+                               match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );\r
+                               match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );\r
+\r
+                       // other types prohibit arguments\r
+                       } else if ( match[2] ) {\r
+                               Sizzle.error( match[0] );\r
+                       }\r
+\r
+                       return match;\r
+               },\r
+\r
+               "PSEUDO": function( match ) {\r
+                       var unquoted, excess;\r
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {\r
+                               return null;\r
+                       }\r
+\r
+                       if ( match[3] ) {\r
+                               match[2] = match[3];\r
+                       } else if ( (unquoted = match[4]) ) {\r
+                               // Only check arguments that contain a pseudo\r
+                               if ( rpseudo.test(unquoted) &&\r
+                                       // Get excess from tokenize (recursively)\r
+                                       (excess = tokenize( unquoted, true )) &&\r
+                                       // advance to the next closing parenthesis\r
+                                       (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {\r
+\r
+                                       // excess is a negative index\r
+                                       unquoted = unquoted.slice( 0, excess );\r
+                                       match[0] = match[0].slice( 0, excess );\r
+                               }\r
+                               match[2] = unquoted;\r
+                       }\r
+\r
+                       // Return only captures needed by the pseudo filter method (type and argument)\r
+                       return match.slice( 0, 3 );\r
+               }\r
+       },\r
+\r
+       filter: {\r
+               "ID": assertGetIdNotName ?\r
+                       function( id ) {\r
+                               id = id.replace( rbackslash, "" );\r
+                               return function( elem ) {\r
+                                       return elem.getAttribute("id") === id;\r
+                               };\r
+                       } :\r
+                       function( id ) {\r
+                               id = id.replace( rbackslash, "" );\r
+                               return function( elem ) {\r
+                                       var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");\r
+                                       return node && node.value === id;\r
+                               };\r
+                       },\r
+\r
+               "TAG": function( nodeName ) {\r
+                       if ( nodeName === "*" ) {\r
+                               return function() { return true; };\r
+                       }\r
+                       nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();\r
+\r
+                       return function( elem ) {\r
+                               return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r
+                       };\r
+               },\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
+               },\r
+\r
+               "ATTR": function( name, operator, check ) {\r
+                       return function( elem, context ) {\r
+                               var result = Sizzle.attr( elem, name );\r
+\r
+                               if ( result == null ) {\r
+                                       return operator === "!=";\r
+                               }\r
+                               if ( !operator ) {\r
+                                       return true;\r
+                               }\r
+\r
+                               result += "";\r
+\r
+                               return operator === "=" ? result === check :\r
+                                       operator === "!=" ? result !== check :\r
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :\r
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :\r
+                                       operator === "$=" ? check && result.substr( result.length - check.length ) === check :\r
+                                       operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :\r
+                                       operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :\r
+                                       false;\r
+                       };\r
+               },\r
+\r
+               "CHILD": function( type, argument, first, last ) {\r
+\r
+                       if ( type === "nth" ) {\r
+                               return function( elem ) {\r
+                                       var node, diff,\r
+                                               parent = elem.parentNode;\r
+\r
+                                       if ( first === 1 && last === 0 ) {\r
+                                               return true;\r
+                                       }\r
+\r
+                                       if ( parent ) {\r
+                                               diff = 0;\r
+                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               diff++;\r
+                                                               if ( elem === node ) {\r
+                                                                       break;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Incorporate the offset (or cast to NaN), then check against cycle size\r
+                                       diff -= last;\r
+                                       return diff === first || ( diff % first === 0 && diff / first >= 0 );\r
+                               };\r
+                       }\r
+\r
+                       return function( elem ) {\r
+                               var node = elem;\r
+\r
+                               switch ( type ) {\r
+                                       case "only":\r
+                                       case "first":\r
+                                               while ( (node = node.previousSibling) ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               return false;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( type === "first" ) {\r
+                                                       return true;\r
+                                               }\r
+\r
+                                               node = elem;\r
+\r
+                                               /* falls through */\r
+                                       case "last":\r
+                                               while ( (node = node.nextSibling) ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               return false;\r
+                                                       }\r
+                                               }\r
+\r
+                                               return true;\r
+                               }\r
+                       };\r
+               },\r
+\r
+               "PSEUDO": function( pseudo, argument ) {\r
+                       // pseudo-class names are case-insensitive\r
+                       // http://www.w3.org/TR/selectors/#pseudo-classes\r
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r
+                       // Remember that setFilters inherits from pseudos\r
+                       var args,\r
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\r
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );\r
+\r
+                       // The user may use createPseudo to indicate that\r
+                       // arguments are needed to create the filter function\r
+                       // just as Sizzle does\r
+                       if ( fn[ expando ] ) {\r
+                               return fn( argument );\r
+                       }\r
+\r
+                       // But maintain support for old signatures\r
+                       if ( fn.length > 1 ) {\r
+                               args = [ pseudo, pseudo, "", argument ];\r
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\r
+                                       markFunction(function( seed, matches ) {\r
+                                               var idx,\r
+                                                       matched = fn( seed, argument ),\r
+                                                       i = matched.length;\r
+                                               while ( i-- ) {\r
+                                                       idx = indexOf.call( seed, matched[i] );\r
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );\r
+                                               }\r
+                                       }) :\r
+                                       function( elem ) {\r
+                                               return fn( elem, 0, args );\r
+                                       };\r
+                       }\r
+\r
+                       return fn;\r
+               }\r
+       },\r
+\r
+       pseudos: {\r
+               "not": markFunction(function( selector ) {\r
+                       // Trim the selector passed to compile\r
+                       // to avoid treating leading and trailing\r
+                       // spaces as combinators\r
+                       var input = [],\r
+                               results = [],\r
+                               matcher = compile( selector.replace( rtrim, "$1" ) );\r
+\r
+                       return matcher[ expando ] ?\r
+                               markFunction(function( seed, matches, context, xml ) {\r
+                                       var elem,\r
+                                               unmatched = matcher( seed, null, xml, [] ),\r
+                                               i = seed.length;\r
+\r
+                                       // Match elements unmatched by `matcher`\r
+                                       while ( i-- ) {\r
+                                               if ( (elem = unmatched[i]) ) {\r
+                                                       seed[i] = !(matches[i] = elem);\r
+                                               }\r
+                                       }\r
+                               }) :\r
+                               function( elem, context, xml ) {\r
+                                       input[0] = elem;\r
+                                       matcher( input, null, xml, results );\r
+                                       return !results.pop();\r
+                               };\r
+               }),\r
+\r
+               "has": markFunction(function( selector ) {\r
+                       return function( elem ) {\r
+                               return Sizzle( selector, elem ).length > 0;\r
+                       };\r
+               }),\r
+\r
+               "contains": markFunction(function( text ) {\r
+                       return function( elem ) {\r
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r
+                       };\r
+               }),\r
+\r
+               "enabled": function( elem ) {\r
+                       return elem.disabled === false;\r
+               },\r
+\r
+               "disabled": function( elem ) {\r
+                       return elem.disabled === true;\r
+               },\r
+\r
+               "checked": function( elem ) {\r
+                       // In CSS3, :checked should return both checked and selected elements\r
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
+                       var nodeName = elem.nodeName.toLowerCase();\r
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);\r
+               },\r
+\r
+               "selected": function( elem ) {\r
+                       // Accessing this property makes selected-by-default\r
+                       // options in Safari work properly\r
+                       if ( elem.parentNode ) {\r
+                               elem.parentNode.selectedIndex;\r
+                       }\r
+\r
+                       return elem.selected === true;\r
+               },\r
+\r
+               "parent": function( elem ) {\r
+                       return !Expr.pseudos["empty"]( elem );\r
+               },\r
+\r
+               "empty": function( elem ) {\r
+                       // http://www.w3.org/TR/selectors/#empty-pseudo\r
+                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\r
+                       //   not comment, processing instructions, or others\r
+                       // Thanks to Diego Perini for the nodeName shortcut\r
+                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")\r
+                       var nodeType;\r
+                       elem = elem.firstChild;\r
+                       while ( elem ) {\r
+                               if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\r
+                                       return false;\r
+                               }\r
+                               elem = elem.nextSibling;\r
+                       }\r
+                       return true;\r
+               },\r
+\r
+               "header": function( elem ) {\r
+                       return rheader.test( elem.nodeName );\r
+               },\r
+\r
+               "text": function( elem ) {\r
+                       var type, attr;\r
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\r
+                       // use getAttribute instead to test this case\r
+                       return elem.nodeName.toLowerCase() === "input" &&\r
+                               (type = elem.type) === "text" &&\r
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );\r
+               },\r
+\r
+               // Input types\r
+               "radio": createInputPseudo("radio"),\r
+               "checkbox": createInputPseudo("checkbox"),\r
+               "file": createInputPseudo("file"),\r
+               "password": createInputPseudo("password"),\r
+               "image": createInputPseudo("image"),\r
+\r
+               "submit": createButtonPseudo("submit"),\r
+               "reset": createButtonPseudo("reset"),\r
+\r
+               "button": function( elem ) {\r
+                       var name = elem.nodeName.toLowerCase();\r
+                       return name === "input" && elem.type === "button" || name === "button";\r
+               },\r
+\r
+               "input": function( elem ) {\r
+                       return rinputs.test( elem.nodeName );\r
+               },\r
+\r
+               "focus": function( elem ) {\r
+                       var doc = elem.ownerDocument;\r
+                       return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);\r
+               },\r
+\r
+               "active": function( elem ) {\r
+                       return elem === elem.ownerDocument.activeElement;\r
+               },\r
+\r
+               // Positional types\r
+               "first": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+                       return [ 0 ];\r
+               }),\r
+\r
+               "last": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+                       return [ length - 1 ];\r
+               }),\r
+\r
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+                       return [ argument < 0 ? argument + length : argument ];\r
+               }),\r
+\r
+               "even": createPositionalPseudo(function( matchIndexes, length, argument ) {\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
+                       for ( var i = 1; i < length; i += 2 ) {\r
+                               matchIndexes.push( i );\r
+                       }\r
+                       return matchIndexes;\r
+               }),\r
+\r
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+                       for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {\r
+                               matchIndexes.push( i );\r
+                       }\r
+                       return matchIndexes;\r
+               }),\r
+\r
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {\r
+                       for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {\r
+                               matchIndexes.push( i );\r
+                       }\r
+                       return matchIndexes;\r
+               })\r
+       }\r
+};\r
+\r
+function siblingCheck( a, b, ret ) {\r
+       if ( a === b ) {\r
+               return ret;\r
+       }\r
+\r
+       var cur = a.nextSibling;\r
+\r
+       while ( cur ) {\r
+               if ( cur === b ) {\r
+                       return -1;\r
+               }\r
+\r
+               cur = cur.nextSibling;\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+sortOrder = docElem.compareDocumentPosition ?\r
+       function( a, b ) {\r
+               if ( a === b ) {\r
+                       hasDuplicate = true;\r
+                       return 0;\r
+               }\r
+\r
+               return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\r
+                       a.compareDocumentPosition :\r
+                       a.compareDocumentPosition(b) & 4\r
+               ) ? -1 : 1;\r
+       } :\r
+       function( a, b ) {\r
+               // The nodes are identical, we can exit early\r
+               if ( a === b ) {\r
+                       hasDuplicate = true;\r
+                       return 0;\r
+\r
+               // Fallback to using sourceIndex (in IE) if it's available on both nodes\r
+               } else if ( a.sourceIndex && b.sourceIndex ) {\r
+                       return a.sourceIndex - b.sourceIndex;\r
+               }\r
+\r
+               var al, bl,\r
+                       ap = [],\r
+                       bp = [],\r
+                       aup = a.parentNode,\r
+                       bup = b.parentNode,\r
+                       cur = aup;\r
+\r
+               // If the nodes are siblings (or identical) we can do a quick check\r
+               if ( aup === bup ) {\r
+                       return siblingCheck( a, b );\r
+\r
+               // If no parents were found then the nodes are disconnected\r
+               } else if ( !aup ) {\r
+                       return -1;\r
+\r
+               } else if ( !bup ) {\r
+                       return 1;\r
+               }\r
+\r
+               // Otherwise they're somewhere else in the tree so we need\r
+               // to build up a full list of the parentNodes for comparison\r
+               while ( cur ) {\r
+                       ap.unshift( cur );\r
+                       cur = cur.parentNode;\r
+               }\r
+\r
+               cur = bup;\r
+\r
+               while ( cur ) {\r
+                       bp.unshift( cur );\r
+                       cur = cur.parentNode;\r
+               }\r
+\r
+               al = ap.length;\r
+               bl = bp.length;\r
+\r
+               // Start walking down the tree looking for a discrepancy\r
+               for ( var i = 0; i < al && i < bl; i++ ) {\r
+                       if ( ap[i] !== bp[i] ) {\r
+                               return siblingCheck( ap[i], bp[i] );\r
+                       }\r
+               }\r
+\r
+               // We ended someplace up the tree so do a sibling check\r
+               return i === al ?\r
+                       siblingCheck( a, bp[i], -1 ) :\r
+                       siblingCheck( ap[i], b, 1 );\r
+       };\r
+\r
+// Always assume the presence of duplicates if sort doesn't\r
+// pass them to our comparison function (as in Google Chrome).\r
+[0, 0].sort( sortOrder );\r
+baseHasDuplicate = !hasDuplicate;\r
+\r
+// Document sorting and removing duplicates\r
+Sizzle.uniqueSort = function( results ) {\r
+       var elem,\r
+               i = 1;\r
+\r
+       hasDuplicate = baseHasDuplicate;\r
+       results.sort( sortOrder );\r
+\r
+       if ( hasDuplicate ) {\r
+               for ( ; (elem = results[i]); i++ ) {\r
+                       if ( elem === results[ i - 1 ] ) {\r
+                               results.splice( i--, 1 );\r
+                       }\r
+               }\r
+       }\r
+\r
+       return results;\r
+};\r
+\r
+Sizzle.error = function( msg ) {\r
+       throw new Error( "Syntax error, unrecognized expression: " + msg );\r
+};\r
+\r
+function tokenize( selector, parseOnly ) {\r
+       var matched, match, tokens, type, soFar, groups, preFilters,\r
+               cached = tokenCache[ expando ][ selector ];\r
+\r
+       if ( cached ) {\r
+               return parseOnly ? 0 : cached.slice( 0 );\r
+       }\r
+\r
+       soFar = selector;\r
+       groups = [];\r
+       preFilters = Expr.preFilter;\r
+\r
+       while ( soFar ) {\r
+\r
+               // Comma and first run\r
+               if ( !matched || (match = rcomma.exec( soFar )) ) {\r
+                       if ( match ) {\r
+                               soFar = soFar.slice( match[0].length );\r
+                       }\r
+                       groups.push( tokens = [] );\r
+               }\r
+\r
+               matched = false;\r
+\r
+               // Combinators\r
+               if ( (match = rcombinators.exec( soFar )) ) {\r
+                       tokens.push( matched = new Token( match.shift() ) );\r
+                       soFar = soFar.slice( matched.length );\r
+\r
+                       // Cast descendant combinators to space\r
+                       matched.type = match[0].replace( rtrim, " " );\r
+               }\r
+\r
+               // 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
+\r
+                               tokens.push( matched = new Token( match.shift() ) );\r
+                               soFar = soFar.slice( matched.length );\r
+                               matched.type = type;\r
+                               matched.matches = match;\r
+                       }\r
+               }\r
+\r
+               if ( !matched ) {\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // Return the length of the invalid excess\r
+       // if we're just parsing\r
+       // Otherwise, throw an error or return tokens\r
+       return parseOnly ?\r
+               soFar.length :\r
+               soFar ?\r
+                       Sizzle.error( selector ) :\r
+                       // Cache the tokens\r
+                       tokenCache( selector, groups ).slice( 0 );\r
+}\r
+\r
+function addCombinator( matcher, combinator, base ) {\r
+       var dir = combinator.dir,\r
+               checkNonElements = base && combinator.dir === "parentNode",\r
+               doneName = done++;\r
+\r
+       return combinator.first ?\r
+               // Check against closest ancestor/preceding element\r
+               function( elem, context, xml ) {\r
+                       while ( (elem = elem[ dir ]) ) {\r
+                               if ( checkNonElements || elem.nodeType === 1  ) {\r
+                                       return matcher( elem, context, xml );\r
+                               }\r
+                       }\r
+               } :\r
+\r
+               // Check against all ancestor/preceding elements\r
+               function( elem, context, xml ) {\r
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\r
+                       if ( !xml ) {\r
+                               var cache,\r
+                                       dirkey = dirruns + " " + doneName + " ",\r
+                                       cachedkey = dirkey + cachedruns;\r
+                               while ( (elem = elem[ dir ]) ) {\r
+                                       if ( checkNonElements || elem.nodeType === 1 ) {\r
+                                               if ( (cache = elem[ expando ]) === cachedkey ) {\r
+                                                       return elem.sizset;\r
+                                               } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {\r
+                                                       if ( elem.sizset ) {\r
+                                                               return elem;\r
+                                                       }\r
+                                               } else {\r
+                                                       elem[ expando ] = cachedkey;\r
+                                                       if ( matcher( elem, context, xml ) ) {\r
+                                                               elem.sizset = true;\r
+                                                               return elem;\r
+                                                       }\r
+                                                       elem.sizset = false;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               while ( (elem = elem[ dir ]) ) {\r
+                                       if ( checkNonElements || elem.nodeType === 1 ) {\r
+                                               if ( matcher( elem, context, xml ) ) {\r
+                                                       return elem;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               };\r
+}\r
+\r
+function elementMatcher( matchers ) {\r
+       return matchers.length > 1 ?\r
+               function( elem, context, xml ) {\r
+                       var i = matchers.length;\r
+                       while ( i-- ) {\r
+                               if ( !matchers[i]( elem, context, xml ) ) {\r
+                                       return false;\r
+                               }\r
+                       }\r
+                       return true;\r
+               } :\r
+               matchers[0];\r
+}\r
+\r
+function condense( unmatched, map, filter, context, xml ) {\r
+       var elem,\r
+               newUnmatched = [],\r
+               i = 0,\r
+               len = unmatched.length,\r
+               mapped = map != null;\r
+\r
+       for ( ; i < len; i++ ) {\r
+               if ( (elem = unmatched[i]) ) {\r
+                       if ( !filter || filter( elem, context, xml ) ) {\r
+                               newUnmatched.push( elem );\r
+                               if ( mapped ) {\r
+                                       map.push( i );\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return newUnmatched;\r
+}\r
+\r
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\r
+       if ( postFilter && !postFilter[ expando ] ) {\r
+               postFilter = setMatcher( postFilter );\r
+       }\r
+       if ( postFinder && !postFinder[ expando ] ) {\r
+               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
+                       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
+\r
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization\r
+                       matcherIn = preFilter && ( seed || !selector ) ?\r
+                               condense( elems, preMap, preFilter, context, xml ) :\r
+                               elems,\r
+\r
+                       matcherOut = matcher ?\r
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\r
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\r
+\r
+                                       // ...intermediate processing is necessary\r
+                                       [] :\r
+\r
+                                       // ...otherwise use results directly\r
+                                       results :\r
+                               matcherIn;\r
+\r
+               // Find primary matches\r
+               if ( matcher ) {\r
+                       matcher( matcherIn, matcherOut, context, xml );\r
+               }\r
+\r
+               // Apply postFilter\r
+               if ( postFilter ) {\r
+                       postFilterIn = condense( matcherOut, postMap );\r
+                       postFilter( postFilterIn, [], context, xml );\r
+\r
+                       // Un-match failing elements by moving them back to matcherIn\r
+                       i = postFilterIn.length;\r
+                       while ( i-- ) {\r
+                               if ( (elem = postFilterIn[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
+                               }\r
+                       }\r
+               } else {\r
+                       matcherOut = condense(\r
+                               matcherOut === results ?\r
+                                       matcherOut.splice( preexisting, matcherOut.length ) :\r
+                                       matcherOut\r
+                       );\r
+                       if ( postFinder ) {\r
+                               postFinder( null, results, matcherOut, xml );\r
+                       } else {\r
+                               push.apply( results, matcherOut );\r
+                       }\r
+               }\r
+       });\r
+}\r
+\r
+function matcherFromTokens( tokens ) {\r
+       var checkContext, matcher, j,\r
+               len = tokens.length,\r
+               leadingRelative = Expr.relative[ tokens[0].type ],\r
+               implicitRelative = leadingRelative || Expr.relative[" "],\r
+               i = leadingRelative ? 1 : 0,\r
+\r
+               // The foundational matcher ensures that elements are reachable from top-level context(s)\r
+               matchContext = addCombinator( function( elem ) {\r
+                       return elem === checkContext;\r
+               }, implicitRelative, true ),\r
+               matchAnyContext = addCombinator( function( elem ) {\r
+                       return indexOf.call( checkContext, elem ) > -1;\r
+               }, implicitRelative, true ),\r
+               matchers = [ function( elem, context, xml ) {\r
+                       return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\r
+                               (checkContext = context).nodeType ?\r
+                                       matchContext( elem, context, xml ) :\r
+                                       matchAnyContext( elem, context, xml ) );\r
+               } ];\r
+\r
+       for ( ; i < len; i++ ) {\r
+               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
+                       if ( matcher[ expando ] ) {\r
+                               // Find the next relative operator (if any) for proper handling\r
+                               j = ++i;\r
+                               for ( ; j < len; j++ ) {\r
+                                       if ( Expr.relative[ tokens[j].type ] ) {\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               return setMatcher(\r
+                                       i > 1 && elementMatcher( matchers ),\r
+                                       i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),\r
+                                       matcher,\r
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),\r
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\r
+                                       j < len && tokens.join("")\r
+                               );\r
+                       }\r
+                       matchers.push( matcher );\r
+               }\r
+       }\r
+\r
+       return elementMatcher( matchers );\r
+}\r
+\r
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {\r
+       var bySet = setMatchers.length > 0,\r
+               byElement = elementMatchers.length > 0,\r
+               superMatcher = function( seed, context, xml, results, expandContext ) {\r
+                       var elem, j, matcher,\r
+                               setMatched = [],\r
+                               matchedCount = 0,\r
+                               i = "0",\r
+                               unmatched = seed && [],\r
+                               outermost = expandContext != null,\r
+                               contextBackup = outermostContext,\r
+                               // We must always have either seed elements or context\r
+                               elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),\r
+                               // Nested matchers should use non-integer dirruns\r
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);\r
+\r
+                       if ( outermost ) {\r
+                               outermostContext = context !== document && context;\r
+                               cachedruns = superMatcher.el;\r
+                       }\r
+\r
+                       // Add elements passing elementMatchers directly to results\r
+                       for ( ; (elem = elems[i]) != null; i++ ) {\r
+                               if ( byElement && elem ) {\r
+                                       for ( j = 0; (matcher = elementMatchers[j]); j++ ) {\r
+                                               if ( matcher( elem, context, xml ) ) {\r
+                                                       results.push( elem );\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                                       if ( outermost ) {\r
+                                               dirruns = dirrunsUnique;\r
+                                               cachedruns = ++superMatcher.el;\r
+                                       }\r
+                               }\r
+\r
+                               // Track unmatched elements for set filters\r
+                               if ( bySet ) {\r
+                                       // They will have gone through all possible matchers\r
+                                       if ( (elem = !matcher && elem) ) {\r
+                                               matchedCount--;\r
+                                       }\r
+\r
+                                       // Lengthen the array for every element, matched or not\r
+                                       if ( seed ) {\r
+                                               unmatched.push( elem );\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Apply set filters to unmatched elements\r
+                       matchedCount += i;\r
+                       if ( bySet && i !== matchedCount ) {\r
+                               for ( j = 0; (matcher = setMatchers[j]); j++ ) {\r
+                                       matcher( unmatched, setMatched, context, xml );\r
+                               }\r
+\r
+                               if ( seed ) {\r
+                                       // Reintegrate element matches to eliminate the need for sorting\r
+                                       if ( matchedCount > 0 ) {\r
+                                               while ( i-- ) {\r
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {\r
+                                                               setMatched[i] = pop.call( results );\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Discard index placeholder values to get only actual matches\r
+                                       setMatched = condense( setMatched );\r
+                               }\r
+\r
+                               // Add matches to results\r
+                               push.apply( results, setMatched );\r
+\r
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting\r
+                               if ( outermost && !seed && setMatched.length > 0 &&\r
+                                       ( matchedCount + setMatchers.length ) > 1 ) {\r
+\r
+                                       Sizzle.uniqueSort( results );\r
+                               }\r
+                       }\r
+\r
+                       // Override manipulation of globals by nested matchers\r
+                       if ( outermost ) {\r
+                               dirruns = dirrunsUnique;\r
+                               outermostContext = contextBackup;\r
+                       }\r
+\r
+                       return unmatched;\r
+               };\r
+\r
+       superMatcher.el = 0;\r
+       return bySet ?\r
+               markFunction( superMatcher ) :\r
+               superMatcher;\r
+}\r
+\r
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\r
+       var i,\r
+               setMatchers = [],\r
+               elementMatchers = [],\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
+               if ( !group ) {\r
+                       group = tokenize( selector );\r
+               }\r
+               i = group.length;\r
+               while ( i-- ) {\r
+                       cached = matcherFromTokens( group[i] );\r
+                       if ( cached[ expando ] ) {\r
+                               setMatchers.push( cached );\r
+                       } else {\r
+                               elementMatchers.push( cached );\r
+                       }\r
+               }\r
+\r
+               // Cache the compiled function\r
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\r
+       }\r
+       return cached;\r
+};\r
+\r
+function multipleContexts( selector, contexts, results, seed ) {\r
+       var i = 0,\r
+               len = contexts.length;\r
+       for ( ; i < len; i++ ) {\r
+               Sizzle( selector, contexts[i], results, seed );\r
+       }\r
+       return results;\r
+}\r
+\r
+function select( selector, context, results, seed, xml ) {\r
+       var i, tokens, token, type, find,\r
+               match = tokenize( selector ),\r
+               j = match.length;\r
+\r
+       if ( !seed ) {\r
+               // Try to minimize operations if there is only one group\r
+               if ( match.length === 1 ) {\r
+\r
+                       // Take a shortcut and set the context if the root selector is an ID\r
+                       tokens = match[0] = match[0].slice( 0 );\r
+                       if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&\r
+                                       context.nodeType === 9 && !xml &&\r
+                                       Expr.relative[ tokens[1].type ] ) {\r
+\r
+                               context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];\r
+                               if ( !context ) {\r
+                                       return results;\r
+                               }\r
+\r
+                               selector = selector.slice( tokens.shift().length );\r
+                       }\r
+\r
+                       // Fetch a seed set for right-to-left matching\r
+                       for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {\r
+                               token = tokens[i];\r
+\r
+                               // Abort if we hit a combinator\r
+                               if ( Expr.relative[ (type = token.type) ] ) {\r
+                                       break;\r
+                               }\r
+                               if ( (find = Expr.find[ type ]) ) {\r
+                                       // Search, expanding context for leading sibling combinators\r
+                                       if ( (seed = find(\r
+                                               token.matches[0].replace( rbackslash, "" ),\r
+                                               rsibling.test( tokens[0].type ) && context.parentNode || context,\r
+                                               xml\r
+                                       )) ) {\r
+\r
+                                               // If seed is empty or no tokens remain, we can return early\r
+                                               tokens.splice( i, 1 );\r
+                                               selector = seed.length && tokens.join("");\r
+                                               if ( !selector ) {\r
+                                                       push.apply( results, slice.call( seed, 0 ) );\r
+                                                       return results;\r
+                                               }\r
+\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       // Compile and execute a filtering function\r
+       // Provide `match` to avoid retokenization if we modified the selector above\r
+       compile( selector, match )(\r
+               seed,\r
+               context,\r
+               xml,\r
+               results,\r
+               rsibling.test( selector )\r
+       );\r
+       return results;\r
+}\r
+\r
+if ( document.querySelectorAll ) {\r
+       (function() {\r
+               var disconnectedMatch,\r
+                       oldSelect = select,\r
+                       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
+                       // A support test would require too much code (would include document ready)\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
+                       matches = docElem.matchesSelector ||\r
+                               docElem.mozMatchesSelector ||\r
+                               docElem.webkitMatchesSelector ||\r
+                               docElem.oMatchesSelector ||\r
+                               docElem.msMatchesSelector;\r
+\r
+               // Build QSA regex\r
+               // Regex strategy adopted from Diego Perini\r
+               assert(function( div ) {\r
+                       // Select is set to empty string on purpose\r
+                       // This is to test IE's treatment of not explictly\r
+                       // setting a boolean content attribute,\r
+                       // since its presence should be enough\r
+                       // http://bugs.jquery.com/ticket/12359\r
+                       div.innerHTML = "<select><option selected=''></option></select>";\r
+\r
+                       // IE8 - Some boolean attributes are not treated correctly\r
+                       if ( !div.querySelectorAll("[selected]").length ) {\r
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );\r
+                       }\r
+\r
+                       // Webkit/Opera - :checked should return selected option elements\r
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
+                       // IE8 throws error here (do not put tests after this one)\r
+                       if ( !div.querySelectorAll(":checked").length ) {\r
+                               rbuggyQSA.push(":checked");\r
+                       }\r
+               });\r
+\r
+               assert(function( div ) {\r
+\r
+                       // Opera 10-12/IE9 - ^= $= *= and empty values\r
+                       // Should not select anything\r
+                       div.innerHTML = "<p test=''></p>";\r
+                       if ( div.querySelectorAll("[test^='']").length ) {\r
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );\r
+                       }\r
+\r
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r
+                       // IE8 throws error here (do not put tests after this one)\r
+                       div.innerHTML = "<input type='hidden'/>";\r
+                       if ( !div.querySelectorAll(":enabled").length ) {\r
+                               rbuggyQSA.push(":enabled", ":disabled");\r
+                       }\r
+               });\r
+\r
+               // rbuggyQSA always contains :focus, so no need for a length check\r
+               rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );\r
+\r
+               select = function( selector, context, results, seed, xml ) {\r
+                       // 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
+                               var groups, i,\r
+                                       old = true,\r
+                                       nid = expando,\r
+                                       newContext = context,\r
+                                       newSelector = context.nodeType === 9 && selector;\r
+\r
+                               // qSA works strangely on Element-rooted queries\r
+                               // We can work around this by specifying an extra ID on the root\r
+                               // and working up from there (Thanks to Andrew Dupont for the technique)\r
+                               // IE 8 doesn't work on object elements\r
+                               if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {\r
+                                       groups = tokenize( selector );\r
+\r
+                                       if ( (old = context.getAttribute("id")) ) {\r
+                                               nid = old.replace( rescape, "\\$&" );\r
+                                       } else {\r
+                                               context.setAttribute( "id", nid );\r
+                                       }\r
+                                       nid = "[id='" + nid + "'] ";\r
+\r
+                                       i = groups.length;\r
+                                       while ( i-- ) {\r
+                                               groups[i] = nid + groups[i].join("");\r
+                                       }\r
+                                       newContext = rsibling.test( selector ) && context.parentNode || context;\r
+                                       newSelector = groups.join(",");\r
+                               }\r
+\r
+                               if ( newSelector ) {\r
+                                       try {\r
+                                               push.apply( results, slice.call( newContext.querySelectorAll(\r
+                                                       newSelector\r
+                                               ), 0 ) );\r
+                                               return results;\r
+                                       } catch(qsaError) {\r
+                                       } finally {\r
+                                               if ( !old ) {\r
+                                                       context.removeAttribute("id");\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return oldSelect( selector, context, results, seed, xml );\r
+               };\r
+\r
+               if ( matches ) {\r
+                       assert(function( div ) {\r
+                               // Check to see if it's possible to do matchesSelector\r
+                               // on a disconnected node (IE 9)\r
+                               disconnectedMatch = matches.call( div, "div" );\r
+\r
+                               // This should fail with an exception\r
+                               // Gecko does not error, returns false instead\r
+                               try {\r
+                                       matches.call( div, "[test!='']:sizzle" );\r
+                                       rbuggyMatches.push( "!=", pseudos );\r
+                               } catch ( e ) {}\r
+                       });\r
+\r
+                       // rbuggyMatches always contains :active and :focus, so no need for a length check\r
+                       rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );\r
+\r
+                       Sizzle.matchesSelector = function( elem, expr ) {\r
+                               // Make sure that attribute selectors are quoted\r
+                               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
+                                       try {\r
+                                               var ret = matches.call( elem, expr );\r
+\r
+                                               // IE 9's matchesSelector returns false on disconnected nodes\r
+                                               if ( ret || disconnectedMatch ||\r
+                                                               // As well, disconnected nodes are said to be in a document\r
+                                                               // fragment in IE 9\r
+                                                               elem.document && elem.document.nodeType !== 11 ) {\r
+                                                       return ret;\r
+                                               }\r
+                                       } catch(e) {}\r
+                               }\r
+\r
+                               return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
+                       };\r
+               }\r
+       })();\r
+}\r
+\r
+// Deprecated\r
+Expr.pseudos["nth"] = Expr.pseudos["eq"];\r
+\r
+// Back-compat\r
+function setFilters() {}\r
+Expr.filters = setFilters.prototype = Expr.pseudos;\r
+Expr.setFilters = new setFilters();\r
+\r
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+\r
+\r
+})( window );\r
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prev(?:Until|All))/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       rneedsContext = jQuery.expr.match.needsContext,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
 
+jQuery.fn.extend({
+       find: function( selector ) {
+               var i, l, length, n, r, ret,
+                       self = this;
 
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-       expando = "sizcache" + (Math.random() + '').replace('.', ''),
-       done = 0,
-       toString = Object.prototype.toString,
-       hasDuplicate = false,
-       baseHasDuplicate = true,
-       rBackslash = /\\/g,
-       rReturn = /\r\n/g,
-       rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-       baseHasDuplicate = false;
-       return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-       results = results || [];
-       context = context || document;
-
-       var origContext = context;
-
-       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-               return [];
-       }
-
-       if ( !selector || typeof selector !== "string" ) {
-               return results;
-       }
-
-       var m, set, checkSet, extra, ret, cur, pop, i,
-               prune = true,
-               contextXML = Sizzle.isXML( context ),
-               parts = [],
-               soFar = selector;
-
-       // Reset the position of the chunker regexp (start from head)
-       do {
-               chunker.exec( "" );
-               m = chunker.exec( soFar );
-
-               if ( m ) {
-                       soFar = m[3];
-
-                       parts.push( m[1] );
-
-                       if ( m[2] ) {
-                               extra = m[3];
-                               break;
-                       }
+               if ( typeof selector !== "string" ) {
+                       return jQuery( selector ).filter(function() {
+                               for ( i = 0, l = self.length; i < l; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       });
                }
-       } while ( m );
-
-       if ( parts.length > 1 && origPOS.exec( selector ) ) {
 
-               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-                       set = posProcess( parts[0] + parts[1], context, seed );
+               ret = this.pushStack( "", "find", selector );
 
-               } else {
-                       set = Expr.relative[ parts[0] ] ?
-                               [ context ] :
-                               Sizzle( parts.shift(), context );
-
-                       while ( parts.length ) {
-                               selector = parts.shift();
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       length = ret.length;
+                       jQuery.find( selector, this[i], ret );
 
-                               if ( Expr.relative[ selector ] ) {
-                                       selector += parts.shift();
+                       if ( i > 0 ) {
+                               // Make sure that the results are unique
+                               for ( n = length; n < ret.length; n++ ) {
+                                       for ( r = 0; r < length; r++ ) {
+                                               if ( ret[r] === ret[n] ) {
+                                                       ret.splice(n--, 1);
+                                                       break;
+                                               }
+                                       }
                                }
-
-                               set = posProcess( selector, set, seed );
                        }
                }
 
-       } else {
-               // Take a shortcut and set the context if the root selector is an ID
-               // (but not if it'll be faster if the inner selector is an ID)
-               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-                       ret = Sizzle.find( parts.shift(), context, contextXML );
-                       context = ret.expr ?
-                               Sizzle.filter( ret.expr, ret.set )[0] :
-                               ret.set[0];
-               }
-
-               if ( context ) {
-                       ret = seed ?
-                               { expr: parts.pop(), set: makeArray(seed) } :
-                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-                       set = ret.expr ?
-                               Sizzle.filter( ret.expr, ret.set ) :
-                               ret.set;
-
-                       if ( parts.length > 0 ) {
-                               checkSet = makeArray( set );
-
-                       } else {
-                               prune = false;
-                       }
-
-                       while ( parts.length ) {
-                               cur = parts.pop();
-                               pop = cur;
+               return ret;
+       },
 
-                               if ( !Expr.relative[ cur ] ) {
-                                       cur = "";
-                               } else {
-                                       pop = parts.pop();
-                               }
+       has: function( target ) {
+               var i,
+                       targets = jQuery( target, this ),
+                       len = targets.length;
 
-                               if ( pop == null ) {
-                                       pop = context;
+               return this.filter(function() {
+                       for ( i = 0; i < len; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
                                }
-
-                               Expr.relative[ cur ]( checkSet, pop, contextXML );
                        }
+               });
+       },
 
-               } else {
-                       checkSet = parts = [];
-               }
-       }
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false), "not", selector);
+       },
 
-       if ( !checkSet ) {
-               checkSet = set;
-       }
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
+       },
 
-       if ( !checkSet ) {
-               Sizzle.error( cur || selector );
-       }
+       is: function( selector ) {
+               return !!selector && (
+                       typeof selector === "string" ?
+                               // If this is a positional/relative selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               rneedsContext.test( selector ) ?
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
 
-       if ( toString.call(checkSet) === "[object Array]" ) {
-               if ( !prune ) {
-                       results.push.apply( results, checkSet );
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       ret = [],
+                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
 
-               } else if ( context && context.nodeType === 1 ) {
-                       for ( i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-                                       results.push( set[i] );
-                               }
-                       }
+               for ( ; i < l; i++ ) {
+                       cur = this[i];
 
-               } else {
-                       for ( i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-                                       results.push( set[i] );
+                       while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
                                }
+                               cur = cur.parentNode;
                        }
                }
 
-       } else {
-               makeArray( checkSet, results );
-       }
+               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
 
-       if ( extra ) {
-               Sizzle( extra, origContext, results, seed );
-               Sizzle.uniqueSort( results );
-       }
+               return this.pushStack( ret, "closest", selectors );
+       },
 
-       return results;
-};
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
 
-Sizzle.uniqueSort = function( results ) {
-       if ( sortOrder ) {
-               hasDuplicate = baseHasDuplicate;
-               results.sort( sortOrder );
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+               }
 
-               if ( hasDuplicate ) {
-                       for ( var i = 1; i < results.length; i++ ) {
-                               if ( results[i] === results[ i - 1 ] ) {
-                                       results.splice( i--, 1 );
-                               }
-                       }
-               }
-       }
-
-       return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-       return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-       return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-       var set, i, len, match, type, left;
-
-       if ( !expr ) {
-               return [];
-       }
-
-       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-               type = Expr.order[i];
-
-               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-                       left = match[1];
-                       match.splice( 1, 1 );
-
-                       if ( left.substr( left.length - 1 ) !== "\\" ) {
-                               match[1] = (match[1] || "").replace( rBackslash, "" );
-                               set = Expr.find[ type ]( match, context, isXML );
-
-                               if ( set != null ) {
-                                       expr = expr.replace( Expr.match[ type ], "" );
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       if ( !set ) {
-               set = typeof context.getElementsByTagName !== "undefined" ?
-                       context.getElementsByTagName( "*" ) :
-                       [];
-       }
-
-       return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-       var match, anyFound,
-               type, found, item, filter, left,
-               i, pass,
-               old = expr,
-               result = [],
-               curLoop = set,
-               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-       while ( expr && set.length ) {
-               for ( type in Expr.filter ) {
-                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-                               filter = Expr.filter[ type ];
-                               left = match[1];
-
-                               anyFound = false;
-
-                               match.splice(1,1);
-
-                               if ( left.substr( left.length - 1 ) === "\\" ) {
-                                       continue;
-                               }
-
-                               if ( curLoop === result ) {
-                                       result = [];
-                               }
-
-                               if ( Expr.preFilter[ type ] ) {
-                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-                                       if ( !match ) {
-                                               anyFound = found = true;
-
-                                       } else if ( match === true ) {
-                                               continue;
-                                       }
-                               }
-
-                               if ( match ) {
-                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-                                               if ( item ) {
-                                                       found = filter( item, match, i, curLoop );
-                                                       pass = not ^ found;
-
-                                                       if ( inplace && found != null ) {
-                                                               if ( pass ) {
-                                                                       anyFound = true;
-
-                                                               } else {
-                                                                       curLoop[i] = false;
-                                                               }
-
-                                                       } else if ( pass ) {
-                                                               result.push( item );
-                                                               anyFound = true;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if ( found !== undefined ) {
-                                       if ( !inplace ) {
-                                               curLoop = result;
-                                       }
-
-                                       expr = expr.replace( Expr.match[ type ], "" );
-
-                                       if ( !anyFound ) {
-                                               return [];
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-
-               // Improper expression
-               if ( expr === old ) {
-                       if ( anyFound == null ) {
-                               Sizzle.error( expr );
-
-                       } else {
-                               break;
-                       }
-               }
-
-               old = expr;
-       }
-
-       return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-       throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-               nodeType = elem.nodeType,
-               ret = "";
-
-       if ( nodeType ) {
-               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-                       // Use textContent || innerText for elements
-                       if ( typeof elem.textContent === 'string' ) {
-                               return elem.textContent;
-                       } else if ( typeof elem.innerText === 'string' ) {
-                               // Replace IE's carriage returns
-                               return elem.innerText.replace( rReturn, '' );
-                       } else {
-                               // Traverse it's children
-                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                                       ret += getText( elem );
-                               }
-                       }
-               } else if ( nodeType === 3 || nodeType === 4 ) {
-                       return elem.nodeValue;
-               }
-       } else {
-
-               // If no nodeType, this is expected to be an array
-               for ( i = 0; (node = elem[i]); i++ ) {
-                       // Do not traverse comment nodes
-                       if ( node.nodeType !== 8 ) {
-                               ret += getText( node );
-                       }
-               }
-       }
-       return ret;
-};
-
-var Expr = Sizzle.selectors = {
-       order: [ "ID", "NAME", "TAG" ],
-
-       match: {
-               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-       },
-
-       leftMatch: {},
-
-       attrMap: {
-               "class": "className",
-               "for": "htmlFor"
-       },
-
-       attrHandle: {
-               href: function( elem ) {
-                       return elem.getAttribute( "href" );
-               },
-               type: function( elem ) {
-                       return elem.getAttribute( "type" );
-               }
-       },
-
-       relative: {
-               "+": function(checkSet, part){
-                       var isPartStr = typeof part === "string",
-                               isTag = isPartStr && !rNonWord.test( part ),
-                               isPartStrNotTag = isPartStr && !isTag;
-
-                       if ( isTag ) {
-                               part = part.toLowerCase();
-                       }
-
-                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-                               if ( (elem = checkSet[i]) ) {
-                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-                                               elem || false :
-                                               elem === part;
-                               }
-                       }
-
-                       if ( isPartStrNotTag ) {
-                               Sizzle.filter( part, checkSet, true );
-                       }
-               },
-
-               ">": function( checkSet, part ) {
-                       var elem,
-                               isPartStr = typeof part === "string",
-                               i = 0,
-                               l = checkSet.length;
-
-                       if ( isPartStr && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-
-                               for ( ; i < l; i++ ) {
-                                       elem = checkSet[i];
-
-                                       if ( elem ) {
-                                               var parent = elem.parentNode;
-                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-                                       }
-                               }
-
-                       } else {
-                               for ( ; i < l; i++ ) {
-                                       elem = checkSet[i];
-
-                                       if ( elem ) {
-                                               checkSet[i] = isPartStr ?
-                                                       elem.parentNode :
-                                                       elem.parentNode === part;
-                                       }
-                               }
-
-                               if ( isPartStr ) {
-                                       Sizzle.filter( part, checkSet, true );
-                               }
-                       }
-               },
-
-               "": function(checkSet, part, isXML){
-                       var nodeCheck,
-                               doneName = done++,
-                               checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-                               nodeCheck = part;
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-               },
-
-               "~": function( checkSet, part, isXML ) {
-                       var nodeCheck,
-                               doneName = done++,
-                               checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-                               nodeCheck = part;
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-               }
-       },
-
-       find: {
-               ID: function( match, context, isXML ) {
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-                               // Check parentNode to catch when Blackberry 4.6 returns
-                               // nodes that are no longer in the document #6963
-                               return m && m.parentNode ? [m] : [];
-                       }
-               },
-
-               NAME: function( match, context ) {
-                       if ( typeof context.getElementsByName !== "undefined" ) {
-                               var ret = [],
-                                       results = context.getElementsByName( match[1] );
-
-                               for ( var i = 0, l = results.length; i < l; i++ ) {
-                                       if ( results[i].getAttribute("name") === match[1] ) {
-                                               ret.push( results[i] );
-                                       }
-                               }
-
-                               return ret.length === 0 ? null : ret;
-                       }
-               },
-
-               TAG: function( match, context ) {
-                       if ( typeof context.getElementsByTagName !== "undefined" ) {
-                               return context.getElementsByTagName( match[1] );
-                       }
-               }
-       },
-       preFilter: {
-               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-                       match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-                       if ( isXML ) {
-                               return match;
-                       }
-
-                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-                               if ( elem ) {
-                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-                                               if ( !inplace ) {
-                                                       result.push( elem );
-                                               }
-
-                                       } else if ( inplace ) {
-                                               curLoop[i] = false;
-                                       }
-                               }
-                       }
-
-                       return false;
-               },
-
-               ID: function( match ) {
-                       return match[1].replace( rBackslash, "" );
-               },
-
-               TAG: function( match, curLoop ) {
-                       return match[1].replace( rBackslash, "" ).toLowerCase();
-               },
-
-               CHILD: function( match ) {
-                       if ( match[1] === "nth" ) {
-                               if ( !match[2] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               match[2] = match[2].replace(/^\+|\s*/g, '');
-
-                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-                               // calculate the numbers (first)n+(last) including if they are negative
-                               match[2] = (test[1] + (test[2] || 1)) - 0;
-                               match[3] = test[3] - 0;
-                       }
-                       else if ( match[2] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       // TODO: Move to normal caching system
-                       match[0] = done++;
-
-                       return match;
-               },
-
-               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-                       var name = match[1] = match[1].replace( rBackslash, "" );
-
-                       if ( !isXML && Expr.attrMap[name] ) {
-                               match[1] = Expr.attrMap[name];
-                       }
-
-                       // Handle if an un-quoted value was used
-                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-                       if ( match[2] === "~=" ) {
-                               match[4] = " " + match[4] + " ";
-                       }
-
-                       return match;
-               },
-
-               PSEUDO: function( match, curLoop, inplace, result, not ) {
-                       if ( match[1] === "not" ) {
-                               // If we're dealing with a complex expression, or a simple one
-                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-                                       match[3] = Sizzle(match[3], null, null, curLoop);
-
-                               } else {
-                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-                                       if ( !inplace ) {
-                                               result.push.apply( result, ret );
-                                       }
-
-                                       return false;
-                               }
-
-                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-                               return true;
-                       }
-
-                       return match;
-               },
-
-               POS: function( match ) {
-                       match.unshift( true );
-
-                       return match;
-               }
-       },
-
-       filters: {
-               enabled: function( elem ) {
-                       return elem.disabled === false && elem.type !== "hidden";
-               },
-
-               disabled: function( elem ) {
-                       return elem.disabled === true;
-               },
-
-               checked: function( elem ) {
-                       return elem.checked === true;
-               },
-
-               selected: function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-
-                       return elem.selected === true;
-               },
-
-               parent: function( elem ) {
-                       return !!elem.firstChild;
-               },
-
-               empty: function( elem ) {
-                       return !elem.firstChild;
-               },
-
-               has: function( elem, i, match ) {
-                       return !!Sizzle( match[3], elem ).length;
-               },
-
-               header: function( elem ) {
-                       return (/h\d/i).test( elem.nodeName );
-               },
-
-               text: function( elem ) {
-                       var attr = elem.getAttribute( "type" ), type = elem.type;
-                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-                       // use getAttribute instead to test this case
-                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-               },
-
-               radio: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-               },
-
-               checkbox: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-               },
-
-               file: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-               },
-
-               password: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-               },
-
-               submit: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return (name === "input" || name === "button") && "submit" === elem.type;
-               },
-
-               image: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-               },
-
-               reset: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return (name === "input" || name === "button") && "reset" === elem.type;
-               },
-
-               button: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && "button" === elem.type || name === "button";
-               },
-
-               input: function( elem ) {
-                       return (/input|select|textarea|button/i).test( elem.nodeName );
-               },
-
-               focus: function( elem ) {
-                       return elem === elem.ownerDocument.activeElement;
-               }
-       },
-       setFilters: {
-               first: function( elem, i ) {
-                       return i === 0;
-               },
-
-               last: function( elem, i, match, array ) {
-                       return i === array.length - 1;
-               },
-
-               even: function( elem, i ) {
-                       return i % 2 === 0;
-               },
-
-               odd: function( elem, i ) {
-                       return i % 2 === 1;
-               },
-
-               lt: function( elem, i, match ) {
-                       return i < match[3] - 0;
-               },
-
-               gt: function( elem, i, match ) {
-                       return i > match[3] - 0;
-               },
-
-               nth: function( elem, i, match ) {
-                       return match[3] - 0 === i;
-               },
-
-               eq: function( elem, i, match ) {
-                       return match[3] - 0 === i;
-               }
-       },
-       filter: {
-               PSEUDO: function( elem, match, i, array ) {
-                       var name = match[1],
-                               filter = Expr.filters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-
-                       } else if ( name === "contains" ) {
-                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-                       } else if ( name === "not" ) {
-                               var not = match[3];
-
-                               for ( var j = 0, l = not.length; j < l; j++ ) {
-                                       if ( not[j] === elem ) {
-                                               return false;
-                                       }
-                               }
-
-                               return true;
-
-                       } else {
-                               Sizzle.error( name );
-                       }
-               },
-
-               CHILD: function( elem, match ) {
-                       var first, last,
-                               doneName, parent, cache,
-                               count, diff,
-                               type = match[1],
-                               node = elem;
-
-                       switch ( type ) {
-                               case "only":
-                               case "first":
-                                       while ( (node = node.previousSibling) ) {
-                                               if ( node.nodeType === 1 ) {
-                                                       return false;
-                                               }
-                                       }
-
-                                       if ( type === "first" ) {
-                                               return true;
-                                       }
-
-                                       node = elem;
-
-                                       /* falls through */
-                               case "last":
-                                       while ( (node = node.nextSibling) ) {
-                                               if ( node.nodeType === 1 ) {
-                                                       return false;
-                                               }
-                                       }
-
-                                       return true;
-
-                               case "nth":
-                                       first = match[2];
-                                       last = match[3];
-
-                                       if ( first === 1 && last === 0 ) {
-                                               return true;
-                                       }
-
-                                       doneName = match[0];
-                                       parent = elem.parentNode;
-
-                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-                                               count = 0;
-
-                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
-                                                       if ( node.nodeType === 1 ) {
-                                                               node.nodeIndex = ++count;
-                                                       }
-                                               }
-
-                                               parent[ expando ] = doneName;
-                                       }
-
-                                       diff = elem.nodeIndex - last;
-
-                                       if ( first === 0 ) {
-                                               return diff === 0;
-
-                                       } else {
-                                               return ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                       }
-               },
-
-               ID: function( elem, match ) {
-                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
-               },
-
-               TAG: function( elem, match ) {
-                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-               },
-
-               CLASS: function( elem, match ) {
-                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
-                               .indexOf( match ) > -1;
-               },
-
-               ATTR: function( elem, match ) {
-                       var name = match[1],
-                               result = Sizzle.attr ?
-                                       Sizzle.attr( elem, name ) :
-                                       Expr.attrHandle[ name ] ?
-                                       Expr.attrHandle[ name ]( elem ) :
-                                       elem[ name ] != null ?
-                                               elem[ name ] :
-                                               elem.getAttribute( name ),
-                               value = result + "",
-                               type = match[2],
-                               check = match[4];
-
-                       return result == null ?
-                               type === "!=" :
-                               !type && Sizzle.attr ?
-                               result != null :
-                               type === "=" ?
-                               value === check :
-                               type === "*=" ?
-                               value.indexOf(check) >= 0 :
-                               type === "~=" ?
-                               (" " + value + " ").indexOf(check) >= 0 :
-                               !check ?
-                               value && result !== false :
-                               type === "!=" ?
-                               value !== check :
-                               type === "^=" ?
-                               value.indexOf(check) === 0 :
-                               type === "$=" ?
-                               value.substr(value.length - check.length) === check :
-                               type === "|=" ?
-                               value === check || value.substr(0, check.length + 1) === check + "-" :
-                               false;
-               },
-
-               POS: function( elem, match, i, array ) {
-                       var name = match[2],
-                               filter = Expr.setFilters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-                       }
-               }
-       }
-};
-
-var origPOS = Expr.match.POS,
-       fescape = function(all, num){
-               return "\\" + (num - 0 + 1);
-       };
-
-for ( var type in Expr.match ) {
-       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-Expr.match.globalPOS = origPOS;
-
-var makeArray = function( array, results ) {
-       array = Array.prototype.slice.call( array, 0 );
-
-       if ( results ) {
-               results.push.apply( results, array );
-               return results;
-       }
-
-       return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-       makeArray = function( array, results ) {
-               var i = 0,
-                       ret = results || [];
-
-               if ( toString.call(array) === "[object Array]" ) {
-                       Array.prototype.push.apply( ret, array );
-
-               } else {
-                       if ( typeof array.length === "number" ) {
-                               for ( var l = array.length; i < l; i++ ) {
-                                       ret.push( array[i] );
-                               }
-
-                       } else {
-                               for ( ; array[i]; i++ ) {
-                                       ret.push( array[i] );
-                               }
-                       }
-               }
-
-               return ret;
-       };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-       sortOrder = function( a, b ) {
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-                       return a.compareDocumentPosition ? -1 : 1;
-               }
-
-               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-       };
-
-} else {
-       sortOrder = function( a, b ) {
-               // The nodes are identical, we can exit early
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-
-               // Fallback to using sourceIndex (in IE) if it's available on both nodes
-               } else if ( a.sourceIndex && b.sourceIndex ) {
-                       return a.sourceIndex - b.sourceIndex;
-               }
-
-               var al, bl,
-                       ap = [],
-                       bp = [],
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       cur = aup;
-
-               // If the nodes are siblings (or identical) we can do a quick check
-               if ( aup === bup ) {
-                       return siblingCheck( a, b );
-
-               // If no parents were found then the nodes are disconnected
-               } else if ( !aup ) {
-                       return -1;
-
-               } else if ( !bup ) {
-                       return 1;
-               }
-
-               // Otherwise they're somewhere else in the tree so we need
-               // to build up a full list of the parentNodes for comparison
-               while ( cur ) {
-                       ap.unshift( cur );
-                       cur = cur.parentNode;
-               }
-
-               cur = bup;
-
-               while ( cur ) {
-                       bp.unshift( cur );
-                       cur = cur.parentNode;
-               }
-
-               al = ap.length;
-               bl = bp.length;
-
-               // Start walking down the tree looking for a discrepancy
-               for ( var i = 0; i < al && i < bl; i++ ) {
-                       if ( ap[i] !== bp[i] ) {
-                               return siblingCheck( ap[i], bp[i] );
-                       }
-               }
-
-               // We ended someplace up the tree so do a sibling check
-               return i === al ?
-                       siblingCheck( a, bp[i], -1 ) :
-                       siblingCheck( ap[i], b, 1 );
-       };
-
-       siblingCheck = function( a, b, ret ) {
-               if ( a === b ) {
-                       return ret;
-               }
-
-               var cur = a.nextSibling;
-
-               while ( cur ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-
-                       cur = cur.nextSibling;
-               }
-
-               return 1;
-       };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-       // We're going to inject a fake input element with a specified name
-       var form = document.createElement("div"),
-               id = "script" + (new Date()).getTime(),
-               root = document.documentElement;
-
-       form.innerHTML = "<a name='" + id + "'/>";
-
-       // Inject it into the root element, check its status, and remove it quickly
-       root.insertBefore( form, root.firstChild );
-
-       // The workaround has to do additional checks after a getElementById
-       // Which slows things down for other browsers (hence the branching)
-       if ( document.getElementById( id ) ) {
-               Expr.find.ID = function( match, context, isXML ) {
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-
-                               return m ?
-                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-                                               [m] :
-                                               undefined :
-                                       [];
-                       }
-               };
-
-               Expr.filter.ID = function( elem, match ) {
-                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-                       return elem.nodeType === 1 && node && node.nodeValue === match;
-               };
-       }
-
-       root.removeChild( form );
-
-       // release memory in IE
-       root = form = null;
-})();
-
-(function(){
-       // Check to see if the browser returns only elements
-       // when doing getElementsByTagName("*")
-
-       // Create a fake element
-       var div = document.createElement("div");
-       div.appendChild( document.createComment("") );
-
-       // Make sure no comments are found
-       if ( div.getElementsByTagName("*").length > 0 ) {
-               Expr.find.TAG = function( match, context ) {
-                       var results = context.getElementsByTagName( match[1] );
-
-                       // Filter out possible comments
-                       if ( match[1] === "*" ) {
-                               var tmp = [];
-
-                               for ( var i = 0; results[i]; i++ ) {
-                                       if ( results[i].nodeType === 1 ) {
-                                               tmp.push( results[i] );
-                                       }
-                               }
-
-                               results = tmp;
-                       }
-
-                       return results;
-               };
-       }
-
-       // Check to see if an attribute returns normalized href attributes
-       div.innerHTML = "<a href='#'></a>";
-
-       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-                       div.firstChild.getAttribute("href") !== "#" ) {
-
-               Expr.attrHandle.href = function( elem ) {
-                       return elem.getAttribute( "href", 2 );
-               };
-       }
-
-       // release memory in IE
-       div = null;
-})();
-
-if ( document.querySelectorAll ) {
-       (function(){
-               var oldSizzle = Sizzle,
-                       div = document.createElement("div"),
-                       id = "__sizzle__";
-
-               div.innerHTML = "<p class='TEST'></p>";
-
-               // Safari can't handle uppercase or unicode characters when
-               // in quirks mode.
-               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-                       return;
-               }
-
-               Sizzle = function( query, context, extra, seed ) {
-                       context = context || document;
-
-                       // Only use querySelectorAll on non-XML documents
-                       // (ID selectors don't work in non-HTML documents)
-                       if ( !seed && !Sizzle.isXML(context) ) {
-                               // See if we find a selector to speed up
-                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
-                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-                                       // Speed-up: Sizzle("TAG")
-                                       if ( match[1] ) {
-                                               return makeArray( context.getElementsByTagName( query ), extra );
-
-                                       // Speed-up: Sizzle(".CLASS")
-                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
-                                       }
-                               }
-
-                               if ( context.nodeType === 9 ) {
-                                       // Speed-up: Sizzle("body")
-                                       // The body element only exists once, optimize finding it
-                                       if ( query === "body" && context.body ) {
-                                               return makeArray( [ context.body ], extra );
-
-                                       // Speed-up: Sizzle("#ID")
-                                       } else if ( match && match[3] ) {
-                                               var elem = context.getElementById( match[3] );
-
-                                               // Check parentNode to catch when Blackberry 4.6 returns
-                                               // nodes that are no longer in the document #6963
-                                               if ( elem && elem.parentNode ) {
-                                                       // Handle the case where IE and Opera return items
-                                                       // by name instead of ID
-                                                       if ( elem.id === match[3] ) {
-                                                               return makeArray( [ elem ], extra );
-                                                       }
-
-                                               } else {
-                                                       return makeArray( [], extra );
-                                               }
-                                       }
-
-                                       try {
-                                               return makeArray( context.querySelectorAll(query), extra );
-                                       } catch(qsaError) {}
-
-                               // qSA works strangely on Element-rooted queries
-                               // We can work around this by specifying an extra ID on the root
-                               // and working up from there (Thanks to Andrew Dupont for the technique)
-                               // IE 8 doesn't work on object elements
-                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                                       var oldContext = context,
-                                               old = context.getAttribute( "id" ),
-                                               nid = old || id,
-                                               hasParent = context.parentNode,
-                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-                                       if ( !old ) {
-                                               context.setAttribute( "id", nid );
-                                       } else {
-                                               nid = nid.replace( /'/g, "\\$&" );
-                                       }
-                                       if ( relativeHierarchySelector && hasParent ) {
-                                               context = context.parentNode;
-                                       }
-
-                                       try {
-                                               if ( !relativeHierarchySelector || hasParent ) {
-                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-                                               }
-
-                                       } catch(pseudoError) {
-                                       } finally {
-                                               if ( !old ) {
-                                                       oldContext.removeAttribute( "id" );
-                                               }
-                                       }
-                               }
-                       }
-
-                       return oldSizzle(query, context, extra, seed);
-               };
-
-               for ( var prop in oldSizzle ) {
-                       Sizzle[ prop ] = oldSizzle[ prop ];
-               }
-
-               // release memory in IE
-               div = null;
-       })();
-}
-
-(function(){
-       var html = document.documentElement,
-               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-       if ( matches ) {
-               // Check to see if it's possible to do matchesSelector
-               // on a disconnected node (IE 9 fails this)
-               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-                       pseudoWorks = false;
-
-               try {
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( document.documentElement, "[test!='']:sizzle" );
-
-               } catch( pseudoError ) {
-                       pseudoWorks = true;
-               }
-
-               Sizzle.matchesSelector = function( node, expr ) {
-                       // Make sure that attribute selectors are quoted
-                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-                       if ( !Sizzle.isXML( node ) ) {
-                               try {
-                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-                                               var ret = matches.call( node, expr );
-
-                                               // IE 9's matchesSelector returns false on disconnected nodes
-                                               if ( ret || !disconnectedMatch ||
-                                                               // As well, disconnected nodes are said to be in a document
-                                                               // fragment in IE 9, so check for that
-                                                               node.document && node.document.nodeType !== 11 ) {
-                                                       return ret;
-                                               }
-                                       }
-                               } catch(e) {}
-                       }
-
-                       return Sizzle(expr, null, null, [node]).length > 0;
-               };
-       }
-})();
-
-(function(){
-       var div = document.createElement("div");
-
-       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-       // Opera can't find a second classname (in 9.6)
-       // Also, make sure that getElementsByClassName actually exists
-       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-               return;
-       }
-
-       // Safari caches class attributes, doesn't catch changes (in 3.2)
-       div.lastChild.className = "e";
-
-       if ( div.getElementsByClassName("e").length === 1 ) {
-               return;
-       }
-
-       Expr.order.splice(1, 0, "CLASS");
-       Expr.find.CLASS = function( match, context, isXML ) {
-               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-                       return context.getElementsByClassName(match[1]);
-               }
-       };
-
-       // release memory in IE
-       div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-
-               if ( elem ) {
-                       var match = false;
-
-                       elem = elem[dir];
-
-                       while ( elem ) {
-                               if ( elem[ expando ] === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 && !isXML ){
-                                       elem[ expando ] = doneName;
-                                       elem.sizset = i;
-                               }
-
-                               if ( elem.nodeName.toLowerCase() === cur ) {
-                                       match = elem;
-                                       break;
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-
-               if ( elem ) {
-                       var match = false;
-
-                       elem = elem[dir];
-
-                       while ( elem ) {
-                               if ( elem[ expando ] === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !isXML ) {
-                                               elem[ expando ] = doneName;
-                                               elem.sizset = i;
-                                       }
-
-                                       if ( typeof cur !== "string" ) {
-                                               if ( elem === cur ) {
-                                                       match = true;
-                                                       break;
-                                               }
-
-                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-                                               match = elem;
-                                               break;
-                                       }
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-if ( document.documentElement.contains ) {
-       Sizzle.contains = function( a, b ) {
-               return a !== b && (a.contains ? a.contains(b) : true);
-       };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-       Sizzle.contains = function( a, b ) {
-               return !!(a.compareDocumentPosition(b) & 16);
-       };
-
-} else {
-       Sizzle.contains = function() {
-               return false;
-       };
-}
-
-Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-       var match,
-               tmpSet = [],
-               later = "",
-               root = context.nodeType ? [context] : context;
-
-       // Position selectors must be done after the filter
-       // And so must :not(positional) so we move all PSEUDOs to the end
-       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-               later += match[0];
-               selector = selector.replace( Expr.match.PSEUDO, "" );
-       }
-
-       selector = Expr.relative[selector] ? selector + "*" : selector;
-
-       for ( var i = 0, l = root.length; i < l; i++ ) {
-               Sizzle( selector, root[i], tmpSet, seed );
-       }
-
-       return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-       // Note: This RegExp should be improved, or likely pulled from Sizzle
-       rmultiselector = /,/,
-       isSimple = /^.[^:#\[\.,]*$/,
-       slice = Array.prototype.slice,
-       POS = jQuery.expr.match.globalPOS,
-       // methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var self = this,
-                       i, l;
-
-               if ( typeof selector !== "string" ) {
-                       return jQuery( selector ).filter(function() {
-                               for ( i = 0, l = self.length; i < l; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       });
-               }
-
-               var ret = this.pushStack( "", "find", selector ),
-                       length, n, r;
-
-               for ( i = 0, l = this.length; i < l; i++ ) {
-                       length = ret.length;
-                       jQuery.find( selector, this[i], ret );
-
-                       if ( i > 0 ) {
-                               // Make sure that the results are unique
-                               for ( n = length; n < ret.length; n++ ) {
-                                       for ( r = 0; r < length; r++ ) {
-                                               if ( ret[r] === ret[n] ) {
-                                                       ret.splice(n--, 1);
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               return ret;
-       },
-
-       has: function( target ) {
-               var targets = jQuery( target );
-               return this.filter(function() {
-                       for ( var i = 0, l = targets.length; i < l; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector, false), "not", selector);
-       },
-
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector, true), "filter", selector );
-       },
-
-       is: function( selector ) {
-               return !!selector && (
-                       typeof selector === "string" ?
-                               // If this is a positional selector, check membership in the returned set
-                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                               POS.test( selector ) ?
-                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
-                                       jQuery.filter( selector, this ).length > 0 :
-                               this.filter( selector ).length > 0 );
-       },
-
-       closest: function( selectors, context ) {
-               var ret = [], i, l, cur = this[0];
-
-               // Array (deprecated as of jQuery 1.7)
-               if ( jQuery.isArray( selectors ) ) {
-                       var level = 1;
-
-                       while ( cur && cur.ownerDocument && cur !== context ) {
-                               for ( i = 0; i < selectors.length; i++ ) {
-
-                                       if ( jQuery( cur ).is( selectors[ i ] ) ) {
-                                               ret.push({ selector: selectors[ i ], elem: cur, level: level });
-                                       }
-                               }
-
-                               cur = cur.parentNode;
-                               level++;
-                       }
-
-                       return ret;
-               }
-
-               // String
-               var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
-
-               for ( i = 0, l = this.length; i < l; i++ ) {
-                       cur = this[i];
-
-                       while ( cur ) {
-                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-                                       ret.push( cur );
-                                       break;
-
-                               } else {
-                                       cur = cur.parentNode;
-                                       if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-               return this.pushStack( ret, "closest", selectors );
-       },
-
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-               }
-
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
                }
 
                // Locate the position of the desired element
@@ -5556,17 +5477,29 @@ jQuery.fn.extend({
                        jQuery.unique( all ) );
        },
 
-       andSelf: function() {
-               return this.add( this.prevObject );
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter(selector)
+               );
        }
 });
 
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
 // A painfully simple check to see if an element is disconnected
 // from a document (should be improved, where feasible).
 function isDisconnected( node ) {
        return !node || !node.parentNode || node.parentNode.nodeType === 11;
 }
 
+function sibling( cur, dir ) {
+       do {
+               cur = cur[ dir ];
+       } while ( cur && cur.nodeType !== 1 );
+
+       return cur;
+}
+
 jQuery.each({
        parent: function( elem ) {
                var parent = elem.parentNode;
@@ -5579,10 +5512,10 @@ jQuery.each({
                return jQuery.dir( elem, "parentNode", until );
        },
        next: function( elem ) {
-               return jQuery.nth( elem, 2, "nextSibling" );
+               return sibling( elem, "nextSibling" );
        },
        prev: function( elem ) {
-               return jQuery.nth( elem, 2, "previousSibling" );
+               return sibling( elem, "previousSibling" );
        },
        nextAll: function( elem ) {
                return jQuery.dir( elem, "nextSibling" );
@@ -5605,7 +5538,7 @@ jQuery.each({
        contents: function( elem ) {
                return jQuery.nodeName( elem, "iframe" ) ?
                        elem.contentDocument || elem.contentWindow.document :
-                       jQuery.makeArray( elem.childNodes );
+                       jQuery.merge( [], elem.childNodes );
        }
 }, function( name, fn ) {
        jQuery.fn[ name ] = function( until, selector ) {
@@ -5621,11 +5554,11 @@ jQuery.each({
 
                ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
 
-               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+               if ( this.length > 1 && rparentsprev.test( name ) ) {
                        ret = ret.reverse();
                }
 
-               return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+               return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
        };
 });
 
@@ -5653,19 +5586,6 @@ jQuery.extend({
                return matched;
        },
 
-       nth: function( cur, result, dir, elem ) {
-               result = result || 1;
-               var num = 0;
-
-               for ( ; cur; cur = cur[dir] ) {
-                       if ( cur.nodeType === 1 && ++num === result ) {
-                               break;
-                       }
-               }
-
-               return cur;
-       },
-
        sibling: function( n, elem ) {
                var r = [];
 
@@ -5713,10 +5633,6 @@ function winnow( elements, qualifier, keep ) {
                return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
        });
 }
-
-
-
-
 function createSafeFragment( document ) {
        var list = nodeNames.split( "|" ),
        safeFrag = document.createDocumentFragment();
@@ -5733,19 +5649,20 @@ function createSafeFragment( document ) {
 
 var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
                "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-       rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
        rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
        rtagName = /<([\w:]+)/,
        rtbody = /<tbody/i,
        rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style)/i,
+       rnoInnerhtml = /<(?:script|style|link)/i,
        rnocache = /<(?:script|object|embed|option|style)/i,
        rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+       rcheckableType = /^(?:checkbox|radio)$/,
        // checked="checked" or checked
        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
        rscriptType = /\/(java|ecma)script/i,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
        wrapMap = {
                option: [ 1, "<select multiple='multiple'>", "</select>" ],
                legend: [ 1, "<fieldset>", "</fieldset>" ],
@@ -5756,15 +5673,17 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca
                area: [ 1, "<map>", "</map>" ],
                _default: [ 0, "", "" ]
        },
-       safeFragment = createSafeFragment( document );
+       safeFragment = createSafeFragment( document ),
+       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
 
 wrapMap.optgroup = wrapMap.option;
 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
 wrapMap.th = wrapMap.td;
 
-// IE can't serialize <link> and <script> tags normally
+// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+// unless wrapped in a div with non-breaking characters in front of it.
 if ( !jQuery.support.htmlSerialize ) {
-       wrapMap._default = [ 1, "div<div>", "</div>" ];
+       wrapMap._default = [ 1, "X<div>", "</div>" ];
 }
 
 jQuery.fn.extend({
@@ -5843,7 +5762,7 @@ jQuery.fn.extend({
 
        append: function() {
                return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
                                this.appendChild( elem );
                        }
                });
@@ -5851,39 +5770,44 @@ jQuery.fn.extend({
 
        prepend: function() {
                return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
                                this.insertBefore( elem, this.firstChild );
                        }
                });
        },
 
        before: function() {
-               if ( this[0] && this[0].parentNode ) {
+               if ( !isDisconnected( this[0] ) ) {
                        return this.domManip(arguments, false, function( elem ) {
                                this.parentNode.insertBefore( elem, this );
                        });
-               } else if ( arguments.length ) {
+               }
+
+               if ( arguments.length ) {
                        var set = jQuery.clean( arguments );
-                       set.push.apply( set, this.toArray() );
-                       return this.pushStack( set, "before", arguments );
+                       return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
                }
        },
 
        after: function() {
-               if ( this[0] && this[0].parentNode ) {
+               if ( !isDisconnected( this[0] ) ) {
                        return this.domManip(arguments, false, function( elem ) {
                                this.parentNode.insertBefore( elem, this.nextSibling );
                        });
-               } else if ( arguments.length ) {
-                       var set = this.pushStack( this, "after", arguments );
-                       set.push.apply( set, jQuery.clean(arguments) );
-                       return set;
+               }
+
+               if ( arguments.length ) {
+                       var set = jQuery.clean( arguments );
+                       return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
                }
        },
 
        // keepData is for internal use only--do not document
        remove: function( selector, keepData ) {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+               var elem,
+                       i = 0;
+
+               for ( ; (elem = this[i]) != null; i++ ) {
                        if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
                                if ( !keepData && elem.nodeType === 1 ) {
                                        jQuery.cleanData( elem.getElementsByTagName("*") );
@@ -5900,7 +5824,10 @@ jQuery.fn.extend({
        },
 
        empty: function() {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+               var elem,
+                       i = 0;
+
+               for ( ; (elem = this[i]) != null; i++ ) {
                        // Remove element nodes and prevent memory leaks
                        if ( elem.nodeType === 1 ) {
                                jQuery.cleanData( elem.getElementsByTagName("*") );
@@ -5933,11 +5860,12 @@ jQuery.fn.extend({
                        if ( value === undefined ) {
                                return elem.nodeType === 1 ?
                                        elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                       null;
+                                       undefined;
                        }
 
-
+                       // See if we can take a shortcut and just use innerHTML
                        if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
                                ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
                                !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
 
@@ -5966,7 +5894,7 @@ jQuery.fn.extend({
        },
 
        replaceWith: function( value ) {
-               if ( this[0] && this[0].parentNode ) {
+               if ( !isDisconnected( this[0] ) ) {
                        // Make sure that the elements are removed from the DOM before they are inserted
                        // this can help fix replacing a parent with child elements
                        if ( jQuery.isFunction( value ) ) {
@@ -5992,11 +5920,11 @@ jQuery.fn.extend({
                                        jQuery(parent).append( value );
                                }
                        });
-               } else {
-                       return this.length ?
-                               this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-                               this;
                }
+
+               return this.length ?
+                       this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                       this;
        },
 
        detach: function( selector ) {
@@ -6004,78 +5932,78 @@ jQuery.fn.extend({
        },
 
        domManip: function( args, table, callback ) {
-               var results, first, fragment, parent,
+
+               // Flatten any nested arrays
+               args = [].concat.apply( [], args );
+
+               var results, first, fragment, iNoClone,
+                       i = 0,
                        value = args[0],
-                       scripts = [];
+                       scripts = [],
+                       l = this.length;
 
                // We can't cloneNode fragments that contain checked, in WebKit
-               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+               if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
                        return this.each(function() {
-                               jQuery(this).domManip( args, table, callback, true );
+                               jQuery(this).domManip( args, table, callback );
                        });
                }
 
                if ( jQuery.isFunction(value) ) {
                        return this.each(function(i) {
                                var self = jQuery(this);
-                               args[0] = value.call(this, i, table ? self.html() : undefined);
+                               args[0] = value.call( this, i, table ? self.html() : undefined );
                                self.domManip( args, table, callback );
                        });
                }
 
                if ( this[0] ) {
-                       parent = value && value.parentNode;
-
-                       // If we're in a fragment, just use that instead of building a new one
-                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-                               results = { fragment: parent };
-
-                       } else {
-                               results = jQuery.buildFragment( args, this, scripts );
-                       }
-
+                       results = jQuery.buildFragment( args, this, scripts );
                        fragment = results.fragment;
+                       first = fragment.firstChild;
 
                        if ( fragment.childNodes.length === 1 ) {
-                               first = fragment = fragment.firstChild;
-                       } else {
-                               first = fragment.firstChild;
+                               fragment = first;
                        }
 
                        if ( first ) {
                                table = table && jQuery.nodeName( first, "tr" );
 
-                               for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+                               // Use the original fragment for the last item instead of the first because it can end up
+                               // being emptied incorrectly in certain situations (#8070).
+                               // Fragments from the fragment cache must always be cloned and never used in place.
+                               for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
                                        callback.call(
-                                               table ?
-                                                       root(this[i], first) :
+                                               table && jQuery.nodeName( this[i], "table" ) ?
+                                                       findOrAppend( this[i], "tbody" ) :
                                                        this[i],
-                                               // Make sure that we do not leak memory by inadvertently discarding
-                                               // the original fragment (which might have attached data) instead of
-                                               // using it; in addition, use the original fragment object for the last
-                                               // item instead of first because it can end up being emptied incorrectly
-                                               // in certain situations (Bug #8070).
-                                               // Fragments from the fragment cache must always be cloned and never used
-                                               // in place.
-                                               results.cacheable || ( l > 1 && i < lastIndex ) ?
-                                                       jQuery.clone( fragment, true, true ) :
-                                                       fragment
+                                               i === iNoClone ?
+                                                       fragment :
+                                                       jQuery.clone( fragment, true, true )
                                        );
                                }
                        }
 
+                       // Fix #11809: Avoid leaking memory
+                       fragment = first = null;
+
                        if ( scripts.length ) {
                                jQuery.each( scripts, function( i, elem ) {
                                        if ( elem.src ) {
-                                               jQuery.ajax({
-                                                       type: "GET",
-                                                       global: false,
-                                                       url: elem.src,
-                                                       async: false,
-                                                       dataType: "script"
-                                               });
+                                               if ( jQuery.ajax ) {
+                                                       jQuery.ajax({
+                                                               url: elem.src,
+                                                               type: "GET",
+                                                               dataType: "script",
+                                                               async: false,
+                                                               global: false,
+                                                               "throws": true
+                                                       });
+                                               } else {
+                                                       jQuery.error("no ajax");
+                                               }
                                        } else {
-                                               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+                                               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
                                        }
 
                                        if ( elem.parentNode ) {
@@ -6089,11 +6017,8 @@ jQuery.fn.extend({
        }
 });
 
-function root( elem, cur ) {
-       return jQuery.nodeName(elem, "table") ?
-               (elem.getElementsByTagName("tbody")[0] ||
-               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-               elem;
+function findOrAppend( elem, tag ) {
+       return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
 }
 
 function cloneCopyEvent( src, dest ) {
@@ -6146,19 +6071,27 @@ function cloneFixAttributes( src, dest ) {
 
        nodeName = dest.nodeName.toLowerCase();
 
-       // IE6-8 fail to clone children inside object elements that use
-       // the proprietary classid attribute value (rather than the type
-       // attribute) to identify the type of content to display
        if ( nodeName === "object" ) {
-               dest.outerHTML = src.outerHTML;
+               // IE6-10 improperly clones children of object elements using classid.
+               // IE10 throws NoModificationAllowedError if parent is null, #12132.
+               if ( dest.parentNode ) {
+                       dest.outerHTML = src.outerHTML;
+               }
+
+               // This path appears unavoidable for IE9. When cloning an object
+               // element in IE9, the outerHTML strategy above is not sufficient.
+               // If the src has innerHTML and the destination does not,
+               // copy the src.innerHTML into the dest.innerHTML. #10324
+               if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
+                       dest.innerHTML = src.innerHTML;
+               }
 
-       } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
                // IE6-8 fails to persist the checked state of a cloned checkbox
                // or radio button. Worse, IE6-7 fail to give the cloned element
                // a checked appearance if the defaultChecked value isn't also set
-               if ( src.checked ) {
-                       dest.defaultChecked = dest.checked = src.checked;
-               }
+
+               dest.defaultChecked = dest.checked = src.checked;
 
                // IE6-7 get confused and end up setting the value of a cloned
                // checkbox/radio button to an empty string instead of "on"
@@ -6184,56 +6117,44 @@ function cloneFixAttributes( src, dest ) {
        // Event data gets referenced instead of copied if the expando
        // gets copied too
        dest.removeAttribute( jQuery.expando );
-
-       // Clear flags for bubbling special change/submit events, they must
-       // be reattached when the newly cloned events are first activated
-       dest.removeAttribute( "_submit_attached" );
-       dest.removeAttribute( "_change_attached" );
 }
 
-jQuery.buildFragment = function( args, nodes, scripts ) {
-       var fragment, cacheable, cacheresults, doc,
-       first = args[ 0 ];
-
-       // nodes may contain either an explicit document object,
-       // a jQuery collection or context object.
-       // If nodes[0] contains a valid object to assign to doc
-       if ( nodes && nodes[0] ) {
-               doc = nodes[0].ownerDocument || nodes[0];
-       }
+jQuery.buildFragment = function( args, context, scripts ) {
+       var fragment, cacheable, cachehit,
+               first = args[ 0 ];
 
-       // Ensure that an attr object doesn't incorrectly stand in as a document object
-       // Chrome and Firefox seem to allow this to occur and will throw exception
-       // Fixes #8950
-       if ( !doc.createDocumentFragment ) {
-               doc = document;
-       }
+       // Set context from what may come in as undefined or a jQuery collection or a node
+       // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
+       // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
+       context = context || document;
+       context = !context.nodeType && context[0] || context;
+       context = context.ownerDocument || context;
 
        // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
        // Cloning options loses the selected state, so don't cache them
        // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
        // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
        // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-       if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+       if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
                first.charAt(0) === "<" && !rnocache.test( first ) &&
                (jQuery.support.checkClone || !rchecked.test( first )) &&
                (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
 
+               // Mark cacheable and look for a hit
                cacheable = true;
-
-               cacheresults = jQuery.fragments[ first ];
-               if ( cacheresults && cacheresults !== 1 ) {
-                       fragment = cacheresults;
-               }
+               fragment = jQuery.fragments[ first ];
+               cachehit = fragment !== undefined;
        }
 
        if ( !fragment ) {
-               fragment = doc.createDocumentFragment();
-               jQuery.clean( args, doc, fragment, scripts );
-       }
+               fragment = context.createDocumentFragment();
+               jQuery.clean( args, context, fragment, scripts );
 
-       if ( cacheable ) {
-               jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+               // Update the cache, but only store false
+               // unless this is a second parsing of the same content
+               if ( cacheable ) {
+                       jQuery.fragments[ first ] = cachehit && fragment;
+               }
        }
 
        return { fragment: fragment, cacheable: cacheable };
@@ -6249,17 +6170,19 @@ jQuery.each({
        replaceAll: "replaceWith"
 }, function( name, original ) {
        jQuery.fn[ name ] = function( selector ) {
-               var ret = [],
+               var elems,
+                       i = 0,
+                       ret = [],
                        insert = jQuery( selector ),
+                       l = insert.length,
                        parent = this.length === 1 && this[0].parentNode;
 
-               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+               if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
                        insert[ original ]( this[0] );
                        return this;
-
                } else {
-                       for ( var i = 0, l = insert.length; i < l; i++ ) {
-                               var elems = ( i > 0 ? this.clone(true) : this ).get();
+                       for ( ; i < l; i++ ) {
+                               elems = ( i > 0 ? this.clone(true) : this ).get();
                                jQuery( insert[i] )[ original ]( elems );
                                ret = ret.concat( elems );
                        }
@@ -6283,39 +6206,26 @@ function getAll( elem ) {
 
 // Used in clean, fixes the defaultChecked property
 function fixDefaultChecked( elem ) {
-       if ( elem.type === "checkbox" || elem.type === "radio" ) {
+       if ( rcheckableType.test( elem.type ) ) {
                elem.defaultChecked = elem.checked;
        }
 }
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-       var nodeName = ( elem.nodeName || "" ).toLowerCase();
-       if ( nodeName === "input" ) {
-               fixDefaultChecked( elem );
-       // Skip scripts, get other children
-       } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-               jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-       }
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
-       var div = document.createElement( "div" );
-       safeFragment.appendChild( div );
-
-       div.innerHTML = elem.outerHTML;
-       return div.firstChild;
-}
 
 jQuery.extend({
        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
                var srcElements,
                        destElements,
                        i,
-                       // IE<=8 does not properly clone detached, unknown element nodes
-                       clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
-                               elem.cloneNode( true ) :
-                               shimCloneNode( elem );
+                       clone;
+
+               if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+                       clone = elem.cloneNode( true );
+
+               // IE<=8 does not properly clone detached, unknown element nodes
+               } else {
+                       fragmentDiv.innerHTML = elem.outerHTML;
+                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+               }
 
                if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
                                (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
@@ -6363,17 +6273,17 @@ jQuery.extend({
        },
 
        clean: function( elems, context, fragment, scripts ) {
-               var checkScriptType, script, j,
-                               ret = [];
-
-               context = context || document;
+               var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
+                       safe = context === document && safeFragment,
+                       ret = [];
 
-               // !context.createElement fails in IE with an error but returns typeof 'object'
-               if ( typeof context.createElement === "undefined" ) {
-                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+               // Ensure that context is a document
+               if ( !context || typeof context.createDocumentFragment === "undefined" ) {
+                       context = document;
                }
 
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+               // Use the already-created safe fragment if context permits
+               for ( i = 0; (elem = elems[i]) != null; i++ ) {
                        if ( typeof elem === "number" ) {
                                elem += "";
                        }
@@ -6387,27 +6297,18 @@ jQuery.extend({
                                if ( !rhtml.test( elem ) ) {
                                        elem = context.createTextNode( elem );
                                } else {
+                                       // Ensure a safe container in which to render the html
+                                       safe = safe || createSafeFragment( context );
+                                       div = context.createElement("div");
+                                       safe.appendChild( div );
+
                                        // Fix "XHTML"-style tags in all browsers
                                        elem = elem.replace(rxhtmlTag, "<$1></$2>");
 
-                                       // Trim whitespace, otherwise indexOf won't work as expected
-                                       var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-                                               wrap = wrapMap[ tag ] || wrapMap._default,
-                                               depth = wrap[0],
-                                               div = context.createElement("div"),
-                                               safeChildNodes = safeFragment.childNodes,
-                                               remove;
-
-                                       // Append wrapper element to unknown element safe doc fragment
-                                       if ( context === document ) {
-                                               // Use the fragment we've already created for this document
-                                               safeFragment.appendChild( div );
-                                       } else {
-                                               // Use a fragment created with the owner document
-                                               createSafeFragment( context ).appendChild( div );
-                                       }
-
                                        // Go to html and back, then peel off extra wrappers
+                                       tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+                                       wrap = wrapMap[ tag ] || wrapMap._default;
+                                       depth = wrap[0];
                                        div.innerHTML = wrap[1] + elem + wrap[2];
 
                                        // Move to the right depth
@@ -6419,7 +6320,7 @@ jQuery.extend({
                                        if ( !jQuery.support.tbody ) {
 
                                                // String was a <table>, *may* have spurious <tbody>
-                                               var hasBody = rtbody.test(elem),
+                                               hasBody = rtbody.test(elem);
                                                        tbody = tag === "table" && !hasBody ?
                                                                div.firstChild && div.firstChild.childNodes :
 
@@ -6442,59 +6343,62 @@ jQuery.extend({
 
                                        elem = div.childNodes;
 
-                                       // Clear elements from DocumentFragment (safeFragment or otherwise)
-                                       // to avoid hoarding elements. Fixes #11356
-                                       if ( div ) {
-                                               div.parentNode.removeChild( div );
-
-                                               // Guard against -1 index exceptions in FF3.6
-                                               if ( safeChildNodes.length > 0 ) {
-                                                       remove = safeChildNodes[ safeChildNodes.length - 1 ];
-
-                                                       if ( remove && remove.parentNode ) {
-                                                               remove.parentNode.removeChild( remove );
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Resets defaultChecked for any radios and checkboxes
-                       // about to be appended to the DOM in IE 6/7 (#8060)
-                       var len;
-                       if ( !jQuery.support.appendChecked ) {
-                               if ( elem[0] && typeof (len = elem.length) === "number" ) {
-                                       for ( j = 0; j < len; j++ ) {
-                                               findInputs( elem[j] );
-                                       }
-                               } else {
-                                       findInputs( elem );
+                                       // Take out of fragment container (we need a fresh div each time)
+                                       div.parentNode.removeChild( div );
                                }
                        }
 
                        if ( elem.nodeType ) {
                                ret.push( elem );
                        } else {
-                               ret = jQuery.merge( ret, elem );
+                               jQuery.merge( ret, elem );
+                       }
+               }
+
+               // Fix #11356: Clear elements from safeFragment
+               if ( div ) {
+                       elem = div = safe = null;
+               }
+
+               // Reset defaultChecked for any radios and checkboxes
+               // about to be appended to the DOM in IE 6/7 (#8060)
+               if ( !jQuery.support.appendChecked ) {
+                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                               if ( jQuery.nodeName( elem, "input" ) ) {
+                                       fixDefaultChecked( elem );
+                               } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                                       jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+                               }
                        }
                }
 
+               // Append elements to a provided document fragment
                if ( fragment ) {
-                       checkScriptType = function( elem ) {
-                               return !elem.type || rscriptType.test( elem.type );
+                       // Special handling of each script element
+                       handleScript = function( elem ) {
+                               // Check if we consider it executable
+                               if ( !elem.type || rscriptType.test( elem.type ) ) {
+                                       // Detach the script and store it in the scripts array (if provided) or the fragment
+                                       // Return truthy to indicate that it has been handled
+                                       return scripts ?
+                                               scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+                                               fragment.appendChild( elem );
+                               }
                        };
-                       for ( i = 0; ret[i]; i++ ) {
-                               script = ret[i];
-                               if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
-                                       scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
 
-                               } else {
-                                       if ( script.nodeType === 1 ) {
-                                               var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
+                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                               // Check if we're done after handling an executable script
+                               if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+                                       // Append to fragment and handle embedded scripts
+                                       fragment.appendChild( elem );
+                                       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                                               // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+                                               jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
 
+                                               // Splice the scripts into ret after their former ancestor and advance our index beyond them
                                                ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                               i += jsTags.length;
                                        }
-                                       fragment.appendChild( script );
                                }
                        }
                }
@@ -6502,81 +6406,253 @@ jQuery.extend({
                return ret;
        },
 
-       cleanData: function( elems ) {
-               var data, id,
+       cleanData: function( elems, /* internal */ acceptData ) {
+               var data, id, elem, type,
+                       i = 0,
+                       internalKey = jQuery.expando,
                        cache = jQuery.cache,
-                       special = jQuery.event.special,
-                       deleteExpando = jQuery.support.deleteExpando;
+                       deleteExpando = jQuery.support.deleteExpando,
+                       special = jQuery.event.special;
 
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-                               continue;
-                       }
+               for ( ; (elem = elems[i]) != null; i++ ) {
 
-                       id = elem[ jQuery.expando ];
+                       if ( acceptData || jQuery.acceptData( elem ) ) {
 
-                       if ( id ) {
-                               data = cache[ id ];
+                               id = elem[ internalKey ];
+                               data = id && cache[ id ];
 
-                               if ( data && data.events ) {
-                                       for ( var type in data.events ) {
-                                               if ( special[ type ] ) {
-                                                       jQuery.event.remove( elem, type );
+                               if ( data ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
 
-                                               // This is a shortcut to avoid jQuery.event.remove's overhead
-                                               } else {
-                                                       jQuery.removeEvent( elem, type, data.handle );
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
                                                }
                                        }
 
-                                       // Null the DOM reference to avoid IE6/7/8 leak (#7054)
-                                       if ( data.handle ) {
-                                               data.handle.elem = null;
-                                       }
-                               }
+                                       // Remove cache only if it was not already removed by jQuery.event.remove
+                                       if ( cache[ id ] ) {
 
-                               if ( deleteExpando ) {
-                                       delete elem[ jQuery.expando ];
+                                               delete cache[ id ];
 
-                               } else if ( elem.removeAttribute ) {
-                                       elem.removeAttribute( jQuery.expando );
-                               }
+                                               // IE does not allow us to delete expando properties from nodes,
+                                               // nor does it have a removeAttribute function on Document nodes;
+                                               // we must handle all of these cases
+                                               if ( deleteExpando ) {
+                                                       delete elem[ internalKey ];
+
+                                               } else if ( elem.removeAttribute ) {
+                                                       elem.removeAttribute( internalKey );
+
+                                               } else {
+                                                       elem[ internalKey ] = null;
+                                               }
 
-                               delete cache[ id ];
+                                               jQuery.deletedIds.push( id );
+                                       }
+                               }
                        }
                }
        }
 });
+// Limit scope pollution from any deprecated API
+(function() {
+
+var matched, browser;
+
+// Use of jQuery.browser is frowned upon.
+// More details: http://api.jquery.com/jQuery.browser
+// jQuery.uaMatch maintained for back-compat
+jQuery.uaMatch = function( ua ) {
+       ua = ua.toLowerCase();
+
+       var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+               /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+               /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+               /(msie) ([\w.]+)/.exec( ua ) ||
+               ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+               [];
+
+       return {
+               browser: match[ 1 ] || "",
+               version: match[ 2 ] || "0"
+       };
+};
+
+matched = jQuery.uaMatch( navigator.userAgent );
+browser = {};
+
+if ( matched.browser ) {
+       browser[ matched.browser ] = true;
+       browser.version = matched.version;
+}
 
+// Chrome is Webkit, but Webkit is also Safari.
+if ( browser.chrome ) {
+       browser.webkit = true;
+} else if ( browser.webkit ) {
+       browser.safari = true;
+}
+
+jQuery.browser = browser;
 
+jQuery.sub = function() {
+       function jQuerySub( selector, context ) {
+               return new jQuerySub.fn.init( selector, context );
+       }
+       jQuery.extend( true, jQuerySub, this );
+       jQuerySub.superclass = this;
+       jQuerySub.fn = jQuerySub.prototype = this();
+       jQuerySub.fn.constructor = jQuerySub;
+       jQuerySub.sub = this.sub;
+       jQuerySub.fn.init = function init( selector, context ) {
+               if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                       context = jQuerySub( context );
+               }
 
+               return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+       };
+       jQuerySub.fn.init.prototype = jQuerySub.fn;
+       var rootjQuerySub = jQuerySub(document);
+       return jQuerySub;
+};
 
-var ralpha = /alpha\([^)]*\)/i,
+})();
+var curCSS, iframe, iframeDoc,
+       ralpha = /alpha\([^)]*\)/i,
        ropacity = /opacity=([^)]*)/,
-       // fixed for IE9, see #8346
-       rupper = /([A-Z]|^ms)/g,
-       rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
-       rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
-       rrelNum = /^([\-+])=([\-+.\de]+)/,
+       rposition = /^(top|right|bottom|left)$/,
+       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
        rmargin = /^margin/,
+       rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+       rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+       rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
+       elemdisplay = {},
 
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: 0,
+               fontWeight: 400
+       },
 
-       // order is important!
        cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
 
-       curCSS,
+       eventsToggle = jQuery.fn.toggle;
 
-       getComputedStyle,
-       currentStyle;
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
 
-jQuery.fn.css = function( name, value ) {
-       return jQuery.access( this, function( elem, name, value ) {
-               return value !== undefined ?
-                       jQuery.style( elem, name, value ) :
-                       jQuery.css( elem, name );
-       }, name, value, arguments.length > 1 );
-};
+       // shortcut for names that are not vendor prefixed
+       if ( name in style ) {
+               return name;
+       }
+
+       // check for vendor prefixed names
+       var capName = name.charAt(0).toUpperCase() + name.slice(1),
+               origName = name,
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in style ) {
+                       return name;
+               }
+       }
+
+       return origName;
+}
+
+function isHidden( elem, el ) {
+       elem = el || elem;
+       return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+       var elem, display,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               values[ index ] = jQuery._data( elem, "olddisplay" );
+               if ( show ) {
+                       // Reset the inline display of this element to learn if it is
+                       // being hidden by cascaded rules or not
+                       if ( !values[ index ] && elem.style.display === "none" ) {
+                               elem.style.display = "";
+                       }
+
+                       // Set elements which have been overridden with display: none
+                       // in a stylesheet to whatever the default browser style is
+                       // for such an element
+                       if ( elem.style.display === "" && isHidden( elem ) ) {
+                               values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+                       }
+               } else {
+                       display = curCSS( elem, "display" );
+
+                       if ( !values[ index ] && display !== "none" ) {
+                               jQuery._data( elem, "olddisplay", display );
+                       }
+               }
+       }
+
+       // Set the display of most of the elements in a second loop
+       // to avoid the constant reflow
+       for ( index = 0; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+                       elem.style.display = show ? values[ index ] || "" : "none";
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend({
+       css: function( name, value ) {
+               return jQuery.access( this, function( elem, name, value ) {
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       },
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state, fn2 ) {
+               var bool = typeof state === "boolean";
+
+               if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
+                       return eventsToggle.apply( this, arguments );
+               }
+
+               return this.each(function() {
+                       if ( bool ? state : isHidden( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               });
+       }
+});
 
 jQuery.extend({
        // Add in style property hooks for overriding the default
@@ -6589,8 +6665,6 @@ jQuery.extend({
                                        var ret = curCSS( elem, "opacity" );
                                        return ret === "" ? "1" : ret;
 
-                               } else {
-                                       return elem.style.opacity;
                                }
                        }
                }
@@ -6623,10 +6697,15 @@ jQuery.extend({
                }
 
                // Make sure that we're working with the right name
-               var ret, type, origName = jQuery.camelCase( name ),
-                       style = elem.style, hooks = jQuery.cssHooks[ origName ];
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       style = elem.style;
 
-               name = jQuery.cssProps[ origName ] || origName;
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
                // Check if we're setting a value
                if ( value !== undefined ) {
@@ -6634,7 +6713,7 @@ jQuery.extend({
 
                        // convert relative number strings (+= or -=) to relative numbers. #7345
                        if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
                                // Fixes bug #9237
                                type = "number";
                        }
@@ -6650,7 +6729,7 @@ jQuery.extend({
                        }
 
                        // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
                                // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
                                // Fixes bug #5509
                                try {
@@ -6669,33 +6748,44 @@ jQuery.extend({
                }
        },
 
-       css: function( elem, name, extra ) {
-               var ret, hooks;
+       css: function( elem, name, numeric, extra ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name );
 
                // Make sure that we're working with the right name
-               name = jQuery.camelCase( name );
-               hooks = jQuery.cssHooks[ name ];
-               name = jQuery.cssProps[ name ] || name;
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
 
-               // cssFloat needs a special treatment
-               if ( name === "cssFloat" ) {
-                       name = "float";
-               }
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
                // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-                       return ret;
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
 
                // Otherwise, if a way to get the computed value exists, use that
-               } else if ( curCSS ) {
-                       return curCSS( elem, name );
+               if ( val === undefined ) {
+                       val = curCSS( elem, name );
+               }
+
+               //convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Return, converting to number if forced or a qualifier was provided and val looks numeric
+               if ( numeric || extra !== undefined ) {
+                       num = parseFloat( val );
+                       return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
                }
+               return val;
        },
 
        // A method for quickly swapping in/out CSS properties to get correct calculations
        swap: function( elem, options, callback ) {
-               var old = {},
-                       ret, name;
+               var ret, name,
+                       old = {};
 
                // Remember the old values, and insert the new ones
                for ( name in options ) {
@@ -6714,49 +6804,51 @@ jQuery.extend({
        }
 });
 
-// DEPRECATED in 1.3, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-       getComputedStyle = function( elem, name ) {
-               var ret, defaultView, computedStyle, width,
+// NOTE: To any future maintainer, we've window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+       curCSS = function( elem, name ) {
+               var ret, width, minWidth, maxWidth,
+                       computed = window.getComputedStyle( elem, null ),
                        style = elem.style;
 
-               name = name.replace( rupper, "-$1" ).toLowerCase();
-
-               if ( (defaultView = elem.ownerDocument.defaultView) &&
-                               (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+               if ( computed ) {
 
-                       ret = computedStyle.getPropertyValue( name );
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                       ret = computed[ name ];
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
                                ret = jQuery.style( elem, name );
                        }
-               }
 
-               // A tribute to the "awesome hack by Dean Edwards"
-               // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
-               // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-               if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
-                       width = style.width;
-                       style.width = ret;
-                       ret = computedStyle.width;
-                       style.width = width;
+                       // A tribute to the "awesome hack by Dean Edwards"
+                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+                               width = style.width;
+                               minWidth = style.minWidth;
+                               maxWidth = style.maxWidth;
+
+                               style.minWidth = style.maxWidth = style.width = ret;
+                               ret = computed.width;
+
+                               style.width = width;
+                               style.minWidth = minWidth;
+                               style.maxWidth = maxWidth;
+                       }
                }
 
                return ret;
        };
-}
-
-if ( document.documentElement.currentStyle ) {
-       currentStyle = function( elem, name ) {
-               var left, rsLeft, uncomputed,
+} else if ( document.documentElement.currentStyle ) {
+       curCSS = function( elem, name ) {
+               var left, rsLeft,
                        ret = elem.currentStyle && elem.currentStyle[ name ],
                        style = elem.style;
 
                // Avoid setting ret to empty string here
                // so we don't default to auto
-               if ( ret == null && style && (uncomputed = style[ name ]) ) {
-                       ret = uncomputed;
+               if ( ret == null && style && style[ name ] ) {
+                       ret = style[ name ];
                }
 
                // From the awesome hack by Dean Edwards
@@ -6764,7 +6856,9 @@ if ( document.documentElement.currentStyle ) {
 
                // If we're not dealing with a regular pixel number
                // but a number that has a weird ending, we need to convert it to pixels
-               if ( rnumnonpx.test( ret ) ) {
+               // but not position css attributes, as those are proportional to the parent element instead
+               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
 
                        // Remember the original values
                        left = style.left;
@@ -6784,84 +6878,169 @@ if ( document.documentElement.currentStyle ) {
                        }
                }
 
-               return ret === "" ? "auto" : ret;
-       };
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+       var matches = rnumsplit.exec( value );
+       return matches ?
+                       Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+                       value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
+       var i = extra === ( isBorderBox ? "border" : "content" ) ?
+               // If we already have the right measurement, avoid augmentation
+               4 :
+               // Otherwise initialize for horizontal or vertical properties
+               name === "width" ? 1 : 0,
+
+               val = 0;
+
+       for ( ; i < 4; i += 2 ) {
+               // both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       // we use jQuery.css instead of curCSS here
+                       // because of the reliableMarginRight CSS hook!
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true );
+               }
+
+               // From this point on we use curCSS for maximum performance (relevant in animations)
+               if ( isBorderBox ) {
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+                       }
+
+                       // at this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                       }
+               } else {
+                       // at this point, extra isn't content, so add padding
+                       val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+
+                       // at this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                       }
+               }
+       }
+
+       return val;
 }
 
-curCSS = getComputedStyle || currentStyle;
-
 function getWidthOrHeight( elem, name, extra ) {
 
-       // Start with offset property
+       // Start with offset property, which is equivalent to the border-box value
        var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-               i = name === "width" ? 1 : 0,
-               len = 4;
-
-       if ( val > 0 ) {
-               if ( extra !== "border" ) {
-                       for ( ; i < len; i += 2 ) {
-                               if ( !extra ) {
-                                       val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-                               }
-                               if ( extra === "margin" ) {
-                                       val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
-                               } else {
-                                       val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-                               }
-                       }
+               valueIsBorderBox = true,
+               isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
+
+       // some non-html elements return undefined for offsetWidth, so check for null/undefined
+       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+       if ( val <= 0 || val == null ) {
+               // Fall back to computed then uncomputed css if necessary
+               val = curCSS( elem, name );
+               if ( val < 0 || val == null ) {
+                       val = elem.style[ name ];
                }
 
-               return val + "px";
-       }
+               // Computed unit is not pixels. Stop here and return.
+               if ( rnumnonpx.test(val) ) {
+                       return val;
+               }
 
-       // Fall back to computed then uncomputed css if necessary
-       val = curCSS( elem, name );
-       if ( val < 0 || val == null ) {
-               val = elem.style[ name ];
+               // we need the check for style in case a browser which returns unreliable values
+               // for getComputedStyle silently falls back to the reliable elem.style
+               valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+               // Normalize "", auto, and prepare for extra
+               val = parseFloat( val ) || 0;
        }
 
-       // Computed unit is not pixels. Stop here and return.
-       if ( rnumnonpx.test(val) ) {
-               return val;
+       // use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox
+               )
+       ) + "px";
+}
+
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+       if ( elemdisplay[ nodeName ] ) {
+               return elemdisplay[ nodeName ];
        }
 
-       // Normalize "", auto, and prepare for extra
-       val = parseFloat( val ) || 0;
+       var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
+               display = elem.css("display");
+       elem.remove();
+
+       // If the simple way fails,
+       // get element's real default display by attaching it to a temp iframe
+       if ( display === "none" || display === "" ) {
+               // Use the already-created iframe if possible
+               iframe = document.body.appendChild(
+                       iframe || jQuery.extend( document.createElement("iframe"), {
+                               frameBorder: 0,
+                               width: 0,
+                               height: 0
+                       })
+               );
 
-       // Add padding, border, margin
-       if ( extra ) {
-               for ( ; i < len; i += 2 ) {
-                       val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-                       if ( extra !== "padding" ) {
-                               val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-                       }
-                       if ( extra === "margin" ) {
-                               val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
-                       }
+               // Create a cacheable copy of the iframe document on first call.
+               // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+               // document to it; WebKit & Firefox won't allow reusing the iframe document.
+               if ( !iframeDoc || !iframe.createElement ) {
+                       iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                       iframeDoc.write("<!doctype html><html><body>");
+                       iframeDoc.close();
                }
+
+               elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
+
+               display = curCSS( elem, "display" );
+               document.body.removeChild( iframe );
        }
 
-       return val + "px";
+       // Store the correct default display
+       elemdisplay[ nodeName ] = display;
+
+       return display;
 }
 
 jQuery.each([ "height", "width" ], function( i, name ) {
        jQuery.cssHooks[ name ] = {
                get: function( elem, computed, extra ) {
                        if ( computed ) {
-                               if ( elem.offsetWidth !== 0 ) {
-                                       return getWidthOrHeight( elem, name, extra );
-                               } else {
+                               // certain elements can have dimension info if we invisibly show them
+                               // however, it must have a current display style that would benefit from this
+                               if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
                                        return jQuery.swap( elem, cssShow, function() {
                                                return getWidthOrHeight( elem, name, extra );
                                        });
+                               } else {
+                                       return getWidthOrHeight( elem, name, extra );
                                }
                        }
                },
 
-               set: function( elem, value ) {
-                       return rnum.test( value ) ?
-                               value + "px" :
-                               value;
+               set: function( elem, value, extra ) {
+                       return setPositiveNumber( elem, value, extra ?
+                               augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
+                               ) : 0
+                       );
                }
        };
 });
@@ -6871,7 +7050,7 @@ if ( !jQuery.support.opacity ) {
                get: function( elem, computed ) {
                        // IE uses filters for opacity
                        return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
                                computed ? "1" : "";
                },
 
@@ -6886,7 +7065,8 @@ if ( !jQuery.support.opacity ) {
                        style.zoom = 1;
 
                        // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+                               style.removeAttribute ) {
 
                                // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
                                // if "filter:" is present at all, clearType is disabled, we want to avoid this
@@ -6907,9 +7087,9 @@ if ( !jQuery.support.opacity ) {
        };
 }
 
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
 jQuery(function() {
-       // This hook cannot be added until DOM ready because the support test
-       // for it is not run until after DOM ready
        if ( !jQuery.support.reliableMarginRight ) {
                jQuery.cssHooks.marginRight = {
                        get: function( elem, computed ) {
@@ -6917,22 +7097,35 @@ jQuery(function() {
                                // Work around by temporarily setting element display to inline-block
                                return jQuery.swap( elem, { "display": "inline-block" }, function() {
                                        if ( computed ) {
-                                               return curCSS( elem, "margin-right" );
-                                       } else {
-                                               return elem.style.marginRight;
+                                               return curCSS( elem, "marginRight" );
                                        }
                                });
                        }
                };
        }
+
+       // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+       // getComputedStyle returns percent when specified for top/left/bottom/right
+       // rather than make the css module depend on the offset module, we just check for it here
+       if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+               jQuery.each( [ "top", "left" ], function( i, prop ) {
+                       jQuery.cssHooks[ prop ] = {
+                               get: function( elem, computed ) {
+                                       if ( computed ) {
+                                               var ret = curCSS( elem, prop );
+                                               // if curCSS returns percentage, fallback to offset
+                                               return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
+                                       }
+                               }
+                       };
+               });
+       }
+
 });
 
 if ( jQuery.expr && jQuery.expr.filters ) {
        jQuery.expr.filters.hidden = function( elem ) {
-               var width = elem.offsetWidth,
-                       height = elem.offsetHeight;
-
-               return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+               return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
        };
 
        jQuery.expr.filters.visible = function( elem ) {
@@ -6946,7 +7139,6 @@ jQuery.each({
        padding: "",
        border: "Width"
 }, function( prefix, suffix ) {
-
        jQuery.cssHooks[ prefix + suffix ] = {
                expand: function( value ) {
                        var i,
@@ -6963,27 +7155,127 @@ jQuery.each({
                        return expanded;
                }
        };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+});
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       rselectTextarea = /^(?:select|textarea)/i;
+
+jQuery.fn.extend({
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map(function(){
+                       return this.elements ? jQuery.makeArray( this.elements ) : this;
+               })
+               .filter(function(){
+                       return this.name && !this.disabled &&
+                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                       rinput.test( this.type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val, i ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
 });
 
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, value ) {
+                       // If value is a function, invoke it and return its value
+                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+               };
 
+       // Set traditional to true for jQuery <= 1.3.2 behavior.
+       if ( traditional === undefined ) {
+               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+       }
 
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               });
+
+       } else {
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+                               // If array item is non-scalar (array or object), encode its
+                               // numeric index to resolve deserialization ambiguity issues.
+                               // Note that rack (as of 1.0.0) can't currently deserialize
+                               // nested arrays properly, and attempting to do so may cause
+                               // a server error. Possible fixes are to modify rack's
+                               // deserialization algorithm or to provide an option or flag
+                               // to force array serialization to be shallow.
+                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+var
+       // Document location
+       ajaxLocParts,
+       ajaxLocation,
 
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
        rhash = /#.*$/,
        rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
        // #7653, #8125, #8152: local protocol detection
        rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
        rnoContent = /^(?:GET|HEAD)$/,
        rprotocol = /^\/\//,
        rquery = /\?/,
        rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-       rselectTextarea = /^(?:select|textarea)/i,
-       rspacesAjax = /\s+/,
        rts = /([?&])_=[^&]*/,
-       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
 
        // Keep a copy of the old load method
        _load = jQuery.fn.load,
@@ -7006,12 +7298,6 @@ var r20 = /%20/g,
         */
        transports = {},
 
-       // Document location
-       ajaxLocation,
-
-       // Document location segments
-       ajaxLocParts,
-
        // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
        allTypes = ["*/"] + ["*"];
 
@@ -7041,14 +7327,12 @@ function addToPrefiltersOrTransports( structure ) {
                        dataTypeExpression = "*";
                }
 
-               if ( jQuery.isFunction( func ) ) {
-                       var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-                               i = 0,
-                               length = dataTypes.length,
-                               dataType,
-                               list,
-                               placeBefore;
+               var dataType, list, placeBefore,
+                       dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
+                       i = 0,
+                       length = dataTypes.length;
 
+               if ( jQuery.isFunction( func ) ) {
                        // For each dataType in the dataTypeExpression
                        for ( ; i < length; i++ ) {
                                dataType = dataTypes[ i ];
@@ -7075,11 +7359,11 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
 
        inspected[ dataType ] = true;
 
-       var list = structure[ dataType ],
+       var selection,
+               list = structure[ dataType ],
                i = 0,
                length = list ? list.length : 0,
-               executeOnly = ( structure === prefilters ),
-               selection;
+               executeOnly = ( structure === prefilters );
 
        for ( ; i < length && ( executeOnly || !selection ); i++ ) {
                selection = list[ i ]( options, originalOptions, jqXHR );
@@ -7122,109 +7406,75 @@ function ajaxExtend( target, src ) {
        }
 }
 
-jQuery.fn.extend({
-       load: function( url, params, callback ) {
-               if ( typeof url !== "string" && _load ) {
-                       return _load.apply( this, arguments );
+jQuery.fn.load = function( url, params, callback ) {
+       if ( typeof url !== "string" && _load ) {
+               return _load.apply( this, arguments );
+       }
 
-               // Don't do a request if no elements are being requested
-               } else if ( !this.length ) {
-                       return this;
-               }
+       // Don't do a request if no elements are being requested
+       if ( !this.length ) {
+               return this;
+       }
 
-               var off = url.indexOf( " " );
-               if ( off >= 0 ) {
-                       var selector = url.slice( off, url.length );
-                       url = url.slice( 0, off );
-               }
+       var selector, type, response,
+               self = this,
+               off = url.indexOf(" ");
+
+       if ( off >= 0 ) {
+               selector = url.slice( off, url.length );
+               url = url.slice( 0, off );
+       }
 
-               // Default to a GET request
-               var type = "GET";
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
 
-               // If the second parameter was provided
-               if ( params ) {
-                       // If it's a function
-                       if ( jQuery.isFunction( params ) ) {
-                               // We assume that it's the callback
-                               callback = params;
-                               params = undefined;
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
 
-                       // Otherwise, build a param string
-                       } else if ( typeof params === "object" ) {
-                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-                               type = "POST";
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // Request the remote document
+       jQuery.ajax({
+               url: url,
+
+               // if "type" variable is undefined, then "GET" method will be used
+               type: type,
+               dataType: "html",
+               data: params,
+               complete: function( jqXHR, status ) {
+                       if ( callback ) {
+                               self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
                        }
                }
+       }).done(function( responseText ) {
 
-               var self = this;
+               // Save response for use in complete callback
+               response = arguments;
 
-               // Request the remote document
-               jQuery.ajax({
-                       url: url,
-                       type: type,
-                       dataType: "html",
-                       data: params,
-                       // Complete callback (responseText is used internally)
-                       complete: function( jqXHR, status, responseText ) {
-                               // Store the response as specified by the jqXHR object
-                               responseText = jqXHR.responseText;
-                               // If successful, inject the HTML into all the matched elements
-                               if ( jqXHR.isResolved() ) {
-                                       // #4825: Get the actual response in case
-                                       // a dataFilter is present in ajaxSettings
-                                       jqXHR.done(function( r ) {
-                                               responseText = r;
-                                       });
-                                       // See if a selector was specified
-                                       self.html( selector ?
-                                               // Create a dummy div to hold the results
-                                               jQuery("<div>")
-                                                       // inject the contents of the document in, removing the scripts
-                                                       // to avoid any 'Permission Denied' errors in IE
-                                                       .append(responseText.replace(rscript, ""))
-
-                                                       // Locate the specified elements
-                                                       .find(selector) :
-
-                                               // If not, just inject the full result
-                                               responseText );
-                               }
+               // See if a selector was specified
+               self.html( selector ?
 
-                               if ( callback ) {
-                                       self.each( callback, [ responseText, status, jqXHR ] );
-                               }
-                       }
-               });
+                       // Create a dummy div to hold the results
+                       jQuery("<div>")
 
-               return this;
-       },
+                               // inject the contents of the document in, removing the scripts
+                               // to avoid any 'Permission Denied' errors in IE
+                               .append( responseText.replace( rscript, "" ) )
 
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
+                               // Locate the specified elements
+                               .find( selector ) :
 
-       serializeArray: function() {
-               return this.map(function(){
-                       return this.elements ? jQuery.makeArray( this.elements ) : this;
-               })
-               .filter(function(){
-                       return this.name && !this.disabled &&
-                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
-                                       rinput.test( this.type ) );
-               })
-               .map(function( i, elem ){
-                       var val = jQuery( this ).val();
+                       // If not, just inject the full result
+                       responseText );
 
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val, i ){
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
+       });
+
+       return this;
+};
 
 // Attach a bunch of functions for handling common AJAX events
 jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
@@ -7293,6 +7543,7 @@ jQuery.extend({
                username: null,
                password: null,
                cache: null,
+               throws: false,
                traditional: false,
                headers: {},
                */
@@ -7359,7 +7610,22 @@ jQuery.extend({
                // Force options to be an object
                options = options || {};
 
-               var // Create the final options object
+               var // ifModified key
+                       ifModifiedKey,
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+                       // transport
+                       transport,
+                       // timeout handle
+                       timeoutTimer,
+                       // Cross-domain detection vars
+                       parts,
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+                       // Loop variable
+                       i,
+                       // Create the final options object
                        s = jQuery.ajaxSetup( {}, options ),
                        // Callbacks context
                        callbackContext = s.context || s,
@@ -7374,26 +7640,13 @@ jQuery.extend({
                        completeDeferred = jQuery.Callbacks( "once memory" ),
                        // Status-dependent callbacks
                        statusCode = s.statusCode || {},
-                       // ifModified key
-                       ifModifiedKey,
                        // Headers (they are sent all at once)
                        requestHeaders = {},
                        requestHeadersNames = {},
-                       // Response headers
-                       responseHeadersString,
-                       responseHeaders,
-                       // transport
-                       transport,
-                       // timeout handle
-                       timeoutTimer,
-                       // Cross-domain detection vars
-                       parts,
                        // The jqXHR state
                        state = 0,
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-                       // Loop variable
-                       i,
+                       // Default abort message
+                       strAbort = "canceled",
                        // Fake xhr
                        jqXHR = {
 
@@ -7439,7 +7692,7 @@ jQuery.extend({
 
                                // Cancel the request
                                abort: function( statusText ) {
-                                       statusText = statusText || "abort";
+                                       statusText = statusText || strAbort;
                                        if ( transport ) {
                                                transport.abort( statusText );
                                        }
@@ -7452,6 +7705,8 @@ jQuery.extend({
                // It is defined here because jslint complains if it is declared
                // at the end of the function (which would be more logical and readable)
                function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
 
                        // Called once
                        if ( state === 2 ) {
@@ -7476,13 +7731,10 @@ jQuery.extend({
                        // Set readyState
                        jqXHR.readyState = status > 0 ? 4 : 0;
 
-                       var isSuccess,
-                               success,
-                               error,
-                               statusText = nativeStatusText,
-                               response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-                               lastModified,
-                               etag;
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
 
                        // If successful, handle type chaining
                        if ( status >= 200 && status < 300 || status === 304 ) {
@@ -7490,11 +7742,13 @@ jQuery.extend({
                                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
                                if ( s.ifModified ) {
 
-                                       if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-                                               jQuery.lastModified[ ifModifiedKey ] = lastModified;
+                                       modified = jqXHR.getResponseHeader("Last-Modified");
+                                       if ( modified ) {
+                                               jQuery.lastModified[ ifModifiedKey ] = modified;
                                        }
-                                       if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-                                               jQuery.etag[ ifModifiedKey ] = etag;
+                                       modified = jqXHR.getResponseHeader("Etag");
+                                       if ( modified ) {
+                                               jQuery.etag[ ifModifiedKey ] = modified;
                                        }
                                }
 
@@ -7507,15 +7761,11 @@ jQuery.extend({
                                // If we have data
                                } else {
 
-                                       try {
-                                               success = ajaxConvert( s, response );
-                                               statusText = "success";
-                                               isSuccess = true;
-                                       } catch(e) {
-                                               // We have a parsererror
-                                               statusText = "parsererror";
-                                               error = e;
-                                       }
+                                       isSuccess = ajaxConvert( s, response );
+                                       statusText = isSuccess.state;
+                                       success = isSuccess.data;
+                                       error = isSuccess.error;
+                                       isSuccess = !error;
                                }
                        } else {
                                // We extract error from statusText
@@ -7531,7 +7781,7 @@ jQuery.extend({
 
                        // Set data for the fake xhr object
                        jqXHR.status = status;
-                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
 
                        // Success/Error
                        if ( isSuccess ) {
@@ -7577,7 +7827,7 @@ jQuery.extend({
                                        }
                                } else {
                                        tmp = map[ jqXHR.status ];
-                                       jqXHR.then( tmp, tmp );
+                                       jqXHR.always( tmp );
                                }
                        }
                        return this;
@@ -7589,16 +7839,13 @@ jQuery.extend({
                s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
 
                // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
 
-               // Determine if a cross-domain request is in order
+               // 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() );
-                       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 ) ) )
-                       );
+                       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 ) );
                }
 
                // Convert data if not already a string
@@ -7611,7 +7858,7 @@ jQuery.extend({
 
                // If request was aborted inside a prefilter, stop there
                if ( state === 2 ) {
-                       return false;
+                       return jqXHR;
                }
 
                // We can fire global events as of now if asked to
@@ -7684,12 +7931,14 @@ jQuery.extend({
 
                // Allow custom headers/mimetypes and early abort
                if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                               // Abort if not done already
-                               jqXHR.abort();
-                               return false;
+                               // Abort if not done already and return
+                               return jqXHR.abort();
 
                }
 
+               // aborting is no longer a cancellation
+               strAbort = "abort";
+
                // Install callbacks on deferreds
                for ( i in { success: 1, error: 1, complete: 1 } ) {
                        jqXHR[ i ]( s[ i ] );
@@ -7724,83 +7973,12 @@ jQuery.extend({
                                // Simply rethrow otherwise
                                } else {
                                        throw e;
-                               }
-                       }
-               }
-
-               return jqXHR;
-       },
-
-       // Serialize an array of form elements or a set of
-       // key/values into a query string
-       param: function( a, traditional ) {
-               var s = [],
-                       add = function( key, value ) {
-                               // If value is a function, invoke it and return its value
-                               value = jQuery.isFunction( value ) ? value() : value;
-                               s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-                       };
-
-               // Set traditional to true for jQuery <= 1.3.2 behavior.
-               if ( traditional === undefined ) {
-                       traditional = jQuery.ajaxSettings.traditional;
-               }
-
-               // If an array was passed in, assume that it is an array of form elements.
-               if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-                       // Serialize the form elements
-                       jQuery.each( a, function() {
-                               add( this.name, this.value );
-                       });
-
-               } else {
-                       // If traditional, encode the "old" way (the way 1.3.2 or older
-                       // did it), otherwise encode params recursively.
-                       for ( var prefix in a ) {
-                               buildParams( prefix, a[ prefix ], traditional, add );
-                       }
-               }
-
-               // Return the resulting serialization
-               return s.join( "&" ).replace( r20, "+" );
-       }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-                               // If array item is non-scalar (array or object), encode its
-                               // numeric index to resolve deserialization ambiguity issues.
-                               // Note that rack (as of 1.0.0) can't currently deserialize
-                               // nested arrays properly, and attempting to do so may cause
-                               // a server error. Possible fixes are to modify rack's
-                               // deserialization algorithm or to provide an option or flag
-                               // to force array serialization to be shallow.
-                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-                       }
-               });
-
-       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-               // Serialize object item.
-               for ( var name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+                               }
+                       }
                }
 
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
+               return jqXHR;
+       },
 
        // Counter for holding the number of active queries
        active: 0,
@@ -7818,13 +7996,10 @@ jQuery.extend({
  */
 function ajaxHandleResponses( s, jqXHR, responses ) {
 
-       var contents = s.contents,
+       var ct, type, finalDataType, firstDataType,
+               contents = s.contents,
                dataTypes = s.dataTypes,
-               responseFields = s.responseFields,
-               ct,
-               type,
-               finalDataType,
-               firstDataType;
+               responseFields = s.responseFields;
 
        // Fill responseXXX fields
        for ( type in responseFields ) {
@@ -7883,154 +8058,137 @@ function ajaxHandleResponses( s, jqXHR, responses ) {
 // Chain conversions given the request and the original response
 function ajaxConvert( s, response ) {
 
+       var conv, conv2, current, tmp,
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice(),
+               prev = dataTypes[ 0 ],
+               converters = {},
+               i = 0;
+
        // Apply the dataFilter if provided
        if ( s.dataFilter ) {
                response = s.dataFilter( response, s.dataType );
        }
 
-       var dataTypes = s.dataTypes,
-               converters = {},
-               i,
-               key,
-               length = dataTypes.length,
-               tmp,
-               // Current and previous dataTypes
-               current = dataTypes[ 0 ],
-               prev,
-               // Conversion expression
-               conversion,
-               // Conversion function
-               conv,
-               // Conversion functions (transitive conversion)
-               conv1,
-               conv2;
-
-       // For each dataType in the chain
-       for ( i = 1; i < length; i++ ) {
-
-               // Create converters map
-               // with lowercased keys
-               if ( i === 1 ) {
-                       for ( key in s.converters ) {
-                               if ( typeof key === "string" ) {
-                                       converters[ key.toLowerCase() ] = s.converters[ key ];
-                               }
-                       }
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
                }
+       }
+
+       // Convert to each sequential dataType, tolerating list modification
+       for ( ; (current = dataTypes[++i]); ) {
+
+               // There's only work to do if current dataType is non-auto
+               if ( current !== "*" ) {
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split(" ");
+                                               if ( tmp[ 1 ] === current ) {
 
-               // Get the dataTypes
-               prev = current;
-               current = dataTypes[ i ];
-
-               // If current is auto dataType, update it to prev
-               if ( current === "*" ) {
-                       current = prev;
-               // If no auto and dataTypes are actually different
-               } else if ( prev !== "*" && prev !== current ) {
-
-                       // Get the converter
-                       conversion = prev + " " + current;
-                       conv = converters[ conversion ] || converters[ "* " + current ];
-
-                       // If there is no direct converter, search transitively
-                       if ( !conv ) {
-                               conv2 = undefined;
-                               for ( conv1 in converters ) {
-                                       tmp = conv1.split( " " );
-                                       if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-                                               conv2 = converters[ tmp[1] + " " + current ];
-                                               if ( conv2 ) {
-                                                       conv1 = converters[ conv1 ];
-                                                       if ( conv1 === true ) {
-                                                               conv = conv2;
-                                                       } else if ( conv2 === true ) {
-                                                               conv = conv1;
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.splice( i--, 0, current );
+                                                               }
+
+                                                               break;
                                                        }
-                                                       break;
                                                }
                                        }
                                }
-                       }
-                       // If we found no converter, dispatch an error
-                       if ( !( conv || conv2 ) ) {
-                               jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-                       }
-                       // If found converter is not an equivalence
-                       if ( conv !== true ) {
-                               // Convert with 1 or 2 converters accordingly
-                               response = conv ? conv( response ) : conv2( conv1(response) );
-                       }
-               }
-       }
-       return response;
-}
 
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
 
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s["throws"] ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+                                               }
+                                       }
+                               }
+                       }
 
+                       // Update prev for next iteration
+                       prev = current;
+               }
+       }
 
-var jsc = jQuery.now(),
-       jsre = /(\=)\?(&|$)|\?\?/i;
+       return { state: "success", data: response };
+}
+var oldCallbacks = [],
+       rquestion = /\?/,
+       rjsonp = /(=)\?(?=&|$)|\?\?/,
+       nonce = jQuery.now();
 
 // Default jsonp settings
 jQuery.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
-               return jQuery.expando + "_" + ( jsc++ );
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
        }
 });
 
 // Detect, normalize options and install callbacks for jsonp requests
 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
 
-       var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
-
-       if ( s.dataTypes[ 0 ] === "jsonp" ||
-               s.jsonp !== false && ( jsre.test( s.url ) ||
-                               inspectData && jsre.test( s.data ) ) ) {
-
-               var responseContainer,
-                       jsonpCallback = s.jsonpCallback =
-                               jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-                       previous = window[ jsonpCallback ],
-                       url = s.url,
-                       data = s.data,
-                       replace = "$1" + jsonpCallback + "$2";
-
-               if ( s.jsonp !== false ) {
-                       url = url.replace( jsre, replace );
-                       if ( s.url === url ) {
-                               if ( inspectData ) {
-                                       data = data.replace( jsre, replace );
-                               }
-                               if ( s.data === data ) {
-                                       // Add callback manually
-                                       url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-                               }
-                       }
+       var callbackName, overwritten, responseContainer,
+               data = s.data,
+               url = s.url,
+               hasCallback = s.jsonp !== false,
+               replaceInUrl = hasCallback && rjsonp.test( url ),
+               replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
+                       !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
+                       rjsonp.test( data );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+               overwritten = window[ callbackName ];
+
+               // Insert callback into url or form data
+               if ( replaceInUrl ) {
+                       s.url = url.replace( rjsonp, "$1" + callbackName );
+               } else if ( replaceInData ) {
+                       s.data = data.replace( rjsonp, "$1" + callbackName );
+               } else if ( hasCallback ) {
+                       s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
                }
 
-               s.url = url;
-               s.data = data;
-
-               // Install callback
-               window[ jsonpCallback ] = function( response ) {
-                       responseContainer = [ response ];
-               };
-
-               // Clean-up function
-               jqXHR.always(function() {
-                       // Set callback back to previous value
-                       window[ jsonpCallback ] = previous;
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( previous ) ) {
-                               window[ jsonpCallback ]( responseContainer[ 0 ] );
-                       }
-               });
-
                // Use data converter to retrieve json after script execution
                s.converters["script json"] = function() {
                        if ( !responseContainer ) {
-                               jQuery.error( jsonpCallback + " was not called" );
+                               jQuery.error( callbackName + " was not called" );
                        }
                        return responseContainer[ 0 ];
                };
@@ -8038,14 +8196,37 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
                // force json dataType
                s.dataTypes[ 0 ] = "json";
 
-               // Delegate to script
-               return "script";
-       }
-});
+               // Install callback
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always(function() {
+                       // Restore preexisting value
+                       window[ callbackName ] = overwritten;
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+                               // make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
 
+                               // save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
 
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
 
+                       responseContainer = overwritten = undefined;
+               });
 
+               // Delegate to script
+               return "script";
+       }
+});
 // Install script dataType
 jQuery.ajaxSetup({
        accepts: {
@@ -8131,19 +8312,15 @@ jQuery.ajaxTransport( "script", function(s) {
                };
        }
 });
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+var xhrCallbacks,
+       // #5280: Internet Explorer will keep connections alive if we don't abort on unload
        xhrOnUnloadAbort = window.ActiveXObject ? function() {
                // Abort all pending requests
                for ( var key in xhrCallbacks ) {
                        xhrCallbacks[ key ]( 0, 1 );
                }
        } : false,
-       xhrId = 0,
-       xhrCallbacks;
+       xhrId = 0;
 
 // Functions to create xhrs
 function createStandardXHR() {
@@ -8194,9 +8371,8 @@ if ( jQuery.support.ajax ) {
                                send: function( headers, complete ) {
 
                                        // Get a new xhr
-                                       var xhr = s.xhr(),
-                                               handle,
-                                               i;
+                                       var handle, i,
+                                               xhr = s.xhr();
 
                                        // Open the socket
                                        // Passing null username, generates a login popup on Opera (#2865)
@@ -8249,7 +8425,7 @@ if ( jQuery.support.ajax ) {
                                                        xml;
 
                                                // Firefox throws exceptions when accessing properties
-                                               // of an xhr when a network error occured
+                                               // of an xhr when a network error occurred
                                                // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
                                                try {
 
@@ -8325,11 +8501,13 @@ if ( jQuery.support.ajax ) {
                                                }
                                        };
 
-                                       // if we're in sync mode or it's in cache
-                                       // and has been retrieved directly (IE6 & IE7)
-                                       // we need to manually fire the callback
-                                       if ( !s.async || xhr.readyState === 4 ) {
+                                       if ( !s.async ) {
+                                               // if we're in sync mode we fire the callback
                                                callback();
+                                       } else if ( xhr.readyState === 4 ) {
+                                               // (IE6 & IE7) if it's in cache and has been
+                                               // retrieved directly we need to fire the callback
+                                               setTimeout( callback, 0 );
                                        } else {
                                                handle = ++xhrId;
                                                if ( xhrOnUnloadAbort ) {
@@ -8355,791 +8533,666 @@ if ( jQuery.support.ajax ) {
                }
        });
 }
-
-
-
-
-var elemdisplay = {},
-       iframe, iframeDoc,
+var fxNow, timerId,
        rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-       timerId,
-       fxAttrs = [
-               // height animations
-               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-               // width animations
-               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-               // opacity animations
-               [ "opacity" ]
-       ],
-       fxNow;
-
-jQuery.fn.extend({
-       show: function( speed, easing, callback ) {
-               var elem, display;
-
-               if ( speed || speed === 0 ) {
-                       return this.animate( genFx("show", 3), speed, easing, callback );
-
-               } else {
-                       for ( var i = 0, j = this.length; i < j; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.style ) {
-                                       display = elem.style.display;
-
-                                       // Reset the inline display of this element to learn if it is
-                                       // being hidden by cascaded rules or not
-                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-                                               display = elem.style.display = "";
-                                       }
-
-                                       // Set elements which have been overridden with display: none
-                                       // in a stylesheet to whatever the default browser style is
-                                       // for such an element
-                                       if ( (display === "" && jQuery.css(elem, "display") === "none") ||
-                                               !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-                                               jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-                                       }
-                               }
-                       }
-
-                       // Set the display of most of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( i = 0; i < j; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.style ) {
-                                       display = elem.style.display;
-
-                                       if ( display === "" || display === "none" ) {
-                                               elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-                                       }
-                               }
-                       }
-
-                       return this;
-               }
-       },
-
-       hide: function( speed, easing, callback ) {
-               if ( speed || speed === 0 ) {
-                       return this.animate( genFx("hide", 3), speed, easing, callback);
-
-               } else {
-                       var elem, display,
-                               i = 0,
-                               j = this.length;
-
-                       for ( ; i < j; i++ ) {
-                               elem = this[i];
-                               if ( elem.style ) {
-                                       display = jQuery.css( elem, "display" );
-
-                                       if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-                                               jQuery._data( elem, "olddisplay", display );
-                                       }
-                               }
-                       }
-
-                       // Set the display of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( i = 0; i < j; i++ ) {
-                               if ( this[i].style ) {
-                                       this[i].style.display = "none";
-                               }
-                       }
-
-                       return this;
-               }
-       },
-
-       // Save the old toggle function
-       _toggle: jQuery.fn.toggle,
-
-       toggle: function( fn, fn2, callback ) {
-               var bool = typeof fn === "boolean";
-
-               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-                       this._toggle.apply( this, arguments );
-
-               } else if ( fn == null || bool ) {
-                       this.each(function() {
-                               var state = bool ? fn : jQuery(this).is(":hidden");
-                               jQuery(this)[ state ? "show" : "hide" ]();
-                       });
-
-               } else {
-                       this.animate(genFx("toggle", 3), fn, fn2, callback);
-               }
-
-               return this;
-       },
-
-       fadeTo: function( speed, to, easing, callback ) {
-               return this.filter(":hidden").css("opacity", 0).show().end()
-                                       .animate({opacity: to}, speed, easing, callback);
-       },
-
-       animate: function( prop, speed, easing, callback ) {
-               var optall = jQuery.speed( speed, easing, callback );
-
-               if ( jQuery.isEmptyObject( prop ) ) {
-                       return this.each( optall.complete, [ false ] );
-               }
-
-               // Do not change referenced properties as per-property easing will be lost
-               prop = jQuery.extend( {}, prop );
-
-               function doAnimation() {
-                       // XXX 'this' does not always have a nodeName when running the
-                       // test suite
-
-                       if ( optall.queue === false ) {
-                               jQuery._mark( this );
-                       }
-
-                       var opt = jQuery.extend( {}, optall ),
-                               isElement = this.nodeType === 1,
-                               hidden = isElement && jQuery(this).is(":hidden"),
-                               name, val, p, e, hooks, replace,
-                               parts, start, end, unit,
-                               method;
-
-                       // will store per property easing and be used to determine when an animation is complete
-                       opt.animatedProperties = {};
-
-                       // first pass over propertys to expand / normalize
-                       for ( p in prop ) {
-                               name = jQuery.camelCase( p );
-                               if ( p !== name ) {
-                                       prop[ name ] = prop[ p ];
-                                       delete prop[ p ];
-                               }
-
-                               if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
-                                       replace = hooks.expand( prop[ name ] );
-                                       delete prop[ name ];
-
-                                       // not quite $.extend, this wont overwrite keys already present.
-                                       // also - reusing 'p' from above because we have the correct "name"
-                                       for ( p in replace ) {
-                                               if ( ! ( p in prop ) ) {
-                                                       prop[ p ] = replace[ p ];
-                                               }
-                                       }
-                               }
-                       }
-
-                       for ( name in prop ) {
-                               val = prop[ name ];
-                               // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-                               if ( jQuery.isArray( val ) ) {
-                                       opt.animatedProperties[ name ] = val[ 1 ];
-                                       val = prop[ name ] = val[ 0 ];
-                               } else {
-                                       opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-                               }
-
-                               if ( val === "hide" && hidden || val === "show" && !hidden ) {
-                                       return opt.complete.call( this );
-                               }
-
-                               if ( isElement && ( name === "height" || name === "width" ) ) {
-                                       // Make sure that nothing sneaks out
-                                       // Record all 3 overflow attributes because IE does not
-                                       // change the overflow attribute when overflowX and
-                                       // overflowY are set to the same value
-                                       opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-                                       // Set display property to inline-block for height/width
-                                       // animations on inline elements that are having width/height animated
-                                       if ( jQuery.css( this, "display" ) === "inline" &&
-                                                       jQuery.css( this, "float" ) === "none" ) {
-
-                                               // inline-level elements accept inline-block;
-                                               // block-level elements need to be inline with layout
-                                               if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-                                                       this.style.display = "inline-block";
-
-                                               } else {
-                                                       this.style.zoom = 1;
-                                               }
-                                       }
-                               }
-                       }
-
-                       if ( opt.overflow != null ) {
-                               this.style.overflow = "hidden";
-                       }
-
-                       for ( p in prop ) {
-                               e = new jQuery.fx( this, opt, p );
-                               val = prop[ p ];
-
-                               if ( rfxtypes.test( val ) ) {
-
-                                       // Tracks whether to show or hide based on private
-                                       // data attached to the element
-                                       method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-                                       if ( method ) {
-                                               jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-                                               e[ method ]();
-                                       } else {
-                                               e[ val ]();
-                                       }
-
-                               } else {
-                                       parts = rfxnum.exec( val );
-                                       start = e.cur();
-
-                                       if ( parts ) {
-                                               end = parseFloat( parts[2] );
-                                               unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-                                               // We need to compute starting value
-                                               if ( unit !== "px" ) {
-                                                       jQuery.style( this, p, (end || 1) + unit);
-                                                       start = ( (end || 1) / e.cur() ) * start;
-                                                       jQuery.style( this, p, start + unit);
-                                               }
-
-                                               // If a +=/-= token was provided, we're doing a relative animation
-                                               if ( parts[1] ) {
-                                                       end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-                                               }
-
-                                               e.custom( start, end, unit );
-
-                                       } else {
-                                               e.custom( start, val, "" );
-                                       }
-                               }
-                       }
-
-                       // For JS strict compliance
-                       return true;
-               }
-
-               return optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-
-       stop: function( type, clearQueue, gotoEnd ) {
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
-
-               return this.each(function() {
-                       var index,
-                               hadTimers = false,
-                               timers = jQuery.timers,
-                               data = jQuery._data( this );
-
-                       // clear marker counters if we know they won't be
-                       if ( !gotoEnd ) {
-                               jQuery._unmark( true, this );
-                       }
-
-                       function stopQueue( elem, data, index ) {
-                               var hooks = data[ index ];
-                               jQuery.removeData( elem, index, true );
-                               hooks.stop( gotoEnd );
-                       }
-
-                       if ( type == null ) {
-                               for ( index in data ) {
-                                       if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-                                               stopQueue( this, data, index );
-                                       }
-                               }
-                       } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-                               stopQueue( this, data, index );
-                       }
-
-                       for ( index = timers.length; index--; ) {
-                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-                                       if ( gotoEnd ) {
-
-                                               // force the next step to be the last
-                                               timers[ index ]( true );
-                                       } else {
-                                               timers[ index ].saveState();
-                                       }
-                                       hadTimers = true;
-                                       timers.splice( index, 1 );
-                               }
-                       }
-
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
-                       if ( !( gotoEnd && hadTimers ) ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       setTimeout( clearFxNow, 0 );
-       return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-       fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-       var obj = {};
-
-       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-               obj[ this ] = type;
-       });
-
-       return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx( "show", 1 ),
-       slideUp: genFx( "hide", 1 ),
-       slideToggle: genFx( "toggle", 1 ),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
+       rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+       rrun = /queueHooks$/,
+       animationPrefilters = [ defaultPrefilter ],
+       tweeners = {
+               "*": [function( prop, value ) {
+                       var end, unit,
+                               tween = this.createTween( prop, value ),
+                               parts = rfxnum.exec( value ),
+                               target = tween.cur(),
+                               start = +target || 0,
+                               scale = 1,
+                               maxIterations = 20;
+
+                       if ( parts ) {
+                               end = +parts[2];
+                               unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+                               // We need to compute starting value
+                               if ( unit !== "px" && start ) {
+                                       // Iteratively approximate from a nonzero starting point
+                                       // Prefer the current property, because this process will be trivial if it uses the same units
+                                       // Fallback to end or a simple constant
+                                       start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+                                       do {
+                                               // If previous iteration zeroed out, double until we get *something*
+                                               // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+                                               scale = scale || ".5";
+
+                                               // Adjust and apply
+                                               start = start / scale;
+                                               jQuery.style( tween.elem, prop, start + unit );
+
+                                       // Update scale, tolerating zero or NaN from tween.cur()
+                                       // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+                                       } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+                               }
+
+                               tween.unit = unit;
+                               tween.start = start;
+                               // If a +=/-= token was provided, we're doing a relative animation
+                               tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+                       }
+                       return tween;
+               }]
        };
-});
 
-jQuery.extend({
-       speed: function( speed, easing, fn ) {
-               var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-                       complete: fn || !fn && easing ||
-                               jQuery.isFunction( speed ) && speed,
-                       duration: speed,
-                       easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-               };
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout(function() {
+               fxNow = undefined;
+       }, 0 );
+       return ( fxNow = jQuery.now() );
+}
 
-               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-                       opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+function createTweens( animation, props ) {
+       jQuery.each( props, function( prop, value ) {
+               var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+                       index = 0,
+                       length = collection.length;
+               for ( ; index < length; index++ ) {
+                       if ( collection[ index ].call( animation, prop, value ) ) {
 
-               // normalize opt.queue - true/undefined/null -> "fx"
-               if ( opt.queue == null || opt.queue === true ) {
-                       opt.queue = "fx";
+                               // we're done with this property
+                               return;
+                       }
                }
+       });
+}
 
-               // Queueing
-               opt.old = opt.complete;
-
-               opt.complete = function( noUnmark ) {
-                       if ( jQuery.isFunction( opt.old ) ) {
-                               opt.old.call( this );
+function Animation( elem, properties, options ) {
+       var result,
+               index = 0,
+               tweenerIndex = 0,
+               length = animationPrefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+                       // don't match elem in the :animated selector
+                       delete tick.elem;
+               }),
+               tick = function() {
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+                               percent = 1 - ( remaining / animation.duration || 0 ),
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length ; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       } else {
+                               deferred.resolveWith( elem, [ animation ] );
+                               return false;
                        }
+               },
+               animation = deferred.promise({
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end, easing ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+                                       // if we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+
+                               for ( ; index < length ; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
 
-                       if ( opt.queue ) {
-                               jQuery.dequeue( this, opt.queue );
-                       } else if ( noUnmark !== false ) {
-                               jQuery._unmark( this );
+                               // resolve when we played the last frame
+                               // otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
                        }
-               };
+               }),
+               props = animation.props;
 
-               return opt;
-       },
+       propFilter( props, animation.opts.specialEasing );
 
-       easing: {
-               linear: function( p ) {
-                       return p;
-               },
-               swing: function( p ) {
-                       return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
+       for ( ; index < length ; index++ ) {
+               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       return result;
                }
-       },
-
-       timers: [],
+       }
 
-       fx: function( elem, options, prop ) {
-               this.options = options;
-               this.elem = elem;
-               this.prop = prop;
+       createTweens( animation, props );
 
-               options.orig = options.orig || {};
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
        }
 
-});
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       anim: animation,
+                       queue: animation.opts.queue,
+                       elem: elem
+               })
+       );
 
-jQuery.fx.prototype = {
-       // Simple function for setting a style value
-       update: function() {
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
+       // attach callbacks from options
+       return animation.progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+}
 
-               ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-       },
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
 
-       // Get the current size
-       cur: function() {
-               if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-                       return this.elem[ this.prop ];
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( jQuery.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
                }
 
-               var parsed,
-                       r = jQuery.css( this.elem, this.prop );
-               // Empty strings, null, undefined and "auto" are converted to 0,
-               // complex values such as "rotate(1rad)" are returned as is,
-               // simple values such as "10px" are parsed to Float.
-               return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-       },
-
-       // Start an animation from one number to another
-       custom: function( from, to, unit ) {
-               var self = this,
-                       fx = jQuery.fx;
-
-               this.startTime = fxNow || createFxNow();
-               this.end = to;
-               this.now = this.start = from;
-               this.pos = this.state = 0;
-               this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-               function t( gotoEnd ) {
-                       return self.step( gotoEnd );
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
                }
 
-               t.queue = this.options.queue;
-               t.elem = this.elem;
-               t.saveState = function() {
-                       if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-                               if ( self.options.hide ) {
-                                       jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-                               } else if ( self.options.show ) {
-                                       jQuery._data( self.elem, "fxshow" + self.prop, self.end );
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // not quite $.extend, this wont overwrite keys already present.
+                       // also - reusing 'index' from above because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
                                }
                        }
-               };
-
-               if ( t() && jQuery.timers.push(t) && !timerId ) {
-                       timerId = setInterval( fx.tick, fx.interval );
+               } else {
+                       specialEasing[ name ] = easing;
                }
-       },
-
-       // Simple 'show' function
-       show: function() {
-               var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+       }
+}
 
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-               this.options.show = true;
+jQuery.Animation = jQuery.extend( Animation, {
 
-               // Begin the animation
-               // Make sure that we start at a small width/height to avoid any flash of content
-               if ( dataShow !== undefined ) {
-                       // This show is picking up where a previous hide or show left off
-                       this.custom( this.cur(), dataShow );
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
                } else {
-                       this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+                       props = props.split(" ");
                }
 
-               // Start by showing the element
-               jQuery( this.elem ).show();
-       },
-
-       // Simple 'hide' function
-       hide: function() {
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-               this.options.hide = true;
+               var prop,
+                       index = 0,
+                       length = props.length;
 
-               // Begin the animation
-               this.custom( this.cur(), 0 );
+               for ( ; index < length ; index++ ) {
+                       prop = props[ index ];
+                       tweeners[ prop ] = tweeners[ prop ] || [];
+                       tweeners[ prop ].unshift( callback );
+               }
        },
 
-       // Each step of an animation
-       step: function( gotoEnd ) {
-               var p, n, complete,
-                       t = fxNow || createFxNow(),
-                       done = true,
-                       elem = this.elem,
-                       options = this.options;
-
-               if ( gotoEnd || t >= options.duration + this.startTime ) {
-                       this.now = this.end;
-                       this.pos = this.state = 1;
-                       this.update();
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       animationPrefilters.unshift( callback );
+               } else {
+                       animationPrefilters.push( callback );
+               }
+       }
+});
 
-                       options.animatedProperties[ this.prop ] = true;
+function defaultPrefilter( elem, props, opts ) {
+       var index, prop, value, length, dataShow, tween, hooks, oldfire,
+               anim = this,
+               style = elem.style,
+               orig = {},
+               handled = [],
+               hidden = elem.nodeType && isHidden( elem );
+
+       // handle queue: false promises
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
 
-                       for ( p in options.animatedProperties ) {
-                               if ( options.animatedProperties[ p ] !== true ) {
-                                       done = false;
+               anim.always(function() {
+                       // doing this makes sure that the complete handler will be called
+                       // before this completes
+                       anim.always(function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
                                }
-                       }
+                       });
+               });
+       }
 
-                       if ( done ) {
-                               // Reset the overflow
-                               if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+       // height/width overflow pass
+       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+               // Make sure that nothing sneaks out
+               // Record all 3 overflow attributes because IE does not
+               // change the overflow attribute when overflowX and
+               // overflowY are set to the same value
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
 
-                                       jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-                                               elem.style[ "overflow" + value ] = options.overflow[ index ];
-                                       });
-                               }
+               // Set display property to inline-block for height/width
+               // animations on inline elements that are having width/height animated
+               if ( jQuery.css( elem, "display" ) === "inline" &&
+                               jQuery.css( elem, "float" ) === "none" ) {
 
-                               // Hide the element if the "hide" operation was done
-                               if ( options.hide ) {
-                                       jQuery( elem ).hide();
-                               }
+                       // inline-level elements accept inline-block;
+                       // block-level elements need to be inline with layout
+                       if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+                               style.display = "inline-block";
 
-                               // Reset the properties, if the item has been hidden or shown
-                               if ( options.hide || options.show ) {
-                                       for ( p in options.animatedProperties ) {
-                                               jQuery.style( elem, p, options.orig[ p ] );
-                                               jQuery.removeData( elem, "fxshow" + p, true );
-                                               // Toggle data is no longer needed
-                                               jQuery.removeData( elem, "toggle" + p, true );
-                                       }
-                               }
+                       } else {
+                               style.zoom = 1;
+                       }
+               }
+       }
 
-                               // Execute the complete function
-                               // in the event that the complete function throws an exception
-                               // we must ensure it won't be called twice. #5684
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               if ( !jQuery.support.shrinkWrapBlocks ) {
+                       anim.done(function() {
+                               style.overflow = opts.overflow[ 0 ];
+                               style.overflowX = opts.overflow[ 1 ];
+                               style.overflowY = opts.overflow[ 2 ];
+                       });
+               }
+       }
 
-                               complete = options.complete;
-                               if ( complete ) {
 
-                                       options.complete = false;
-                                       complete.call( elem );
-                               }
+       // show/hide pass
+       for ( index in props ) {
+               value = props[ index ];
+               if ( rfxtypes.exec( value ) ) {
+                       delete props[ index ];
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+                               continue;
                        }
+                       handled.push( index );
+               }
+       }
 
-                       return false;
-
+       length = handled.length;
+       if ( length ) {
+               dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+               if ( hidden ) {
+                       jQuery( elem ).show();
                } else {
-                       // classical easing cannot be used with an Infinity duration
-                       if ( options.duration == Infinity ) {
-                               this.now = t;
-                       } else {
-                               n = t - this.startTime;
-                               this.state = n / options.duration;
+                       anim.done(function() {
+                               jQuery( elem ).hide();
+                       });
+               }
+               anim.done(function() {
+                       var prop;
+                       jQuery.removeData( elem, "fxshow", true );
+                       for ( prop in orig ) {
+                               jQuery.style( elem, prop, orig[ prop ] );
+                       }
+               });
+               for ( index = 0 ; index < length ; index++ ) {
+                       prop = handled[ index ];
+                       tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+                       orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
 
-                               // Perform the easing function, defaults to swing
-                               this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-                               this.now = this.start + ( (this.end - this.start) * this.pos );
+                       if ( !( prop in dataShow ) ) {
+                               dataShow[ prop ] = tween.start;
+                               if ( hidden ) {
+                                       tween.end = tween.start;
+                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+                               }
                        }
-                       // Perform the next step of the animation
-                       this.update();
                }
-
-               return true;
        }
-};
+}
 
-jQuery.extend( jQuery.fx, {
-       tick: function() {
-               var timer,
-                       timers = jQuery.timers,
-                       i = 0;
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
 
-               for ( ; i < timers.length; i++ ) {
-                       timer = timers[ i ];
-                       // Checks the timer has not already been removed
-                       if ( !timer() && timers[ i ] === timer ) {
-                               timers.splice( i--, 1 );
-                       }
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || "swing";
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
                }
+               this.now = ( this.end - this.start ) * eased + this.start;
 
-               if ( !timers.length ) {
-                       jQuery.fx.stop();
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
                }
-       },
 
-       interval: 13,
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
 
-       stop: function() {
-               clearInterval( timerId );
-               timerId = null;
-       },
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
 
-       speeds: {
-               slow: 600,
-               fast: 200,
-               // Default speed
-               _default: 400
-       },
+                       if ( tween.elem[ tween.prop ] != null &&
+                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+                               return tween.elem[ tween.prop ];
+                       }
 
-       step: {
-               opacity: function( fx ) {
-                       jQuery.style( fx.elem, "opacity", fx.now );
+                       // passing any value as a 4th parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails
+                       // so, simple values such as "10px" are parsed to Float.
+                       // complex values such as "rotate(1rad)" are returned as is.
+                       result = jQuery.css( tween.elem, tween.prop, false, "" );
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
                },
-
-               _default: function( fx ) {
-                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+               set: function( tween ) {
+                       // use step hook for back compat - use cssHook if its there - use .style if its
+                       // available and use plain properties where available
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
                        } else {
-                               fx.elem[ fx.prop ] = fx.now;
+                               tween.elem[ tween.prop ] = tween.now;
                        }
                }
        }
-});
+};
 
-// Ensure props that can't be negative don't go there on undershoot easing
-jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
-       // exclude marginTop, marginLeft, marginBottom and marginRight from this list
-       if ( prop.indexOf( "margin" ) ) {
-               jQuery.fx.step[ prop ] = function( fx ) {
-                       jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
-               };
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
        }
-});
+};
 
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.animated = function( elem ) {
-               return jQuery.grep(jQuery.timers, function( fn ) {
-                       return elem === fn.elem;
-               }).length;
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ||
+                       // special check for .toggle( handler, handler, ... )
+                       ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
        };
-}
+});
 
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
+jQuery.fn.extend({
+       fadeTo: function( speed, to, easing, callback ) {
 
-       if ( !elemdisplay[ nodeName ] ) {
+               // show any hidden elements after setting opacity to 0
+               return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+                       // animate to the value specified
+                       .end().animate({ opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
 
-               var body = document.body,
-                       elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-                       display = elem.css( "display" );
-               elem.remove();
+                               // Empty animations resolve immediately
+                               if ( empty ) {
+                                       anim.stop( true );
+                               }
+                       };
 
-               // If the simple way fails,
-               // get element's real default display by attaching it to a temp iframe
-               if ( display === "none" || display === "" ) {
-                       // No iframe to use yet, so create it
-                       if ( !iframe ) {
-                               iframe = document.createElement( "iframe" );
-                               iframe.frameBorder = iframe.width = iframe.height = 0;
-                       }
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
 
-                       body.appendChild( iframe );
+               return this.each(function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
 
-                       // Create a cacheable copy of the iframe document on first call.
-                       // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-                       // document to it; WebKit & Firefox won't allow reusing the iframe document.
-                       if ( !iframeDoc || !iframe.createElement ) {
-                               iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-                               iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
-                               iframeDoc.close();
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
                        }
 
-                       elem = iframeDoc.createElement( nodeName );
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
 
-                       iframeDoc.body.appendChild( elem );
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       }
+});
 
-                       display = jQuery.css( elem, "display" );
-                       body.removeChild( iframe );
-               }
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               attrs = { height: type },
+               i = 0;
+
+       // if we include width, step value is 1 to do all cssExpand values,
+       // if we don't include width, step value is 2 to skip over Left and Right
+       includeWidth = includeWidth? 1 : 0;
+       for( ; i < 4 ; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
 
-               // Store the correct default display
-               elemdisplay[ nodeName ] = display;
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
        }
 
-       return elemdisplay[ nodeName ];
+       return attrs;
 }
 
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx("show"),
+       slideUp: genFx("hide"),
+       slideToggle: genFx("toggle"),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
 
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
 
+       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
 
-var getOffset,
-       rtable = /^t(?:able|d|h)$/i,
-       rroot = /^(?:body|html)$/i;
+       // normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
 
-if ( "getBoundingClientRect" in document.documentElement ) {
-       getOffset = function( elem, doc, docElem, box ) {
-               try {
-                       box = elem.getBoundingClientRect();
-               } catch(e) {}
+       // Queueing
+       opt.old = opt.complete;
 
-               // Make sure we're not dealing with a disconnected DOM node
-               if ( !box || !jQuery.contains( docElem, elem ) ) {
-                       return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
                }
 
-               var body = doc.body,
-                       win = getWindow( doc ),
-                       clientTop  = docElem.clientTop  || body.clientTop  || 0,
-                       clientLeft = docElem.clientLeft || body.clientLeft || 0,
-                       scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-                       scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-                       top  = box.top  + scrollTop  - clientTop,
-                       left = box.left + scrollLeft - clientLeft;
-
-               return { top: top, left: left };
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
        };
 
-} else {
-       getOffset = function( elem, doc, docElem ) {
-               var computedStyle,
-                       offsetParent = elem.offsetParent,
-                       prevOffsetParent = elem,
-                       body = doc.body,
-                       defaultView = doc.defaultView,
-                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-                       top = elem.offsetTop,
-                       left = elem.offsetLeft;
-
-               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                               break;
-                       }
+       return opt;
+};
 
-                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-                       top  -= elem.scrollTop;
-                       left -= elem.scrollLeft;
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p*Math.PI ) / 2;
+       }
+};
 
-                       if ( elem === offsetParent ) {
-                               top  += elem.offsetTop;
-                               left += elem.offsetLeft;
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+       var timer,
+               timers = jQuery.timers,
+               i = 0;
 
-                               if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                               }
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+               // Checks the timer has not already been removed
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
 
-                               prevOffsetParent = offsetParent;
-                               offsetParent = elem.offsetParent;
-                       }
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+};
 
-                       if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                       }
+jQuery.fx.timer = function( timer ) {
+       if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
+               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+       }
+};
 
-                       prevComputedStyle = computedStyle;
-               }
+jQuery.fx.interval = 13;
 
-               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-                       top  += body.offsetTop;
-                       left += body.offsetLeft;
-               }
+jQuery.fx.stop = function() {
+       clearInterval( timerId );
+       timerId = null;
+};
 
-               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                       top  += Math.max( docElem.scrollTop, body.scrollTop );
-                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
-               }
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+       // Default speed
+       _default: 400
+};
 
-               return { top: top, left: left };
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
        };
 }
+var rroot = /^(?:body|html)$/i;
 
 jQuery.fn.offset = function( options ) {
        if ( arguments.length ) {
@@ -9150,18 +9203,40 @@ jQuery.fn.offset = function( options ) {
                        });
        }
 
-       var elem = this[0],
+       var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
+               box = { top: 0, left: 0 },
+               elem = this[ 0 ],
                doc = elem && elem.ownerDocument;
 
        if ( !doc ) {
-               return null;
+               return;
        }
 
-       if ( elem === doc.body ) {
+       if ( (body = doc.body) === elem ) {
                return jQuery.offset.bodyOffset( elem );
        }
 
-       return getOffset( elem, doc, doc.documentElement );
+       docElem = doc.documentElement;
+
+       // Make sure it's not a disconnected DOM node
+       if ( !jQuery.contains( docElem, elem ) ) {
+               return box;
+       }
+
+       // If we don't have gBCR, just use 0,0 rather than error
+       // BlackBerry 5, iOS 3 (original iPhone)
+       if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+               box = elem.getBoundingClientRect();
+       }
+       win = getWindow( doc );
+       clientTop  = docElem.clientTop  || body.clientTop  || 0;
+       clientLeft = docElem.clientLeft || body.clientLeft || 0;
+       scrollTop  = win.pageYOffset || docElem.scrollTop;
+       scrollLeft = win.pageXOffset || docElem.scrollLeft;
+       return {
+               top: box.top  + scrollTop  - clientTop,
+               left: box.left + scrollLeft - clientLeft
+       };
 };
 
 jQuery.offset = {
@@ -9227,7 +9302,7 @@ jQuery.fn.extend({
 
        position: function() {
                if ( !this[0] ) {
-                       return null;
+                       return;
                }
 
                var elem = this[0],
@@ -9262,7 +9337,7 @@ jQuery.fn.extend({
                        while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
                                offsetParent = offsetParent.offsetParent;
                        }
-                       return offsetParent;
+                       return offsetParent || document.body;
                });
        }
 });
@@ -9278,8 +9353,7 @@ jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( me
 
                        if ( val === undefined ) {
                                return win ? (prop in win) ? win[ prop ] :
-                                       jQuery.support.boxModel && win.document.documentElement[ method ] ||
-                                               win.document.body[ method ] :
+                                       win.document.documentElement[ method ] :
                                        elem[ method ];
                        }
 
@@ -9303,83 +9377,47 @@ function getWindow( elem ) {
                        elem.defaultView || elem.parentWindow :
                        false;
 }
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-       var clientProp = "client" + name,
-               scrollProp = "scroll" + name,
-               offsetProp = "offset" + name;
-
-       // innerHeight and innerWidth
-       jQuery.fn[ "inner" + name ] = function() {
-               var elem = this[0];
-               return elem ?
-                       elem.style ?
-                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
-                       this[ type ]() :
-                       null;
-       };
-
-       // outerHeight and outerWidth
-       jQuery.fn[ "outer" + name ] = function( margin ) {
-               var elem = this[0];
-               return elem ?
-                       elem.style ?
-                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-                       this[ type ]() :
-                       null;
-       };
-
-       jQuery.fn[ type ] = function( value ) {
-               return jQuery.access( this, function( elem, type, value ) {
-                       var doc, docElemProp, orig, ret;
-
-                       if ( jQuery.isWindow( elem ) ) {
-                               // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-                               doc = elem.document;
-                               docElemProp = doc.documentElement[ clientProp ];
-                               return jQuery.support.boxModel && docElemProp ||
-                                       doc.body && doc.body[ clientProp ] || docElemProp;
-                       }
-
-                       // Get document width or height
-                       if ( elem.nodeType === 9 ) {
-                               // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-                               doc = elem.documentElement;
-
-                               // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
-                               // so we can't use max, as it'll choose the incorrect offset[Width/Height]
-                               // instead we use the correct client[Width/Height]
-                               // support:IE6
-                               if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
-                                       return doc[ clientProp ];
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+               // margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return jQuery.access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
+                                       // https://github.com/jquery/jquery/pull/764
+                                       return elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
                                }
 
-                               return Math.max(
-                                       elem.body[ scrollProp ], doc[ scrollProp ],
-                                       elem.body[ offsetProp ], doc[ offsetProp ]
-                               );
-                       }
-
-                       // Get width or height on the element
-                       if ( value === undefined ) {
-                               orig = jQuery.css( elem, type );
-                               ret = parseFloat( orig );
-                               return jQuery.isNumeric( ret ) ? ret : orig;
-                       }
+                               return value === undefined ?
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, value, extra ) :
 
-                       // Set the width or height on the element
-                       jQuery( elem ).css( type, value );
-               }, type, value, arguments.length, null );
-       };
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable, null );
+               };
+       });
 });
-
-
-
-
 // Expose jQuery to the global object
 window.jQuery = window.$ = jQuery;
 
@@ -9399,6 +9437,4 @@ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
        define( "jquery", [], function () { return jQuery; } );
 }
 
-
-
 })( window );
index 33f8752..ad15607 100644 (file)
@@ -2,13 +2,13 @@
  * jQuery makeCollapsible
  *
  * This will enable collapsible-functionality on all passed elements.
- * Will prevent binding twice to the same element.
- * Initial state is expanded by default, this can be overriden by adding class
- * "mw-collapsed" to the "mw-collapsible" element.
- * Elements made collapsible have class "mw-made-collapsible".
- * Except for tables and lists, the inner content is wrapped in "mw-collapsible-content".
+ * Will prevent binding twice to the same element.
+ * Initial state is expanded by default, this can be overriden by adding class
+ *   "mw-collapsed" to the "mw-collapsible" element.
+ * - Elements made collapsible have jQuery data "mw-made-collapsible" set to true.
+ * - The inner content is wrapped in a "div.mw-collapsible-content" (except for tables and lists).
  *
- * @author Krinkle <krinklemail@gmail.com>
+ * @author Krinkle, 2011-2012
  *
  * Dual license:
  * @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
 $.fn.makeCollapsible = function () {
 
        return this.each(function () {
-               var lpx = 'jquery.makeCollapsible> ';
 
                // Define reused variables and functions
-               var $toggle,
-                       $that = $(this).addClass( 'mw-collapsible' ), // case: $( '#myAJAXelement' ).makeCollapsible()
-                       that = this,
-                       collapsetext = $(this).attr( 'data-collapsetext' ),
-                       expandtext = $(this).attr( 'data-expandtext' ),
-                       toggleElement = function ( $collapsible, action, $defaultToggle, instantHide ) {
+               var lpx = 'jquery.makeCollapsible> ',
+                       collapsible = this,
+                       // Ensure class "mw-collapsible" is present in case .makeCollapsible()
+                       // is called on element(s) that don't have it yet.
+                       $collapsible = $(collapsible).addClass( 'mw-collapsible' ),
+                       collapsetext = $collapsible.attr( 'data-collapsetext' ),
+                       expandtext = $collapsible.attr( 'data-expandtext' ),
+                       $toggle,
+                       $toggleLink,
+                       $firstItem,
+                       collapsibleId,
+                       $customTogglers,
+                       firstval,
+                       /**
+                        * @param {jQuery} $collapsible
+                        * @param {string} action The action this function will take ('expand' or 'collapse').
+                        * @param {jQuery|null} [optional] $defaultToggle
+                        * @param {Object|undefined} options
+                        */
+                       toggleElement = function ( $collapsible, action, $defaultToggle, options ) {
                                var $collapsibleContent, $containers;
+                               options = options || {};
 
                                // Validate parameters
-                               if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery
+
+                               // $collapsible must be an instance of jQuery
+                               if ( !$collapsible.jquery ) {
                                        return;
                                }
                                if ( action !== 'expand' && action !== 'collapse' ) {
@@ -41,7 +57,7 @@ $.fn.makeCollapsible = function () {
                                if ( $defaultToggle === undefined ) {
                                        $defaultToggle = null;
                                }
-                               if ( $defaultToggle !== null && !($defaultToggle instanceof $) ) {
+                               if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
                                        // is optional (may be undefined), but if defined it must be an instance of jQuery.
                                        // If it's not, abort right away.
                                        // After this $defaultToggle is either null or a valid jQuery instance.
@@ -55,12 +71,12 @@ $.fn.makeCollapsible = function () {
                                                // Hide all table rows of this table
                                                // Slide doens't work with tables, but fade does as of jQuery 1.1.3
                                                // http://stackoverflow.com/questions/467336#920480
-                                               $containers = $collapsible.find( '>tbody>tr' );
+                                               $containers = $collapsible.find( '> tbody > tr' );
                                                if ( $defaultToggle ) {
                                                        // Exclude tablerow containing togglelink
                                                        $containers.not( $defaultToggle.closest( 'tr' ) ).stop(true, true).fadeOut();
                                                } else {
-                                                       if ( instantHide ) {
+                                                       if ( options.instantHide ) {
                                                                $containers.hide();
                                                        } else {
                                                                $containers.stop( true, true ).fadeOut();
@@ -73,19 +89,20 @@ $.fn.makeCollapsible = function () {
                                                        // Exclude list-item containing togglelink
                                                        $containers.not( $defaultToggle.parent() ).stop( true, true ).slideUp();
                                                } else {
-                                                       if ( instantHide ) {
+                                                       if ( options.instantHide ) {
                                                                $containers.hide();
                                                        } else {
                                                                $containers.stop( true, true ).slideUp();
                                                        }
                                                }
 
-                                       } else { // <div>, <p> etc.
+                                       } else {
+                                               // <div>, <p> etc.
                                                $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
 
                                                // If a collapsible-content is defined, collapse it
                                                if ( $collapsibleContent.length ) {
-                                                       if ( instantHide ) {
+                                                       if ( options.instantHide ) {
                                                                $collapsibleContent.hide();
                                                        } else {
                                                                $collapsibleContent.slideUp();
@@ -111,7 +128,7 @@ $.fn.makeCollapsible = function () {
                                                        // Exclude tablerow containing togglelink
                                                        $containers.not( $defaultToggle.parent().parent() ).stop(true, true).fadeIn();
                                                } else {
-                                                       $containers.stop(true, true).fadeIn();
+                                                       $containers.stop( true, true ).fadeIn();
                                                }
 
                                        } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
@@ -123,7 +140,8 @@ $.fn.makeCollapsible = function () {
                                                        $containers.stop( true, true ).slideDown();
                                                }
 
-                                       } else { // <div>, <p> etc.
+                                       } else {
+                                               // <div>, <p> etc.
                                                $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
 
                                                // If a collapsible-content is defined, collapse it
@@ -142,10 +160,15 @@ $.fn.makeCollapsible = function () {
                                        }
                                }
                        },
-                       // Toggles collapsible and togglelink class and updates text label
-                       toggleLinkDefault = function ( that, e ) {
-                               var $that = $(that),
-                                       $collapsible = $that.closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
+                       /**
+                        * Toggles collapsible and togglelink class and updates text label.
+                        *
+                        * @param {jQuery} $that
+                        * @param {jQuery.Event} e
+                        * @param {Object|undefined} options
+                        */
+                       toggleLinkDefault = function ( $that, e, options ) {
+                               var $collapsible = $that.closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
                                e.preventDefault();
                                e.stopPropagation();
 
@@ -159,7 +182,7 @@ $.fn.makeCollapsible = function () {
                                                $that.text( expandtext );
                                        }
                                        // Collapse element
-                                       toggleElement( $collapsible, 'collapse', $that );
+                                       toggleElement( $collapsible, 'collapse', $that, options );
 
                                // It's collapsed right now
                                } else {
@@ -171,14 +194,20 @@ $.fn.makeCollapsible = function () {
                                                $that.text( collapsetext );
                                        }
                                        // Expand element
-                                       toggleElement( $collapsible, 'expand', $that );
+                                       toggleElement( $collapsible, 'expand', $that, options );
                                }
                                return;
                        },
-                       // Toggles collapsible and togglelink class
-                       toggleLinkPremade = function ( $that, e ) {
-                               var $collapsible = $that.eq(0).closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
-                               if ( $(e.target).is( 'a' ) ) {
+                       /**
+                        * Toggles collapsible and togglelink class.
+                        *
+                        * @param {jQuery} $that
+                        * @param {jQuery.Event} e
+                        * @param {Object|undefined} options
+                        */
+                       toggleLinkPremade = function ( $that, e, options ) {
+                               var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
+                               if ( $.nodeName( e.target, 'a' ) ) {
                                        return true;
                                }
                                e.preventDefault();
@@ -189,31 +218,45 @@ $.fn.makeCollapsible = function () {
                                        // Change toggle to collapsed
                                        $that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
                                        // Collapse element
-                                       toggleElement( $collapsible, 'collapse', $that );
+                                       toggleElement( $collapsible, 'collapse', $that, options );
 
                                // It's collapsed right now
                                } else {
                                        // Change toggle to expanded
                                        $that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
                                        // Expand element
-                                       toggleElement( $collapsible, 'expand', $that );
+                                       toggleElement( $collapsible, 'expand', $that, options );
                                }
                                return;
                        },
-                       // Toggles customcollapsible
-                       toggleLinkCustom = function ( $that, e, $collapsible ) {
+                       /**
+                        * Toggles customcollapsible.
+                        *
+                        * @param {jQuery} $that
+                        * @param {jQuery.Event} e
+                        * @param {Object|undefined} options
+                        * @param {jQuery} $collapsible
+                        */
+                       toggleLinkCustom = function ( $that, e, options, $collapsible ) {
                                // For the initial state call of customtogglers there is no event passed
-                               if (e) {
+                               if ( e ) {
                                        e.preventDefault();
                                        e.stopPropagation();
                                }
                                // Get current state and toggle to the opposite
                                var action = $collapsible.hasClass( 'mw-collapsed' ) ? 'expand' : 'collapse';
                                $collapsible.toggleClass( 'mw-collapsed' );
-                               toggleElement( $collapsible, action, $that );
+                               toggleElement( $collapsible, action, $that, options );
 
                        };
 
+               // Return if it has been enabled already.
+               if ( $collapsible.data( 'mw-made-collapsible' ) ) {
+                       return;
+               } else {
+                       $collapsible.data( 'mw-made-collapsible', true );
+               }
+
                // Use custom text or default ?
                if ( !collapsetext ) {
                        collapsetext = mw.msg( 'collapsible-collapse' );
@@ -223,46 +266,41 @@ $.fn.makeCollapsible = function () {
                }
 
                // Create toggle link with a space around the brackets (&nbsp;[text]&nbsp;)
-               var $toggleLink =
+               $toggleLink =
                        $( '<a href="#"></a>' )
                                .text( collapsetext )
                                .wrap( '<span class="mw-collapsible-toggle"></span>' )
-                               .parent()
-                               .prepend( '&nbsp;[' )
-                               .append( ']&nbsp;' )
-                               .bind( 'click.mw-collapse', function (e) {
-                                       toggleLinkDefault( this, e );
-                               } );
-
-               // Return if it has been enabled already.
-               if ( $that.hasClass( 'mw-made-collapsible' ) ) {
-                       return;
-               } else {
-                       $that.addClass( 'mw-made-collapsible' );
-               }
+                                       .parent()
+                                       .prepend( '&nbsp;[' )
+                                       .append( ']&nbsp;' )
+                                       .on( 'click.mw-collapse', function ( e, options ) {
+                                               toggleLinkDefault( $(this), e, options );
+                                       } );
 
                // Check if this element has a custom position for the toggle link
                // (ie. outside the container or deeper inside the tree)
                // Then: Locate the custom toggle link(s) and bind them
-               if ( ( $that.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
+               if ( ( $collapsible.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
 
-                       var thatId = $that.attr( 'id' ),
-                               $customTogglers = $( '.' + thatId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
-                       mw.log( lpx + 'Found custom collapsible: #' + thatId );
+                       collapsibleId = $collapsible.attr( 'id' );
+                       $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
+                       mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
 
                        // Double check that there is actually a customtoggle link
                        if ( $customTogglers.length ) {
-                               $customTogglers.bind( 'click.mw-collapse', function ( e ) {
-                                       toggleLinkCustom( $(this), e, $that );
+                               $customTogglers.on( 'click.mw-collapse', function ( e, options ) {
+                                       toggleLinkCustom( $(this), e, options, $collapsible );
                                } );
                        } else {
-                               mw.log( lpx + '#' + thatId + ': Missing toggler!' );
+                               mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
                        }
 
                        // Initial state
-                       if ( $that.hasClass( 'mw-collapsed' ) ) {
-                               $that.removeClass( 'mw-collapsed' );
-                               toggleLinkCustom( $customTogglers, null, $that );
+                       if ( $collapsible.hasClass( 'mw-collapsed' ) ) {
+                               // Remove here so that the toggler goes in the right direction,
+                               // It re-adds the class.
+                               $collapsible.removeClass( 'mw-collapsed' );
+                               toggleLinkCustom( $customTogglers, null, { instantHide: true }, $collapsible );
                        }
 
                // If this is not a custom case, do the default:
@@ -270,23 +308,23 @@ $.fn.makeCollapsible = function () {
                } else {
 
                        // Elements are treated differently
-                       if ( $that.is( 'table' ) ) {
+                       if ( $collapsible.is( 'table' ) ) {
                                // The toggle-link will be in one the the cells (td or th) of the first row
-                               var $firstRowCells = $that.find( 'tr:first th, tr:first td' );
-                               $toggle = $firstRowCells.find( '> .mw-collapsible-toggle' );
+                               $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
+                               $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
 
                                // If theres no toggle link, add it to the last cell
                                if ( !$toggle.length ) {
-                                       $firstRowCells.eq(-1).prepend( $toggleLink );
+                                       $firstItem.eq(-1).prepend( $toggleLink );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
-                                               toggleLinkPremade( $toggle, e );
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
+                                               toggleLinkPremade( $toggle, e, options );
                                        } );
                                }
 
-                       } else if ( $that.is( 'ul' ) || $that.is( 'ol' ) ) {
+                       } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
                                // The toggle-link will be in the first list-item
-                               var $firstItem = $that.find( 'li:first' );
+                               $firstItem = $collapsible.find( 'li:first' );
                                $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
 
                                // If theres no toggle link, add it
@@ -294,46 +332,47 @@ $.fn.makeCollapsible = function () {
                                        // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
                                        // to be "1". Except if the value-attribute is already used.
                                        // If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
-                                       var firstval = $firstItem.attr( 'value' );
+                                       firstval = $firstItem.attr( 'value' );
                                        if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
                                                $firstItem.attr( 'value', '1' );
                                        }
-                                       $that.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
+                                       $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
-                                               toggleLinkPremade( $toggle, e );
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
+                                               toggleLinkPremade( $toggle, e, options );
                                        } );
                                }
 
                        } else { // <div>, <p> etc.
 
                                // The toggle-link will be the first child of the element
-                               $toggle = $that.find( '> .mw-collapsible-toggle' );
+                               $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
 
                                // If a direct child .content-wrapper does not exists, create it
-                               if ( !$that.find( '> .mw-collapsible-content' ).length ) {
-                                       $that.wrapInner( '<div class="mw-collapsible-content"></div>' );
+                               if ( !$collapsible.find( '> .mw-collapsible-content' ).length ) {
+                                       $collapsible.wrapInner( '<div class="mw-collapsible-content"></div>' );
                                }
 
                                // If theres no toggle link, add it
                                if ( !$toggle.length ) {
-                                       $that.prepend( $toggleLink );
+                                       $collapsible.prepend( $toggleLink );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
-                                               toggleLinkPremade( $toggle, e );
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
+                                               toggleLinkPremade( $toggle, e, options );
                                        } );
                                }
                        }
                }
 
-               // Initial state (only for those that are not custom)
-               if ( $that.hasClass( 'mw-collapsed' ) && ( $that.attr( 'id' ) || '').indexOf( 'mw-customcollapsible-' ) !== 0 ) {
-                       $that.removeClass( 'mw-collapsed' );
+               // Initial state (only for those that are not custom,
+               // because the initial state of those has been taken care of already).
+               if ( $collapsible.hasClass( 'mw-collapsed' ) && ( $collapsible.attr( 'id' ) || '').indexOf( 'mw-customcollapsible-' ) !== 0 ) {
+                       $collapsible.removeClass( 'mw-collapsed' );
                        // The collapsible element could have multiple togglers
                        // To toggle the initial state only click one of them (ie. the first one, eq(0) )
                        // Else it would go like: hide,show,hide,show for each toggle link.
-                       toggleElement( $that, 'collapse', $toggleLink.eq(0), /* instantHide = */ true );
-                       $toggleLink.eq(0).click();
+                       // This is just like it would be in reality (only one toggle is clicked at a time).
+                       $toggleLink.eq( 0 ).trigger( 'click', [ { instantHide: true } ] );
                }
        } );
 };
diff --git a/resources/jquery/jquery.messageBox.css b/resources/jquery/jquery.messageBox.css
deleted file mode 100644 (file)
index 96332aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.js-messagebox {
-       margin: 1em 5%;
-       padding: 0.5em 2.5%;
-       border: 1px solid #ccc;
-       background-color: #fcfcfc;
-       font-size: 0.8em;
-}
-.js-messagebox .js-messagebox-group {
-       margin: 1px;
-       padding: 0.5em 2.5%;
-       border-bottom: 1px solid #ddd;
-}
-.js-messagebox .js-messagebox-group:last-child {
-       border-bottom: thin none transparent;
-}
\ No newline at end of file
diff --git a/resources/jquery/jquery.messageBox.js b/resources/jquery/jquery.messageBox.js
deleted file mode 100644 (file)
index c088bc4..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * jQuery messageBox
- *
- * Function to inform the user of something. Use sparingly (since there's mw.log for
- * messages aimed at developers / debuggers). Based on the function in MediaWiki's
- * legacy javascript (wikibits.js) by Aryeh Gregor called jsMsg() added in r23233.
- *
- * @author Krinkle <krinklemail@gmail.com>
- *
- * Dual license:
- * @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
- * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
- */
-( function ( $ ) {
-
-/** @return jQuery object of the message box */
-$.messageBoxNew = function ( options ) {
-       options = $.extend( {
-               // unique identifier for this message box
-               id: 'js-messagebox',
-
-               // jQuery/CSS selector
-               parent: 'body',
-
-               // 'prepend' or 'append'
-               insert: 'prepend'
-       }, options );
-       var $curBox = $( '#' + options.id );
-       // Only create a new box if it doesn't exist already
-       if ( $curBox.length > 0 ) {
-               if ( $curBox.hasClass( 'js-messagebox' ) ) {
-                       return $curBox;
-               } else {
-                       return $curBox.addClass( 'js-messagebox' );
-               }
-       } else {
-               var $newBox = $( '<div>', {
-                       'id': options.id,
-                       'class': 'js-messagebox',
-                       'css': {
-                               'display': 'none'
-                       }
-               });
-               if ( $( options.parent ).length < 1 ) {
-                       options.parent = 'body';
-               }
-               if ( options.insert === 'append' ) {
-                       $newBox.appendTo( options.parent );
-                       return $newBox;
-               } else {
-                       $newBox.prependTo( options.parent );
-                       return $newBox;
-               }
-       }
-};
-
-/**
- * Calling with no message or message set to empty string or null will hide the group,
- * setting 'replace' to true as well will reset and hide the group entirely.
- * If there are no visible groups the main message box is hidden automatically,
- * and shown again once there are messages
- * @return {jQuery}: jQuery object of message group.
- */
-$.messageBox = function ( options ) {
-       options = $.extend( {
-               message: '',
-               group: 'default',
-               // if replace=true, it replaces any previous message in this group
-               replace: false,
-               target: 'js-messagebox'
-       }, options );
-       var $target = $.messageBoxNew( { id: options.target } );
-       var groupID = options.target + '-' + options.group;
-       var $group = $( '#' + groupID );
-       // Create group container if not existant
-       if ( $group.length < 1 ) {
-               $group = $( '<div>', {
-                       'id': groupID,
-                       'class': 'js-messagebox-group'
-               });
-               $target.prepend( $group );
-       }
-       // Replace ?
-       if ( options.replace === true ) {
-               $group.empty();
-       }
-       // Hide it ?
-       if ( options.message === '' || options.message === null ) {
-               $group.hide();
-       } else {
-               // Actual message addition
-               $group.prepend( $( '<p>' ).append( options.message ) ).show();
-               $target.slideDown();
-       }
-       // If the last visible group was just hidden, slide the entire box up
-       // Othere wise slideDown (if already visible nothing will happen)
-       if ( $target.find( '> *:visible' ).length === 0 ) {
-               // to avoid a sudden dissapearance of the last group followed by
-               // a slide up of only the outline, show it for a second
-               $group.show();
-               $target.slideUp();
-               $group.hide();
-       } else {
-               $target.slideDown();
-       }
-       return $group;
-};
-
-}( jQuery ) );
index 3757393..bbffd7b 100644 (file)
@@ -55,6 +55,7 @@
                        return true;
                },
                compareObject: function ( objectA, objectB ) {
+                       var prop, type;
 
                        // Do a simple check if the types match
                        if ( typeof objectA === typeof objectB ) {
                                        if ( objectA === objectB ) {
                                                return true;
                                        } else {
-                                               var prop;
                                                // Iterate over each property
                                                for ( prop in objectA ) {
                                                        // Check if this property is also present in the other object
                                                        if ( prop in objectB ) {
                                                                // Compare the types of the properties
-                                                               var type = typeof objectA[prop];
+                                                               type = typeof objectA[prop];
                                                                if ( type === typeof objectB[prop] ) {
                                                                        // Recursively check objects inside this one
                                                                        switch ( type ) {
index 5ec05f2..7badb11 100644 (file)
        $.fn.placeholder = function () {
 
                return this.each( function () {
+                       var placeholder, $input;
 
                        // If the HTML5 placeholder attribute is supported, use it
                        if ( this.placeholder && 'placeholder' in document.createElement( this.tagName ) ) {
                                return;
                        }
 
-                       var placeholder = this.getAttribute( 'placeholder' );
-                       var $input = $(this);
+                       placeholder = this.getAttribute( 'placeholder' );
+                       $input = $(this);
 
                        // Show initially, if empty
                        if ( this.value === '' || this.value === placeholder ) {
@@ -39,7 +40,7 @@
                                // Hide on focus
                                // Also listen for other events in case $input was
                                // already focused when the events were bound
-                               .bind( 'focus drop keydown paste', function ( e ) {
+                               .on( 'focus drop keydown paste', function ( e ) {
                                        if ( $input.hasClass( 'placeholder' ) ) {
                                                if ( e.type === 'drop' && e.originalEvent.dataTransfer ) {
                                                        // Support for drag&drop. Instead of inserting the dropped
index d54e66c..1475af2 100644 (file)
@@ -96,7 +96,7 @@
         *  other constructor. Otherwise "missingTests" will include all methods that
         *  were not called from that instance.
         */
-       var CompletenessTest = function ( masterVariable, ignoreFn ) {
+       function CompletenessTest( masterVariable, ignoreFn ) {
 
                // Keep track in these objects. Keyed by strings with the
                // method names (ie. 'my.foo', 'my.bar', etc.) values are boolean true.
                });
 
                return this;
-       };
+       }
 
        /* Static members */
        CompletenessTest.ACTION_INJECT = 500;
index 257b224..55970e0 100644 (file)
@@ -1,11 +1,11 @@
 /**
- * QUnit v1.9.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.10.0 - A JavaScript Unit Testing Framework
  *
- * http://docs.jquery.com/QUnit
+ * http://qunitjs.com
  *
- * Copyright (c) 2012 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
  */
 
 /** Font Family and Sizes */
@@ -20,7 +20,7 @@
 
 /** Resets */
 
-#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
        margin: 0;
        padding: 0;
 }
@@ -67,6 +67,7 @@
        padding: 0.5em 0 0.5em 2em;
        color: #5E740B;
        background-color: #eee;
+       overflow: hidden;
 }
 
 #qunit-userAgent {
@@ -76,6 +77,9 @@
        text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
 }
 
+#qunit-modulefilter-container {
+       float: right;
+}
 
 /** Tests: Pass/Fail */
 
index 9efedcb..d4f17b5 100644 (file)
@@ -1,11 +1,11 @@
 /**
- * QUnit v1.9.0 - A JavaScript Unit Testing Framework
+ * QUnit v1.10.0 - A JavaScript Unit Testing Framework
  *
- * http://docs.jquery.com/QUnit
+ * http://qunitjs.com
  *
- * Copyright (c) 2012 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
  */
 
 (function( window ) {
@@ -17,6 +17,8 @@ var QUnit,
        fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
        toString = Object.prototype.toString,
        hasOwn = Object.prototype.hasOwnProperty,
+       // Keep a local reference to Date (GH-283)
+       Date = window.Date,
        defined = {
        setTimeout: typeof window.setTimeout !== "undefined",
        sessionStorage: (function() {
@@ -304,7 +306,8 @@ QUnit = {
        // call on start of module test to prepend name to all tests
        module: function( name, testEnvironment ) {
                config.currentModule = name;
-               config.currentModuleTestEnviroment = testEnvironment;
+               config.currentModuleTestEnvironment = testEnvironment;
+               config.modules[name] = true;
        },
 
        asyncTest: function( testName, expected, callback ) {
@@ -336,7 +339,7 @@ QUnit = {
                        async: async,
                        callback: callback,
                        module: config.currentModule,
-                       moduleTestEnvironment: config.currentModuleTestEnviroment,
+                       moduleTestEnvironment: config.currentModuleTestEnvironment,
                        stack: sourceFromStacktrace( 2 )
                });
 
@@ -349,7 +352,11 @@ QUnit = {
 
        // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
        expect: function( asserts ) {
-               config.current.expected = asserts;
+               if (arguments.length === 1) {
+                       config.current.expected = asserts;
+               } else {
+                       return config.current.expected;
+               }
        },
 
        start: function( count ) {
@@ -415,6 +422,8 @@ QUnit.assert = {
 
                var source,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: result,
                                message: msg
                        };
@@ -600,6 +609,9 @@ config = {
                }
        ],
 
+       // Set of all modules.
+       modules: {},
+
        // logging callback queues
        begin: [],
        done: [],
@@ -710,17 +722,10 @@ extend( QUnit, {
        },
 
        // Resets the test setup. Useful for tests that modify the DOM.
-       // If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
        reset: function() {
-               var fixture;
-
-               if ( window.jQuery ) {
-                       jQuery( "#qunit-fixture" ).html( config.fixture );
-               } else {
-                       fixture = id( "qunit-fixture" );
-                       if ( fixture ) {
-                               fixture.innerHTML = config.fixture;
-                       }
+               var fixture = id( "qunit-fixture" );
+               if ( fixture ) {
+                       fixture.innerHTML = config.fixture;
                }
        },
 
@@ -781,6 +786,8 @@ extend( QUnit, {
 
                var output, source,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: result,
                                message: message,
                                actual: actual,
@@ -826,6 +833,8 @@ extend( QUnit, {
 
                var output,
                        details = {
+                               module: config.current.module,
+                               name: config.current.testName,
                                result: false,
                                message: message
                        };
@@ -916,7 +925,9 @@ QUnit.load = function() {
        runLoggingCallbacks( "begin", QUnit, {} );
 
        // Initialize the config, saving the execution queue
-       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes,
+       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes, moduleFilter,
+           numModules = 0,
+           moduleFilterHtml = "",
                urlConfigHtml = "",
                oldconfig = extend( {}, config );
 
@@ -940,6 +951,15 @@ QUnit.load = function() {
                urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
        }
 
+       moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " + ( config.module === undefined  ? "selected" : "" ) + ">< All Modules ></option>";
+       for ( i in config.modules ) {
+               if ( config.modules.hasOwnProperty( i ) ) {
+                       numModules += 1;
+                       moduleFilterHtml += "<option value='" + encodeURIComponent(i) + "' " + ( config.module === i ? "selected" : "" ) + ">" + i + "</option>";
+               }
+       }
+       moduleFilterHtml += "</select>";
+
        // `userAgent` initialized at top of scope
        userAgent = id( "qunit-userAgent" );
        if ( userAgent ) {
@@ -1002,6 +1022,19 @@ QUnit.load = function() {
                        window.location = QUnit.url( params );
                });
                toolbar.appendChild( urlConfigCheckboxes );
+
+               if (numModules > 1) {
+                       moduleFilter = document.createElement( 'span' );
+                       moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
+                       moduleFilter.innerHTML = moduleFilterHtml;
+                       addEvent( moduleFilter, "change", function() {
+                               var selectBox = moduleFilter.getElementsByTagName("select")[0],
+                                   selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+                               window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
+                       });
+                       toolbar.appendChild(moduleFilter);
+               }
        }
 
        // `main` initialized at top of scope
@@ -1039,9 +1072,9 @@ window.onerror = function ( error, filePath, linerNr ) {
                        }
                        QUnit.pushFailure( error, filePath + ":" + linerNr );
                } else {
-                       QUnit.test( "global failure", function() {
+                       QUnit.test( "global failure", extend( function() {
                                QUnit.pushFailure( error, filePath + ":" + linerNr );
-                       });
+                       }, { validTest: validTest } ) );
                }
                return false;
        }
@@ -1108,6 +1141,11 @@ function done() {
                }
        }
 
+       // scroll back to top to show results
+       if ( window.scrollTo ) {
+               window.scrollTo(0, 0);
+       }
+
        runLoggingCallbacks( "done", QUnit, {
                failed: config.stats.bad,
                passed: passed,
@@ -1123,6 +1161,12 @@ function validTest( test ) {
                module = config.module && config.module.toLowerCase(),
                fullName = (test.module + ": " + test.testName).toLowerCase();
 
+       // Internally-generated tests are always valid
+       if ( test.callback && test.callback.validTest === validTest ) {
+               delete test.callback.validTest;
+               return true;
+       }
+
        if ( config.testNumber ) {
                return test.testNumber === config.testNumber;
        }
@@ -1404,7 +1448,8 @@ QUnit.equiv = (function() {
                                                a.global === b.global &&
                                                // (gmi) ...
                                                a.ignoreCase === b.ignoreCase &&
-                                               a.multiline === b.multiline;
+                                               a.multiline === b.multiline &&
+                                               a.sticky === b.sticky;
                                },
 
                                // - skip when the property is a method of an instance (OOP)
index 150a51b..4a77528 100644 (file)
@@ -1,12 +1,40 @@
 .mw-spinner {
+       background-color: transparent;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+
+.mw-spinner-small {
        /* @embed */
-       background: transparent url(images/spinner.gif);
+       background-image: url(images/spinner.gif);
        height: 20px;
        width: 20px;
+       /* Avoid issues with .mw-spinner-block when floated without width. */
+       min-width: 20px;
+}
+
+.mw-spinner-large {
+       /* @embed */
+       background-image: url(images/spinner-large.gif);
+       height: 32px;
+       width: 32px;
+       /* Avoid issues with .mw-spinner-block when floated without width. */
+       min-width: 32px;
+}
+
+.mw-spinner-block {
+       display: block;
+       /* This overrides width from .mw-spinner-large / .mw-spinner-small,
+        * This is where the min-width kicks in.
+        */
+       width: 100%;
+}
+
+.mw-spinner-inline {
        display: inline-block;
        vertical-align: middle;
        
-       /* IE < 8 Hacks */
+       /* IE < 8 */
        zoom: 1;
        *display: inline;
-}
\ No newline at end of file
+}
index e8b683e..93e30b9 100644 (file)
@@ -5,40 +5,91 @@
  */
 ( function ( $ ) {
 
-       $.extend( {
+       // Default options for new spinners,
+       // stored outside the function to share between calls.
+       var defaults = {
+               id: undefined,
+               size: 'small',
+               type: 'inline'
+       };
+
+       $.extend({
                /**
                 * Creates a spinner element.
                 *
-                * @param id {String} id of the spinner
-                * @return {jQuery} spinner
+                * The argument is an object with options used to construct the spinner. These can be:
+                *
+                * It is a good practice to keep a reference to the created spinner to be able to remove it later.
+                * Alternatively one can use the id option and removeSpinner() (but make sure to choose an id
+                * that's unlikely to cause conflicts, e.g. with extensions, gadgets or user scripts).
+                *
+                * CSS classes used:
+                *   .mw-spinner for every spinner
+                *   .mw-spinner-small / .mw-spinner-large for size
+                *   .mw-spinner-block / .mw-spinner-inline for display types
+                *
+                * @example
+                *   // Create a large spinner reserving all available horizontal space.
+                *   var $spinner = $.createSpinner({ size: 'large', type: 'block' });
+                *   // Insert above page content.
+                *   $( '#mw-content-text' ).prepend( $spinner );
+                * @example
+                *   // Place a small inline spinner next to the "Save" button
+                *   var $spinner = $.createSpinner({ size: 'small', type: 'inline' });
+                *   // Alternatively, just `$.createSpinner();` as these are the default options.
+                *   $( '#wpSave' ).after( $spinner );
+                * @example
+                *   // The following two are equivalent:
+                *   $.createSpinner( 'magic' );
+                *   $.createSpinner({ id: 'magic' });
+                *
+                * @param {Object|String} opts [optional] ID string or options:
+                *  - id: If given, spinner will be given an id of "mw-spinner-<id>"
+                *  - size: 'small' (default) or 'large' for a 20-pixel or 32-pixel spinner
+                *  - type: 'inline' (default) or 'block'. Inline creates an inline-block with width and
+                *    height equal to spinner size. Block is a block-level element with width 100%, height
+                *    equal to spinner size.
+                * @return {jQuery}
                 */
-               createSpinner: function ( id ) {
-                       return $( '<div>' ).attr( {
-                               id: 'mw-spinner-' + id,
-                               'class': 'mw-spinner',
-                               title: '...'
-                       } );
+               createSpinner: function ( opts ) {
+                       if ( opts !== undefined && $.type( opts ) !== 'object' ) {
+                               opts = {
+                                       id: opts
+                               };
+                       }
+
+                       opts = $.extend( {}, defaults, opts );
+
+                       var $spinner = $( '<div>', { 'class': 'mw-spinner', 'title': '...' } );
+                       if ( opts.id !== undefined ) {
+                               $spinner.attr( 'id', 'mw-spinner-' + opts.id );
+                       }
+
+                       $spinner.addClass( opts.size === 'large' ? 'mw-spinner-large' : 'mw-spinner-small' );
+                       $spinner.addClass( opts.type === 'block' ? 'mw-spinner-block' : 'mw-spinner-inline' );
+
+                       return $spinner;
                },
 
                /**
                 * Removes a spinner element.
                 *
-                * @param id {String}
-                * @return {jQuery} spinner
+                * @param {String} id [optional] Id of the spinner, as passed to createSpinner.
+                * @return {jQuery} The (now detached) spinner.
                 */
                removeSpinner: function ( id ) {
                        return $( '#mw-spinner-' + id ).remove();
                }
-       } );
+       });
 
        /**
-        * Injects a spinner after the elements in the jQuery collection.
+        * Injects a spinner after the elements in the jQuery collection
+        * (as siblings, not children). Collection contents remain unchanged.
         *
-        * @param id String id of the spinner
+        * @param {Object|String} opts See createSpinner() for description.
         * @return {jQuery}
         */
-       $.fn.injectSpinner = function ( id ) {
-               return this.after( $.createSpinner( id ) );
+       $.fn.injectSpinner = function ( opts ) {
+               return this.after( $.createSpinner( opts ) );
        };
-
 }( jQuery ) );
index 3cbdad2..e0ba647 100644 (file)
        padding: 0;
        margin: -1px -1px 0 0;
 }
+
 /* IGNORED BY IE6 */
 html > body .suggestions {
        margin: -1px 0 0 0;
 }
+
 .suggestions-special {
        position: relative;
        background-color: white;
-       font-size: 0.8em;
        cursor: pointer;
        border: solid 1px #aaaaaa;
        padding: 0;
@@ -28,14 +29,15 @@ html > body .suggestions {
        padding: 0.25em 0.25em;
        line-height: 1.25em;
 }
+
 .suggestions-results {
        background-color: white;
-       font-size: 0.8em;
        cursor: pointer;
        border: solid 1px #aaaaaa;
        padding: 0;
        margin: 0;
 }
+
 .suggestions-result {
        color: black;
        margin: 0;
@@ -43,28 +45,33 @@ html > body .suggestions {
        padding: 0.01em 0.25em;
        text-align: left;
 }
+
 .suggestions-result-current {
        background-color: #4C59A6;
        color: white;
 }
+
 .suggestions-special .special-label {
-       font-size: 0.8em;
        color: gray;
        text-align: left;
 }
+
 .suggestions-special .special-query {
        color: black;
        font-style: italic;
        text-align: left;
 }
+
 .suggestions-special .special-hover {
        background-color: silver;
 }
+
 .suggestions-result-current .special-label,
 .suggestions-result-current .special-query {
        color: white;
 }
+
 .autoellipsis-matched,
 .highlight {
        font-weight: bold;
-}
\ No newline at end of file
+}
index dff5535..d80680f 100644 (file)
  * 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
- * positionFromLeft: Whether to position the suggestion box with the left attribute or the right
+ * 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' ).
+ *      Type: String, default: 'auto', options: 'left', 'right', 'start', 'end', 'auto'.
+ * positionFromLeft: Sets expandFrom=left, for backwards compatibility
  *             Type: Boolean, Default: true
  * highlightInput: Whether to hightlight matched portions of the input or not
  *             Type: Boolean, Default: false
@@ -114,6 +118,7 @@ $.suggestions = {
         * @param value Mixed Value to set property with
         */
        configure: function ( context, property, value ) {
+               var newCSS;
                // Validate creation using fallback values
                switch( property ) {
                        case 'fetch':
@@ -121,6 +126,7 @@ $.suggestions = {
                        case 'special':
                        case 'result':
                        case '$region':
+                       case 'expandFrom':
                                context.config[property] = value;
                                break;
                        case 'suggestions':
@@ -134,19 +140,77 @@ $.suggestions = {
                                                // Rebuild the suggestions list
                                                context.data.$container.show();
                                                // Update the size and position of the list
-                                               var newCSS = {
+                                               newCSS = {
                                                        top: context.config.$region.offset().top + context.config.$region.outerHeight(),
                                                        bottom: 'auto',
                                                        width: context.config.$region.outerWidth(),
                                                        height: 'auto'
                                                };
-                                               if ( context.config.positionFromLeft ) {
+
+                                               // Process expandFrom, after this it is set to left or right.
+                                               context.config.expandFrom = ( function ( expandFrom ) {
+                                                       var regionWidth, docWidth, regionCenter, docCenter,
+                                                               docDir = $( document.documentElement ).css( 'direction' ),
+                                                               $region = context.config.$region;
+
+                                                       // Backwards compatible
+                                                       if ( context.config.positionFromLeft ) {
+                                                               expandFrom = 'left';
+
+                                                       // Catch invalid values, default to 'auto'
+                                                       } else if ( $.inArray( expandFrom, ['left', 'right', 'start', 'end', 'auto'] ) === -1 ) {
+                                                               expandFrom = 'auto';
+                                                       }
+
+                                                       if ( expandFrom === 'auto' ) {
+                                                               if ( $region.data( 'searchsuggest-expand-dir' ) ) {
+                                                                       // If the markup explicitly contains a direction, use it.
+                                                                       expandFrom = $region.data( 'searchsuggest-expand-dir' );
+                                                               } else {
+                                                                       regionWidth = $region.outerWidth();
+                                                                       docWidth = $( document ).width();
+                                                                       if ( ( regionWidth / docWidth  ) > 0.85 ) {
+                                                                               // If the input size takes up more than 85% of the document horizontally
+                                                                               // expand the suggestions to the writing direction's native end.
+                                                                               expandFrom = 'start';
+                                                                       } else {
+                                                                               // Calculate the center points of the input and document
+                                                                               regionCenter = $region.offset().left + regionWidth / 2;
+                                                                               docCenter = docWidth / 2;
+                                                                               if ( Math.abs( regionCenter - docCenter ) / docCenter < 0.10 ) {
+                                                                                       // If the input's center is within 10% of the document center
+                                                                                       // use the writing direction's native end.
+                                                                                       expandFrom = 'start';
+                                                                               } else {
+                                                                                       // Otherwise expand the input from the closest side of the page,
+                                                                                       // towards the side of the page with the most free open space
+                                                                                       expandFrom = regionCenter > docCenter ? 'right' : 'left';
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+
+                                                       if ( expandFrom === 'start' ) {
+                                                               expandFrom = docDir === 'rtl' ? 'right': 'left';
+
+                                                       } else if ( expandFrom === 'end' ) {
+                                                               expandFrom = docDir === 'rtl' ? 'left': 'right';
+                                                       }
+
+                                                       return expandFrom;
+
+                                               }( context.config.expandFrom ) );
+
+                                               if ( context.config.expandFrom === 'left' ) {
+                                                       // Expand from left
                                                        newCSS.left = context.config.$region.offset().left;
                                                        newCSS.right = 'auto';
                                                } else {
+                                                       // Expand from right
                                                        newCSS.left = 'auto';
                                                        newCSS.right = $( 'body' ).width() - ( context.config.$region.offset().left + context.config.$region.outerWidth() );
                                                }
+
                                                context.data.$container.css( newCSS );
                                                var $results = context.data.$container.children( '.suggestions-results' );
                                                $results.empty();
@@ -344,14 +408,15 @@ $.suggestions = {
 $.fn.suggestions = function () {
 
        // Multi-context fields
-       var returnValue;
-       var args = arguments;
+       var returnValue,
+               args = arguments;
 
        $(this).each( function () {
+               var context, key;
 
                /* Construction / Loading */
 
-               var context = $(this).data( 'suggestions-context' );
+               context = $(this).data( 'suggestions-context' );
                if ( context === undefined || context === null ) {
                        context = {
                                config: {
@@ -365,7 +430,7 @@ $.fn.suggestions = function () {
                                        'delay': 120,
                                        'submitOnClick': false,
                                        'maxExpandFactor': 3,
-                                       'positionFromLeft': true,
+                                       'expandFrom': 'auto',
                                        'highlightInput': false
                                }
                        };
@@ -377,7 +442,7 @@ $.fn.suggestions = function () {
                if ( args.length > 0 ) {
                        if ( typeof args[0] === 'object' ) {
                                // Apply set of properties
-                               for ( var key in args[0] ) {
+                               for ( key in args[0] ) {
                                        $.suggestions.configure( context, key, args[0][key] );
                                }
                        } else if ( typeof args[0] === 'string' ) {
@@ -409,22 +474,9 @@ $.fn.suggestions = function () {
                                $textbox: $(this),
                                selectedWithMouse: false
                        };
-                       // Setup the css for positioning the results box
-                       var newCSS = {
-                               top: Math.round( context.data.$textbox.offset().top + context.data.$textbox.outerHeight() ),
-                               width: context.data.$textbox.outerWidth(),
-                               display: 'none'
-                       };
-                       if ( context.config.positionFromLeft ) {
-                               newCSS.left = context.config.$region.offset().left;
-                               newCSS.right = 'auto';
-                       } else {
-                               newCSS.left = 'auto';
-                               newCSS.right = $( 'body' ).width() - ( context.config.$region.offset().left + context.config.$region.outerWidth() );
-                       }
 
                        context.data.$container = $( '<div>' )
-                               .css( newCSS )
+                               .css( 'display', 'none' )
                                .addClass( 'suggestions' )
                                .append(
                                        $( '<div>' ).addClass( 'suggestions-results' )
@@ -476,6 +528,7 @@ $.fn.suggestions = function () {
                                                } )
                                )
                                .appendTo( $( 'body' ) );
+
                        $(this)
                                // Stop browser autocomplete from interfering
                                .attr( 'autocomplete', 'off')
@@ -521,6 +574,7 @@ $.fn.suggestions = function () {
                                        $.suggestions.cancel( context );
                                } );
                }
+
                // Store the context for next time
                $(this).data( 'suggestions-context', context );
        } );
index 21dc3e1..2940d6f 100644 (file)
 
                        for ( i = 0; i < len; i++ ) {
                                parser = false;
-                               sortType = $headers.eq( i ).data( 'sort-type' );
+                               sortType = $headers.eq( i ).data( 'sortType' );
                                if ( sortType !== undefined ) {
                                        parser = getParserById( sortType );
                                }
                                new RegExp( /^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/)
                        ],
                        currency: [
-                               new RegExp( /^[£$€?.]/),
-                               new RegExp( /[£$€]/g)
+                               new RegExp( /(^[£$€¥]|[£$€¥]$)/),
+                               new RegExp( /[£$€¥]/g)
                        ],
                        url: [
                                new RegExp( /^(https?|ftp|file):\/\/$/),
index 583c1ed..abb0fa3 100644 (file)
                $.fn.extend({
                        focus: ( function ( jqFocus ) {
                                return function () {
+                                       var $w, state, result;
                                        if ( arguments.length === 0 ) {
-                                               var $w = $( window );
-                                               var state = {top: $w.scrollTop(), left: $w.scrollLeft()};
-                                               var result = jqFocus.apply( this, arguments );
+                                               $w = $( window );
+                                               state = {top: $w.scrollTop(), left: $w.scrollLeft()};
+                                               result = jqFocus.apply( this, arguments );
                                                window.scrollTo( state.top, state.left );
                                                return result;
                                        }
                         * in some browsers (IE/Opera)
                         */
                        getSelection: function () {
-                               var e = this.get( 0 );
-                               var retval = '';
-                               if ( $(e).is( ':hidden' ) ) {
+                               var retval, range,
+                                       el = this.get( 0 );
+
+                               if ( $(el).is( ':hidden' ) ) {
                                        // Do nothing
+                                       retval = '';
                                } else if ( document.selection && document.selection.createRange ) {
-                                       activateElementOnIE( e );
-                                       var range = document.selection.createRange();
+                                       activateElementOnIE( el );
+                                       range = document.selection.createRange();
                                        retval = range.text;
-                               } else if ( e.selectionStart || e.selectionStart === 0 ) {
-                                       retval = e.value.substring( e.selectionStart, e.selectionEnd );
+                               } else if ( el.selectionStart || el.selectionStart === 0 ) {
+                                       retval = el.value.substring( el.selectionStart, el.selectionEnd );
                                }
+
                                return retval;
                        },
                        /**
@@ -88,6 +92,7 @@
                        encapsulateSelection: function ( options ) {
                                return this.each( function () {
                                        var selText, scrollTop, insertText,
+                                               isSample, range, range2, range3, startPos, endPos,
                                                pre = options.pre,
                                                post = options.post;
 
                                         * Wrap each line of the selected text with pre and post
                                         */
                                        function doSplitLines( selText, pre, post ) {
-                                               var insertText = '';
-                                               var selTextArr = selText.split( '\n' );
-                                               for ( var i = 0; i < selTextArr.length; i++ ) {
+                                               var i,
+                                                       insertText = '',
+                                                       selTextArr = selText.split( '\n' );
+                                               for ( i = 0; i < selTextArr.length; i++ ) {
                                                        insertText += pre + selTextArr[i] + post;
                                                        if ( i !== selTextArr.length - 1 ) {
                                                                insertText += '\n';
                                                return insertText;
                                        }
 
-                                       var isSample = false;
+                                       isSample = false;
                                        if ( this.style.display === 'none' ) {
                                                // Do nothing
                                        } else if ( document.selection && document.selection.createRange ) {
 
                                                selText = $(this).textSelection( 'getSelection' );
                                                scrollTop = this.scrollTop;
-                                               var range = document.selection.createRange();
+                                               range = document.selection.createRange();
 
                                                checkSelectedText();
                                                insertText = pre + selText + post;
                                                        insertText = doSplitLines( selText, pre, post );
                                                }
                                                if ( options.ownline && range.moveStart ) {
-                                                       var range2 = document.selection.createRange();
+                                                       range2 = document.selection.createRange();
                                                        range2.collapse();
                                                        range2.moveStart( 'character', -1 );
                                                        // FIXME: Which check is correct?
                                                                insertText = "\n" + insertText;
                                                                pre += "\n";
                                                        }
-                                                       var range3 = document.selection.createRange();
+                                                       range3 = document.selection.createRange();
                                                        range3.collapse( false );
                                                        range3.moveEnd( 'character', 1 );
                                                        if ( range3.text !== "\r" && range3.text !== "\n" && range3.text !== "" ) {
                                                }
 
                                                selText = $(this).textSelection( 'getSelection' );
-                                               var startPos = this.selectionStart;
-                                               var endPos = this.selectionEnd;
+                                               startPos = this.selectionStart;
+                                               endPos = this.selectionEnd;
                                                scrollTop = this.scrollTop;
                                                checkSelectedText();
                                                if ( options.selectionStart !== undefined
                                                // whatever we do later (bug 31847).
                                                activateElementOnIE( e );
 
-                                               // IE Support
-                                               var preFinished = false;
-                                               var periFinished = false;
-                                               var postFinished = false;
-                                               var preText, rawPreText, periText;
-                                               var rawPeriText, postText, rawPostText;
-                                               // Create range containing text in the selection
-                                               var periRange = document.selection.createRange().duplicate();
-                                               // Create range containing text before the selection
-                                               var preRange = rangeForElementIE( 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;
+
+                                               preRange = rangeForElementIE( e ),
                                                // Move the end where we need it
                                                preRange.setEndPoint( 'EndToStart', periRange );
-                                               // Create range containing text after the selection
-                                               var postRange = rangeForElementIE( e );
+
+                                               postRange = rangeForElementIE( e );
                                                // Move the start where we need it
                                                postRange.setEndPoint( 'StartToEnd', periRange );
+
                                                // Load the text values we need to compare
                                                preText = rawPreText = preRange.text;
                                                periText = rawPeriText = periRange.text;
                                                postText = rawPostText = postRange.text;
+
                                                /*
                                                 * Check each range for trimmed newlines by shrinking the range by 1
                                                 * character and seeing if the text property has changed. If it has
                         */
                        setSelection: function ( options ) {
                                return this.each( function () {
+                                       var selection, length, newLines;
                                        if ( $(this).is( ':hidden' ) ) {
                                                // Do nothing
                                        } else if ( this.selectionStart || this.selectionStart === 0 ) {
                                                        this.selectionEnd = options.end;
                                                }
                                        } else if ( document.body.createTextRange ) {
-                                               var selection = rangeForElementIE( this );
-                                               var length = this.value.length;
+                                               selection = rangeForElementIE( this );
+                                               length = this.value.length;
                                                // IE doesn't count \n when computing the offset, so we won't either
-                                               var newLines = this.value.match( /\n/g );
+                                               newLines = this.value.match( /\n/g );
                                                if ( newLines ) {
                                                        length = length - newLines.length;
                                                }
                                                // Silence that error
                                                try {
                                                        selection.select();
-                                               } catch( e ) { }
+                                               } catch ( e ) { }
                                        }
                                });
                        },
                                        return ( $.client.profile().platform === 'mac' ? 13 : ( $.client.profile().platform === 'linux' ? 15 : 16 ) ) * row;
                                }
                                return this.each(function () {
+                                       var scroll, range, savedRange, pos, oldScrollTop;
                                        if ( $(this).is( ':hidden' ) ) {
                                                // Do nothing
                                        } else if ( this.selectionStart || this.selectionStart === 0 ) {
                                                // Mozilla
-                                               var scroll = getCaretScrollPosition( this );
+                                               scroll = getCaretScrollPosition( this );
                                                if ( options.force || scroll < $(this).scrollTop() ||
                                                                scroll > $(this).scrollTop() + $(this).height() ) {
                                                        $(this).scrollTop( scroll );
                                                 * cover that case, we'll force it to act by moving one
                                                 * character back and forth.
                                                 */
-                                               var range = document.body.createTextRange();
-                                               var savedRange = document.selection.createRange();
-                                               var pos = $(this).textSelection( 'getCaretPosition' );
-                                               var oldScrollTop = this.scrollTop;
+                                               range = document.body.createTextRange();
+                                               savedRange = document.selection.createRange();
+                                               pos = $(this).textSelection( 'getCaretPosition' );
+                                               oldScrollTop = this.scrollTop;
                                                range.moveToElementText( this );
                                                range.collapse();
                                                range.move( 'character', pos + 1);
diff --git a/resources/mediawiki.action/mediawiki.action.edit.preview.js b/resources/mediawiki.action/mediawiki.action.edit.preview.js
new file mode 100644 (file)
index 0000000..cddf6cc
--- /dev/null
@@ -0,0 +1,135 @@
+/**
+ * Live edit preview.
+ */
+( function ( mw, $ ) {
+
+       /**
+        * @param {jQuery.Event} e
+        */
+       function doLivePreview( e ) {
+               var $wikiPreview, copySelectors, removeSelectors, $copyElements, $spinner,
+                       targetUrl, postData, $previewDataHolder;
+
+               e.preventDefault();
+
+               $( mw ).trigger( 'LivePreviewPrepare' );
+
+               $wikiPreview = $( '#wikiPreview' );
+
+               // Show #wikiPreview if it's hidden to be able to scroll to it
+               // (if it is hidden, it's also empty, so nothing changes in the rendering)
+               $wikiPreview.show();
+
+               // Jump to where the preview will appear
+               $wikiPreview[0].scrollIntoView();
+
+               // List of selectors matching elements that we will
+               // update from from the ajax-loaded preview page.
+               copySelectors = [
+                       // Main
+                       '#wikiPreview',
+                       '#wikiDiff',
+                       '#catlinks',
+                       '.hiddencats',
+                       '#p-lang',
+                       // Editing-related
+                       '.templatesUsed',
+                       '.mw-summary-preview'
+               ];
+               $copyElements = $( copySelectors.join( ',' ) );
+
+               // Not shown during normal preview, to be removed if present
+               removeSelectors = [
+                       '.mw-newarticletext'
+               ];
+
+               $( removeSelectors.join( ',' ) ).remove();
+
+               $spinner = $.createSpinner( {
+                       size: 'large',
+                       type: 'block'
+               });
+               $wikiPreview.before( $spinner );
+               $spinner.css( {
+                       position: 'absolute',
+                       marginTop: $spinner.height()
+               } );
+               // Make sure preview area is at least as tall as 2x the height of the spinner.
+               // 1x because if its smaller, it will spin behind the edit toolbar.
+               // (this happens on the first preview when editPreview is still empty)
+               // 2x because the spinner has 1x margin top breathing room.
+               $wikiPreview.css( 'minHeight', $spinner.height() * 2 );
+
+               // Can't use fadeTo because it calls show(), and we might want to keep some elements hidden
+               // (e.g. empty #catlinks)
+               $copyElements.animate( {
+                       opacity: 0.4
+               }, 'fast' );
+
+               $previewDataHolder = $( '<div>' );
+               targetUrl = $( '#editform' ).attr( 'action' );
+
+               // Gather all the data from the form
+               postData = $( '#editform' ).formToArray();
+               postData.push( {
+                       name: e.target.name,
+                       value: ''
+               } );
+
+               // Load new preview data.
+               // TODO: This should use the action=parse API instead of loading the entire page
+               // Though that requires figuring out how to conver that raw data into proper HTML.
+               $previewDataHolder.load( targetUrl + ' ' + copySelectors.join( ',' ), postData, function () {
+                       var i, $from;
+                       // Copy the contents of the specified elements from the loaded page to the real page.
+                       // Also copy their class attributes.
+                       for ( i = 0; i < copySelectors.length; i++ ) {
+                               $from = $previewDataHolder.find( copySelectors[i] );
+
+                               $( copySelectors[i] )
+                                       .empty()
+                                       .append( $from.contents() )
+                                       .attr( 'class', $from.attr( 'class' ) );
+                       }
+
+                       $spinner.remove();
+                       $copyElements.animate( {
+                               opacity: 1
+                       }, 'fast' );
+
+                       $( mw ).trigger( 'LivePreviewDone', [copySelectors] );
+               } );
+       }
+
+       $( document ).ready( function () {
+               // 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
+               // have to fish and (hopefully) put them in the right place (since skins
+               // can change where they are output).
+
+               if ( !document.getElementById( 'p-lang' ) && document.getElementById( 'p-tb' ) ) {
+                       $( '#p-tb' ).after(
+                               $( '<div>' ).prop( 'id', 'p-lang' )
+                       );
+               }
+
+               if ( !$( '.mw-summary-preview' ).length ) {
+                       $( '.editCheckboxes' ).before(
+                               $( '<div>' ).prop( 'className', 'mw-summary-preview' )
+                       );
+               }
+
+               if ( !document.getElementById( 'wikiDiff' ) && document.getElementById( 'wikiPreview' ) ) {
+                       $( '#wikiPreview' ).after(
+                               $( '<div>' ).prop( 'id', 'wikiDiff')
+                       );
+               }
+
+               // Make sure diff styles are loaded
+               mw.loader.load( 'mediawiki.action.history.diff' );
+
+               $( document.body ).on( 'click', '#wpPreview, #wpDiff', doLivePreview );
+       } );
+
+}( mediaWiki, jQuery ) );
index caf9a9f..d02d432 100644 (file)
@@ -1,24 +1,30 @@
 /*
- * JavaScript to enable right click edit functionality
+ * JavaScript to enable right click edit functionality.
+ * When the user right-clicks in a heading, it will open the
+ * edit screen.
  */
-jQuery( function( $ ) {
+jQuery( function ( $ ) {
        // Select all h1-h6 elements that contain editsection links
-       $( 'h1:has(.editsection a), ' +
-               'h2:has(.editsection a), ' +
-               'h3:has(.editsection a), ' +
-               'h4:has(.editsection a), ' +
-               'h5:has(.editsection a), ' +
-               'h6:has(.editsection a)'
-       ).live( 'contextmenu', function( e ) {
-               // Get href of the [edit] link
-               var href = $(this).find( '.editsection a' ).attr( 'href' );
-               // Check if target is the anchor link itself. If so, don't suppress the context menu; this
-               // way the reader can still do things like copy URL, open in new tab etc.
-               var $target = $( e.target );
-               if ( !$target.is( 'a' ) && !$target.parent().is( '.editsection' ) ){
+       // 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' );
+               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;
                        e.preventDefault();
-                       return false;
                }
        } );
 } );
index c8c18e6..cc6f704 100644 (file)
@@ -1,8 +1,7 @@
 /**
  * Additional mw.Api methods to assist with API calls related to categories.
  */
-
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        $.extend( mw.Api.prototype, {
                /**
                 * @param err {Function} optional callback to run if api error
                 * @return ajax call object
                 */
-               isCategory: function( title, success, err ) {
-                       var params = {
-                                       prop: 'categoryinfo',
-                                       titles: title.toString()
-                               },
-                               ok = function( data ) {
-                                       var exists = false;
-                                       if ( data.query && data.query.pages ) {
-                                               $.each( data.query.pages, function( id, page ) {
-                                                       if ( page.categoryinfo ) {
-                                                               exists = true;
-                                                       }
-                                               } );
-                                       }
-                                       success( exists );
-                               };
+               isCategory: function ( title, success, err ) {
+                       var params, ok;
+                       params = {
+                               prop: 'categoryinfo',
+                               titles: title.toString()
+                       };
+                       ok = function ( data ) {
+                               var exists = false;
+                               if ( data.query && data.query.pages ) {
+                                       $.each( data.query.pages, function ( id, page ) {
+                                               if ( page.categoryinfo ) {
+                                                       exists = true;
+                                               }
+                                       } );
+                               }
+                               success( exists );
+                       };
 
                        return this.get( params, { ok: ok, err: err } );
                },
                 * @param err {Function} optional callback to run if api error
                 * @return {jqXHR}
                 */
-               getCategoriesByPrefix: function( prefix, success, err ) {
-
-                       // fetch with allpages to only get categories that have a corresponding description page.
-                       var params = {
+               getCategoriesByPrefix: function ( prefix, success, err ) {
+                       // Fetch with allpages to only get categories that have a corresponding description page.
+                       var params, ok;
+                       params = {
                                'list': 'allpages',
                                'apprefix': prefix,
                                'apnamespace': mw.config.get('wgNamespaceIds').category
                        };
-
-                       var ok = function( data ) {
+                       ok = function ( data ) {
                                var texts = [];
                                if ( data.query && data.query.allpages ) {
-                                       $.each( data.query.allpages, function( i, category ) {
+                                       $.each( data.query.allpages, function ( i, category ) {
                                                texts.push( new mw.Title( category.title ).getNameText() );
                                        } );
                                }
@@ -71,7 +70,7 @@
                 * @param async {Boolean} optional asynchronousness (default = true = async)
                 * @return {jqXHR}
                 */
-               getCategories: function( title, success, err, async ) {
+               getCategories: function ( title, success, err, async ) {
                        var params, ok;
                        params = {
                                prop: 'categories',
                        if ( async === undefined ) {
                                async = true;
                        }
-                       ok = function( data ) {
+                       ok = function ( data ) {
                                var ret = false;
                                if ( data.query && data.query.pages ) {
-                                       $.each( data.query.pages, function( id, page ) {
+                                       $.each( data.query.pages, function ( id, page ) {
                                                if ( page.categories ) {
                                                        if ( typeof ret !== 'object' ) {
                                                                ret = [];
                                                        }
-                                                       $.each( page.categories, function( i, cat ) {
+                                                       $.each( page.categories, function ( i, cat ) {
                                                                ret.push( new mw.Title( cat.title ) );
                                                        } );
                                                }
 
        } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index 5197396..49af937 100644 (file)
@@ -1,8 +1,7 @@
 /**
  * Additional mw.Api methods to assist with API calls related to editing wiki pages.
  */
-
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        // Cache token so we don't have to keep fetching new ones for every single request.
        var cachedToken = null;
                 * @param err {Function} [optional] error callback
                 * @return {jqXHR}
                 */
-               postWithEditToken: function( params, ok, err ) {
-                       var api = this, useTokenToPost, getTokenIfBad;
+               postWithEditToken: function ( params, ok, err ) {
+                       var useTokenToPost, getTokenIfBad,
+                               api = this;
                        if ( cachedToken === null ) {
                                // We don't have a valid cached token, so get a fresh one and try posting.
                                // We do not trap any 'badtoken' or 'notoken' errors, because we don't want
                                // an infinite loop. If this fresh token is bad, something else is very wrong.
-                               useTokenToPost = function( token ) {
+                               useTokenToPost = function ( token ) {
                                        params.token = token;
                                        api.post( params, ok, err );
                                };
                                // We do have a token, but it might be expired. So if it is 'bad' then
                                // start over with a new token.
                                params.token = cachedToken;
-                               getTokenIfBad = function( code, result ) {
+                               getTokenIfBad = function ( code, result ) {
                                        if ( code === 'badtoken' ) {
-                                               cachedToken = null; // force a new token
+                                               // force a new token, clear any old one
+                                               cachedToken = null;
                                                api.postWithEditToken( params, ok, err );
                                        } else {
                                                err( code, result );
                 * @param err {Function} error callback
                 * @return {jqXHR}
                 */
-               getEditToken: function( tokenCallback, err ) {
+               getEditToken: function ( tokenCallback, err ) {
                        var parameters = {
                                        action: 'tokens',
                                        type: 'edit'
                                },
-                               ok = function( data ) {
+                               ok = function ( data ) {
                                        var token;
                                        // If token type is not available for this user,
                                        // key 'edittoken' is missing or can contain Boolean false
@@ -96,7 +97,7 @@
                 * @param err {Function} error handler
                 * @return {jqXHR}
                 */
-               newSection: function( title, header, message, ok, err ) {
+               newSection: function ( title, header, message, ok, err ) {
                        var params = {
                                action: 'edit',
                                section: 'new',
 
         } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index 080725a..a184e3c 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * mw.Api objects represent the API of a particular MediaWiki server.
  */
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        /**
         * @var defaultOptions {Object}
@@ -47,7 +47,7 @@
         * @param options {Object} See defaultOptions documentation above. Ajax options can also be
         * overridden for each individual request to jQuery.ajax() later on.
         */
-       mw.Api = function( options ) {
+       mw.Api = function ( options ) {
 
                if ( options === undefined ) {
                        options = {};
@@ -91,7 +91,7 @@
                 * @param {Object|Function} [optional] ajax options
                 * @return {jQuery.Promise}
                 */
-               get: function( parameters, ajaxOptions ) {
+               get: function ( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                        ajaxOptions.type = 'GET';
                        return this.ajax( parameters, ajaxOptions );
                 * @param {Object|Function} [optional] ajax options
                 * @return {jQuery.Promise}
                 */
-               post: function( parameters, ajaxOptions ) {
+               post: function ( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                        ajaxOptions.type = 'POST';
                        return this.ajax( parameters, ajaxOptions );
                 * - done: API response data as first argument
                 * - fail: errorcode as first arg, details (string or object) as second arg.
                 */
-               ajax: function( parameters, ajaxOptions ) {
+               ajax: function ( parameters, ajaxOptions ) {
                        var token,
                                apiDeferred = $.Deferred();
 
                'exists'
        ];
 
-})( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
index e784ef7..e8d1b3e 100644 (file)
@@ -12,7 +12,7 @@
                 * @param err {Function} [optional] deprecated (error callback)
                 * @return {jQuery.Promise}
                 */
-               parse: function( wikiText, ok, err ) {
+               parse: function ( wikiText, ok, err ) {
                        var apiDeferred = $.Deferred();
 
                        // Backwards compatibility (< MW 1.20)
@@ -39,4 +39,4 @@
                }
        } );
 
-} )( mediaWiki, jQuery );
+}( mediaWiki, jQuery ) );
index 5435945..1f7e275 100644 (file)
@@ -2,7 +2,7 @@
  * Additional mw.Api methods to assist with API calls to the API module of the TitleBlacklist extension.
  */
 
-( function( $, mw, undefined ) {
+( function ( mw, $ ) {
 
        $.extend( mw.Api.prototype, {
                /**
                 * @param err {Function} optional callback to run if api error
                 * @return {jqXHR}
                 */
-               isBlacklisted: function( title, success, err ) {
+               isBlacklisted: function ( title, success, err ) {
                        var     params = {
                                        action: 'titleblacklist',
                                        tbaction: 'create',
                                        tbtitle: title.toString()
                                },
-                               ok = function( data ) {
+                               ok = function ( data ) {
                                        var result;
 
                                        // this fails open (if nothing valid is returned by the api, allows the title)
@@ -48,4 +48,5 @@
                }
 
        } );
-} )( jQuery, mediaWiki );
+
+}( mediaWiki, jQuery ) );
index 302a2d3..d323442 100644 (file)
@@ -2,7 +2,7 @@
  * Additional mw.Api methods to assist with (un)watching wiki pages.
  * @since 1.19
  */
-( function( $, mw ) {
+( function ( mw, $ ) {
 
        /**
         * @context {mw.Api}
@@ -53,4 +53,4 @@
 
        } );
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );
diff --git a/resources/mediawiki.language/languages/am.js b/resources/mediawiki.language/languages/am.js
deleted file mode 100644 (file)
index fa5d3c5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Amharic (አማርኛ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/ar.js b/resources/mediawiki.language/languages/ar.js
deleted file mode 100644 (file)
index d21df7e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Arabic (العربية) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 6 );
-       if ( count == 0 ) {
-               return forms[0];
-       }
-       if ( count == 1 ) {
-               return forms[1];
-       }
-       if ( count == 2 ) {
-               return forms[2];
-       }
-       if ( count % 100 >= 3 && count % 100 <= 10 ) {
-               return forms[3];
-       }
-       if ( count % 100 >= 11 && count % 100 <= 99 ) {
-               return forms[4];
-       }
-       return forms[5];
-};
-
diff --git a/resources/mediawiki.language/languages/bat-smg.js b/resources/mediawiki.language/languages/bat-smg.js
deleted file mode 100644 (file)
index 6e3f4cc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Samogitian (Žemaitėška) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       count = Math.abs( count );
-       if ( count === 0 || ( count % 100 === 0 || ( count % 100 >= 10 && count % 100 < 20 ) ) ) {
-               return forms[2];
-       }
-       if ( count % 10 === 1 ) {
-               return forms[0];
-       }
-       if ( count % 10 === 2 ) {
-               return forms[1];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/be-tarask.js b/resources/mediawiki.language/languages/be-tarask.js
deleted file mode 100644 (file)
index c19f47d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Belarusian in Taraskievica orthography (Беларуская (тарашкевіца)) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/be.js b/resources/mediawiki.language/languages/be.js
deleted file mode 100644 (file)
index 97ceee3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Belarusian normative (Беларуская) language functions
- */
-
-mediaWiki.language.convertPlural = function convertPlural( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/bh.js b/resources/mediawiki.language/languages/bh.js
deleted file mode 100644 (file)
index abbf8bd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Bihari (भोजपुरी) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 9affcf0..c0c77aa 100644 (file)
@@ -2,23 +2,6 @@
  * Bosnian (bosanski) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'bs', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/cs.js b/resources/mediawiki.language/languages/cs.js
deleted file mode 100644 (file)
index 04dda99..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.]) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       switch ( count ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/cu.js b/resources/mediawiki.language/languages/cu.js
deleted file mode 100644 (file)
index 35a5473..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Old Church Slavonic (Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
diff --git a/resources/mediawiki.language/languages/cy.js b/resources/mediawiki.language/languages/cy.js
deleted file mode 100644 (file)
index 333d956..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Welsh (Cymraeg) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 6 );
-       count = Math.abs( count );
-       if ( count >= 0 && count <= 3 ) {
-               return forms[count];
-       }
-       if ( count == 6 ) {
-               return forms[4];
-       }
-       return forms[5];
-};
index e3c5808..a42a8f7 100644 (file)
@@ -2,21 +2,6 @@
  * Lower Sorbian (Dolnoserbski) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( Math.abs( count ) % 100 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'dsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/fr.js b/resources/mediawiki.language/languages/fr.js
deleted file mode 100644 (file)
index bfb52d2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * French (Français) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 51fce35..a27b489 100644 (file)
@@ -2,18 +2,6 @@
  * Irish (Gaeilge) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
-
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'ga', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/gd.js b/resources/mediawiki.language/languages/gd.js
deleted file mode 100644 (file)
index 5ac2007..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Scots Gaelic (Gàidhlig) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       count = Math.abs( count );
-       if ( count === 1 ) {
-               return forms[0];
-       }
-       if ( count === 2 ) {
-               return forms[1];
-       }
-       if ( count >= 3 && count <= 10 ) {
-               return forms[2];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/gv.js b/resources/mediawiki.language/languages/gv.js
deleted file mode 100644 (file)
index afc2b5d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Manx (Gaelg) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       if ( count > 0 && ( count % 20 ) === 0 ) {
-               return forms[0];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[1];
-               case 2:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
index e737a7c..d35f77e 100644 (file)
@@ -2,17 +2,6 @@
  * Hebrew (עברית) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 && forms[2] ) {
-               return forms[2];
-       }
-       return forms[1];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'he', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/hi.js b/resources/mediawiki.language/languages/hi.js
deleted file mode 100644 (file)
index a22a0e1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Hindi (हिन्दी) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/hr.js b/resources/mediawiki.language/languages/hr.js
deleted file mode 100644 (file)
index e3ce291..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Croatian (hrvatski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
index 6aa993c..211d67b 100644 (file)
@@ -2,22 +2,6 @@
  * Upper Sorbian (Hornjoserbsce) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( Math.abs( count ) % 100 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
-
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms =mw.language.getData( 'hsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
index b51b2b6..215e750 100644 (file)
@@ -2,11 +2,6 @@
  * Armenian (Հայերեն) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( Math.abs( count ) <= 1 ) ? forms[0] : forms[1];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'hy', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/ksh.js b/resources/mediawiki.language/languages/ksh.js
deleted file mode 100644 (file)
index ed90732..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Ripuarian (Ripoarƒósh) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 ) {
-               return forms[2];
-       }
-       return forms[1];
-};
diff --git a/resources/mediawiki.language/languages/ln.js b/resources/mediawiki.language/languages/ln.js
deleted file mode 100644 (file)
index 9b9e456..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Lingala (Lingála) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/lt.js b/resources/mediawiki.language/languages/lt.js
deleted file mode 100644 (file)
index 04964af..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Lithuanian (Lietuvių) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       // if the number is not mentioned in message, then use $form[0] for singular and $form[1] for plural or zero
-       if ( forms.length == 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count % 10 == 1 && count % 100 != 11 ) {
-               return forms[0];
-       }
-       if ( count % 10 >= 2 && ( count % 100 < 10 || count % 100 >= 20 ) ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/lv.js b/resources/mediawiki.language/languages/lv.js
deleted file mode 100644 (file)
index d4bec44..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Latvian (Latviešu) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );        
-       return ( ( count % 10 == 1 ) && ( count % 100 != 11 ) ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mg.js b/resources/mediawiki.language/languages/mg.js
deleted file mode 100644 (file)
index b65e96e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Malagasy (Malagasy) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mk.js b/resources/mediawiki.language/languages/mk.js
deleted file mode 100644 (file)
index c89bbac..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Macedonian (Македонски) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( ( count % 10 === 1 ) && ( count % 100 !== 11 ) ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mo.js b/resources/mediawiki.language/languages/mo.js
deleted file mode 100644 (file)
index 0c4b696..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Moldavian (Молдовеняскэ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || count % 100 < 20 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/mt.js b/resources/mediawiki.language/languages/mt.js
deleted file mode 100644 (file)
index 44c7bff..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Maltese (Malti) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || ( count % 100 > 1 && count % 100 < 11 ) ) {
-               return forms[1];
-       }
-       if ( count % 100 > 10 && count % 100 < 20 ) {
-               return forms[2];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/nso.js b/resources/mediawiki.language/languages/nso.js
deleted file mode 100644 (file)
index 30cf189..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Northern Sotho (Sesotho sa Leboa) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/pl.js b/resources/mediawiki.language/languages/pl.js
deleted file mode 100644 (file)
index 03e0d84..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Polish (polski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       count = Math.abs( count );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       switch ( count % 10 ) {
-               case 2:
-               case 3:
-               case 4:
-                       if ( count / 10 % 10 != 1 ) {
-                               return forms[1];
-                       }
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/ro.js b/resources/mediawiki.language/languages/ro.js
deleted file mode 100644 (file)
index 42610fe..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Romanian (Română) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || count % 100 < 20 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
index 42be4f9..cfdbfc3 100644 (file)
@@ -2,26 +2,6 @@
  * Russian (Русский) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];                
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'ru', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/se.js b/resources/mediawiki.language/languages/se.js
deleted file mode 100644 (file)
index e1ae5b9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Northern Sami (Sámegiella) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( !forms || forms.length === 0 ) {
-                       return '';
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/sh.js b/resources/mediawiki.language/languages/sh.js
deleted file mode 100644 (file)
index 719b0c5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Serbo-Croatian (Srpskohrvatski / Српскохрватски) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sk.js b/resources/mediawiki.language/languages/sk.js
deleted file mode 100644 (file)
index 21a22b2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Slovak (Slovenƒçina) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 || count == 3 || count == 4 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
index cfb5781..acd00bf 100644 (file)
@@ -2,23 +2,6 @@
  * Slovenian (Slovenščina) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 5 );
-       if ( count % 100 == 1 ) {
-               return forms[0];
-       }
-       if ( count % 100 == 2 ) {
-               return forms[1];
-       }
-       if ( count % 100 == 3 || count % 100 == 4 ) {
-               return forms[2];
-       }
-       if ( count != 0 ) {
-               return forms[3];
-       }
-       return forms[4];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'sl', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/sma.js b/resources/mediawiki.language/languages/sma.js
deleted file mode 100644 (file)
index 8163c42..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Southern Sami (Åarjelsaemien) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( !forms || forms.length === 0 ) {
-                       return '';
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/sr-ec.js b/resources/mediawiki.language/languages/sr-ec.js
deleted file mode 100644 (file)
index af48eb0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Serbian (cyrillic script) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sr-el.js b/resources/mediawiki.language/languages/sr-el.js
deleted file mode 100644 (file)
index fd6ca01..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Serbian (latin script) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sr.js b/resources/mediawiki.language/languages/sr.js
deleted file mode 100644 (file)
index 25cdc8a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Serbian (Српски / Srpski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return ( count == 1 ) ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/ti.js b/resources/mediawiki.language/languages/ti.js
deleted file mode 100644 (file)
index 69b6d9b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Tigrinya (ትግርኛ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural(forms, 2);
-       return (count <= 1) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/tl.js b/resources/mediawiki.language/languages/tl.js
deleted file mode 100644 (file)
index 29219fd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Tagalog (Tagalog) language functions
- */
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 372d441..ee110b0 100644 (file)
@@ -2,26 +2,6 @@
  * Ukrainian (Українська) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];                
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'uk', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
@@ -29,7 +9,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       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 - 1 ) == 'ь' )
                                word = word.substr(0, word.length - 1 ) + 'я';
@@ -37,7 +17,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                                word = word.substr(0, 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 ) == 'ды' )
                                word = word.substr(0, word.length - 2 ) + 'дов';
@@ -45,7 +25,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                                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 ) == 'ія' )
                                word = word.substr(0, word.length - 2 ) + 'ію';
diff --git a/resources/mediawiki.language/languages/wa.js b/resources/mediawiki.language/languages/wa.js
deleted file mode 100644 (file)
index e177375..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Walloon (Walon) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/mediawiki.cldr.js b/resources/mediawiki.language/mediawiki.cldr.js
new file mode 100644 (file)
index 0000000..6660eca
--- /dev/null
@@ -0,0 +1,28 @@
+/**
+ *  CLDR related utility methods
+ */
+( function( mw ) {
+       "use strict";
+
+       var cldr = {
+               /**
+                * For the number, get the plural for index
+                * 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
+                */
+               getPluralForm: function( number, pluralRules ) {
+                       var pluralFormIndex = 0;
+                       for ( pluralFormIndex = 0; pluralFormIndex < pluralRules.length; pluralFormIndex++ ) {
+                               if ( mw.libs.pluralRuleParser( pluralRules[pluralFormIndex], number ) ) {
+                                       break;
+                               }
+                       }
+                       return pluralFormIndex;
+               }
+       };
+
+       mw.cldr = cldr;
+} )( mediaWiki );
index 8d2ffae..30307a3 100644 (file)
@@ -33,7 +33,7 @@
                 */
                getData: function ( langCode, dataKey ) {
                        var langData = language.data;
-                       if ( langData[langCode] instanceof mw.Map ) {
+                       if ( langData && langData[langCode] instanceof mw.Map ) {
                                return langData[langCode].get( dataKey );
                        }
                        return undefined;
index 1234637..935d4ff 100644 (file)
@@ -43,11 +43,19 @@ var language = {
         * @param forms array List of plural forms
         * @return string Correct form for quantifier in this language
         */
-       convertPlural: function ( count, forms ){
+       convertPlural: function( count, forms ) {
+               var pluralFormIndex = 0;
                if ( !forms || forms.length === 0 ) {
                        return '';
                }
-               return ( parseInt( count, 10 ) === 1 ) ? forms[0] : forms[1];
+               var pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
+               if ( !pluralRules ) {
+                       // default fallback.
+                       return ( count === 1 ) ? forms[0] : forms[1];
+               }
+               pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
+               pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
+               return forms[pluralFormIndex];
        },
 
        /**
diff --git a/resources/mediawiki.libs/CLDRPluralRuleParser.js b/resources/mediawiki.libs/CLDRPluralRuleParser.js
new file mode 100644 (file)
index 0000000..441bc91
--- /dev/null
@@ -0,0 +1,315 @@
+/* This is cldrpluralparser 1.0, ported to MediaWiki ResourceLoader */
+
+/**
+* cldrpluralparser.js
+* A parser engine for CLDR plural rules.
+*
+* Copyright 2012 GPLV3+, Santhosh Thottingal
+*
+* @version 0.1.0-alpha
+* @source https://github.com/santhoshtr/CLDRPluralRuleParser
+* @author Santhosh Thottingal <santhosh.thottingal@gmail.com>
+* @author Timo Tijhof
+* @author Amir Aharoni
+*/
+
+/**
+ * Evaluates a plural rule in CLDR syntax for a number
+ * @param rule
+ * @param number
+ * @return true|false|null
+ */
+( function( mw ) {
+
+function pluralRuleParser(rule, number) {
+       /*
+       Syntax: see http://unicode.org/reports/tr35/#Language_Plural_Rules
+       -----------------------------------------------------------------
+
+       condition     = and_condition ('or' and_condition)*
+       and_condition = relation ('and' relation)*
+       relation      = is_relation | in_relation | within_relation | 'n' <EOL>
+       is_relation   = expr 'is' ('not')? value
+       in_relation   = expr ('not')? 'in' range_list
+       within_relation = expr ('not')? 'within' range_list
+       expr          = 'n' ('mod' value)?
+       range_list    = (range | value) (',' range_list)*
+       value         = digit+
+       digit         = 0|1|2|3|4|5|6|7|8|9
+       range         = value'..'value
+
+       */
+       // Indicates current position in the rule as we parse through it.
+       // Shared among all parsing functions below.
+       var pos = 0;
+
+       var whitespace = makeRegexParser(/^\s+/);
+       var digits = makeRegexParser(/^\d+/);
+
+       var _n_ = makeStringParser('n');
+       var _is_ = makeStringParser('is');
+       var _mod_ = makeStringParser('mod');
+       var _not_ = makeStringParser('not');
+       var _in_ = makeStringParser('in');
+       var _within_ = makeStringParser('within');
+       var _range_ = makeStringParser('..');
+       var _comma_ = makeStringParser(',');
+       var _or_ = makeStringParser('or');
+       var _and_ = makeStringParser('and');
+
+       function debug() {
+               /* console.log.apply(console, arguments);*/
+       }
+
+       debug('pluralRuleParser', rule, number);
+
+       // Try parsers until one works, if none work return null
+       function choice(parserSyntax) {
+               return function () {
+                       for (var i = 0; i < parserSyntax.length; i++) {
+                               var result = parserSyntax[i]();
+                               if (result !== null) {
+                                       return result;
+                               }
+                       }
+                       return null;
+               };
+       }
+
+       // Try several parserSyntax-es in a row.
+       // All must succeed; otherwise, return null.
+       // This is the only eager one.
+       function sequence(parserSyntax) {
+               var originalPos = pos;
+               var result = [];
+               for (var i = 0; i < parserSyntax.length; i++) {
+                       var res = parserSyntax[i]();
+                       if (res === null) {
+                               pos = originalPos;
+                               return null;
+                       }
+                       result.push(res);
+               }
+               return result;
+       }
+
+       // Run the same parser over and over until it fails.
+       // Must succeed a minimum of n times; otherwise, return null.
+       function nOrMore(n, p) {
+               return function () {
+                       var originalPos = pos;
+                       var result = [];
+                       var parsed = p();
+                       while (parsed !== null) {
+                               result.push(parsed);
+                               parsed = p();
+                       }
+                       if (result.length < n) {
+                               pos = originalPos;
+                               return null;
+                       }
+                       return result;
+               };
+       }
+
+       // Helpers -- just make parserSyntax out of simpler JS builtin types
+
+       function makeStringParser(s) {
+               var len = s.length;
+               return function () {
+                       var result = null;
+                       if (rule.substr(pos, len) === s) {
+                               result = s;
+                               pos += len;
+                       }
+                       return result;
+               };
+       }
+
+       function makeRegexParser(regex) {
+               return function () {
+                       var matches = rule.substr(pos).match(regex);
+                       if (matches === null) {
+                               return null;
+                       }
+                       pos += matches[0].length;
+                       return matches[0];
+               };
+       }
+
+       function n() {
+               var result = _n_();
+               if (result === null) {
+                       debug(" -- failed n");
+                       return result;
+               }
+               result = parseInt(number, 10);
+               debug(" -- passed n ", result);
+               return result;
+       }
+
+       var expression = choice([mod, n]);
+
+       function mod() {
+               var result = sequence([n, whitespace, _mod_, whitespace, digits]);
+               if (result === null) {
+                       debug(" -- failed mod");
+                       return null;
+               }
+               debug(" -- passed mod");
+               return parseInt(result[0], 10) % parseInt(result[4], 10);
+       }
+
+       function not() {
+               var result = sequence([whitespace, _not_]);
+               if (result === null) {
+                       debug(" -- failed not");
+                       return null;
+               } else {
+                       return result[1];
+               }
+       }
+
+       function is() {
+               var result = sequence([expression, whitespace, _is_, nOrMore(0, not), whitespace, digits]);
+               if (result !== null) {
+                       debug(" -- passed is");
+                       if (result[3][0] === 'not') {
+                               return result[0] !== parseInt(result[5], 10);
+                       } else {
+                               return result[0] === parseInt(result[5], 10);
+                       }
+               }
+               debug(" -- failed is");
+               return null;
+       }
+
+       function rangeList() {
+               // range_list    = (range | value) (',' range_list)*
+               var result = sequence([choice([range, digits]), nOrMore(0, rangeTail)]);
+               var resultList = [];
+               if (result !== null) {
+                       resultList = resultList.concat(result[0], result[1][0]);
+                       return resultList;
+               }
+               debug(" -- failed rangeList");
+               return null;
+       }
+
+       function rangeTail() {
+               // ',' range_list
+               var result = sequence([_comma_, rangeList]);
+               if (result !== null) {
+                       return result[1];
+               }
+               debug(" -- failed rangeTail");
+               return null;
+       }
+
+       function range() {
+               var i;
+               var result = sequence([digits, _range_, digits]);
+               if (result !== null) {
+                       debug(" -- passed range");
+                       var array = [];
+                       var left = parseInt(result[0], 10);
+                       var right = parseInt(result[2], 10);
+                       for ( i = left; i <= right; i++) {
+                               array.push(i);
+                       }
+                       return array;
+               }
+               debug(" -- failed range");
+               return null;
+       }
+
+       function _in() {
+               // in_relation   = expr ('not')? 'in' range_list
+               var result = sequence([expression, nOrMore(0, not), whitespace, _in_, whitespace, rangeList]);
+               if (result !== null) {
+                       debug(" -- passed _in");
+                       var range_list = result[5];
+                       for (var i = 0; i < range_list.length; i++) {
+                               if (parseInt(range_list[i], 10) === result[0]) {
+                                       return (result[1][0] !== 'not');
+                               }
+                       }
+                       return (result[1][0] === 'not');
+               }
+               debug(" -- failed _in ");
+               return null;
+       }
+
+       function within() {
+               var result = sequence([expression, whitespace, _within_, whitespace, rangeList]);
+               if (result !== null) {
+                       debug(" -- passed within ");
+                       var range_list = result[4];
+                       return (parseInt( range_list[0],10 )<= result[0] && result[0] <= parseInt( range_list[1], 10));
+               }
+               debug(" -- failed within ");
+               return null;
+       }
+
+
+       var relation = choice([is, _in, within]);
+
+       function and() {
+               var result = sequence([relation, whitespace, _and_, whitespace, condition]);
+               if (result) {
+                       debug(" -- passed and");
+                       return result[0] && result[4];
+               }
+               debug(" -- failed and");
+               return null;
+       }
+
+       function or() {
+               var result = sequence([relation, whitespace, _or_, whitespace, condition]);
+               if (result) {
+                       debug(" -- passed or");
+                       return result[0] || result[4];
+               }
+               debug(" -- failed or");
+               return null;
+       }
+
+       var condition = choice([and, or, relation]);
+
+       function isInt(n) {
+               return parseFloat(n) % 1 === 0;
+       }
+
+
+       function start() {
+               if (!isInt(number)) {
+                       return false;
+               }
+               var result = condition();
+               return result;
+       }
+
+
+       var result = start();
+
+       /*
+        * For success, the pos must have gotten to the end of the rule
+        * 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 !== rule.length) {
+               // throw new Error("Parse error at position " + pos.toString() + " in input: " + rule + " result is " + result);
+       }
+
+       return result;
+}
+
+/* For module loaders, e.g. NodeJS, NPM */
+if (typeof module !== 'undefined' && module.exports) {
+       module.exports = pluralRuleParser;
+}
+
+/* pluralRuleParser ends here */
+mw.libs.pluralRuleParser = pluralRuleParser;
+
+} )( mediaWiki );
index 14557d4..a7e059c 100644 (file)
                                        otherAction = action === 'watch' ? 'unwatch' : 'watch';
                                        $li = $link.closest( 'li' );
 
-                                       mw.util.jsMessage( watchResponse.message, 'ajaxwatch' );
+                                       mw.notify( $.parseHTML( watchResponse.message ), { tag: 'watch-self' } );
 
                                        // Set link to opposite
                                        updateWatchLink( $link, otherAction );
                                },
                                // Error
                                function () {
-                                       var cleanTitle, html, link;
+                                       var cleanTitle, msg, link;
 
                                        // Reset link to non-loading mode
                                        updateWatchLink( $link, action );
                                                        title: cleanTitle
                                                }, cleanTitle
                                        );
-                                       html = mw.msg( 'watcherrortext', link );
+                                       msg = mw.messsage( 'watcherrortext', link );
 
                                        // Report to user about the error
-                                       mw.util.jsMessage( html, 'ajaxwatch' );
+                                       mw.notify( msg, { tag: 'watch-self' } );
 
                                }
                        );
index 6b6e586..33cca58 100644 (file)
        }
 
 var
+       /**
+        * Public methods (defined later)
+        */
+       fn,
+
        /**
         * Strip some illegal chars: control chars, colon, less than, greater than,
         * brackets, braces, pipe, whitespace and normal spaces. This still leaves some insanity
@@ -127,7 +132,7 @@ var
        setAll = function ( title, s ) {
                // In normal browsers the match-array contains null/undefined if there's no match,
                // IE returns an empty string.
-               var     matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w{1,5}))?$/ ),
+               var matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w+))?$/ ),
                        ns_match = getNsIdByName( matches[1] );
 
                // Namespace must be valid, and title must be a non-empty string.
@@ -155,7 +160,7 @@ var
        setNameAndExtension = function ( title, raw ) {
                // In normal browsers the match-array contains null/undefined if there's no match,
                // IE returns an empty string.
-               var matches = raw.match( /^(?:)?(.*?)(?:\.(\w{1,5}))?$/ );
+               var matches = raw.match( /^(?:)?(.*?)(?:\.(\w+))?$/ );
 
                // Title must be a non-empty string.
                if ( typeof matches[1] === 'string' && matches[1] !== '' ) {
@@ -221,7 +226,7 @@ var
 
        /* Public methods */
 
-       var fn = {
+       fn = {
                constructor: Title,
 
                /**
index 149e1bf..513cb84 100644 (file)
@@ -1,6 +1,5 @@
 .mw-debug {
        width: 100%;
-       text-align: left;
        background-color: #eee;
        border-top: 1px solid #aaa;
 }
index 36628eb..88af3c6 100644 (file)
@@ -94,9 +94,9 @@
                 * Constructs the HTML for the debugging toolbar
                 */
                buildHtml: function () {
-                       var $container, $bits, panes, id;
+                       var $container, $bits, panes, id, gitInfo;
 
-                       $container = $( '<div id="mw-debug-toolbar" class="mw-debug"></div>' );
+                       $container = $( '<div id="mw-debug-toolbar" class="mw-debug" lang="en" dir="ltr"></div>' );
 
                        $bits = $( '<div class="mw-debug-bits"></div>' );
 
                         * @return {jQuery}
                         */
                        function bitDiv( id ) {
-                               return $( '<div>' ).attr({
+                               return $( '<div>' ).prop({
                                        id: 'mw-debug-' + id,
-                                       'class': 'mw-debug-bit'
+                                       className: 'mw-debug-bit'
                                })
                                .appendTo( $bits );
                        }
                         */
                        function paneLabel( id, text ) {
                                return $( '<a>' )
-                                       .attr({
-                                               'class': 'mw-debug-panelabel',
+                                       .prop({
+                                               className: 'mw-debug-panelabel',
                                                href: '#mw-debug-pane-' + id
                                        })
                                        .text( text );
                         * @return {jQuery}
                         */
                        function paneTriggerBitDiv( id, text, count ) {
-                               if( count ) {
+                               if ( count ) {
                                        text = text + ' (' + count + ')';
                                }
-                               return $( '<div>' ).attr({
+                               return $( '<div>' ).prop({
                                        id: 'mw-debug-' + id,
-                                       'class': 'mw-debug-bit mw-debug-panelink'
+                                       className: 'mw-debug-bit mw-debug-panelink'
                                })
                                .append( paneLabel( id, text ) )
                                .appendTo( $bits );
 
                        paneTriggerBitDiv( 'includes', 'PHP includes', this.data.includes.length );
 
-                       var gitInfo = '';
+                       gitInfo = '';
                        if ( this.data.gitRevision !== false ) {
                                gitInfo = '(' + this.data.gitRevision.substring( 0, 7 ) + ')';
                                if ( this.data.gitViewUrl !== false ) {
-                                       gitInfo = $( '<a>' ).attr( 'href', this.data.gitViewUrl ).text( gitInfo );
+                                       gitInfo = $( '<a>' )
+                                               .attr( 'href', this.data.gitViewUrl )
+                                               .text( gitInfo );
                                }
                        }
 
                        bitDiv( 'mwversion' )
-                               .append( $( '<a href="//www.mediawiki.org/"></a>' ).text( 'MediaWiki' ) )
-                               .append( ': ' + this.data.mwVersion + ' ' )
+                               .append( $( '<a href="//www.mediawiki.org/">MediaWiki</a>' ) )
+                               .append( document.createTextNode( ': ' + this.data.mwVersion + ' ' ) )
                                .append( gitInfo );
 
                        if ( this.data.gitBranch !== false ) {
                                .text( 'Time: ' + this.data.time.toFixed( 5 ) );
 
                        bitDiv( 'memory' )
-                               .text( 'Memory: ' + this.data.memory )
-                               .append( $( '<span title="Peak usage"></span>' ).text( ' (' + this.data.memoryPeak + ')' ) );
-                               
+                               .text( 'Memory: ' + this.data.memory + ' (Peak: ' + this.data.memoryPeak + ')' );
 
                        $bits.appendTo( $container );
 
                                }
 
                                $( '<div>' )
-                                       .attr({
-                                               'class': 'mw-debug-pane',
+                                       .prop({
+                                               className: 'mw-debug-pane',
                                                id: 'mw-debug-pane-' + id
                                        })
                                        .append( panes[id] )
 
                        $table = $( '<table id="mw-debug-console">' );
 
-                       $('<colgroup>').css( 'width', /*padding=*/20 + ( 10 * /*fontSize*/11 ) ).appendTo( $table );
-                       $('<colgroup>').appendTo( $table );
-                       $('<colgroup>').css( 'width', 350 ).appendTo( $table );
+                       $( '<colgroup>' ).css( 'width', /* padding = */ 20 + ( 10 * /* fontSize = */ 11 ) ).appendTo( $table );
+                       $( '<colgroup>' ).appendTo( $table );
+                       $( '<colgroup>' ).css( 'width', 350 ).appendTo( $table );
 
 
                        entryTypeText = function( entryType ) {
                                $( '<tr>' )
                                        .append( $( '<td>' )
                                                .text( entry.typeText )
-                                               .attr( 'class', 'mw-debug-console-' + entry.type )
+                                               .addClass( 'mw-debug-console-' + entry.type )
                                        )
                                        .append( $( '<td>' ).html( entry.msg ) )
                                        .append( $( '<td>' ).text( entry.caller ) )
                        $table = $( '<table id="mw-debug-querylist"></table>' );
 
                        $( '<tr>' )
-                               .append( $('<th>#</th>').css( 'width', '4em' )    )
-                               .append( $('<th>SQL</th>') )
-                               .append( $('<th>Time</th>').css( 'width', '8em'  ) )
-                               .append( $('<th>Call</th>').css( 'width', '18em' ) )
+                               .append( $( '<th>#</th>' ).css( 'width', '4em' )    )
+                               .append( $( '<th>SQL</th>' ) )
+                               .append( $( '<th>Time</th>' ).css( 'width', '8em'  ) )
+                               .append( $( '<th>Call</th>' ).css( 'width', '18em' ) )
                        .appendTo( $table );
 
                        for ( i = 0, length = this.data.queries.length; i < length; i += 1 ) {
                        for ( i = 0, length = this.data.debugLog.length; i < length; i += 1 ) {
                                line = this.data.debugLog[i];
                                $( '<li>' )
-                                       .html( mw.html.escape( line ).replace( /\n/g, "<br />\n" ) )
+                                       .html( mw.html.escape( line ).replace( /\n/g, '<br />\n' ) )
                                        .appendTo( $list );
                        }
 
index f0f78c2..634d02b 100644 (file)
                },
 
                submit: function () {
-                       var fb = this;
-
-                       // get the values to submit
-                       var subject = this.subjectInput.value;
-
-                       var message = '<small>User agent: ' + mw.html.escape( navigator.userAgent ) + '</small>\n\n'
-                                + this.messageInput.value;
-                       if ( message.indexOf( '~~~' ) === -1 ) {
-                               message += ' ~~~~';
-                       }
-
-                       this.displaySubmitting();
+                       var subject, message,
+                               fb = this;
 
-                       var ok = function ( result ) {
+                       function ok( result ) {
                                if ( result.edit !== undefined ) {
                                        if ( result.edit.result === 'Success' ) {
                                                fb.displayThanks();
                                        // edit failed
                                        fb.displayError( 'feedback-error2' );
                                }
-                       };
+                       }
 
-                       var err = function ( code, info ) {
+                       function err( code, info ) {
                                // ajax request failed
                                fb.displayError( 'feedback-error3' );
-                       };
+                       }
+
+                       // Get the values to submit.
+                       subject = this.subjectInput.value;
+
+                       // We used to include "mw.html.escape( navigator.userAgent )" but there are legal issues
+                       // with posting this without their explicit consent
+                       message = this.messageInput.value;
+                       if ( message.indexOf( '~~~' ) === -1 ) {
+                               message += ' ~~~~';
+                       }
+
+                       this.displaySubmitting();
 
                        this.api.newSection( this.title, subject, message, ok, err );
-               }, // close submit button function
+               },
 
                /**
                 * Modify the display form, and then open it, focusing interface on the subject.
index df62105..a4753b9 100644 (file)
@@ -31,8 +31,8 @@ $.fn.goOut = function ( instantToggle ) {
 
 /**
  * Bind a function to the jQuery object via live(), and also immediately trigger
- * the function on the objects with an 'instant' paramter set to true
- * @param callback function taking one paramter, which is Bool true when the event
+ * 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 ){
index def1225..86af31f 100644 (file)
                 * @return {String} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
-                       var count = parseInt( this.language.convertNumber( nodes[0], true ), 10 );
+                       var count = parseFloat( this.language.convertNumber( nodes[0], true ) );
                        var forms = nodes.slice(1);
                        return forms.length ? this.language.convertPlural( count, forms ) : '';
                },
index f0e464d..1a72ed1 100644 (file)
@@ -393,48 +393,82 @@ var mw = ( function ( $, undefined ) {
                         * Create a new style tag and add it to the DOM.
                         *
                         * @param text String: CSS text
-                        * @param $nextnode mixed: [optional] An Element or jQuery object for an element where
+                        * @param nextnode mixed: [optional] An Element or jQuery object for an element where
                         * the style tag should be inserted before. Otherwise appended to the <head>.
                         * @return HTMLStyleElement
                         */
-                       function addStyleTag( text, $nextnode ) {
+                       function addStyleTag( text, nextnode ) {
                                var s = document.createElement( 'style' );
-                               s.type = 'text/css';
-                               s.rel = 'stylesheet';
                                // Insert into document before setting cssText (bug 33305)
-                               if ( $nextnode ) {
-                                       // If a raw element, create a jQuery object, otherwise use directly
-                                       if ( $nextnode.nodeType ) {
-                                               $nextnode = $( $nextnode );
+                               if ( nextnode ) {
+                                       // Must be inserted with native insertBefore, not $.fn.before.
+                                       // When using jQuery to insert it, like $nextnode.before( s ),
+                                       // then IE6 will throw "Access is denied" when trying to append
+                                       // to .cssText later. Some kind of weird security measure.
+                                       // http://stackoverflow.com/q/12586482/319266
+                                       // Works: jsfiddle.net/zJzMy/1
+                                       // Fails: jsfiddle.net/uJTQz
+                                       // Works again: http://jsfiddle.net/Azr4w/ (diff: the next 3 lines)
+                                       if ( nextnode.jquery ) {
+                                               nextnode = nextnode.get( 0 );
                                        }
-                                       $nextnode.before( s );
+                                       nextnode.parentNode.insertBefore( s, nextnode );
                                } else {
-                                       document.getElementsByTagName('head')[0].appendChild( s );
+                                       document.getElementsByTagName( 'head' )[0].appendChild( s );
                                }
                                if ( s.styleSheet ) {
-                                       s.styleSheet.cssText = text; // IE
+                                       // IE
+                                       s.styleSheet.cssText = text;
                                } else {
-                                       // Safari sometimes borks on null
+                                       // Other browsers.
+                                       // (Safari sometimes borks on non-string values,
+                                       // play safe by casting to a string, just in case.)
                                        s.appendChild( document.createTextNode( String( text ) ) );
                                }
                                return s;
                        }
 
-                       function addInlineCSS( css ) {
-                               var $style, style, $newStyle;
+                       /**
+                        * Checks if certain cssText is safe to append to
+                        * a stylesheet.
+                        *
+                        * Right now it only makes sure that cssText containing @import
+                        * rules will end up in a new stylesheet (as those only work when
+                        * placed at the start of a stylesheet; bug 35562).
+                        * This could later be extended to take care of other bugs, such as
+                        * the IE cssRules limit - not the same as the IE styleSheets limit).
+                        */
+                       function canExpandStylesheetWith( $style, cssText ) {
+                               return cssText.indexOf( '@import' ) === -1;
+                       }
+
+                       function addEmbeddedCSS( cssText ) {
+                               var $style, styleEl;
                                $style = getMarker().prev();
-                               // Disable <style> tag recycling/concatenation because of bug 34669
-                               if ( false && $style.is( 'style' ) && $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
-                                       // There's already a dynamic <style> tag present, append to it. This recycling of
-                                       // <style> tags is for bug 31676 (can't have more than 32 <style> tags in IE)
-                                       style = $style.get( 0 );
-                                       if ( style.styleSheet ) {
-                                               style.styleSheet.cssText += css; // IE
+                               // Re-use <style> tags if possible, this to try to stay
+                               // under the IE stylesheet limit (bug 31676).
+                               // Also verify that the the element before Marker actually is one
+                               // that came from ResourceLoader, and not a style tag that some
+                               // other script inserted before our marker, or, more importantly,
+                               // it may not be a style tag at all (could be <meta> or <script>).
+                               if (
+                                       $style.data( 'ResourceLoaderDynamicStyleTag' ) === true &&
+                                       canExpandStylesheetWith( $style, cssText )
+                               ) {
+                                       // There's already a dynamic <style> tag present and
+                                       // canExpandStylesheetWith() gave a green light to append more to it.
+                                       styleEl = $style.get( 0 );
+                                       if ( styleEl.styleSheet ) {
+                                               try {
+                                                       styleEl.styleSheet.cssText += cssText; // IE
+                                               } catch ( e ) {
+                                                       log( 'addEmbeddedCSS fail\ne.message: ' + e.message, e );
+                                               }
                                        } else {
-                                               style.appendChild( document.createTextNode( String( css ) ) );
+                                               styleEl.appendChild( document.createTextNode( String( cssText ) ) );
                                        }
                                } else {
-                                       $newStyle = $( addStyleTag( css, getMarker() ) )
+                                       $( addStyleTag( cssText, getMarker() ) )
                                                .data( 'ResourceLoaderDynamicStyleTag', true );
                                }
                        }
@@ -794,7 +828,7 @@ var mw = ( function ( $, undefined ) {
                         * @param module string module name to execute
                         */
                        function execute( module ) {
-                               var style, media, i, script, markModuleReady, nestedAddScript;
+                               var key, value, media, i, urls, script, markModuleReady, nestedAddScript;
 
                                if ( registry[module] === undefined ) {
                                        throw new Error( 'Module has not been registered yet: ' + module );
@@ -806,28 +840,77 @@ var mw = ( function ( $, undefined ) {
                                        throw new Error( 'Module has already been loaded: ' + module );
                                }
 
-                               // Add styles
+                               /**
+                                * Define loop-function here for efficiency
+                                * and to avoid re-using badly scoped variables.
+                                */
+                               function addLink( media, url ) {
+                                       var el = document.createElement( 'link' );
+                                       getMarker().before( el ); // IE: Insert in dom before setting href
+                                       el.rel = 'stylesheet';
+                                       if ( media && media !== 'all' ) {
+                                               el.media = media;
+                                       }
+                                       el.href = url;
+                               }
+
+                               // Process styles (see also mw.loader.implement)
+                               // * back-compat: { <media>: css }
+                               // * back-compat: { <media>: [url, ..] }
+                               // * { "css": [css, ..] }
+                               // * { "url": { <media>: [url, ..] } }
                                if ( $.isPlainObject( registry[module].style ) ) {
-                                       // 'media' type ignored, see documentation of mw.loader.implement
-                                       for ( media in registry[module].style ) {
-                                               style = registry[module].style[media];
-                                               if ( $.isArray( style ) ) {
-                                                       for ( i = 0; i < style.length; i += 1 ) {
-                                                               getMarker().before( mw.html.element( 'link', {
-                                                                       'type': 'text/css',
-                                                                       'rel': 'stylesheet',
-                                                                       'href': style[i]
-                                                               } ) );
+                                       for ( key in registry[module].style ) {
+                                               value = registry[module].style[key];
+                                               media = undefined;
+
+                                               if ( key !== 'url' && key !== 'css' ) {
+                                                       // Backwards compatibility, key is a media-type
+                                                       if ( typeof value === 'string' ) {
+                                                               // back-compat: { <media>: css }
+                                                               // Ignore 'media' because it isn't supported (nor was it used).
+                                                               // Strings are pre-wrapped in "@media". The media-type was just ""
+                                                               // (because it had to be set to something).
+                                                               // This is one of the reasons why this format is no longer used.
+                                                               addEmbeddedCSS( value );
+                                                       } else {
+                                                               // back-compat: { <media>: [url, ..] }
+                                                               media = key;
+                                                               key = 'bc-url';
+                                                       }
+                                               }
+
+                                               // Array of css strings in key 'css',
+                                               // or back-compat array of urls from media-type
+                                               if ( $.isArray( value ) ) {
+                                                       for ( i = 0; i < value.length; i += 1 ) {
+                                                               if ( key === 'bc-url' ) {
+                                                                       // back-compat: { <media>: [url, ..] }
+                                                                       addLink( media, value[i] );
+                                                               } else if ( key === 'css' ) {
+                                                                       // { "css": [css, ..] }
+                                                                       addEmbeddedCSS( value[i] );
+                                                               }
+                                                       }
+                                               // Not an array, but a regular object
+                                               // Array of urls inside media-type key
+                                               } else if ( typeof value === 'object' ) {
+                                                       // { "url": { <media>: [url, ..] } }
+                                                       for ( media in value ) {
+                                                               urls = value[media];
+                                                               for ( i = 0; i < urls.length; i += 1 ) {
+                                                                       addLink( media, urls[i] );
+                                                               }
                                                        }
-                                               } else if ( typeof style === 'string' ) {
-                                                       addInlineCSS( style );
                                                }
                                        }
                                }
+
                                // Add localizations to message system
                                if ( $.isPlainObject( registry[module].messages ) ) {
                                        mw.messages.set( registry[module].messages );
                                }
+
                                // Execute script
                                try {
                                        script = registry[module].script;
@@ -860,7 +943,7 @@ var mw = ( function ( $, undefined ) {
                                } catch ( e ) {
                                        // This needs to NOT use mw.log because these errors are common in production mode
                                        // and not in debug mode, such as when a symbol that should be global isn't exported
-                                       log('mw.loader::execute> Exception thrown by ' + module + ': ' + e.message, e);
+                                       log( 'Exception thrown by ' + module + ': ' + e.message, e );
                                        registry[module].state = 'error';
                                        handlePending( module );
                                }
@@ -1182,17 +1265,20 @@ var mw = ( function ( $, undefined ) {
                                 *
                                 * All arguments are required.
                                 *
-                                * @param module String: Name of module
-                                * @param script Mixed: Function of module code or String of URL to be used as the src
-                                *  attribute when adding a script element to the body
-                                * @param style Object: Object of CSS strings keyed by media-type or Object of lists of URLs
-                                *  keyed by media-type. Media-type should be "all" or "", actual types are not supported
-                                *  right now due to the way execute() processes the stylesheets (they are concatenated
-                                *  into a single <style> tag). In the past these weren't concatenated together (which is
-                                *  these are keyed by media-type),  but bug 31676 forces us to. In practice this is not a
-                                *  problem because ResourceLoader only generates stylesheets for media-type all (e.g. print
-                                *  stylesheets are wrapped in @media print {} and concatenated with the others).
-                                * @param msgs Object: List of key/value pairs to be passed through mw.messages.set
+                                * @param {String} module Name of module
+                                * @param {Function|Array} script Function with module code or Array of URLs to
+                                *  be used as the src attribute of a new <script> tag.
+                                * @param {Object} style Should follow one of the following patterns:
+                                *  { "css": [css, ..] }
+                                *  { "url": { <media>: [url, ..] } }
+                                *  And for backwards compatibility (needs to be supported forever due to caching):
+                                *  { <media>: css }
+                                *  { <media>: [url, ..] }
+                                *
+                                *  The reason css strings are not concatenated anymore is bug 31676. We now check
+                                *  whether it's safe to extend the stylesheet (see canExpandStylesheetWith).
+                                *
+                                * @param {Object} msgs List of key/value pairs to be passed through mw.messages.set
                                 */
                                implement: function ( module, script, style, msgs ) {
                                        // Validate input
index 9ce8305..4ea1a88 100644 (file)
@@ -33,7 +33,8 @@
                // If there is no console, use our own log box
                mw.loader.using( 'jquery.footHovzer', function () {
 
-                       var     d = new Date(),
+                       var     hovzer,
+                               d = new Date(),
                                // Create HH:MM:SS.MIL timestamp
                                time = ( d.getHours() < 10 ? '0' + d.getHours() : d.getHours() ) +
                                 ':' + ( d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes() ) +
@@ -48,7 +49,7 @@
                                                backgroundColor: 'white',
                                                borderTop: 'solid 2px #ADADAD'
                                        } );
-                               var hovzer = $.getFootHovzer();
+                               hovzer = $.getFootHovzer();
                                hovzer.$.append( $log );
                                hovzer.update();
                        }
diff --git a/resources/mediawiki/mediawiki.notification.css b/resources/mediawiki/mediawiki.notification.css
new file mode 100644 (file)
index 0000000..9a7b651
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * Stylesheet for mediawiki.notification module
+ */
+
+#mw-notification-area {
+       position: absolute;
+       top: 1em;
+       right: 1em;
+       width: 20em;
+       line-height: 1.35;
+       z-index: 10000;
+}
+
+.mw-notification {
+       padding: 0.25em 1em;
+       margin-bottom: 0.5em;
+       border: solid 1px #ddd;
+       background-color: #fcfcfc;
+       /* Message hides on-click */
+       /* See also mediawiki.notification.js */
+       cursor: pointer;
+}
+
+.mw-notification-title {
+       font-weight: bold;
+}
diff --git a/resources/mediawiki/mediawiki.notification.js b/resources/mediawiki/mediawiki.notification.js
new file mode 100644 (file)
index 0000000..5bcbfcc
--- /dev/null
@@ -0,0 +1,477 @@
+/**
+ * Implements mediaWiki.notification library
+ */
+( function ( mw, $ ) {
+       'use strict';
+
+       var isPageReady = false,
+               isInitialized = false,
+               preReadyNotifQueue = [],
+               /**
+                * @var {jQuery}
+                * The #mw-notification-area div that all notifications are contained inside.
+                */
+               $area = null;
+
+       /**
+        * Creates a Notification object for 1 message.
+        * Does not insert anything into the document (see .start()).
+        *
+        * @constructor
+        * @see mw.notification.notify
+        */
+       function Notification( message, options ) {
+               var $notification, $notificationTitle, $notificationContent;
+
+               $notification = $( '<div class="mw-notification"></div>' )
+                       .data( 'mw.notification', this )
+                       .addClass( options.autoHide ? 'mw-notification-autohide' : 'mw-notification-noautohide' );
+
+               if ( options.tag ) {
+                       // Sanitize options.tag before it is used by any code. (Including Notification class methods)
+                       options.tag = options.tag.replace( /[ _\-]+/g, '-' ).replace( /[^\-a-z0-9]+/ig, '' );
+                       if ( options.tag ) {
+                               $notification.addClass( 'mw-notification-tag-' + options.tag );
+                       } else {
+                               delete options.tag;
+                       }
+               }
+
+               if ( options.title ) {
+                       $notificationTitle = $( '<div class="mw-notification-title"></div>' )
+                               .text( options.title )
+                               .appendTo( $notification );
+               }
+
+               $notificationContent = $( '<div class="mw-notification-content"></div>' );
+
+               if ( typeof message === 'object' ) {
+                       // Handle mw.Message objects separately from DOM nodes and jQuery objects
+                       if ( message instanceof mw.Message ) {
+                               $notificationContent.html( message.parse() );
+                       } else {
+                               $notificationContent.append( message );
+                       }
+               } else {
+                       $notificationContent.text( message );
+               }
+
+               $notificationContent.appendTo( $notification );
+
+               // Private state parameters, meant for internal use only
+               // isOpen: Set to true after .start() is called to avoid double calls.
+               //         Set back to false after .close() to avoid duplicating the close animation.
+               // isPaused: false after .resume(), true after .pause(). Avoids duplicating or breaking the hide timeouts.
+               //           Set to true initially so .start() can call .resume().
+               // message: The message passed to the notification. Unused now but may be used in the future
+               //          to stop replacement of a tagged notification with another notification using the same message.
+               // options: The options passed to the notification with a little sanitization. Used by various methods.
+               // $notification: jQuery object containing the notification DOM node.
+               this.isOpen = false;
+               this.isPaused = true;
+               this.message = message;
+               this.options = options;
+               this.$notification = $notification;
+       }
+
+       /**
+        * Start the notification.
+        * This inserts it into the page, closes any matching tagged notifications,
+        * handles the fadeIn animations and repacement transitions, and starts autoHide timers.
+        */
+       Notification.prototype.start = function () {
+               var
+                       // Local references
+                       $notification, options,
+                       // Original opacity so that we can animate back to it later
+                       opacity,
+                       // Other notification elements matching the same tag
+                       $tagMatches,
+                       outerHeight,
+                       placeholderHeight;
+
+               if ( this.isOpen ) {
+                       return;
+               }
+
+               this.isOpen = true;
+
+               options = this.options;
+               $notification = this.$notification;
+
+               opacity = this.$notification.css( 'opacity' );
+
+               // Set the opacity to 0 so we can fade in later.
+               $notification.css( 'opacity', 0 );
+
+               if ( options.tag ) {
+                       // Check to see if there are any tagged notifications with the same tag as the new one
+                       $tagMatches = $area.find( '.mw-notification-tag-' + options.tag );
+               }
+
+               // If we found a tagged notification use the replacement pattern instead of the new
+               // notification fade-in pattern.
+               if ( options.tag && $tagMatches.length ) {
+
+                       // Iterate over the tag matches to find the outerHeight we should use
+                       // for the placeholder.
+                       outerHeight = 0;
+                       $tagMatches.each( function () {
+                               var notif = $( this ).data( 'mw.notification' );
+                               if ( notif ) {
+                                       // Use the notification's height + padding + border + margins
+                                       // as the placeholder height.
+                                       outerHeight = notif.$notification.outerHeight( true );
+                                       if ( notif.$replacementPlaceholder ) {
+                                               // Grab the height of a placeholder that has not finished animating.
+                                               placeholderHeight = notif.$replacementPlaceholder.height();
+                                               // Remove any placeholders added by a previous tagged
+                                               // notification that was in the middle of replacing another.
+                                               // This also makes sure that we only grab the placeholderHeight
+                                               // for the most recent notification.
+                                               notif.$replacementPlaceholder.remove();
+                                               delete notif.$replacementPlaceholder;
+                                       }
+                                       // Close the previous tagged notification
+                                       // Since we're replacing it do this with a fast speed and don't output a placeholder
+                                       // since we're taking care of that transition ourselves.
+                                       notif.close( { speed: 'fast', placeholder: false } );
+                               }
+                       } );
+                       if ( placeholderHeight !== undefined ) {
+                               // If the other tagged notification was in the middle of replacing another
+                               // tagged notification, continue from the placeholder's height instead of
+                               // using the outerHeight of the notification.
+                               outerHeight = placeholderHeight;
+                       }
+
+                       $notification
+                               // Insert the new notification before the tagged notification(s)
+                               .insertBefore( $tagMatches.first() )
+                               .css( {
+                                       // Use an absolute position so that we can use a placeholder to gracefully push other notifications
+                                       // into the right spot.
+                                       position: 'absolute',
+                                       width: $notification.width()
+                               } )
+                               // Fade-in the notification
+                               .animate( { opacity: opacity },
+                                       {
+                                               duration: 'slow',
+                                               complete: function () {
+                                                       // After we've faded in clear the opacity and let css take over
+                                                       $( this ).css( { opacity: '' } );
+                                               }
+                                       } );
+
+                       // 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>' )
+                               // 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
+                               .insertAfter( $tagMatches.eq( -1 ) )
+                               // Animate the placeholder height to the space that this new notification will take up
+                               .animate( { height: $notification.outerHeight( true ) },
+                                       {
+                                               // Do space animations fast
+                                               speed: 'fast',
+                                               complete: function () {
+                                                       // 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 ) {
+                                                               $notification.css( 'position', '' );
+                                                       }
+                                                       // Finally, remove the placeholder from the DOM
+                                                       $( this ).remove();
+                                               }
+                                       } );
+               } else {
+                       // Append to the notification area and fade in to the original opacity.
+                       $notification
+                               .appendTo( $area )
+                               .animate( { opacity: opacity },
+                                       {
+                                               duration: 'fast',
+                                               complete: function () {
+                                                       // After we've faded in clear the opacity and let css take over
+                                                       $( this ).css( 'opacity', '' );
+                                               }
+                                       }
+                               );
+               }
+
+               // 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;
+               if ( autohideCount <= notification.autoHideLimit ) {
+                       this.resume();
+               }
+       };
+
+       /**
+        * Pause any running auto-hide timer for this notification
+        */
+       Notification.prototype.pause = function () {
+               if ( this.isPaused ) {
+                       return;
+               }
+               this.isPaused = true;
+
+               if ( this.timeout ) {
+                       clearTimeout( this.timeout );
+                       delete this.timeout;
+               }
+       };
+
+       /**
+        * Start autoHide timer if not already started.
+        * Does nothing if autoHide is disabled.
+        * Either to resume from pause or to make the first start.
+        */
+       Notification.prototype.resume = function () {
+               var notif = this;
+               if ( !notif.isPaused ) {
+                       return;
+               }
+               // Start any autoHide timeouts
+               if ( notif.options.autoHide ) {
+                       notif.isPaused = false;
+                       notif.timeout = setTimeout( function () {
+                               // Already finished, so don't try to re-clear it
+                               delete notif.timeout;
+                               notif.close();
+                       }, notification.autoHideSeconds * 1000 );
+               }
+       };
+
+       /**
+        * Close/hide the notification.
+        *
+        * @param {Object} options An object containing options for the closing of the notification.
+        *  These are typically only used internally.
+        *  - speed: Use a close speed different than the default 'slow'.
+        *  - placeholder: Set to false to disable the placeholder transition.
+        */
+       Notification.prototype.close = function ( options ) {
+               if ( !this.isOpen ) {
+                       return;
+               }
+               this.isOpen = false;
+               // Clear any remaining timeout on close
+               this.pause();
+
+               options = $.extend( {
+                       speed: 'slow',
+                       placeholder: true
+               }, options );
+
+               // Remove the mw-notification-autohide class from the notification to avoid
+               // having a half-closed notification counted as a notification to resume
+               // when handling {autoHideLimit}.
+               this.$notification.removeClass( 'mw-notification-autohide' );
+
+               // Now that a notification is being closed. Start auto-hide timers for any
+               // notification that has now become one of the first {autoHideLimit} notifications.
+               notification.resume();
+
+               this.$notification
+                       .css( {
+                               // Don't trigger any mouse events while fading out, just in case the cursor
+                               // happens to be right above us when we transition upwards.
+                               pointerEvents: 'none',
+                               // Set an absolute position so we can move upwards in the animation.
+                               // Notification replacement doesn't look right unless we use an animation like this.
+                               position: 'absolute',
+                               // We must fix the width to avoid it shrinking horizontally.
+                               width: this.$notification.width()
+                       } )
+                       // Fix the top/left position to the current computed position from which we
+                       // can animate upwards.
+                       .css( this.$notification.position() )
+                       // Animate opacity and top to create fade upwards animation for notification closing
+                       .animate( {
+                               opacity: 0,
+                               top: '-=35'
+                       }, {
+                               duration: options.speed,
+                               complete: function () {
+                                       // Remove the notification
+                                       $( this ).remove();
+                                       if ( options.placeholder ) {
+                                               // Use a fast slide up animation after closing to make it look like the notifications
+                                               // below slide up into place when the notification disappears
+                                               $placeholder.slideUp( 'fast', function () {
+                                                       // Remove the placeholder
+                                                       $( this ).remove();
+                                               } );
+                                       }
+                               }
+                       } );
+
+               if ( options.placeholder ) {
+                       // Insert a placeholder with a height equal to the height of the
+                       // notification plus it's vertical margins in place of the notification
+                       var $placeholder = $( '<div>' )
+                               .css( 'height', this.$notification.outerHeight( true ) )
+                               .insertBefore( this.$notification );
+               }
+       };
+
+       /**
+        * Helper function, take a list of notification divs and call
+        * a function on the Notification instance attached to them
+        *
+        * @param {jQuery} $notifications A jQuery object containing notification divs
+        * @param {string} fn The name of the function to call on the Notification instance
+        */
+       function callEachNotification( $notifications, fn ) {
+               $notifications.each( function () {
+                       var notif = $( this ).data( 'mw.notification' );
+                       if ( notif ) {
+                               notif[fn]();
+                       }
+               } );
+       }
+
+       /**
+        * Initialisation
+        * (don't call before document ready)
+        */
+       function init() {
+               if ( !isInitialized ) {
+                       isInitialized = true;
+                       $area = $( '<div id="mw-notification-area"></div>' )
+                               // Pause auto-hide timers when the mouse is in the notification area.
+                               .on( {
+                                       mouseenter: notification.pause,
+                                       mouseleave: notification.resume
+                               } )
+                               // When clicking on a notification close it.
+                               .on( 'click', '.mw-notification', function () {
+                                       var notif = $( this ).data( 'mw.notification' );
+                                       if ( notif ) {
+                                               notif.close();
+                                       }
+                               } )
+                               // Stop click events from <a> tags from propogating to prevent clicking.
+                               // on links from hiding a notification.
+                               .on( 'click', 'a', function ( e ) {
+                                       e.stopPropagation();
+                               } );
+
+                       // Prepend the notification area to the content area and save it's object.
+                       mw.util.$content.prepend( $area );
+               }
+       }
+
+       var notification = {
+               /**
+                * Pause auto-hide timers for all notifications.
+                * Notifications will not auto-hide until resume is called.
+                */
+               pause: function () {
+                       callEachNotification(
+                               $area.children( '.mw-notification' ),
+                               'pause'
+                       );
+               },
+
+               /**
+                * Resume any paused auto-hide timers from the beginning.
+                * Only the first {autoHideLimit} timers will be resumed.
+                */
+               resume: function () {
+                       callEachNotification(
+                               // Only call resume on the first {autoHideLimit} notifications.
+                               // Exclude noautohide notifications to avoid bugs where {autoHideLimit}
+                               // { autoHide: false } notifications are at the start preventing any
+                               // auto-hide notifications from being autohidden.
+                               $area.children( '.mw-notification-autohide' ).slice( 0, notification.autoHideLimit ),
+                               'resume'
+                       );
+               },
+
+               /**
+                * Display a notification message to the user.
+                *
+                * @param {mixed} message The DOM-element, jQuery object, mw.Message instance,
+                *  or plaintext string to be used as the message.
+                * @param {Object} options The options to use for the notification.
+                *  See mw.notification.defaults for details.
+                */
+               notify: function ( message, options ) {
+                       var notif;
+                       options = $.extend( {}, notification.defaults, options );
+
+                       notif = new Notification( message, options );
+
+                       if ( isPageReady ) {
+                               notif.start();
+                       } else {
+                               preReadyNotifQueue.push( notif );
+                       }
+               },
+
+               /**
+                * @var {Object}
+                * The defaults for mw.notification.notify's options parameter
+                *   autoHide:
+                *     A boolean indicating whether the notifification should automatically
+                *     be hidden after shown. Or if it should persist.
+                *
+                *   tag:
+                *     An optional string. When a notification is tagged only one message
+                *     with that tag will be displayed. Trying to display a new notification
+                *     with the same tag as one already being displayed will cause the other
+                *     notification to be closed and this new notification to open up inside
+                *     the same place as the previous notification.
+                *
+                *   title:
+                *     An optional title for the notification. Will be displayed above the
+                *     content. Usually in bold.
+                */
+               defaults: {
+                       autoHide: true,
+                       tag: false,
+                       title: undefined
+               },
+
+               /**
+                * @var {number}
+                * Number of seconds to wait before auto-hiding notifications.
+                */
+               autoHideSeconds: 5,
+
+               /**
+                * @var {number}
+                * Maximum number of notifications to count down auto-hide timers for.
+                * Only the first {autoHideLimit} notifications being displayed will
+                * auto-hide. Any notifications further down in the list will only start
+                * counting down to auto-hide after the first few messages have closed.
+                *
+                * This basically represents the number of notifications the user should
+                * be able to process in {autoHideSeconds} time.
+                */
+               autoHideLimit: 3
+       };
+
+       $( function () {
+               var notif;
+
+               init();
+
+               // Handle pre-ready queue.
+               isPageReady = true;
+               while ( preReadyNotifQueue.length ) {
+                       notif = preReadyNotifQueue.shift();
+                       notif.start();
+               }
+       } );
+
+       mw.notification = notification;
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/mediawiki/mediawiki.notify.js b/resources/mediawiki/mediawiki.notify.js
new file mode 100644 (file)
index 0000000..3bf2a89
--- /dev/null
@@ -0,0 +1,20 @@
+/**
+ * Implements mediaWiki.notify function
+ */
+( function ( mw ) {
+       'use strict';
+
+       /**
+        * @see mw.notification.notify
+        */
+       mw.notify = function ( message, options ) {
+               // Don't bother loading the whole notification system if we never use it.
+               mw.loader.using( 'mediawiki.notification', function () {
+                       // Don't bother calling mw.loader.using a second time after we've already loaded mw.notification.
+                       mw.notify = mw.notification.notify;
+                       // Call notify with the notification the user requested of us.
+                       mw.notify( message, options );
+               } );
+       };
+
+}( mediaWiki ) );
\ No newline at end of file
diff --git a/resources/mediawiki/mediawiki.searchSuggest.js b/resources/mediawiki/mediawiki.searchSuggest.js
new file mode 100644 (file)
index 0000000..42c839c
--- /dev/null
@@ -0,0 +1,161 @@
+/**
+ * Add search suggestions to the search form.
+ */
+( function ( mw, $ ) {
+       $( document ).ready( function ( $ ) {
+               var map,
+                       // Region where the suggestions box will appear directly below
+                       // (using the same width). Can be a container element or the input
+                       // itself, depending on what suits best in the environment.
+                       // For Vector the suggestion box should align with the simpleSearch
+                       // container's borders, in other skins it should align with the input
+                       // element (not the search form, as that would leave the buttons
+                       // vertically between the input and the suggestions).
+                       $searchRegion = $( '#simpleSearch, #searchInput' ).first(),
+                       $searchInput = $( '#searchInput' );
+
+               // Ensure that the thing is actually present!
+               if ( $searchRegion.length === 0 ) {
+                       // Don't try to set anything up if simpleSearch is disabled sitewide.
+                       // The loader code loads us if the option is present, even if we're
+                       // not actually enabled (anymore).
+                       return;
+               }
+
+               // Compatibility map
+               map = {
+                       browsers: {
+                               // Left-to-right languages
+                               ltr: {
+                                       // SimpleSearch is broken in Opera < 9.6
+                                       opera: [['>=', 9.6]],
+                                       docomo: false,
+                                       blackberry: false,
+                                       ipod: false,
+                                       iphone: false
+                               },
+                               // Right-to-left languages
+                               rtl: {
+                                       opera: [['>=', 9.6]],
+                                       docomo: false,
+                                       blackberry: false,
+                                       ipod: false,
+                                       iphone: false
+                               }
+                       }
+               };
+
+               if ( !$.client.test( map ) ) {
+                       return;
+               }
+
+               // Placeholder text for search box
+               $searchInput
+                       .attr( 'placeholder', mw.msg( 'searchsuggest-search' ) )
+                       .placeholder();
+
+               // General suggestions functionality for all search boxes
+               $( '#searchInput, #searchInput2, #powerSearchText, #searchText' )
+                       .suggestions( {
+                               fetch: function ( query ) {
+                                       var $el, jqXhr;
+
+                                       if ( query.length !== 0 ) {
+                                               $el = $(this);
+                                               jqXhr = $.ajax( {
+                                                       url: mw.util.wikiScript( 'api' ),
+                                                       data: {
+                                                               format: 'json',
+                                                               action: 'opensearch',
+                                                               search: query,
+                                                               namespace: 0,
+                                                               suggest: ''
+                                                       },
+                                                       dataType: 'json',
+                                                       success: function ( data ) {
+                                                               if ( $.isArray( data ) && data.length ) {
+                                                                       $el.suggestions( 'suggestions', data[1] );
+                                                               }
+                                                       }
+                                               });
+                                               $el.data( 'request', jqXhr );
+                                       }
+                               },
+                               cancel: function () {
+                                       var jqXhr = $(this).data( 'request' );
+                                       // If the delay setting has caused the fetch to have not even happened
+                                       // yet, the jqXHR object will have never been set.
+                                       if ( jqXhr && $.isFunction ( jqXhr.abort ) ) {
+                                               jqXhr.abort();
+                                               $(this).removeData( 'request' );
+                                       }
+                               },
+                               result: {
+                                       select: function ( $input ) {
+                                               $input.closest( 'form' ).submit();
+                                       }
+                               },
+                               delay: 120,
+                               highlightInput: true
+                       } )
+                       .bind( 'paste cut drop', function () {
+                               // make sure paste and cut events from the mouse and drag&drop events
+                               // trigger the keypress handler and cause the suggestions to update
+                               $( this ).trigger( 'keypress' );
+                       } );
+
+               // Special suggestions functionality for skin-provided search box
+               $searchInput.suggestions( {
+                       result: {
+                               select: function ( $input ) {
+                                       $input.closest( 'form' ).submit();
+                               }
+                       },
+                       special: {
+                               render: function ( query ) {
+                                       var $el = this;
+                                       if ( $el.children().length === 0 ) {
+                                               $el
+                                                       .append(
+                                                               $( '<div>' )
+                                                                       .addClass( 'special-label' )
+                                                                       .text( mw.msg( 'searchsuggest-containing' ) )
+                                                       )
+                                                       .append(
+                                                               $( '<div>' )
+                                                                       .addClass( 'special-query' )
+                                                                       .text( query )
+                                                                       .autoEllipsis()
+                                                       )
+                                                       .show();
+                                       } else {
+                                               $el.find( '.special-query' )
+                                                       .empty()
+                                                       .text( query )
+                                                       .autoEllipsis();
+                                       }
+                               },
+                               select: function ( $input ) {
+                                       $input.closest( 'form' ).append(
+                                               $( '<input type="hidden"/>', {
+                                                       name: 'fulltext',
+                                                       val: '1'
+                                               })
+                                       );
+                                       $input.closest( 'form' ).submit();
+                               }
+                       },
+                       $region: $searchRegion
+               } );
+
+               // In most skins (at least Monobook and Vector), the font-size is messed up in <body>.
+               // (they use 2 elements to get a sane font-height). So, instead of making exceptions for
+               // each skin or adding more stylesheets, just copy it from the active element so auto-fit.
+               $searchInput
+                       .data( 'suggestions-context' )
+                       .data.$container
+                               .css( 'fontSize', $searchInput.css( 'fontSize' ) );
+
+       } );
+
+}( mediaWiki, jQuery ) );
\ No newline at end of file
index b5f124b..5c5c87e 100644 (file)
@@ -8,11 +8,12 @@
         * User object
         */
        function User( options, tokens ) {
+               var user, callbacks;
 
                /* Private Members */
 
-               var that = this;
-               var callbacks = {};
+               user = this;
+               callbacks = {};
 
                /**
                 * Gets the current user's groups or rights.
                 * @return String: Random set of 32 alpha-numeric characters
                 */
                function generateId() {
-                       var id = '';
-                       var seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
-                       for ( var i = 0, r; i < 32; i++ ) {
+                       var i, r,
+                               id = '',
+                               seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+                       for ( i = 0; i < 32; i++ ) {
                                r = Math.floor( Math.random() * seed.length );
                                id += seed.substring( r, r + 1 );
                        }
                 * @return Boolean
                 */
                this.isAnon = function () {
-                       return that.getName() === null;
+                       return user.getName() === null;
                };
 
                /**
                 * @deprecated since 1.20 use mw.user.isAnon() instead
                 */
                this.anonymous = function () {
-                       return that.isAnon();
+                       return user.isAnon();
                };
 
                /**
                 * @return String: User name or random session ID
                 */
                this.id = function() {
-                       var name = that.getName();
+                       var id,
+                               name = user.getName();
                        if ( name ) {
                                return name;
                        }
-                       var id = $.cookie( 'mediaWiki.user.id' );
+                       id = $.cookie( 'mediaWiki.user.id' );
                        if ( typeof id === 'undefined' || id === null ) {
                                id = generateId();
                        }
                 *     } );
                 */
                this.bucket = function ( key, options ) {
+                       var cookie, parts, version, bucket,
+                               range, k, rand, total;
+
                        options = $.extend( {
-                               'buckets': {},
-                               'version': 0,
-                               'tracked': false,
-                               'expires': 30
+                               buckets: {},
+                               version: 0,
+                               tracked: false,
+                               expires: 30
                        }, options || {} );
-                       var cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
-                       var bucket = null;
-                       var version = 0;
+
+                       cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
+
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
                        if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) > 0 ) {
-                               var parts = cookie.split( ':' );
+                               parts = cookie.split( ':' );
                                if ( parts.length > 1 && Number( parts[0] ) === options.version ) {
                                        version = Number( parts[0] );
                                        bucket = String( parts[1] );
                                }
                        }
-                       if ( bucket === null ) {
+                       if ( bucket === undefined ) {
                                if ( !$.isPlainObject( options.buckets ) ) {
                                        throw 'Invalid buckets error. Object expected for options.buckets.';
                                }
                                version = Number( options.version );
                                // Find range
-                               var     range = 0, k;
+                               range = 0;
                                for ( k in options.buckets ) {
                                        range += options.buckets[k];
                                }
                                // Select random value within range
-                               var rand = Math.random() * range;
+                               rand = Math.random() * range;
                                // Determine which bucket the value landed in
-                               var total = 0;
+                               total = 0;
                                for ( k in options.buckets ) {
                                        bucket = k;
                                        total += options.buckets[k];
index 7e2bab8..2928438 100644 (file)
@@ -5,9 +5,7 @@
        'use strict';
 
        // Local cache and alias
-       var hideMessageTimeout,
-               messageBoxEvents = false,
-               util = {
+       var util = {
 
                /**
                 * Initialisation
                init: function () {
                        var profile, $tocTitle, $tocToggleLink, hideTocCookie;
 
-                       /* Set up $.messageBox */
-                       $.messageBoxNew( {
-                               id: 'mw-js-message',
-                               parent: '#content'
-                       } );
-
                        /* Set tooltipAccessKeyPrefix */
                        profile = $.client.profile();
 
                                && profile.name === 'safari'
                                && profile.layoutVersion > 526 ) {
                                util.tooltipAccessKeyPrefix = 'ctrl-alt-';
-
+                       // Firefox 14+ on Mac
+                       } else if ( profile.platform === 'mac'
+                               && profile.name === 'firefox'
+                               && profile.versionNumber >= 14 ) {
+                               util.tooltipAccessKeyPrefix = 'ctrl-option-';
                        // Safari/Konqueror on any platform, or any browser on Mac
                        // (but not Safari on Windows)
                        } else if ( !( profile.platform === 'win' && profile.name === 'safari' )
                        }
 
                        /* Fill $content var */
-                       if ( $( '#bodyContent' ).length ) {
-                               // Vector, Monobook, Chick etc.
-                               util.$content = $( '#bodyContent' );
-
-                       } else if ( $( '#mw_contentholder' ).length ) {
-                               // Modern
-                               util.$content = $( '#mw_contentholder' );
+                       util.$content = ( function () {
+                               var $content, 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.
+                                       // Or class="mw-body-primary" if you want $content to be deeper
+                                       // in the dom than mw-body
+                                       '.mw-body-primary',
+                                       '.mw-body',
+
+                                       /* Legacy fallbacks for setting the content */
+                                       // Vector, Monobook, Chick, etc... based skins
+                                       '#bodyContent',
+
+                                       // Modern based skins
+                                       '#mw_contentholder',
+
+                                       // Standard, CologneBlue
+                                       '#article',
+
+                                       // #content is present on almost all if not all skins. Most skins (the above cases)
+                                       // have #content too, but as an outer wrapper instead of the article text container.
+                                       // The skins that don't have an outer wrapper do have #content for everything
+                                       // so it's a good fallback
+                                       '#content',
+
+                                       // If nothing better is found fall back to our bodytext div that is guaranteed to be here
+                                       '#mw-content-text',
+
+                                       // Should never happen... well, it could if someone is not finished writing a skin and has
+                                       // not inserted bodytext yet. But in any case <body> should always exist
+                                       'body'
+                               ];
+                               for ( var i = 0, l = selectors.length; i < l; i++ ) {
+                                       $content = $( selectors[i] ).first();
+                                       if ( $content.length ) {
+                                               return $content;
+                                       }
+                               }
 
-                       } else if ( $( '#article' ).length ) {
-                               // Standard, CologneBlue
-                               util.$content = $( '#article' );
-
-                       } else {
-                               // #content is present on almost all if not all skins. Most skins (the above cases)
-                               // have #content too, but as an outer wrapper instead of the article text container.
-                               // The skins that don't have an outer wrapper do have #content for everything
-                               // so it's a good fallback
-                               util.$content = $( '#content' );
-                       }
+                               // Make sure we don't unset util.$content if it was preset and we don't find anything
+                               return util.$content;
+                       } )();
 
                        // Table of contents toggle
                        $tocTitle = $( '#toctitle' );
 
                /*
                 * @var jQuery
-                * A jQuery object that refers to the page-content element
+                * A jQuery object that refers to the content area element
                 * Populated by init().
                 */
                $content: null,
                 * Calling with no arguments, with an empty string or null will hide the message
                 *
                 * @param message {mixed} The DOM-element, jQuery object or HTML-string to be put inside the message box.
-                * @param className {String} Used in adding a class; should be different for each call
                 * to allow CSS/JS to hide different boxes. null = no class used.
-                * @return {Boolean} True on success, false on failure.
+                * @depreceated Use mw.notify
                 */
-               jsMessage: function ( message, className ) {
-                       var $messageDiv = $( '#mw-js-message' );
-
+               jsMessage: function ( message ) {
                        if ( !arguments.length || message === '' || message === null ) {
-                               $messageDiv.empty().hide();
-                               stopHideMessageTimeout();
-                               return true; // Emptying and hiding message is intended behaviour, return true
-                       } else {
-                               // We special-case skin structures provided by the software. Skins that
-                               // choose to abandon or significantly modify our formatting can just define
-                               // an mw-js-message div to start with.
-                               if ( !$messageDiv.length ) {
-                                       $messageDiv = $( '<div id="mw-js-message"></div>' );
-                                       if ( util.$content.parent().length ) {
-                                               util.$content.parent().prepend( $messageDiv );
-                                       } else {
-                                               return false;
-                                       }
-                               }
-
-                               if ( !messageBoxEvents ) {
-                                       messageBoxEvents = true;
-                                       $messageDiv
-                                               .on( {
-                                                       'mouseenter': stopHideMessageTimeout,
-                                                       'mouseleave': startHideMessageTimeout,
-                                                       'click': hideMessage
-                                               } )
-                                               .on( 'click', 'a', function ( e ) {
-                                                       // Prevent links, even those that don't exist yet, from causing the
-                                                       // message box to close when clicked
-                                                       e.stopPropagation();
-                                               } );
-                               }
-
-                               if ( className ) {
-                                       $messageDiv.prop( 'className', 'mw-js-message-' + className );
-                               }
-
-                               if ( typeof message === 'object' ) {
-                                       $messageDiv.empty();
-                                       $messageDiv.append( message );
-                               } else {
-                                       $messageDiv.html( message );
-                               }
-
-                               $messageDiv.slideDown();
-                               startHideMessageTimeout();
                                return true;
                        }
+                       if ( typeof message !== 'object' ) {
+                               message = $.parseHTML( message );
+                       }
+                       mw.notify( message, { autoHide: true, tag: 'legacy' } );
+                       return true;
                },
 
                /**
                }
        };
 
-       // Message auto-hide helpers
-       function hideMessage() {
-               $( '#mw-js-message' ).fadeOut( 'slow' );
-       }
-       function stopHideMessageTimeout() {
-               clearTimeout( hideMessageTimeout );
-       }
-       function startHideMessageTimeout() {
-               clearTimeout( hideMessageTimeout );
-               hideMessageTimeout = setTimeout( hideMessage, 5000 );
-       }
-
        mw.util = util;
 
 }( mediaWiki, jQuery ) );
index d8fb2b3..0be614a 100644 (file)
@@ -1,9 +1,30 @@
 <?php
+/**
+ * Serialize variables found in input file and store the result in the
+ * specified file.
+ *
+ * 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
+ */
 
 if ( !defined( 'MEDIAWIKI' ) ) {
        $wgNoDBParam = true;
        $optionsWithArgs = array( 'o' );
-       require_once( dirname(__FILE__).'/../maintenance/commandLine.inc' );
+       require_once( __DIR__ .'/../maintenance/commandLine.inc' );
 
        $stderr = fopen( 'php://stderr', 'w' );
        if ( !isset( $args[0] ) ) {
@@ -62,7 +83,7 @@ function unixLineEndings( $var ) {
                fwrite( $stderr, "Error: Recursion limit exceeded. Possible circular reference in array variable.\n" );
                exit( 2 );
        }
-       
+
        if ( is_array( $var ) ) {
                ++$recursionLevel;
                $var = array_map( 'unixLineEndings', $var );
index 913c19b..473ee2b 100644 (file)
@@ -30,136 +30,465 @@ if( !defined( 'MEDIAWIKI' ) ) {
  * @todo document
  * @ingroup Skins
  */
-class SkinCologneBlue extends SkinLegacy {
+class SkinCologneBlue extends SkinTemplate {
        var $skinname = 'cologneblue', $stylename = 'cologneblue',
                $template = 'CologneBlueTemplate';
+       var $useHeadElement = true;
 
        /**
         * @param $out OutputPage
         */
        function setupSkinUserCss( OutputPage $out ){
-               parent::setupSkinUserCss( $out );
+               $out->addModuleStyles( 'mediawiki.legacy.shared' );
+               $out->addModuleStyles( 'mediawiki.legacy.oldshared' );
                $out->addModuleStyles( 'skins.cologneblue' );
-
-               $qb = $this->qbSetting();
-               $rules = array();
-
-               if ( 2 == $qb ) { # Right
-                       $rules[] = "/* @noflip */#quickbar { position: absolute; right: 4px; }";
-                       $rules[] = "/* @noflip */#article { margin-left: 4px; margin-right: 148px; }";
-                       $rules[] = "/* @noflip */#footer { margin-right: 152px; }";
-               } elseif ( 1 == $qb ) {
-                       $rules[] = "/* @noflip */#quickbar { position: absolute; left: 4px; }";
-                       $rules[] = "/* @noflip */#article { margin-left: 148px; margin-right: 4px; }";
-                       $rules[] = "/* @noflip */#footer { margin-left: 152px; }";
-               } elseif ( 3 == $qb ) { # Floating left
-                       $rules[] = "/* @noflip */#quickbar { position:absolute; left:4px }";
-                       $rules[] = "/* @noflip */#topbar { margin-left: 148px }";
-                       $rules[] = "/* @noflip */#article { margin-left:148px; margin-right: 4px; }";
-                       $rules[] = "/* @noflip */body>#quickbar { position:fixed; left:4px; top:4px; overflow:auto; bottom:4px;}"; # Hides from IE
-                       $rules[] = "/* @noflip */#footer { margin-left: 152px; }";
-               } elseif ( 4 == $qb ) { # Floating right
-                       $rules[] = "/* @noflip */#quickbar { position: fixed; right: 4px; }";
-                       $rules[] = "/* @noflip */#topbar { margin-right: 148px }";
-                       $rules[] = "/* @noflip */#article { margin-right: 148px; margin-left: 4px; }";
-                       $rules[] = "/* @noflip */body>#quickbar { position: fixed; right: 4px; top: 4px; overflow: auto; bottom:4px;}"; # Hides from IE
-                       $rules[] = "/* @noflip */#footer { margin-right: 152px; }";
-               }
-               $style = implode( "\n", $rules );
-               $out->addInlineStyle( $style, 'flip' );
        }
-
+       
+       /**
+        * Override langlink formatting behavior not to uppercase the language names.
+        * See otherLanguages() in CologneBlueTemplate.
+        */
+       function formatLanguageName( $name ) {
+               return $name;
+       }
 }
 
-class CologneBlueTemplate extends LegacyTemplate {
+class CologneBlueTemplate extends BaseTemplate {
+       function execute() {
+               $this->html( 'headelement' );
+               echo $this->beforeContent();
+               $this->html( 'bodytext' );
+               echo "\n";
+               echo $this->afterContent();
+               $this->html( 'dataAfterContent' );
+               $this->printTrail();
+               echo "\n</body></html>";
+       }
+       
 
        /**
+        * Language/charset variant links for classic-style skins
         * @return string
+        *
+        * @fixed
         */
-       function doBeforeContent() {
-               $mainPageObj = Title::newMainPage();
+       function variantLinks() {
+               $s = array();
+
+               $variants = $this->data['content_navigation']['variants'];
+
+               foreach ( $variants as $key => $link ) {
+                       $s[] = $this->makeListItem( $key, $link, array( 'tag' => 'span' ) );
+               }
+
+               return $this->getSkin()->getLanguage()->pipeList( $s );
+       }
+       
+       // @fixed
+       function otherLanguages() {
+               global $wgHideInterlanguageLinks;
+               if ( $wgHideInterlanguageLinks ) {
+                       return "";
+               }
 
-               $s = "\n<div id='content'>\n<div id='topbar'>" .
-                 '<table width="100%" border="0" cellspacing="0" cellpadding="8"><tr>';
+               // We override SkinTemplate->formatLanguageName() in SkinCologneBlue
+               // not to capitalize the language names.
+               $language_urls = $this->data['language_urls'];
+               if ( empty( $language_urls ) ) {
+                       return "";
+               }
 
-               $s .= '<td class="top" nowrap="nowrap">';
-               $s .= '<a href="' . htmlspecialchars( $mainPageObj->getLocalURL() ) . '">';
-               $s .= '<span id="sitetitle">' . wfMessage( 'sitetitle' )->escaped() . '</span></a>';
+               $s = array();
+               foreach ( $language_urls as $key => $data ) {
+                       $s[] = $this->makeListItem( $key, $data, array( 'tag' => 'span' ) );
+               }
 
-               $s .= '</td><td class="top" id="top-syslinks" width="100%">';
-               $s .= $this->sysLinks();
-               $s .= '</td></tr><tr><td class="top-subheader">';
+               return wfMessage( 'otherlanguages' )->text()
+                       . wfMessage( 'colon-separator' )->text()
+                       . $this->getSkin()->getLanguage()->pipeList( $s );
+       }
 
-               $s .= '<font size="-1"><span id="sitesub">';
-               $s .= wfMessage( 'sitesubtitle' )->escaped() . '</span></font>';
-               $s .= '</td><td class="top-linkcollection">';
+       // @fixed
+       function pageTitleLinks() {
+               $s = array();
+               $footlinks = $this->getFooterLinks();
+               
+               foreach ( $footlinks['places'] as $item ) {
+                       $s[] = $this->data[$item];
+               }
+               
+               return $this->getSkin()->getLanguage()->pipeList( $s );
+       }
 
-               $s .= '<font size="-1"><span id="langlinks">';
-               $s .= str_replace( '<br />', '', $this->otherLanguages() );
+       function bottomLinks() {
+               $sep = wfMessage( 'pipe-separator' )->escaped() . "\n";
 
-               $s .= $this->getSkin()->getCategories();
+               $s = '';
+               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
+                       $element[] = '<strong>' . $this->editThisPage() . '</strong>';
 
-               $s .= '<br />' . $this->pageTitleLinks();
-               $s .= '</span></font>';
+                       if ( $this->getSkin()->getUser()->isLoggedIn() ) {
+                               $element[] = $this->watchThisPage();
+                       }
 
-               $s .= "</td></tr></table>\n";
+                       $element[] = $this->talkLink();
+                       $element[] = $this->historyLink();
+                       $element[] = $this->whatLinksHere();
+                       $element[] = $this->watchPageLinksLink();
 
-               $s .= "\n</div>\n<div id='article'>";
+                       $title = $this->getSkin()->getTitle();
 
-               $notice = $this->getSkin()->getSiteNotice();
-               if( $notice ) {
-                       $s .= "\n<div id='siteNotice'>$notice</div>\n";
+                       if (
+                               $title->getNamespace() == NS_USER ||
+                               $title->getNamespace() == NS_USER_TALK
+                       ) {
+                               $id = User::idFromName( $title->getText() );
+                               $ip = User::isIP( $title->getText() );
+
+                               # Both anons and non-anons have contributions list
+                               if ( $id || $ip ) {
+                                       $element[] = $this->userContribsLink();
+                               }
+
+                               if ( $this->getSkin()->showEmailUser( $id ) ) {
+                                       $element[] = $this->emailUserLink();
+                               }
+                       }
+
+                       $s = implode( $element, $sep );
+
+                       if ( $title->getArticleID() ) {
+                               $s .= "\n<br />";
+
+                               // Delete/protect/move links for privileged users
+                               if ( $this->getSkin()->getUser()->isAllowed( 'delete' ) ) {
+                                       $s .= $this->deleteThisPage();
+                               }
+
+                               if ( $this->getSkin()->getUser()->isAllowed( 'protect' ) ) {
+                                       $s .= $sep . $this->protectThisPage();
+                               }
+
+                               if ( $this->getSkin()->getUser()->isAllowed( 'move' ) ) {
+                                       $s .= $sep . $this->moveThisPage();
+                               }
+                       }
+
+                       $s .= "<br />\n" . $this->otherLanguages();
                }
-               $s .= $this->pageTitle();
-               $s .= $this->pageSubtitle() . "\n";
+
                return $s;
        }
 
-       /**
-        * @return string
-        */
-       function doAfterContent(){
-               $s = "\n</div><br clear='all' />\n";
+       function editThisPage() {
+               if ( !$this->getSkin()->getOutput()->isArticleRelated() ) {
+                       $s = wfMessage( 'protectedpage' )->text();
+               } else {
+                       $title = $this->getSkin()->getTitle();
+                       if ( $title->quickUserCan( 'edit' ) && $title->exists() ) {
+                               $t = wfMessage( 'editthispage' )->text();
+                       } elseif ( $title->quickUserCan( 'create' ) && !$title->exists() ) {
+                               $t = wfMessage( 'create-this-page' )->text();
+                       } else {
+                               $t = wfMessage( 'viewsource' )->text();
+                       }
 
-               $s .= "\n<div id='footer'>";
-               $s .= '<table width="98%" border="0" cellspacing="0"><tr>';
+                       $s = Linker::linkKnown(
+                               $title,
+                               $t,
+                               array(),
+                               $this->getSkin()->editUrlOptions()
+                       );
+               }
 
-               $s .= '<td class="bottom">';
+               return $s;
+       }
 
-               $s .= $this->bottomLinks();
-               $s .= $this->getSkin()->getLanguage()->pipeList( array(
-                       "\n<br />" . Linker::linkKnown(
-                               Title::newMainPage()
-                       ),
-                       $this->getSkin()->aboutLink(),
-                       $this->searchForm( wfMessage( 'qbfind' )->text() )
-               ) );
+       function deleteThisPage() {
+               $diff = $this->getSkin()->getRequest()->getVal( 'diff' );
+               $title = $this->getSkin()->getTitle();
+
+               if ( $title->getArticleID() && ( !$diff ) && $this->getSkin()->getUser()->isAllowed( 'delete' ) ) {
+                       $t = wfMessage( 'deletethispage' )->text();
+
+                       $s = Linker::linkKnown(
+                               $title,
+                               $t,
+                               array(),
+                               array( 'action' => 'delete' )
+                       );
+               } else {
+                       $s = '';
+               }
+
+               return $s;
+       }
+
+       function protectThisPage() {
+               $diff = $this->getSkin()->getRequest()->getVal( 'diff' );
+               $title = $this->getSkin()->getTitle();
+
+               if ( $title->getArticleID() && ( ! $diff ) && $this->getSkin()->getUser()->isAllowed( 'protect' ) ) {
+                       if ( $title->isProtected() ) {
+                               $text = wfMessage( 'unprotectthispage' )->text();
+                               $query = array( 'action' => 'unprotect' );
+                       } else {
+                               $text = wfMessage( 'protectthispage' )->text();
+                               $query = array( 'action' => 'protect' );
+                       }
+
+                       $s = Linker::linkKnown(
+                               $title,
+                               $text,
+                               array(),
+                               $query
+                       );
+               } else {
+                       $s = '';
+               }
 
-               $s .= "\n<br />" . $this->pageStats();
+               return $s;
+       }
 
-               $s .= '</td>';
-               $s .= "</tr></table>\n</div>\n</div>\n";
+       function watchThisPage() {
+               // Cache
+               $title = $this->getSkin()->getTitle();
+
+               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
+                       if ( $this->getSkin()->getUser()->isWatched( $title ) ) {
+                               $text = wfMessage( 'unwatchthispage' )->text();
+                               $query = array(
+                                       'action' => 'unwatch',
+                                       'token' => UnwatchAction::getUnwatchToken( $title, $this->getSkin()->getUser() ),
+                               );
+                               $id = 'mw-unwatch-link';
+                       } else {
+                               $text = wfMessage( 'watchthispage' )->text();
+                               $query = array(
+                                       'action' => 'watch',
+                                       'token' => WatchAction::getWatchToken( $title, $this->getSkin()->getUser() ),
+                               );
+                               $id = 'mw-watch-link';
+                       }
 
-               if ( $this->getSkin()->qbSetting() != 0 ) {
-                       $s .= $this->quickBar();
+                       $s = Linker::linkKnown(
+                               $title,
+                               $text,
+                               array( 'id' => $id ),
+                               $query
+                       );
+               } else {
+                       $s = wfMessage( 'notanarticle' )->text();
                }
+
                return $s;
        }
 
+       function moveThisPage() {
+               if ( $this->getSkin()->getTitle()->quickUserCan( 'move' ) ) {
+                       return Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Movepage' ),
+                               wfMessage( 'movethispage' )->text(),
+                               array(),
+                               array( 'target' => $this->getSkin()->getTitle()->getPrefixedDBkey() )
+                       );
+               } else {
+                       // no message if page is protected - would be redundant
+                       return '';
+               }
+       }
+
+       function historyLink() {
+               return Linker::link(
+                       $this->getSkin()->getTitle(),
+                       wfMessage( 'history' )->escaped(),
+                       array( 'rel' => 'archives' ),
+                       array( 'action' => 'history' )
+               );
+       }
+
+       function whatLinksHere() {
+               return Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'Whatlinkshere', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
+                       wfMessage( 'whatlinkshere' )->escaped()
+               );
+       }
+
+       function userContribsLink() {
+               return Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'Contributions', $this->getSkin()->getTitle()->getDBkey() ),
+                       wfMessage( 'contributions' )->escaped()
+               );
+       }
+
+       function emailUserLink() {
+               return Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'Emailuser', $this->getSkin()->getTitle()->getDBkey() ),
+                       wfMessage( 'emailuser' )->escaped()
+               );
+       }
+
+       function watchPageLinksLink() {
+               if ( !$this->getSkin()->getOutput()->isArticleRelated() ) {
+                       return wfMessage( 'parentheses', wfMessage( 'notanarticle' )->text() )->escaped();
+               } else {
+                       return Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Recentchangeslinked', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
+                               wfMessage( 'recentchangeslinked-toolbox' )->escaped()
+                       );
+               }
+       }
+
+       function talkLink() {
+               $title = $this->getSkin()->getTitle();
+               if ( NS_SPECIAL == $title->getNamespace() ) {
+                       # No discussion links for special pages
+                       return '';
+               }
+
+               $linkOptions = array();
+
+               if ( $title->isTalkPage() ) {
+                       $link = $title->getSubjectPage();
+                       switch( $link->getNamespace() ) {
+                               case NS_MAIN:
+                                       $text = wfMessage( 'articlepage' );
+                                       break;
+                               case NS_USER:
+                                       $text = wfMessage( 'userpage' );
+                                       break;
+                               case NS_PROJECT:
+                                       $text = wfMessage( 'projectpage' );
+                                       break;
+                               case NS_FILE:
+                                       $text = wfMessage( 'imagepage' );
+                                       # Make link known if image exists, even if the desc. page doesn't.
+                                       if ( wfFindFile( $link ) )
+                                               $linkOptions[] = 'known';
+                                       break;
+                               case NS_MEDIAWIKI:
+                                       $text = wfMessage( 'mediawikipage' );
+                                       break;
+                               case NS_TEMPLATE:
+                                       $text = wfMessage( 'templatepage' );
+                                       break;
+                               case NS_HELP:
+                                       $text = wfMessage( 'viewhelppage' );
+                                       break;
+                               case NS_CATEGORY:
+                                       $text = wfMessage( 'categorypage' );
+                                       break;
+                               default:
+                                       $text = wfMessage( 'articlepage' );
+                       }
+               } else {
+                       $link = $title->getTalkPage();
+                       $text = wfMessage( 'talkpage' );
+               }
+
+               $s = Linker::link( $link, $text->text(), array(), array(), $linkOptions );
+
+               return $s;
+       }
+       
        /**
         * @return string
+        * 
+        * @fixed
         */
-       function sysLinks() {
-               $li = SpecialPage::getTitleFor( 'Userlogin' );
-               $lo = SpecialPage::getTitleFor( 'Userlogout' );
+       function beforeContent() {
+               ob_start();
+?>
+<div id="content">
+       <div id="topbar">
+               <p id="sitetitle">
+                       <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="langlinks"><?php echo str_replace( '<br />', '', $this->otherLanguages() ) ?></div>
+                       <?php echo $this->getSkin()->getCategories() ?>
+                       <div id="titlelinks"><?php echo $this->pageTitleLinks() ?></div>
+                       <?php if ( $this->data['newtalk'] ) { ?>
+                       <div class="usermessage"><strong><?php echo $this->data['newtalk'] ?></strong></div>
+                       <?php } ?>
+               </div>
+       </div>
+       <div id="article">
+               <?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>
+               <?php if ( $this->translator->translate( 'tagline' ) ) { ?>
+               <p class="tagline"><?php echo htmlspecialchars( $this->translator->translate( 'tagline' ) ) ?></p>
+               <?php } ?>
+               <?php if ( $this->getSkin()->getOutput()->getSubtitle() ) { ?>
+               <p class="subtitle"><?php echo $this->getSkin()->getOutput()->getSubtitle() ?></p>
+               <?php } ?>
+               <?php if ( $this->getSkin()->subPageSubtitle() ) { ?>
+               <p class="subpages"><?php echo $this->getSkin()->subPageSubtitle() ?></p>
+               <?php } ?>
+<?php
+               $s = ob_get_contents();
+               ob_end_clean();
+               
+               return $s;
+       }
 
-               $rt = $this->getSkin()->getTitle()->getPrefixedURL();
-               if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
-                       $q = array();
-               } else {
-                       $q = array( 'returnto' => $rt );
+       /**
+        * @return string
+        * 
+        * @fixed
+        */
+       function afterContent() {
+               ob_start();
+?>
+       </div>
+       <div id='footer'>
+<?php
+               // Page-related links
+               echo $this->bottomLinks();
+               echo "\n<br />";
+               
+               // Footer and second searchbox
+               echo $this->getSkin()->getLanguage()->pipeList( array(
+                       $this->getSkin()->mainPageLink(),
+                       $this->getSkin()->aboutLink(),
+                       $this->searchForm( 'footer' )
+               ) );
+               echo "\n<br />";
+               
+               // Standard footer info
+               $footlinks = $this->getFooterLinks();
+               if ( $footlinks['info'] ) {
+                       foreach ( $footlinks['info'] as $item ) {
+                               echo $this->data[$item] . ' ';
+                       }
                }
+?>
+       </div>
+</div>
+<?php echo $this->quickBar() ?>
+<?php
+               $s = ob_get_contents();
+               ob_end_clean();
+
+               return $s;
+       }
 
+       /**
+        * @return string
+        * 
+        * @fixed
+        */
+       function sysLinks() {
                $s = array(
                        $this->getSkin()->mainPageLink(),
                        Linker::linkKnown(
@@ -174,221 +503,179 @@ class CologneBlueTemplate extends LegacyTemplate {
                                Title::newFromText( wfMessage( 'faqpage' )->inContentLanguage()->text() ),
                                wfMessage( 'faq' )->text()
                        ),
-                       Linker::specialLink( 'Specialpages' )
                );
 
-               /* show links to different language variants */
-               if( $this->variantLinks() ) {
-                       $s[] = $this->variantLinks();
-               }
-               if( $this->extensionTabLinks() ) {
-                       $s[] = $this->extensionTabLinks();
-               }
-               if ( $this->data['loggedin'] ) {
-                       $s[] = Linker::linkKnown(
-                               $lo,
-                               wfMessage( 'logout' )->text(),
-                               array(),
-                               $q
-                       );
-               } else {
-                       $s[] = Linker::linkKnown(
-                               $li,
-                               wfMessage( 'login' )->text(),
-                               array(),
-                               $q
-                       );
+               $personalUrls = $this->getPersonalTools();
+               foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
+                       if ( $personalUrls[$key] ) {
+                               $s[] = $this->makeListItem( $key, $personalUrls[$key], array( 'tag' => 'span' ) );
+                       }
                }
 
                return $this->getSkin()->getLanguage()->pipeList( $s );
        }
 
+
+
+       
+       /**
+        * @param $heading string
+        * @return string
+        * 
+        * @fixed
+        */
+       function menuHead( $heading ) {
+               return "\n<h6>" . htmlspecialchars( $heading ) . "</h6>";
+       }
+
        /**
         * Compute the sidebar
         * @access private
         *
         * @return string
+        * 
+        * @fixed
         */
        function quickBar(){
                $s = "\n<div id='quickbar'>";
 
-               $sep = '<br />';
-               $s .= $this->menuHead( 'qbfind' );
-               $s .= $this->searchForm();
-
-               $s .= $this->menuHead( 'qbbrowse' );
-
-               # Use the first heading from the Monobook sidebar as the "browse" section
-               $bar = $this->getSkin()->buildSidebar();
-               unset( $bar['SEARCH'] );
-               unset( $bar['LANGUAGES'] );
-               unset( $bar['TOOLBOX'] );
-
-               $barnumber = 1;
-               foreach ( $bar as $heading => $browseLinks ) {
-                       if ( $barnumber > 1 ) {
-                               $headingMsg = wfMessage( $heading );
-                               if ( $headingMsg->exists() ) {
-                                       $h = $headingMsg->text();
-                               } else {
-                                       $h = $heading;
-                               }
-                               $s .= "\n<h6>" . htmlspecialchars( $h ) . "</h6>";
-                       }
-                       if( is_array( $browseLinks ) ) {
-                               foreach ( $browseLinks as $link ) {
-                                       if ( $link['text'] != '-' ) {
-                                               $s .= "<a href=\"{$link['href']}\">" .
-                                                       htmlspecialchars( $link['text'] ) . '</a>' . $sep;
+               $sep = "<br />\n";
+               
+               $plain_bar = $this->data['sidebar'];
+               $bar = array();
+               
+               // Massage the sidebar
+               // We want to place SEARCH at the beginning and a lot of stuff before TOOLBOX (or at the end, if it's missing)
+               $additions_done = false;
+               while ( !$additions_done ) {
+                       $bar = array(); // Empty it out
+                       
+                       // Always display search on top
+                       $bar['SEARCH'] = true;
+                               
+                       foreach ( $plain_bar as $heading => $links ) {
+                               if ( $heading == 'TOOLBOX' ) {
+                                       if( $links !== NULL ) {
+                                               // If this is not a toolbox prosthetic we inserted outselves, fill it out
+                                               $plain_bar['TOOLBOX'] = $this->getToolbox();
                                        }
+                                       
+                                       // And insert the stuff
+                                       
+                                       // "This page" and "Edit" menus
+                                       // We need to do some massaging here... we reuse all of the items, except for $...['views']['view'],
+                                       // as $...['namespaces']['main'] and $...['namespaces']['talk'] together serve the same purpose.
+                                       // We also don't use $...['variants'], these are displayed in the top menu.
+                                       $content_navigation = $this->data['content_navigation'];
+                                       $qbpageoptions = array_merge(
+                                               $content_navigation['namespaces'],
+                                               array(
+                                                       'history' => $content_navigation['views']['history'],
+                                                       'watch' => $content_navigation['actions']['watch'],
+                                                       'unwatch' => $content_navigation['actions']['unwatch'],
+                                               )
+                                       );
+                                       $content_navigation['actions']['watch'] = null;
+                                       $content_navigation['actions']['unwatch'] = null;
+                                       $qbedit = array_merge(
+                                               array(
+                                                       'edit' => $content_navigation['views']['edit'],
+                                                       'addsection' => $content_navigation['views']['addsection'],
+                                               ),
+                                               $content_navigation['actions']
+                                       );
+                                       $bar['qbedit'] = $qbedit;
+                                       $bar['qbpageoptions'] = $qbpageoptions;
+                                       
+                                       // Personal tools ("My pages")
+                                       $bar['qbmyoptions'] = $this->getPersonalTools();
+                                       foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
+                                               $bar['qbmyoptions'][$key] = false;
+                                       }
+                                       
+                                       $additions_done = true;
                                }
-                       }
-                       $barnumber++;
-               }
-
-               $user = $this->getSkin()->getUser();
-
-               if ( $this->data['isarticle'] ) {
-                       $s .= $this->menuHead( 'qbedit' );
-                       $s .= '<strong>' . $this->editThisPage() . '</strong>';
-
-                       $s .= $sep . Linker::linkKnown(
-                               Title::newFromText( wfMessage( 'edithelppage' )->inContentLanguage()->text() ),
-                               wfMessage( 'edithelp' )->text()
-                       );
-
-                       if( $this->data['loggedin'] ) {
-                               $s .= $sep . $this->moveThisPage();
-                       }
-                       if ( $user->isAllowed( 'delete' ) ) {
-                               $dtp = $this->deleteThisPage();
-                               if ( $dtp != '' ) {
-                                       $s .= $sep . $dtp;
-                               }
-                       }
-                       if ( $user->isAllowed( 'protect' ) ) {
-                               $ptp = $this->protectThisPage();
-                               if ( $ptp != '' ) {
-                                       $s .= $sep . $ptp;
+                               
+                               // Re-insert current heading, unless it's SEARCH
+                               if ( $heading != 'SEARCH' ) {
+                                       $bar[$heading] = $plain_bar[$heading];
                                }
                        }
-                       $s .= $sep;
-
-                       $s .= $this->menuHead( 'qbpageoptions' );
-                       $s .= $this->talkLink()
-                                       . $sep . $this->commentLink()
-                                       . $sep . $this->printableLink();
-                       if ( $this->data['loggedin'] ) {
-                               $s .= $sep . $this->watchThisPage();
+                       
+                       // If TOOLBOX is missing, $additions_done is still false
+                       if ( !$additions_done ) {
+                               $plain_bar['TOOLBOX'] = false;
                        }
-
-                       $s .= $sep;
-
-                       $s .= $this->menuHead( 'qbpageinfo' )
-                                       . $this->historyLink()
-                                       . $sep . $this->whatLinksHere()
-                                       . $sep . $this->watchPageLinksLink();
-
-                       $title = $this->getSkin()->getTitle();
-                       $tns = $title->getNamespace();
-                       if ( $tns == NS_USER || $tns == NS_USER_TALK ) {
-                               $id = User::idFromName( $title->getText() );
-                               if( $id != 0 ) {
-                                       $s .= $sep . $this->userContribsLink();
-                                       if( $this->getSkin()->showEmailUser( $id ) ) {
-                                               $s .= $sep . $this->emailUserLink();
+               }
+               
+               foreach ( $bar as $heading => $links ) {
+                       if ( $heading == 'SEARCH' ) {
+                               $s .= $this->menuHead( wfMessage( 'qbfind' )->text() );
+                               $s .= $this->searchForm( 'sidebar' );
+                       } elseif ( $heading == 'LANGUAGES' ) {
+                               // discard these; we display languages below page content
+                       } else {
+                               if ( $links ) {
+                                       // Use the navigation heading from standard sidebar as the "browse" section
+                                       if ( $heading == 'navigation' ) {
+                                               $heading = 'qbbrowse';
+                                       }
+                                       if ( $heading == 'TOOLBOX' ) {
+                                               $heading = 'toolbox';
+                                       }
+                                       
+                                       $headingMsg = wfMessage( $heading );
+                                       $any_link = false;
+                                       $t = $this->menuHead( $headingMsg->exists() ? $headingMsg->text() : $heading );
+                                       
+                                       foreach ( $links as $key => $link ) {
+                                               // Can be empty due to rampant sidebar massaging we're doing above
+                                               if ( $link ) {
+                                                       $any_link = true;
+                                                       $t .= $this->makeListItem( $key, $link, array( 'tag' => 'span' ) ) . $sep;
+                                               }
+                                       }
+                                       
+                                       if ( $any_link ) {
+                                               $s .= $t;
                                        }
                                }
                        }
-                       $s .= $sep;
-               }
-
-               $s .= $this->menuHead( 'qbmyoptions' );
-               if ( $this->data['loggedin'] ) {
-                       $tl = Linker::linkKnown(
-                               $user->getTalkPage(),
-                               wfMessage( 'mytalk' )->escaped()
-                       );
-                       if ( $user->getNewtalk() ) {
-                               $tl .= ' *';
-                       }
-
-                       $s .= Linker::linkKnown(
-                                       $user->getUserPage(),
-                                       wfMessage( 'mypage' )->escaped()
-                               ) . $sep . $tl . $sep . Linker::specialLink( 'Watchlist' )
-                                       . $sep .
-                               Linker::linkKnown(
-                                       SpecialPage::getSafeTitleFor( 'Contributions', $user->getName() ),
-                                       wfMessage( 'mycontris' )->escaped()
-                               ) . $sep . Linker::specialLink( 'Preferences' )
-                               . $sep . Linker::specialLink( 'Userlogout' );
-               } else {
-                       $s .= Linker::specialLink( 'Userlogin' );
                }
 
-               $s .= $this->menuHead( 'qbspecialpages' )
-                       . Linker::specialLink( 'Newpages' )
-                       . $sep . Linker::specialLink( 'Listfiles' )
-                       . $sep . Linker::specialLink( 'Statistics' );
-               if( UploadBase::isEnabled() && UploadBase::isAllowed( $user ) === true ) {
-                       $s .= $sep . $this->getUploadLink();
-               }
-
-               global $wgSiteSupportPage;
-
-               if( $wgSiteSupportPage ) {
-                       $s .= $sep . '<a href="' . htmlspecialchars( $wgSiteSupportPage ) . '" class="internal">'
-                                       . wfMessage( 'sitesupport' )->escaped() . '</a>';
-               }
-
-               $s .= $sep . Linker::linkKnown(
-                       SpecialPage::getTitleFor( 'Specialpages' ),
-                       wfMessage( 'moredotdotdot' )->text()
-               );
-
                $s .= $sep . "\n</div>\n";
                return $s;
        }
 
-       /**
-        * @param $key string
-        * @return string
-        */
-       function menuHead( $key ) {
-               $s = "\n<h6>" . wfMessage( $key )->text() . "</h6>";
-               return $s;
-       }
-
        /**
         * @param $label string
         * @return string
+        * 
+        * @fixed
         */
-       function searchForm( $label = '' ) {
+       function searchForm( $which ) {
                global $wgUseTwoButtonsSearchForm;
 
                $search = $this->getSkin()->getRequest()->getText( 'search' );
                $action = $this->data['searchaction'];
-               $s = "<form id=\"searchform{$this->searchboxes}\" method=\"get\" class=\"inline\" action=\"$action\">";
-               if( $label != '' ) {
-                       $s .= "{$label}: ";
+               $s = "<form id=\"searchform-" . htmlspecialchars($which) . "\" method=\"get\" class=\"inline\" action=\"$action\">";
+               if( $which == 'footer' ) {
+                       $s .= wfMessage( 'qbfind' )->text() . ": ";
                }
 
-               $s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
-                       . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" /><br />"
-                       . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . wfMessage( 'searcharticle' )->escaped() . "\" />";
+               $s .= "<input type='text' class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
+                       . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" />"
+                       . ($which == 'footer' ? " " : "<br />")
+                       . "<input type='submit' class=\"searchButton\" name=\"go\" value=\"" . wfMessage( 'searcharticle' )->escaped() . "\" />";
 
                if( $wgUseTwoButtonsSearchForm ) {
-                       $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . wfMessage( 'search' )->escaped() . "\" />\n";
+                       $s .= " <input type='submit' class=\"searchButton\" name=\"fulltext\" value=\"" . wfMessage( 'search' )->escaped() . "\" />\n";
                } else {
                        $s .= '<div><a href="' . $action . '" rel="search">' . wfMessage( 'powersearch-legend' )->escaped() . "</a></div>\n";
                }
 
                $s .= '</form>';
 
-               // Ensure unique id's for search boxes made after the first
-               $this->searchboxes = $this->searchboxes == '' ? 2 : $this->searchboxes + 1;
-
                return $s;
        }
 }
index 6e87786..4211bb8 100644 (file)
@@ -77,7 +77,7 @@ class ModernTemplate extends MonoBookTemplate {
        <!-- 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 -->
-       <div id="mw_contentholder">
+       <div id="mw_contentholder" class="mw-body">
                <div class='mw-topboxes'>
                        <div id="mw-js-message" style="display:none;"<?php $this->html('userlangattributes')?>></div>
                        <div class="mw-topbox" id="siteSub"><?php $this->msg('tagline') ?></div>
index 5c7ca14..0bd7134 100644 (file)
@@ -80,7 +80,7 @@ class MonoBookTemplate extends BaseTemplate {
 
                $this->html( 'headelement' );
 ?><div id="globalWrapper">
-<div id="column-content"><div id="content">
+<div id="column-content"><div id="content" class="mw-body-primary">
        <a id="top"></a>
        <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
 
index d06bdfd..9a3ab94 100644 (file)
@@ -26,7 +26,7 @@ if( !defined( 'MEDIAWIKI' ) )
        die( -1 );
 
 /** */
-require_once( dirname(__FILE__) . '/MonoBook.php' );
+require_once( __DIR__ . '/MonoBook.php' );
 
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
index e47b35f..de11639 100644 (file)
@@ -62,12 +62,12 @@ class StandardTemplate extends LegacyTemplate {
 
                $s = "\n</div><br style=\"clear:both\" />\n";
                $s .= "\n<div id='footer'>";
-               $s .= '<table border="0" cellspacing="0"><tr>';
+               $s .= '<table cellspacing="0"><tr>';
 
                wfProfileOut( __METHOD__ . '-1' );
                wfProfileIn( __METHOD__ . '-2' );
                $l = $this->getSkin()->getLanguage()->alignStart();
-               $s .= "<td class='bottom' align='$l' valign='top'>";
+               $s .= "<td class='bottom' style='text-align: $l; vertical-align: top;'>";
 
                $s .= $this->bottomLinks();
                $s .= "\n<br />" . $this->getSkin()->getLanguage()->pipeList( array(
index 57b5410..aac786d 100644 (file)
@@ -2,6 +2,7 @@ body {
        margin: 0;
        padding: 0;
        color: black;
+       font-family: serif;
 }
 
 #specialform {
@@ -20,10 +21,6 @@ body {
        font-size: 8pt;
 }
 
-#topbar {
-       padding: 0;
-}
-
 #powersearch {
        background: #DDEEFF;
        border-style: solid;
@@ -61,78 +58,25 @@ textarea {
 }
 
 #footer {
+       margin-right: 2%;
+       margin-top: 1em;
        padding: 4px;
+       font-family: verdana, arial, sans-serif;
+       font-size: 10pt;
+       text-align: center;
 }
 
 #footer form {
        display: inline;
 }
 
-#sitetitle {
-       font-family: Times, serif;
-       color: white;
-       font-weight: normal;
-       font-size: 32pt;
-       line-height: 32pt;
-}
-
-td.top {
-       background-color: #6688AA;
-       color: white;
-       margin-top: 4px;
-       margin-bottom: 4px;
-       padding-top: 0;
-       padding-bottom: 0;
-       text-transform: uppercase;
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 8pt;
-}
-
-td.top a {
-       font-family: Verdana, Arial, sans-serif;
-       background-color: #6688AA;
-       color: white;
-       text-decoration: none;
-       font-size: 10pt;
-}
-
-td#top-syslinks {
-       text-align: right;
-       vertical-align: bottom;
-}
-td.top-linkcollection {
-       text-align: right;
-}
-/**
- * Overrides text justification (user preference)
- * See bug 31990
- */
-td.top-linkcollection #catlinks {
-       text-align: right;
-}
-td.top-subheader {
-       vertical-align: top;
-}
-td.bottom {
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 10pt;
-       padding: 0;
-       text-align: center;
-       vertical-align: bottom;
-}
-
 #pagestats {
        font-family: Verdana, Arial, sans-serif;
        color: black;
        font-size: 9pt;
 }
 
-#sitesub {
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 9pt; font-weight: bold;
-       color: black;
-       padding-top: 0;
-}
+
 
 #quickbar {
        font-family: Verdana, Arial, sans-serif;
@@ -177,12 +121,12 @@ h1 .editsection {
        font-size: 55.6%;
 }
 
-h1.pagetitle {
+h1#firstHeading {
        padding-bottom: 0;
        margin-bottom: 0;
 }
 
-#article p.subtitle {
+#article p.subtitle, #article p.subpages, #article p.tagline {
        color: #666666;
        font-size: 11pt;
        font-weight: bold;
@@ -227,3 +171,82 @@ small {
 input.mw-searchInput {
        width: 106px;
 }
+
+/* Directionality-specific styles */
+#quickbar { position: absolute; left: 4px; }
+#article { margin-left: 148px; margin-right: 4px; }
+#footer { margin-left: 152px; }
+
+
+#sitetitle, #sitesub, #toplinks, #linkcollection {
+       margin-top: 0; 
+       margin-bottom: 0; 
+}
+
+#sitetitle, #toplinks {
+       color: white;
+       text-transform: uppercase;
+       height: 32pt;
+}
+#sitetitle {
+       padding-left: 8px;
+       font-family: Times, serif;
+       font-weight: normal;
+       font-size: 32pt;
+       line-height: 32pt;
+       background-color: #6688AA;
+}
+#sitetitle a, #toplinks a {
+       color: white;
+       text-decoration: none; 
+}
+/* Bring #sitetitle to top. Otherwise #toplinks is overlaid over it, making the link unclickable. */
+#sitetitle a {
+       position: relative;
+       z-index: 10
+}
+
+#toplinks {
+       font-family: Verdana, Arial, sans-serif;
+       position: absolute;
+       top: 0;
+       right: 8px;
+       width: 100%;
+       font-size: 8pt;
+}
+#toplinks a {
+       font-size: 10pt;
+}
+#toplinks p {
+       position: absolute;
+       right: 0;
+       margin: 0;
+       width: 100%;
+       text-align: right;
+}
+#toplinks #syslinks {
+       bottom: 0;
+}
+#toplinks #variantlinks {
+       bottom: 12pt;
+}
+
+#sitesub {
+       float: left;
+       margin-left: 8px;
+       font-family: Verdana, Arial, sans-serif;
+       font-size: 9pt;
+       font-weight: bold;
+       color: black;
+}
+
+#linkcollection {
+       margin-top: 0.5em;
+       font-size: small;
+       margin-right: 8px;
+       text-align: right;
+}
+/* Override text justification (user preference), see bug 31990 */
+#linkcollection * {
+       text-align: right;
+}
index cf602ea..48dd943 100644 (file)
@@ -319,7 +319,7 @@ td.diff-context {
  */
 table.wikitable,
 table.mw_metadata {
-       margin: 1em 1em 1em 0;
+       margin: 1em 0;
        border: 1px #aaa solid;
        background: white;
        border-collapse: collapse;
index 23f7302..b1e28ab 100644 (file)
@@ -1,6 +1,17 @@
-(function( $ ) {
-       $( document ).ready( function() {
+( function ( $ ) {
+       $( document ).ready( function () {
+               var $label, labelText;
 
+               function syncText() {
+                       var value = $(this).val()
+                               .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
+                               .replace( /&/, '&amp;' )
+                               .replace( /__+/g, '_' )
+                               .replace( /^_+/, '' )
+                               .replace( /_+$/, '' );
+                       value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
+                       $label.text( labelText.replace( '$1', value ) );
+               }
 
                // Set up the help system
                $( '.mw-help-field-data' )
@@ -8,7 +19,7 @@
                        .closest( '.mw-help-field-container' )
                                .find( '.mw-help-field-hint' )
                                        .show()
-                                       .click( function() {
+                                       .click( function () {
                                                $(this)
                                                        .closest( '.mw-help-field-container' )
                                                                .find( '.mw-help-field-data' )
                
                // Show/hide code for DB-specific options
                // FIXME: Do we want slow, fast, or even non-animated (instantaneous) showing/hiding here?
-               $( '.dbRadio' ).each( function() { $( '#' + $(this).attr( 'rel' ) ).hide(); } );
-               $( '#' + $( '.dbRadio:checked' ).attr( 'rel' ) ).show();
-               $( '.dbRadio' ).click( function() {
-                       var $checked = $( '.dbRadio:checked' );
-                       var $wrapper = $( '#' + $checked.attr( 'rel' ) );
-                       if ( !$wrapper.is( ':visible' ) ) {
+               $( '.dbRadio' ).each( function () {
+                       $( document.getElementById( $(this).attr( 'rel' ) ) ).hide();
+               } );
+               $( document.getElementById( $( '.dbRadio:checked' ).attr( 'rel' ) ) ).show();
+               $( '.dbRadio' ).click( function () {
+                       var $checked = $( '.dbRadio:checked' ),
+                               $wrapper = $( document.getElementById( $checked.attr( 'rel' ) ) );
+                       if ( $wrapper.is( ':hidden' ) ) {
                                $( '.dbWrapper' ).hide( 'slow' );
                                $wrapper.show( 'slow' );
                        }
                } );
                
                // Scroll to the bottom of upgrade log
-               $( '#config-live-log' ).find( '> textarea' ).each( function() { this.scrollTop = this.scrollHeight; } );
+               $( '#config-live-log' ).children( 'textarea' ).each( function () {
+                       this.scrollTop = this.scrollHeight;
+               } );
                
                // Show/hide Creative Commons thingy
-               $( '.licenseRadio' ).click( function() {
+               $( '.licenseRadio' ).click( function () {
                        var $wrapper = $( '#config-cc-wrapper' );
                        if ( $( '#config__LicenseCode_cc-choose' ).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
@@ -42,7 +57,7 @@
                } );
                
                // Show/hide random stuff (email, upload)
-               $( '.showHideRadio' ).click( function() {
+               $( '.showHideRadio' ).click( function () {
                        var $wrapper = $( '#' + $(this).attr( 'rel' ) );
                        if ( $(this).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
@@ -50,7 +65,7 @@
                                $wrapper.hide( 'slow' );
                        }
                } );
-               $( '.hideShowRadio' ).click( function() {
+               $( '.hideShowRadio' ).click( function () {
                        var $wrapper = $( '#' + $(this).attr( 'rel' ) );
                        if ( $(this).is( ':checked' ) ) {
                                $wrapper.hide( 'slow' );
                $( '.enabledByOther' ).closest( '.config-block' ).hide();
 
                // Enable/disable "other" textboxes
-               $( '.enableForOther' ).click( function() {
-                       var $textbox = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).val() == 'other' ) { // FIXME: Ugh, this is ugly
+               $( '.enableForOther' ).click( function () {
+                       var $textbox = $( document.getElementById( $(this).attr( 'rel' ) ) );
+                       // FIXME: Ugh, this is ugly
+                       if ( $(this).val() === 'other' ) {
                                $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
                        } else {
                                $textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
                $label = $( 'label[for=config__NamespaceType_site-name]' );
                labelText = $label.text();
                $label.text( labelText.replace( '$1', '' ) );
-               $( '#config_wgSitename' ).bind( 'keyup change', syncText ).each( syncText );
-               function syncText() {
-                       var value = $(this).val()
-                               .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
-                               .replace( /&/, '&amp;' )
-                               .replace( /__+/g, '_' )
-                               .replace( /^_+/, '' )
-                               .replace( /_+$/, '' );
-                       value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
-                       $label.text( labelText.replace( '$1', value ) );
-               }
+               $( '#config_wgSitename' ).on( 'keyup change', syncText ).each( syncText );
 
                // Show/Hide memcached servers when needed
-               $("input[name$='config_wgMainCacheType']").change( function() {
+               $( 'input[name$="config_wgMainCacheType"]' ).change( function () {
                        var $memc = $( "#config-memcachewrapper" );
-                       if( $( "input[name$='config_wgMainCacheType']:checked" ).val() == 'memcached' ) {
+                       if( $( 'input[name$="config_wgMainCacheType"]:checked' ).val() === 'memcached' ) {
                                $memc.show( 'slow' );
                        } else {
                                $memc.hide( 'slow' );
                        }
                } );
        } );
-})(jQuery);
+}( jQuery ) );
index f82f45d..3497423 100644 (file)
Binary files a/skins/common/images/add.png and b/skins/common/images/add.png differ
index 3288d10..72203fd 100644 (file)
Binary files a/skins/common/images/ajax-loader.gif and b/skins/common/images/ajax-loader.gif differ
index 37d3a43..6146be4 100644 (file)
Binary files a/skins/common/images/spinner.gif and b/skins/common/images/spinner.gif differ
diff --git a/skins/common/mwsuggest.js b/skins/common/mwsuggest.js
deleted file mode 100644 (file)
index dac5954..0000000
+++ /dev/null
@@ -1,1063 +0,0 @@
-/*
- * OpenSearch ajax suggestion engine for MediaWiki
- *
- * uses core MediaWiki open search support to fetch suggestions
- * and show them below search boxes and other inputs
- *
- * by Robert Stojnic (April 2008)
- */
-
-// Make sure wgMWSuggestTemplate is defined
-if ( !mw.config.exists( 'wgMWSuggestTemplate' ) ) {
-       mw.config.set( 'wgMWSuggestTemplate', mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' )
-                + "/api.php?action=opensearch\x26search={searchTerms}\x26namespace={namespaces}\x26suggest" );
-}
-
-// search_box_id -> Results object
-window.os_map = {};
-// cached data, url -> json_text
-window.os_cache = {};
-// global variables for suggest_keypress
-window.os_cur_keypressed = 0;
-window.os_keypressed_count = 0;
-// type: Timer
-window.os_timer = null;
-// tie mousedown/up events
-window.os_mouse_pressed = false;
-window.os_mouse_num = -1;
-// if true, the last change was made by mouse (and not keyboard)
-window.os_mouse_moved = false;
-// delay between keypress and suggestion (in ms)
-window.os_search_timeout = 250;
-// these pairs of inputs/forms will be autoloaded at startup
-window.os_autoload_inputs = ['searchInput', 'searchInput2', 'powerSearchText', 'searchText'];
-window.os_autoload_forms = ['searchform', 'searchform2', 'powersearch', 'search'];
-// if we stopped the service
-window.os_is_stopped = false;
-// max lines to show in suggest table
-window.os_max_lines_per_suggest = 7;
-// number of steps to animate expansion/contraction of container width
-window.os_animation_steps = 6;
-// num of pixels of smallest step
-window.os_animation_min_step = 2;
-// delay between steps (in ms)
-window.os_animation_delay = 30;
-// max width of container in percent of normal size (1 == 100%)
-window.os_container_max_width = 2;
-// currently active animation timer
-window.os_animation_timer = null;
-// whether MWSuggest is enabled. Set to false when os_MWSuggestDisable() is called
-window.os_enabled = true;
-
-/**
- * <datalist> is a new HTML5 element that allows you to manually
- * supply suggestion lists and have them rendered according to the
- * right platform conventions.  Opera as of version 11 has a fatal
- * problem: the suggestion lags behind what the user types by one
- * keypress.  (Reported as DSK-276870 to Opera's secret bug tracker.)
- * There are also problems with other browsers, including Firefox and
- * Safari: See bug 31602 for details.
- */
-window.os_use_datalist = false;
-
-/** Timeout timer class that will fetch the results */
-window.os_Timer = function( id, r, query ) {
-       this.id = id;
-       this.r = r;
-       this.query = query;
-};
-
-/** Property class for single search box */
-window.os_Results = function( name, formname ) {
-       this.searchform = formname; // id of the searchform
-       this.searchbox = name; // id of the searchbox
-       this.container = name + 'Suggest'; // div that holds results
-       this.resultTable = name + 'Result'; // id base for the result table (+num = table row)
-       this.resultText = name + 'ResultText'; // id base for the spans within result tables (+num)
-       this.toggle = name + 'Toggle'; // div that has the toggle (enable/disable) link
-       this.query = null; // last processed query
-       this.results = null;  // parsed titles
-       this.resultCount = 0; // number of results
-       this.original = null; // query that user entered
-       this.selected = -1; // which result is selected
-       this.containerCount = 0; // number of results visible in container
-       this.containerRow = 0; // height of result field in the container
-       this.containerTotal = 0; // total height of the container will all results
-       this.visible = false; // if container is visible
-       this.stayHidden = false; // don't try to show if lost focus
-};
-
-/** Timer user to animate expansion/contraction of container width */
-window.os_AnimationTimer = function( r, target ) {
-       this.r = r;
-       var current = document.getElementById(r.container).offsetWidth;
-       this.inc = Math.round( ( target - current ) / os_animation_steps );
-       if( this.inc < os_animation_min_step && this.inc >=0 ) {
-               this.inc = os_animation_min_step; // minimal animation step
-       }
-       if( this.inc > -os_animation_min_step && this.inc < 0 ) {
-               this.inc = -os_animation_min_step;
-       }
-       this.target = target;
-};
-
-/******************
- * Initialization
- ******************/
-
-/** Initialization, call upon page onload */
-window.os_MWSuggestInit = function() {
-       if ( !window.os_enabled ) {
-               return;
-       }
-       
-       for( var i = 0; i < os_autoload_inputs.length; i++ ) {
-               var id = os_autoload_inputs[i];
-               var form = os_autoload_forms[i];
-               element = document.getElementById( id );
-               if( element != null ) {
-                       os_initHandlers( id, form, element );
-               }
-       }
-};
-
-/* Teardown, called when things like SimpleSearch need to disable MWSuggest */
-window.os_MWSuggestTeardown = function() {
-       for( var i = 0; i < os_autoload_inputs.length; i++ ) {
-               var id = os_autoload_inputs[i];
-               var form = os_autoload_forms[i];
-               element = document.getElementById( id );
-               if( element != null ) {
-                       os_teardownHandlers( id, form, element );
-               }
-       }
-};
-
-/* Call this to disable MWSuggest. Works regardless of whether MWSuggest has been initialized already. */
-window.os_MWSuggestDisable = function() {
-       window.os_MWSuggestTeardown();
-       window.os_enabled = false;
-}
-       
-
-/** Init Result objects and event handlers */
-window.os_initHandlers = function( name, formname, element ) {
-       var r = new os_Results( name, formname );
-       var formElement = document.getElementById( formname );
-       if( !formElement ) {
-               // Older browsers (Opera 8) cannot get form elements
-               return;
-       }
-       // event handler
-       os_hookEvent( element, 'keyup', os_eventKeyup );
-       os_hookEvent( element, 'keydown', os_eventKeydown );
-       os_hookEvent( element, 'keypress', os_eventKeypress );
-       if ( !os_use_datalist ) {
-               // These are needed for the div hack to hide it if the user blurs.
-               os_hookEvent( element, 'blur', os_eventBlur );
-               os_hookEvent( element, 'focus', os_eventFocus );
-               // We don't want browser auto-suggestions interfering with our div, but
-               // autocomplete must be on for datalist to work (at least in Opera
-               // 10.10).
-               element.setAttribute( 'autocomplete', 'off' );
-       }
-       // stopping handler
-       os_hookEvent( formElement, 'submit', os_eventOnsubmit );
-       os_map[name] = r;
-       // toggle link
-       if( document.getElementById( r.toggle ) == null ) {
-               // TODO: disable this while we figure out a way for this to work in all browsers
-               /* if( name == 'searchInput' ) {
-                       // special case: place above the main search box
-                       var t = os_createToggle( r, 'os-suggest-toggle' );
-                       var searchBody = document.getElementById( 'searchBody' );
-                       var first = searchBody.parentNode.firstChild.nextSibling.appendChild(t);
-               } else {
-                       // default: place below search box to the right
-                       var t = os_createToggle( r, 'os-suggest-toggle-def' );
-                       var top = element.offsetTop + element.offsetHeight;
-                       var left = element.offsetLeft + element.offsetWidth;
-                       t.style.position = 'absolute';
-                       t.style.top = top + 'px';
-                       t.style.left = left + 'px';
-                       element.parentNode.appendChild( t );
-                       // only now width gets calculated, shift right
-                       left -= t.offsetWidth;
-                       t.style.left = left + 'px';
-                       t.style.visibility = 'visible';
-               } */
-       }
-
-};
-
-window.os_teardownHandlers = function( name, formname, element ) {
-       var formElement = document.getElementById( formname );
-       if( !formElement ) {
-               // Older browsers (Opera 8) cannot get form elements
-               return;
-       }
-
-       os_unhookEvent( element, 'keyup', os_eventKeyup );
-       os_unhookEvent( element, 'keydown', os_eventKeydown );
-       os_unhookEvent( element, 'keypress', os_eventKeypress );
-       if ( !os_use_datalist ) {
-               // These are needed for the div hack to hide it if the user blurs.
-               os_unhookEvent( element, 'blur', os_eventBlur );
-               os_unhookEvent( element, 'focus', os_eventFocus );
-               // We don't want browser auto-suggestions interfering with our div, but
-               // autocomplete must be on for datalist to work (at least in Opera
-               // 10.10).
-               element.removeAttribute( 'autocomplete' );
-       }
-       // stopping handler
-       os_unhookEvent( formElement, 'submit', os_eventOnsubmit );
-};
-
-
-window.os_hookEvent = function( element, hookName, hookFunct ) {
-       if ( element.addEventListener ) {
-               element.addEventListener( hookName, hookFunct, false );
-       } else if ( window.attachEvent ) {
-               element.attachEvent( 'on' + hookName, hookFunct );
-       }
-};
-
-window.os_unhookEvent = function( element, hookName, hookFunct ) {
-       if ( element.removeEventListener ) {
-               element.removeEventListener( hookName, hookFunct, false );
-       } else if ( element.detachEvent ) {
-               element.detachEvent( 'on' + hookName, hookFunct );
-       }
-}
-
-/********************
- *  Keyboard events
- ********************/
-
-/** Event handler that will fetch results on keyup */
-window.os_eventKeyup = function( e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[targ.id];
-       if( r == null ) {
-               return; // not our event
-       }
-
-       // some browsers won't generate keypressed for arrow keys, catch it
-       if( os_keypressed_count == 0 ) {
-               os_processKey( r, os_cur_keypressed, targ );
-       }
-       var query = targ.value;
-       os_fetchResults( r, query, os_search_timeout );
-};
-
-/** catch arrows up/down and escape to hide the suggestions */
-window.os_processKey = function( r, keypressed, targ ) {
-       if ( keypressed == 40 && !r.visible && os_timer == null ) {
-               // If the user hits the down arrow, fetch results immediately if none
-               // are already displayed.
-               r.query = '';
-               os_fetchResults( r, targ.value, 0 );
-       }
-       // Otherwise, if we're not using datalist, we need to handle scrolling and
-       // so on.
-       if ( os_use_datalist ) {
-               return;
-       }
-       if ( keypressed == 40 ) { // Arrow Down
-               if ( r.visible ) {
-                       os_changeHighlight( r, r.selected, r.selected + 1, true );
-               }
-       } else if ( keypressed == 38 ) { // Arrow Up
-               if ( r.visible ) {
-                       os_changeHighlight( r, r.selected, r.selected - 1, true );
-               }
-       } else if( keypressed == 27 ) { // Escape
-               document.getElementById( r.searchbox ).value = r.original;
-               r.query = r.original;
-               os_hideResults( r );
-       } else if( r.query != document.getElementById( r.searchbox ).value ) {
-               // os_hideResults( r ); // don't show old suggestions
-       }
-};
-
-/** When keys is held down use a timer to output regular events */
-window.os_eventKeypress = function( e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[targ.id];
-       if( r == null ) {
-               return; // not our event
-       }
-
-       var keypressed = os_cur_keypressed;
-
-       os_keypressed_count++;
-       os_processKey( r, keypressed, targ );
-};
-
-/** Catch the key code (Firefox bug) */
-window.os_eventKeydown = function( e ) {
-       if ( !e ) {
-               e = window.event;
-       }
-       var targ = os_getTarget( e );
-       var r = os_map[targ.id];
-       if( r == null ) {
-               return; // not our event
-       }
-
-       os_mouse_moved = false;
-
-       os_cur_keypressed = ( e.keyCode == undefined ) ? e.which : e.keyCode;
-       os_keypressed_count = 0;
-};
-
-
-/** When the form is submitted hide everything, cancel updates... */
-window.os_eventOnsubmit = function( e ) {
-       var targ = os_getTarget( e );
-
-       os_is_stopped = true;
-       // kill timed requests
-       if( os_timer != null && os_timer.id != null ) {
-               clearTimeout( os_timer.id );
-               os_timer = null;
-       }
-       // Hide all suggestions
-       for( i = 0; i < os_autoload_inputs.length; i++ ) {
-               var r = os_map[os_autoload_inputs[i]];
-               if( r != null ) {
-                       var b = document.getElementById( r.searchform );
-                       if( b != null && b == targ ) {
-                               // set query value so the handler won't try to fetch additional results
-                               r.query = document.getElementById( r.searchbox ).value;
-                       }
-                       os_hideResults( r );
-               }
-       }
-       return true;
-};
-
-
-
-/** Hide results from the user, either making the div visibility=hidden or
- * detaching the datalist from the input. */
-window.os_hideResults = function( r ) {
-       if ( os_use_datalist ) {
-               document.getElementById( r.searchbox ).setAttribute( 'list', '' );
-       } else {
-               var c = document.getElementById( r.container );
-               if ( c != null ) {
-                       c.style.visibility = 'hidden';
-               }
-       }
-       r.visible = false;
-       r.selected = -1;
-};
-
-window.os_decodeValue = function( value ) {
-       if ( decodeURIComponent ) {
-               return decodeURIComponent( value );
-       }
-       if( unescape ) {
-               return unescape( value );
-       }
-       return null;
-};
-
-window.os_encodeQuery = function( value ) {
-       if ( encodeURIComponent ) {
-               return encodeURIComponent( value );
-       }
-       if( escape ) {
-               return escape( value );
-       }
-       return null;
-};
-
-/** Handles data from XMLHttpRequest, and updates the suggest results */
-window.os_updateResults = function( r, query, text, cacheKey ) {
-       os_cache[cacheKey] = text;
-       r.query = query;
-       r.original = query;
-       if( text == '' ) {
-               r.results = null;
-               r.resultCount = 0;
-               os_hideResults( r );
-       } else {
-               try {
-                       var p = eval( '(' + text + ')' ); // simple json parse, could do a safer one
-                       if( p.length < 2 || p[1].length == 0 ) {
-                               r.results = null;
-                               r.resultCount = 0;
-                               os_hideResults( r );
-                               return;
-                       }
-                       if ( os_use_datalist ) {
-                               os_setupDatalist( r, p[1] );
-                       } else {
-                               os_setupDiv( r, p[1] );
-                       }
-               } catch( e ) {
-                       // bad response from server or such
-                       os_hideResults( r );
-                       os_cache[cacheKey] = null;
-               }
-       }
-};
-
-/**
- * Create and populate a <datalist>.
- *
- * @param r       os_Result object
- * @param results Array of the new results to replace existing ones
- */
-window.os_setupDatalist = function( r, results ) {
-       var s = document.getElementById( r.searchbox );
-       var c = document.getElementById( r.container );
-       if ( c == null ) {
-               c = document.createElement( 'datalist' );
-               c.setAttribute( 'id', r.container );
-               document.body.appendChild( c );
-       } else {
-               c.innerHTML = '';
-       }
-       s.setAttribute( 'list', r.container );
-
-       r.results = [];
-       r.resultCount = results.length;
-       r.visible = true;
-       for ( i = 0; i < results.length; i++ ) {
-               var title = os_decodeValue( results[i] );
-               var opt = document.createElement( 'option' );
-               opt.value = title;
-               r.results[i] = title;
-               c.appendChild( opt );
-       }
-};
-
-/** Fetch namespaces from checkboxes or hidden fields in the search form,
-    if none defined use wgSearchNamespaces */
-window.os_getNamespaces = function( r ) {
-       var namespaces = '';
-       var elements = document.forms[r.searchform].elements;
-       for( i = 0; i < elements.length; i++ ) {
-               var name = elements[i].name;
-               if( typeof name != 'undefined' && name.length > 2 && name[0] == 'n' &&
-                       name[1] == 's' && (
-                               ( elements[i].type == 'checkbox' && elements[i].checked ) ||
-                               ( elements[i].type == 'hidden' && elements[i].value == '1' )
-                       )
-               ) {
-                       if( namespaces != '' ) {
-                               namespaces += '|';
-                       }
-                       namespaces += name.substring( 2 );
-               }
-       }
-       if( namespaces == '' ) {
-               namespaces = mw.config.get( 'wgSearchNamespaces' ).join('|');
-       }
-       return namespaces;
-};
-
-/** Update results if user hasn't already typed something else */
-window.os_updateIfRelevant = function( r, query, text, cacheKey ) {
-       var t = document.getElementById( r.searchbox );
-       if( t != null && t.value == query ) { // check if response is still relevant
-               os_updateResults( r, query, text, cacheKey );
-       }
-       r.query = query;
-};
-
-/** Fetch results after some timeout */
-window.os_delayedFetch = function() {
-       if( os_timer == null ) {
-               return;
-       }
-       var r = os_timer.r;
-       var query = os_timer.query;
-       os_timer = null;
-       var path = mw.config.get( 'wgMWSuggestTemplate' ).replace( "{namespaces}", os_getNamespaces( r ) )
-                                                                       .replace( "{dbname}", mw.config.get( 'wgDBname' ) )
-                                                                       .replace( "{searchTerms}", os_encodeQuery( query ) );
-
-       // try to get from cache, if not fetch using ajax
-       var cached = os_cache[path];
-       if( cached != null && cached != undefined ) {
-               os_updateIfRelevant( r, query, cached, path );
-       } else {
-               var xmlhttp = sajax_init_object();
-               if( xmlhttp ) {
-                       try {
-                               xmlhttp.open( 'GET', path, true );
-                               xmlhttp.onreadystatechange = function() {
-                                       if ( xmlhttp.readyState == 4 && typeof os_updateIfRelevant == 'function' ) {
-                                               os_updateIfRelevant( r, query, xmlhttp.responseText, path );
-                                       }
-                               };
-                               xmlhttp.send( null );
-                       } catch ( e ) {
-                               if ( window.location.hostname == 'localhost' ) {
-                                       alert( "Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing." );
-                               }
-                               throw e;
-                       }
-               }
-       }
-};
-
-/** Init timed update via os_delayedUpdate() */
-window.os_fetchResults = function( r, query, timeout ) {
-       if( query == '' ) {
-               r.query = '';
-               os_hideResults( r );
-               return;
-       } else if( query == r.query ) {
-               return; // no change
-       }
-
-       os_is_stopped = false; // make sure we're running
-
-       // cancel any pending fetches
-       if( os_timer != null && os_timer.id != null ) {
-               clearTimeout( os_timer.id );
-       }
-       // schedule delayed fetching of results
-       if( timeout != 0 ) {
-               os_timer = new os_Timer( setTimeout( "os_delayedFetch()", timeout ), r, query );
-       } else {
-               os_timer = new os_Timer( null, r, query );
-               os_delayedFetch(); // do it now!
-       }
-};
-
-/** Find event target */
-window.os_getTarget = function( e ) {
-       if ( !e ) {
-               e = window.event;
-       }
-       if ( e.target ) {
-               return e.target;
-       } else if ( e.srcElement ) {
-               return e.srcElement;
-       } else {
-               return null;
-       }
-};
-
-/** Check if x is a valid integer */
-window.os_isNumber = function( x ) {
-       if( x == '' || isNaN( x ) ) {
-               return false;
-       }
-       for( var i = 0; i < x.length; i++ ) {
-               var c = x.charAt( i );
-               if( !( c >= '0' && c <= '9' ) ) {
-                       return false;
-               }
-       }
-       return true;
-};
-
-/** Call this to enable suggestions on input (id=inputId), on a form (name=formName) */
-window.os_enableSuggestionsOn = function( inputId, formName ) {
-       os_initHandlers( inputId, formName, document.getElementById( inputId ) );
-};
-
-/** Call this to disable suggestios on input box (id=inputId) */
-window.os_disableSuggestionsOn = function( inputId ) {
-       r = os_map[inputId];
-       if( r != null ) {
-               // cancel/hide results
-               os_timer = null;
-               os_hideResults( r );
-               // turn autocomplete on !
-               document.getElementById( inputId ).setAttribute( 'autocomplete', 'on' );
-               // remove descriptor
-               os_map[inputId] = null;
-       }
-
-       // Remove the element from the os_autoload_* arrays
-       var index = os_autoload_inputs.indexOf( inputId );
-       if ( index >= 0 ) {
-               os_autoload_inputs[index] = os_autoload_forms[index] = '';
-       }
-};
-
-/************************************************
- * Div-only functions (irrelevant for datalist)
- ************************************************/
-
-/** Event: loss of focus of input box */
-window.os_eventBlur = function( e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[targ.id];
-       if( r == null ) {
-               return; // not our event
-       }
-       if( !os_mouse_pressed ) {
-               os_hideResults( r );
-               // force canvas to stay hidden
-               r.stayHidden = true;
-               // cancel any pending fetches
-               if( os_timer != null && os_timer.id != null ) {
-                       clearTimeout( os_timer.id );
-               }
-               os_timer = null;
-       }
-};
-
-/** Event: focus (catch only when stopped) */
-window.os_eventFocus = function( e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[targ.id];
-       if( r == null ) {
-               return; // not our event
-       }
-       r.stayHidden = false;
-};
-
-/**
- * Create and populate a <div>, for non-<datalist>-supporting browsers.
- *
- * @param r       os_Result object
- * @param results Array of the new results to replace existing ones
- */
-window.os_setupDiv = function( r, results ) {
-       var c = document.getElementById( r.container );
-       if ( c == null ) {
-               c = os_createContainer( r );
-       }
-       c.innerHTML = os_createResultTable( r, results );
-       // init container table sizes
-       var t = document.getElementById( r.resultTable );
-       r.containerTotal = t.offsetHeight;
-       r.containerRow = t.offsetHeight / r.resultCount;
-       os_fitContainer( r );
-       os_trimResultText( r );
-       os_showResults( r );
-};
-
-/** Create the result table to be placed in the container div */
-window.os_createResultTable = function( r, results ) {
-       var c = document.getElementById( r.container );
-       var width = c.offsetWidth - os_operaWidthFix( c.offsetWidth );
-       var html = '<table class="os-suggest-results" id="' + r.resultTable + '" style="width: ' + width + 'px;">';
-       r.results = [];
-       r.resultCount = results.length;
-       for( i = 0; i < results.length; i++ ) {
-               var title = os_decodeValue( results[i] );
-               r.results[i] = title;
-               html += '<tr><td class="os-suggest-result" id="' + r.resultTable + i + '"><span id="' + r.resultText + i + '">' + title + '</span></td></tr>';
-       }
-       html += '</table>';
-       return html;
-};
-
-/** Show results div */
-window.os_showResults = function( r ) {
-       if( os_is_stopped ) {
-               return;
-       }
-       if( r.stayHidden ) {
-               return;
-       }
-       os_fitContainer( r );
-       var c = document.getElementById( r.container );
-       r.selected = -1;
-       if( c != null ) {
-               c.scrollTop = 0;
-               c.style.visibility = 'visible';
-               r.visible = true;
-       }
-};
-
-window.os_operaWidthFix = function( x ) {
-       // For browsers that don't understand overflow-x, estimate scrollbar width
-       if( typeof document.body.style.overflowX != 'string' ) {
-               return 30;
-       }
-       return 0;
-};
-
-/** Brower-dependent functions to find window inner size, and scroll status */
-window.f_clientWidth = function() {
-       return f_filterResults(
-               window.innerWidth ? window.innerWidth : 0,
-               document.documentElement ? document.documentElement.clientWidth : 0,
-               document.body ? document.body.clientWidth : 0
-       );
-};
-
-window.f_clientHeight = function() {
-       return f_filterResults(
-               window.innerHeight ? window.innerHeight : 0,
-               document.documentElement ? document.documentElement.clientHeight : 0,
-               document.body ? document.body.clientHeight : 0
-       );
-};
-
-window.f_scrollLeft = function() {
-       return f_filterResults(
-               window.pageXOffset ? window.pageXOffset : 0,
-               document.documentElement ? document.documentElement.scrollLeft : 0,
-               document.body ? document.body.scrollLeft : 0
-       );
-};
-
-window.f_scrollTop = function() {
-       return f_filterResults(
-               window.pageYOffset ? window.pageYOffset : 0,
-               document.documentElement ? document.documentElement.scrollTop : 0,
-               document.body ? document.body.scrollTop : 0
-       );
-};
-
-window.f_filterResults = function( n_win, n_docel, n_body ) {
-       var n_result = n_win ? n_win : 0;
-       if ( n_docel && ( !n_result || ( n_result > n_docel ) ) ) {
-               n_result = n_docel;
-       }
-       return n_body && ( !n_result || ( n_result > n_body ) ) ? n_body : n_result;
-};
-
-/** Get the height available for the results container */
-window.os_availableHeight = function( r ) {
-       var absTop = document.getElementById( r.container ).style.top;
-       var px = absTop.lastIndexOf( 'px' );
-       if( px > 0 ) {
-               absTop = absTop.substring( 0, px );
-       }
-       return f_clientHeight() - ( absTop - f_scrollTop() );
-};
-
-/** Get element absolute position {left,top} */
-window.os_getElementPosition = function( elemID ) {
-       var offsetTrail = document.getElementById( elemID );
-       var offsetLeft = 0;
-       var offsetTop = 0;
-       while ( offsetTrail ) {
-               offsetLeft += offsetTrail.offsetLeft;
-               offsetTop += offsetTrail.offsetTop;
-               offsetTrail = offsetTrail.offsetParent;
-       }
-       if ( navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined' ) {
-               offsetLeft += document.body.leftMargin;
-               offsetTop += document.body.topMargin;
-       }
-       return { left:offsetLeft, top:offsetTop };
-};
-
-/** Create the container div that will hold the suggested titles */
-window.os_createContainer = function( r ) {
-       var c = document.createElement( 'div' );
-       var s = document.getElementById( r.searchbox );
-       var pos = os_getElementPosition( r.searchbox );
-       var left = pos.left;
-       var top = pos.top + s.offsetHeight;
-       c.className = 'os-suggest';
-       c.setAttribute( 'id', r.container );
-       document.body.appendChild( c );
-
-       // dynamically generated style params
-       // IE workaround, cannot explicitely set "style" attribute
-       c = document.getElementById( r.container );
-       c.style.top = top + 'px';
-       c.style.left = left + 'px';
-       c.style.width = s.offsetWidth + 'px';
-
-       // mouse event handlers
-       c.onmouseover = function( event ) { os_eventMouseover( r.searchbox, event ); };
-       c.onmousemove = function( event ) { os_eventMousemove( r.searchbox, event ); };
-       c.onmousedown = function( event ) { return os_eventMousedown( r.searchbox, event ); };
-       c.onmouseup = function( event ) { os_eventMouseup( r.searchbox, event ); };
-       return c;
-};
-
-/** change container height to fit to screen */
-window.os_fitContainer = function( r ) {
-       var c = document.getElementById( r.container );
-       var h = os_availableHeight( r ) - 20;
-       var inc = r.containerRow;
-       h = parseInt( h / inc ) * inc;
-       if( h < ( 2 * inc ) && r.resultCount > 1 ) { // min: two results
-               h = 2 * inc;
-       }
-       if( ( h / inc ) > os_max_lines_per_suggest ) {
-               h = inc * os_max_lines_per_suggest;
-       }
-       if( h < r.containerTotal ) {
-               c.style.height = h + 'px';
-               r.containerCount = parseInt( Math.round( h / inc ) );
-       } else {
-               c.style.height = r.containerTotal + 'px';
-               r.containerCount = r.resultCount;
-       }
-};
-
-/** If some entries are longer than the box, replace text with "..." */
-window.os_trimResultText = function( r ) {
-       // find max width, first see if we could expand the container to fit it
-       var maxW = 0;
-       for( var i = 0; i < r.resultCount; i++ ) {
-               var e = document.getElementById( r.resultText + i );
-               if( e.offsetWidth > maxW ) {
-                       maxW = e.offsetWidth;
-               }
-       }
-       var w = document.getElementById( r.container ).offsetWidth;
-       var fix = 0;
-       if( r.containerCount < r.resultCount ) {
-               fix = 20; // give 20px for scrollbar
-       } else {
-               fix = os_operaWidthFix( w );
-       }
-       if( fix < 4 ) {
-               fix = 4; // basic padding
-       }
-       maxW += fix;
-
-       // resize container to fit more data if permitted
-       var normW = document.getElementById( r.searchbox ).offsetWidth;
-       var prop = maxW / normW;
-       if( prop > os_container_max_width ) {
-               prop = os_container_max_width;
-       } else if( prop < 1 ) {
-               prop = 1;
-       }
-       var newW = Math.round( normW * prop );
-       if( w != newW ) {
-               w = newW;
-               if( os_animation_timer != null ) {
-                       clearInterval( os_animation_timer.id );
-               }
-               os_animation_timer = new os_AnimationTimer( r, w );
-               os_animation_timer.id = setInterval( "os_animateChangeWidth()", os_animation_delay );
-               w -= fix; // this much is reserved
-       }
-
-       // trim results
-       if( w < 10 ) {
-               return;
-       }
-       for( var i = 0; i < r.resultCount; i++ ) {
-               var e = document.getElementById( r.resultText + i );
-               var replace = 1;
-               var lastW = e.offsetWidth + 1;
-               var iteration = 0;
-               var changedText = false;
-               while( e.offsetWidth > w && ( e.offsetWidth < lastW || iteration < 2 ) ) {
-                       changedText = true;
-                       lastW = e.offsetWidth;
-                       var l = e.innerHTML;
-                       e.innerHTML = l.substring( 0, l.length - replace ) + '...';
-                       iteration++;
-                       replace = 4; // how many chars to replace
-               }
-               if( changedText ) {
-                       // show hint for trimmed titles
-                       document.getElementById( r.resultTable + i ).setAttribute( 'title', r.results[i] );
-               }
-       }
-};
-
-/** Invoked on timer to animate change in container width */
-window.os_animateChangeWidth = function() {
-       var r = os_animation_timer.r;
-       var c = document.getElementById( r.container );
-       var w = c.offsetWidth;
-       var normW = document.getElementById( r.searchbox ).offsetWidth;
-       var normL = os_getElementPosition( r.searchbox ).left;
-       var inc = os_animation_timer.inc;
-       var target = os_animation_timer.target;
-       var nw = w + inc;
-       if( ( inc > 0 && nw >= target ) || ( inc <= 0 && nw <= target ) ) {
-               // finished !
-               c.style.width = target + 'px';
-               clearInterval( os_animation_timer.id );
-               os_animation_timer = null;
-       } else {
-               // in-progress
-               c.style.width = nw + 'px';
-               if( document.documentElement.dir == 'rtl' ) {
-                       c.style.left = ( normL + normW + ( target - nw ) - os_animation_timer.target - 1 ) + 'px';
-               }
-       }
-};
-
-/** Change the highlighted row (i.e. suggestion), from position cur to next */
-window.os_changeHighlight = function( r, cur, next, updateSearchBox ) {
-       if ( next >= r.resultCount ) {
-               next = r.resultCount - 1;
-       }
-       if ( next < -1 ) {
-               next = -1;
-       }
-       r.selected = next;
-       if ( cur == next ) {
-               return; // nothing to do.
-       }
-
-       if( cur >= 0 ) {
-               var curRow = document.getElementById( r.resultTable + cur );
-               if( curRow != null ) {
-                       curRow.className = 'os-suggest-result';
-               }
-       }
-       var newText;
-       if( next >= 0 ) {
-               var nextRow = document.getElementById( r.resultTable + next );
-               if( nextRow != null ) {
-                       nextRow.className = os_HighlightClass();
-               }
-               newText = r.results[next];
-       } else {
-               newText = r.original;
-       }
-
-       // adjust the scrollbar if any
-       if( r.containerCount < r.resultCount ) {
-               var c = document.getElementById( r.container );
-               var vStart = c.scrollTop / r.containerRow;
-               var vEnd = vStart + r.containerCount;
-               if( next < vStart ) {
-                       c.scrollTop = next * r.containerRow;
-               } else if( next >= vEnd ) {
-                       c.scrollTop = ( next - r.containerCount + 1 ) * r.containerRow;
-               }
-       }
-
-       // update the contents of the search box
-       if( updateSearchBox ) {
-               os_updateSearchQuery( r, newText );
-       }
-};
-
-window.os_HighlightClass = function() {
-       var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
-       if ( match ) {
-               var webKitVersion = parseInt( match[1] );
-               if ( webKitVersion < 523 ) {
-                       // CSS system highlight colors broken on old Safari
-                       // https://bugs.webkit.org/show_bug.cgi?id=6129
-                       // Safari 3.0.4, 3.1 known ok
-                       return 'os-suggest-result-hl-webkit';
-               }
-       }
-       return 'os-suggest-result-hl';
-};
-
-window.os_updateSearchQuery = function( r, newText ) {
-       document.getElementById( r.searchbox ).value = newText;
-       r.query = newText;
-};
-
-
-/********************
- *  Mouse events
- ********************/
-
-/** Mouse over the container */
-window.os_eventMouseover = function( srcId, e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[srcId];
-       if( r == null || !os_mouse_moved ) {
-               return; // not our event
-       }
-       var num = os_getNumberSuffix( targ.id );
-       if( num >= 0 ) {
-               os_changeHighlight( r, r.selected, num, false );
-       }
-};
-
-/* Get row where the event occured (from its id) */
-window.os_getNumberSuffix = function( id ) {
-       var num = id.substring( id.length - 2 );
-       if( !( num.charAt( 0 ) >= '0' && num.charAt( 0 ) <= '9' ) ) {
-               num = num.substring( 1 );
-       }
-       if( os_isNumber( num ) ) {
-               return parseInt( num );
-       } else {
-               return -1;
-       }
-};
-
-/** Save mouse move as last action */
-window.os_eventMousemove = function( srcId, e ) {
-       os_mouse_moved = true;
-};
-
-/** Mouse button held down, register possible click */
-window.os_eventMousedown = function( srcId, e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[srcId];
-       if( r == null ) {
-               return; // not our event
-       }
-       var num = os_getNumberSuffix( targ.id );
-
-       os_mouse_pressed = true;
-       if( num >= 0 ) {
-               os_mouse_num = num;
-               // os_updateSearchQuery( r, r.results[num] );
-       }
-       // keep the focus on the search field
-       document.getElementById( r.searchbox ).focus();
-
-       return false; // prevents selection
-};
-
-/** Mouse button released, check for click on some row */
-window.os_eventMouseup = function( srcId, e ) {
-       var targ = os_getTarget( e );
-       var r = os_map[srcId];
-       if( r == null ) {
-               return; // not our event
-       }
-       var num = os_getNumberSuffix( targ.id );
-
-       if( num >= 0 && os_mouse_num == num ) {
-               os_updateSearchQuery( r, r.results[num] );
-               os_hideResults( r );
-               document.getElementById( r.searchform ).submit();
-       }
-       os_mouse_pressed = false;
-       // keep the focus on the search field
-       document.getElementById( r.searchbox ).focus();
-};
-
-/** Toggle stuff seems to be dead code? */
-
-/** Return the span element that contains the toggle link */
-window.os_createToggle = function( r, className ) {
-       var t = document.createElement( 'span' );
-       t.className = className;
-       t.setAttribute( 'id', r.toggle );
-       var link = document.createElement( 'a' );
-       link.setAttribute( 'href', 'javascript:void(0);' );
-       link.onclick = function() { os_toggle( r.searchbox, r.searchform ); };
-       var msg = document.createTextNode( wgMWSuggestMessages[0] );
-       link.appendChild( msg );
-       t.appendChild( link );
-       return t;
-};
-
-/** Call when user clicks on some of the toggle links */
-window.os_toggle = function( inputId, formName ) {
-       r = os_map[inputId];
-       var msg = '';
-       if( r == null ) {
-               os_enableSuggestionsOn( inputId, formName );
-               r = os_map[inputId];
-               msg = wgMWSuggestMessages[0];
-       } else{
-               os_disableSuggestionsOn( inputId, formName );
-               msg = wgMWSuggestMessages[1];
-       }
-       // change message
-       var link = document.getElementById( r.toggle ).firstChild;
-       link.replaceChild( document.createTextNode( msg ), link.firstChild );
-};
-
-hookEvent( 'load', os_MWSuggestInit );
diff --git a/skins/common/preview.js b/skins/common/preview.js
deleted file mode 100644 (file)
index 9e76ca0..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * Live preview script for MediaWiki
- */
-(function( $ ) {
-       window.doLivePreview = function( e ) {
-               e.preventDefault();
-
-               $( mw ).trigger( 'LivePreviewPrepare' );
-
-               var postData = $('#editform').formToArray();
-               postData.push( { 'name' : 'wpPreview', 'value' : '1' } );
-
-               // Hide active diff, used templates, old preview if shown
-               var copyElements = ['#wikiPreview', '.templatesUsed', '.hiddencats',
-                                                       '#catlinks'];
-               var copySelector = copyElements.join(',');
-
-               $.each( copyElements, function(k,v) { $(v).fadeOut('fast'); } );
-
-               // Display a loading graphic
-               var loadSpinner = $('<div class="mw-ajax-loader"/>');
-               $('#wikiPreview').before( loadSpinner );
-
-               var page = $('<div/>');
-               var target = $('#editform').attr('action');
-
-               if ( !target ) {
-                       target = window.location.href;
-               }
-
-               page.load( target + ' ' + copySelector, postData,
-                       function() {
-
-                               for( var i=0; i<copyElements.length; ++i) {
-                                       // For all the specified elements, find the elements in the loaded page
-                                       //  and the real page, empty the element in the real page, and fill it
-                                       //  with the content of the loaded page
-                                       var copyContent = page.find( copyElements[i] ).contents();
-                                       $(copyElements[i]).empty().append( copyContent );
-                                       var newClasses = page.find( copyElements[i] ).prop('class');
-                                       $(copyElements[i]).prop( 'class', newClasses );
-                               }
-
-                               $.each( copyElements, function(k,v) {
-                                       // Don't belligerently show elements that are supposed to be hidden
-                                       $(v).fadeIn( 'fast', function() { $(this).css('display', ''); } );
-                               } );
-
-                               loadSpinner.remove();
-
-                               $( mw ).trigger( 'LivePreviewDone', [copyElements] );
-                       } );
-       };
-
-       // Shamelessly stolen from the jQuery form plugin, which is licensed under the GPL.
-       // http://jquery.malsup.com/form/#download
-       $.fn.formToArray = function() {
-               var a = [];
-               if (this.length == 0) return a;
-
-               var form = this[0];
-               var els = form.elements;
-               if (!els) return a;
-               for(var i=0, max=els.length; i < max; i++) {
-                       var el = els[i];
-                       var n = el.name;
-                       if (!n) continue;
-
-                       var v = $.fieldValue(el, true);
-                       if (v && v.constructor == Array) {
-                               for(var j=0, jmax=v.length; j < jmax; j++)
-                                       a.push({name: n, value: v[j]});
-                       }
-                       else if (v !== null && typeof v != 'undefined')
-                               a.push({name: n, value: v});
-               }
-
-               if (form.clk) {
-                       // input type=='image' are not found in elements array! handle it here
-                       var $input = $(form.clk), input = $input[0], n = input.name;
-                       if (n && !input.disabled && input.type == 'image') {
-                               a.push({name: n, value: $input.val()});
-                               a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-                       }
-               }
-               return a;
-       };
-
-       /**
-        * Returns the value of the field element.
-        */
-       $.fieldValue = function(el, successful) {
-               var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-               if (typeof successful == 'undefined') successful = true;
-
-               if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
-                       (t == 'checkbox' || t == 'radio') && !el.checked ||
-                       (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-                       tag == 'select' && el.selectedIndex == -1))
-                               return null;
-
-               if (tag == 'select') {
-                       var index = el.selectedIndex;
-                       if (index < 0) return null;
-                       var a = [], ops = el.options;
-                       var one = (t == 'select-one');
-                       var max = (one ? index+1 : ops.length);
-                       for(var i=(one ? index : 0); i < max; i++) {
-                               var op = ops[i];
-                               if (op.selected) {
-                                       var v = op.value;
-                                       if (!v) // extra pain for IE...
-                                               v = (op.attributes && op.attributes['value'] &&
-                                                       !(op.attributes['value'].specified))
-                                                               ? op.text : op.value;
-                                       if (one) return v;
-                                       a.push(v);
-                               }
-                       }
-                       return a;
-               }
-               return el.value;
-       };
-
-       $(document).ready( function() {
-               $('#wpPreview').click( doLivePreview );
-       } );
-}) ( jQuery );
index 8c35626..8f771e9 100644 (file)
@@ -121,16 +121,6 @@ span.texhtml {
        cursor: pointer;
 }
 
-div#mw-js-message {
-       margin: 1em 5%;
-       padding: 0.5em 2.5%;
-       border: solid 1px #ddd;
-       background-color: #fcfcfc;
-       /* Message hides on-click */
-       /* See also mw.util.jsMessage */
-       cursor: pointer;
-}
-
 /* Edit section links */
 /* Correct directionality when page dir is different from site/user dir */
 /* @noflip */
@@ -260,6 +250,7 @@ tr.mw-htmlform-vertical-label td.mw-label {
 
 input#wpSummary {
        width: 80%;
+       margin-bottom: 1em;
 }
 
 /**
@@ -482,7 +473,7 @@ a.feedlink {
  * keep in sync with commonPrint.css
  */
 table.wikitable {
-       margin: 1em 1em 1em 0;
+       margin: 1em 0;
        background-color: #f9f9f9;
        border: 1px #aaa solid;
        border-collapse: collapse;
index 8e08af3..df819e1 100644 (file)
@@ -1,4 +1,4 @@
-( function () {
+( function ( mw, $ ) {
 var    ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
        fileExtensions = mw.config.get( 'wgFileExtensions' );
 
@@ -241,10 +241,17 @@ window.fillDestFilename = function(id) {
        }
 
        // Output result
-       var destFile = document.getElementById('wpDestFile');
-       if (destFile) {
-               destFile.value = fname;
-               wgUploadWarningObj.checkNow(fname) ;
+       var destFile = document.getElementById( 'wpDestFile' );
+       if ( destFile ) {
+               // Call decodeURIComponent function to remove possible URL-encoded characters
+               // from the file name (bug 30390). Especially likely with upload-form-url.
+               // decodeURIComponent can throw an exception in input is invalid utf-8
+               try {
+                       destFile.value = decodeURIComponent( fname );
+               } catch ( e ) {
+                       destFile.value = fname;
+               }
+               wgUploadWarningObj.checkNow( fname );
        }
 };
 
@@ -302,4 +309,4 @@ window.wgUploadLicenseObj = {
 
 $( document ).ready( uploadSetup );
 
-}() );
+}( mediaWiki, jQuery ) );
index 6526e8b..cae08af 100644 (file)
@@ -515,11 +515,8 @@ window.redirectToFragment = function( fragment ) {
  * Add a cute little box at the top of the screen to inform the user of
  * something, replacing any preexisting message.
  *
- * @deprecated since 1.17 Use mw.util.jsMessage instead.
+ * @deprecated since 1.17 Use the 'mediawiki.notify' module instead.
  * @param {String|HTMLElement} message To be put inside the message box.
- * @param {String} className Used in adding a class; Can be used to selectively
- *  apply CSS to a certain category of messages.  null = no class used.
- * @return {Boolean} True on success, false on failure
  */
 window.jsMsg = function () {
        return mw.util.jsMessage.apply( mw.util, arguments );
index 0566e98..5866d97 100644 (file)
@@ -840,7 +840,7 @@ div#searchTargetHide {
 }
 
 #powersearch p {
-       margin-top:0px;
+       margin-top: 0;
 }
 
 div.multipageimagenavbox {
@@ -914,16 +914,9 @@ div.mw-lag-warn-high {
        font-size: 127%;
 }
 
-/* jsMessage */
-
-div#mw-js-message {
-       position: absolute;
-       margin: 0;
-       padding: 0.25em 1em;
-       right: 1em;
-       top: 1em;
-       width: 20em;
-       z-index: 10000;
-       -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.125);
-       box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.125);
+/* mediawiki.notification */
+.skin-monobook .mw-notification {
+       -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
+       -moz-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
+       box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.125);
 }
index 061e58a..9042ff7 100644 (file)
@@ -149,7 +149,7 @@ div.vectorTabs ul li {
        background-image: url(images/tab-normal-fade.png);
        background-position: bottom left;
        background-repeat: repeat-x;
-       white-space:nowrap;
+       white-space: nowrap;
 }
 /* IGNORED BY IE6 */
 div.vectorTabs ul > li {
@@ -399,6 +399,12 @@ div#simpleSearch input.placeholder {
 div#simpleSearch input::-webkit-input-placeholder {
        color: #999;
 }
+div#simpleSearch input:-moz-placeholder {
+       color: #999;
+}
+div#simpleSearch input:-ms-input-placeholder {
+       color: #999;
+}
 div#simpleSearch input#searchInput {
        position: absolute;
        top: 0;
@@ -784,24 +790,24 @@ div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
        position: relative;
        width: 100%;
 }
-div#mw-js-message {
+div#bodyContent {
+       line-height: 1.5em;
+}
+
+/* mediawiki.notification */
+.skin-vector #mw-notification-area {
+       top: 7em;
+       font-size: 0.8em;
+}
+.skin-vector .mw-notification {
        background-color: #fff;
        background-color: rgba(255, 255, 255, 0.93);
-       font-size: 0.8em;
-       position: absolute;
-       margin: 0;
-       padding: 1em 2em;
-       right: 1em;
-       top: 7em;
-       width: 20em;
-       z-index: 10000;
+       padding: 0.75em 1.5em;
        border: solid 1px #a7d7f9;
        border-radius: 0.75em;
-       -webkit-box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.125);
-       box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.125);
-}
-div#bodyContent {
-       line-height: 1.5em;
+       -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       -moz-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
 }
 
 /* Watch/Unwatch Icon Styling */
@@ -848,9 +854,9 @@ div#bodyContent {
 }
 div.vectorTabs ul {
        /* @embed */
-       background-image:url(images/tab-break.png);
-       background-position:right bottom;
-       background-repeat:no-repeat;
+       background-image: url(images/tab-break.png);
+       background-position: right bottom;
+       background-repeat: no-repeat;
 }
 
 /* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
@@ -862,39 +868,39 @@ div.vectorTabs ul {
 
 body.vector-animateLayout div#content,
 body.vector-animateLayout div#footer {
-       transition: margin-left 250ms, padding 250ms;
        -moz-transition: margin-left 250ms, padding 250ms;
        -webkit-transition: margin-left 250ms, padding 250ms;
        -o-transition: margin-left 250ms, padding 250ms;
+       transition: margin-left 250ms, padding 250ms;
 }
 body.vector-animateLayout #p-logo,
 body.vector-animateLayout #left-navigation {
-       transition: left 250ms;
        -moz-transition: left 250ms;
        -webkit-transition: left 250ms;
        -o-transition: left 250ms;
+       transition: left 250ms;
 }
 body.vector-animateLayout #mw-panel {
-       transition: padding-left 250ms;
        -moz-transition: padding-left 250ms;
        -webkit-transition: padding-left 250ms;
        -o-transition: padding-left 250ms;
+       transition: padding-left 250ms;
 }
 body.vector-animateLayout #p-search {
-       transition: margin-right 250ms;
        -moz-transition: margin-right 250ms;
        -webkit-transition: margin-right 250ms;
        -o-transition: margin-right 250ms;
+       transition: margin-right 250ms;
 }
 body.vector-animateLayout #p-personal {
-       transition: right 250ms;
        -moz-transition: right 250ms;
        -webkit-transition: right 250ms;
        -o-transition: right 250ms;
+       transition: right 250ms;
 }
 body.vector-animateLayout #mw-head-base {
-       transition: margin-left 250ms;
        -moz-transition: margin-left 250ms;
        -webkit-transition: margin-left 250ms;
        -o-transition: margin-left 250ms;
+       transition: margin-left 250ms;
 }
index 9cadd75..28501ea 100644 (file)
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-$IP = dirname( dirname( __FILE__ ) );
+$IP = dirname( __DIR__ );
 
 define( 'SELENIUMTEST', true );
 
-//require_once( dirname( __FILE__ ) . '/../maintenance/commandLine.inc' );
-require( dirname( __FILE__ ) . '/../maintenance/Maintenance.php' );
+//require_once( __DIR__ . '/../maintenance/commandLine.inc' );
+require( __DIR__ . '/../maintenance/Maintenance.php' );
 
 require_once( 'PHPUnit/Runner/Version.php' );
 if( version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '>=' ) ) {
@@ -43,7 +43,7 @@ if( version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '>=' ) ) {
 require_once( 'PHPUnit/Extensions/SeleniumTestCase.php' );
 include_once( 'PHPUnit/Util/Log/JUnit.php' );
 
-require_once( dirname( __FILE__ ) . "/selenium/SeleniumServerManager.php" );
+require_once( __DIR__ . "/selenium/SeleniumServerManager.php" );
 
 class SeleniumTester extends Maintenance {
        protected $selenium;
index 3125284..2fc8907 100644 (file)
@@ -1,7 +1,28 @@
 <?php
+/**
+ * AutoLoader for the testing suite.
+ *
+ * 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 Testing
+ */
 
 global $wgAutoloadClasses;
-$testFolder = dirname( __FILE__ );
+$testFolder = __DIR__;
 
 $wgAutoloadClasses += array(
 
@@ -13,12 +34,11 @@ $wgAutoloadClasses += array(
 
        //includes
        'BlockTest' => "$testFolder/phpunit/includes/BlockTest.php",
-       'MockOutputPage' => "$testFolder/phpunit/includes/MockOutputPage.php",
 
        //API
        'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
        'ApiTestCase' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
-       'ApiTestUser' => "$testFolder/phpunit/includes/api/ApiTestUser.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",
diff --git a/tests/jasmine/.htaccess b/tests/jasmine/.htaccess
deleted file mode 100644 (file)
index 605d2f4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Allow from all
diff --git a/tests/jasmine/SpecRunner.html b/tests/jasmine/SpecRunner.html
deleted file mode 100644 (file)
index 63d0fdf..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" dir="ltr">
-       <head>
-               <title>Jasmine Test Runner</title>
-               <meta charset="UTF-8" />
-               <link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.1/jasmine.css">
-               <script src="lib/jasmine-1.0.1/jasmine.js"></script>
-               <script src="lib/jasmine-1.0.1/jasmine-html.js"></script>
-
-               <!-- include source files here... -->
-               <script src="../../load.php?debug=true&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=vector&amp;*"></script>
-               <script>
-               mw.loader.load( ['mediawiki.jqueryMsg'] );
-               </script>
-
-               <!-- insert test data files here -->
-               <script src="spec/mediawiki.jqueryMsg.spec.data.js"></script>
-
-               <!-- include spec files here... -->
-               <script src="spec/mediawiki.jqueryMsg.spec.js"></script>
-       </head>
-<body>
-       <script>
-               jasmine.getEnv().addReporter( new jasmine.TrivialReporter() );
-               jasmine.getEnv().execute();
-       </script>
-</body>
-</html>
diff --git a/tests/jasmine/lib/jasmine-1.0.1/MIT.LICENSE b/tests/jasmine/lib/jasmine-1.0.1/MIT.LICENSE
deleted file mode 100644 (file)
index 1eb9b49..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2008-2010 Pivotal Labs
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js b/tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js
deleted file mode 100644 (file)
index 81402b9..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-jasmine.TrivialReporter = function(doc) {
-  this.document = doc || document;
-  this.suiteDivs = {};
-  this.logRunningSpecs = false;
-};
-
-jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
-  var el = document.createElement(type);
-
-  for (var i = 2; i < arguments.length; i++) {
-    var child = arguments[i];
-
-    if (typeof child === 'string') {
-      el.appendChild(document.createTextNode(child));
-    } else {
-      if (child) { el.appendChild(child); }
-    }
-  }
-
-  for (var attr in attrs) {
-    if (attr == "className") {
-      el[attr] = attrs[attr];
-    } else {
-      el.setAttribute(attr, attrs[attr]);
-    }
-  }
-
-  return el;
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
-  var showPassed, showSkipped;
-
-  this.outerDiv = this.createDom('div', { className: 'jasmine_reporter' },
-      this.createDom('div', { className: 'banner' },
-        this.createDom('div', { className: 'logo' },
-            this.createDom('a', { href: 'http://pivotal.github.com/jasmine/', target: "_blank" }, "Jasmine"),
-            this.createDom('span', { className: 'version' }, runner.env.versionString())),
-        this.createDom('div', { className: 'options' },
-            "Show ",
-            showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
-            showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
-            this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
-            )
-          ),
-
-      this.runnerDiv = this.createDom('div', { className: 'runner running' },
-          this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
-          this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
-          this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
-      );
-
-  this.document.body.appendChild(this.outerDiv);
-
-  var suites = runner.suites();
-  for (var i = 0; i < suites.length; i++) {
-    var suite = suites[i];
-    var suiteDiv = this.createDom('div', { className: 'suite' },
-        this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
-        this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
-    this.suiteDivs[suite.id] = suiteDiv;
-    var parentDiv = this.outerDiv;
-    if (suite.parentSuite) {
-      parentDiv = this.suiteDivs[suite.parentSuite.id];
-    }
-    parentDiv.appendChild(suiteDiv);
-  }
-
-  this.startedAt = new Date();
-
-  var self = this;
-  showPassed.onclick = function(evt) {
-    if (showPassed.checked) {
-      self.outerDiv.className += ' show-passed';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
-    }
-  };
-
-  showSkipped.onclick = function(evt) {
-    if (showSkipped.checked) {
-      self.outerDiv.className += ' show-skipped';
-    } else {
-      self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
-    }
-  };
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
-  var results = runner.results();
-  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
-  this.runnerDiv.setAttribute("class", className);
-  //do it twice for IE
-  this.runnerDiv.setAttribute("className", className);
-  var specs = runner.specs();
-  var specCount = 0;
-  for (var i = 0; i < specs.length; i++) {
-    if (this.specFilter(specs[i])) {
-      specCount++;
-    }
-  }
-  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
-  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
-  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
-
-  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
-};
-
-jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
-  var results = suite.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.totalCount == 0) { // todo: change this to check results.skipped
-    status = 'skipped';
-  }
-  this.suiteDivs[suite.id].className += " " + status;
-};
-
-jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
-  if (this.logRunningSpecs) {
-    this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
-  }
-};
-
-jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
-  var results = spec.results();
-  var status = results.passed() ? 'passed' : 'failed';
-  if (results.skipped) {
-    status = 'skipped';
-  }
-  var specDiv = this.createDom('div', { className: 'spec '  + status },
-      this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
-      this.createDom('a', {
-        className: 'description',
-        href: '?spec=' + encodeURIComponent(spec.getFullName()),
-        title: spec.getFullName()
-      }, spec.description));
-
-
-  var resultItems = results.getItems();
-  var messagesDiv = this.createDom('div', { className: 'messages' });
-  for (var i = 0; i < resultItems.length; i++) {
-    var result = resultItems[i];
-
-    if (result.type == 'log') {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
-    } else if (result.type == 'expect' && result.passed && !result.passed()) {
-      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
-      if (result.trace.stack) {
-        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
-      }
-    }
-  }
-
-  if (messagesDiv.childNodes.length > 0) {
-    specDiv.appendChild(messagesDiv);
-  }
-
-  this.suiteDivs[spec.suite.id].appendChild(specDiv);
-};
-
-jasmine.TrivialReporter.prototype.log = function() {
-  var console = jasmine.getGlobal().console;
-  if (console && console.log) {
-    if (console.log.apply) {
-      console.log.apply(console, arguments);
-    } else {
-      console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
-    }
-  }
-};
-
-jasmine.TrivialReporter.prototype.getLocation = function() {
-  return this.document.location;
-};
-
-jasmine.TrivialReporter.prototype.specFilter = function(spec) {
-  var paramMap = {};
-  var params = this.getLocation().search.substring(1).split('&');
-  for (var i = 0; i < params.length; i++) {
-    var p = params[i].split('=');
-    paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
-  }
-
-  if (!paramMap["spec"]) return true;
-  return spec.getFullName().indexOf(paramMap["spec"]) == 0;
-};
diff --git a/tests/jasmine/lib/jasmine-1.0.1/jasmine.css b/tests/jasmine/lib/jasmine-1.0.1/jasmine.css
deleted file mode 100644 (file)
index 6583fe7..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-body {
-  font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
-}
-
-
-.jasmine_reporter a:visited, .jasmine_reporter a {
-  color: #303; 
-}
-
-.jasmine_reporter a:hover, .jasmine_reporter a:active {
-  color: blue; 
-}
-
-.run_spec {
-  float:right;
-  padding-right: 5px;
-  font-size: .8em;
-  text-decoration: none;
-}
-
-.jasmine_reporter {
-  margin: 0 5px;
-}
-
-.banner {
-  color: #303;
-  background-color: #fef;
-  padding: 5px;
-}
-
-.logo {
-  float: left;
-  font-size: 1.1em;
-  padding-left: 5px;
-}
-
-.logo .version {
-  font-size: .6em;
-  padding-left: 1em;
-}
-
-.runner.running {
-  background-color: yellow;
-}
-
-
-.options {
-  text-align: right;
-  font-size: .8em;
-}
-
-
-
-
-.suite {
-  border: 1px outset gray;
-  margin: 5px 0;
-  padding-left: 1em;
-}
-
-.suite .suite {
-  margin: 5px; 
-}
-
-.suite.passed {
-  background-color: #dfd;
-}
-
-.suite.failed {
-  background-color: #fdd;
-}
-
-.spec {
-  margin: 5px;
-  padding-left: 1em;
-  clear: both;
-}
-
-.spec.failed, .spec.passed, .spec.skipped {
-  padding-bottom: 5px;
-  border: 1px solid gray;
-}
-
-.spec.failed {
-  background-color: #fbb;
-  border-color: red;
-}
-
-.spec.passed {
-  background-color: #bfb;
-  border-color: green;
-}
-
-.spec.skipped {
-  background-color: #bbb;
-}
-
-.messages {
-  border-left: 1px dashed gray;
-  padding-left: 1em;
-  padding-right: 1em;
-}
-
-.passed {
-  background-color: #cfc;
-  display: none;
-}
-
-.failed {
-  background-color: #fbb;
-}
-
-.skipped {
-  color: #777;
-  background-color: #eee;
-  display: none;
-}
-
-
-/*.resultMessage {*/
-  /*white-space: pre;*/
-/*}*/
-
-.resultMessage span.result {
-  display: block;
-  line-height: 2em;
-  color: black;
-}
-
-.resultMessage .mismatch {
-  color: black;
-}
-
-.stackTrace {
-  white-space: pre;
-  font-size: .8em;
-  margin-left: 10px;
-  max-height: 5em;
-  overflow: auto;
-  border: 1px inset red;
-  padding: 1em;
-  background: #eef;
-}
-
-.finished-at {
-  padding-left: 1em;
-  font-size: .6em;
-}
-
-.show-passed .passed,
-.show-skipped .skipped {
-  display: block;
-}
-
-
-#jasmine_content {
-  position:fixed;
-  right: 100%;
-}
-
-.runner {
-  border: 1px solid gray;
-  display: block;
-  margin: 5px 0;
-  padding: 2px 0 2px 10px;
-}
diff --git a/tests/jasmine/lib/jasmine-1.0.1/jasmine.js b/tests/jasmine/lib/jasmine-1.0.1/jasmine.js
deleted file mode 100644 (file)
index 964f99e..0000000
+++ /dev/null
@@ -1,2421 +0,0 @@
-/**
- * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
- *
- * @namespace
- */
-var jasmine = {};
-
-/**
- * @private
- */
-jasmine.unimplementedMethod_ = function() {
-  throw new Error("unimplemented method");
-};
-
-/**
- * Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just
- * a plain old variable and may be redefined by somebody else.
- *
- * @private
- */
-jasmine.undefined = jasmine.___undefined___;
-
-/**
- * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
- *
- */
-jasmine.DEFAULT_UPDATE_INTERVAL = 250;
-
-/**
- * Default timeout interval in milliseconds for waitsFor() blocks.
- */
-jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
-
-jasmine.getGlobal = function() {
-  function getGlobal() {
-    return this;
-  }
-
-  return getGlobal();
-};
-
-/**
- * Allows for bound functions to be compared.  Internal use only.
- *
- * @ignore
- * @private
- * @param base {Object} bound 'this' for the function
- * @param name {Function} function to find
- */
-jasmine.bindOriginal_ = function(base, name) {
-  var original = base[name];
-  if (original.apply) {
-    return function() {
-      return original.apply(base, arguments);
-    };
-  } else {
-    // IE support
-    return jasmine.getGlobal()[name];
-  }
-};
-
-jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
-jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
-jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
-jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
-
-jasmine.MessageResult = function(values) {
-  this.type = 'log';
-  this.values = values;
-  this.trace = new Error(); // todo: test better
-};
-
-jasmine.MessageResult.prototype.toString = function() {
-  var text = "";
-  for(var i = 0; i < this.values.length; i++) {
-    if (i > 0) text += " ";
-    if (jasmine.isString_(this.values[i])) {
-      text += this.values[i];
-    } else {
-      text += jasmine.pp(this.values[i]);
-    }
-  }
-  return text;
-};
-
-jasmine.ExpectationResult = function(params) {
-  this.type = 'expect';
-  this.matcherName = params.matcherName;
-  this.passed_ = params.passed;
-  this.expected = params.expected;
-  this.actual = params.actual;
-
-  this.message = this.passed_ ? 'Passed.' : params.message;
-  this.trace = this.passed_ ? '' : new Error(this.message);
-};
-
-jasmine.ExpectationResult.prototype.toString = function () {
-  return this.message;
-};
-
-jasmine.ExpectationResult.prototype.passed = function () {
-  return this.passed_;
-};
-
-/**
- * Getter for the Jasmine environment. Ensures one gets created
- */
-jasmine.getEnv = function() {
-  return jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isArray_ = function(value) {
-  return jasmine.isA_("Array", value);  
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isString_ = function(value) {
-  return jasmine.isA_("String", value);
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isNumber_ = function(value) {
-  return jasmine.isA_("Number", value);
-};
-
-/**
- * @ignore
- * @private
- * @param {String} typeName
- * @param value
- * @returns {Boolean}
- */
-jasmine.isA_ = function(typeName, value) {
-  return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
-};
-
-/**
- * Pretty printer for expecations.  Takes any object and turns it into a human-readable string.
- *
- * @param value {Object} an object to be outputted
- * @returns {String}
- */
-jasmine.pp = function(value) {
-  var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
-  stringPrettyPrinter.format(value);
-  return stringPrettyPrinter.string;
-};
-
-/**
- * Returns true if the object is a DOM Node.
- *
- * @param {Object} obj object to check
- * @returns {Boolean}
- */
-jasmine.isDomNode = function(obj) {
-  return obj['nodeType'] > 0;
-};
-
-/**
- * Returns a matchable 'generic' object of the class type.  For use in expecations of type when values don't matter.
- *
- * @example
- * // don't care about which function is passed in, as long as it's a function
- * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
- *
- * @param {Class} clazz
- * @returns matchable object of the type clazz
- */
-jasmine.any = function(clazz) {
-  return new jasmine.Matchers.Any(clazz);
-};
-
-/**
- * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
- *
- * Spies should be created in test setup, before expectations.  They can then be checked, using the standard Jasmine
- * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
- *
- * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
- *
- * Spies are torn down at the end of every spec.
- *
- * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
- *
- * @example
- * // a stub
- * var myStub = jasmine.createSpy('myStub');  // can be used anywhere
- *
- * // spy example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- *
- * // actual foo.not will not be called, execution stops
- * spyOn(foo, 'not');
-
- // foo.not spied upon, execution will continue to implementation
- * spyOn(foo, 'not').andCallThrough();
- *
- * // fake example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- *
- * // foo.not(val) will return val
- * spyOn(foo, 'not').andCallFake(function(value) {return value;});
- *
- * // mock example
- * foo.not(7 == 7);
- * expect(foo.not).toHaveBeenCalled();
- * expect(foo.not).toHaveBeenCalledWith(true);
- *
- * @constructor
- * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
- * @param {String} name
- */
-jasmine.Spy = function(name) {
-  /**
-   * The name of the spy, if provided.
-   */
-  this.identity = name || 'unknown';
-  /**
-   *  Is this Object a spy?
-   */
-  this.isSpy = true;
-  /**
-   * The actual function this spy stubs.
-   */
-  this.plan = function() {
-  };
-  /**
-   * Tracking of the most recent call to the spy.
-   * @example
-   * var mySpy = jasmine.createSpy('foo');
-   * mySpy(1, 2);
-   * mySpy.mostRecentCall.args = [1, 2];
-   */
-  this.mostRecentCall = {};
-
-  /**
-   * Holds arguments for each call to the spy, indexed by call count
-   * @example
-   * var mySpy = jasmine.createSpy('foo');
-   * mySpy(1, 2);
-   * mySpy(7, 8);
-   * mySpy.mostRecentCall.args = [7, 8];
-   * mySpy.argsForCall[0] = [1, 2];
-   * mySpy.argsForCall[1] = [7, 8];
-   */
-  this.argsForCall = [];
-  this.calls = [];
-};
-
-/**
- * Tells a spy to call through to the actual implemenatation.
- *
- * @example
- * var foo = {
- *   bar: function() { // do some stuff }
- * }
- *
- * // defining a spy on an existing property: foo.bar
- * spyOn(foo, 'bar').andCallThrough();
- */
-jasmine.Spy.prototype.andCallThrough = function() {
-  this.plan = this.originalValue;
-  return this;
-};
-
-/**
- * For setting the return value of a spy.
- *
- * @example
- * // defining a spy from scratch: foo() returns 'baz'
- * var foo = jasmine.createSpy('spy on foo').andReturn('baz');
- *
- * // defining a spy on an existing property: foo.bar() returns 'baz'
- * spyOn(foo, 'bar').andReturn('baz');
- *
- * @param {Object} value
- */
-jasmine.Spy.prototype.andReturn = function(value) {
-  this.plan = function() {
-    return value;
-  };
-  return this;
-};
-
-/**
- * For throwing an exception when a spy is called.
- *
- * @example
- * // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
- * var foo = jasmine.createSpy('spy on foo').andThrow('baz');
- *
- * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
- * spyOn(foo, 'bar').andThrow('baz');
- *
- * @param {String} exceptionMsg
- */
-jasmine.Spy.prototype.andThrow = function(exceptionMsg) {
-  this.plan = function() {
-    throw exceptionMsg;
-  };
-  return this;
-};
-
-/**
- * Calls an alternate implementation when a spy is called.
- *
- * @example
- * var baz = function() {
- *   // do some stuff, return something
- * }
- * // defining a spy from scratch: foo() calls the function baz
- * var foo = jasmine.createSpy('spy on foo').andCall(baz);
- *
- * // defining a spy on an existing property: foo.bar() calls an anonymnous function
- * spyOn(foo, 'bar').andCall(function() { return 'baz';} );
- *
- * @param {Function} fakeFunc
- */
-jasmine.Spy.prototype.andCallFake = function(fakeFunc) {
-  this.plan = fakeFunc;
-  return this;
-};
-
-/**
- * Resets all of a spy's the tracking variables so that it can be used again.
- *
- * @example
- * spyOn(foo, 'bar');
- *
- * foo.bar();
- *
- * expect(foo.bar.callCount).toEqual(1);
- *
- * foo.bar.reset();
- *
- * expect(foo.bar.callCount).toEqual(0);
- */
-jasmine.Spy.prototype.reset = function() {
-  this.wasCalled = false;
-  this.callCount = 0;
-  this.argsForCall = [];
-  this.calls = [];
-  this.mostRecentCall = {};
-};
-
-jasmine.createSpy = function(name) {
-
-  var spyObj = function() {
-    spyObj.wasCalled = true;
-    spyObj.callCount++;
-    var args = jasmine.util.argsToArray(arguments);
-    spyObj.mostRecentCall.object = this;
-    spyObj.mostRecentCall.args = args;
-    spyObj.argsForCall.push(args);
-    spyObj.calls.push({object: this, args: args});
-    return spyObj.plan.apply(this, arguments);
-  };
-
-  var spy = new jasmine.Spy(name);
-
-  for (var prop in spy) {
-    spyObj[prop] = spy[prop];
-  }
-
-  spyObj.reset();
-
-  return spyObj;
-};
-
-/**
- * Determines whether an object is a spy.
- *
- * @param {jasmine.Spy|Object} putativeSpy
- * @returns {Boolean}
- */
-jasmine.isSpy = function(putativeSpy) {
-  return putativeSpy && putativeSpy.isSpy;
-};
-
-/**
- * Creates a more complicated spy: an Object that has every property a function that is a spy.  Used for stubbing something
- * large in one call.
- *
- * @param {String} baseName name of spy class
- * @param {Array} methodNames array of names of methods to make spies
- */
-jasmine.createSpyObj = function(baseName, methodNames) {
-  if (!jasmine.isArray_(methodNames) || methodNames.length == 0) {
-    throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
-  }
-  var obj = {};
-  for (var i = 0; i < methodNames.length; i++) {
-    obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]);
-  }
-  return obj;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.log = function() {
-  var spec = jasmine.getEnv().currentSpec;
-  spec.log.apply(spec, arguments);
-};
-
-/**
- * Function that installs a spy on an existing object's method name.  Used within a Spec to create a spy.
- *
- * @example
- * // spy example
- * var foo = {
- *   not: function(bool) { return !bool; }
- * }
- * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
- *
- * @see jasmine.createSpy
- * @param obj
- * @param methodName
- * @returns a Jasmine spy that can be chained with all spy methods
- */
-var spyOn = function(obj, methodName) {
-  return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
-};
-
-/**
- * Creates a Jasmine spec that will be added to the current suite.
- *
- * // TODO: pending tests
- *
- * @example
- * it('should be true', function() {
- *   expect(true).toEqual(true);
- * });
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var it = function(desc, func) {
-  return jasmine.getEnv().it(desc, func);
-};
-
-/**
- * Creates a <em>disabled</em> Jasmine spec.
- *
- * A convenience method that allows existing specs to be disabled temporarily during development.
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var xit = function(desc, func) {
-  return jasmine.getEnv().xit(desc, func);
-};
-
-/**
- * Starts a chain for a Jasmine expectation.
- *
- * It is passed an Object that is the actual value and should chain to one of the many
- * jasmine.Matchers functions.
- *
- * @param {Object} actual Actual value to test against and expected value
- */
-var expect = function(actual) {
-  return jasmine.getEnv().currentSpec.expect(actual);
-};
-
-/**
- * Defines part of a jasmine spec.  Used in cominbination with waits or waitsFor in asynchrnous specs.
- *
- * @param {Function} func Function that defines part of a jasmine spec.
- */
-var runs = function(func) {
-  jasmine.getEnv().currentSpec.runs(func);
-};
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-var waits = function(timeout) {
-  jasmine.getEnv().currentSpec.waits(timeout);
-};
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
-  jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
-};
-
-/**
- * A function that is called before each spec in a suite.
- *
- * Used for spec setup, including validating assumptions.
- *
- * @param {Function} beforeEachFunction
- */
-var beforeEach = function(beforeEachFunction) {
-  jasmine.getEnv().beforeEach(beforeEachFunction);
-};
-
-/**
- * A function that is called after each spec in a suite.
- *
- * Used for restoring any state that is hijacked during spec execution.
- *
- * @param {Function} afterEachFunction
- */
-var afterEach = function(afterEachFunction) {
-  jasmine.getEnv().afterEach(afterEachFunction);
-};
-
-/**
- * Defines a suite of specifications.
- *
- * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
- * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
- * of setup in some tests.
- *
- * @example
- * // TODO: a simple suite
- *
- * // TODO: a simple suite with a nested describe block
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var describe = function(description, specDefinitions) {
-  return jasmine.getEnv().describe(description, specDefinitions);
-};
-
-/**
- * Disables a suite of specifications.  Used to disable some suites in a file, or files, temporarily during development.
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var xdescribe = function(description, specDefinitions) {
-  return jasmine.getEnv().xdescribe(description, specDefinitions);
-};
-
-
-// Provide the XMLHttpRequest class for IE 5.x-6.x:
-jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
-  try {
-    return new ActiveXObject("Msxml2.XMLHTTP.6.0");
-  } catch(e) {
-  }
-  try {
-    return new ActiveXObject("Msxml2.XMLHTTP.3.0");
-  } catch(e) {
-  }
-  try {
-    return new ActiveXObject("Msxml2.XMLHTTP");
-  } catch(e) {
-  }
-  try {
-    return new ActiveXObject("Microsoft.XMLHTTP");
-  } catch(e) {
-  }
-  throw new Error("This browser does not support XMLHttpRequest.");
-} : XMLHttpRequest;
-/**
- * @namespace
- */
-jasmine.util = {};
-
-/**
- * Declare that a child class inherit it's prototype from the parent class.
- *
- * @private
- * @param {Function} childClass
- * @param {Function} parentClass
- */
-jasmine.util.inherit = function(childClass, parentClass) {
-  /**
-   * @private
-   */
-  var subclass = function() {
-  };
-  subclass.prototype = parentClass.prototype;
-  childClass.prototype = new subclass;
-};
-
-jasmine.util.formatException = function(e) {
-  var lineNumber;
-  if (e.line) {
-    lineNumber = e.line;
-  }
-  else if (e.lineNumber) {
-    lineNumber = e.lineNumber;
-  }
-
-  var file;
-
-  if (e.sourceURL) {
-    file = e.sourceURL;
-  }
-  else if (e.fileName) {
-    file = e.fileName;
-  }
-
-  var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
-
-  if (file && lineNumber) {
-    message += ' in ' + file + ' (line ' + lineNumber + ')';
-  }
-
-  return message;
-};
-
-jasmine.util.htmlEscape = function(str) {
-  if (!str) return str;
-  return str.replace(/&/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;');
-};
-
-jasmine.util.argsToArray = function(args) {
-  var arrayOfArgs = [];
-  for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
-  return arrayOfArgs;
-};
-
-jasmine.util.extend = function(destination, source) {
-  for (var property in source) destination[property] = source[property];
-  return destination;
-};
-
-/**
- * Environment for Jasmine
- *
- * @constructor
- */
-jasmine.Env = function() {
-  this.currentSpec = null;
-  this.currentSuite = null;
-  this.currentRunner_ = new jasmine.Runner(this);
-
-  this.reporter = new jasmine.MultiReporter();
-
-  this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
-  this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
-  this.lastUpdate = 0;
-  this.specFilter = function() {
-    return true;
-  };
-
-  this.nextSpecId_ = 0;
-  this.nextSuiteId_ = 0;
-  this.equalityTesters_ = [];
-
-  // wrap matchers
-  this.matchersClass = function() {
-    jasmine.Matchers.apply(this, arguments);
-  };
-  jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
-
-  jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
-};
-
-
-jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
-jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
-jasmine.Env.prototype.setInterval = jasmine.setInterval;
-jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
-
-/**
- * @returns an object containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.version = function () {
-  if (jasmine.version_) {
-    return jasmine.version_;
-  } else {
-    throw new Error('Version not set');
-  }
-};
-
-/**
- * @returns string containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.versionString = function() {
-  if (jasmine.version_) {
-    var version = this.version();
-    return version.major + "." + version.minor + "." + version.build + " revision " + version.revision;
-  } else {
-    return "version unknown";
-  }
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSpecId = function () {
-  return this.nextSpecId_++;
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSuiteId = function () {
-  return this.nextSuiteId_++;
-};
-
-/**
- * Register a reporter to receive status updates from Jasmine.
- * @param {jasmine.Reporter} reporter An object which will receive status updates.
- */
-jasmine.Env.prototype.addReporter = function(reporter) {
-  this.reporter.addReporter(reporter);
-};
-
-jasmine.Env.prototype.execute = function() {
-  this.currentRunner_.execute();
-};
-
-jasmine.Env.prototype.describe = function(description, specDefinitions) {
-  var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
-
-  var parentSuite = this.currentSuite;
-  if (parentSuite) {
-    parentSuite.add(suite);
-  } else {
-    this.currentRunner_.add(suite);
-  }
-
-  this.currentSuite = suite;
-
-  var declarationError = null;
-  try {
-    specDefinitions.call(suite);
-  } catch(e) {
-    declarationError = e;
-  }
-
-  this.currentSuite = parentSuite;
-
-  if (declarationError) {
-    this.it("encountered a declaration exception", function() {
-      throw declarationError;
-    });
-  }
-
-  return suite;
-};
-
-jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
-  if (this.currentSuite) {
-    this.currentSuite.beforeEach(beforeEachFunction);
-  } else {
-    this.currentRunner_.beforeEach(beforeEachFunction);
-  }
-};
-
-jasmine.Env.prototype.currentRunner = function () {
-  return this.currentRunner_;
-};
-
-jasmine.Env.prototype.afterEach = function(afterEachFunction) {
-  if (this.currentSuite) {
-    this.currentSuite.afterEach(afterEachFunction);
-  } else {
-    this.currentRunner_.afterEach(afterEachFunction);
-  }
-
-};
-
-jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
-  return {
-    execute: function() {
-    }
-  };
-};
-
-jasmine.Env.prototype.it = function(description, func) {
-  var spec = new jasmine.Spec(this, this.currentSuite, description);
-  this.currentSuite.add(spec);
-  this.currentSpec = spec;
-
-  if (func) {
-    spec.runs(func);
-  }
-
-  return spec;
-};
-
-jasmine.Env.prototype.xit = function(desc, func) {
-  return {
-    id: this.nextSpecId(),
-    runs: function() {
-    }
-  };
-};
-
-jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
-  if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
-    return true;
-  }
-
-  a.__Jasmine_been_here_before__ = b;
-  b.__Jasmine_been_here_before__ = a;
-
-  var hasKey = function(obj, keyName) {
-    return obj != null && obj[keyName] !== jasmine.undefined;
-  };
-
-  for (var property in b) {
-    if (!hasKey(a, property) && hasKey(b, property)) {
-      mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
-    }
-  }
-  for (property in a) {
-    if (!hasKey(b, property) && hasKey(a, property)) {
-      mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
-    }
-  }
-  for (property in b) {
-    if (property == '__Jasmine_been_here_before__') continue;
-    if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
-      mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
-    }
-  }
-
-  if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
-    mismatchValues.push("arrays were not the same length");
-  }
-
-  delete a.__Jasmine_been_here_before__;
-  delete b.__Jasmine_been_here_before__;
-  return (mismatchKeys.length == 0 && mismatchValues.length == 0);
-};
-
-jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
-  mismatchKeys = mismatchKeys || [];
-  mismatchValues = mismatchValues || [];
-
-  for (var i = 0; i < this.equalityTesters_.length; i++) {
-    var equalityTester = this.equalityTesters_[i];
-    var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
-    if (result !== jasmine.undefined) return result;
-  }
-
-  if (a === b) return true;
-
-  if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
-    return (a == jasmine.undefined && b == jasmine.undefined);
-  }
-
-  if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
-    return a === b;
-  }
-
-  if (a instanceof Date && b instanceof Date) {
-    return a.getTime() == b.getTime();
-  }
-
-  if (a instanceof jasmine.Matchers.Any) {
-    return a.matches(b);
-  }
-
-  if (b instanceof jasmine.Matchers.Any) {
-    return b.matches(a);
-  }
-
-  if (jasmine.isString_(a) && jasmine.isString_(b)) {
-    return (a == b);
-  }
-
-  if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
-    return (a == b);
-  }
-
-  if (typeof a === "object" && typeof b === "object") {
-    return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
-  }
-
-  //Straight check
-  return (a === b);
-};
-
-jasmine.Env.prototype.contains_ = function(haystack, needle) {
-  if (jasmine.isArray_(haystack)) {
-    for (var i = 0; i < haystack.length; i++) {
-      if (this.equals_(haystack[i], needle)) return true;
-    }
-    return false;
-  }
-  return haystack.indexOf(needle) >= 0;
-};
-
-jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
-  this.equalityTesters_.push(equalityTester);
-};
-/** No-op base class for Jasmine reporters.
- *
- * @constructor
- */
-jasmine.Reporter = function() {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerStarting = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerResults = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecStarting = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecResults = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.log = function(str) {
-};
-
-/**
- * Blocks are functions with executable code that make up a spec.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {Function} func
- * @param {jasmine.Spec} spec
- */
-jasmine.Block = function(env, func, spec) {
-  this.env = env;
-  this.func = func;
-  this.spec = spec;
-};
-
-jasmine.Block.prototype.execute = function(onComplete) {  
-  try {
-    this.func.apply(this.spec);
-  } catch (e) {
-    this.spec.fail(e);
-  }
-  onComplete();
-};
-/** JavaScript API reporter.
- *
- * @constructor
- */
-jasmine.JsApiReporter = function() {
-  this.started = false;
-  this.finished = false;
-  this.suites_ = [];
-  this.results_ = {};
-};
-
-jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) {
-  this.started = true;
-  var suites = runner.topLevelSuites();
-  for (var i = 0; i < suites.length; i++) {
-    var suite = suites[i];
-    this.suites_.push(this.summarize_(suite));
-  }
-};
-
-jasmine.JsApiReporter.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) {
-  var isSuite = suiteOrSpec instanceof jasmine.Suite;
-  var summary = {
-    id: suiteOrSpec.id,
-    name: suiteOrSpec.description,
-    type: isSuite ? 'suite' : 'spec',
-    children: []
-  };
-  
-  if (isSuite) {
-    var children = suiteOrSpec.children();
-    for (var i = 0; i < children.length; i++) {
-      summary.children.push(this.summarize_(children[i]));
-    }
-  }
-  return summary;
-};
-
-jasmine.JsApiReporter.prototype.results = function() {
-  return this.results_;
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) {
-  return this.results_[specId];
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) {
-  this.finished = true;
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) {
-  this.results_[spec.id] = {
-    messages: spec.results().getItems(),
-    result: spec.results().failedCount > 0 ? "failed" : "passed"
-  };
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.log = function(str) {
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){
-  var results = {};
-  for (var i = 0; i < specIds.length; i++) {
-    var specId = specIds[i];
-    results[specId] = this.summarizeResult_(this.results_[specId]);
-  }
-  return results;
-};
-
-jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
-  var summaryMessages = [];
-  var messagesLength = result.messages.length;
-  for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
-    var resultMessage = result.messages[messageIndex];
-    summaryMessages.push({
-      text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
-      passed: resultMessage.passed ? resultMessage.passed() : true,
-      type: resultMessage.type,
-      message: resultMessage.message,
-      trace: {
-        stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
-      }
-    });
-  }
-
-  return {
-    result : result.result,
-    messages : summaryMessages
-  };
-};
-
-/**
- * @constructor
- * @param {jasmine.Env} env
- * @param actual
- * @param {jasmine.Spec} spec
- */
-jasmine.Matchers = function(env, actual, spec, opt_isNot) {
-  this.env = env;
-  this.actual = actual;
-  this.spec = spec;
-  this.isNot = opt_isNot || false;
-  this.reportWasCalled_ = false;
-};
-
-// todo: @deprecated as of Jasmine 0.11, remove soon [xw]
-jasmine.Matchers.pp = function(str) {
-  throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
-};
-
-// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
-jasmine.Matchers.prototype.report = function(result, failing_message, details) {
-  throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
-};
-
-jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
-  for (var methodName in prototype) {
-    if (methodName == 'report') continue;
-    var orig = prototype[methodName];
-    matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
-  }
-};
-
-jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
-  return function() {
-    var matcherArgs = jasmine.util.argsToArray(arguments);
-    var result = matcherFunction.apply(this, arguments);
-
-    if (this.isNot) {
-      result = !result;
-    }
-
-    if (this.reportWasCalled_) return result;
-
-    var message;
-    if (!result) {
-      if (this.message) {
-        message = this.message.apply(this, arguments);
-        if (jasmine.isArray_(message)) {
-          message = message[this.isNot ? 1 : 0];
-        }
-      } else {
-        var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
-        message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
-        if (matcherArgs.length > 0) {
-          for (var i = 0; i < matcherArgs.length; i++) {
-            if (i > 0) message += ",";
-            message += " " + jasmine.pp(matcherArgs[i]);
-          }
-        }
-        message += ".";
-      }
-    }
-    var expectationResult = new jasmine.ExpectationResult({
-      matcherName: matcherName,
-      passed: result,
-      expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
-      actual: this.actual,
-      message: message
-    });
-    this.spec.addMatcherResult(expectationResult);
-    return jasmine.undefined;
-  };
-};
-
-
-
-
-/**
- * toBe: compares the actual to the expected using ===
- * @param expected
- */
-jasmine.Matchers.prototype.toBe = function(expected) {
-  return this.actual === expected;
-};
-
-/**
- * toNotBe: compares the actual to the expected using !==
- * @param expected
- * @deprecated as of 1.0. Use not.toBe() instead.
- */
-jasmine.Matchers.prototype.toNotBe = function(expected) {
-  return this.actual !== expected;
-};
-
-/**
- * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toEqual = function(expected) {
-  return this.env.equals_(this.actual, expected);
-};
-
-/**
- * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
- * @param expected
- * @deprecated as of 1.0. Use not.toNotEqual() instead.
- */
-jasmine.Matchers.prototype.toNotEqual = function(expected) {
-  return !this.env.equals_(this.actual, expected);
-};
-
-/**
- * Matcher that compares the actual to the expected using a regular expression.  Constructs a RegExp, so takes
- * a pattern or a String.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toMatch = function(expected) {
-  return new RegExp(expected).test(this.actual);
-};
-
-/**
- * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
- * @param expected
- * @deprecated as of 1.0. Use not.toMatch() instead.
- */
-jasmine.Matchers.prototype.toNotMatch = function(expected) {
-  return !(new RegExp(expected).test(this.actual));
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeDefined = function() {
-  return (this.actual !== jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeUndefined = function() {
-  return (this.actual === jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to null.
- */
-jasmine.Matchers.prototype.toBeNull = function() {
-  return (this.actual === null);
-};
-
-/**
- * Matcher that boolean not-nots the actual.
- */
-jasmine.Matchers.prototype.toBeTruthy = function() {
-  return !!this.actual;
-};
-
-
-/**
- * Matcher that boolean nots the actual.
- */
-jasmine.Matchers.prototype.toBeFalsy = function() {
-  return !this.actual;
-};
-
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called.
- */
-jasmine.Matchers.prototype.toHaveBeenCalled = function() {
-  if (arguments.length > 0) {
-    throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
-  }
-
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy " + this.actual.identity + " to have been called.",
-      "Expected spy " + this.actual.identity + " not to have been called."
-    ];
-  };
-
-  return this.actual.wasCalled;
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
-jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was not called.
- *
- * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
- */
-jasmine.Matchers.prototype.wasNotCalled = function() {
-  if (arguments.length > 0) {
-    throw new Error('wasNotCalled does not take arguments');
-  }
-
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy " + this.actual.identity + " to not have been called.",
-      "Expected spy " + this.actual.identity + " to have been called."
-    ];
-  };
-
-  return !this.actual.wasCalled;
-};
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
- *
- * @example
- *
- */
-jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
-  var expectedArgs = jasmine.util.argsToArray(arguments);
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-  this.message = function() {
-    if (this.actual.callCount == 0) {
-      // todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw]
-      return [
-        "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.",
-        "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was."
-      ];
-    } else {
-      return [
-        "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall),
-        "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall)
-      ];
-    }
-  };
-
-  return this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
-
-/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasNotCalledWith = function() {
-  var expectedArgs = jasmine.util.argsToArray(arguments);
-  if (!jasmine.isSpy(this.actual)) {
-    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
-  }
-
-  this.message = function() {
-    return [
-      "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
-      "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
-    ]
-  };
-
-  return !this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/**
- * Matcher that checks that the expected item is an element in the actual Array.
- *
- * @param {Object} expected
- */
-jasmine.Matchers.prototype.toContain = function(expected) {
-  return this.env.contains_(this.actual, expected);
-};
-
-/**
- * Matcher that checks that the expected item is NOT an element in the actual Array.
- *
- * @param {Object} expected
- * @deprecated as of 1.0. Use not.toNotContain() instead.
- */
-jasmine.Matchers.prototype.toNotContain = function(expected) {
-  return !this.env.contains_(this.actual, expected);
-};
-
-jasmine.Matchers.prototype.toBeLessThan = function(expected) {
-  return this.actual < expected;
-};
-
-jasmine.Matchers.prototype.toBeGreaterThan = function(expected) {
-  return this.actual > expected;
-};
-
-/**
- * Matcher that checks that the expected exception was thrown by the actual.
- *
- * @param {String} expected
- */
-jasmine.Matchers.prototype.toThrow = function(expected) {
-  var result = false;
-  var exception;
-  if (typeof this.actual != 'function') {
-    throw new Error('Actual is not a function');
-  }
-  try {
-    this.actual();
-  } catch (e) {
-    exception = e;
-  }
-  if (exception) {
-    result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
-  }
-
-  var not = this.isNot ? "not " : "";
-
-  this.message = function() {
-    if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
-      return ["Expected function " + not + "to throw", expected ? expected.message || expected : " an exception", ", but it threw", exception.message || exception].join(' ');
-    } else {
-      return "Expected function to throw an exception.";
-    }
-  };
-
-  return result;
-};
-
-jasmine.Matchers.Any = function(expectedClass) {
-  this.expectedClass = expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.matches = function(other) {
-  if (this.expectedClass == String) {
-    return typeof other == 'string' || other instanceof String;
-  }
-
-  if (this.expectedClass == Number) {
-    return typeof other == 'number' || other instanceof Number;
-  }
-
-  if (this.expectedClass == Function) {
-    return typeof other == 'function' || other instanceof Function;
-  }
-
-  if (this.expectedClass == Object) {
-    return typeof other == 'object';
-  }
-
-  return other instanceof this.expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.toString = function() {
-  return '<jasmine.any(' + this.expectedClass + ')>';
-};
-
-/**
- * @constructor
- */
-jasmine.MultiReporter = function() {
-  this.subReporters_ = [];
-};
-jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter);
-
-jasmine.MultiReporter.prototype.addReporter = function(reporter) {
-  this.subReporters_.push(reporter);
-};
-
-(function() {
-  var functionNames = [
-    "reportRunnerStarting",
-    "reportRunnerResults",
-    "reportSuiteResults",
-    "reportSpecStarting",
-    "reportSpecResults",
-    "log"
-  ];
-  for (var i = 0; i < functionNames.length; i++) {
-    var functionName = functionNames[i];
-    jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
-      return function() {
-        for (var j = 0; j < this.subReporters_.length; j++) {
-          var subReporter = this.subReporters_[j];
-          if (subReporter[functionName]) {
-            subReporter[functionName].apply(subReporter, arguments);
-          }
-        }
-      };
-    })(functionName);
-  }
-})();
-/**
- * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
- *
- * @constructor
- */
-jasmine.NestedResults = function() {
-  /**
-   * The total count of results
-   */
-  this.totalCount = 0;
-  /**
-   * Number of passed results
-   */
-  this.passedCount = 0;
-  /**
-   * Number of failed results
-   */
-  this.failedCount = 0;
-  /**
-   * Was this suite/spec skipped?
-   */
-  this.skipped = false;
-  /**
-   * @ignore
-   */
-  this.items_ = [];
-};
-
-/**
- * Roll up the result counts.
- *
- * @param result
- */
-jasmine.NestedResults.prototype.rollupCounts = function(result) {
-  this.totalCount += result.totalCount;
-  this.passedCount += result.passedCount;
-  this.failedCount += result.failedCount;
-};
-
-/**
- * Adds a log message.
- * @param values Array of message parts which will be concatenated later.
- */
-jasmine.NestedResults.prototype.log = function(values) {
-  this.items_.push(new jasmine.MessageResult(values));
-};
-
-/**
- * Getter for the results: message & results.
- */
-jasmine.NestedResults.prototype.getItems = function() {
-  return this.items_;
-};
-
-/**
- * Adds a result, tracking counts (total, passed, & failed)
- * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
- */
-jasmine.NestedResults.prototype.addResult = function(result) {
-  if (result.type != 'log') {
-    if (result.items_) {
-      this.rollupCounts(result);
-    } else {
-      this.totalCount++;
-      if (result.passed()) {
-        this.passedCount++;
-      } else {
-        this.failedCount++;
-      }
-    }
-  }
-  this.items_.push(result);
-};
-
-/**
- * @returns {Boolean} True if <b>everything</b> below passed
- */
-jasmine.NestedResults.prototype.passed = function() {
-  return this.passedCount === this.totalCount;
-};
-/**
- * Base class for pretty printing for expectation results.
- */
-jasmine.PrettyPrinter = function() {
-  this.ppNestLevel_ = 0;
-};
-
-/**
- * Formats a value in a nice, human-readable string.
- *
- * @param value
- */
-jasmine.PrettyPrinter.prototype.format = function(value) {
-  if (this.ppNestLevel_ > 40) {
-    throw new Error('jasmine.PrettyPrinter: format() nested too deeply!');
-  }
-
-  this.ppNestLevel_++;
-  try {
-    if (value === jasmine.undefined) {
-      this.emitScalar('undefined');
-    } else if (value === null) {
-      this.emitScalar('null');
-    } else if (value === jasmine.getGlobal()) {
-      this.emitScalar('<global>');
-    } else if (value instanceof jasmine.Matchers.Any) {
-      this.emitScalar(value.toString());
-    } else if (typeof value === 'string') {
-      this.emitString(value);
-    } else if (jasmine.isSpy(value)) {
-      this.emitScalar("spy on " + value.identity);
-    } else if (value instanceof RegExp) {
-      this.emitScalar(value.toString());
-    } else if (typeof value === 'function') {
-      this.emitScalar('Function');
-    } else if (typeof value.nodeType === 'number') {
-      this.emitScalar('HTMLNode');
-    } else if (value instanceof Date) {
-      this.emitScalar('Date(' + value + ')');
-    } else if (value.__Jasmine_been_here_before__) {
-      this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>');
-    } else if (jasmine.isArray_(value) || typeof value == 'object') {
-      value.__Jasmine_been_here_before__ = true;
-      if (jasmine.isArray_(value)) {
-        this.emitArray(value);
-      } else {
-        this.emitObject(value);
-      }
-      delete value.__Jasmine_been_here_before__;
-    } else {
-      this.emitScalar(value.toString());
-    }
-  } finally {
-    this.ppNestLevel_--;
-  }
-};
-
-jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) {
-  for (var property in obj) {
-    if (property == '__Jasmine_been_here_before__') continue;
-    fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) != null) : false);
-  }
-};
-
-jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
-
-jasmine.StringPrettyPrinter = function() {
-  jasmine.PrettyPrinter.call(this);
-
-  this.string = '';
-};
-jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
-
-jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) {
-  this.append(value);
-};
-
-jasmine.StringPrettyPrinter.prototype.emitString = function(value) {
-  this.append("'" + value + "'");
-};
-
-jasmine.StringPrettyPrinter.prototype.emitArray = function(array) {
-  this.append('[ ');
-  for (var i = 0; i < array.length; i++) {
-    if (i > 0) {
-      this.append(', ');
-    }
-    this.format(array[i]);
-  }
-  this.append(' ]');
-};
-
-jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) {
-  var self = this;
-  this.append('{ ');
-  var first = true;
-
-  this.iterateObject(obj, function(property, isGetter) {
-    if (first) {
-      first = false;
-    } else {
-      self.append(', ');
-    }
-
-    self.append(property);
-    self.append(' : ');
-    if (isGetter) {
-      self.append('<getter>');
-    } else {
-      self.format(obj[property]);
-    }
-  });
-
-  this.append(' }');
-};
-
-jasmine.StringPrettyPrinter.prototype.append = function(value) {
-  this.string += value;
-};
-jasmine.Queue = function(env) {
-  this.env = env;
-  this.blocks = [];
-  this.running = false;
-  this.index = 0;
-  this.offset = 0;
-  this.abort = false;
-};
-
-jasmine.Queue.prototype.addBefore = function(block) {
-  this.blocks.unshift(block);
-};
-
-jasmine.Queue.prototype.add = function(block) {
-  this.blocks.push(block);
-};
-
-jasmine.Queue.prototype.insertNext = function(block) {
-  this.blocks.splice((this.index + this.offset + 1), 0, block);
-  this.offset++;
-};
-
-jasmine.Queue.prototype.start = function(onComplete) {
-  this.running = true;
-  this.onComplete = onComplete;
-  this.next_();
-};
-
-jasmine.Queue.prototype.isRunning = function() {
-  return this.running;
-};
-
-jasmine.Queue.LOOP_DONT_RECURSE = true;
-
-jasmine.Queue.prototype.next_ = function() {
-  var self = this;
-  var goAgain = true;
-
-  while (goAgain) {
-    goAgain = false;
-    
-    if (self.index < self.blocks.length && !this.abort) {
-      var calledSynchronously = true;
-      var completedSynchronously = false;
-
-      var onComplete = function () {
-        if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) {
-          completedSynchronously = true;
-          return;
-        }
-
-        if (self.blocks[self.index].abort) {
-          self.abort = true;
-        }
-
-        self.offset = 0;
-        self.index++;
-
-        var now = new Date().getTime();
-        if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) {
-          self.env.lastUpdate = now;
-          self.env.setTimeout(function() {
-            self.next_();
-          }, 0);
-        } else {
-          if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) {
-            goAgain = true;
-          } else {
-            self.next_();
-          }
-        }
-      };
-      self.blocks[self.index].execute(onComplete);
-
-      calledSynchronously = false;
-      if (completedSynchronously) {
-        onComplete();
-      }
-      
-    } else {
-      self.running = false;
-      if (self.onComplete) {
-        self.onComplete();
-      }
-    }
-  }
-};
-
-jasmine.Queue.prototype.results = function() {
-  var results = new jasmine.NestedResults();
-  for (var i = 0; i < this.blocks.length; i++) {
-    if (this.blocks[i].results) {
-      results.addResult(this.blocks[i].results());
-    }
-  }
-  return results;
-};
-
-
-/**
- * Runner
- *
- * @constructor
- * @param {jasmine.Env} env
- */
-jasmine.Runner = function(env) {
-  var self = this;
-  self.env = env;
-  self.queue = new jasmine.Queue(env);
-  self.before_ = [];
-  self.after_ = [];
-  self.suites_ = [];
-};
-
-jasmine.Runner.prototype.execute = function() {
-  var self = this;
-  if (self.env.reporter.reportRunnerStarting) {
-    self.env.reporter.reportRunnerStarting(this);
-  }
-  self.queue.start(function () {
-    self.finishCallback();
-  });
-};
-
-jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) {
-  beforeEachFunction.typeName = 'beforeEach';
-  this.before_.splice(0,0,beforeEachFunction);
-};
-
-jasmine.Runner.prototype.afterEach = function(afterEachFunction) {
-  afterEachFunction.typeName = 'afterEach';
-  this.after_.splice(0,0,afterEachFunction);
-};
-
-
-jasmine.Runner.prototype.finishCallback = function() {
-  this.env.reporter.reportRunnerResults(this);
-};
-
-jasmine.Runner.prototype.addSuite = function(suite) {
-  this.suites_.push(suite);
-};
-
-jasmine.Runner.prototype.add = function(block) {
-  if (block instanceof jasmine.Suite) {
-    this.addSuite(block);
-  }
-  this.queue.add(block);
-};
-
-jasmine.Runner.prototype.specs = function () {
-  var suites = this.suites();
-  var specs = [];
-  for (var i = 0; i < suites.length; i++) {
-    specs = specs.concat(suites[i].specs());
-  }
-  return specs;
-};
-
-jasmine.Runner.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.Runner.prototype.topLevelSuites = function() {
-  var topLevelSuites = [];
-  for (var i = 0; i < this.suites_.length; i++) {
-    if (!this.suites_[i].parentSuite) {
-      topLevelSuites.push(this.suites_[i]);
-    }
-  }
-  return topLevelSuites;
-};
-
-jasmine.Runner.prototype.results = function() {
-  return this.queue.results();
-};
-/**
- * Internal representation of a Jasmine specification, or test.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {jasmine.Suite} suite
- * @param {String} description
- */
-jasmine.Spec = function(env, suite, description) {
-  if (!env) {
-    throw new Error('jasmine.Env() required');
-  }
-  if (!suite) {
-    throw new Error('jasmine.Suite() required');
-  }
-  var spec = this;
-  spec.id = env.nextSpecId ? env.nextSpecId() : null;
-  spec.env = env;
-  spec.suite = suite;
-  spec.description = description;
-  spec.queue = new jasmine.Queue(env);
-
-  spec.afterCallbacks = [];
-  spec.spies_ = [];
-
-  spec.results_ = new jasmine.NestedResults();
-  spec.results_.description = description;
-  spec.matchersClass = null;
-};
-
-jasmine.Spec.prototype.getFullName = function() {
-  return this.suite.getFullName() + ' ' + this.description + '.';
-};
-
-
-jasmine.Spec.prototype.results = function() {
-  return this.results_;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.Spec.prototype.log = function() {
-  return this.results_.log(arguments);
-};
-
-jasmine.Spec.prototype.runs = function (func) {
-  var block = new jasmine.Block(this.env, func, this);
-  this.addToQueue(block);
-  return this;
-};
-
-jasmine.Spec.prototype.addToQueue = function (block) {
-  if (this.queue.isRunning()) {
-    this.queue.insertNext(block);
-  } else {
-    this.queue.add(block);
-  }
-};
-
-/**
- * @param {jasmine.ExpectationResult} result
- */
-jasmine.Spec.prototype.addMatcherResult = function(result) {
-  this.results_.addResult(result);
-};
-
-jasmine.Spec.prototype.expect = function(actual) {
-  var positive = new (this.getMatchersClass_())(this.env, actual, this);
-  positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
-  return positive;
-};
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-jasmine.Spec.prototype.waits = function(timeout) {
-  var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
-  this.addToQueue(waitsFunc);
-  return this;
-};
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
-  var latchFunction_ = null;
-  var optional_timeoutMessage_ = null;
-  var optional_timeout_ = null;
-
-  for (var i = 0; i < arguments.length; i++) {
-    var arg = arguments[i];
-    switch (typeof arg) {
-      case 'function':
-        latchFunction_ = arg;
-        break;
-      case 'string':
-        optional_timeoutMessage_ = arg;
-        break;
-      case 'number':
-        optional_timeout_ = arg;
-        break;
-    }
-  }
-
-  var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
-  this.addToQueue(waitsForFunc);
-  return this;
-};
-
-jasmine.Spec.prototype.fail = function (e) {
-  var expectationResult = new jasmine.ExpectationResult({
-    passed: false,
-    message: e ? jasmine.util.formatException(e) : 'Exception'
-  });
-  this.results_.addResult(expectationResult);
-};
-
-jasmine.Spec.prototype.getMatchersClass_ = function() {
-  return this.matchersClass || this.env.matchersClass;
-};
-
-jasmine.Spec.prototype.addMatchers = function(matchersPrototype) {
-  var parent = this.getMatchersClass_();
-  var newMatchersClass = function() {
-    parent.apply(this, arguments);
-  };
-  jasmine.util.inherit(newMatchersClass, parent);
-  jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
-  this.matchersClass = newMatchersClass;
-};
-
-jasmine.Spec.prototype.finishCallback = function() {
-  this.env.reporter.reportSpecResults(this);
-};
-
-jasmine.Spec.prototype.finish = function(onComplete) {
-  this.removeAllSpies();
-  this.finishCallback();
-  if (onComplete) {
-    onComplete();
-  }
-};
-
-jasmine.Spec.prototype.after = function(doAfter) {
-  if (this.queue.isRunning()) {
-    this.queue.add(new jasmine.Block(this.env, doAfter, this));
-  } else {
-    this.afterCallbacks.unshift(doAfter);
-  }
-};
-
-jasmine.Spec.prototype.execute = function(onComplete) {
-  var spec = this;
-  if (!spec.env.specFilter(spec)) {
-    spec.results_.skipped = true;
-    spec.finish(onComplete);
-    return;
-  }
-
-  this.env.reporter.reportSpecStarting(this);
-
-  spec.env.currentSpec = spec;
-
-  spec.addBeforesAndAftersToQueue();
-
-  spec.queue.start(function () {
-    spec.finish(onComplete);
-  });
-};
-
-jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() {
-  var runner = this.env.currentRunner();
-  var i;
-
-  for (var suite = this.suite; suite; suite = suite.parentSuite) {
-    for (i = 0; i < suite.before_.length; i++) {
-      this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this));
-    }
-  }
-  for (i = 0; i < runner.before_.length; i++) {
-    this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this));
-  }
-  for (i = 0; i < this.afterCallbacks.length; i++) {
-    this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this));
-  }
-  for (suite = this.suite; suite; suite = suite.parentSuite) {
-    for (i = 0; i < suite.after_.length; i++) {
-      this.queue.add(new jasmine.Block(this.env, suite.after_[i], this));
-    }
-  }
-  for (i = 0; i < runner.after_.length; i++) {
-    this.queue.add(new jasmine.Block(this.env, runner.after_[i], this));
-  }
-};
-
-jasmine.Spec.prototype.explodes = function() {
-  throw 'explodes function should not have been called';
-};
-
-jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) {
-  if (obj == jasmine.undefined) {
-    throw "spyOn could not find an object to spy upon for " + methodName + "()";
-  }
-
-  if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) {
-    throw methodName + '() method does not exist';
-  }
-
-  if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) {
-    throw new Error(methodName + ' has already been spied upon');
-  }
-
-  var spyObj = jasmine.createSpy(methodName);
-
-  this.spies_.push(spyObj);
-  spyObj.baseObj = obj;
-  spyObj.methodName = methodName;
-  spyObj.originalValue = obj[methodName];
-
-  obj[methodName] = spyObj;
-
-  return spyObj;
-};
-
-jasmine.Spec.prototype.removeAllSpies = function() {
-  for (var i = 0; i < this.spies_.length; i++) {
-    var spy = this.spies_[i];
-    spy.baseObj[spy.methodName] = spy.originalValue;
-  }
-  this.spies_ = [];
-};
-
-/**
- * Internal representation of a Jasmine suite.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {String} description
- * @param {Function} specDefinitions
- * @param {jasmine.Suite} parentSuite
- */
-jasmine.Suite = function(env, description, specDefinitions, parentSuite) {
-  var self = this;
-  self.id = env.nextSuiteId ? env.nextSuiteId() : null;
-  self.description = description;
-  self.queue = new jasmine.Queue(env);
-  self.parentSuite = parentSuite;
-  self.env = env;
-  self.before_ = [];
-  self.after_ = [];
-  self.children_ = [];
-  self.suites_ = [];
-  self.specs_ = [];
-};
-
-jasmine.Suite.prototype.getFullName = function() {
-  var fullName = this.description;
-  for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
-    fullName = parentSuite.description + ' ' + fullName;
-  }
-  return fullName;
-};
-
-jasmine.Suite.prototype.finish = function(onComplete) {
-  this.env.reporter.reportSuiteResults(this);
-  this.finished = true;
-  if (typeof(onComplete) == 'function') {
-    onComplete();
-  }
-};
-
-jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) {
-  beforeEachFunction.typeName = 'beforeEach';
-  this.before_.unshift(beforeEachFunction);
-};
-
-jasmine.Suite.prototype.afterEach = function(afterEachFunction) {
-  afterEachFunction.typeName = 'afterEach';
-  this.after_.unshift(afterEachFunction);
-};
-
-jasmine.Suite.prototype.results = function() {
-  return this.queue.results();
-};
-
-jasmine.Suite.prototype.add = function(suiteOrSpec) {
-  this.children_.push(suiteOrSpec);
-  if (suiteOrSpec instanceof jasmine.Suite) {
-    this.suites_.push(suiteOrSpec);
-    this.env.currentRunner().addSuite(suiteOrSpec);
-  } else {
-    this.specs_.push(suiteOrSpec);
-  }
-  this.queue.add(suiteOrSpec);
-};
-
-jasmine.Suite.prototype.specs = function() {
-  return this.specs_;
-};
-
-jasmine.Suite.prototype.suites = function() {
-  return this.suites_;
-};
-
-jasmine.Suite.prototype.children = function() {
-  return this.children_;
-};
-
-jasmine.Suite.prototype.execute = function(onComplete) {
-  var self = this;
-  this.queue.start(function () {
-    self.finish(onComplete);
-  });
-};
-jasmine.WaitsBlock = function(env, timeout, spec) {
-  this.timeout = timeout;
-  jasmine.Block.call(this, env, null, spec);
-};
-
-jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
-
-jasmine.WaitsBlock.prototype.execute = function (onComplete) {
-  this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
-  this.env.setTimeout(function () {
-    onComplete();
-  }, this.timeout);
-};
-/**
- * A block which waits for some condition to become true, with timeout.
- *
- * @constructor
- * @extends jasmine.Block
- * @param {jasmine.Env} env The Jasmine environment.
- * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
- * @param {Function} latchFunction A function which returns true when the desired condition has been met.
- * @param {String} message The message to display if the desired condition hasn't been met within the given time period.
- * @param {jasmine.Spec} spec The Jasmine spec.
- */
-jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
-  this.timeout = timeout || env.defaultTimeoutInterval;
-  this.latchFunction = latchFunction;
-  this.message = message;
-  this.totalTimeSpentWaitingForLatch = 0;
-  jasmine.Block.call(this, env, null, spec);
-};
-jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
-
-jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
-
-jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
-  this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
-  var latchFunctionResult;
-  try {
-    latchFunctionResult = this.latchFunction.apply(this.spec);
-  } catch (e) {
-    this.spec.fail(e);
-    onComplete();
-    return;
-  }
-
-  if (latchFunctionResult) {
-    onComplete();
-  } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
-    var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
-    this.spec.fail({
-      name: 'timeout',
-      message: message
-    });
-
-    this.abort = true;
-    onComplete();
-  } else {
-    this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
-    var self = this;
-    this.env.setTimeout(function() {
-      self.execute(onComplete);
-    }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
-  }
-};
-// Mock setTimeout, clearTimeout
-// Contributed by Pivotal Computer Systems, www.pivotalsf.com
-
-jasmine.FakeTimer = function() {
-  this.reset();
-
-  var self = this;
-  self.setTimeout = function(funcToCall, millis) {
-    self.timeoutsMade++;
-    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false);
-    return self.timeoutsMade;
-  };
-
-  self.setInterval = function(funcToCall, millis) {
-    self.timeoutsMade++;
-    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true);
-    return self.timeoutsMade;
-  };
-
-  self.clearTimeout = function(timeoutKey) {
-    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
-  };
-
-  self.clearInterval = function(timeoutKey) {
-    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
-  };
-
-};
-
-jasmine.FakeTimer.prototype.reset = function() {
-  this.timeoutsMade = 0;
-  this.scheduledFunctions = {};
-  this.nowMillis = 0;
-};
-
-jasmine.FakeTimer.prototype.tick = function(millis) {
-  var oldMillis = this.nowMillis;
-  var newMillis = oldMillis + millis;
-  this.runFunctionsWithinRange(oldMillis, newMillis);
-  this.nowMillis = newMillis;
-};
-
-jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) {
-  var scheduledFunc;
-  var funcsToRun = [];
-  for (var timeoutKey in this.scheduledFunctions) {
-    scheduledFunc = this.scheduledFunctions[timeoutKey];
-    if (scheduledFunc != jasmine.undefined &&
-        scheduledFunc.runAtMillis >= oldMillis &&
-        scheduledFunc.runAtMillis <= nowMillis) {
-      funcsToRun.push(scheduledFunc);
-      this.scheduledFunctions[timeoutKey] = jasmine.undefined;
-    }
-  }
-
-  if (funcsToRun.length > 0) {
-    funcsToRun.sort(function(a, b) {
-      return a.runAtMillis - b.runAtMillis;
-    });
-    for (var i = 0; i < funcsToRun.length; ++i) {
-      try {
-        var funcToRun = funcsToRun[i];
-        this.nowMillis = funcToRun.runAtMillis;
-        funcToRun.funcToCall();
-        if (funcToRun.recurring) {
-          this.scheduleFunction(funcToRun.timeoutKey,
-              funcToRun.funcToCall,
-              funcToRun.millis,
-              true);
-        }
-      } catch(e) {
-      }
-    }
-    this.runFunctionsWithinRange(oldMillis, nowMillis);
-  }
-};
-
-jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) {
-  this.scheduledFunctions[timeoutKey] = {
-    runAtMillis: this.nowMillis + millis,
-    funcToCall: funcToCall,
-    recurring: recurring,
-    timeoutKey: timeoutKey,
-    millis: millis
-  };
-};
-
-/**
- * @namespace
- */
-jasmine.Clock = {
-  defaultFakeTimer: new jasmine.FakeTimer(),
-
-  reset: function() {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.defaultFakeTimer.reset();
-  },
-
-  tick: function(millis) {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.defaultFakeTimer.tick(millis);
-  },
-
-  runFunctionsWithinRange: function(oldMillis, nowMillis) {
-    jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis);
-  },
-
-  scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
-    jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring);
-  },
-
-  useMock: function() {
-    if (!jasmine.Clock.isInstalled()) {
-      var spec = jasmine.getEnv().currentSpec;
-      spec.after(jasmine.Clock.uninstallMock);
-
-      jasmine.Clock.installMock();
-    }
-  },
-
-  installMock: function() {
-    jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer;
-  },
-
-  uninstallMock: function() {
-    jasmine.Clock.assertInstalled();
-    jasmine.Clock.installed = jasmine.Clock.real;
-  },
-
-  real: {
-    setTimeout: jasmine.getGlobal().setTimeout,
-    clearTimeout: jasmine.getGlobal().clearTimeout,
-    setInterval: jasmine.getGlobal().setInterval,
-    clearInterval: jasmine.getGlobal().clearInterval
-  },
-
-  assertInstalled: function() {
-    if (!jasmine.Clock.isInstalled()) {
-      throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
-    }
-  },
-
-  isInstalled: function() {
-    return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
-  },
-
-  installed: null
-};
-jasmine.Clock.installed = jasmine.Clock.real;
-
-//else for IE support
-jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
-  if (jasmine.Clock.installed.setTimeout.apply) {
-    return jasmine.Clock.installed.setTimeout.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.setTimeout(funcToCall, millis);
-  }
-};
-
-jasmine.getGlobal().setInterval = function(funcToCall, millis) {
-  if (jasmine.Clock.installed.setInterval.apply) {
-    return jasmine.Clock.installed.setInterval.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.setInterval(funcToCall, millis);
-  }
-};
-
-jasmine.getGlobal().clearTimeout = function(timeoutKey) {
-  if (jasmine.Clock.installed.clearTimeout.apply) {
-    return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.clearTimeout(timeoutKey);
-  }
-};
-
-jasmine.getGlobal().clearInterval = function(timeoutKey) {
-  if (jasmine.Clock.installed.clearTimeout.apply) {
-    return jasmine.Clock.installed.clearInterval.apply(this, arguments);
-  } else {
-    return jasmine.Clock.installed.clearInterval(timeoutKey);
-  }
-};
-
-
-jasmine.version_= {
-  "major": 1,
-  "minor": 0,
-  "build": 1,
-  "revision": 1286311016
-};
diff --git a/tests/jasmine/spec/mediawiki.jqueryMsg.spec.data.js b/tests/jasmine/spec/mediawiki.jqueryMsg.spec.data.js
deleted file mode 100644 (file)
index a867f72..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-// This file stores the results from the PHP parser for certain messages and arguments,
-// so we can test the equivalent Javascript libraries.
-// Last generated with makeLanguageSpec.php at 2011-01-28T02:04:09+00:00
-
-mediaWiki.messages.set( {
-       "en_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-       "en_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-       "fr_undelete_short": "Restaurer $1 modification{{PLURAL:$1||s}}",
-       "fr_category-subcat-count": "Cette cat\u00e9gorie comprend {{PLURAL:$2|la sous-cat\u00e9gorie|$2 sous-cat\u00e9gories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
-       "ar_undelete_short": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 {{PLURAL:$1|\u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f|\u062a\u0639\u062f\u064a\u0644\u064a\u0646|$1 \u062a\u0639\u062f\u064a\u0644\u0627\u062a|$1 \u062a\u0639\u062f\u064a\u0644|$1 \u062a\u0639\u062f\u064a\u0644\u0627}}",
-       "ar_category-subcat-count": "{{PLURAL:$2|\u0644\u0627 \u062a\u0635\u0627\u0646\u064a\u0641 \u0641\u0631\u0639\u064a\u0629 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 {{PLURAL:$1||\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a|\u0647\u0630\u064a\u0646 \u0627\u0644\u062a\u0635\u0646\u064a\u0641\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u064a\u0646|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641\u0627 \u0641\u0631\u0639\u064a\u0627|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641 \u0641\u0631\u0639\u064a}}\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a $2.}}",
-       "jp_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-       "jp_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-       "zh_undelete_short": "\u6062\u590d\u88ab\u5220\u9664\u7684$1\u9879\u4fee\u8ba2",
-       "zh_category-subcat-count": "{{PLURAL:$2|\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002|\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u5217$1\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u6709$2\u4e2a\u5b50\u5206\u7c7b\u3002}}"
-} );
-var jasmineMsgSpec = [
-       {
-               "name": "en undelete_short 0",
-               "key": "en_undelete_short",
-               "args": [
-                       0
-               ],
-               "result": "Undelete 0 edits",
-               "lang": "en"
-       },
-       {
-               "name": "en undelete_short 1",
-               "key": "en_undelete_short",
-               "args": [
-                       1
-               ],
-               "result": "Undelete one edit",
-               "lang": "en"
-       },
-       {
-               "name": "en undelete_short 2",
-               "key": "en_undelete_short",
-               "args": [
-                       2
-               ],
-               "result": "Undelete 2 edits",
-               "lang": "en"
-       },
-       {
-               "name": "en undelete_short 5",
-               "key": "en_undelete_short",
-               "args": [
-                       5
-               ],
-               "result": "Undelete 5 edits",
-               "lang": "en"
-       },
-       {
-               "name": "en undelete_short 21",
-               "key": "en_undelete_short",
-               "args": [
-                       21
-               ],
-               "result": "Undelete 21 edits",
-               "lang": "en"
-       },
-       {
-               "name": "en undelete_short 101",
-               "key": "en_undelete_short",
-               "args": [
-                       101
-               ],
-               "result": "Undelete 101 edits",
-               "lang": "en"
-       },
-       {
-               "name": "en category-subcat-count 0,10",
-               "key": "en_category-subcat-count",
-               "args": [
-                       0,
-                       10
-               ],
-               "result": "This category has the following 0 subcategories, out of 10 total.",
-               "lang": "en"
-       },
-       {
-               "name": "en category-subcat-count 1,1",
-               "key": "en_category-subcat-count",
-               "args": [
-                       1,
-                       1
-               ],
-               "result": "This category has only the following subcategory.",
-               "lang": "en"
-       },
-       {
-               "name": "en category-subcat-count 1,2",
-               "key": "en_category-subcat-count",
-               "args": [
-                       1,
-                       2
-               ],
-               "result": "This category has the following subcategory, out of 2 total.",
-               "lang": "en"
-       },
-       {
-               "name": "en category-subcat-count 3,30",
-               "key": "en_category-subcat-count",
-               "args": [
-                       3,
-                       30
-               ],
-               "result": "This category has the following 3 subcategories, out of 30 total.",
-               "lang": "en"
-       },
-       {
-               "name": "fr undelete_short 0",
-               "key": "fr_undelete_short",
-               "args": [
-                       0
-               ],
-               "result": "Restaurer 0 modification",
-               "lang": "fr"
-       },
-       {
-               "name": "fr undelete_short 1",
-               "key": "fr_undelete_short",
-               "args": [
-                       1
-               ],
-               "result": "Restaurer 1 modification",
-               "lang": "fr"
-       },
-       {
-               "name": "fr undelete_short 2",
-               "key": "fr_undelete_short",
-               "args": [
-                       2
-               ],
-               "result": "Restaurer 2 modifications",
-               "lang": "fr"
-       },
-       {
-               "name": "fr undelete_short 5",
-               "key": "fr_undelete_short",
-               "args": [
-                       5
-               ],
-               "result": "Restaurer 5 modifications",
-               "lang": "fr"
-       },
-       {
-               "name": "fr undelete_short 21",
-               "key": "fr_undelete_short",
-               "args": [
-                       21
-               ],
-               "result": "Restaurer 21 modifications",
-               "lang": "fr"
-       },
-       {
-               "name": "fr undelete_short 101",
-               "key": "fr_undelete_short",
-               "args": [
-                       101
-               ],
-               "result": "Restaurer 101 modifications",
-               "lang": "fr"
-       },
-       {
-               "name": "fr category-subcat-count 0,10",
-               "key": "fr_category-subcat-count",
-               "args": [
-                       0,
-                       10
-               ],
-               "result": "Cette cat\u00e9gorie comprend 10 sous-cat\u00e9gories, dont celle ci-dessous.",
-               "lang": "fr"
-       },
-       {
-               "name": "fr category-subcat-count 1,1",
-               "key": "fr_category-subcat-count",
-               "args": [
-                       1,
-                       1
-               ],
-               "result": "Cette cat\u00e9gorie comprend la sous-cat\u00e9gorie ci-dessous.",
-               "lang": "fr"
-       },
-       {
-               "name": "fr category-subcat-count 1,2",
-               "key": "fr_category-subcat-count",
-               "args": [
-                       1,
-                       2
-               ],
-               "result": "Cette cat\u00e9gorie comprend 2 sous-cat\u00e9gories, dont celle ci-dessous.",
-               "lang": "fr"
-       },
-       {
-               "name": "fr category-subcat-count 3,30",
-               "key": "fr_category-subcat-count",
-               "args": [
-                       3,
-                       30
-               ],
-               "result": "Cette cat\u00e9gorie comprend 30 sous-cat\u00e9gories, dont les 3 ci-dessous.",
-               "lang": "fr"
-       },
-       {
-               "name": "ar undelete_short 0",
-               "key": "ar_undelete_short",
-               "args": [
-                       0
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f",
-               "lang": "ar"
-       },
-       {
-               "name": "ar undelete_short 1",
-               "key": "ar_undelete_short",
-               "args": [
-                       1
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644\u064a\u0646",
-               "lang": "ar"
-       },
-       {
-               "name": "ar undelete_short 2",
-               "key": "ar_undelete_short",
-               "args": [
-                       2
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 2 \u062a\u0639\u062f\u064a\u0644\u0627\u062a",
-               "lang": "ar"
-       },
-       {
-               "name": "ar undelete_short 5",
-               "key": "ar_undelete_short",
-               "args": [
-                       5
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 5 \u062a\u0639\u062f\u064a\u0644",
-               "lang": "ar"
-       },
-       {
-               "name": "ar undelete_short 21",
-               "key": "ar_undelete_short",
-               "args": [
-                       21
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 21 \u062a\u0639\u062f\u064a\u0644\u0627",
-               "lang": "ar"
-       },
-       {
-               "name": "ar undelete_short 101",
-               "key": "ar_undelete_short",
-               "args": [
-                       101
-               ],
-               "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 101 \u062a\u0639\u062f\u064a\u0644\u0627",
-               "lang": "ar"
-       },
-       {
-               "name": "ar category-subcat-count 0,10",
-               "key": "ar_category-subcat-count",
-               "args": [
-                       0,
-                       10
-               ],
-               "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 10.",
-               "lang": "ar"
-       },
-       {
-               "name": "ar category-subcat-count 1,1",
-               "key": "ar_category-subcat-count",
-               "args": [
-                       1,
-                       1
-               ],
-               "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.",
-               "lang": "ar"
-       },
-       {
-               "name": "ar category-subcat-count 1,2",
-               "key": "ar_category-subcat-count",
-               "args": [
-                       1,
-                       2
-               ],
-               "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 2.",
-               "lang": "ar"
-       },
-       {
-               "name": "ar category-subcat-count 3,30",
-               "key": "ar_category-subcat-count",
-               "args": [
-                       3,
-                       30
-               ],
-               "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0647 \u0627\u06443 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 30.",
-               "lang": "ar"
-       },
-       {
-               "name": "jp undelete_short 0",
-               "key": "jp_undelete_short",
-               "args": [
-                       0
-               ],
-               "result": "Undelete 0 edits",
-               "lang": "jp"
-       },
-       {
-               "name": "jp undelete_short 1",
-               "key": "jp_undelete_short",
-               "args": [
-                       1
-               ],
-               "result": "Undelete one edit",
-               "lang": "jp"
-       },
-       {
-               "name": "jp undelete_short 2",
-               "key": "jp_undelete_short",
-               "args": [
-                       2
-               ],
-               "result": "Undelete 2 edits",
-               "lang": "jp"
-       },
-       {
-               "name": "jp undelete_short 5",
-               "key": "jp_undelete_short",
-               "args": [
-                       5
-               ],
-               "result": "Undelete 5 edits",
-               "lang": "jp"
-       },
-       {
-               "name": "jp undelete_short 21",
-               "key": "jp_undelete_short",
-               "args": [
-                       21
-               ],
-               "result": "Undelete 21 edits",
-               "lang": "jp"
-       },
-       {
-               "name": "jp undelete_short 101",
-               "key": "jp_undelete_short",
-               "args": [
-                       101
-               ],
-               "result": "Undelete 101 edits",
-               "lang": "jp"
-       },
-       {
-               "name": "jp category-subcat-count 0,10",
-               "key": "jp_category-subcat-count",
-               "args": [
-                       0,
-                       10
-               ],
-               "result": "This category has the following 0 subcategories, out of 10 total.",
-               "lang": "jp"
-       },
-       {
-               "name": "jp category-subcat-count 1,1",
-               "key": "jp_category-subcat-count",
-               "args": [
-                       1,
-                       1
-               ],
-               "result": "This category has only the following subcategory.",
-               "lang": "jp"
-       },
-       {
-               "name": "jp category-subcat-count 1,2",
-               "key": "jp_category-subcat-count",
-               "args": [
-                       1,
-                       2
-               ],
-               "result": "This category has the following subcategory, out of 2 total.",
-               "lang": "jp"
-       },
-       {
-               "name": "jp category-subcat-count 3,30",
-               "key": "jp_category-subcat-count",
-               "args": [
-                       3,
-                       30
-               ],
-               "result": "This category has the following 3 subcategories, out of 30 total.",
-               "lang": "jp"
-       },
-       {
-               "name": "zh undelete_short 0",
-               "key": "zh_undelete_short",
-               "args": [
-                       0
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u76840\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh undelete_short 1",
-               "key": "zh_undelete_short",
-               "args": [
-                       1
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u76841\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh undelete_short 2",
-               "key": "zh_undelete_short",
-               "args": [
-                       2
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u76842\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh undelete_short 5",
-               "key": "zh_undelete_short",
-               "args": [
-                       5
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u76845\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh undelete_short 21",
-               "key": "zh_undelete_short",
-               "args": [
-                       21
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u768421\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh undelete_short 101",
-               "key": "zh_undelete_short",
-               "args": [
-                       101
-               ],
-               "result": "\u6062\u590d\u88ab\u5220\u9664\u7684101\u9879\u4fee\u8ba2",
-               "lang": "zh"
-       },
-       {
-               "name": "zh category-subcat-count 0,10",
-               "key": "zh_category-subcat-count",
-               "args": [
-                       0,
-                       10
-               ],
-               "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52170\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u670910\u4e2a\u5b50\u5206\u7c7b\u3002",
-               "lang": "zh"
-       },
-       {
-               "name": "zh category-subcat-count 1,1",
-               "key": "zh_category-subcat-count",
-               "args": [
-                       1,
-                       1
-               ],
-               "result": "\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002",
-               "lang": "zh"
-       },
-       {
-               "name": "zh category-subcat-count 1,2",
-               "key": "zh_category-subcat-count",
-               "args": [
-                       1,
-                       2
-               ],
-               "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52171\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u67092\u4e2a\u5b50\u5206\u7c7b\u3002",
-               "lang": "zh"
-       },
-       {
-               "name": "zh category-subcat-count 3,30",
-               "key": "zh_category-subcat-count",
-               "args": [
-                       3,
-                       30
-               ],
-               "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52173\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u670930\u4e2a\u5b50\u5206\u7c7b\u3002",
-               "lang": "zh"
-       }
-];
diff --git a/tests/jasmine/spec/mediawiki.jqueryMsg.spec.js b/tests/jasmine/spec/mediawiki.jqueryMsg.spec.js
deleted file mode 100644 (file)
index 46dcaa8..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-/* spec for language & message behaviour in MediaWiki */
-
-mw.messages.set( {
-       "en_empty": "",
-       "en_simple": "Simple message",
-       "en_replace": "Simple $1 replacement",
-       "en_replace2": "Simple $1 $2 replacements",
-       "en_link": "Simple [http://example.com link to example].",
-       "en_link_replace": "Complex [$1 $2] behaviour.",
-       "en_simple_magic": "Simple {{ALOHOMORA}} message",
-       "en_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-       "en_undelete_empty_param": "Undelete{{PLURAL:$1|| multiple edits}}",
-       "en_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-       "en_escape0": "Escape \\to fantasy island",
-       "en_escape1": "I had \\$2.50 in my pocket",
-       "en_escape2": "I had {{PLURAL:$1|the absolute \\|$1\\| which came out to \\$3.00 in my C:\\\\drive| some stuff}}",
-       "en_fail": "This should fail to {{parse",
-       "en_fail_magic": "There is no such magic word as {{SIETNAME}}",
-       "en_evil": "This has <script type='text/javascript'>window.en_evil = true;</script> tags"
-} );
-
-/**
- * Tests
- */
-( function( mw, $, undefined ) {
-
-       describe( "mediaWiki.jqueryMsg", function() {
-               
-               describe( "basic message functionality", function() {
-
-                       it( "should return identity for empty string", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_empty' ).html() ).toEqual( '' );
-                       } );
-
-
-                       it( "should return identity for simple string", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_simple' ).html() ).toEqual( 'Simple message' );
-                       } );
-
-               } );
-
-               describe( "escaping", function() {
-
-                       it ( "should handle simple escaping", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_escape0' ).html() ).toEqual( 'Escape to fantasy island' );
-                       } );
-
-                       it ( "should escape dollar signs found in ordinary text when backslashed", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_escape1' ).html() ).toEqual( 'I had $2.50 in my pocket' );
-                       } );
-
-                       it ( "should handle a complicated escaping case, including escaped pipe chars in template args", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_escape2', [ 1 ] ).html() ).toEqual( 'I had the absolute |1| which came out to $3.00 in my C:\\drive' );
-                       } );
-
-               } );
-
-               describe( "replacing", function() {
-
-                       it ( "should handle simple replacing", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_replace', [ 'foo' ] ).html() ).toEqual( 'Simple foo replacement' );
-                       } );
-
-                       it ( "should return $n if replacement not there", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_replace', [] ).html() ).toEqual( 'Simple $1 replacement' );
-                               expect( parser.parse( 'en_replace2', [ 'bar' ] ).html() ).toEqual( 'Simple bar $2 replacements' );
-                       } );
-
-               } );
-
-               describe( "linking", function() {
-
-                       it ( "should handle a simple link", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               var parsed = parser.parse( 'en_link' );
-                               var contents = parsed.contents();
-                               expect( contents.length ).toEqual( 3 );
-                               expect( contents[0].nodeName ).toEqual( '#text' );
-                               expect( contents[0].nodeValue ).toEqual( 'Simple ' );
-                               expect( contents[1].nodeName ).toEqual( 'A' );
-                               expect( contents[1].getAttribute( 'href' ) ).toEqual( 'http://example.com' );
-                               expect( contents[1].childNodes[0].nodeValue ).toEqual( 'link to example' );
-                               expect( contents[2].nodeName ).toEqual( '#text' );
-                               expect( contents[2].nodeValue ).toEqual( '.' );
-                       } );
-
-                       it ( "should replace a URL into a link", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               var parsed = parser.parse( 'en_link_replace', [ 'http://example.com/foo', 'linking' ] );
-                               var contents = parsed.contents();
-                               expect( contents.length ).toEqual( 3 );
-                               expect( contents[0].nodeName ).toEqual( '#text' );
-                               expect( contents[0].nodeValue ).toEqual( 'Complex ' );
-                               expect( contents[1].nodeName ).toEqual( 'A' );
-                               expect( contents[1].getAttribute( 'href' ) ).toEqual( 'http://example.com/foo' );
-                               expect( contents[1].childNodes[0].nodeValue ).toEqual( 'linking' );
-                               expect( contents[2].nodeName ).toEqual( '#text' );
-                               expect( contents[2].nodeValue ).toEqual( ' behaviour.' );
-                       } );
-
-                       it ( "should bind a click handler into a link", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               var clicked = false;
-                               var click = function() { clicked = true; };
-                               var parsed = parser.parse( 'en_link_replace', [ click, 'linking' ] );
-                               var contents = parsed.contents();
-                               expect( contents.length ).toEqual( 3 );
-                               expect( contents[0].nodeName ).toEqual( '#text' );
-                               expect( contents[0].nodeValue ).toEqual( 'Complex ' );
-                               expect( contents[1].nodeName ).toEqual( 'A' );
-                               expect( contents[1].getAttribute( 'href' ) ).toEqual( '#' );
-                               expect( contents[1].childNodes[0].nodeValue ).toEqual( 'linking' );
-                               expect( contents[2].nodeName ).toEqual( '#text' );
-                               expect( contents[2].nodeValue ).toEqual( ' behaviour.' );
-                               // determining bindings is hard in IE
-                               var anchor = parsed.find( 'a' );
-                               if ( ( $.browser.mozilla || $.browser.webkit ) && anchor.click ) {
-                                       expect( clicked ).toEqual( false );
-                                       anchor.click(); 
-                                       expect( clicked ).toEqual( true );
-                               }
-                       } );
-
-                       it ( "should wrap a jquery arg around link contents -- even another element", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               var clicked = false;
-                               var click = function() { clicked = true; };
-                               var button = $( '<button>' ).click( click );
-                               var parsed = parser.parse( 'en_link_replace', [ button, 'buttoning' ] );
-                               var contents = parsed.contents();
-                               expect( contents.length ).toEqual( 3 );
-                               expect( contents[0].nodeName ).toEqual( '#text' );
-                               expect( contents[0].nodeValue ).toEqual( 'Complex ' );
-                               expect( contents[1].nodeName ).toEqual( 'BUTTON' );
-                               expect( contents[1].childNodes[0].nodeValue ).toEqual( 'buttoning' );
-                               expect( contents[2].nodeName ).toEqual( '#text' );
-                               expect( contents[2].nodeValue ).toEqual( ' behaviour.' );
-                               // determining bindings is hard in IE
-                               if ( ( $.browser.mozilla || $.browser.webkit ) && button.click ) {
-                                       expect( clicked ).toEqual( false );
-                                       parsed.find( 'button' ).click();
-                                       expect( clicked ).toEqual( true );
-                               }
-                       } );
-
-
-               } );
-
-
-               describe( "magic keywords", function() {
-                       it( "should substitute magic keywords", function() {
-                               var options = {
-                                       magic: { 
-                                               'alohomora' : 'open'
-                                       }
-                               };
-                               var parser = new mw.jqueryMsg.parser( options );
-                               expect( parser.parse( 'en_simple_magic' ).html() ).toEqual( 'Simple open message' );
-                       } );
-               } );
-               
-               describe( "error conditions", function() {
-                       it( "should return non-existent key in square brackets", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( parser.parse( 'en_does_not_exist' ).html() ).toEqual( '[en_does_not_exist]' );
-                       } );
-
-
-                       it( "should fail to parse", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               expect( function() { parser.parse( 'en_fail' ); } ).toThrow( 
-                                       'Parse error at position 20 in input: This should fail to {{parse'
-                               );
-                       } );
-               } );
-
-               describe( "empty parameters", function() {
-                       it( "should deal with empty parameters", function() {
-                               var parser = new mw.jqueryMsg.parser();
-                               var ast = parser.getAst( 'en_undelete_empty_param' );
-                               expect( parser.parse( 'en_undelete_empty_param', [ 1 ] ).html() ).toEqual( 'Undelete' );
-                               expect( parser.parse( 'en_undelete_empty_param', [ 3 ] ).html() ).toEqual( 'Undelete multiple edits' );
-
-                       } );
-               } );
-
-               describe( "easy message interface functions", function() {
-                       it( "should allow a global that returns strings", function() {
-                               var gM = mw.jqueryMsg.getMessageFunction();
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               // a surrounding <SPAN> is needed for html() to work right
-                               var expectedHtml = $( '<span>Complex <a href="http://example.com/foo">linking</a> behaviour.</span>' ).html();
-                               var result = gM( 'en_link_replace', 'http://example.com/foo', 'linking' );
-                               expect( typeof result ).toEqual( 'string' );
-                               expect( result ).toEqual( expectedHtml );
-                       } );
-
-                       it( "should allow a jQuery plugin that appends to nodes", function() {
-                               $.fn.msg = mw.jqueryMsg.getPlugin();
-                               var $div = $( '<div>' ).append( $( '<p>' ).addClass( 'foo' ) );
-                               var clicked = false;
-                               var $button = $( '<button>' ).click( function() { clicked = true; } );
-                               $div.find( '.foo' ).msg( 'en_link_replace', $button, 'buttoning' );
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               // a surrounding <SPAN> is needed for html() to work right
-                               var expectedHtml = $( '<span>Complex <button>buttoning</button> behaviour.</span>' ).html();
-                               var createdHtml = $div.find( '.foo' ).html();
-                               // it is hard to test for clicks with IE; also it inserts or removes spaces around nodes when creating HTML tags, depending on their type.
-                               // so need to check the strings stripped of spaces.
-                               if ( ( $.browser.mozilla || $.browser.webkit ) && $button.click ) {
-                                       expect( createdHtml ).toEqual( expectedHtml );
-                                       $div.find( 'button ').click();
-                                       expect( clicked ).toEqual( true );
-                               } else if ( $.browser.ie ) {
-                                       expect( createdHtml.replace( /\s/, '' ) ).toEqual( expectedHtml.replace( /\s/, '' ) );
-                               }
-                               delete $.fn.msg;
-                       } );
-
-                       it( "jQuery plugin should escape incoming string arguments", function() {
-                               $.fn.msg = mw.jqueryMsg.getPlugin();
-                               var $div = $( '<div>' ).addClass( 'foo' );
-                               $div.msg( 'en_replace', '<p>x</p>' ); // looks like HTML, but as a string, should be escaped.
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               var expectedHtml = $( '<div class="foo">Simple &lt;p&gt;x&lt;/p&gt; replacement</div>' ).html();
-                               var createdHtml = $div.html();
-                               expect( expectedHtml ).toEqual( createdHtml );
-                               delete $.fn.msg;
-                       } );
-
-
-                       it( "jQuery plugin should never execute scripts", function() {
-                               window.en_evil = false;
-                               $.fn.msg = mw.jqueryMsg.getPlugin();
-                               var $div = $( '<div>' );
-                               $div.msg( 'en_evil' );
-                               expect( window.en_evil ).toEqual( false );
-                               delete $.fn.msg;
-                       } );
-
-
-                       // n.b. this passes because jQuery already seems to strip scripts away; however, it still executes them if they are appended to any element.
-                       it( "jQuery plugin should never emit scripts", function() {
-                               $.fn.msg = mw.jqueryMsg.getPlugin();
-                               var $div = $( '<div>' );
-                               $div.msg( 'en_evil' );
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               var expectedHtml = $( '<div>This has  tags</div>' ).html();
-                               var createdHtml = $div.html();
-                               expect( expectedHtml ).toEqual( createdHtml );
-                               console.log( 'expected: ' + expectedHtml );
-                               console.log( 'created: ' + createdHtml );
-                               delete $.fn.msg;
-                       } );
-
-
-
-               } );
-
-               // The parser functions can throw errors, but let's not actually blow up for the user -- instead dump the error into the interface so we have
-               // a chance at fixing this
-               describe( "easy message interface functions with graceful failures", function() {
-                       it( "should allow a global that returns strings, with graceful failure", function() {
-                               var gM = mw.jqueryMsg.getMessageFunction();
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               // a surrounding <SPAN> is needed for html() to work right
-                               var expectedHtml = $( '<span>en_fail: Parse error at position 20 in input: This should fail to {{parse</span>' ).html();
-                               var result = gM( 'en_fail' );
-                               expect( typeof result ).toEqual( 'string' );
-                               expect( result ).toEqual( expectedHtml );
-                       } );
-
-                       it( "should allow a global that returns strings, with graceful failure on missing magic words", function() {
-                               var gM = mw.jqueryMsg.getMessageFunction();
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               // a surrounding <SPAN> is needed for html() to work right
-                               var expectedHtml = $( '<span>en_fail_magic: unknown operation "sietname"</span>' ).html();
-                               var result = gM( 'en_fail_magic' );
-                               expect( typeof result ).toEqual( 'string' );
-                               expect( result ).toEqual( expectedHtml );
-                       } );
-
-
-                       it( "should allow a jQuery plugin, with graceful failure", function() {
-                               $.fn.msg = mw.jqueryMsg.getPlugin();
-                               var $div = $( '<div>' ).append( $( '<p>' ).addClass( 'foo' ) );
-                               $div.find( '.foo' ).msg( 'en_fail' );
-                               // passing this through jQuery and back to string, because browsers may have subtle differences, like the case of tag names.
-                               // a surrounding <SPAN> is needed for html() to work right
-                               var expectedHtml = $( '<span>en_fail: Parse error at position 20 in input: This should fail to {{parse</span>' ).html();
-                               var createdHtml = $div.find( '.foo' ).html();
-                               expect( createdHtml ).toEqual( expectedHtml );
-                               delete $.fn.msg;
-                       } );
-
-               } );
-
-
-
-
-               describe( "test plurals and other language-specific functions", function() {
-                       /* copying some language definitions in here -- it's hard to make this test fast and reliable 
-                          otherwise, and we don't want to have to know the mediawiki URL from this kind of test either.
-                          We also can't preload the langs for the test since they clobber the same namespace.
-                          In principle Roan said it was okay to change how languages worked so that didn't happen... maybe 
-                          someday. We'd have to the same kind of importing of the default rules for most rules, or maybe 
-                          come up with some kind of subclassing scheme for languages */
-                       var languageClasses = {
-                               ar: {
-                                       /**
-                                        * Arabic (العربية) language functions
-                                        */
-
-                                       convertPlural: function( count, forms ) {
-                                               forms = mw.language.preConvertPlural( forms, 6 );
-                                               if ( count === 0 ) {
-                                                       return forms[0];
-                                               }
-                                               if ( count == 1 ) {
-                                                       return forms[1];
-                                               }
-                                               if ( count == 2 ) {
-                                                       return forms[2];
-                                               }
-                                               if ( count % 100 >= 3 && count % 100 <= 10 ) {
-                                                       return forms[3];
-                                               }
-                                               if ( count % 100 >= 11 && count % 100 <= 99 ) {
-                                                       return forms[4];
-                                               }
-                                               return forms[5];
-                                       },
-
-                                       digitTransformTable: {
-                                           '0': '٠', // &#x0660;
-                                           '1': '١', // &#x0661;
-                                           '2': '٢', // &#x0662;
-                                           '3': '٣', // &#x0663;
-                                           '4': '٤', // &#x0664;
-                                           '5': '٥', // &#x0665;
-                                           '6': '٦', // &#x0666;
-                                           '7': '٧', // &#x0667;
-                                           '8': '٨', // &#x0668;
-                                           '9': '٩', // &#x0669;
-                                           '.': '٫', // &#x066b; wrong table ?
-                                           ',': '٬' // &#x066c;
-                                       }
-
-                               },
-                               en: { },
-                               fr: {
-                                       convertPlural: function( count, forms ) {
-                                               forms = mw.language.preConvertPlural( forms, 2 );
-                                               return ( count <= 1 ) ? forms[0] : forms[1];
-                                       }
-                               },
-                               jp: { },
-                               zh: { }
-                       };
-
-                       /* simulate how the language classes override, or don't, the standard functions in mw.language */
-                       $.each( languageClasses, function( langCode, rules ) { 
-                               $.each( [ 'convertPlural', 'convertNumber' ], function( i, propertyName ) { 
-                                       if ( typeof rules[ propertyName ] === 'undefined' ) {
-                                               rules[ propertyName ] = mw.language[ propertyName ];
-                                       }
-                               } );
-                       } );
-
-                       $.each( jasmineMsgSpec, function( i, test ) { 
-                               it( "should parse " + test.name, function() { 
-                                       // using language override so we don't have to muck with global namespace
-                                       var parser = new mw.jqueryMsg.parser( { language: languageClasses[ test.lang ] } );
-                                       var parsedHtml = parser.parse( test.key, test.args ).html();
-                                       expect( parsedHtml ).toEqual( test.result );
-                               } );
-                       } );
-
-               } );
-
-       } );
-} )( window.mediaWiki, jQuery );
diff --git a/tests/jasmine/spec_makers/makeJqueryMsgSpec.php b/tests/jasmine/spec_makers/makeJqueryMsgSpec.php
deleted file mode 100644 (file)
index 9d75be4..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * This PHP script defines the spec that the Javascript message parser should conform to.
- *
- * It does this by looking up the results of various string kinds of string parsing, with various languages,
- * in the current installation of MediaWiki. It then outputs a static specification, mapping expected inputs to outputs,
- * which can be used with the JasmineBDD framework. This specification can then be used by simply including it into
- * the SpecRunner.html file.
- *
- * This is similar to Michael Dale (mdale@mediawiki.org)'s parser tests, except that it doesn't look up the 
- * API results while doing the test, so the Jasmine run is much faster(at the cost of being out of date in rare
- * circumstances. But mostly the parsing that we are doing in Javascript doesn't change much.)
- *
- */ 
-
-$maintenanceDir = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) . '/maintenance';
-
-require( "$maintenanceDir/Maintenance.php" );
-
-class MakeLanguageSpec extends Maintenance {
-
-       static $keyToTestArgs = array(
-               'undelete_short' => array( 
-                       array( 0 ), 
-                       array( 1 ), 
-                       array( 2 ), 
-                       array( 5 ), 
-                       array( 21 ), 
-                       array( 101 ) 
-               ),
-               'category-subcat-count' => array(  
-                       array( 0, 10 ), 
-                       array( 1, 1 ), 
-                       array( 1, 2 ), 
-                       array( 3, 30 ) 
-               )
-       );
-
-       public function __construct() {
-                parent::__construct();
-                $this->mDescription = "Create a JasmineBDD-compatible specification for message parsing";
-                // add any other options here
-        }
-
-       public function execute() {
-               list( $messages, $tests ) = $this->getMessagesAndTests();
-               $this->writeJavascriptFile( $messages, $tests, "spec/mediawiki.language.parser.spec.data.js" );
-       }
-
-       private function getMessagesAndTests() {
-               $messages = array();
-               $tests = array();
-               $wfMsgExtOptions = array( 'parsemag' );
-               foreach ( array( 'en', 'fr', 'ar', 'jp', 'zh' ) as $languageCode ) {
-                       $wfMsgExtOptions['language'] = $languageCode;
-                       foreach ( self::$keyToTestArgs as $key => $testArgs ) {
-                               foreach ($testArgs as $args) {
-                                       // get the raw template, without any transformations
-                                       $template = wfMessage( $key )->inLanguage( $languageCode )->plain();
-
-                                       // get the magic-parsed version with args
-                                       $wfMsgExtArgs = array_merge( array( $key, $wfMsgExtOptions ), $args );
-                                       // @todo FIXME: Use Message class.
-                                       $result = call_user_func_array( 'wfMsgExt', $wfMsgExtArgs ); 
-
-                                       // record the template, args, language, and expected result
-                                       // fake multiple languages by flattening them together  
-                                       $langKey = $languageCode . '_' . $key;
-                                       $messages[ $langKey ] = $template;
-                                       $tests[] = array( 
-                                               'name' => $languageCode . " " . $key . " " . join( ",", $args ),
-                                               'key' => $langKey,
-                                               'args' => $args, 
-                                               'result' => $result,
-                                               'lang' => $languageCode
-                                       );
-                               }
-                       }
-               }
-               return array( $messages, $tests );
-       }
-
-       private function writeJavascriptFile( $messages, $tests, $dataSpecFile ) {
-               global $argv;
-               $arguments = count($argv) ? $argv : $_SERVER[ 'argv' ];
-
-               $json = new Services_JSON;
-               $json->pretty = true;
-               $javascriptPrologue = "// This file stores the results from the PHP parser for certain messages and arguments,\n"
-                                     . "// so we can test the equivalent Javascript libraries.\n"
-                                     . '// Last generated with ' . join(' ', $arguments) . ' at ' . gmdate('c') . "\n\n";
-               $javascriptMessages = "mediaWiki.messages.set( " . $json->encode( $messages, true ) . " );\n";
-               $javascriptTests = 'var jasmineMsgSpec = ' . $json->encode( $tests, true ) . ";\n";
-
-               $fp = fopen( $dataSpecFile, 'w' );
-               if ( !$fp ) {
-                       die( "couldn't open $dataSpecFile for writing" );
-               }
-               $success = fwrite( $fp, $javascriptPrologue . $javascriptMessages . $javascriptTests );
-               if ( !$success ) { 
-                       die( "couldn't write to $dataSpecFile" );
-               }
-               $success = fclose( $fp );
-               if ( !$success ) {
-                       die( "couldn't close $dataSpecFile" );
-               }
-       }
-}
-
-$maintClass = "MakeLanguageSpec";
-require_once( "$maintenanceDir/doMaintenance.php" );
-
-
-
index cd59833..fb0c848 100644 (file)
@@ -1,23 +1,25 @@
 <?php
-# Copyright (C) 2004, 2010 Brion Vibber <brion@pobox.com>
-# 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
-
 /**
+ * Helper code for the MediaWiki parser test suite.
+ *
+ * Copyright © 2004, 2010 Brion Vibber <brion@pobox.com>
+ * 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
+ *
  * @todo Make this more independent of the configuration (and if possible the database)
  * @todo document
  * @file
@@ -1204,7 +1206,7 @@ class ParserTest {
                        }
                }
 
-               $page->doEdit( $text, '', EDIT_NEW );
+               $page->doEditContent( ContentHandler::makeContent( $text, $title ), '', EDIT_NEW );
 
                $wgCapitalLinks = $oldCapitalLinks;
        }
index 5036268..e55cc83 100644 (file)
@@ -36,13 +36,13 @@ Main Page
 blah blah
 !! endarticle
 
-!!article 
+!!article
 Template:Foo
 !!text
 FOO
 !!endarticle
 
-!! article 
+!! article
 Template:Blank
 !! text
 !! endarticle
@@ -65,6 +65,12 @@ Template:inner list
 * item 1
 !! endarticle
 
+!! article
+Template:echo
+!! text
+{{{1}}}
+!! endarticle
+
 ###
 ### Basic tests
 ###
@@ -499,18 +505,34 @@ nowiki 3
 ### Comments
 ###
 !! test
-Comment test 1
+Comments and Pre
 !! input
+<!-- comment 1 --> asdf
+
 <!-- comment 1 --> asdf
 <!-- comment 2 -->
+
+<!-- comment 1 --> asdf
+<!-- comment 2 -->xyz
+
+<!-- comment 1 --> asdf
+<!-- comment 2 --> xyz
 !! result
 <pre>asdf
 </pre>
-
+<pre>asdf
+</pre>
+<pre>asdf
+</pre>
+<p>xyz
+</p>
+<pre>asdf
+xyz
+</pre>
 !! end
 
 !! test
-Comment test 2
+Comment test 2a
 !! input
 asdf
 <!-- comment 1 -->
@@ -521,6 +543,19 @@ jkl
 </p>
 !! end
 
+!! test
+Comment test 2b
+!! input
+asdf
+<!-- comment 1 -->
+
+jkl
+!! result
+<p>asdf
+</p><p>jkl
+</p>
+!! end
+
 !! test
 Comment test 3
 !! input
@@ -633,6 +668,74 @@ b
 </p>
 !! end
 
+!! test
+Comment on its own line post-expand with non-significant whitespace
+!! input
+a
+ {{blank}} <!----> 
+b
+!! result
+<p>a
+</p><p>b
+</p>
+!! end
+
+###
+### paragraph wraping tests
+###
+!! test
+No block tags
+!! input
+a
+
+b
+!! result
+<p>a
+</p><p>b
+</p>
+!! end
+!! test
+Block tag on one line
+!! input
+a <div>foo</div>
+
+b
+!! result
+a <div>foo</div>
+<p>b
+</p>
+!! end
+
+!! test
+Block tag on both lines
+!! input
+a <div>foo</div>
+
+b <div>foo</div>
+!! result
+a <div>foo</div>
+b <div>foo</div>
+
+!! end
+
+!! test
+Multiple lines without block tags
+!! input
+<div>foo</div> a
+b
+c
+d<!--foo--> e
+x <div>foo</div> z
+!! result
+<div>foo</div> a
+<p>b
+c
+d e
+</p>
+x <div>foo</div> z
+
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -787,6 +890,127 @@ Bug 6200: Preformatted in <blockquote>
 </p>
 !! end
 
+!!test
+Templates: Pre: 1a. Templates that break a line should suppress <pre>
+!!input
+ {{echo|}}
+!!result
+
+!!end
+
+!!test
+Templates: Pre: 1b. Templates that break a line should suppress <pre>
+!!input
+ {{echo|
+foo}}
+!!result
+<p>foo
+</p>
+!!end
+
+!! test
+Templates: Pre: 1c: Wrapping should be based on expanded content
+!! input
+ {{echo|a
+b}}
+!!result
+<pre>a
+</pre>
+<p>b
+</p>
+!!end
+
+!! test
+Templates: Pre: 1d: Wrapping should be based on expanded content
+!! input
+ {{echo|a
+b
+c
+ d
+e
+}}
+!!result
+<pre>a
+</pre>
+<p>b
+c
+</p>
+<pre>d
+</pre>
+<p>e
+</p>
+!!end
+
+!!test
+Templates: Pre: 1e. Wrapping should be based on expanded content
+!!input
+{{echo| foo}}
+
+{{echo| foo}}
+{{echo| bar}}
+
+{{echo|<!--cmt--> foo}}
+
+<!--cmt-->{{echo| foo}}
+
+{{echo|{{echo| }}bar}}
+!!result
+<pre>foo
+</pre>
+<pre>foo
+bar
+</pre>
+<pre>foo
+</pre>
+<pre>foo
+</pre>
+<pre>bar
+</pre>
+!!end
+
+###
+### Parsoid-centric tests for testing RT edge cases
+### around comments and white-space inside pre blocks
+###
+
+!!test
+1a. Pre and Comments
+!!input
+ a
+<!--a-->
+c
+!!result
+<pre>a
+</pre>
+<p>c
+</p>
+!!end
+
+!!test
+1b. Pre and Comments
+!!input
+ a
+ <!--a-->
+c
+!!result
+<pre>a
+</pre>
+<p>c
+</p>
+!!end
+
+!!test
+1c. Pre and Comments
+!!input
+<!--a-->  a
+
+ <!--a--> a
+!!result
+<pre> a
+</pre>
+<pre> a
+</pre>
+!!end
 
 ###
 ### Definition lists
@@ -1042,7 +1266,7 @@ Definition Lists: Indentation: Multi-level indent
 ##
 ## All Parsoid only definition list tests have this difference.
 ##
-## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569 
+## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569
 ## and http://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
 
 !! test
@@ -1424,6 +1648,15 @@ second]
 </p>
 !!end
 
+!! test
+External links: Pipe char between url and text
+!! input
+[http://example.com | link]
+!! result
+<p><a rel="nofollow" class="external text" href="http://example.com">| link</a>
+</p>
+!!end
+
 !! test
 External links: protocol-relative URL in brackets
 !! input
@@ -1995,7 +2228,7 @@ A table with no data.
 # this as <p>caption</p>
 !! test
 A table with nothing but a caption
-!! input 
+!! input
 {|
 |+ caption
 |}
@@ -2442,6 +2675,21 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 </p>
 !! end
 
+!! test
+Broken image links with HTML captions (bug 39700)
+!! input
+[[File:Nonexistent|<script></script>]]
+[[File:Nonexistent|100px|<script></script>]]
+[[File:Nonexistent|&lt;]]
+[[File:Nonexistent|a<i>b</i>c]]
+!! result
+<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
+<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
+</p>
+!! end
+
 !! test
 Plain link to URL
 !! input
@@ -2720,6 +2968,16 @@ Blah blah blah
 </p>
 !! end
 
+!! test
+Parsoid-specific test: Wikilinks with &nbsp; should RT properly
+!! options
+language=ln
+!! input
+[[WW&nbsp;II]]
+!!result
+<p><a href="/index.php?title=WW_II&amp;action=edit&amp;redlink=1" class="new" title="WW II (lonkásá  ezalí tɛ̂)">WW&#160;II</a>
+</p>
+!! end
 
 ##
 ## XHTML tidiness
@@ -2743,7 +3001,7 @@ Incorrecly removing closing slashes from correctly formed XHTML
 </p>
 !! end
 
-!! test 
+!! test
 Failing to transform badly formed HTML into correct XHTML
 !! input
 <br style="clear: left;">
@@ -2756,6 +3014,47 @@ Failing to transform badly formed HTML into correct XHTML
 </p>
 !!end
 
+!! test
+Handling html with a div self-closing tag
+!! input
+<div title />
+<div title/>
+<div title/ >
+<div title=bar />
+<div title=bar/>
+<div title=bar/ >
+!! result
+<p>&lt;div title /&gt;
+&lt;div title/&gt;
+</p>
+<div>
+<p>&lt;div title=bar /&gt;
+&lt;div title=bar/&gt;
+</p>
+<div title="bar/"></div>
+</div>
+
+!! end
+
+!! test
+Handling html with a br self-closing tag
+!! input
+<br title />
+<br title/>
+<br title/ >
+<br title=bar />
+<br title=bar/>
+<br title=bar/ >
+!! result
+<p><br title="title" />
+<br title="title" />
+<br />
+<br title="bar" />
+<br title="bar" />
+<br title="bar/" />
+</p>
+!! end
+
 !! test
 Horizontal ruler (should it add that extra space?)
 !! input
@@ -3901,127 +4200,508 @@ int keyword
 </p>
 !! end
 
-!! article
-Template:Includes
-!! text
-Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
-!! endarticle
+!! article
+Template:Includes
+!! text
+Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
+!! endarticle
+
+!! test
+<includeonly> and <noinclude> being included
+!! input
+{{Includes}}
+!! result
+<p>Foobar
+</p>
+!! end
+
+!! article
+Template:Includes2
+!! text
+<onlyinclude>Foo</onlyinclude>bar
+!! endarticle
+
+!! test
+<onlyinclude> being included
+!! input
+{{Includes2}}
+!! result
+<p>Foo
+</p>
+!! end
+
+
+!! article
+Template:Includes3
+!! text
+<onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
+!! endarticle
+
+!! test
+<onlyinclude> and <includeonly> being included
+!! input
+{{Includes3}}
+!! result
+<p>Foo
+</p>
+!! end
+
+!! test
+<includeonly> and <noinclude> on a page
+!! input
+Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
+!! result
+<p>Foozar
+</p>
+!! end
+
+!! test
+<onlyinclude> on a page
+!! input
+<onlyinclude>Foo</onlyinclude>bar
+!! result
+<p>Foobar
+</p>
+!! end
+
+!! article
+Template:Includeonly section
+!! text
+<includeonly>
+==Includeonly section==
+</includeonly>
+==Section T-1==
+!!endarticle
+
+!! test
+Bug 6563: Edit link generation for section shown by <includeonly>
+!! input
+{{includeonly section}}
+!! result
+<h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline" id="Includeonly_section">Includeonly section</span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline" id="Section_T-1">Section T-1</span></h2>
+
+!! end
+
+# Uses same input as the contents of [[Template:Includeonly section]]
+!! test
+Bug 6563: Section extraction for section shown by <includeonly>
+!! options
+section=T-2
+!! input
+<includeonly>
+==Includeonly section==
+</includeonly>
+==Section T-2==
+!! result
+==Section T-2==
+!! end
+
+!! test
+Bug 6563: Edit link generation for section suppressed by <includeonly>
+!! input
+<includeonly>
+==Includeonly section==
+</includeonly>
+==Section 1==
+!! result
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a>]</span> <span class="mw-headline" id="Section_1">Section 1</span></h2>
+
+!! end
+
+!! test
+Bug 6563: Section extraction for section suppressed by <includeonly>
+!! options
+section=1
+!! input
+<includeonly>
+==Includeonly section==
+</includeonly>
+==Section 1==
+!! result
+==Section 1==
+!! end
+
+###
+### <includeonly> and <noinclude> in attributes
+###
+!!test
+1. includeonly in html attr key
+!!input
+<span <noinclude>id</noinclude><includeonly>about</includeonly>="foo">bar</span>
+!!result
+<p><span id="foo">bar</span>
+</p>
+!!end
+
+!!test
+2. includeonly in html attr value
+!!input
+<span id="<noinclude>v1</noinclude><includeonly>v2</includeonly>">bar</span>
+<span id=<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>>bar</span>
+!!result
+<p><span id="v1">bar</span>
+<span id="v1">bar</span>
+</p>
+!!end
+
+!!test
+3. includeonly in part of an attr value
+!!input
+<span style="color:<noinclude>red</noinclude><includeonly>blue</includeonly>;">bar</span>
+!!result
+<p><span style="color:red;">bar</span>
+</p>
+!!end
+
+###
+### Testing parsing of templates where a template arg
+### has the same name as the template itself.
+###
+
+!! article
+Template:quote
+!! text
+{{{quote|{{{1}}}}}}
+!! endarticle
+
+!!test
+Templates: Template Name/Arg clash: 1. Use of positional param
+!!input
+{{quote|foo}}
+!!result
+<p>foo
+</p>
+!!end
+
+!!test
+Templates: Template Name/Arg clash: 2. Use of named param
+!!input
+{{quote|quote=foo}}
+!!result
+<p>foo
+</p>
+!!end
+
+!!test
+Templates: Template Name/Arg clash: 3. Use of named param with empty input
+!!input
+{{quote|quote}}
+!!result
+<p>quote
+</p>
+!!end
+
+###
+### Parsoid-centric tests to stress Parsoid's ability to RT them unchanged
+###
+
+!!test
+Templates: 1. Simple use
+!!input
+{{echo|Foo}}
+!!result
+<p>Foo
+</p>
+!!end
+
+!!test
+Templates: 2. Inside a block tag
+!!input
+<div>{{echo|Foo}}</div>
+!!result
+<div>Foo</div>
+
+!!end
+
+!!test
+Templates: P-wrapping: 1a. Templates on consecutive lines
+!!input
+{{echo|Foo}}
+{{echo|bar}}
+!!result
+<p>Foo
+bar
+</p>
+!!end
+
+!!test
+Templates: P-wrapping: 1b. Templates on consecutive lines
+!!input
+Foo
+
+{{echo|bar}}
+{{echo|baz}}
+!!result
+<p>Foo
+</p><p>bar
+baz
+</p>
+!!end
+
+!!test
+Templates: P-wrapping: 1c. Templates on consecutive lines
+!!input
+{{echo|Foo}}
+{{echo|bar}} <div>baz</div>
+!!result
+<p>Foo
+</p>
+bar <div>baz</div>
+
+!!end
+
+!!test
+Templates: Inline Text: 1. Multiple tmeplate uses
+!!input
+{{echo|Foo}}bar{{echo|baz}}
+!!result
+<p>Foobarbaz
+</p>
+!!end
+
+!!test
+Templates: Inline Text: 2. Back-to-back template uses
+!!input
+{{echo|Foo}}{{echo|bar}}
+!!result
+<p>Foobar
+</p>
+!!end
+
+!!test
+Templates: Block Tags: 1. Multiple template uses
+!!input
+{{echo|<div>Foo</div>}}<div>bar</div>{{echo|<div>baz</div>}}
+!!result
+<div>Foo</div><div>bar</div><div>baz</div>
+
+!!end
+
+!!test
+Templates: Block Tags: 2. Back-to-back template uses
+!!input
+{{echo|<div>Foo</div>}}{{echo|<div>bar</div>}}
+!!result
+<div>Foo</div><div>bar</div>
+
+!!end
+
+!!test
+Templates: Links: 1. Simple example
+!!input
+{{echo|[[Foo|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>
+!!end
+
+!!test
+Templates: Links: 2. Generation of link href
+!!input
+[[{{echo|Foo}}|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>
+!!end
+
+!!test
+Templates: Links: 3. Generation of part of a link href
+!!input
+[[Fo{{echo|o}}|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>
+!!end
+
+!!test
+Templates: Links: 4. Multiple templates generating link href
+!!input
+[[{{echo|F}}{{echo|o}}ob{{echo|ar}}]]
+!!result
+<p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
+</p>
+!!end
+
+!!test
+Templates: Links: 5. Generation of link text
+!!input
+[[Foo|{{echo|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>
+!!end
+
+!!test
+Templates: Links: 5. Nested templates (only outermost template should be marked)
+!!input
+{{echo|[[{{echo|Foo}}|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>
+!!end
+
+!!test
+Templates: HTML Tag: 1. Generation of HTML attr. key
+!!input
+<div {{echo|style}}="color:red;">foo</div>
+!!result
+<div style="color:red;">foo</div>
+
+!!end
+
+!!test
+Templates: HTML Tag: 2. Generation of HTML attr. value
+!!input
+<div style={{echo|'color:red;'}}>foo</div>
+!!result
+<div style="color:red;">foo</div>
+
+!!end
+
+!!test
+Templates: HTML Tag: 3. Generation of HTML attr key and value
+!!input
+<div {{echo|style}}={{echo|'color:red;'}}>foo</div>
+!!result
+<div style="color:red;">foo</div>
+
+!!end
+
+!!test
+Templates: HTML Tag: 4. Generation of starting piece of HTML attr value
+!!input
+<div title="{{echo|This is a long title}} with just one piece templated">foo</div>
+!!result
+<div title="This is a long title with just one piece templated">foo</div>
+
+!!end
+
+!!test
+Templates: HTML Tag: 5. Generation of middle piece of HTML attr value
+!!input
+<div title="This is a long title with just {{echo|one piece}} templated">foo</div>
+!!result
+<div title="This is a long title with just one piece templated">foo</div>
+
+!!end
+
+!!test
+Templates: HTML Tag: 6. Generation of end piece of HTML attr value
+!!input
+<div title="This is a long title with just one piece {{echo|templated}}">foo</div>
+!!result
+<div title="This is a long title with just one piece templated">foo</div>
+
+!!end
+
+!!test
+Templates: Tables: 1. Generating start of a HTML table
+!!input
+{{echo|<table><tr><td>foo</td>}}</tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
+
+!!end
+
+!!test
+Templates: Tables: 2a. Generating middle of a HTML table
+!!input
+<table><tr>{{echo|<td>foo</td>}}</tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
+
+!!end
+
+!!test
+Templates: Tables: 2b. Generating middle of a HTML table
+!!input
+<table>{{echo|<tr><td>foo</td></tr>}}</table>
+!!result
+<table><tr><td>foo</td></tr></table>
+
+!!end
 
-!! test
-<includeonly> and <noinclude> being included
-!! input
-{{Includes}}
-!! result
-<p>Foobar
-</p>
-!! end
+!!test
+Templates: Tables: 3. Generating end of a HTML table
+!!input
+<table><tr>{{echo|<td>foo</td></tr></table>}}
+!!result
+<table><tr><td>foo</td></tr></table>
 
-!! article
-Template:Includes2
-!! text
-<onlyinclude>Foo</onlyinclude>bar
-!! endarticle
+!!end
 
-!! test
-<onlyinclude> being included
-!! input
-{{Includes2}}
-!! result
-<p>Foo
-</p>
-!! end
+!!test
+Templates: Tables: 4a. Generating a single tag of a HTML table
+!!input
+{{echo|<table>}}<tr><td>foo</td></tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
 
+!!end
 
-!! article
-Template:Includes3
-!! text
-<onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
-!! endarticle
+!!test
+Templates: Tables: 4b. Generating a single tag of a HTML table
+!!input
+<table>{{echo|<tr>}}<td>foo</td></tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
 
-!! test
-<onlyinclude> and <includeonly> being included
-!! input
-{{Includes3}}
-!! result
-<p>Foo
-</p>
-!! end
+!!end
 
-!! test
-<includeonly> and <noinclude> on a page
-!! input
-Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
-!! result
-<p>Foozar
-</p>
-!! end
+!!test
+Templates: Tables: 4c. Generating a single tag of a HTML table
+!!input
+<table><tr>{{echo|<td>}}foo</td></tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
 
-!! test
-<onlyinclude> on a page
-!! input
-<onlyinclude>Foo</onlyinclude>bar
-!! result
-<p>Foobar
-</p>
-!! end
+!!end
 
-!! article
-Template:Includeonly section
-!! text
-<includeonly>
-==Includeonly section==
-</includeonly>
-==Section T-1==
-!!endarticle
+!!test
+Templates: Tables: 4d. Generating a single tag of a HTML table
+!!input
+<table><tr><td>foo{{echo|</td>}}</tr></table>
+!!result
+<table><tr><td>foo</td></tr></table>
 
-!! test
-Bug 6563: Edit link generation for section shown by <includeonly>
-!! input
-{{includeonly section}}
-!! result
-<h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline" id="Includeonly_section">Includeonly section</span></h2>
-<h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline" id="Section_T-1">Section T-1</span></h2>
+!!end
 
-!! end
+!!test
+Templates: Tables: 4e. Generating a single tag of a HTML table
+!!input
+<table><tr><td>foo</td>{{echo|</tr>}}</table>
+!!result
+<table><tr><td>foo</td></tr></table>
 
-# Uses same input as the contents of [[Template:Includeonly section]]
-!! test
-Bug 6563: Section extraction for section shown by <includeonly>
-!! options
-section=T-2
-!! input
-<includeonly>
-==Includeonly section==
-</includeonly>
-==Section T-2==
-!! result
-==Section T-2==
-!! end
+!!end
 
-!! test
-Bug 6563: Edit link generation for section suppressed by <includeonly>
-!! input
-<includeonly>
-==Includeonly section==
-</includeonly>
-==Section 1==
-!! result
-<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a>]</span> <span class="mw-headline" id="Section_1">Section 1</span></h2>
+!!test
+Templates: Tables: 4f. Generating a single tag of a HTML table
+!!input
+<table><tr><td>foo</td></tr>{{echo|</table>}}
+!!result
+<table><tr><td>foo</td></tr></table>
 
-!! end
+!!end
 
-!! test
-Bug 6563: Section extraction for section suppressed by <includeonly>
-!! options
-section=1
-!! input
-<includeonly>
-==Includeonly section==
-</includeonly>
-==Section 1==
-!! result
-==Section 1==
-!! end
+!!test
+Parser Functions: 1. Simple example
+!!input
+{{uc:foo}}
+!!result
+<p>FOO
+</p>
+!!end
+
+!!test
+Parser Functions: 2. Nested use (only outermost should be marked up)
+!!input
+{{uc:{{lc:FOO}}}}
+!!result
+<p>FOO
+</p>
+!!end
 
 ###
 ### Pre-save transform tests
@@ -4993,7 +5673,7 @@ Custom class
 </p>
 !! end
 
-!! article 
+!! article
 File:Barfoo.jpg
 !! text
 #REDIRECT [[File:Barfoo.jpg]]
@@ -5108,6 +5788,48 @@ PAGESINCATEGORY invalid title fatal (r33546 fix)
 </p>
 !! end
 
+!! test
+Category with different sort key
+!! options
+cat
+!! input
+[[Category:MediaWiki User's Guide|Foo]]
+!! result
+<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
+!! end
+
+!! test
+Category with identical sort key
+!! options
+cat
+!! input
+[[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
+!! result
+<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
+!! end
+
+!! test
+Category with empty sort key
+!! options
+cat
+pst
+!! input
+[[Category:MediaWiki User's Guide|]]
+!! result
+[[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
+!! end
+
+!! test
+Category with empty sort key and parentheses
+!! options
+cat
+pst
+!! input
+[[Category:Foo (bar)|]]
+!! result
+[[Category:Foo (bar)|Foo]]
+!! end
+
 ###
 ### Inter-language links
 ###
@@ -5123,6 +5845,19 @@ ill
 es:Alimento fr:Nourriture zh:食品
 !! end
 
+!! test
+Duplicate interlanguage links (bug 24502)
+!! options
+ill
+!! input
+[[es:1]]
+[[es:2]]
+[[fr:1]]
+[[fr:2]]
+!! result
+es:1 fr:1
+!! end
+
 ###
 ### Sections
 ###
@@ -5196,7 +5931,7 @@ Some text
 # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
 !! test
 Handling of sections up to level 6 and beyond
-!! input 
+!! input
 = Level 1 Heading=
 == Level 2 Heading==
 === Level 3 Heading===
@@ -7020,7 +7755,7 @@ Special page transclusion
 !! input
 {{Special:Prefixindex/Xyzzyx}}
 !! result
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
@@ -7031,8 +7766,8 @@ Special page transclusion twice (bug 5021)
 {{Special:Prefixindex/Xyzzyx}}
 {{Special:Prefixindex/Xyzzyx}}
 !! result
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
@@ -7405,7 +8140,7 @@ section=2
 !! end
 
 
-# Formerly testing for bug 2587, now resolved by the use of unmarked sections 
+# Formerly testing for bug 2587, now resolved by the use of unmarked sections
 # instead of respecting commented sections
 !! test
 Section extraction prefixed by comment (section 1)
@@ -7430,7 +8165,7 @@ section=2
 !!end
 
 
-# Formerly testing for bug 2607, now resolved by the use of unmarked sections 
+# Formerly testing for bug 2607, now resolved by the use of unmarked sections
 # instead of respecting HTML-style headings
 !! test
 Section extraction, mixed wiki and html (section 1)
@@ -8213,7 +8948,7 @@ HTML Hex character encoding mixed case
 
 !! test
 __FORCETOC__ override
-!! input 
+!! input
 __NEWSECTIONLINK__
 __FORCETOC__
 !! result
@@ -8267,7 +9002,7 @@ RFC RFC 1234
 !! end
 
 !! test
-Double RFC with a wiki link 
+Double RFC with a wiki link
 !! input
 RFC [[RFC 1234]]
 !! result
@@ -8987,7 +9722,7 @@ Fridrih IV je car.
 
 !! test
 Unclosed language converter markup "-{"
-!! options 
+!! options
 language=sr
 !! input
 -{T|hello
@@ -9002,12 +9737,12 @@ Don't convert raw rule "-{R|=&gt;}-" to "=>"
 language=sr
 !! input
 -{R|=&gt;}-
-!! result 
+!! result
 <p>=&gt;
 </p>
 !!end
 
-!!article 
+!!article
 Template:Bullet
 !!text
 * Bar
@@ -9757,7 +10492,7 @@ Screen
 <p>this is not the the title
 </p>
 !! end
+
 !! test
 preload: check <noinclude> and <includeonly>
 !! options
@@ -9767,7 +10502,7 @@ Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
 !! result
 Hello kind world.
 !! end
+
 !! test
 preload: check <onlyinclude>
 !! options
@@ -9799,7 +10534,7 @@ preload
 !! end
 
 !! test
-Play a bit with r67090 and bug 3158 
+Play a bit with r67090 and bug 3158
 !! options
 disabled
 !! input
@@ -10008,7 +10743,7 @@ __TOC__
 !! end
 
 !! test
-Bug 26375: TOC with bold 
+Bug 26375: TOC with bold
 !! options
 title=[[Main Page]]
 !! input
@@ -10117,6 +10852,37 @@ __TOC__
 
 !! end
 
+!! test
+span tags with directionality in TOC
+!! input
+__TOC__
+== <span dir="ltr">C++</span> ==
+
+== <span dir="rtl">זבנג!</span> ==
+
+== <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> ==
+
+== <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==
+
+== <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
+!! result
+<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#C.2B.2B"><span class="tocnumber">1</span> <span class="toctext"><span dir="ltr">C++</span></span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#.D7.96.D7.91.D7.A0.D7.92.21"><span class="tocnumber">2</span> <span class="toctext"><span dir="rtl">זבנג!</span></span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">3</span> <span class="toctext"><span>The attributes on these span tags must be deleted from the TOC</span></span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">4</span> <span class="toctext"><span>All attributes on these span tags must be deleted from the TOC</span></span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="#Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">5</span> <span class="toctext"><span dir="ltr">Attributes after dir on these span tags must be deleted from the TOC</span></span></a></li>
+</ul>
+</td></tr></table>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: C++">edit</a>]</span> <span class="mw-headline" id="C.2B.2B"> <span dir="ltr">C++</span> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: זבנג!">edit</a>]</span> <span class="mw-headline" id=".D7.96.D7.91.D7.A0.D7.92.21"> <span dir="rtl">זבנג!</span> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: The attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"> <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: All attributes on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"> <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> </span></h2>
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Attributes after dir on these span tags must be deleted from the TOC">edit</a>]</span> <span class="mw-headline" id="Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"> <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> </span></h2>
+
+!! end
+
 !! article
 MediaWiki:Bug32057
 !! text
@@ -10328,6 +11094,74 @@ abc
 </p>
 !! end
 
+!!test
+Bug 34939 - Case insensitive link parsing ([HttP://])
+!! input
+[HttP://MediaWiki.Org/]
+!! result
+<p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
+</p>
+!! end
+
+!!test
+Bug 34939 - Case insensitive link parsing ([HttP:// title])
+!! input
+[HttP://MediaWiki.Org/ MediaWiki]
+!! result
+<p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
+</p>
+!! end
+
+!!test
+Bug 34939 - Case insensitive link parsing (HttP://)
+!! input
+HttP://MediaWiki.Org/
+!! result
+<p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
+</p>
+!! end
+
+###
+### Parsoids-specific tests
+### Parsoid-PHP parser incompatibilities
+###
+
+!!test
+1. includeonly around the entire attribute
+!!options
+disabled
+!!input
+<span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
+!!result
+<p><span>bar</span>
+</p>
+!!end
+
+!!test
+2. template around the entire attribute
+!!options
+disabled
+!!input
+<span {{echo|id="v1"}}>bar</span>
+!!result
+<p><span>bar</span>
+</p>
+!!end
+
+!!test
+3. SOL-sensitive wikitext tokens as template-args
+!!options
+disabled
+!!input
+{{echo|*a}}
+{{echo|#a}}
+{{echo|:a}}
+!!result
+<p>*a
+#a
+:a
+</p>
+!!end
 
 TODO:
 more images
index d930ac5..4df9a61 100644 (file)
@@ -27,7 +27,7 @@
 $otions = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled' );
 $optionsWithArgs = array( 'regex', 'filter', 'seed', 'setversion' );
 
-require_once( dirname( __FILE__ ) . '/../maintenance/commandLine.inc' );
+require_once( __DIR__ . '/../maintenance/commandLine.inc' );
 
 if ( isset( $options['help'] ) ) {
        echo <<<ENDS
index 6dd8ea3..3034601 100644 (file)
@@ -4,39 +4,26 @@
  * Base class that store and restore the Language objects
  */
 abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
-       private static $oldLang;
-       private static $oldContLang;
-
-       public function setUp() {
-               global $wgLanguageCode, $wgLang, $wgContLang;
 
+       protected function setUp() {
+               global $wgLanguageCode, $wgContLang;
                parent::setUp();
 
-               self::$oldLang = $wgLang;
-               self::$oldContLang = $wgContLang;
-
-               if( $wgLanguageCode != $wgContLang->getCode() ) {
+               if ( $wgLanguageCode != $wgContLang->getCode() ) {
                        throw new MWException("Error in MediaWikiLangTestCase::setUp(): " .
                                "\$wgLanguageCode ('$wgLanguageCode') is different from " .
                                "\$wgContLang->getCode() (" . $wgContLang->getCode() . ")" );
                }
 
-               $wgLanguageCode = 'en'; # For mainpage to be 'Main Page'
+               $langCode = 'en'; # For mainpage to be 'Main Page'
+               $langObj = Language::factory( $langCode );
 
-               $wgContLang = $wgLang = Language::factory( $wgLanguageCode );
-               MessageCache::singleton()->disable();
-
-       }
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => $langCode,
+                       'wgLang' => $langObj,
+                       'wgContLang' => $langObj,
+               ) );
 
-       public function tearDown() {
-               global $wgContLang, $wgLang, $wgLanguageCode;
-               $wgLang = self::$oldLang;
-
-               $wgContLang = self::$oldContLang;
-               $wgLanguageCode = $wgContLang->getCode();
-               self::$oldContLang = self::$oldLang = null;
-
-               parent::tearDown();
+               MessageCache::singleton()->disable();
        }
-
 }
index ea385ad..fca3251 100644 (file)
@@ -37,7 +37,7 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                # PHPUnit uses stream_resolve_include_path() internally
                # See bug 32022
                set_include_path(
-                       dirname( __FILE__ )
+                       __DIR__
                        .PATH_SEPARATOR
                        . get_include_path()
                );
index c873c51..ff13702 100644 (file)
@@ -5,6 +5,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public $regex = '';
        public $runDisabled = false;
 
+       /**
+        * @var Array of TestUser
+        */
+       public static $users;
+
        /**
         * @var DatabaseBase
         */
@@ -24,6 +29,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         */
        private $tmpfiles = array();
 
+       /**
+        * Holds original values of MediaWiki configuration settings
+        * to be restored in tearDown().
+        * See also setMwGlobal().
+        * @var array
+        */
+       private $mwGlobals = array();
 
        /**
         * Table name prefixes. Oracle likes it shorter.
@@ -114,8 +126,43 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return $fname;
        }
 
+       /**
+        * setUp and tearDown should (where significant)
+        * happen in reverse order.
+        */
+       protected function setUp() {
+               parent::setUp();
+
+               /*
+               //@todo: global variables to restore for *every* test
+               array(
+                       'wgLang',
+                       'wgContLang',
+                       'wgLanguageCode',
+                       'wgUser',
+                       'wgTitle',
+               );
+               */
+
+               // Cleaning up temporary files
+               foreach ( $this->tmpfiles as $fname ) {
+                       if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
+                               unlink( $fname );
+                       } elseif ( is_dir( $fname ) ) {
+                               wfRecursiveRemoveDir( $fname );
+                       }
+               }
+
+               // Clean up open transactions
+               if ( $this->needsDB() && $this->db ) {
+                       while( $this->db->trxLevel() > 0 ) {
+                               $this->db->rollback();
+                       }
+               }
+       }
+
        protected function tearDown() {
-               // Cleaning up temoporary files
+               // Cleaning up temporary files
                foreach ( $this->tmpfiles as $fname ) {
                        if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
                                unlink( $fname );
@@ -124,9 +171,95 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        }
                }
 
+               // Clean up open transactions
+               if ( $this->needsDB() && $this->db ) {
+                       while( $this->db->trxLevel() > 0 ) {
+                               $this->db->rollback();
+                       }
+               }
+
+               // Restore mw globals
+               foreach ( $this->mwGlobals as $key => $value ) {
+                       $GLOBALS[$key] = $value;
+               }
+               $this->mwGlobals = array();
+
                parent::tearDown();
        }
 
+       /**
+        * Individual test functions may override globals (either directly or through this
+        * setMwGlobals() function), however one must call this method at least once for
+        * each key within the setUp().
+        * That way the key is added to the array of globals that will be reset afterwards
+        * in the tearDown(). And, equally important, that way all other tests are executed
+        * with the same settings (instead of using the unreliable local settings for most
+        * tests and fix it only for some tests).
+        *
+        * @example
+        * <code>
+        *     protected function setUp() {
+        *         $this->setMwGlobals( 'wgRestrictStuff', true );
+        *     }
+        *
+        *     function testFoo() {}
+        *
+        *     function testBar() {}
+        *         $this->assertTrue( self::getX()->doStuff() );
+        *
+        *         $this->setMwGlobals( 'wgRestrictStuff', false );
+        *         $this->assertTrue( self::getX()->doStuff() );
+        *     }
+        *
+        *     function testQuux() {}
+        * </code>
+        *
+        * @param array|string $pairs Key to the global variable, or an array
+        *  of key/value pairs.
+        * @param mixed $value Value to set the global to (ignored
+        *  if an array is given as first argument).
+        */
+       protected function setMwGlobals( $pairs, $value = null ) {
+               if ( !is_array( $pairs ) ) {
+                       $key = $pairs;
+                       $this->mwGlobals[$key] = $GLOBALS[$key];
+                       $GLOBALS[$key] = $value;
+               } else {
+                       foreach ( $pairs as $key => $value ) {
+                               $this->mwGlobals[$key] = $GLOBALS[$key];
+                               $GLOBALS[$key] = $value;
+                       }
+               }
+       }
+
+       /**
+        * Merges the given values into a MW global array variable.
+        * Useful for setting some entries in a configuration array, instead of
+        * setting the entire array.
+        *
+        * @param String $name The name of the global, as in wgFooBar
+        * @param Array $values The array containing the entries to set in that global
+        *
+        * @throws MWException if the designated global is not an array.
+        */
+       protected function mergeMwGlobalArrayValue( $name, $values ) {
+               if ( !isset( $GLOBALS[$name] ) ) {
+                       $merged = $values;
+               } else {
+                       if ( !is_array( $GLOBALS[$name] ) ) {
+                               throw new MWException( "MW global $name is not an array." );
+                       }
+
+                       //NOTE: do not use array_merge, it screws up for numeric keys.
+                       $merged = $GLOBALS[$name];
+                       foreach ( $values as $k => $v ) {
+                               $merged[$k] = $v;
+                       }
+               }
+
+               $this->setMwGlobals( $name, $merged );
+       }
+
        function dbPrefix() {
                return $this->db->getType() == 'oracle' ? self::ORA_DB_PREFIX : self::DB_PREFIX;
        }
@@ -200,11 +333,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                //Make 1 page with 1 revision
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                if ( !$page->getId() == 0 ) {
-                       $page->doEdit( 'UTContent',
-                                                       'UTPageSummary',
-                                                       EDIT_NEW,
-                                                       false,
-                                                       User::newFromName( 'UTSysop' ) );
+                       $page->doEditContent(
+                               new WikitextContent( 'UTContent' ),
+                               'UTPageSummary',
+                               EDIT_NEW,
+                               false,
+                               User::newFromName( 'UTSysop' ) );
                }
        }
 
@@ -356,7 +490,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *         or list the tables under testing in $this->tablesUsed, or override the
         *         needsDB() method.
         */
-       protected function assertSelect( $table, $fields, $condition, Array $expectedRows ) {
+       protected function assertSelect( $table, $fields, $condition, array $expectedRows ) {
                if ( !$this->needsDB() ) {
                        throw new MWException( 'When testing database state, the test cases\'s needDB()' .
                                ' method should return true. Use @group Database or $this->tablesUsed.');
@@ -434,6 +568,25 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                );
        }
 
+       /**
+        * Put each HTML element on its own line and then equals() the results
+        *
+        * Use for nicely formatting of PHPUnit diff output when comparing very
+        * simple HTML
+        *
+        * @since 1.20
+        *
+        * @param String $expected HTML on oneline
+        * @param String $actual HTML on oneline
+        * @param String $msg Optional message
+        */
+       protected function assertHTMLEquals( $expected, $actual, $msg='' ) {
+               $expected = str_replace( '>', ">\n", $expected );
+               $actual   = str_replace( '>', ">\n", $actual   );
+
+               $this->assertEquals( $expected, $actual, $msg );
+       }
+
        /**
         * Does an associative sort that works for objects.
         *
@@ -471,4 +624,46 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       /**
+        * Asserts that the provided variable is of the specified
+        * internal type or equals the $value argument. This is useful
+        * for testing return types of functions that return a certain
+        * type or *value* when not set or on error.
+        *
+        * @since 1.20
+        *
+        * @param string $type
+        * @param mixed $actual
+        * @param mixed $value
+        * @param string $message
+        */
+       protected function assertTypeOrValue( $type, $actual, $value = false, $message = '' ) {
+               if ( $actual === $value ) {
+                       $this->assertTrue( true, $message );
+               }
+               else {
+                       $this->assertType( $type, $actual, $message );
+               }
+       }
+
+       /**
+        * Asserts the type of the provided value. This can be either
+        * in internal type such as boolean or integer, or a class or
+        * interface the value extends or implements.
+        *
+        * @since 1.20
+        *
+        * @param string $type
+        * @param mixed $actual
+        * @param string $message
+        */
+       protected function assertType( $type, $actual, $message = '' ) {
+               if ( class_exists( $type ) || interface_exists( $type ) ) {
+                       $this->assertInstanceOf( $type, $actual, $message );
+               }
+               else {
+                       $this->assertInternalType( $type, $actual, $message );
+               }
+       }
+
 }
index 08eb50f..933767e 100644 (file)
@@ -11,7 +11,7 @@ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
 You are running these tests directly from phpunit. You may not have all globals correctly set.
 Running phpunit.php instead is recommended.
 EOF;
-       require_once ( dirname( __FILE__ ) . "/phpunit.php" );
+       require_once ( __DIR__ . "/phpunit.php" );
 }
 
 // Output a notice when running with older versions of PHPUnit
index f99b484..4013734 100644 (file)
Binary files a/tests/phpunit/data/media/exif-gps.jpg and b/tests/phpunit/data/media/exif-gps.jpg differ
diff --git a/tests/phpunit/data/xmp/gps.result.php b/tests/phpunit/data/xmp/gps.result.php
new file mode 100644 (file)
index 0000000..2d1243d
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+$result = array( 'xmp-exif' =>
+       array(
+               'GPSAltitude' => -3.14159265301,
+               'GPSDOP' => '5/1',
+               'GPSLatitude' => 88.51805555,
+               'GPSLongitude' => -21.12356945,
+               'GPSVersionID' => '2.2.0.0'
+        )
+);
+
diff --git a/tests/phpunit/data/xmp/gps.xmp b/tests/phpunit/data/xmp/gps.xmp
new file mode 100644 (file)
index 0000000..e52d2c8
--- /dev/null
@@ -0,0 +1,17 @@
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.30'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+
+ <rdf:Description rdf:about=''
+  xmlns:exif='http://ns.adobe.com/exif/1.0/'>
+  <exif:GPSAltitude>103993/33102</exif:GPSAltitude>
+  <exif:GPSAltitudeRef>1</exif:GPSAltitudeRef>
+  <exif:GPSDOP>5/1</exif:GPSDOP>
+  <exif:GPSLatitude>88,31.083333N</exif:GPSLatitude>
+  <exif:GPSLongitude>21,7.414167W</exif:GPSLongitude>
+  <exif:GPSVersionID>2.2.0.0</exif:GPSVersionID>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+<?xpacket end='w'?>
index 17cee6e..967ffa1 100644 (file)
@@ -16,14 +16,14 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
                $wgContLang = Language::factory( 'es' );
 
                $wgLang = Language::factory( 'fr' );
-               $status = $page->doEdit( '{{:{{int:history}}}}', 'Test code for bug 14404', 0, false, $user );
+               $status = $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', 0, false, $user );
                $templates1 = $title->getTemplateLinksFrom();
 
                $wgLang = Language::factory( 'de' );
                $page->mPreparedEdit = false; // In order to force the rerendering of the same wikitext
 
                // We need an edit, a purge is not enough to regenerate the tables
-               $status = $page->doEdit( '{{:{{int:history}}}}', 'Test code for bug 14404', EDIT_UPDATE, false, $user );
+               $status = $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', EDIT_UPDATE, false, $user );
                $templates2 = $title->getTemplateLinksFrom();
 
                $this->assertEquals( $templates1, $templates2 );
index 846d2b8..46aaa4b 100644 (file)
@@ -2,19 +2,25 @@
 
 class ArticleTest extends MediaWikiTestCase {
 
-       private $title; // holds a Title object
-       private $article; // holds an article
+       /**
+        * @var Title
+        */
+       private $title;
+       /**
+        * @var Article
+        */
+       private $article;
 
        /** creates a title object and its article object */
-       function setUp() {
-               $this->title   = Title::makeTitle( NS_MAIN, 'SomePage' );
+       protected function setUp() {
+               $this->title = Title::makeTitle( NS_MAIN, 'SomePage' );
                $this->article = new Article( $this->title );
 
        }
 
        /** cleanup title object and its article object */
-       function tearDown() {
-               $this->title   = null;
+       protected function tearDown() {
+               $this->title = null;
                $this->article = null;
 
        }
@@ -54,6 +60,9 @@ class ArticleTest extends MediaWikiTestCase {
         * Checks for the existence of the backwards compatibility static functions (forwarders to WikiPage class)
         */
        function testStaticFunctions() {
+               $this->hideDeprecated( 'Article::getAutosummary' );
+               $this->hideDeprecated( 'WikiPage::getAutosummary' );
+
                $this->assertEquals( WikiPage::selectFields(), Article::selectFields(),
                        "Article static functions" );
                $this->assertEquals( true, is_callable( "Article::onArticleCreate" ),
index 0c95b8d..5ac05ba 100644 (file)
@@ -11,17 +11,15 @@ class BlockTest extends MediaWikiLangTestCase {
        /* variable used to save up the blockID we insert in this test suite */
        private $blockId;
 
-       function setUp() {
-               global $wgContLang;
+       protected function setUp() {
                parent::setUp();
-               $wgContLang = Language::factory( 'en' );
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
        }
 
        function addDBData() {
-               //$this->dumpBlocks();
 
                $user = User::newFromName( 'UTBlockee' );
-               if( $user->getID() == 0 ) {
+               if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
                        $user->setPassword( 'UTBlockeePassword' );
 
@@ -45,7 +43,7 @@ class BlockTest extends MediaWikiLangTestCase {
                // its value might change depending on the order the tests are run.
                // ApiBlockTest insert its own blocks!
                $newBlockId = $this->block->getId();
-               if ($newBlockId) {
+               if ( $newBlockId ) {
                        $this->blockId = $newBlockId;
                } else {
                        throw new MWException( "Failed to insert block for BlockTest; old leftover block remaining?" );
@@ -88,7 +86,7 @@ class BlockTest extends MediaWikiLangTestCase {
         *
         * This stopped working with r84475 and friends: regression being fixed for bug 29116.
         *
-        * @dataProvider dataBug29116
+        * @dataProvider provideBug29116Data
         */
        function testBug29116LoadWithEmptyIp( $vagueTarget ) {
                $this->hideDeprecated( 'Block::load' );
@@ -108,14 +106,14 @@ class BlockTest extends MediaWikiLangTestCase {
         * because the new function didn't accept empty strings like Block::load()
         * had. Regression bug 29116.
         *
-        * @dataProvider dataBug29116
+        * @dataProvider provideBug29116Data
         */
        function testBug29116NewFromTargetWithEmptyIp( $vagueTarget ) {
                $block = Block::newFromTarget('UTBlockee', $vagueTarget);
                $this->assertTrue( $this->block->equals( $block ), "newFromTarget() returns the same block as the one that was made when given empty vagueTarget param " . var_export( $vagueTarget, true ) );
        }
 
-       function dataBug29116() {
+       public static function provideBug29116Data() {
                return array(
                        array( null ),
                        array( '' ),
index b5418dd..97fffda 100644 (file)
@@ -6,7 +6,7 @@
 
 class CdbTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                if ( !CdbReader::haveExtension() ) {
                        $this->markTestSkipped( 'Native CDB support is not available' );
                }
diff --git a/tests/phpunit/includes/ContentHandlerTest.php b/tests/phpunit/includes/ContentHandlerTest.php
new file mode 100644 (file)
index 0000000..797a3ee
--- /dev/null
@@ -0,0 +1,410 @@
+<?php
+
+/**
+ * @group ContentHandler
+ *
+ * @note: Declare that we are using the database, because otherwise we'll fail in the "databaseless" test run.
+ * This is because the LinkHolderArray used by the parser needs database access.
+ *
+ * @group Database
+ */
+class ContentHandlerTest extends MediaWikiTestCase {
+
+       public function setup() {
+               parent::setup();
+
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               $wgExtraNamespaces[ 12312 ] = 'Dummy';
+               $wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
+
+               $wgNamespaceContentModels[ 12312 ] = "testing";
+               $wgContentHandlers[ "testing" ] = 'DummyContentHandlerForTesting';
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+       }
+
+       public function teardown() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               unset( $wgExtraNamespaces[ 12312 ] );
+               unset( $wgExtraNamespaces[ 12313 ] );
+
+               unset( $wgNamespaceContentModels[ 12312 ] );
+               unset( $wgContentHandlers[ "testing" ] );
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+
+               parent::teardown();
+       }
+
+       public function dataGetDefaultModelFor() {
+               //NOTE: assume that the Help namespace default to wikitext content
+               return array(
+                       array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+                       array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+                       array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetDefaultModelFor
+        */
+       public function testGetDefaultModelFor( $title, $expectedModelId ) {
+               $title = Title::newFromText( $title );
+               $this->assertEquals( $expectedModelId, ContentHandler::getDefaultModelFor( $title ) );
+       }
+       /**
+        * @dataProvider dataGetDefaultModelFor
+        */
+       public function testGetForTitle( $title, $expectedContentModel ) {
+               $title = Title::newFromText( $title );
+               $handler = ContentHandler::getForTitle( $title );
+               $this->assertEquals( $expectedContentModel, $handler->getModelID() );
+       }
+
+       public function dataGetLocalizedName() {
+               return array(
+                       array( null, null ),
+                       array( "xyzzy", null ),
+
+                       array( CONTENT_MODEL_JAVASCRIPT, '/javascript/i' ), //XXX: depends on content language
+               );
+       }
+
+       /**
+        * @dataProvider dataGetLocalizedName
+        */
+       public function testGetLocalizedName( $id, $expected ) {
+               $name = ContentHandler::getLocalizedName( $id );
+
+               if ( $expected ) {
+                       $this->assertNotNull( $name, "no name found for content model $id" );
+                       $this->assertTrue( preg_match( $expected, $name ) > 0 ,
+                                                               "content model name for #$id did not match pattern $expected" );
+               } else {
+                       $this->assertEquals( $id, $name, "localization of unknown model $id should have "
+                                                                                       . "fallen back to use the model id directly." );
+               }
+       }
+
+       public function dataGetPageLanguage() {
+               global $wgLanguageCode;
+
+               return array(
+                       array( "Main", $wgLanguageCode ),
+                       array( "Dummy:Foo", $wgLanguageCode ),
+                       array( "MediaWiki:common.js", 'en' ),
+                       array( "User:Foo/common.js", 'en' ),
+                       array( "MediaWiki:common.css", 'en' ),
+                       array( "User:Foo/common.css", 'en' ),
+                       array( "User:Foo", $wgLanguageCode ),
+
+                       array( CONTENT_MODEL_JAVASCRIPT, 'javascript' ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetPageLanguage
+        */
+       public function testGetPageLanguage( $title, $expected ) {
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
+
+               $expected = wfGetLangObj( $expected );
+
+               $handler = ContentHandler::getForTitle( $title );
+               $lang = $handler->getPageLanguage( $title );
+
+               $this->assertEquals( $expected->getCode(), $lang->getCode() );
+       }
+
+       public function testGetContentText_Null( ) {
+               global $wgContentHandlerTextFallback;
+
+               $content = null;
+
+               $wgContentHandlerTextFallback = 'fail';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( '', $text );
+
+               $wgContentHandlerTextFallback = 'serialize';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( '', $text );
+
+               $wgContentHandlerTextFallback = 'ignore';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( '', $text );
+       }
+
+       public function testGetContentText_TextContent( ) {
+               global $wgContentHandlerTextFallback;
+
+               $content = new WikitextContent( "hello world" );
+
+               $wgContentHandlerTextFallback = 'fail';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( $content->getNativeData(), $text );
+
+               $wgContentHandlerTextFallback = 'serialize';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( $content->serialize(), $text );
+
+               $wgContentHandlerTextFallback = 'ignore';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( $content->getNativeData(), $text );
+       }
+
+       public function testGetContentText_NonTextContent( ) {
+               global $wgContentHandlerTextFallback;
+
+               $content = new DummyContentForTesting( "hello world" );
+
+               $wgContentHandlerTextFallback = 'fail';
+
+               try {
+                       $text = ContentHandler::getContentText( $content );
+
+                       $this->fail( "ContentHandler::getContentText should have thrown an exception for non-text Content object" );
+               } catch (MWException $ex) {
+                       // as expected
+               }
+
+               $wgContentHandlerTextFallback = 'serialize';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertEquals( $content->serialize(), $text );
+
+               $wgContentHandlerTextFallback = 'ignore';
+               $text = ContentHandler::getContentText( $content );
+               $this->assertNull( $text );
+       }
+
+       #public static function makeContent( $text, Title $title, $modelId = null, $format = null )
+
+       public function dataMakeContent() {
+               //NOTE: assume the Help namespace defaults to wikitext content
+               return array(
+                       array( 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+                       array( 'hallo', 'MediaWiki:Test.js', null, null, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+                       array( serialize('hallo'), 'Dummy:Test', null, null, "testing", 'hallo', false ),
+
+                       array( 'hallo', 'Help:Test', null, CONTENT_FORMAT_WIKITEXT, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+                       array( 'hallo', 'MediaWiki:Test.js', null, CONTENT_FORMAT_JAVASCRIPT, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+                       array( serialize('hallo'), 'Dummy:Test', null, "testing", "testing", 'hallo', false ),
+
+                       array( 'hallo', 'Help:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+                       array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+                       array( serialize('hallo'), 'Dummy:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, serialize('hallo'), false ),
+
+                       array( 'hallo', 'Help:Test', CONTENT_MODEL_WIKITEXT, "testing", null, null, true ),
+                       array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, "testing", null, null, true ),
+                       array( 'hallo', 'Dummy:Test', CONTENT_MODEL_JAVASCRIPT, "testing", null, null, true ),
+               );
+       }
+
+       /**
+        * @dataProvider dataMakeContent
+        */
+       public function testMakeContent( $data, $title, $modelId, $format, $expectedModelId, $expectedNativeData, $shouldFail ) {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers;
+
+               $title = Title::newFromText( $title );
+
+               try {
+                       $content = ContentHandler::makeContent( $data, $title, $modelId, $format );
+
+                       if ( $shouldFail ) $this->fail( "ContentHandler::makeContent should have failed!" );
+
+                       $this->assertEquals( $expectedModelId, $content->getModel(), 'bad model id' );
+                       $this->assertEquals( $expectedNativeData, $content->getNativeData(), 'bads native data' );
+               } catch ( MWException $ex ) {
+                       if ( !$shouldFail ) $this->fail( "ContentHandler::makeContent failed unexpectedly: " . $ex->getMessage() );
+                       else $this->assertTrue( true ); // dummy, so we don't get the "test did not perform any assertions" message.
+               }
+
+       }
+
+       public function testSupportsSections() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       public function testRunLegacyHooks() {
+               Hooks::register( 'testRunLegacyHooks', __CLASS__ . '::dummyHookHandler' );
+
+               $content = new WikitextContent( 'test text' );
+               $ok = ContentHandler::runLegacyHooks( 'testRunLegacyHooks', array( 'foo', &$content, 'bar' ), false );
+
+               $this->assertTrue( $ok, "runLegacyHooks should have returned true" );
+               $this->assertEquals( "TEST TEXT", $content->getNativeData() );
+       }
+
+       public static function dummyHookHandler( $foo, &$text, $bar ) {
+               if ( $text === null || $text === false ) {
+                       return false;
+               }
+
+               $text = strtoupper( $text );
+
+               return true;
+       }
+}
+
+class DummyContentHandlerForTesting extends ContentHandler {
+
+       public function __construct( $dataModel ) {
+               parent::__construct( $dataModel, array( "testing" ) );
+       }
+
+       /**
+        * Serializes Content object of the type supported by this ContentHandler.
+        *
+        * @param Content $content the Content object to serialize
+        * @param null $format the desired serialization format
+        * @return String serialized form of the content
+        */
+       public function serializeContent( Content $content, $format = null )
+       {
+          return $content->serialize();
+       }
+
+       /**
+        * Unserializes a Content object of the type supported by this ContentHandler.
+        *
+        * @param $blob String serialized form of the content
+        * @param null $format the format used for serialization
+        * @return Content the Content object created by deserializing $blob
+        */
+       public function unserializeContent( $blob, $format = null )
+       {
+               $d = unserialize( $blob );
+               return new DummyContentForTesting( $d );
+       }
+
+       /**
+        * Creates an empty Content object of the type supported by this ContentHandler.
+        *
+        */
+       public function makeEmptyContent()
+       {
+               return new DummyContentForTesting( '' );
+       }
+}
+
+class DummyContentForTesting extends AbstractContent {
+
+       public function __construct( $data ) {
+               parent::__construct( "testing" );
+
+               $this->data = $data;
+       }
+
+       public function serialize( $format = null ) {
+               return serialize( $this->data );
+       }
+
+       /**
+        * @return String a string representing the content in a way useful for building a full text search index.
+        *         If no useful representation exists, this method returns an empty string.
+        */
+       public function getTextForSearchIndex() {
+               return '';
+       }
+
+       /**
+        * @return String the wikitext to include when another page includes this  content, or false if the content is not
+        *         includable in a wikitext page.
+        */
+       public function getWikitextForTransclusion() {
+               return false;
+       }
+
+       /**
+        * Returns a textual representation of the content suitable for use in edit summaries and log messages.
+        *
+        * @param int $maxlength maximum length of the summary text
+        * @return String the summary text
+        */
+       public function getTextForSummary( $maxlength = 250 ) {
+               return '';
+       }
+
+       /**
+        * Returns native represenation of the data. Interpretation depends on the data model used,
+        * as given by getDataModel().
+        *
+        * @return mixed the native representation of the content. Could be a string, a nested array
+        *         structure, an object, a binary blob... anything, really.
+        */
+       public function getNativeData()
+       {
+               return $this->data;
+       }
+
+       /**
+        * returns the content's nominal size in bogo-bytes.
+        *
+        * @return int
+        */
+       public function getSize() {
+               return strlen( $this->data );
+       }
+
+       /**
+        * Return a copy of this Content object. The following must be true for the object returned
+        * if $copy = $original->copy()
+        *
+        * * get_class($original) === get_class($copy)
+        * * $original->getModel() === $copy->getModel()
+        * * $original->equals( $copy )
+        *
+        * If and only if the Content object is imutable, the copy() method can and should
+        * return $this. That is,  $copy === $original may be true, but only for imutable content
+        * objects.
+        *
+        * @return Content. A copy of this object
+        */
+       public function copy() {
+               return $this;
+       }
+
+       /**
+        * Returns true if this content is countable as a "real" wiki page, provided
+        * that it's also in a countable location (e.g. a current revision in the main namespace).
+        *
+        * @param $hasLinks Bool: if it is known whether this content contains links, provide this information here,
+        *                        to avoid redundant parsing to find out.
+        * @return boolean
+        */
+       public function isCountable( $hasLinks = null ) {
+               return false;
+       }
+
+       /**
+        * @param Title $title
+        * @param null $revId
+        * @param null|ParserOptions $options
+        * @param Boolean $generateHtml whether to generate Html (default: true). If false,
+        *        the result of calling getText() on the ParserOutput object returned by
+        *        this method is undefined.
+        *
+        * @return ParserOutput
+        */
+       public function getParserOutput( Title $title, $revId = null, ParserOptions $options = NULL, $generateHtml = true ) {
+               return new ParserOutput( $this->getNativeData() );
+       }
+}
diff --git a/tests/phpunit/includes/CssContentTest.php b/tests/phpunit/includes/CssContentTest.php
new file mode 100644 (file)
index 0000000..ebbece2
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * @group ContentHandler
+ *
+ * @group Database
+ *        ^--- needed, because we do need the database to test link updates
+ */
+class CssContentTest extends JavascriptContentTest {
+
+       public function newContent( $text ) {
+               return new CssContent( $text );
+       }
+
+
+       public function dataGetParserOutput() {
+               return array(
+                       array("MediaWiki:Test.css", null, "hello <world>\n",
+                               "<pre class=\"mw-code mw-css\" dir=\"ltr\">\nhello &lt;world&gt;\n\n</pre>\n"),
+                       // @todo: more...?
+               );
+       }
+
+
+       # =================================================================================================================
+
+       public function testGetModel() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_CSS, $content->getModel() );
+       }
+
+       public function testGetContentHandler() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() );
+       }
+
+       public function dataEquals( ) {
+               return array(
+                       array( new CssContent( "hallo" ), null, false ),
+                       array( new CssContent( "hallo" ), new CssContent( "hallo" ), true ),
+                       array( new CssContent( "hallo" ), new WikitextContent( "hallo" ), false ),
+                       array( new CssContent( "hallo" ), new CssContent( "HALLO" ), false ),
+               );
+       }
+
+}
index cdb6ed2..d46e683 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 class DiffHistoryBlobTest extends MediaWikiTestCase {
-       function setUp() {
+       protected function setUp() {
                if ( !extension_loaded( 'xdiff' ) ) {
                        $this->markTestSkipped( 'The xdiff extension is not available' );
                        return;
@@ -28,7 +28,7 @@ class DiffHistoryBlobTest extends MediaWikiTestCase {
                        "Hash of " . addcslashes( $input, "\0..\37!@\@\177..\377" ) );
        }
 
-       function provideXdiffAdler32() {
+       public static function provideXdiffAdler32() {
                return array(
                        array( '', 'Empty string' ),
                        array( "\0", 'Null' ),
index 8ecfd7e..eee5f37 100644 (file)
@@ -6,14 +6,14 @@
 class EditPageTest extends MediaWikiTestCase {
 
        /**
-        * @dataProvider dataExtractSectionTitle
+        * @dataProvider provideExtractSectionTitle
         */
        function testExtractSectionTitle( $section, $title ) {
                $extracted = EditPage::extractSectionTitle( $section );
                $this->assertEquals( $title, $extracted );
        }
 
-       function dataExtractSectionTitle() {
+       public static function provideExtractSectionTitle() {
                return array(
                        array(
                                "== Test ==\n\nJust a test section.",
index 92ec734..fe6c60d 100644 (file)
@@ -4,29 +4,78 @@
  */
 
 class ExternalStoreTest extends MediaWikiTestCase {
-       private $saved_wgExternalStores;
 
-       function setUp() {
-               global $wgExternalStores;
-               $this->saved_wgExternalStores = $wgExternalStores ;
-       }
+       function testExternalFetchFromURL() {
+               $this->setMwGlobals( 'wgExternalStores', false );
 
-       function tearDown() {
-               global $wgExternalStores;
-               $wgExternalStores = $this->saved_wgExternalStores ;
-       }
+               $this->assertFalse(
+                       ExternalStore::fetchFromURL( 'FOO://cluster1/200' ),
+                       'Deny if wgExternalStores is not set to a non-empty array'
+               );
 
-       function testExternalStoreDoesNotFetchIncorrectURL() {
-               global $wgExternalStores;
-               $wgExternalStores = true;
+               $this->setMwGlobals( 'wgExternalStores', array( 'FOO' ) );
 
+               $this->assertEquals(
+                       ExternalStore::fetchFromURL( 'FOO://cluster1/200' ),
+                       'Hello',
+                       'Allow FOO://cluster1/200'
+               );
+               $this->assertEquals(
+                       ExternalStore::fetchFromURL( 'FOO://cluster1/300/0' ),
+                       'Hello',
+                       'Allow FOO://cluster1/300/0'
+               );
                # Assertions for r68900
                $this->assertFalse(
-                       ExternalStore::fetchFromURL( 'http://' ) );
+                       ExternalStore::fetchFromURL( 'ftp.example.org' ),
+                       'Deny domain ftp.example.org'
+               );
                $this->assertFalse(
-                       ExternalStore::fetchFromURL( 'ftp.wikimedia.org' ) );
+                       ExternalStore::fetchFromURL( '/example.txt' ),
+                       'Deny path /example.txt'
+               );
                $this->assertFalse(
-                       ExternalStore::fetchFromURL( '/super.txt' ) );
+                       ExternalStore::fetchFromURL( 'http://' ),
+                       'Deny protocol http://'
+               );
        }
 }
 
+class ExternalStoreFOO {
+
+       protected $data = array(
+               'cluster1' => array(
+                       '200' => 'Hello',
+                       '300' => array(
+                               'Hello', 'World',
+                       ),
+               ),
+       );
+
+       /**
+        * Fetch data from given URL
+        * @param $url String: an url of the form FOO://cluster/id or FOO://cluster/id/itemid.
+        * @return mixed
+        */
+       function fetchFromURL( $url ) {
+               // Based on ExternalStoreDB
+               $path = explode( '/', $url );
+               $cluster = $path[2];
+               $id = $path[3];
+               if ( isset( $path[4] ) ) {
+                       $itemID = $path[4];
+               } else {
+                       $itemID = false;
+               }
+
+               if ( !isset( $this->data[$cluster][$id] ) ) {
+                       return null;
+               }
+
+               if ( $itemID !== false && is_array( $this->data[$cluster][$id] ) && isset( $this->data[$cluster][$id][$itemID] ) ) {
+                       return $this->data[$cluster][$id][$itemID];
+               }
+
+               return $this->data[$cluster][$id];
+       }
+}
\ No newline at end of file
index 0413b5a..14bc0bb 100644 (file)
@@ -5,31 +5,30 @@
  */
 class ExtraParserTest extends MediaWikiTestCase {
 
-       function setUp() {
-               global $wgMemc;
-               global $wgContLang;
-               global $wgShowDBErrorBacktrace;
-               global $wgLanguageCode;
-               global $wgAlwaysUseTidy;
+       protected function setUp() {
+               parent::setUp();
 
-               $wgShowDBErrorBacktrace = true;
-               $wgLanguageCode = 'en';
-               $wgContLang = new Language( 'en' );
-               $wgMemc = new EmptyBagOStuff;
-               $wgAlwaysUseTidy = false;
+               $this->setMwGlobals( array(
+                       'wgShowDBErrorBacktrace' => true,
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' ),
+                       'wgLang' => Language::factory( 'en' ),
+                       'wgMemc' => new EmptyBagOStuff,
+                       'wgAlwaysUseTidy' => false,
+                       'wgCleanSignatures' => true,
+               ) );
                
                $this->options = new ParserOptions;
                $this->options->setTemplateCallback( array( __CLASS__, 'statelessFetchTemplate' ) );
                $this->parser = new Parser;
+
+               MagicWord::clearCache();
        }
 
        // Bug 8689 - Long numeric lines kill the parser
        function testBug8689() {
-               global $wgLang;
                global $wgUser;
                $longLine = '1.' . str_repeat( '1234567890', 100000 ) . "\n";
-
-               if ( $wgLang === null ) $wgLang = new Language;
                
                $t = Title::newFromText( 'Unit test' );
                $options = ParserOptions::newFromUser( $wgUser );
@@ -63,14 +62,8 @@ class ExtraParserTest extends MediaWikiTestCase {
         * cleanSig() makes all templates substs and removes tildes
         */
        function testCleanSig() {
-               global $wgCleanSignatures;
-               $oldCleanSignature = $wgCleanSignatures;
-               $wgCleanSignatures = true;
-
                $title = Title::newFromText( __FUNCTION__ );
                $outputText = $this->parser->cleanSig( "{{Foo}} ~~~~" );
-
-               $wgCleanSignatures = $oldCleanSignature;
                
                $this->assertEquals( "{{SUBST:Foo}} ", $outputText );
        }
@@ -80,13 +73,10 @@ class ExtraParserTest extends MediaWikiTestCase {
         */
        function testCleanSigDisabled() {
                global $wgCleanSignatures;
-               $oldCleanSignature = $wgCleanSignatures;
                $wgCleanSignatures = false;
 
                $title = Title::newFromText( __FUNCTION__ );
                $outputText = $this->parser->cleanSig( "{{Foo}} ~~~~" );
-
-               $wgCleanSignatures = $oldCleanSignature;
                
                $this->assertEquals( "{{Foo}} ~~~~", $outputText );
        }
@@ -99,7 +89,7 @@ class ExtraParserTest extends MediaWikiTestCase {
                $this->assertEquals( Parser::cleanSigInSig( $in), $out );
        }
        
-       function provideStringsForCleanSigInSig() {
+       public static function provideStringsForCleanSigInSig() {
                return array(
                        array( "{{Foo}} ~~~~", "{{Foo}} " ),
                        array( "~~~", "" ),
index c042004..35c7f8f 100644 (file)
@@ -25,7 +25,7 @@
 class FauxResponseTest extends MediaWikiTestCase {
        var $response;
 
-       function setUp() {
+       protected function setUp() {
                $this->response = new FauxResponse;
        }
 
index 746add5..4d53d06 100644 (file)
@@ -1,22 +1,32 @@
 <?php
 
 class GlobalTest extends MediaWikiTestCase {
-       function setUp() {
-               global $wgReadOnlyFile, $wgUrlProtocols;
-               $this->originals['wgReadOnlyFile'] = $wgReadOnlyFile;
-               $this->originals['wgUrlProtocols'] = $wgUrlProtocols;
-               $wgReadOnlyFile = tempnam( wfTempDir(), "mwtest_readonly" );
-               $wgUrlProtocols[] = 'file://';
-               unlink( $wgReadOnlyFile );
+       protected function setUp() {
+               parent::setUp();
+
+               $readOnlyFile = tempnam( wfTempDir(), "mwtest_readonly" );
+               unlink( $readOnlyFile );
+
+               $this->setMwGlobals( array(
+                       'wgReadOnlyFile' => $readOnlyFile,
+                       'wgUrlProtocols' => array(
+                               'http://',
+                               'https://',
+                               'mailto:',
+                               '//',
+                               'file://', # Non-default
+                       ),
+               ) );
        }
 
-       function tearDown() {
-               global $wgReadOnlyFile, $wgUrlProtocols;
+       protected function tearDown() {
+               global $wgReadOnlyFile;
+
                if ( file_exists( $wgReadOnlyFile ) ) {
                        unlink( $wgReadOnlyFile );
                }
-               $wgReadOnlyFile = $this->originals['wgReadOnlyFile'];
-               $wgUrlProtocols = $this->originals['wgUrlProtocols'];
+
+               parent::tearDown();
        }
 
        /** @dataProvider provideForWfArrayDiff2 */
@@ -27,7 +37,7 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        // @todo Provide more tests
-       public function provideForWfArrayDiff2() {
+       public static function provideForWfArrayDiff2() {
                // $a $b $expected
                return array(
                        array(
@@ -100,7 +110,7 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertTrue( $end > $start, "Time is running backwards!" );
        }
 
-       function dataArrayToCGI() {
+       public static function provideArrayToCGI() {
                return array(
                        array( array(), '' ), // empty
                        array( array( 'foo' => 'bar' ), 'foo=bar' ), // string test
@@ -108,7 +118,7 @@ class GlobalTest extends MediaWikiTestCase {
                        array( array( 'foo' => 1 ), 'foo=1' ), // number test
                        array( array( 'foo' => true ), 'foo=1' ), // true test
                        array( array( 'foo' => false ), '' ), // false test
-                       array( array( 'foo' => null ), 'foo' ), // null test
+                       array( array( 'foo' => null ), '' ), // null test
                        array( array( 'foo' => 'A&B=5+6@!"\'' ), 'foo=A%26B%3D5%2B6%40%21%22%27' ), // urlencoding test
                        array( array( 'foo' => 'bar', 'baz' => 'is', 'asdf' => 'qwerty' ), 'foo=bar&baz=is&asdf=qwerty' ), // multi-item test
                        array( array( 'foo' => array( 'bar' => 'baz' ) ), 'foo%5Bbar%5D=baz' ),
@@ -119,7 +129,7 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataArrayToCGI
+        * @dataProvider provideArrayToCGI
         */
        function testArrayToCGI( $array, $result ) {
                $this->assertEquals( $result, wfArrayToCGI( $array ) );
@@ -134,7 +144,7 @@ class GlobalTest extends MediaWikiTestCase {
                                array( 'foo' => 'bar', 'baz' => 'overridden value' ) ) );
        }
 
-       function dataCgiToArray() {
+       public static function provideCgiToArray() {
                return array(
                        array( '', array() ), // empty
                        array( 'foo=bar', array( 'foo' => 'bar' ) ), // string
@@ -150,13 +160,13 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataCgiToArray
+        * @dataProvider provideCgiToArray
         */
        function testCgiToArray( $cgi, $result ) {
                $this->assertEquals( $result, wfCgiToArray( $cgi ) );
        }
 
-       function dataCgiRoundTrip() {
+       public static function provideCgiRoundTrip() {
                return array(
                        array( '' ),
                        array( 'foo=bar' ),
@@ -170,7 +180,7 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataCgiRoundTrip
+        * @dataProvider provideCgiRoundTrip
         */
        function testCgiRoundTrip( $cgi ) {
                $this->assertEquals( $cgi, wfArrayToCGI( wfCgiToArray( $cgi ) ) );
@@ -311,7 +321,7 @@ class GlobalTest extends MediaWikiTestCase {
        
        function testDebugFunctionTest() {
        
-               global $wgDebugLogFile, $wgOut, $wgShowDebug, $wgDebugTimestamps;
+               global $wgDebugLogFile, $wgDebugTimestamps;
                
                $old_log_file = $wgDebugLogFile;
                $wgDebugLogFile = tempnam( wfTempDir(), 'mw-' );
@@ -333,33 +343,7 @@ class GlobalTest extends MediaWikiTestCase {
                wfDebug( "\00305This has böth UTF and control chars\003" );
                $this->assertEquals( " 05This has böth UTF and control chars ", file_get_contents( $wgDebugLogFile ) );
                unlink( $wgDebugLogFile );
-               
-               
-               
-               $old_wgOut = $wgOut;
-               $old_wgShowDebug = $wgShowDebug;
-               
-               $wgOut = new MockOutputPage;
-               
-               $wgShowDebug = true;
-               
-               $message = "\00305This has böth UTF and control chars\003";
-               
-               wfDebug( $message );
-               
-               if( $wgOut->message == "JAJA is a stupid error message. Anyway, here's your message: $message" ) {
-                       $this->assertTrue( true, 'MockOutputPage called, set the proper message.' );
-               }
-               else {
-                       $this->assertTrue( false, 'MockOutputPage was not called.' );
-               }
-               
-               $wgOut = $old_wgOut;
-               $wgShowDebug = $old_wgShowDebug;                
-               unlink( $wgDebugLogFile );
-               
-               
-               
+
                wfDebugMem();
                $this->assertGreaterThan( 5000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
@@ -463,7 +447,7 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /** array( shorthand, expected integer ) */
-       public function provideShorthand() {
+       public static function provideShorthand() {
                return array(
                        # Null, empty ... 
                        array(     '', -1),
index be6c99e..bed435a 100644 (file)
@@ -19,7 +19,7 @@ class wfAssembleUrl extends MediaWikiTestCase {
         *
         * @return array
         */
-       public function provideURLParts() {
+       public static function provideURLParts() {
                $schemes = array(
                        '' => array(),
                        '//' => array(
index 192689f..cb6e6c4 100644 (file)
@@ -32,10 +32,20 @@ class wfExpandUrl extends MediaWikiTestCase {
         *
         * @return array
         */
-       public function provideExpandableUrls() {
+       public static function provideExpandableUrls() {
                $modes = array( 'http', 'https' );
-               $servers = array( 'http' => 'http://example.com', 'https' => 'https://example.com', 'protocol-relative' => '//example.com' );
-               $defaultProtos = array( 'http' => PROTO_HTTP, 'https' => PROTO_HTTPS, 'protocol-relative' => PROTO_RELATIVE, 'current' => PROTO_CURRENT, 'canonical' => PROTO_CANONICAL );
+               $servers = array(
+                       'http' => 'http://example.com',
+                       'https' => 'https://example.com',
+                       'protocol-relative' => '//example.com'
+               );
+               $defaultProtos = array(
+                       'http' => PROTO_HTTP,
+                       'https' => PROTO_HTTPS,
+                       'protocol-relative' => PROTO_RELATIVE,
+                       'current' => PROTO_CURRENT,
+                       'canonical' => PROTO_CANONICAL
+               );
 
                $retval = array();
                foreach ( $modes as $mode ) {
@@ -44,13 +54,27 @@ class wfExpandUrl extends MediaWikiTestCase {
                                foreach ( $modes as $canServerMode  ) {
                                        $canServer = "$canServerMode://example2.com";
                                        foreach ( $defaultProtos as $protoDesc => $defaultProto ) {
-                                               $retval[] = array( 'http://example.com', 'http://example.com', $defaultProto, $server, $canServer, $httpsMode, "Testing fully qualified http URLs (no need to expand) (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
-                                               $retval[] = array( 'https://example.com', 'https://example.com', $defaultProto, $server, $canServer, $httpsMode, "Testing fully qualified https URLs (no need to expand) (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       'http://example.com', 'http://example.com',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing fully qualified http URLs (no need to expand) ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
+                                               $retval[] = array(
+                                                       'https://example.com', 'https://example.com',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing fully qualified https URLs (no need to expand) ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
                                                # Would be nice to support this, see fixme on wfExpandUrl()
-                                               $retval[] = array( "wiki/FooBar", 'wiki/FooBar', $defaultProto, $server, $canServer, $httpsMode, "Test non-expandable relative URLs (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       "wiki/FooBar", 'wiki/FooBar',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Test non-expandable relative URLs ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
 
                                                // Determine expected protocol
-                                               $p = $protoDesc . ':'; // default case
                                                if ( $protoDesc == 'protocol-relative' ) {
                                                        $p = '';
                                                } elseif ( $protoDesc == 'current' ) {
@@ -69,8 +93,18 @@ class wfExpandUrl extends MediaWikiTestCase {
                                                        $srv = $server;
                                                }
 
-                                               $retval[] = array( "$p//wikipedia.org", '//wikipedia.org', $defaultProto, $server, $canServer, $httpsMode, "Test protocol-relative URL (defaultProto: $protoDesc, wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
-                                               $retval[] = array( "$srv/wiki/FooBar", '/wiki/FooBar', $defaultProto, $server, $canServer, $httpsMode, "Testing expanding URL beginning with / (defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )" );
+                                               $retval[] = array(
+                                                       "$p//wikipedia.org", '//wikipedia.org',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Test protocol-relative URL ' .
+                                                       '(defaultProto: $protoDesc, wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
+                                               $retval[] = array(
+                                                       "$srv/wiki/FooBar", '/wiki/FooBar',
+                                                       $defaultProto, $server, $canServer, $httpsMode,
+                                                       "Testing expanding URL beginning with / ' .
+                                                       '(defaultProto: $protoDesc , wgServer: $server, wgCanonicalServer: $canServer, current request protocol: $mode )"
+                                               );
                                        }
                                }
                        }
index 1cf0e0f..af784bd 100644 (file)
@@ -18,7 +18,7 @@ class wfRemoveDotSegments extends MediaWikiTestCase {
         *
         * @return array
         */
-       public function providePaths() {
+       public static function providePaths() {
                return array(
                        array( '/a/b/c/./../../g', '/a/g' ),
                        array( 'mid/content=5/../6', 'mid/6' ),
index cd1a8db..673702e 100644 (file)
@@ -85,7 +85,7 @@ class wfUrlencodeTest extends MediaWikiTestCase {
         * If you want to add other HTTP server name, you will have to add a new
         * testing method much like the testEncodingUrlWith() method above. 
         */
-       public function provideURLS() {
+       public static function provideURLS() {
                return array(
                ### RFC 1738 chars      
                        // + is not safe
index 2f9d9f8..e455f0f 100644 (file)
@@ -75,27 +75,62 @@ class HooksTest extends MediaWikiTestCase {
 
                $this->assertEquals( 'bah', $foo, 'Standard static method' );
                $foo = 'Foo';
+
+               Hooks::clear( 'MediaWikiHooksTest001' );
+       }
+
+       public function testNewStyleHookInteraction() {
+               global $wgHooks;
+
+               $a = new NothingClass();
+               $b = new NothingClass();
+
+               // make sure to start with a clean slate
+               Hooks::clear( 'MediaWikiHooksTest001' );
+               unset( $wgHooks['MediaWikiHooksTest001'] );
+
+               $wgHooks['MediaWikiHooksTest001'][] = $a;
+               $this->assertTrue( Hooks::isRegistered( 'MediaWikiHooksTest001' ), 'Hook registered via $wgHooks should be noticed by Hooks::isRegistered' );
+
+               Hooks::register( 'MediaWikiHooksTest001', $b );
+               $this->assertEquals( 2, count( Hooks::getHandlers( 'MediaWikiHooksTest001' ) ), 'Hooks::getHandlers() should return hooks registered via wgHooks as well as Hooks::register' );
+
+               $foo = 'quux';
+               $bar = 'qaax';
+
+               Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
+               $this->assertEquals( 1, $a->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
+               $this->assertEquals( 1, $b->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
+
+               // clean up
+               Hooks::clear( 'MediaWikiHooksTest001' );
+               unset( $wgHooks['MediaWikiHooksTest001'] );
        }
 }
 
 class NothingClass {
+       public $calls = 0;
+
        static public function someStatic( &$foo, &$bar ) {
                $foo = 'bah';
                return true;
        }
 
        public function someNonStatic( &$foo, &$bar ) {
+               $this->calls++;
                $foo = 'fOO';
                $bar = 'bAR';
                return true;
        }
 
        public function onMediaWikiHooksTest001( &$foo, &$bar ) {
+               $this->calls++;
                $foo = 'foo';
                return true;
        }
 
        public function someNonStaticWithData( $foo, &$bar ) {
+               $this->calls++;
                $bar = $foo;
                return true;
        }
index 8b019d7..95a6cb0 100644 (file)
@@ -2,26 +2,17 @@
 /** tests for includes/Html.php */
 
 class HtmlTest extends MediaWikiTestCase {
-       private static $oldLang;
-       private static $oldContLang;
-       private static $oldLanguageCode;
-       private static $oldNamespaces;
 
-       public function setUp() {
-               global $wgLang, $wgContLang, $wgLanguageCode;
-               
-               self::$oldLang = $wgLang;
-               self::$oldContLang = $wgContLang;
-               self::$oldNamespaces = $wgContLang->getNamespaces();
-               self::$oldLanguageCode = $wgLanguageCode;
-               
-               $wgLanguageCode = 'en';
-               $wgContLang = $wgLang = Language::factory( $wgLanguageCode );
+       protected function setUp() {
+               parent::setUp();
+
+               $langCode = 'en';
+               $langObj = Language::factory( $langCode );
 
                // Hardcode namespaces during test runs,
                // so that html output based on existing namespaces
                // can be properly evaluated.
-               $wgContLang->setNamespaces( array(
+               $langObj->setNamespaces( array(
                        -2 => 'Media',
                        -1 => 'Special',
                        0  => '',
@@ -41,56 +32,102 @@ class HtmlTest extends MediaWikiTestCase {
                        100  => 'Custom',
                        101  => 'Custom_talk',
                ) );
+
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => $langCode,
+                       'wgContLang' => $langObj,
+                       'wgLang' => $langObj,
+                       'wgHtml5' => true,
+                       'wgWellFormedXml' => false,
+               ) );
        }
-       
-       public function tearDown() {
-               global $wgLang, $wgContLang, $wgLanguageCode;
-
-               $wgContLang->setNamespaces( self::$oldNamespaces );
-               $wgLang = self::$oldLang;
-               $wgContLang = self::$oldContLang;
-               $wgLanguageCode = self::$oldLanguageCode;
+
+       public function testElementBasics() {
+               global $wgWellFormedXml;
+
+               $this->assertEquals(
+                       '<img>',
+                       Html::element( 'img', null, '' ),
+                       'No close tag for short-tag elements'
+               );
+
+               $this->assertEquals(
+                       '<element></element>',
+                       Html::element( 'element', null, null ),
+                       'Close tag for empty element (null, null)'
+               );
+
+               $this->assertEquals(
+                       '<element></element>',
+                       Html::element( 'element', array(), '' ),
+                       'Close tag for empty element (array, string)'
+               );
+
+               $wgWellFormedXml = true;
+
+               $this->assertEquals(
+                       '<img />',
+                       Html::element( 'img', null, '' ),
+                       'Self-closing tag for short-tag elements (wgWellFormedXml = true)'
+               );
        }
 
        public function testExpandAttributesSkipsNullAndFalse() {
                
                ### EMPTY ########
-               $this->AssertEmpty(
+               $this->assertEmpty(
                        Html::expandAttributes( array( 'foo' => null ) ),
                        'skip keys with null value'
                );
-               $this->AssertEmpty(
+               $this->assertEmpty(
                        Html::expandAttributes( array( 'foo' => false ) ),
                        'skip keys with false value'
                );
-               $this->AssertNotEmpty(
+               $this->assertNotEmpty(
                        Html::expandAttributes( array( 'foo' => '' ) ),
                        'keep keys with an empty string'
                );
        }
 
        public function testExpandAttributesForBooleans() {
-               global $wgHtml5;
-               $this->AssertEquals(
+               global $wgHtml5, $wgWellFormedXml;
+
+               $this->assertEquals(
                        '',
                        Html::expandAttributes( array( 'selected' => false ) ),
                        'Boolean attributes do not generates output when value is false'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        '',
                        Html::expandAttributes( array( 'selected' => null ) ),
                        'Boolean attributes do not generates output when value is null'
                );
 
-               $this->AssertEquals(
-                       $wgHtml5 ? ' selected=""' : ' selected="selected"',
+               $this->assertEquals(
+                       ' selected',
                        Html::expandAttributes( array( 'selected' => true ) ),
-                       'Boolean attributes skip value output'
+                       'Boolean attributes have no value when value is true'
                );
-               $this->AssertEquals(
-                       $wgHtml5 ? ' selected=""' : ' selected="selected"',
+               $this->assertEquals(
+                       ' selected',
                        Html::expandAttributes( array( 'selected' ) ),
-                       'Boolean attributes (ex: selected) do not need a value'
+                       'Boolean attributes have no value when value is true (passed as numerical array)'
+               );
+
+               $wgWellFormedXml = true;
+
+               $this->assertEquals(
+                       ' selected=""',
+                       Html::expandAttributes( array( 'selected' => true ) ),
+                       'Boolean attributes have empty string value when value is true (wgWellFormedXml)'
+               );
+
+               $wgHtml5 = false;
+
+               $this->assertEquals(
+                       ' selected="selected"',
+                       Html::expandAttributes( array( 'selected' => true ) ),
+                       'Boolean attributes have their key as value when value is true (wgWellFormedXml, wgHTML5 = false)'
                );
        }
 
@@ -99,26 +136,51 @@ class HtmlTest extends MediaWikiTestCase {
         * Please note it output a string prefixed with a space!
         */
        public function testExpandAttributesVariousExpansions() {
+               global $wgWellFormedXml;
+
                ### NOT EMPTY ####
-               $this->AssertEquals(
+               $this->assertEquals(
+                       ' empty_string=""',
+                       Html::expandAttributes( array( 'empty_string' => '' ) ),
+                       'Empty string is always quoted'
+               );
+               $this->assertEquals(
+                       ' key=value',
+                       Html::expandAttributes( array( 'key' => 'value' ) ),
+                       'Simple string value needs no quotes'
+               );
+               $this->assertEquals(
+                       ' one=1',
+                       Html::expandAttributes( array( 'one' => 1 ) ),
+                       'Number 1 value needs no quotes'
+               );
+               $this->assertEquals(
+                       ' zero=0',
+                       Html::expandAttributes( array( 'zero' => 0 ) ),
+                       'Number 0 value needs no quotes'
+               );
+
+               $wgWellFormedXml = true;
+
+               $this->assertEquals(
                        ' empty_string=""',
                        Html::expandAttributes( array( 'empty_string' => '' ) ),
-                       'Value with an empty string'
+                       'Attribtue values are always quoted (wgWellFormedXml): Empty string'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' key="value"',
                        Html::expandAttributes( array( 'key' => 'value' ) ),
-                       'Value is a string'
+                       'Attribtue values are always quoted (wgWellFormedXml): Simple string'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' one="1"',
                        Html::expandAttributes( array( 'one' => 1 ) ),
-                       'Value is a numeric one'
+                       'Attribtue values are always quoted (wgWellFormedXml): Number 1'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' zero="0"',
                        Html::expandAttributes( array( 'zero' => 0 ) ),
-                       'Value is a numeric zero'
+                       'Attribtue values are always quoted (wgWellFormedXml): Number 0'
                );
        }
 
@@ -129,29 +191,29 @@ class HtmlTest extends MediaWikiTestCase {
         */
        public function testExpandAttributesListValueAttributes() {
                ### STRING VALUES
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class="redundant spaces here"',
                        Html::expandAttributes( array( 'class' => ' redundant  spaces  here  ' ) ),
                        'Normalization should strip redundant spaces'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class="foo bar"',
                        Html::expandAttributes( array( 'class' => 'foo bar foo bar bar' ) ),
                        'Normalization should remove duplicates in string-lists'
                );
                ### "EMPTY" ARRAY VALUES
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class=""',
                        Html::expandAttributes( array( 'class' => array() ) ),
                        'Value with an empty array'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class=""',
                        Html::expandAttributes( array( 'class' => array( null, '', ' ', '  ' ) ) ),
                        'Array with null, empty string and spaces'
                );
                ### NON-EMPTY ARRAY VALUES
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class="foo bar"',
                        Html::expandAttributes( array( 'class' => array(
                                'foo',
@@ -162,7 +224,7 @@ class HtmlTest extends MediaWikiTestCase {
                        ) ) ),
                        'Normalization should remove duplicates in the array'
                );
-               $this->AssertEquals(
+               $this->assertEquals(
                        ' class="foo bar"',
                        Html::expandAttributes( array( 'class' => array(
                                'foo bar',
@@ -215,48 +277,48 @@ class HtmlTest extends MediaWikiTestCase {
 
        function testNamespaceSelector() {
                $this->assertEquals(
-                       '<select>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
+                       '<select id=namespace name=namespace>' . "\n" .
+'<option value=0>(Main)</option>' . "\n" .
+'<option value=1>Talk</option>' . "\n" .
+'<option value=2>User</option>' . "\n" .
+'<option value=3>User talk</option>' . "\n" .
+'<option value=4>MyWiki</option>' . "\n" .
+'<option value=5>MyWiki Talk</option>' . "\n" .
+'<option value=6>File</option>' . "\n" .
+'<option value=7>File talk</option>' . "\n" .
+'<option value=8>MediaWiki</option>' . "\n" .
+'<option value=9>MediaWiki talk</option>' . "\n" .
+'<option value=10>Template</option>' . "\n" .
+'<option value=11>Template talk</option>' . "\n" .
+'<option value=14>Category</option>' . "\n" .
+'<option value=15>Category talk</option>' . "\n" .
+'<option value=100>Custom</option>' . "\n" .
+'<option value=101>Custom talk</option>' . "\n" .
 '</select>',
                        Html::namespaceSelector(),
                        'Basic namespace selector without custom options'
                );
 
                $this->assertEquals(
-                       '<label for="mw-test-namespace">Select a namespace:</label>&#160;' .
-'<select id="mw-test-namespace" name="wpNamespace">' . "\n" .
-'<option value="all">all</option>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2" selected="">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
+                       '<label for=mw-test-namespace>Select a namespace:</label>&#160;' .
+'<select id=mw-test-namespace name=wpNamespace>' . "\n" .
+'<option value=all>all</option>' . "\n" .
+'<option value=0>(Main)</option>' . "\n" .
+'<option value=1>Talk</option>' . "\n" .
+'<option value=2 selected>User</option>' . "\n" .
+'<option value=3>User talk</option>' . "\n" .
+'<option value=4>MyWiki</option>' . "\n" .
+'<option value=5>MyWiki Talk</option>' . "\n" .
+'<option value=6>File</option>' . "\n" .
+'<option value=7>File talk</option>' . "\n" .
+'<option value=8>MediaWiki</option>' . "\n" .
+'<option value=9>MediaWiki talk</option>' . "\n" .
+'<option value=10>Template</option>' . "\n" .
+'<option value=11>Template talk</option>' . "\n" .
+'<option value=14>Category</option>' . "\n" .
+'<option value=15>Category talk</option>' . "\n" .
+'<option value=100>Custom</option>' . "\n" .
+'<option value=101>Custom talk</option>' . "\n" .
 '</select>',
                        Html::namespaceSelector(
                                array( 'selected' => '2', 'all' => 'all', 'label' => 'Select a namespace:' ),
@@ -266,24 +328,24 @@ class HtmlTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       '<label>Select a namespace:</label>&#160;' .
-'<select>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
+                       '<label for=namespace>Select a namespace:</label>&#160;' .
+'<select id=namespace name=namespace>' . "\n" .
+'<option value=0>(Main)</option>' . "\n" .
+'<option value=1>Talk</option>' . "\n" .
+'<option value=2>User</option>' . "\n" .
+'<option value=3>User talk</option>' . "\n" .
+'<option value=4>MyWiki</option>' . "\n" .
+'<option value=5>MyWiki Talk</option>' . "\n" .
+'<option value=6>File</option>' . "\n" .
+'<option value=7>File talk</option>' . "\n" .
+'<option value=8>MediaWiki</option>' . "\n" .
+'<option value=9>MediaWiki talk</option>' . "\n" .
+'<option value=10>Template</option>' . "\n" .
+'<option value=11>Template talk</option>' . "\n" .
+'<option value=14>Category</option>' . "\n" .
+'<option value=15>Category talk</option>' . "\n" .
+'<option value=100>Custom</option>' . "\n" .
+'<option value=101>Custom talk</option>' . "\n" .
 '</select>',
                        Html::namespaceSelector(
                                array( 'label' => 'Select a namespace:' )
@@ -294,18 +356,18 @@ class HtmlTest extends MediaWikiTestCase {
 
        function testCanFilterOutNamespaces() {
                $this->assertEquals(
-'<select>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
+'<select id=namespace name=namespace>' . "\n" .
+'<option value=2>User</option>' . "\n" .
+'<option value=4>MyWiki</option>' . "\n" .
+'<option value=5>MyWiki Talk</option>' . "\n" .
+'<option value=6>File</option>' . "\n" .
+'<option value=7>File talk</option>' . "\n" .
+'<option value=8>MediaWiki</option>' . "\n" .
+'<option value=9>MediaWiki talk</option>' . "\n" .
+'<option value=10>Template</option>' . "\n" .
+'<option value=11>Template talk</option>' . "\n" .
+'<option value=14>Category</option>' . "\n" .
+'<option value=15>Category talk</option>' . "\n" .
 '</select>',
                        Html::namespaceSelector(
                                array( 'exclude' => array( 0, 1, 3, 100, 101 ) )
@@ -316,23 +378,23 @@ class HtmlTest extends MediaWikiTestCase {
 
        function testCanDisableANamespaces() {
                $this->assertEquals(
-'<select>' . "\n" .
-'<option disabled="" value="0">(Main)</option>' . "\n" .
-'<option disabled="" value="1">Talk</option>' . "\n" .
-'<option disabled="" value="2">User</option>' . "\n" .
-'<option disabled="" value="3">User talk</option>' . "\n" .
-'<option disabled="" value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
+'<select id=namespace name=namespace>' . "\n" .
+'<option disabled value=0>(Main)</option>' . "\n" .
+'<option disabled value=1>Talk</option>' . "\n" .
+'<option disabled value=2>User</option>' . "\n" .
+'<option disabled value=3>User talk</option>' . "\n" .
+'<option disabled value=4>MyWiki</option>' . "\n" .
+'<option value=5>MyWiki Talk</option>' . "\n" .
+'<option value=6>File</option>' . "\n" .
+'<option value=7>File talk</option>' . "\n" .
+'<option value=8>MediaWiki</option>' . "\n" .
+'<option value=9>MediaWiki talk</option>' . "\n" .
+'<option value=10>Template</option>' . "\n" .
+'<option value=11>Template talk</option>' . "\n" .
+'<option value=14>Category</option>' . "\n" .
+'<option value=15>Category talk</option>' . "\n" .
+'<option value=100>Custom</option>' . "\n" .
+'<option value=101>Custom talk</option>' . "\n" .
 '</select>',
                        Html::namespaceSelector( array(
                                'disable' => array( 0, 1, 2, 3, 4 )
@@ -341,4 +403,202 @@ class HtmlTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideHtml5InputTypes
+        */
+       function testHtmlElementAcceptsNewHtml5TypesInHtml5Mode( $HTML5InputType ) {
+               $this->assertEquals(
+                       '<input type=' . $HTML5InputType . '>',
+                       Html::element( 'input', array( 'type' => $HTML5InputType ) ),
+                       'In HTML5, HTML::element() should accept type="' . $HTML5InputType . '"'
+               );
+       }
+
+       /**
+        * List of input element types values introduced by HTML5
+        * Full list at http://www.w3.org/TR/html-markup/input.html
+        */
+       function provideHtml5InputTypes() {
+               $types = array(
+                       'datetime',
+                       'datetime-local',
+                       'date',
+                       'month',
+                       'time',
+                       'week',
+                       'number',
+                       'range',
+                       'email',
+                       'url',
+                       'search',
+                       'tel',
+                       'color',
+               );
+               $cases = array();
+               foreach( $types as $type ) {
+                       $cases[] = array( $type );
+               }
+               return $cases;
+       }
+
+       /**
+        * Test out Html::element drops default value
+        * @cover Html::dropDefaults
+        * @dataProvider provideElementsWithAttributesHavingDefaultValues
+        */
+       function testDropDefaults( $expected, $element, $attribs, $message = '' ) {
+               $this->assertEquals( $expected, Html::element( $element, $attribs ), $message );
+       }
+
+       public static function provideElementsWithAttributesHavingDefaultValues() {
+               # Use cases in a concise format:
+               # <expected>, <element name>, <array of attributes> [, <message>]
+               # Will be mapped to Html::element()
+               $cases = array();
+
+               ### Generic cases, match $attribDefault static array
+               $cases[] = array( '<area>',
+                       'area', array( 'shape' => 'rect' )
+               );
+
+               $cases[] = array( '<button></button>',
+                       'button', array( 'formaction' => 'GET' )
+               );
+               $cases[] = array( '<button></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' )
+               );
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'width' => '300' )
+               );
+               # Also check with numeric values
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'height' => 150 )
+               );
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'width' => 300 )
+               );
+
+               $cases[] = array( '<command>',
+                       'command', array( 'type' => 'command' )
+               );
+
+               $cases[] = array( '<form></form>',
+                       'form', array( 'action' => 'GET' )
+               );
+               $cases[] = array( '<form></form>',
+                       'form', array( 'autocomplete' => 'on' )
+               );
+               $cases[] = array( '<form></form>',
+                       'form', array( 'enctype' => 'application/x-www-form-urlencoded' )
+               );
+
+               $cases[] = array( '<input>',
+                       'input', array( 'formaction' => 'GET' )
+               );
+               $cases[] = array( '<input>',
+                       'input', array( 'type' => 'text' )
+               );
+
+               $cases[] = array( '<keygen>',
+                       'keygen', array( 'keytype' => 'rsa' )
+               );
+
+               $cases[] = array( '<link>',
+                       'link', array( 'media' => 'all' )
+               );
+
+               $cases[] = array( '<menu></menu>',
+                       'menu', array( 'type' => 'list' )
+               );
+
+               $cases[] = array( '<script></script>',
+                       'script', array( 'type' => 'text/javascript' )
+               );
+
+               $cases[] = array( '<style></style>',
+                       'style', array( 'media' => 'all' )
+               );
+               $cases[] = array( '<style></style>',
+                       'style', array( 'type' => 'text/css' )
+               );
+
+               $cases[] = array( '<textarea></textarea>',
+                       'textarea', array( 'wrap' => 'soft' )
+               );
+
+               ### SPECIFIC CASES
+
+               # <link type="text/css">
+               $cases[] = array( '<link>',
+                       'link', array( 'type' => 'text/css' )
+               );
+
+               # <input> specific handling
+               $cases[] = array( '<input type=checkbox>',
+                       'input', array( 'type' => 'checkbox', 'value' => 'on' ),
+                       'Default value "on" is stripped of checkboxes',
+               );
+               $cases[] = array( '<input type=radio>',
+                       'input', array( 'type' => 'radio', 'value' => 'on' ),
+                       'Default value "on" is stripped of radio buttons',
+               );
+               $cases[] = array( '<input type=submit value=Submit>',
+                       'input', array( 'type' => 'submit', 'value' => 'Submit' ),
+                       'Default value "Submit" is kept on submit buttons (for possible l10n issues)',
+               );
+               $cases[] = array( '<input type=color>',
+                       'input', array( 'type' => 'color', 'value' => '' ),
+               );
+               $cases[] = array( '<input type=range>',
+                       'input', array( 'type' => 'range', 'value' => '' ),
+               );
+
+               # <select> specifc handling
+               $cases[] = array( '<select multiple></select>',
+                       'select', array( 'size' => '4', 'multiple' => true ),
+               );
+               # .. with numeric value
+               $cases[] = array( '<select multiple></select>',
+                       'select', array( 'size' => 4, 'multiple' => true ),
+               );
+               $cases[] = array( '<select></select>',
+                       'select', array( 'size' => '1', 'multiple' => false ),
+               );
+               # .. with numeric value
+               $cases[] = array( '<select></select>',
+                       'select', array( 'size' => 1, 'multiple' => false ),
+               );
+
+               # Passing an array as value
+               $cases[] = array( '<a class="css-class-one css-class-two"></a>',
+                       'a', array( 'class' => array( 'css-class-one', 'css-class-two' ) ),
+                       "dropDefaults accepts values given as an array"
+               );
+
+               # FIXME: doDropDefault should remove defaults given in an array
+               # Expected should be '<a></a>'
+               $cases[] = array( '<a class=""></a>',
+                       'a', array( 'class' => array( '', '' ) ),
+                       "dropDefaults accepts values given as an array"
+               );
+
+               # Craft the Html elements
+               $ret = array();
+               foreach( $cases as $case ) {
+                       $ret[] = array(
+                               $case[0],
+                               $case[1], $case[2],
+                               isset( $case[3] ) ? $case[3] : ''
+                       );
+               }
+               return $ret;
+       }
+
 }
index 263383f..155bd31 100644 (file)
@@ -17,7 +17,7 @@ class HttpTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $ok, $msg );
        }
 
-       function cookieDomains() {
+       public static function cookieDomains() {
                return array(
                        array( false, "org"),
                        array( false, ".org"),
@@ -62,7 +62,7 @@ class HttpTest extends MediaWikiTestCase {
        /**
         * Feeds URI to test a long regular expression in Http::isValidURI
         */
-       function provideURI() {
+       public static function provideURI() {
                /** Format: 'boolean expectation', 'URI to test', 'Optional message' */
                return array(
                        array( false, '¿non sens before!! http://a', 'Allow anything before URI' ),
@@ -131,6 +131,10 @@ class HttpTest extends MediaWikiTestCase {
         * handles header reporting on redirect pages, and will need to be
         * rewritten when bug 29232 is taken care of (high-level handling of
         * HTTP redirects).
+        * @group Broken
+        *  MWHttpRequestTester's constructor is private, needs to use
+        *  MWHttpRequestTester::factory instead. However the objects coming
+        *  from that won't have MWHttpRequestTester::setRespHeaders...
         */
        function testRelativeRedirections() {
                $h = new MWHttpRequestTester( 'http://oldsite/file.ext' );
index f50b2fe..c4a6c55 100644 (file)
@@ -405,7 +405,7 @@ class IPTest extends MediaWikiTestCase {
        }
 
        /** Provider for testIPIsInRange() */
-       function provideIPsAndRanges() {
+       public static function provideIPsAndRanges() {
                        # Format: (expected boolean, address, range, optional message)
                return array(
                        # IPv4
@@ -443,7 +443,7 @@ class IPTest extends MediaWikiTestCase {
        /**
         * Provider for IP::splitHostAndPort()
         */
-       function provideSplitHostAndPort() {
+       public static function provideSplitHostAndPort() {
                return array(
                        array( false, '[', 'Unclosed square bracket' ),
                        array( false, '[::', 'Unclosed square bracket 2' ),
@@ -474,7 +474,7 @@ class IPTest extends MediaWikiTestCase {
        /**
         * Provider for IP::combineHostAndPort()
         */
-       function provideCombineHostAndPort() {
+       public static function provideCombineHostAndPort() {
                return array(
                        array( '[::1]', array( '::1', 2, 2 ), 'IPv6 default port' ),
                        array( '[::1]:2', array( '::1', 2, 3 ), 'IPv6 non-default port' ),
@@ -494,7 +494,7 @@ class IPTest extends MediaWikiTestCase {
        /**
         * Provider for IP::testSanitizeRange()
         */
-       function provideIPCIDRs() {
+       public static function provideIPCIDRs() {
                return array(
                        array( '35.56.31.252/16', '35.56.0.0/16', 'IPv4 range' ),
                        array( '135.16.21.252/24', '135.16.21.0/24', 'IPv4 range' ),
@@ -518,7 +518,7 @@ class IPTest extends MediaWikiTestCase {
        /**
         * Provider for IP::testPrettifyIP()
         */
-       function provideIPsToPrettify() {
+       public static function provideIPsToPrettify() {
                return array(
                        array( '0:0:0:0:0:0:0:0', '::' ),
                        array( '0:0:0::0:0:0', '::' ),
diff --git a/tests/phpunit/includes/JavascriptContentTest.php b/tests/phpunit/includes/JavascriptContentTest.php
new file mode 100644 (file)
index 0000000..a3b75d1
--- /dev/null
@@ -0,0 +1,259 @@
+<?php
+
+/**
+ * @group ContentHandler
+ *
+ * @group Database
+ *        ^--- needed, because we do need the database to test link updates
+ */
+class JavascriptContentTest extends WikitextContentTest {
+
+       public function newContent( $text ) {
+               return new JavascriptContent( $text );
+       }
+
+
+       public 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>\n"),
+                       // @todo: more...?
+               );
+       }
+
+       public function dataGetSection() {
+               return array(
+                       array( WikitextContentTest::$sections,
+                              "0",
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "2",
+                              null
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "8",
+                              null
+                       ),
+               );
+       }
+
+       public 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 function dataPreSaveTransform() {
+               return array(
+                       array( 'hello this is ~~~',
+                              "hello this is ~~~",
+                       ),
+                       array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+                              'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+                       ),
+               );
+       }
+       */
+
+       public 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 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 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 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 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 75dd18d..9b508f7 100644 (file)
@@ -3,31 +3,25 @@
 class JsonTest extends MediaWikiTestCase {
        
        function testPhpBug46944Test() {
-               
                $this->assertNotEquals( 
                        '\ud840\udc00',                 
                        strtolower( FormatJson::encode( "\xf0\xa0\x80\x80" ) ),
                        'Test encoding an broken json_encode character (U+20000)'
                );
-               
-               
+
        }
        
        function testDecodeVarTypes() {
-               
                $this->assertInternalType( 
                        'object',                       
                        FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}' ),
                        'Default to object'
                );
-               
+
                $this->assertInternalType( 
                        'array',                        
                        FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}', true ),
                        'Optional array'
                );
-               
        }
-       
 }
-
index baf28b0..9fc6f4d 100644 (file)
@@ -4,24 +4,28 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
        protected $lang = null;
        protected $lc = null;
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
-               global $wgMemc, $wgRequest, $wgUser, $wgContLang;
 
-               $wgUser = new User;
-               $wgRequest = new FauxRequest( array() );
-               $wgMemc = new EmptyBagOStuff;
-               $wgContLang = Language::factory( 'tg' );
+               $this->setMwGlobals( array(
+                       'wgContLang' => Language::factory( 'tg' ),
+                       'wgDefaultLanguageVariant' => false,
+                       'wgMemc' => new EmptyBagOStuff,
+                       'wgRequest' => new FauxRequest( array() ),
+                       'wgUser' => new User,
+               ) );
+
                $this->lang = new LanguageToTest();
-               $this->lc = new TestConverter( $this->lang, 'tg',
-                                                                          array( 'tg', 'tg-latn' ) );
+               $this->lc = new TestConverter(
+                       $this->lang, 'tg',
+                       array( 'tg', 'tg-latn' )
+               );
        }
 
-       function tearDown() {
-               global $wgMemc;
-               unset( $wgMemc );
+       protected function tearDown() {
                unset( $this->lc );
                unset( $this->lang );
+
                parent::tearDown();
        }
 
@@ -71,7 +75,7 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
        }
 
        function testGetPreferredVariantHeaderUserVsUrl() {
-               global $wgRequest, $wgUser, $wgContLang;
+               global $wgContLang, $wgRequest, $wgUser;
 
                $wgContLang = Language::factory( 'tg-latn' );
                $wgRequest->setVal( 'variant', 'tg' );
index 4946200..bc71ab7 100644 (file)
@@ -10,30 +10,35 @@ class LinksUpdateTest extends MediaWikiTestCase {
        function  __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
-               $this->tablesUsed = array_merge ( $this->tablesUsed,
-                                                                                       array( 'interwiki',
-
-                                                                                               'page_props',
-                                                                                               'pagelinks',
-                                                                                               'categorylinks',
-                                                                                               'langlinks',
-                                                                                               'externallinks',
-                                                                                               'imagelinks',
-                                                                                               'templatelinks',
-                                                                                               'iwlinks' ) );
+               $this->tablesUsed = array_merge( $this->tablesUsed,
+                       array(
+                               'interwiki',
+                               'page_props',
+                               'pagelinks',
+                               'categorylinks',
+                               'langlinks',
+                               'externallinks',
+                               'imagelinks',
+                               'templatelinks',
+                               'iwlinks'
+                       )
+               );
        }
 
-       function setUp() {
+       protected function setUp() {
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'interwiki',
-                                               array('iw_prefix'),
-                                               array( 'iw_prefix' => 'linksupdatetest',
-                                                      'iw_url' => 'http://testing.com/wiki/$1',
-                                                      'iw_api' => 'http://testing.com/w/api.php',
-                                                      'iw_local' => 0,
-                                                      'iw_trans' => 0,
-                                                      'iw_wikiid' => 'linksupdatetest',
-                                               ) );
+               $dbw->replace(
+                       'interwiki',
+                       array( 'iw_prefix' ),
+                       array(
+                               'iw_prefix' => 'linksupdatetest',
+                               'iw_url' => 'http://testing.com/wiki/$1',
+                               'iw_api' => 'http://testing.com/w/api.php',
+                               'iw_local' => 0,
+                               'iw_trans' => 0,
+                               'iw_wikiid' => 'linksupdatetest',
+                       )
+               );
        }
 
        protected function makeTitleAndParserOutput( $name, $id ) {
@@ -143,10 +148,13 @@ class LinksUpdateTest extends MediaWikiTestCase {
 
        #@todo: test recursive, too!
 
-       protected function assertLinksUpdate( Title $title, ParserOutput $parserOutput, $table, $fields, $condition, Array $expectedRows ) {
+       protected function assertLinksUpdate( Title $title, ParserOutput $parserOutput, $table, $fields, $condition, array $expectedRows ) {
                $update = new LinksUpdate( $title, $parserOutput );
 
+               //NOTE: make sure LinksUpdate does not generate warnings when called inside a transaction.
+               $update->beginTransaction();
                $update->doUpdate();
+               $update->commitTransaction();
 
                $this->assertSelect( $table, $fields, $condition, $expectedRows );
        }
index 5b26b89..c5a9dc1 100644 (file)
@@ -6,10 +6,11 @@
  */
 
 class LocalFileTest extends MediaWikiTestCase {
-       function setUp() {
-               global $wgCapitalLinks;
 
-               $wgCapitalLinks = true;
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgCapitalLinks', true );
 
                $info = array(
                        'name'            => 'test',
diff --git a/tests/phpunit/includes/LocalisationCacheTest.php b/tests/phpunit/includes/LocalisationCacheTest.php
new file mode 100644 (file)
index 0000000..b34847a
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+class LocalisationCacheTest extends MediaWikiTestCase {
+       public function testPuralRulesFallback() {
+               $cache = Language::getLocalisationCache();
+
+               $this->assertEquals(
+                       $cache->getItem( 'ar', 'pluralRules' ),
+                       $cache->getItem( 'arz', 'pluralRules' ),
+                       'arz plural rules (undefined) fallback to ar (defined)'
+               );
+
+               $this->assertEquals(
+                       $cache->getItem( 'ar', 'compiledPluralRules' ),
+                       $cache->getItem( 'arz', 'compiledPluralRules' ),
+                       'arz compiled plural rules (undefined) fallback to ar (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'pluralRules' ),
+                       $cache->getItem( 'de', 'pluralRules' ),
+                       'ksh plural rules (defined) dont fallback to de (defined)'
+               );
+
+               $this->assertNotEquals(
+                       $cache->getItem( 'ksh', 'compiledPluralRules' ),
+                       $cache->getItem( 'de', 'compiledPluralRules' ),
+                       'ksh compiled plural rules (defined) dont fallback to de (defined)'
+               );
+       }
+}
index ed5e760..f7be59f 100644 (file)
@@ -3,7 +3,6 @@
 class MWFunctionTest extends MediaWikiTestCase {
        
        function testCallUserFuncWorkarounds() {
-               
                $this->assertEquals( 
                        call_user_func( array( 'MWFunctionTest', 'someMethod' ) ),
                        MWFunction::call( 'MWFunctionTest::someMethod' )
@@ -12,9 +11,7 @@ class MWFunctionTest extends MediaWikiTestCase {
                        call_user_func( array( 'MWFunctionTest', 'someMethod' ), 'foo', 'bar', 'baz' ),
                        MWFunction::call( 'MWFunctionTest::someMethod', 'foo', 'bar', 'baz' )
                );
-               
-               
-               
+
                $this->assertEquals( 
                        call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array() ),
                        MWFunction::callArray( 'MWFunctionTest::someMethod', array() )
@@ -23,38 +20,33 @@ class MWFunctionTest extends MediaWikiTestCase {
                        call_user_func_array( array( 'MWFunctionTest', 'someMethod' ), array( 'foo', 'bar', 'baz' ) ),
                        MWFunction::callArray( 'MWFunctionTest::someMethod', array( 'foo', 'bar', 'baz' ) )
                );
-               
        }
        
        function testNewObjFunction() {
-               
                $arg1 = 'Foo';
                $arg2 = 'Bar';
                $arg3 = array( 'Baz' );
                $arg4 = new ExampleObject;
-               
+
                $args = array( $arg1, $arg2, $arg3, $arg4 );
-               
+
                $newObject = new MWBlankClass( $arg1, $arg2, $arg3, $arg4 );
-               
                $this->assertEquals( 
                        MWFunction::newObj( 'MWBlankClass', $args )->args, 
                        $newObject->args
                );
-               
+
                $this->assertEquals( 
                        MWFunction::newObj( 'MWBlankClass', $args, true )->args, 
                        $newObject->args,
                        'Works even with PHP version < 5.1.3'
                );
-               
        }
        
        /**
         * @expectedException MWException
         */
        function testCallingParentFails() {
-               
                MWFunction::call( 'parent::foo' );
        }
        
@@ -62,7 +54,6 @@ class MWFunctionTest extends MediaWikiTestCase {
         * @expectedException MWException
         */
        function testCallingSelfFails() {
-               
                MWFunction::call( 'self::foo' );
        }
        
@@ -73,13 +64,12 @@ class MWFunctionTest extends MediaWikiTestCase {
 }
 
 class MWBlankClass {
-       
+
        public $args = array();
-       
+
        function __construct( $arg1, $arg2, $arg3, $arg4 ) {
                $this->args = array( $arg1, $arg2, $arg3, $arg4 );
        }
-       
 }
 
 class ExampleObject {
index 3b05d67..5de5cc9 100644 (file)
  *
  */
 class MWNamespaceTest extends MediaWikiTestCase {
-       /**
-        * Sets up the fixture, for example, opens a network connection.
-        * This method is called before a test is executed.
-        */
        protected function setUp() {
-       }
+               parent::setUp();
 
-       /**
-        * Tears down the fixture, for example, closes a network connection.
-        * This method is called after a test is executed.
-        */
-       protected function tearDown() {
+               $this->setMwGlobals( array(
+                       'wgContentNamespaces' => array( NS_MAIN ),
+                       'wgNamespacesWithSubpages' => array(
+                               NS_TALK           => true,
+                               NS_USER           => true,
+                               NS_USER_TALK      => true,
+                       ),
+                       'wgCapitalLinks' => true,
+                       'wgCapitalLinkOverrides' => array(),
+                       'wgNonincludableNamespaces' => array(),
+               ) );
        }
 
-
 #### START OF TESTS #########################################################
 
        /**
@@ -268,77 +269,36 @@ class MWNamespaceTest extends MediaWikiTestCase {
        public function testIsContent() {
                // NS_MAIN is a content namespace per DefaultSettings.php
                // and per function definition.
-               $this->assertIsContent( NS_MAIN );
 
-               global $wgContentNamespaces;
-
-               $saved = $wgContentNamespaces;
-
-               $wgContentNamespaces[] = NS_MAIN;
                $this->assertIsContent( NS_MAIN );
 
                // Other namespaces which are not expected to be content
-               if ( isset( $wgContentNamespaces[NS_MEDIA] ) ) {
-                       unset( $wgContentNamespaces[NS_MEDIA] );
-               }
-               $this->assertIsNotContent( NS_MEDIA );
 
-               if ( isset( $wgContentNamespaces[NS_SPECIAL] ) ) {
-                       unset( $wgContentNamespaces[NS_SPECIAL] );
-               }
+               $this->assertIsNotContent( NS_MEDIA );
                $this->assertIsNotContent( NS_SPECIAL );
-
-               if ( isset( $wgContentNamespaces[NS_TALK] ) ) {
-                       unset( $wgContentNamespaces[NS_TALK] );
-               }
                $this->assertIsNotContent( NS_TALK );
-
-               if ( isset( $wgContentNamespaces[NS_USER] ) ) {
-                       unset( $wgContentNamespaces[NS_USER] );
-               }
                $this->assertIsNotContent( NS_USER );
-
-               if ( isset( $wgContentNamespaces[NS_CATEGORY] ) ) {
-                       unset( $wgContentNamespaces[NS_CATEGORY] );
-               }
                $this->assertIsNotContent( NS_CATEGORY );
-
-               if ( isset( $wgContentNamespaces[100] ) ) {
-                       unset( $wgContentNamespaces[100] );
-               }
                $this->assertIsNotContent( 100 );
-
-               $wgContentNamespaces = $saved;
        }
 
        /**
         * Similar to testIsContent() but alters the $wgContentNamespaces
         * global variable.
         */
-       public function testIsContentWithAdditionsInWgContentNamespaces() {
-               // NS_MAIN is a content namespace per DefaultSettings.php
-               // and per function definition.
-               $this->assertIsContent( NS_MAIN );
+       public function testIsContentAdvanced() {
+               global $wgContentNamespaces;
 
-               // Tests that user defined namespace #252 is not content:
+               // Test that user defined namespace #252 is not content
                $this->assertIsNotContent( 252 );
 
-               # @todo FIXME: Is global saving really required for PHPUnit?
                // Bless namespace # 252 as a content namespace
-               global $wgContentNamespaces;
-               $savedGlobal = $wgContentNamespaces;
                $wgContentNamespaces[] = 252;
+
                $this->assertIsContent( 252 );
 
                // Makes sure NS_MAIN was not impacted
                $this->assertIsContent( NS_MAIN );
-
-               // Restore global
-               $wgContentNamespaces = $savedGlobal;
-
-               // Verify namespaces after global restauration
-               $this->assertIsContent( NS_MAIN  );
-               $this->assertIsNotContent( 252 );
        }
 
        public function testIsWatchable() {
@@ -356,31 +316,21 @@ class MWNamespaceTest extends MediaWikiTestCase {
        }
 
        public function testHasSubpages() {
+               global $wgNamespacesWithSubpages;
+
                // Special namespaces:
                $this->assertHasNotSubpages( NS_MEDIA   );
                $this->assertHasNotSubpages( NS_SPECIAL );
 
-               // namespaces without subpages
-               # save up global
-               global $wgNamespacesWithSubpages;
-               $saved = null;
-               if( array_key_exists( NS_MAIN, $wgNamespacesWithSubpages ) ) {
-                       $saved = $wgNamespacesWithSubpages[NS_MAIN];
-                       unset( $wgNamespacesWithSubpages[NS_MAIN] );
-               }
-
+               // Namespaces without subpages
                $this->assertHasNotSubpages( NS_MAIN );
 
                $wgNamespacesWithSubpages[NS_MAIN] = true;
                $this->assertHasSubpages( NS_MAIN );
+
                $wgNamespacesWithSubpages[NS_MAIN] = false;
                $this->assertHasNotSubpages( NS_MAIN );
 
-               # restore global
-               if( $saved !== null ) {
-                       $wgNamespacesWithSubpages[NS_MAIN] = $saved;
-               }
-
                // Some namespaces with subpages
                $this->assertHasSubpages( NS_TALK      );
                $this->assertHasSubpages( NS_USER      );
@@ -390,22 +340,25 @@ class MWNamespaceTest extends MediaWikiTestCase {
        /**
         */
        public function testGetContentNamespaces() {
+               global $wgContentNamespaces;
+
                $this->assertEquals(
                        array( NS_MAIN ),
                        MWNamespace::getcontentNamespaces(),
                        '$wgContentNamespaces is an array with only NS_MAIN by default'
                );
 
-               global $wgContentNamespaces;
 
-               $saved = $wgContentNamespaces;
                # test !is_array( $wgcontentNamespaces )
                $wgContentNamespaces = '';
                $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+
                $wgContentNamespaces = false;
                $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+
                $wgContentNamespaces = null;
                $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
+
                $wgContentNamespaces = 5;
                $this->assertEquals( NS_MAIN, MWNamespace::getcontentNamespaces() );
 
@@ -433,8 +386,6 @@ class MWNamespaceTest extends MediaWikiTestCase {
                        array( NS_MAIN, NS_USER, NS_CATEGORY ),
                        MWNamespace::getcontentNamespaces()
                );
-
-               $wgContentNamespaces = $saved;
        }
 
        /**
@@ -504,24 +455,20 @@ class MWNamespaceTest extends MediaWikiTestCase {
         */
        public function testIsCapitalizedWithWgCapitalLinks() {
                global $wgCapitalLinks;
-               // Save the global to easily reset to MediaWiki default settings
-               $savedGlobal = $wgCapitalLinks;
 
-               $wgCapitalLinks = true;
                $this->assertIsCapitalized( NS_PROJECT      );
                $this->assertIsCapitalized( NS_PROJECT_TALK );
 
                $wgCapitalLinks = false;
+
                // hardcoded namespaces (see above function) are still capitalized:
                $this->assertIsCapitalized( NS_SPECIAL   );
                $this->assertIsCapitalized( NS_USER      );
                $this->assertIsCapitalized( NS_MEDIAWIKI );
+
                // setting is correctly applied
                $this->assertIsNotCapitalized( NS_PROJECT      );
                $this->assertIsNotCapitalized( NS_PROJECT_TALK );
-
-               // reset global state:
-               $wgCapitalLinks = $savedGlobal;
        }
 
        /**
@@ -532,12 +479,11 @@ class MWNamespaceTest extends MediaWikiTestCase {
         */
        public function testIsCapitalizedWithWgCapitalLinkOverrides() {
                global $wgCapitalLinkOverrides;
-               // Save the global to easily reset to MediaWiki default settings
-               $savedGlobal = $wgCapitalLinkOverrides;
 
                // Test default settings
                $this->assertIsCapitalized( NS_PROJECT      );
                $this->assertIsCapitalized( NS_PROJECT_TALK );
+
                // hardcoded namespaces (see above function) are capitalized:
                $this->assertIsCapitalized( NS_SPECIAL   );
                $this->assertIsCapitalized( NS_USER      );
@@ -547,20 +493,19 @@ class MWNamespaceTest extends MediaWikiTestCase {
                $wgCapitalLinkOverrides[NS_SPECIAL]   = false;
                $wgCapitalLinkOverrides[NS_USER]      = false;
                $wgCapitalLinkOverrides[NS_MEDIAWIKI] = false;
+
                $this->assertIsCapitalized( NS_SPECIAL   );
                $this->assertIsCapitalized( NS_USER      );
                $this->assertIsCapitalized( NS_MEDIAWIKI );
 
-               $wgCapitalLinkOverrides = $savedGlobal;
                $wgCapitalLinkOverrides[NS_PROJECT] = false;
                $this->assertIsNotCapitalized( NS_PROJECT );
+
                $wgCapitalLinkOverrides[NS_PROJECT] = true ;
                $this->assertIsCapitalized( NS_PROJECT );
-               unset(  $wgCapitalLinkOverrides[NS_PROJECT] );
-               $this->assertIsCapitalized( NS_PROJECT );
 
-               // reset global state:
-               $wgCapitalLinkOverrides = $savedGlobal;
+               unset( $wgCapitalLinkOverrides[NS_PROJECT] );
+               $this->assertIsCapitalized( NS_PROJECT );
        }
 
        public function testHasGenderDistinction() {
@@ -578,10 +523,10 @@ class MWNamespaceTest extends MediaWikiTestCase {
 
        public function testIsNonincludable() {
                global $wgNonincludableNamespaces;
+
                $wgNonincludableNamespaces = array( NS_USER );
 
                $this->assertTrue( MWNamespace::isNonincludable( NS_USER ) );
-
                $this->assertFalse( MWNamespace::isNonincludable( NS_TEMPLATE ) );
        }
 
index 20181fd..22450dc 100644 (file)
@@ -1,6 +1,14 @@
 <?php
 
 class MessageTest extends MediaWikiLangTestCase {
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgLang' => Language::factory( 'en' ),
+                       'wgForceUIMsgAsContentMsg' => array(),
+               ) );
+       }
 
        function testExists() {
                $this->assertTrue( wfMessage( 'mainpage' )->exists() );
@@ -43,16 +51,11 @@ class MessageTest extends MediaWikiLangTestCase {
 
        function testInContentLanguage() {
                global $wgLang, $wgForceUIMsgAsContentMsg;
-               $oldLang = $wgLang;
                $wgLang = Language::factory( 'fr' );
 
                $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg disabled' );
                $wgForceUIMsgAsContentMsg['testInContentLanguage'] = 'mainpage';
                $this->assertEquals( 'Accueil', wfMessage( 'mainpage' )->inContentLanguage()->plain(), 'ForceUIMsg enabled' );
-
-               /* Restore globals */
-               $wgLang = $oldLang;
-               unset( $wgForceUIMsgAsContentMsg['testInContentLanguage'] );
        }
 
        /**
diff --git a/tests/phpunit/includes/MockOutputPage.php b/tests/phpunit/includes/MockOutputPage.php
deleted file mode 100644 (file)
index bdee483..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-class MockOutputPage {
-
-       public $message;
-
-       function debug( $message ) {
-               $this->message = "JAJA is a stupid error message. Anyway, here's your message: $message";
-       }
-}
index 59c955f..5b2adaf 100644 (file)
@@ -5,15 +5,19 @@ class ParserOptionsTest extends MediaWikiTestCase {
        private $popts;
        private $pcache;
 
-       function setUp() {
-               global $wgContLang, $wgUser, $wgLanguageCode;
-               $wgContLang = Language::factory( $wgLanguageCode );
-               $this->popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
-               $this->pcache = ParserCache::singleton();
-       }
+       protected function setUp() {
+               global $wgLanguageCode, $wgUser;
+               parent::setUp();
+
+               $langObj = Language::factory( $wgLanguageCode );
+
+               $this->setMwGlobals( array(
+                       'wgContLang' => $langObj,
+                       'wgUseDynamicDates' => true,
+               ) );
 
-       function tearDown() {
-               parent::tearDown();
+               $this->popts = ParserOptions::newFromUserAndLang( $wgUser, $langObj );
+               $this->pcache = ParserCache::singleton();
        }
 
        /**
@@ -21,14 +25,12 @@ class ParserOptionsTest extends MediaWikiTestCase {
         * @group Database
         */
        function testGetParserCacheKeyWithDynamicDates() {
-               global $wgUseDynamicDates;
-               $wgUseDynamicDates = true;
-
                $title = Title::newFromText( "Some test article" );
                $page = WikiPage::factory( $title );
 
                $pcacheKeyBefore = $this->pcache->getKey( $page, $this->popts );
                $this->assertNotNull( $this->popts->getDateFormat() );
+
                $pcacheKeyAfter = $this->pcache->getKey( $page, $this->popts );
                $this->assertEquals( $pcacheKeyBefore, $pcacheKeyAfter );
        }
index f627458..4487210 100644 (file)
@@ -5,7 +5,7 @@
 
 class PathRouterTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                $router = new PathRouter;
                $router->add("/wiki/$1");
                $this->basicRouter = $router;
@@ -182,7 +182,7 @@ class PathRouterTest extends MediaWikiTestCase {
                $this->assertEquals( $matches, array( 'title' => "Title_With Space" ) );
        }
 
-       public function dataRegexpChars() {
+       public static function provideRegexpChars() {
                return array(
                        array( "$" ),
                        array( "$1" ),
@@ -193,7 +193,7 @@ class PathRouterTest extends MediaWikiTestCase {
 
        /**
         * Make sure the router doesn't break on special characters like $ used in regexp replacements
-        * @dataProvider dataRegexpChars
+        * @dataProvider provideRegexpChars
         */
        public function testRegexpChars( $char ) {
                $matches = $this->basicRouter->parse( "/wiki/$char" );
index 664f04a..1a8a4cc 100644 (file)
@@ -1,32 +1,33 @@
 <?php
 
 class PreferencesTest extends MediaWikiTestCase {
-
        /** Array of User objects */
-       private $users ;
-       private $context ;
+       private $prefUsers;
+       private $context;
 
        function __construct() {
                parent::__construct();
-               global $wgEnableEmail;
 
-               $this->users['noemail'] = new User;
+               $this->prefUsers['noemail'] = new User;
 
-               $this->users['notauth'] = new User;
-               $this->users['notauth']
+               $this->prefUsers['notauth'] = new User;
+               $this->prefUsers['notauth']
                        ->setEmail( 'noauth@example.org' );
 
-               $this->users['auth']    = new User;
-               $this->users['auth']
+               $this->prefUsers['auth']    = new User;
+               $this->prefUsers['auth']
                        ->setEmail( 'noauth@example.org' );
-               $this->users['auth']
+               $this->prefUsers['auth']
                        ->setEmailAuthenticationTimestamp( 1330946623 );
 
                $this->context = new RequestContext;
                $this->context->setTitle( Title::newFromText('PreferencesTest') );
+       }
+
+       protected function setUp() {
+               parent::setUp();
 
-               //some tests depends on email setting
-               $wgEnableEmail = true;
+               $this->setMwGlobals( 'wgEnableEmail', true );
        }
 
        /**
@@ -63,16 +64,14 @@ class PreferencesTest extends MediaWikiTestCase {
                $this->assertEquals( 'mw-email-authenticated', $prefs['emailaddress']['cssclass'] );
        }
 
-
        /** Helper */
        function prefsFor( $user_key ) {
                $preferences = array();
                Preferences::profilePreferences(
-                       $this->users[$user_key]
+                       $this->prefUsers[$user_key]
                        , $this->context
                        , $preferences
                );
                return $preferences;
        }
-
 }
index fbf271c..a1f808c 100644 (file)
@@ -220,7 +220,8 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @todo: Emulate these edits somehow and extract
         * raw edit summary from RecentChange object
         * --
-
+        */
+/*
        function testIrcMsgForBlankingAES() {
                // $this->context->msg( 'autosumm-blank', .. );
        }
@@ -237,8 +238,7 @@ class RecentChangeTest extends MediaWikiTestCase {
                // $this->context->msg( 'undo-summary', .. );
        }
 
-        * --
-        */
+*/
 
        /**
         * @param $expected String Expected IRC text without colors codes
index ab70483..893d260 100644 (file)
@@ -15,7 +15,7 @@ class ResourceLoaderTest extends MediaWikiTestCase {
        }
 
        /* Provider Methods */
-       public function provideValidModules() {
+       public static function provideValidModules() {
                return array(
                        array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
                );
@@ -61,7 +61,7 @@ class ResourceLoaderTest extends MediaWikiTestCase {
                $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
        }
 
-       public function providePackedModules() {
+       public static function providePackedModules() {
                return array(
                        array(
                                'Example from makePackedModulesString doc comment',
index 6d82d0c..e06de7c 100644 (file)
@@ -3,11 +3,18 @@
 /**
  * Test class for Revision storage.
  *
+ * @group ContentHandler
  * @group Database
  * ^--- important, causes temporary tables to be used instead of the real database
+ *
+ * @group medium
+ * ^--- important, causes tests not to fail with timeout
  */
 class RevisionStorageTest extends MediaWikiTestCase {
 
+       /**
+        * @var WikiPage $the_page
+        */
        var $the_page;
 
        function  __construct( $name = null, array $data = array(), $dataName = '' ) {
@@ -32,11 +39,34 @@ class RevisionStorageTest extends MediaWikiTestCase {
        }
 
        public function setUp() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               $wgExtraNamespaces[ 12312 ] = 'Dummy';
+               $wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
+
+               $wgNamespaceContentModels[ 12312 ] = 'DUMMY';
+               $wgContentHandlers[ 'DUMMY' ] = 'DummyContentHandlerForTesting';
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
                if ( !$this->the_page ) {
-                       $this->the_page = $this->createPage( 'RevisionStorageTest_the_page', "just a dummy page" );
+                       $this->the_page = $this->createPage( 'RevisionStorageTest_the_page', "just a dummy page", CONTENT_MODEL_WIKITEXT );
                }
        }
 
+       public function tearDown() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               unset( $wgExtraNamespaces[ 12312 ] );
+               unset( $wgExtraNamespaces[ 12313 ] );
+
+               unset( $wgNamespaceContentModels[ 12312 ] );
+               unset( $wgContentHandlers[ 'DUMMY' ] );
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+       }
+
        protected function makeRevision( $props = null ) {
                if ( $props === null ) $props = array();
 
@@ -60,7 +90,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
                        $page->doDeleteArticle( "done" );
                }
 
-               $page->doEdit( $text, "testing", EDIT_NEW );
+               $content = ContentHandler::makeContent( $text, $page->getTitle(), $model );
+               $page->doEditContent( $content, "testing", EDIT_NEW );
 
                return $page;
        }
@@ -72,6 +103,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertEquals( $orig->getPage(), $rev->getPage() );
                $this->assertEquals( $orig->getTimestamp(), $rev->getTimestamp() );
                $this->assertEquals( $orig->getUser(), $rev->getUser() );
+               $this->assertEquals( $orig->getContentModel(), $rev->getContentModel() );
+               $this->assertEquals( $orig->getContentFormat(), $rev->getContentFormat() );
                $this->assertEquals( $orig->getSha1(), $rev->getSha1() );
        }
 
@@ -119,7 +152,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testNewFromArchiveRow()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testNewFromArchiveRow', 'Lorem Ipsum' );
+               $page = $this->createPage( 'RevisionStorageTest_testNewFromArchiveRow', 'Lorem Ipsum', CONTENT_MODEL_WIKITEXT );
                $orig = $page->getRevision();
                $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
 
@@ -152,10 +185,10 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testFetchRevision()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testFetchRevision', 'one' );
+               $page = $this->createPage( 'RevisionStorageTest_testFetchRevision', 'one', CONTENT_MODEL_WIKITEXT );
                $id1 = $page->getRevision()->getId();
 
-               $page->doEdit( 'two', 'second rev' );
+               $page->doEditContent( new WikitextContent( 'two' ), 'second rev' );
                $id2 = $page->getRevision()->getId();
 
                $res = Revision::fetchRevision( $page->getTitle() );
@@ -176,12 +209,23 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testSelectFields()
        {
+               global $wgContentHandlerUseDB;
+
                $fields = Revision::selectFields();
 
                $this->assertTrue( in_array( 'rev_id', $fields ), 'missing rev_id in list of fields');
                $this->assertTrue( in_array( 'rev_page', $fields ), 'missing rev_page in list of fields');
                $this->assertTrue( in_array( 'rev_timestamp', $fields ), 'missing rev_timestamp in list of fields');
                $this->assertTrue( in_array( 'rev_user', $fields ), 'missing rev_user in list of fields');
+
+               if ( $wgContentHandlerUseDB ) {
+                       $this->assertTrue( in_array( 'rev_content_model', $fields ),
+                                                               'missing rev_content_model in list of fields');
+                       $this->assertTrue( in_array( 'rev_content_format', $fields ),
+                                                               'missing rev_content_format in list of fields');
+               } else {
+                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
+               }
        }
 
        /**
@@ -202,12 +246,25 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testGetText()
        {
+               $this->hideDeprecated( 'Revision::getText' );
+
                $orig = $this->makeRevision( array( 'text' => 'hello hello.' ) );
                $rev = Revision::newFromId( $orig->getId() );
 
                $this->assertEquals( 'hello hello.', $rev->getText() );
        }
 
+       /**
+        * @covers Revision::getContent
+        */
+       public function testGetContent()
+       {
+               $orig = $this->makeRevision( array( 'text' => 'hello hello.' ) );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               $this->assertEquals( 'hello hello.', $rev->getContent()->getNativeData() );
+       }
+
        /**
         * @covers Revision::revText
         */
@@ -225,17 +282,57 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testGetRawText()
        {
+               $this->hideDeprecated( 'Revision::getRawText' );
+
                $orig = $this->makeRevision( array( 'text' => 'hello hello raw.' ) );
                $rev = Revision::newFromId( $orig->getId() );
 
                $this->assertEquals( 'hello hello raw.', $rev->getRawText() );
        }
+
+       /**
+        * @covers Revision::getContentModel
+        */
+       public function testGetContentModel()
+       {
+               global $wgContentHandlerUseDB;
+
+               if ( !$wgContentHandlerUseDB ) {
+                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
+               }
+
+               $orig = $this->makeRevision( array( 'text' => 'hello hello.',
+                                                                                       'content_model' => CONTENT_MODEL_JAVASCRIPT ) );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       }
+
+       /**
+        * @covers Revision::getContentFormat
+        */
+       public function testGetContentFormat()
+       {
+               global $wgContentHandlerUseDB;
+
+               if ( !$wgContentHandlerUseDB ) {
+                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
+               }
+
+               $orig = $this->makeRevision( array( 'text' => 'hello hello.',
+                                                                                       'content_model' => CONTENT_MODEL_JAVASCRIPT,
+                                                                                       'content_format' => CONTENT_FORMAT_JAVASCRIPT ) );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               $this->assertEquals( CONTENT_FORMAT_JAVASCRIPT, $rev->getContentFormat() );
+       }
+
        /**
         * @covers Revision::isCurrent
         */
        public function testIsCurrent()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testIsCurrent', 'Lorem Ipsum' );
+               $page = $this->createPage( 'RevisionStorageTest_testIsCurrent', 'Lorem Ipsum', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
                # @todo: find out if this should be true
@@ -244,7 +341,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $rev1x = Revision::newFromId( $rev1->getId() );
                $this->assertTrue( $rev1x->isCurrent() );
 
-               $page->doEdit( 'Bla bla', 'second rev' );
+               $page->doEditContent( ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ), 'second rev' );
                $rev2 = $page->getRevision();
 
                # @todo: find out if this should be true
@@ -262,12 +359,13 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testGetPrevious()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testGetPrevious', 'Lorem Ipsum testGetPrevious' );
+               $page = $this->createPage( 'RevisionStorageTest_testGetPrevious', 'Lorem Ipsum testGetPrevious', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
                $this->assertNull( $rev1->getPrevious() );
 
-               $page->doEdit( 'Bla bla', 'second rev testGetPrevious' );
+               $page->doEditContent( ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                                                               'second rev testGetPrevious' );
                $rev2 = $page->getRevision();
 
                $this->assertNotNull( $rev2->getPrevious() );
@@ -279,12 +377,13 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testGetNext()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testGetNext', 'Lorem Ipsum testGetNext' );
+               $page = $this->createPage( 'RevisionStorageTest_testGetNext', 'Lorem Ipsum testGetNext', CONTENT_MODEL_WIKITEXT );
                $rev1 = $page->getRevision();
 
                $this->assertNull( $rev1->getNext() );
 
-               $page->doEdit( 'Bla bla', 'second rev testGetNext' );
+               $page->doEditContent( ContentHandler::makeContent( 'Bla bla', $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                                                               'second rev testGetNext' );
                $rev2 = $page->getRevision();
 
                $this->assertNotNull( $rev1->getNext() );
@@ -296,14 +395,122 @@ class RevisionStorageTest extends MediaWikiTestCase {
         */
        public function testNewNullRevision()
        {
-               $page = $this->createPage( 'RevisionStorageTest_testNewNullRevision', 'some testing text' );
+               $page = $this->createPage( 'RevisionStorageTest_testNewNullRevision', 'some testing text', CONTENT_MODEL_WIKITEXT );
                $orig = $page->getRevision();
 
                $dbw = wfGetDB( DB_MASTER );
                $rev = Revision::newNullRevision( $dbw, $page->getId(), 'a null revision', false );
 
-               $this->assertNotEquals( $orig->getId(), $rev->getId(), 'new null revision shold have a different id from the original revision' );
-               $this->assertEquals( $orig->getTextId(), $rev->getTextId(), 'new null revision shold have the same text id as the original revision' );
-               $this->assertEquals( 'some testing text', $rev->getText() );
+               $this->assertNotEquals( $orig->getId(), $rev->getId(),
+                                                               'new null revision shold have a different id from the original revision' );
+               $this->assertEquals( $orig->getTextId(), $rev->getTextId(),
+                                                               'new null revision shold have the same text id as the original revision' );
+               $this->assertEquals( 'some testing text', $rev->getContent()->getNativeData() );
+       }
+
+       public static function provideUserWasLastToEdit() {
+               return array(
+                       array( #0
+                               3, true, # actually the last edit
+                       ),
+                       array( #1
+                               2, true, # not the current edit, but still by this user
+                       ),
+                       array( #2
+                               1, false, # edit by another user
+                       ),
+                       array( #3
+                               0, false, # first edit, by this user, but another user edited in the mean time
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUserWasLastToEdit
+        */
+       public function testUserWasLastToEdit( $sinceIdx, $expectedLast ) {
+               $userA = \User::newFromName( "RevisionStorageTest_userA" );
+               $userB = \User::newFromName( "RevisionStorageTest_userB" );
+
+               if ( $userA->getId() === 0 ) {
+                       $userA = \User::createNew( $userA->getName() );
+               }
+
+               if ( $userB->getId() === 0 ) {
+                       $userB = \User::createNew( $userB->getName() );
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $revisions = array();
+
+               // create revisions -----------------------------
+               $page = WikiPage::factory( Title::newFromText( 'RevisionStorageTest_testUserWasLastToEdit' ) );
+
+               # zero
+               $revisions[0] = new Revision( array(
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(), // we need the title to determine the page's default content model
+                       'timestamp' => '20120101000000',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit zero'
+               ) );
+               $revisions[0]->insertOn( $dbw );
+
+               # one
+               $revisions[1] = new Revision( array(
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(), // still need the title, because $page->getId() is 0 (there's no entry in the page table)
+                       'timestamp' => '20120101000100',
+                       'user' => $userA->getId(),
+                       'text' => 'one',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit one'
+               ) );
+               $revisions[1]->insertOn( $dbw );
+
+               # two
+               $revisions[2] = new Revision( array(
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userB->getId(),
+                       'text' => 'two',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit two'
+               ) );
+               $revisions[2]->insertOn( $dbw );
+
+               # three
+               $revisions[3] = new Revision( array(
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000300',
+                       'user' => $userA->getId(),
+                       'text' => 'three',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit three'
+               ) );
+               $revisions[3]->insertOn( $dbw );
+
+               # four
+               $revisions[4] = new Revision( array(
+                       'page' => $page->getId(),
+                       'title' => $page->getTitle(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'content_model' => CONTENT_MODEL_WIKITEXT,
+                       'summary' => 'edit four'
+               ) );
+               $revisions[4]->insertOn( $dbw );
+
+               // test it ---------------------------------
+               $since = $revisions[ $sinceIdx ]->getTimestamp();
+
+               $wasLast = Revision::userWasLastToEdit( $dbw, $page->getId(), $userA->getId(), $since );
+
+               $this->assertEquals( $expectedLast, $wasLast );
        }
 }
diff --git a/tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php b/tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php
new file mode 100644 (file)
index 0000000..3dfaa8d
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ * ^--- important, causes temporary tables to be used instead of the real database
+ */
+class RevisionTest_ContentHandlerUseDB extends RevisionStorageTest {
+       var $saveContentHandlerNoDB = null;
+
+       function setUp() {
+               global $wgContentHandlerUseDB;
+
+               $this->saveContentHandlerNoDB = $wgContentHandlerUseDB;
+
+               $wgContentHandlerUseDB = false;
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               $page_table = $dbw->tableName( 'page' );
+               $revision_table = $dbw->tableName( 'revision' );
+               $archive_table = $dbw->tableName( 'archive' );
+
+               if ( $dbw->fieldExists( $page_table, 'page_content_model' ) ) {
+                       $dbw->query( "alter table $page_table drop column page_content_model" );
+                       $dbw->query( "alter table $revision_table drop column rev_content_model" );
+                       $dbw->query( "alter table $revision_table drop column rev_content_format" );
+                       $dbw->query( "alter table $archive_table drop column ar_content_model" );
+                       $dbw->query( "alter table $archive_table drop column ar_content_format" );
+               }
+
+               parent::setUp();
+       }
+
+       function tearDown() {
+               global $wgContentHandlerUseDB;
+
+               parent::tearDown();
+
+               $wgContentHandlerUseDB = $this->saveContentHandlerNoDB;
+       }
+
+       /**
+        * @covers Revision::selectFields
+        */
+       public function testSelectFields()
+       {
+               $fields = Revision::selectFields();
+
+               $this->assertTrue( in_array( 'rev_id', $fields ), 'missing rev_id in list of fields');
+               $this->assertTrue( in_array( 'rev_page', $fields ), 'missing rev_page in list of fields');
+               $this->assertTrue( in_array( 'rev_timestamp', $fields ), 'missing rev_timestamp in list of fields');
+               $this->assertTrue( in_array( 'rev_user', $fields ), 'missing rev_user in list of fields');
+
+               $this->assertFalse( in_array( 'rev_content_model', $fields ), 'missing rev_content_model in list of fields');
+               $this->assertFalse( in_array( 'rev_content_format', $fields ), 'missing rev_content_format in list of fields');
+       }
+
+       /**
+        * @covers Revision::getContentModel
+        */
+       public function testGetContentModel()
+       {
+               $orig = $this->makeRevision( array( 'text' => 'hello hello.', 'content_model' => CONTENT_MODEL_JAVASCRIPT ) );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               //NOTE: database fields for the content_model are disabled, so the model name is not retained.
+               //      We expect to get the default here instead of what was suppleid when creating the revision.
+               $this->assertEquals( CONTENT_MODEL_WIKITEXT, $rev->getContentModel() );
+       }
+
+
+       /**
+        * @covers Revision::getContentFormat
+        */
+       public function testGetContentFormat()
+       {
+               $orig = $this->makeRevision( array( 'text' => 'hello hello.', 'content_model' => CONTENT_MODEL_JAVASCRIPT, 'content_format' => 'text/javascript' ) );
+               $rev = Revision::newFromId( $orig->getId() );
+
+               $this->assertEquals( CONTENT_FORMAT_WIKITEXT, $rev->getContentFormat() );
+       }
+
+}
+
+
index d7654db..00e7119 100644 (file)
@@ -1,25 +1,56 @@
 <?php
 
+/**
+ * @group ContentHandler
+ */
 class RevisionTest extends MediaWikiTestCase {
-       var $saveGlobals = array();
-
-       function setUp() {
+       protected function setUp() {
                global $wgContLang;
-               $wgContLang = Language::factory( 'en' );
-               $globalSet = array(
+
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgContLang' => Language::factory( 'en' ),
                        'wgLegacyEncoding' => false,
                        'wgCompressRevisions' => false,
+
+                       'wgContentHandlerTextFallback' => 'ignore',
+               ) );
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgExtraNamespaces',
+                       array(
+                               12312 => 'Dummy',
+                               12313 => 'Dummy_talk',
+                       )
                );
-               foreach ( $globalSet as $var => $data ) {
-                       $this->saveGlobals[$var] = $GLOBALS[$var];
-                       $GLOBALS[$var] = $data;
-               }
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgNamespaceContentModels',
+                       array(
+                               12312 => 'testing',
+                       )
+               );
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgContentHandlers',
+                       array(
+                               'testing' => 'DummyContentHandlerForTesting',
+                               'RevisionTestModifyableContent' => 'RevisionTestModifyableContentHandler',
+                       )
+               );
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
        }
 
        function tearDown() {
-               foreach ( $this->saveGlobals as $var => $data ) {
-                       $GLOBALS[$var] = $data;
-               }
+               global $wgContLang;
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+
+               parent::tearDown();
        }
 
        function testGetRevisionText() {
@@ -107,7 +138,10 @@ class RevisionTest extends MediaWikiTestCase {
        }
 
        function testCompressRevisionTextUtf8Gzip() {
-               $GLOBALS['wgCompressRevisions'] = true;
+               global $wgCompressRevisions;
+
+               $wgCompressRevisions = true;
+
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
                $row->old_flags = Revision::compressRevisionText( $row->old_text );
@@ -120,6 +154,298 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        Revision::getRevisionText( $row ), "getRevisionText" );
        }
+
+       # =================================================================================================================
+
+       /**
+        * @param string $text
+        * @param string $title
+        * @param string $model
+        * @return Revision
+        */
+       function newTestRevision( $text, $title = "Test", $model = CONTENT_MODEL_WIKITEXT, $format = null ) {
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
+
+               $content = ContentHandler::makeContent( $text, $title, $model, $format );
+
+               $rev = new Revision(
+                       array(
+                               'id'         => 42,
+                               'page'       => 23,
+                               'title'      => $title,
+
+                               'content'    => $content,
+                               'length'     => $content->getSize(),
+                               'comment'    => "testing",
+                               'minor_edit' => false,
+
+                               'content_format' => $format,
+                       )
+               );
+
+               return $rev;
+       }
+
+       function dataGetContentModel() {
+               //NOTE: we expect the help namespace to always contain wikitext
+               return array(
+                       array( 'hello world', 'Help:Hello', null, null, CONTENT_MODEL_WIKITEXT ),
+                       array( 'hello world', 'User:hello/there.css', null, null, CONTENT_MODEL_CSS ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, "testing" ),
+               );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetContentModel
+        */
+       function testGetContentModel( $text, $title, $model, $format, $expectedModel ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedModel, $rev->getContentModel() );
+       }
+
+       function dataGetContentFormat() {
+               //NOTE: we expect the help namespace to always contain wikitext
+               return array(
+                       array( 'hello world', 'Help:Hello', null, null, CONTENT_FORMAT_WIKITEXT ),
+                       array( 'hello world', 'Help:Hello', CONTENT_MODEL_CSS, null, CONTENT_FORMAT_CSS ),
+                       array( 'hello world', 'User:hello/there.css', null, null, CONTENT_FORMAT_CSS ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, "testing" ),
+               );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetContentFormat
+        */
+       function testGetContentFormat( $text, $title, $model, $format, $expectedFormat ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedFormat, $rev->getContentFormat() );
+       }
+
+       function dataGetContentHandler() {
+               //NOTE: we expect the help namespace to always contain wikitext
+               return array(
+                       array( 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ),
+                       array( 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ),
+               );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetContentHandler
+        */
+       function testGetContentHandler( $text, $title, $model, $format, $expectedClass ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedClass, get_class( $rev->getContentHandler() ) );
+       }
+
+       function dataGetContent() {
+               //NOTE: we expect the help namespace to always contain wikitext
+               return array(
+                       array( 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
+                       array( serialize('hello world'), 'Hello', "testing", null, Revision::FOR_PUBLIC, serialize('hello world') ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, serialize('hello world') ),
+               );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetContent
+        */
+       function testGetContent( $text, $title, $model, $format, $audience, $expectedSerialization ) {
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+               $content = $rev->getContent( $audience );
+
+               $this->assertEquals( $expectedSerialization, is_null( $content ) ? null : $content->serialize( $format ) );
+       }
+
+       function dataGetText() {
+               //NOTE: we expect the help namespace to always contain wikitext
+               return array(
+                       array( 'hello world', 'Help:Hello', null, null, Revision::FOR_PUBLIC, 'hello world' ),
+                       array( serialize('hello world'), 'Hello', "testing", null, Revision::FOR_PUBLIC, null ),
+                       array( serialize('hello world'), 'Dummy:Hello', null, null, Revision::FOR_PUBLIC, null ),
+               );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetText
+        */
+       function testGetText( $text, $title, $model, $format, $audience, $expectedText ) {
+               $this->hideDeprecated( 'Revision::getText' );
+
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedText, $rev->getText( $audience ) );
+       }
+
+       /**
+        * @group Database
+        * @dataProvider dataGetText
+        */
+       function testGetRawText( $text, $title, $model, $format, $audience, $expectedText ) {
+               $this->hideDeprecated( 'Revision::getRawText' );
+
+               $rev = $this->newTestRevision( $text, $title, $model, $format );
+
+               $this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
+       }
+
+
+       public function dataGetSize( ) {
+               return array(
+                       array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
+                       array( serialize( "hello world." ), "testing", 12 ),
+               );
+       }
+
+       /**
+        * @covers Revision::getSize
+        * @group Database
+        * @dataProvider dataGetSize
+        */
+       public function testGetSize( $text, $model, $expected_size )
+       {
+               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSize', $model );
+               $this->assertEquals( $expected_size, $rev->getSize() );
+       }
+
+       public function dataGetSha1( ) {
+               return array(
+                       array( "hello world.", CONTENT_MODEL_WIKITEXT, Revision::base36Sha1( "hello world." ) ),
+                       array( serialize( "hello world." ), "testing", Revision::base36Sha1( serialize( "hello world." ) ) ),
+               );
+       }
+
+       /**
+        * @covers Revision::getSha1
+        * @group Database
+        * @dataProvider dataGetSha1
+        */
+       public function testGetSha1( $text, $model, $expected_hash )
+       {
+               $rev = $this->newTestRevision( $text, 'RevisionTest_testGetSha1', $model );
+               $this->assertEquals( $expected_hash, $rev->getSha1() );
+       }
+
+       public function testConstructWithText() {
+               $this->hideDeprecated( "Revision::getText" );
+
+               $rev = new Revision( array(
+                                         'text' => 'hello world.',
+                                         'content_model' => CONTENT_MODEL_JAVASCRIPT
+                                    ));
+
+               $this->assertNotNull( $rev->getText(), 'no content text' );
+               $this->assertNotNull( $rev->getContent(), 'no content object available' );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       }
+
+       public function testConstructWithContent() {
+               $this->hideDeprecated( "Revision::getText" );
+
+               $title = Title::newFromText( 'RevisionTest_testConstructWithContent' );
+
+               $rev = new Revision( array(
+                                         'content' => ContentHandler::makeContent( 'hello world.', $title, CONTENT_MODEL_JAVASCRIPT ),
+                                    ));
+
+               $this->assertNotNull( $rev->getText(), 'no content text' );
+               $this->assertNotNull( $rev->getContent(), 'no content object available' );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
+       }
+
+       /**
+        * Tests whether $rev->getContent() returns a clone when needed.
+        *
+        * @group Database
+        */
+       function testGetContentClone( ) {
+               $content = new RevisionTestModifyableContent( "foo" );
+
+               $rev = new Revision(
+                       array(
+                               'id'         => 42,
+                               'page'       => 23,
+                               'title'      => Title::newFromText( "testGetContentClone_dummy" ),
+
+                               'content'    => $content,
+                               'length'     => $content->getSize(),
+                               'comment'    => "testing",
+                               'minor_edit' => false,
+                       )
+               );
+
+               $content = $rev->getContent( Revision::RAW );
+               $content->setText( "bar" );
+
+               $content2 = $rev->getContent( Revision::RAW );
+               $this->assertNotSame( $content, $content2, "expected a clone" ); // content is mutable, expect clone
+               $this->assertEquals( "foo", $content2->getText() ); // clone should contain the original text
+
+               $content2->setText( "bla bla" );
+               $this->assertEquals( "bar", $content->getText() ); // clones should be independent
+       }
+
+
+       /**
+        * Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
+        *
+        * @group Database
+        */
+       function testGetContentUncloned() {
+               $rev = $this->newTestRevision( "hello", "testGetContentUncloned_dummy", CONTENT_MODEL_WIKITEXT );
+               $content = $rev->getContent( Revision::RAW );
+               $content2 = $rev->getContent( Revision::RAW );
+
+               // for immutable content like wikitext, this should be the same object
+               $this->assertSame( $content, $content2 );
+       }
+
+}
+
+class RevisionTestModifyableContent extends TextContent {
+       public function __construct( $text ) {
+               parent::__construct( $text, "RevisionTestModifyableContent" );
+       }
+
+       public function copy( ) {
+               return new RevisionTestModifyableContent( $this->mText );
+       }
+
+       public function getText() {
+               return $this->mText;
+       }
+
+       public function setText( $text ) {
+               $this->mText = $text;
+       }
+
 }
 
+class RevisionTestModifyableContentHandler extends TextContentHandler {
 
+       public function __construct( ) {
+               parent::__construct( "RevisionTestModifyableContent", array( CONTENT_FORMAT_TEXT ) );
+       }
+
+       public function unserializeContent( $text, $format = null ) {
+               $this->checkFormat( $format );
+
+               return new RevisionTestModifyableContent( $text );
+       }
+
+       public function makeEmptyContent() {
+               return new RevisionTestModifyableContent( '' );
+       }
+}
index 59ba0a0..2f55de4 100644 (file)
@@ -5,18 +5,23 @@ class TestSample extends MediaWikiLangTestCase {
        /**
         * Anything that needs to happen before your tests should go here.
         */
-       function setUp() {
-               global $wgContLang;
+       protected function setUp() {
+               // Be sure to do call the parent setup and teardown functions.
+               // This makes sure that all the various cleanup and restorations
+               // happen as they should (including the restoration for setMwGlobals).
                parent::setUp();
 
-               /* For example, we need to set $wgContLang for creating a new Title */
-               $wgContLang = Language::factory( 'en' );
+               // This sets the globals and will restore them automatically
+               // after each test.
+               $this->setMwGlobals( array(
+                       'wgContLang' => Language::factory( 'en' ),
+               ) );
        }
 
        /**
         * Anything cleanup you need to do should go here.
         */
-       function tearDown() {
+       protected function tearDown() {
                parent::tearDown();
        }
 
@@ -40,8 +45,10 @@ class TestSample extends MediaWikiLangTestCase {
        /**
         * If you want to run a the same test with a variety of data. use a data provider.
         * see: http://www.phpunit.de/manual/3.4/en/writing-tests-for-phpunit.html
+        *
+        * Note: Data providers are always called statically and outside setUp/tearDown!
         */
-       public function provideTitles() {
+       public static function provideTitles() {
                return array(
                        array( 'Text', NS_MEDIA, 'Media:Text' ),
                        array( 'Text', null, 'Text' ),
@@ -78,6 +85,7 @@ class TestSample extends MediaWikiLangTestCase {
         * example) as arguments to the next method (e.g. $title in
         * testTitleDepends is whatever testInitialCreatiion returned.)
         */
+
        /**
         * @depends testSetUpMainPageTitleForNextTest
         * See http://www.phpunit.de/manual/3.4/en/appendixes.annotations.html#appendixes.annotations.depends
index c929989..c593d2f 100644 (file)
@@ -2,7 +2,11 @@
 
 class SanitizerTest extends MediaWikiTestCase {
 
-       function setUp() {
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgCleanupPresentationalAttributes', true );
+
                AutoLoader::loadClass( 'Sanitizer' );
        }
 
@@ -110,20 +114,22 @@ class SanitizerTest extends MediaWikiTestCase {
                $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&foobar;' ), array( 'foo' => '&foobar;' ), 'Entity-like items are accepted' );
        }
 
-       function testDeprecatedAttributesDisabled() {
-               $GLOBALS['wgCleanupPresentationalAttributes'] = false;
-               $this->assertEquals( ' clear="left"', Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), 'Deprecated attributes are not converted to styles when enabled.' );
-       }
-
        /**
         * @dataProvider provideDeprecatedAttributes
         */
        function testDeprecatedAttributes( $input, $tag, $expected, $message = null ) {
-               $GLOBALS['wgCleanupPresentationalAttributes'] = true;
                $this->assertEquals( $expected, Sanitizer::fixTagAttributes( $input, $tag ), $message );
        }
 
-       function provideDeprecatedAttributes() {
+       function testDeprecatedAttributesDisabled() {
+               global $wgCleanupPresentationalAttributes;
+
+               $wgCleanupPresentationalAttributes = false;
+
+               $this->assertEquals( ' clear="left"', Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), 'Deprecated attributes are not converted to styles when enabled.' );
+       }
+
+       public static function provideDeprecatedAttributes() {
                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;' ),
@@ -136,10 +142,26 @@ class SanitizerTest extends MediaWikiTestCase {
                        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="float: left;"', 'align=(left|right) on non-cells gets converted to float' ),
-                       array( 'align="center"', 'div', ' style="margin-left: auto; margin-right: auto;"', 'align="center" on non-cells' ),
+                       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' ),
                );
        }
 
@@ -154,7 +176,7 @@ class SanitizerTest extends MediaWikiTestCase {
                );
        }
 
-       function provideCssCommentsFixtures() {
+       public static function provideCssCommentsFixtures() {
                /** array( <expected>, <css>, [message] ) */
                return array(
                        array( ' ', '/**/' ),
@@ -166,6 +188,12 @@ class SanitizerTest extends MediaWikiTestCase {
                                'Remove anything after a comment-start token' ),
                        array( '', "\\2f\\2a unifinished comment'",
                                'Remove anything after a backslash-escaped comment-start token' ),
+                       array( '/* insecure input */', 'filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'asdf.png\',sizingMethod=\'scale\');'),
+                       array( '/* insecure input */', '-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'asdf.png\',sizingMethod=\'scale\')";'),
+                       array( '/* insecure input */', 'width: expression(1+1);'),
+                       array( '/* insecure input */', 'background-image: image(asdf.png);'),
+                       array( '/* insecure input */', 'background-image: -webkit-image(asdf.png);'),
+                       array( '/* insecure input */', 'background-image: -moz-image(asdf.png);'),
                );
        }
 }
index 8589c18..8f6aafa 100644 (file)
@@ -99,7 +99,8 @@ testBrowser           = "firefox"
        private $testSuites1 = null;
 
 
-       public function setUp() {
+       protected function setUp() {
+               parent::setUp();
                if ( !defined( 'SELENIUMTEST' ) ) {
                        define( 'SELENIUMTEST', true );
                }
@@ -108,7 +109,7 @@ testBrowser                 = "firefox"
        /**
         * Clean up the temporary file used to store the selenium settings.
         */
-       public function tearDown() {
+       protected function tearDown() {
                if ( strlen( $this->tempFileName ) > 0 ) {
                        unlink( $this->tempFileName );
                        unset( $this->tempFileName );
index 57d3532..4e0d2f4 100644 (file)
@@ -25,7 +25,7 @@ function getSiteParams( $conf, $wiki ) {
 class SiteConfigurationTest extends MediaWikiTestCase {
        var $mConf;
 
-       function setUp() {
+       protected function setUp() {
                $this->mConf = new SiteConfiguration;
 
                $this->mConf->suffixes = array( 'wiki' );
index 416ec86..03b94ae 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @group Database
  */
-require dirname( __FILE__ ) . "/../../../maintenance/runJobs.php";
+require __DIR__ . "/../../../maintenance/runJobs.php";
 
 class TemplateCategoriesTest extends MediaWikiLangTestCase {
 
@@ -13,14 +13,14 @@ class TemplateCategoriesTest extends MediaWikiLangTestCase {
                $user = new User();
                $user->mRights = array( 'createpage', 'edit', 'purge' );
 
-               $status = $page->doEdit( '{{Categorising template}}', 'Create a page with a template', 0, false, $user );
+               $status = $page->doEditContent( new WikitextContent( '{{Categorising template}}' ), 'Create a page with a template', 0, false, $user );
                $this->assertEquals(
                        array()
                        , $title->getParentCategories()
                );
 
                $template = WikiPage::factory( Title::newFromText( 'Template:Categorising template' ) );
-               $status = $template->doEdit( '[[Category:Solved bugs]]', 'Add a category through a template', 0, false, $user );
+               $status = $template->doEditContent( new WikitextContent( '[[Category:Solved bugs]]' ), 'Add a category through a template', 0, false, $user );
 
                // Run the job queue
                $jobs = new RunJobs;
diff --git a/tests/phpunit/includes/TestUser.php b/tests/phpunit/includes/TestUser.php
new file mode 100644 (file)
index 0000000..c4d8945
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/* Wraps the user object, so we can also retain full access to properties like password if we log in via the API */
+class TestUser {
+       public $username;
+       public $password;
+       public $email;
+       public $groups;
+       public $user;
+
+       function __construct( $username, $realname = 'Real Name', $email = 'sample@example.com', $groups = array() ) {
+               $this->username = $username;
+               $this->realname = $realname;
+               $this->email = $email;
+               $this->groups = $groups;
+
+               // don't allow user to hardcode or select passwords -- people sometimes run tests
+               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
+               // a known password would be a Bad Thing.
+               $this->password = User::randomPassword();
+
+               $this->user = User::newFromName( $this->username );
+               $this->user->load();
+
+               // In an ideal world we'd have a new wiki (or mock data store) for every single test.
+               // But for now, we just need to create or update the user with the desired properties.
+               // we particularly need the new password, since we just generated it randomly.
+               // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
+               if ( !$this->user->getID() ) {
+                       // create the user
+                       $this->user = User::createNew(
+                               $this->username, array(
+                                       "email" => $this->email,
+                                       "real_name" => $this->realname
+                               )
+                       );
+                       if ( !$this->user ) {
+                               throw new Exception( "error creating user" );
+                       }
+               }
+
+               // update the user to use the new random password and other details
+               $this->user->setPassword( $this->password );
+               $this->user->setEmail( $this->email );
+               $this->user->setRealName( $this->realname );
+               // remove all groups, replace with any groups specified
+               foreach ( $this->user->getGroups() as $group ) {
+                       $this->user->removeGroup( $group );
+               }
+               if ( count( $this->groups ) ) {
+                       foreach ( $this->groups as $group ) {
+                               $this->user->addGroup( $group );
+                       }
+               }
+               $this->user->saveSettings();
+
+       }
+}
index cd027c5..db4162f 100644 (file)
@@ -1,28 +1,21 @@
 <?php
 
 class TimeAdjustTest extends MediaWikiLangTestCase {
-       static $offset;
-
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
-               global $wgLocalTZoffset;
-               self::$offset = $wgLocalTZoffset;
 
-               $this->iniSet( 'precision', 15 );
-       }
+               $this->setMwGlobals( array(
+                       'wgLocalTZoffset' => null,
+                       'wgContLang' => Language::factory( 'en' ),
+               ) );
 
-       public function tearDown() {
-               global $wgLocalTZoffset;
-               $wgLocalTZoffset = self::$offset;
-               parent::tearDown();
+               $this->iniSet( 'precision', 15 );
        }
 
        # Test offset usage for a given language::userAdjust
        function testUserAdjust() {
                global $wgLocalTZoffset, $wgContLang;
 
-               $wgContLang = $en = Language::factory( 'en' );
-
                #  Collection of parameters for Language_t_Offset.
                # Format: date to be formatted, localTZoffset value, expected date
                $userAdjust_tests = array(
@@ -43,7 +36,7 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
 
                        $this->assertEquals(
                                strval( $data[2] ),
-                               strval( $en->userAdjust( $data[0], '' ) ),
+                               strval( $wgContLang->userAdjust( $data[0], '' ) ),
                                "User adjust {$data[0]} by {$data[1]} minutes should give {$data[2]}"
                        );
                }
diff --git a/tests/phpunit/includes/TimestampTest.php b/tests/phpunit/includes/TimestampTest.php
new file mode 100644 (file)
index 0000000..6352160
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * Tests timestamp parsing and output.
+ */
+class TimestampTest extends MediaWikiTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' ),
+                       'wgLang' => Language::factory( 'en' ),
+               ) );
+       }
+       /**
+        * Test parsing of valid timestamps and outputing to MW format.
+        * @dataProvider provideValidTimestamps
+        */
+       function testValidParse( $format, $original, $expected ) {
+               $timestamp = new MWTimestamp( $original );
+               $this->assertEquals( $expected, $timestamp->getTimestamp( TS_MW ) );
+       }
+
+       /**
+        * Test outputting valid timestamps to different formats.
+        * @dataProvider provideValidTimestamps
+        */
+       function testValidOutput( $format, $expected, $original ) {
+               $timestamp = new MWTimestamp( $original );
+               $this->assertEquals( $expected, (string) $timestamp->getTimestamp( $format ) );
+       }
+
+       /**
+        * Test an invalid timestamp.
+        * @expectedException TimestampException
+        */
+       function testInvalidParse() {
+               $timestamp = new MWTimestamp( "This is not a timestamp." );
+       }
+
+       /**
+        * Test requesting an invalid output format.
+        * @expectedException TimestampException
+        */
+       function testInvalidOutput() {
+               $timestamp = new MWTimestamp( '1343761268' );
+               $timestamp->getTimestamp( 98 );
+       }
+
+       /**
+        * Test human readable timestamp format.
+        */
+       function testHumanOutput() {
+               $timestamp = new MWTimestamp( time() - 3600 );
+               $this->assertEquals( "1 hour ago", $timestamp->getHumanTimestamp()->inLanguage( 'en' )->text() );
+       }
+
+       /**
+        * Returns a list of valid timestamps in the format:
+        * array( type, timestamp_of_type, timestamp_in_MW )
+        */
+       public static function provideValidTimestamps() {
+               return array(
+                       // Various formats
+                       array( TS_UNIX, '1343761268', '20120731190108' ),
+                       array( TS_MW, '20120731190108', '20120731190108' ),
+                       array( TS_DB, '2012-07-31 19:01:08', '20120731190108' ),
+                       array( TS_ISO_8601, '2012-07-31T19:01:08Z', '20120731190108' ),
+                       array( TS_ISO_8601_BASIC, '20120731T190108Z', '20120731190108' ),
+                       array( TS_EXIF, '2012:07:31 19:01:08', '20120731190108' ),
+                       array( TS_RFC2822, 'Tue, 31 Jul 2012 19:01:08 GMT', '20120731190108' ),
+                       array( TS_ORACLE, '31-07-2012 19:01:08.000000', '20120731190108' ),
+                       array( TS_POSTGRES, '2012-07-31 19:01:08 GMT', '20120731190108' ),
+                       array( TS_DB2, '2012-07-31 19:01:08', '20120731190108' ),
+                       // Some extremes and weird values
+                       array( TS_ISO_8601, '9999-12-31T23:59:59Z', '99991231235959' ),
+                       array( TS_UNIX, '-62135596801', '00001231235959' )
+               );
+       }
+}
index aed658b..44fd690 100644 (file)
@@ -1,8 +1,44 @@
 <?php
 
+/**
+ * @group ContentHandler
+ *
+ * @note: We don't make assumptions about the main namespace.
+ *        But we do expect the Help namespace to contain Wikitext.
+ *
+ */
 class TitleMethodsTest extends MediaWikiTestCase {
 
-       public function dataEquals() {
+       public function setup() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgExtraNamespaces',
+                       array(
+                               12302 => 'TEST-JS',
+                               12303 => 'TEST-JS_TALK',
+                       )
+               );
+
+               $this->mergeMwGlobalArrayValue(
+                       'wgNamespaceContentModels',
+                       array(
+                               12302 => CONTENT_MODEL_JAVASCRIPT,
+                       )
+               );
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+       }
+
+       public function teardown() {
+               global $wgContLang;
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+       }
+
+       public static function provideEquals() {
                return array(
                        array( 'Main Page', 'Main Page', true ),
                        array( 'Main Page', 'Not The Main Page', false ),
@@ -15,7 +51,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataEquals
+        * @dataProvider provideEquals
         */
        public function testEquals( $titleA, $titleB, $expectedBool ) {
                $titleA = Title::newFromText( $titleA );
@@ -25,7 +61,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) );
        }
 
-       public function dataInNamespace() {
+       public static function provideInNamespace() {
                return array(
                        array( 'Main Page', NS_MAIN, true ),
                        array( 'Main Page', NS_TALK, false ),
@@ -39,7 +75,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataInNamespace
+        * @dataProvider provideInNamespace
         */
        public function testInNamespace( $title, $ns, $expectedBool ) {
                $title = Title::newFromText( $title );
@@ -54,7 +90,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $this->assertFalse( $mainpage->inNamespaces( array( NS_PROJECT, NS_TEMPLATE ) ) );
        }
 
-       public function dataHasSubjectNamespace() {
+       public static function provideHasSubjectNamespace() {
                return array(
                        array( 'Main Page', NS_MAIN, true ),
                        array( 'Main Page', NS_TALK, true ),
@@ -68,18 +104,59 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataHasSubjectNamespace
+        * @dataProvider provideHasSubjectNamespace
         */
        public function testHasSubjectNamespace( $title, $ns, $expectedBool ) {
                $title = Title::newFromText( $title );
                $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
        }
 
-       public function dataIsCssOrJsPage() {
+       public function dataGetContentModel() {
+               return array(
+                       array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+                       array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+                       array( 'MediaWiki:Foo/bar.css', CONTENT_MODEL_CSS ),
+                       array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'TEST-JS:Foo', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'TEST-JS:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'TEST-JS:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+                       array( 'TEST-JS_TALK:Foo.js', CONTENT_MODEL_WIKITEXT ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetContentModel
+        */
+       public function testGetContentModel( $title, $expectedModelId ) {
+               $title = Title::newFromText( $title );
+               $this->assertEquals( $expectedModelId, $title->getContentModel() );
+       }
+
+       /**
+        * @dataProvider dataGetContentModel
+        */
+       public function testHasContentModel( $title, $expectedModelId ) {
+               $title = Title::newFromText( $title );
+               $this->assertTrue( $title->hasContentModel( $expectedModelId ) );
+       }
+
+       public static function provideIsCssOrJsPage() {
                return array(
-                       array( 'Foo', false ),
-                       array( 'Foo.js', false ),
-                       array( 'Foo/bar.js', false ),
+                       array( 'Help:Foo', false ),
+                       array( 'Help:Foo.js', false ),
+                       array( 'Help:Foo/bar.js', false ),
                        array( 'User:Foo', false ),
                        array( 'User:Foo.js', false ),
                        array( 'User:Foo/bar.js', false ),
@@ -92,11 +169,13 @@ class TitleMethodsTest extends MediaWikiTestCase {
                        array( 'MediaWiki:Foo.JS', false ),
                        array( 'MediaWiki:Foo.CSS', false ),
                        array( 'MediaWiki:Foo.css.xxx', false ),
+                       array( 'TEST-JS:Foo', false ),
+                       array( 'TEST-JS:Foo.js', false ),
                );
        }
 
        /**
-        * @dataProvider dataIsCssOrJsPage
+        * @dataProvider provideIsCssOrJsPage
         */
        public function testIsCssOrJsPage( $title, $expectedBool ) {
                $title = Title::newFromText( $title );
@@ -104,11 +183,11 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
 
-       public function dataIsCssJsSubpage() {
+       public static function provideIsCssJsSubpage() {
                return array(
-                       array( 'Foo', false ),
-                       array( 'Foo.js', false ),
-                       array( 'Foo/bar.js', false ),
+                       array( 'Help:Foo', false ),
+                       array( 'Help:Foo.js', false ),
+                       array( 'Help:Foo/bar.js', false ),
                        array( 'User:Foo', false ),
                        array( 'User:Foo.js', false ),
                        array( 'User:Foo/bar.js', true ),
@@ -119,21 +198,23 @@ class TitleMethodsTest extends MediaWikiTestCase {
                        array( 'MediaWiki:Foo.js', false ),
                        array( 'User:Foo/bar.JS', false ),
                        array( 'User:Foo/bar.CSS', false ),
+                       array( 'TEST-JS:Foo', false ),
+                       array( 'TEST-JS:Foo.js', false ),
                );
        }
 
        /**
-        * @dataProvider dataIsCssJsSubpage
+        * @dataProvider provideIsCssJsSubpage
         */
        public function testIsCssJsSubpage( $title, $expectedBool ) {
                $title = Title::newFromText( $title );
                $this->assertEquals( $expectedBool, $title->isCssJsSubpage() );
        }
 
-       public function dataIsCssSubpage() {
+       public static function provideIsCssSubpage() {
                return array(
-                       array( 'Foo', false ),
-                       array( 'Foo.css', false ),
+                       array( 'Help:Foo', false ),
+                       array( 'Help:Foo.css', false ),
                        array( 'User:Foo', false ),
                        array( 'User:Foo.js', false ),
                        array( 'User:Foo.css', false ),
@@ -143,17 +224,17 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataIsCssSubpage
+        * @dataProvider provideIsCssSubpage
         */
        public function testIsCssSubpage( $title, $expectedBool ) {
                $title = Title::newFromText( $title );
                $this->assertEquals( $expectedBool, $title->isCssSubpage() );
        }
 
-       public function dataIsJsSubpage() {
+       public static function provideIsJsSubpage() {
                return array(
-                       array( 'Foo', false ),
-                       array( 'Foo.css', false ),
+                       array( 'Help:Foo', false ),
+                       array( 'Help:Foo.css', false ),
                        array( 'User:Foo', false ),
                        array( 'User:Foo.js', false ),
                        array( 'User:Foo.css', false ),
@@ -163,18 +244,18 @@ class TitleMethodsTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataIsJsSubpage
+        * @dataProvider provideIsJsSubpage
         */
        public function testIsJsSubpage( $title, $expectedBool ) {
                $title = Title::newFromText( $title );
                $this->assertEquals( $expectedBool, $title->isJsSubpage() );
        }
 
-       public function dataIsWikitextPage() {
+       public static function provideIsWikitextPage() {
                return array(
-                       array( 'Foo', true ),
-                       array( 'Foo.js', true ),
-                       array( 'Foo/bar.js', true ),
+                       array( 'Help:Foo', true ),
+                       array( 'Help:Foo.js', true ),
+                       array( 'Help:Foo/bar.js', true ),
                        array( 'User:Foo', true ),
                        array( 'User:Foo.js', true ),
                        array( 'User:Foo/bar.js', false ),
@@ -187,11 +268,14 @@ class TitleMethodsTest extends MediaWikiTestCase {
                        array( 'MediaWiki:Foo/bar.css', false ),
                        array( 'User:Foo/bar.JS', true ),
                        array( 'User:Foo/bar.CSS', true ),
+                       array( 'TEST-JS:Foo', false ),
+                       array( 'TEST-JS:Foo.js', false ),
+                       array( 'TEST-JS_TALK:Foo.js', true ),
                );
        }
 
        /**
-        * @dataProvider dataIsWikitextPage
+        * @dataProvider provideIsWikitextPage
         */
        public function testIsWikitextPage( $title, $expectedBool ) {
                $title = Title::newFromText( $title );
index f62ac5d..5df8fe1 100644 (file)
@@ -4,31 +4,44 @@
  * @group Database
  */
 class TitlePermissionTest extends MediaWikiLangTestCase {
-       protected $title;
 
        /**
-        * @var User
+        * @var string
         */
-       protected $user, $anonUser, $userUser, $altUser;
+       protected $userName, $altUserName;
 
        /**
-        * @var string
+        * @var Title
         */
-       protected $userName, $altUserName;
+       protected $title;
 
-       function setUp() {
-               global $wgLocaltimezone, $wgLocalTZoffset, $wgMemc, $wgContLang, $wgLang;
-               parent::setUp();
+       /**
+        * @var User
+        */
+       protected $user, $anonUser, $userUser, $altUser;
 
-               if(!$wgMemc) {
-                       $wgMemc = new EmptyBagOStuff;
-               }
-               $wgContLang = $wgLang = Language::factory( 'en' );
+       protected function setUp() {
+               parent::setUp();
 
-               $this->userName = "Useruser";
-               $this->altUserName = "Altuseruser";
-               date_default_timezone_set( $wgLocaltimezone );
-               $wgLocalTZoffset = date( "Z" ) / 60;
+               $langObj = Language::factory( 'en' );
+               $localZone = 'UTC';
+               $localOffset = date( 'Z' ) / 60;
+
+               $this->setMwGlobals( array(
+                       'wgMemc' => new EmptyBagOStuff,
+                       'wgContLang' => $langObj,
+                       'wgLang' => $langObj,
+                       'wgLocaltimezone' => $localZone,
+                       'wgLocalTZoffset' => $localOffset,
+                       'wgNamespaceProtection' => array(
+                               NS_MEDIAWIKI => 'editinterface',
+                       ),
+                       'wgUser' => null,
+               ) );
+
+               $this->userName = 'Useruser';
+               $this->altUserName = 'Altuseruser';
+               date_default_timezone_set( $localZone );
 
                $this->title = Title::makeTitle( NS_MAIN, "Main Page" );
                if ( !isset( $this->userUser ) || !( $this->userUser instanceOf User ) ) {
@@ -53,10 +66,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                        $this->user = $this->userUser;
                }
-       }
 
-       function tearDown() {
-               parent::tearDown();
        }
 
        function setUserPerm( $perm ) {
@@ -74,6 +84,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        }
 
        function setUser( $userName = null ) {
+               global $wgUser;
+
                if ( $userName === 'anon' ) {
                        $this->user = $this->anonUser;
                } elseif ( $userName === null || $userName === $this->userName ) {
@@ -82,7 +94,6 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        $this->user = $this->altUser;
                }
 
-               global $wgUser;
                $wgUser = $this->user;
        }
 
@@ -338,9 +349,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        }
 
        function testSpecialsAndNSPermissions() {
+               global $wgNamespaceProtection;
                $this->setUser( $this->userName );
-               global $wgUser;
-               $wgUser = $this->user;
 
                $this->setTitle( NS_SPECIAL );
 
@@ -359,8 +369,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->assertEquals( array( array( 'badaccess-group0' ) ),
                                                         $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
 
-               global $wgNamespaceProtection;
-               $wgNamespaceProtection[NS_USER] = array ( 'bogus' );
+               $wgNamespaceProtection[NS_USER] = array( 'bogus' );
+
                $this->setTitle( NS_USER );
                $this->setUserPerm( '' );
                $this->assertEquals( array( array( 'badaccess-group0' ), array( 'namespaceprotected', 'User' ) ),
@@ -377,6 +387,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                                                         $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
 
                $wgNamespaceProtection = null;
+
                $this->setUserPerm( 'bogus' );
                $this->assertEquals( array( ),
                                                         $this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
@@ -392,8 +403,6 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
        function testCssAndJavascriptPermissions() {
                $this->setUser( $this->userName );
-               global $wgUser;
-               $wgUser = $this->user;
 
                $this->setTitle( NS_USER, $this->altUserName . '/test.js' );
                $this->runCSSandJSPermissions(
index 1c8be5f..0a3f6f6 100644 (file)
@@ -1,7 +1,25 @@
 <?php
 
+/**
+ *
+ * @group Database
+ *        ^--- needed for language cache stuff
+ */
 class TitleTest extends MediaWikiTestCase {
 
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' ),
+                       // User language
+                       'wgLang' => Language::factory( 'en' ),
+                       'wgAllowUserJs' => false,
+                       'wgDefaultLanguageVariant' => false,
+               ) );
+       }
+
        function testLegalChars() {
                $titlechars = Title::legalChars();
 
@@ -16,7 +34,7 @@ class TitleTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider dataBug31100
+        * @dataProvider provideBug31100
         */
        function testBug31100FixSpecialName( $text, $expectedParam ) {
                $title = Title::newFromText( $text );
@@ -30,7 +48,7 @@ class TitleTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedParam, $par, "Bug 31100 regression check: Title->fixSpecialName() should preserve parameter" );
        }
 
-       function dataBug31100() {
+       public static function provideBug31100() {
                return array(
                        array( 'Special:Version', null ),
                        array( 'Special:Version/', '' ),
@@ -45,7 +63,7 @@ class TitleTest extends MediaWikiTestCase {
         * @param string $source
         * @param string $target
         * @param array|string|true $expected Required error
-        * @dataProvider dataTestIsValidMoveOperation
+        * @dataProvider provideTestIsValidMoveOperation
         */
        function testIsValidMoveOperation( $source, $target, $expected ) {
                $title = Title::newFromText( $source );
@@ -69,12 +87,131 @@ class TitleTest extends MediaWikiTestCase {
                return $result;
        }
        
-       function dataTestIsValidMoveOperation() {
+       public static function provideTestIsValidMoveOperation() {
                return array( 
                        array( 'Test', 'Test', 'selfmove' ),
                        array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' )
                );
        }
-       
-       
+
+       /**
+        * @dataProvider provideCasesForGetpageviewlanguage
+        */
+       function testGetpageviewlanguage( $expected, $titleText, $contLang, $lang, $variant, $msg = '' ) {
+               global $wgLanguageCode, $wgContLang, $wgLang, $wgDefaultLanguageVariant, $wgAllowUserJs;
+
+               // Setup environnement for this test
+               $wgLanguageCode = $contLang;
+               $wgContLang = Language::factory( $contLang );
+               $wgLang = Language::factory( $lang );
+               $wgDefaultLanguageVariant = $variant;
+               $wgAllowUserJs = true;
+
+               $title = Title::newFromText( $titleText );
+               $this->assertInstanceOf( 'Title', $title,
+                       "Test must be passed a valid title text, you gave '$titleText'"
+               );
+               $this->assertEquals( $expected,
+                       $title->getPageViewLanguage()->getCode(),
+                       $msg
+               );
+       }
+
+       function provideCasesForGetpageviewlanguage() {
+               # Format:
+               # - expected
+               # - Title name
+               # - wgContLang (expected in most case)
+               # - wgLang (on some specific pages)
+               # - 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( 'es',    'Main_page',                 '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' ),
+                       array( 'en',    'MediaWiki:Common.js',       'es', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.css',      'es', 'zh-tw', 'zh-cn' ),
+                       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',    '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' ),
+                       array( 'zh-cn', 'MediaWiki:About/zh-cn',     'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-tw', 'MediaWiki:About/zh-tw',     'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.js',       'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'MediaWiki:Common.css',      'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Common.js',    'zh', 'zh-tw', 'zh-cn' ),
+                       array( 'en',    'User:JohnDoe/Monobook.css', 'zh', 'zh-tw', 'zh-cn' ),
+
+                       array( 'zh-tw', 'Special:NewPages',       'es', 'zh-tw', 'zh-cn' ),
+                       array( 'zh-tw', 'Special:NewPages',       'zh', 'zh-tw', 'zh-cn' ),
+
+               );
+       }
+
+       /**
+        * @dataProvider provideBaseTitleCases
+        */
+       function testExtractingBaseTextFromTitle( $title, $expected, $msg='' ) {
+               $title = Title::newFromText( $title );
+               $this->assertEquals( $expected,
+                       $title->getBaseText(),
+                       $msg
+               );
+       }
+
+       function provideBaseTitleCases() {
+               return array(
+                       # Title, expected base, optional message
+                       array('User:John_Doe/subOne/subTwo', 'John Doe/subOne' ),
+                       array('User:Foo/Bar/Baz', 'Foo/Bar' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRootTitleCases
+        */
+       function testExtractingRootTextFromTitle( $title, $expected, $msg='' ) {
+               $title = Title::newFromText( $title );
+               $this->assertEquals( $expected,
+                       $title->getRootText(),
+                       $msg
+               );
+       }
+
+       public static function provideRootTitleCases() {
+               return array(
+                       # Title, expected base, optional message
+                       array('User:John_Doe/subOne/subTwo', 'John Doe' ),
+                       array('User:Foo/Bar/Baz', 'Foo' ),
+               );
+       }
+
+       /**
+        * @todo Handle $wgNamespacesWithSubpages cases
+        * @dataProvider provideSubpageTitleCases
+        */
+       function testExtractingSubpageTextFromTitle( $title, $expected, $msg='' ) {
+               $title = Title::newFromText( $title );
+               $this->assertEquals( $expected,
+                       $title->getSubpageText(),
+                       $msg
+               );
+       }
+
+       function provideSubpageTitleCases() {
+               return array(
+                       # Title, expected base, optional message
+                       array('User:John_Doe/subOne/subTwo', 'subTwo' ),
+                       array('User:John_Doe/subOne', 'subOne' ),
+               );
+       }
+
 }
diff --git a/tests/phpunit/includes/UriTest.php b/tests/phpunit/includes/UriTest.php
deleted file mode 100644 (file)
index 3b78f47..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-
-class UriTest extends MediaWikiTestCase {
-
-       function setUp() {
-               AutoLoader::loadClass( 'Uri' );
-       }
-
-       function dataUris() {
-               return array(
-                       array(
-                               'http://example.com/',
-                               array(
-                                       'scheme'    => 'http',
-                                       'delimiter' => '://',
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => 'example.com',
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '//mediawiki.org/wiki/Main_Page',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => '//',
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => 'mediawiki.org',
-                                       'port'      => null,
-                                       'path'      => '/wiki/Main_Page',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               'http://user:pass@example.com/',
-                               array(
-                                       'scheme'    => 'http',
-                                       'delimiter' => '://',
-                                       'user'      => 'user',
-                                       'pass'      => 'pass',
-                                       'host'      => 'example.com',
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => null,
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '/?asdf=asdf',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => null,
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => null,
-                                       'port'      => null,
-                                       'path'      => '/',
-                                       'query'     => 'asdf=asdf',
-                                       'fragment'  => null,
-                               ),
-                       ),
-                       array(
-                               '?asdf=asdf#asdf',
-                               array(
-                                       'scheme'    => null,
-                                       'delimiter' => null,
-                                       'user'      => null,
-                                       'pass'      => null,
-                                       'host'      => null,
-                                       'port'      => null,
-                                       'path'      => null,
-                                       'query'     => 'asdf=asdf',
-                                       'fragment'  => 'asdf',
-                               ),
-                       )
-               );
-       }
-
-       /**
-        * Ensure that get* methods properly match the appropriate getComponent( key ) value
-        * @dataProvider dataUris
-        */
-       function testGetters( $uri ) {
-               $uri = new Uri( $uri );
-               $getterMap = array(
-                       'getProtocol' => 'scheme',
-                       'getUser' => 'user',
-                       'getPassword' => 'pass',
-                       'getHost' => 'host',
-                       'getPort' => 'port',
-                       'getPath' => 'path',
-                       'getQueryString' => 'query',
-                       'getFragment' => 'fragment',
-               );
-               foreach ( $getterMap as $fn => $c ) {
-                       $this->assertSame( $uri->{$fn}(), $uri->getComponent( $c ), "\$uri->{$fn}(); matches \$uri->getComponent( '$c' );" );
-               }
-       }
-
-       /**
-        * Ensure that Uri has the proper components for our example uris
-        * @dataProvider dataUris
-        */
-       function testComponents( $uri, $components ) {
-               $uri = new Uri( $uri );
-
-               $this->assertSame( $components['scheme'], $uri->getProtocol(), 'Correct scheme' );
-               $this->assertSame( $components['delimiter'], $uri->getDelimiter(), 'Correct delimiter' );
-               $this->assertSame( $components['user'], $uri->getUser(), 'Correct user' );
-               $this->assertSame( $components['pass'], $uri->getPassword(), 'Correct pass' );
-               $this->assertSame( $components['host'], $uri->getHost(), 'Correct host' );
-               $this->assertSame( $components['port'], $uri->getPort(), 'Correct port' );
-               $this->assertSame( $components['path'], $uri->getPath(), 'Correct path' );
-               $this->assertSame( $components['query'], $uri->getQueryString(), 'Correct query' );
-               $this->assertSame( $components['fragment'], $uri->getFragment(), 'Correct fragment' );
-       }
-
-       /**
-        * Ensure that the aliases work for various components.
-        */
-       function testAliases() {
-               $url = "//myuser@test.com";
-               $uri = new Uri( $url );
-
-               // Set the aliases.
-               $uri->setComponent( 'protocol', 'https' );
-               $uri->setComponent( 'password', 'mypass' );
-
-               // Now try getting them.
-               $this->assertSame( 'https', $uri->getComponent( 'protocol' ), 'Correct protocol (alias for scheme)' );
-               $this->assertSame( 'mypass', $uri->getComponent( 'password' ), 'Correct password (alias for pass)' );
-
-               // Finally check their actual names.
-               $this->assertSame( 'https', $uri->getProtocol(), 'Alias for scheme works' );
-               $this->assertSame( 'mypass', $uri->getPassword(), 'Alias for pass works' );
-       }
-
-       /**
-        * Ensure that Uri's helper methods return the correct data
-        */
-       function testHelpers() {
-               $uri = new Uri( 'http://a:b@example.com:8080/path?query=value' );
-
-               $this->assertSame( 'a:b', $uri->getUserInfo(), 'Correct getUserInfo' );
-               $this->assertSame( 'example.com:8080', $uri->getHostPort(), 'Correct getHostPort' );
-               $this->assertSame( 'a:b@example.com:8080', $uri->getAuthority(), 'Correct getAuthority' );
-               $this->assertSame( '/path?query=value', $uri->getRelativePath(), 'Correct getRelativePath' );
-               $this->assertSame( 'http://a:b@example.com:8080/path?query=value', $uri->toString(), 'Correct toString' );
-       }
-
-       /**
-        * Ensure that Uri's extend method properly overrides keys
-        */
-       function testExtend() {
-               $uri = new Uri( 'http://example.org/?a=b&hello=world' );
-               $uri->extendQuery( 'a=c&foo=bar' );
-               $this->assertSame( 'a=c&hello=world&foo=bar', $uri->getQueryString() );
-       }
-}
index 7a424ae..316e6f5 100644 (file)
@@ -7,22 +7,26 @@ define( 'NS_UNITTEST_TALK', 5601 );
  * @group Database
  */
 class UserTest extends MediaWikiTestCase {
-       protected $savedGroupPermissions, $savedRevokedPermissions;
 
        /**
         * @var User
         */
        protected $user;
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
-               $this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
-               $this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
+               $this->setMwGlobals( array(
+                       'wgGroupPermissions' => array(),
+                       'wgRevokePermissions' => array(),
+               ) );
 
                $this->setUpPermissionGlobals();
-               $this->setUpUser();
+
+               $this->user = new User;
+               $this->user->addGroup( 'unittesters' );
        }
+
        private function setUpPermissionGlobals() {
                global $wgGroupPermissions, $wgRevokePermissions;
 
@@ -38,22 +42,12 @@ class UserTest extends MediaWikiTestCase {
                        'writetest' => true,
                        'modifytest' => true,
                );
+
                # Data for regular $wgRevokePermissions test
                $wgRevokePermissions['formertesters'] = array(
                        'runtest' => true,
                );
        }
-       private function setUpUser() {
-               $this->user = new User;
-               $this->user->addGroup( 'unittesters' );
-       }
-
-       public function tearDown() {
-               parent::tearDown();
-
-               $GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions;
-               $GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions;
-       }
 
        public function testGroupPermissions() {
                $rights = User::getGroupPermissions( array( 'unittesters' ) );
@@ -95,7 +89,7 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $result, "Groups with permission $right" );
        }
 
-       public function provideGetGroupsWithPermission() {
+       public static function provideGetGroupsWithPermission() {
                return array(
                        array(
                                array( 'unittesters', 'testwriters' ),
@@ -123,7 +117,7 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( $this->user->isValidUserName( $username ), $result, $message );
        }
 
-       public function provideUserNames() {
+       public static function provideUserNames() {
                return array(
                        array( '', false, 'Empty string' ),
                        array( ' ', false, 'Blank space' ),
index 1fc0b4b..153ff78 100644 (file)
@@ -1,14 +1,18 @@
 <?php
 
 class WebRequestTest extends MediaWikiTestCase {
-       static $oldServer;
+       protected $oldServer;
 
-       function setUp() {
-               self::$oldServer = $_SERVER;
+       protected function setUp() {
+               parent::setUp();
+
+               $this->oldServer = $_SERVER;
        }
 
-       function tearDown() {
-               $_SERVER = self::$oldServer;
+       protected function tearDown() {
+               $_SERVER = $this->oldServer;
+
+               parent::tearDown();
        }
 
        /**
@@ -20,7 +24,7 @@ class WebRequestTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $result, $description );
        }
 
-       function provideDetectServer() {
+       public static function provideDetectServer() {
                return array(
                        array(
                                'http://x',
@@ -107,7 +111,7 @@ class WebRequestTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $result, $description );
        }
 
-       function provideGetIP() {
+       public static function provideGetIP() {
                return array(
                        array(
                                '127.0.0.1',
@@ -189,7 +193,7 @@ class WebRequestTest extends MediaWikiTestCase {
                $request->getIP();
        }
 
-       function languageProvider() {
+       public static function provideLanguageData() {
                return array(
                        array( '', array(), 'Empty Accept-Language header' ),
                        array( 'en', array( 'en' => 1 ), 'One language' ),
@@ -206,7 +210,7 @@ class WebRequestTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider languageProvider
+        * @dataProvider provideLanguageData
         */
        function testAcceptLang($acceptLanguageHeader, $expectedLanguages, $description) {
                $_SERVER = array( 'HTTP_ACCEPT_LANGUAGE' => $acceptLanguageHeader );
index 2949a3a..cf9b96b 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 /**
+* @group ContentHandler
 * @group Database
 * ^--- important, causes temporary tables to be used instead of the real database
 **/
@@ -11,30 +12,33 @@ class WikiPageTest extends MediaWikiLangTestCase {
        function  __construct( $name = null, array $data = array(), $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
-               $this->tablesUsed = array_merge ( $this->tablesUsed,
-                                                 array( 'page',
-                                                      'revision',
-                                                      'text',
+               $this->tablesUsed = array_merge (
+                       $this->tablesUsed,
+                       array( 'page',
+                                       'revision',
+                                       'text',
 
-                                                      'recentchanges',
-                                                      'logging',
+                                       'recentchanges',
+                                       'logging',
 
-                                                      'page_props',
-                                                      'pagelinks',
-                                                      'categorylinks',
-                                                      'langlinks',
-                                                      'externallinks',
-                                                      'imagelinks',
-                                                      'templatelinks',
-                                                      'iwlinks' ) );
+                                       'page_props',
+                                       'pagelinks',
+                                       'categorylinks',
+                                       'langlinks',
+                                       'externallinks',
+                                       'imagelinks',
+                                       'templatelinks',
+                                       'iwlinks' ) );
        }
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->pages_to_delete = array();
+
+               LinkCache::singleton()->clear(); # avoid cached redirect status, etc
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                foreach ( $this->pages_to_delete as $p ) {
                        /* @var $p WikiPage */
 
@@ -49,8 +53,15 @@ class WikiPageTest extends MediaWikiLangTestCase {
                parent::tearDown();
        }
 
-       protected function newPage( $title ) {
-               if ( is_string( $title ) ) $title = Title::newFromText( $title );
+       /**
+        * @param Title $title
+        * @param String $model
+        * @return WikiPage
+        */
+       protected function newPage( $title, $model = null ) {
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
 
                $p = new WikiPage( $title );
 
@@ -59,30 +70,113 @@ class WikiPageTest extends MediaWikiLangTestCase {
                return $p;
        }
 
+
+       /**
+        * @param String|Title|WikiPage $page
+        * @param String $text
+        * @param int $model
+        *
+        * @return WikiPage
+        */
        protected function createPage( $page, $text, $model = null ) {
-               if ( is_string( $page ) ) $page = Title::newFromText( $page );
-               if ( $page instanceof Title ) $page = $this->newPage( $page );
+               if ( is_string( $page ) ) {
+                       $page = Title::newFromText( $page );
+               }
+
+               if ( $page instanceof Title ) {
+                       $page = $this->newPage( $page, $model );
+               }
 
-               $page->doEdit( $text, "testing", EDIT_NEW );
+               $content = ContentHandler::makeContent( $text, $page->getTitle(), $model );
+               $page->doEditContent( $content, "testing", EDIT_NEW );
 
                return $page;
        }
 
+       public function testDoEditContent() {
+               $title = Title::newFromText( "WikiPageTest_testDoEditContent" );
+
+               $page = $this->newPage( $title );
+
+               $content = ContentHandler::makeContent( "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
+                                               . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
+                                               $title, CONTENT_MODEL_WIKITEXT );
+
+               $page->doEditContent( $content, "[[testing]] 1" );
+
+               $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
+               $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
+               $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
+               $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
+
+               $id = $page->getId();
+
+               # ------------------------
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
+               $n = $res->numRows();
+               $res->free();
+
+               $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
+
+               # ------------------------
+               $page = new WikiPage( $title );
+
+               $retrieved = $page->getContent();
+               $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
+
+               # ------------------------
+               $content = ContentHandler::makeContent( "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
+                                                                                               . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.",
+                                                                                               $title, CONTENT_MODEL_WIKITEXT );
+
+               $page->doEditContent( $content, "testing 2" );
+
+               # ------------------------
+               $page = new WikiPage( $title );
+
+               $retrieved = $page->getContent();
+               $this->assertTrue( $content->equals( $retrieved ), 'retrieved content doesn\'t equal original' );
+
+               # ------------------------
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
+               $n = $res->numRows();
+               $res->free();
+
+               $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
+       }
+
        public function testDoEdit() {
-               $title = Title::newFromText( "WikiPageTest_testDoEdit" );
+               $this->hideDeprecated( "WikiPage::doEdit" );
+               $this->hideDeprecated( "WikiPage::getText" );
+               $this->hideDeprecated( "Revision::getText" );
+
+               //NOTE: assume help namespace will default to wikitext
+               $title = Title::newFromText( "Help:WikiPageTest_testDoEdit" );
 
                $page = $this->newPage( $title );
 
                $text = "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
-                      . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
+                               . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
 
-               $page->doEdit( $text, "testing 1" );
+               $page->doEdit( $text, "[[testing]] 1" );
 
+               $this->assertTrue( $title->getArticleID() > 0, "Title object should have new page id" );
+               $this->assertTrue( $page->getId() > 0, "WikiPage should have new page id" );
                $this->assertTrue( $title->exists(), "Title object should indicate that the page now exists" );
                $this->assertTrue( $page->exists(), "WikiPage object should indicate that the page now exists" );
 
                $id = $page->getId();
 
+               # ------------------------
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
+               $n = $res->numRows();
+               $res->free();
+
+               $this->assertEquals( 1, $n, 'pagelinks should contain one link from the page' );
+
                # ------------------------
                $page = new WikiPage( $title );
 
@@ -91,7 +185,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
 
                # ------------------------
                $text = "At vero eos et accusam et justo duo [[dolores]] et ea rebum. "
-                      . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
+                               . "Stet clita kasd [[gubergren]], no sea takimata sanctus est.";
 
                $page->doEdit( $text, "testing 2" );
 
@@ -113,7 +207,10 @@ class WikiPageTest extends MediaWikiLangTestCase {
        public function testDoQuickEdit() {
                global $wgUser;
 
-               $page = $this->createPage( "WikiPageTest_testDoQuickEdit", "original text" );
+               $this->hideDeprecated( "WikiPage::doQuickEdit" );
+
+               //NOTE: assume help namespace will default to wikitext
+               $page = $this->createPage( "Help:WikiPageTest_testDoQuickEdit", "original text" );
 
                $text = "quick text";
                $page->doQuickEdit( $text, $wgUser, "testing q" );
@@ -123,13 +220,29 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $this->assertEquals( $text, $page->getText() );
        }
 
+       public function testDoQuickEditContent() {
+               global $wgUser;
+
+               $page = $this->createPage( "WikiPageTest_testDoQuickEditContent", "original text", CONTENT_MODEL_WIKITEXT );
+
+               $content = ContentHandler::makeContent( "quick text", $page->getTitle(), CONTENT_MODEL_WIKITEXT );
+               $page->doQuickEditContent( $content, $wgUser, "testing q" );
+
+               # ---------------------
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertTrue( $content->equals( $page->getContent() ) );
+       }
+
        public function testDoDeleteArticle() {
-               $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
+               $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo", CONTENT_MODEL_WIKITEXT );
                $id = $page->getId();
 
                $page->doDeleteArticle( "testing deletion" );
 
+               $this->assertFalse( $page->getTitle()->getArticleID() > 0, "Title object should now have page id 0" );
+               $this->assertFalse( $page->getId() > 0, "WikiPage should now have page id 0" );
                $this->assertFalse( $page->exists(), "WikiPage::exists should return false after page was deleted" );
+               $this->assertNull( $page->getContent(), "WikiPage::getContent should return null after page was deleted" );
                $this->assertFalse( $page->getText(), "WikiPage::getText should return false after page was deleted" );
 
                $t = Title::newFromText( $page->getTitle()->getPrefixedText() );
@@ -145,7 +258,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        public function testDoDeleteUpdates() {
-               $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
+               $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo", CONTENT_MODEL_WIKITEXT );
                $id = $page->getId();
 
                $page->doDeleteUpdates( $id );
@@ -166,47 +279,89 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $this->assertNull( $rev );
 
                # -----------------
-               $this->createPage( $page, "some text" );
+               $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
 
                $rev = $page->getRevision();
 
                $this->assertEquals( $page->getLatest(), $rev->getId() );
-               $this->assertEquals( "some text", $rev->getText() );
+               $this->assertEquals( "some text", $rev->getContent()->getNativeData() );
+       }
+
+       public function testGetContent() {
+               $page = $this->newPage( "WikiPageTest_testGetContent" );
+
+               $content = $page->getContent();
+               $this->assertNull( $content );
+
+               # -----------------
+               $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
+
+               $content = $page->getContent();
+               $this->assertEquals( "some text", $content->getNativeData() );
        }
 
        public function testGetText() {
+               $this->hideDeprecated( "WikiPage::getText" );
+
                $page = $this->newPage( "WikiPageTest_testGetText" );
 
                $text = $page->getText();
                $this->assertFalse( $text );
 
                # -----------------
-               $this->createPage( $page, "some text" );
+               $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
 
                $text = $page->getText();
                $this->assertEquals( "some text", $text );
        }
 
        public function testGetRawText() {
+               $this->hideDeprecated( "WikiPage::getRawText" );
+
                $page = $this->newPage( "WikiPageTest_testGetRawText" );
 
                $text = $page->getRawText();
                $this->assertFalse( $text );
 
                # -----------------
-               $this->createPage( $page, "some text" );
+               $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
 
                $text = $page->getRawText();
                $this->assertEquals( "some text", $text );
        }
 
-       
+       public function testGetContentModel() {
+               global $wgContentHandlerUseDB;
+
+               if ( !$wgContentHandlerUseDB ) {
+                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
+               }
+
+               $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT );
+
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $page->getContentModel() );
+       }
+
+       public function testGetContentHandler() {
+               global $wgContentHandlerUseDB;
+
+               if ( !$wgContentHandlerUseDB ) {
+                       $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
+               }
+
+               $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT );
+
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
+       }
+
        public function testExists() {
                $page = $this->newPage( "WikiPageTest_testExists" );
                $this->assertFalse( $page->exists() );
 
                # -----------------
-               $this->createPage( $page, "some text" );
+               $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
                $this->assertTrue( $page->exists() );
 
                $page = new WikiPage( $page->getTitle() );
@@ -220,7 +375,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $this->assertFalse( $page->exists() );
        }
 
-       public function dataHasViewableContent() {
+       public static function provideHasViewableContent() {
                return array(
                        array( 'WikiPageTest_testHasViewableContent', false, true ),
                        array( 'Special:WikiPageTest_testHasViewableContent', false ),
@@ -231,14 +386,14 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider dataHasViewableContent
+        * @dataProvider provideHasViewableContent
         */
        public function testHasViewableContent( $title, $viewable, $create = false ) {
                $page = $this->newPage( $title );
                $this->assertEquals( $viewable, $page->hasViewableContent() );
 
                if ( $create ) {
-                       $this->createPage( $page, "some text" );
+                       $this->createPage( $page, "some text", CONTENT_MODEL_WIKITEXT );
                        $this->assertTrue( $page->hasViewableContent() );
 
                        $page = new WikiPage( $page->getTitle() );
@@ -246,18 +401,22 @@ class WikiPageTest extends MediaWikiLangTestCase {
                }
        }
 
-       public function dataGetRedirectTarget() {
+       public static function provideGetRedirectTarget() {
                return array(
-                       array( 'WikiPageTest_testGetRedirectTarget_1', "hello world", null ),
-                       array( 'WikiPageTest_testGetRedirectTarget_2', "#REDIRECT [[hello world]]", "Hello world" ),
+                       array( 'WikiPageTest_testGetRedirectTarget_1', CONTENT_MODEL_WIKITEXT, "hello world", null ),
+                       array( 'WikiPageTest_testGetRedirectTarget_2', CONTENT_MODEL_WIKITEXT, "#REDIRECT [[hello world]]", "Hello world" ),
                );
        }
 
        /**
-        * @dataProvider dataGetRedirectTarget
+        * @dataProvider provideGetRedirectTarget
         */
-       public function testGetRedirectTarget( $title, $text, $target ) {
-               $page = $this->createPage( $title, $text );
+       public function testGetRedirectTarget( $title, $model, $text, $target ) {
+               $page = $this->createPage( $title, $text, $model );
+
+               # sanity check, because this test seems to fail for no reason for some people.
+               $c = $page->getContent();
+               $this->assertEquals( 'WikitextContent', get_class( $c ) );
 
                # now, test the actual redirect
                $t = $page->getRedirectTarget();
@@ -265,141 +424,160 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider dataGetRedirectTarget
+        * @dataProvider provideGetRedirectTarget
         */
-       public function testIsRedirect( $title, $text, $target ) {
-               $page = $this->createPage( $title, $text );
+       public function testIsRedirect( $title, $model, $text, $target ) {
+               $page = $this->createPage( $title, $text, $model );
                $this->assertEquals( !is_null( $target ), $page->isRedirect() );
        }
 
-       public function dataIsCountable() {
+       public static function provideIsCountable() {
                return array(
 
                        // any
                        array( 'WikiPageTest_testIsCountable',
-                              '',
-                              'any',
-                              true
+                                       CONTENT_MODEL_WIKITEXT,
+                                       '',
+                                       'any',
+                                       true
                        ),
                        array( 'WikiPageTest_testIsCountable',
-                              'Foo',
-                              'any',
-                              true
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo',
+                                       'any',
+                                       true
                        ),
 
                        // comma
                        array( 'WikiPageTest_testIsCountable',
-                              'Foo',
-                              'comma',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo',
+                                       'comma',
+                                       false
                        ),
                        array( 'WikiPageTest_testIsCountable',
-                              'Foo, bar',
-                              'comma',
-                              true
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo, bar',
+                                       'comma',
+                                       true
                        ),
 
                        // link
                        array( 'WikiPageTest_testIsCountable',
-                              'Foo',
-                              'link',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo',
+                                       'link',
+                                       false
                        ),
                        array( 'WikiPageTest_testIsCountable',
-                              'Foo [[bar]]',
-                              'link',
-                              true
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo [[bar]]',
+                                       'link',
+                                       true
                        ),
 
                        // redirects
                        array( 'WikiPageTest_testIsCountable',
-                              '#REDIRECT [[bar]]',
-                              'any',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       '#REDIRECT [[bar]]',
+                                       'any',
+                                       false
                        ),
                        array( 'WikiPageTest_testIsCountable',
-                              '#REDIRECT [[bar]]',
-                              'comma',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       '#REDIRECT [[bar]]',
+                                       'comma',
+                                       false
                        ),
                        array( 'WikiPageTest_testIsCountable',
-                              '#REDIRECT [[bar]]',
-                              'link',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       '#REDIRECT [[bar]]',
+                                       'link',
+                                       false
                        ),
 
                        // not a content namespace
                        array( 'Talk:WikiPageTest_testIsCountable',
-                              'Foo',
-                              'any',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo',
+                                       'any',
+                                       false
                        ),
                        array( 'Talk:WikiPageTest_testIsCountable',
-                              'Foo, bar',
-                              'comma',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo, bar',
+                                       'comma',
+                                       false
                        ),
                        array( 'Talk:WikiPageTest_testIsCountable',
-                              'Foo [[bar]]',
-                              'link',
-                              false
+                                       CONTENT_MODEL_WIKITEXT,
+                                       'Foo [[bar]]',
+                                       'link',
+                                       false
                        ),
 
                        // not a content namespace, different model
                        array( 'MediaWiki:WikiPageTest_testIsCountable.js',
-                              'Foo',
-                              'any',
-                              false
+                                       null,
+                                       'Foo',
+                                       'any',
+                                       false
                        ),
                        array( 'MediaWiki:WikiPageTest_testIsCountable.js',
-                              'Foo, bar',
-                              'comma',
-                              false
+                                       null,
+                                       'Foo, bar',
+                                       'comma',
+                                       false
                        ),
                        array( 'MediaWiki:WikiPageTest_testIsCountable.js',
-                              'Foo [[bar]]',
-                              'link',
-                              false
+                                       null,
+                                       'Foo [[bar]]',
+                                       'link',
+                                       false
                        ),
                );
        }
 
 
        /**
-        * @dataProvider dataIsCountable
+        * @dataProvider provideIsCountable
         */
-       public function testIsCountable( $title, $text, $mode, $expected ) {
+       public function testIsCountable( $title, $model, $text, $mode, $expected ) {
                global $wgArticleCountMethod;
 
-               $old = $wgArticleCountMethod;
+               $oldArticleCountMethod = $wgArticleCountMethod;
                $wgArticleCountMethod = $mode;
 
-               $page = $this->createPage( $title, $text );
-               $editInfo = $page->prepareTextForEdit( $page->getText() );
+               $page = $this->createPage( $title, $text, $model );
+               $hasLinks = wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
+                                       array( 'pl_from' => $page->getId() ), __METHOD__ );
+
+               $editInfo = $page->prepareContentForEdit( $page->getContent() );
 
                $v = $page->isCountable();
                $w = $page->isCountable( $editInfo );
-               $wgArticleCountMethod = $old;
+
+               $wgArticleCountMethod = $oldArticleCountMethod;
 
                $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
-                                                   . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
+                                                                                       . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
 
                $this->assertEquals( $expected, $w, "isCountable( \$editInfo ) returned unexpected value " . var_export( $v, true )
-                                                   . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
+                                                                                       . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
        }
 
-       public function dataGetParserOutput() {
+       public static function provideGetParserOutput() {
                return array(
-                       array("hello ''world''\n", "<p>hello <i>world</i></p>"),
+                       array( CONTENT_MODEL_WIKITEXT, "hello ''world''\n", "<p>hello <i>world</i></p>"),
                        // @todo: more...?
                );
        }
 
        /**
-        * @dataProvider dataGetParserOutput
+        * @dataProvider provideGetParserOutput
         */
-       public function testGetParserOutput( $text, $expectedHtml ) {
-               $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text );
+       public function testGetParserOutput( $model, $text, $expectedHtml ) {
+               $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text, $model );
 
                $opt = new ParserOptions();
                $po = $page->getParserOutput( $opt );
@@ -428,41 +606,49 @@ more stuff
 
 
        public function dataReplaceSection() {
+               //NOTE: assume the Help namespace to contain wikitext
                return array(
-                       array( 'WikiPageTest_testReplaceSection',
-                              WikiPageTest::$sections,
-                              "0",
-                              "No more",
-                              null,
-                              trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest::$sections ) )
-                       ),
-                       array( 'WikiPageTest_testReplaceSection',
-                              WikiPageTest::$sections,
-                              "",
-                              "No more",
-                              null,
-                              "No more"
-                       ),
-                       array( 'WikiPageTest_testReplaceSection',
-                              WikiPageTest::$sections,
-                              "2",
-                              "== TEST ==\nmore fun",
-                              null,
-                              trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikiPageTest::$sections ) )
-                       ),
-                       array( 'WikiPageTest_testReplaceSection',
-                              WikiPageTest::$sections,
-                              "8",
-                              "No more",
-                              null,
-                              trim( WikiPageTest::$sections )
-                       ),
-                       array( 'WikiPageTest_testReplaceSection',
-                              WikiPageTest::$sections,
-                              "new",
-                              "No more",
-                              "New",
-                              trim( WikiPageTest::$sections ) . "\n\n== New ==\n\nNo more"
+                       array( 'Help:WikiPageTest_testReplaceSection',
+                                       CONTENT_MODEL_WIKITEXT,
+                                       WikiPageTest::$sections,
+                                       "0",
+                                       "No more",
+                                       null,
+                                       trim( preg_replace( '/^Intro/sm', 'No more', WikiPageTest::$sections ) )
+                       ),
+                       array( 'Help:WikiPageTest_testReplaceSection',
+                                       CONTENT_MODEL_WIKITEXT,
+                                       WikiPageTest::$sections,
+                                       "",
+                                       "No more",
+                                       null,
+                                       "No more"
+                       ),
+                       array( 'Help:WikiPageTest_testReplaceSection',
+                                       CONTENT_MODEL_WIKITEXT,
+                                       WikiPageTest::$sections,
+                                       "2",
+                                       "== TEST ==\nmore fun",
+                                       null,
+                                       trim( preg_replace( '/^== test ==.*== foo ==/sm',
+                                                                               "== TEST ==\nmore fun\n\n== foo ==",
+                                                                               WikiPageTest::$sections ) )
+                       ),
+                       array( 'Help:WikiPageTest_testReplaceSection',
+                                       CONTENT_MODEL_WIKITEXT,
+                                       WikiPageTest::$sections,
+                                       "8",
+                                       "No more",
+                                       null,
+                                       trim( WikiPageTest::$sections )
+                       ),
+                       array( 'Help:WikiPageTest_testReplaceSection',
+                                       CONTENT_MODEL_WIKITEXT,
+                                       WikiPageTest::$sections,
+                                       "new",
+                                       "No more",
+                                       "New",
+                                       trim( WikiPageTest::$sections ) . "\n\n== New ==\n\nNo more"
                        ),
                );
        }
@@ -470,14 +656,28 @@ more stuff
        /**
         * @dataProvider dataReplaceSection
         */
-       public function testReplaceSection( $title, $text, $section, $with, $sectionTitle, $expected ) {
-               $page = $this->createPage( $title, $text );
+       public function testReplaceSection( $title, $model, $text, $section, $with, $sectionTitle, $expected ) {
+               $this->hideDeprecated( "WikiPage::replaceSection" );
+
+               $page = $this->createPage( $title, $text, $model );
                $text = $page->replaceSection( $section, $with, $sectionTitle );
                $text = trim( $text );
 
                $this->assertEquals( $expected, $text );
        }
 
+       /**
+        * @dataProvider dataReplaceSection
+        */
+       public function testReplaceSectionContent( $title, $model, $text, $section, $with, $sectionTitle, $expected ) {
+               $page = $this->createPage( $title, $text, $model );
+
+               $content = ContentHandler::makeContent( $with, $page->getTitle(), $page->getContentModel() );
+               $c = $page->replaceSectionContent( $section, $content, $sectionTitle );
+
+               $this->assertEquals( $expected, is_null( $c ) ? null : trim( $c->getNativeData() ) );
+       }
+
        /* @todo FIXME: fix this!
        public function testGetUndoText() {
                global $wgDiff3;
@@ -538,19 +738,22 @@ more stuff
 
                $text = "one";
                $page = $this->newPage( "WikiPageTest_testDoRollback" );
-               $page->doEdit( $text, "section one", EDIT_NEW, false, $admin );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ),
+                                                               "section one", EDIT_NEW, false, $admin );
 
                $user1 = new User();
                $user1->setName( "127.0.1.11" );
                $text .= "\n\ntwo";
                $page = new WikiPage( $page->getTitle() );
-               $page->doEdit( $text, "adding section two", 0, false, $user1 );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ),
+                                                               "adding section two", 0, false, $user1 );
 
                $user2 = new User();
                $user2->setName( "127.0.2.13" );
                $text .= "\n\nthree";
                $page = new WikiPage( $page->getTitle() );
-               $page->doEdit( $text, "adding section three", 0, false, $user2 );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ),
+                                                               "adding section three", 0, false, $user2 );
 
                # we are having issues with doRollback spuriously failing. apparently the last revision somehow goes missing
                # or not committed under some circumstances. so, make sure the last revision has the right user name.
@@ -577,8 +780,9 @@ more stuff
                }
 
                $page = new WikiPage( $page->getTitle() );
-               $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
-               $this->assertEquals( "one\n\ntwo", $page->getText() );
+               $this->assertEquals( $rev2->getSha1(), $page->getRevision()->getSha1(),
+                                                               "rollback did not revert to the correct revision" );
+               $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
        }
 
        /**
@@ -590,14 +794,16 @@ more stuff
 
                $text = "one";
                $page = $this->newPage( "WikiPageTest_testDoRollback" );
-               $page->doEdit( $text, "section one", EDIT_NEW, false, $admin );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                                                               "section one", EDIT_NEW, false, $admin );
                $rev1 = $page->getRevision();
 
                $user1 = new User();
                $user1->setName( "127.0.1.11" );
                $text .= "\n\ntwo";
                $page = new WikiPage( $page->getTitle() );
-               $page->doEdit( $text, "adding section two", 0, false, $user1 );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle(), CONTENT_MODEL_WIKITEXT ),
+                                                               "adding section two", 0, false, $user1 );
 
                # now, try the rollback
                $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
@@ -609,11 +815,12 @@ more stuff
                }
 
                $page = new WikiPage( $page->getTitle() );
-               $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
-               $this->assertEquals( "one", $page->getText() );
+               $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(),
+                                                       "rollback did not revert to the correct revision" );
+               $this->assertEquals( "one", $page->getContent()->getNativeData() );
        }
 
-       public function dataGetAutosummary( ) {
+       public static function provideGetAutosummary( ) {
                return array(
                        array(
                                'Hello there, world!',
@@ -655,17 +862,20 @@ more stuff
        }
 
        /**
-        * @dataProvider dataGetAutoSummary
+        * @dataProvider provideGetAutoSummary
         */
        public function testGetAutosummary( $old, $new, $flags, $expected ) {
+               $this->hideDeprecated( "WikiPage::getAutosummary" );
+
                $page = $this->newPage( "WikiPageTest_testGetAutosummary" );
 
                $summary = $page->getAutosummary( $old, $new, $flags );
 
-               $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
+               $this->assertTrue( (bool)preg_match( $expected, $summary ),
+                                                       "Autosummary didn't match expected pattern $expected: $summary" );
        }
 
-       public function dataGetAutoDeleteReason( ) {
+       public static function provideGetAutoDeleteReason( ) {
                return array(
                        array(
                                array(),
@@ -702,10 +912,10 @@ more stuff
                        array(
                                array(
                                        array( "first edit: "
-                                            . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
-                                            . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
-                                            . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
-                                            . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
+                                                . "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam "
+                                                . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. "
+                                                . "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea "
+                                                . "takimata sanctus est Lorem ipsum dolor sit amet.'", null ),
                                ),
                                '/first edit:.*\.\.\."/',
                                false
@@ -724,12 +934,13 @@ more stuff
        }
 
        /**
-        * @dataProvider dataGetAutoDeleteReason
+        * @dataProvider provideGetAutoDeleteReason
         */
        public function testGetAutoDeleteReason( $edits, $expectedResult, $expectedHistory ) {
                global $wgUser;
 
-               $page = $this->newPage( "WikiPageTest_testGetAutoDeleteReason" );
+               //NOTE: assume Help namespace to contain wikitext
+               $page = $this->newPage( "Help:WikiPageTest_testGetAutoDeleteReason" );
 
                $c = 1;
 
@@ -739,7 +950,9 @@ more stuff
                        if ( !empty( $edit[1] ) ) $user->setName( $edit[1] );
                        else $user = $wgUser;
 
-                       $page->doEdit( $edit[0], "test edit $c", $c < 2 ? EDIT_NEW : 0, false, $user );
+                       $content = ContentHandler::makeContent( $edit[0], $page->getTitle(), $page->getContentModel() );
+
+                       $page->doEditContent( $content, "test edit $c", $c < 2 ? EDIT_NEW : 0, false, $user );
 
                        $c += 1;
                }
@@ -747,33 +960,36 @@ more stuff
                $reason = $page->getAutoDeleteReason( $hasHistory );
 
                if ( is_bool( $expectedResult ) || is_null( $expectedResult ) ) $this->assertEquals( $expectedResult, $reason );
-               else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ), "Autosummary didn't match expected pattern $expectedResult: $reason" );
+               else $this->assertTrue( (bool)preg_match( $expectedResult, $reason ),
+                                                               "Autosummary didn't match expected pattern $expectedResult: $reason" );
 
-               $this->assertEquals( $expectedHistory, $hasHistory, "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
+               $this->assertEquals( $expectedHistory, $hasHistory,
+                                                       "expected \$hasHistory to be " . var_export( $expectedHistory, true ) );
 
                $page->doDeleteArticle( "done" );
        }
 
-       public function dataPreSaveTransform() {
+       public static function providePreSaveTransform() {
                return array(
                        array( 'hello this is ~~~',
-                              "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+                                       "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
                        ),
                        array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
-                              'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+                                       'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
                        ),
                );
        }
 
        /**
-        * @dataProvider dataPreSaveTransform
+        * @dataProvider providePreSaveTransform
         */
        public function testPreSaveTransform( $text, $expected ) {
                $this->hideDeprecated( 'WikiPage::preSaveTransform' );
                $user = new User();
                $user->setName("127.0.0.1");
 
-               $page = $this->newPage( "WikiPageTest_testPreloadTransform" );
+               //NOTE: assume Help namespace to contain wikitext
+               $page = $this->newPage( "Help:WikiPageTest_testPreloadTransform" );
                $text = $page->preSaveTransform( $text, $user );
 
                $this->assertEquals( $expected, $text );
diff --git a/tests/phpunit/includes/WikiPageTest_ContentHandlerUseDB.php b/tests/phpunit/includes/WikiPageTest_ContentHandlerUseDB.php
new file mode 100644 (file)
index 0000000..1af6806
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ * ^--- important, causes temporary tables to be used instead of the real database
+ */
+class WikiPageTest_ContentHandlerUseDB extends WikiPageTest {
+       var $saveContentHandlerNoDB = null;
+
+       function setUp() {
+               global $wgContentHandlerUseDB;
+
+               parent::setUp();
+
+               $this->saveContentHandlerNoDB = $wgContentHandlerUseDB;
+
+               $wgContentHandlerUseDB = false;
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               $page_table = $dbw->tableName( 'page' );
+               $revision_table = $dbw->tableName( 'revision' );
+               $archive_table = $dbw->tableName( 'archive' );
+
+               if ( $dbw->fieldExists( $page_table, 'page_content_model' ) ) {
+                       $dbw->query( "alter table $page_table drop column page_content_model" );
+                       $dbw->query( "alter table $revision_table drop column rev_content_model" );
+                       $dbw->query( "alter table $revision_table drop column rev_content_format" );
+                       $dbw->query( "alter table $archive_table drop column ar_content_model" );
+                       $dbw->query( "alter table $archive_table drop column ar_content_format" );
+               }
+       }
+
+       function tearDown() {
+               global $wgContentHandlerUseDB;
+
+               $wgContentHandlerUseDB = $this->saveContentHandlerNoDB;
+
+               parent::tearDown();
+       }
+
+       public function testGetContentModel() {
+               $page = $this->createPage( "WikiPageTest_testGetContentModel", "some text", CONTENT_MODEL_JAVASCRIPT );
+
+               $page = new WikiPage( $page->getTitle() );
+
+               // NOTE: since the content model is not recorded in the database,
+               //       we expect to get the default, namely CONTENT_MODEL_WIKITEXT
+               $this->assertEquals( CONTENT_MODEL_WIKITEXT, $page->getContentModel() );
+       }
+
+       public function testGetContentHandler() {
+               $page = $this->createPage( "WikiPageTest_testGetContentHandler", "some text", CONTENT_MODEL_JAVASCRIPT );
+
+               // NOTE: since the content model is not recorded in the database,
+               //       we expect to get the default, namely CONTENT_MODEL_WIKITEXT
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertEquals( 'WikitextContentHandler', get_class( $page->getContentHandler() ) );
+       }
+
+}
+
+
diff --git a/tests/phpunit/includes/WikitextContentHandlerTest.php b/tests/phpunit/includes/WikitextContentHandlerTest.php
new file mode 100644 (file)
index 0000000..8aeb529
--- /dev/null
@@ -0,0 +1,199 @@
+<?php
+
+/**
+ * @group ContentHandler
+ */
+class WikitextContentHandlerTest extends MediaWikiTestCase {
+
+       /**
+        * @var ContentHandler
+        */
+       var $handler;
+
+       public function setup() {
+               $this->handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
+       }
+
+       public function teardown() {
+       }
+
+       public function testSerializeContent( ) {
+               $content = new WikitextContent( 'hello world' );
+
+               $this->assertEquals( 'hello world', $this->handler->serializeContent( $content ) );
+               $this->assertEquals( 'hello world', $this->handler->serializeContent( $content, CONTENT_FORMAT_WIKITEXT ) );
+
+               try {
+                       $this->handler->serializeContent( $content, 'dummy/foo' );
+                       $this->fail( "serializeContent() should have failed on unknown format" );
+               } catch ( MWException $e ) {
+                       // ok, as expected
+               }
+       }
+
+       public function testUnserializeContent( ) {
+               $content = $this->handler->unserializeContent( 'hello world' );
+               $this->assertEquals( 'hello world', $content->getNativeData() );
+
+               $content = $this->handler->unserializeContent( 'hello world', CONTENT_FORMAT_WIKITEXT );
+               $this->assertEquals( 'hello world', $content->getNativeData() );
+
+               try {
+                       $this->handler->unserializeContent( 'hello world', 'dummy/foo' );
+                       $this->fail( "unserializeContent() should have failed on unknown format" );
+               } catch ( MWException $e ) {
+                       // ok, as expected
+               }
+       }
+
+       public function testMakeEmptyContent() {
+               $content = $this->handler->makeEmptyContent();
+
+               $this->assertTrue( $content->isEmpty() );
+               $this->assertEquals( '', $content->getNativeData() );
+       }
+
+       public function dataIsSupportedFormat( ) {
+               return array(
+                       array( null, true ),
+                       array( CONTENT_FORMAT_WIKITEXT, true ),
+                       array( 99887766, false ),
+               );
+       }
+
+       /**
+        * @dataProvider dataIsSupportedFormat
+        */
+       public function testIsSupportedFormat( $format, $supported ) {
+               $this->assertEquals( $supported, $this->handler->isSupportedFormat( $format ) );
+       }
+
+       public function dataMerge3( ) {
+               return array(
+                       array( "first paragraph
+
+                                       second paragraph\n",
+
+                                       "FIRST paragraph
+
+                                       second paragraph\n",
+
+                                       "first paragraph
+
+                                       SECOND paragraph\n",
+
+                                       "FIRST paragraph
+
+                                       SECOND paragraph\n",
+                       ),
+
+                       array( "first paragraph
+                                       second paragraph\n",
+
+                                  "Bla bla\n",
+
+                                  "Blubberdibla\n",
+
+                                  false,
+                       ),
+
+               );
+       }
+
+       /**
+        * @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" );
+               }
+
+               // test merge
+               $oldContent = new WikitextContent( $old );
+               $myContent = new WikitextContent( $mine );
+               $yourContent = new WikitextContent( $yours );
+
+               $merged = $this->handler->merge3( $oldContent, $myContent, $yourContent );
+
+               $this->assertEquals( $expected, $merged ? $merged->getNativeData() : $merged );
+       }
+
+       public function dataGetAutosummary( ) {
+               return array(
+                       array(
+                               'Hello there, world!',
+                               '#REDIRECT [[Foo]]',
+                               0,
+                               '/^Redirected page .*Foo/'
+                       ),
+
+                       array(
+                               null,
+                               'Hello world!',
+                               EDIT_NEW,
+                               '/^Created page .*Hello/'
+                       ),
+
+                       array(
+                               'Hello there, world!',
+                               '',
+                               0,
+                               '/^Blanked/'
+                       ),
+
+                       array(
+                               'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
+                               labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
+                               ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
+                               'Hello world!',
+                               0,
+                               '/^Replaced .*Hello/'
+                       ),
+
+                       array(
+                               'foo',
+                               'bar',
+                               0,
+                               '/^$/'
+                       ),
+               );
+       }
+
+       /**
+        * @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 );
+
+               $summary = $this->handler->getAutosummary( $oldContent, $newContent, $flags );
+
+               $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
+       }
+
+       /**
+        * @todo Text case requires database, should be done by a test class in the Database group
+        */
+       /*
+       public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {
+       }
+       */
+
+       /**
+        * @todo Text case requires database, should be done by a test class in the Database group
+        */
+       /*
+       public function testGetUndoContent( Revision $current, Revision $undo, Revision $undoafter = null ) {
+       }
+       */
+
+}
diff --git a/tests/phpunit/includes/WikitextContentTest.php b/tests/phpunit/includes/WikitextContentTest.php
new file mode 100644 (file)
index 0000000..dac8041
--- /dev/null
@@ -0,0 +1,557 @@
+<?php
+
+/**
+ * @group ContentHandler
+ *
+ * @group Database
+ *        ^--- needed, because we do need the database to test link updates
+ */
+class WikitextContentTest extends MediaWikiTestCase {
+
+       public function setup() {
+               global $wgUser;
+
+               // anon user
+               $wgUser = new User();
+               $wgUser->setName( '127.0.0.1' );
+
+               $this->context = new RequestContext( new FauxRequest() );
+               $this->context->setTitle( Title::newFromText( "Test" ) );
+               $this->context->setUser( $wgUser );
+       }
+
+       public function newContent( $text ) {
+               return new WikitextContent( $text );
+       }
+
+
+       public function dataGetParserOutput() {
+               return array(
+                       array("WikitextContentTest_testGetParserOutput", CONTENT_MODEL_WIKITEXT, "hello ''world''\n", "<p>hello <i>world</i>\n</p>"),
+                       // @todo: more...?
+               );
+       }
+
+       /**
+        * @dataProvider dataGetParserOutput
+        */
+       public function testGetParserOutput( $title, $model, $text, $expectedHtml ) {
+               $title = Title::newFromText( $title );
+               $content = ContentHandler::makeContent( $text, $title, $model );
+
+               $po = $content->getParserOutput( $title );
+
+               $this->assertEquals( $expectedHtml, $po->getText() );
+               // @todo: assert more properties
+       }
+
+       public function dataGetSecondaryDataUpdates() {
+               return array(
+                       array("WikitextContentTest_testGetSecondaryDataUpdates_1",
+                               CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+                               array( 'LinksUpdate' => array(  'mRecursive' => true,
+                                                               'mLinks' => array() ) )
+                       ),
+                       array("WikitextContentTest_testGetSecondaryDataUpdates_2",
+                               CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+                               array( 'LinksUpdate' => array(  'mRecursive' => true,
+                                                               'mLinks' => array( array( 'World_test_21344' => 0 ) ) ) )
+                       ),
+                       // @todo: more...?
+               );
+       }
+
+       /**
+        * @dataProvider dataGetSecondaryDataUpdates
+        * @group Database
+        */
+       public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
+               $title = Title::newFromText( $title );
+               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+
+               $content = ContentHandler::makeContent( $text, $title, $model );
+
+               $updates = $content->getSecondaryDataUpdates( $title );
+
+               // make updates accessible by class name
+               foreach ( $updates as $update ) {
+                       $class = get_class( $update );
+                       $updates[$class] = $update;
+               }
+
+               foreach ( $expectedStuff as $class => $fieldValues ) {
+                       $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+                       $update = $updates[$class];
+
+                       foreach ( $fieldValues as $field => $value ) {
+                               $v = $update->$field; #if the field doesn't exist, just crash and burn
+                               $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+                       }
+               }
+       }
+
+
+       static $sections =
+
+"Intro
+
+== stuff ==
+hello world
+
+== test ==
+just a test
+
+== foo ==
+more stuff
+";
+
+       public function dataGetSection() {
+               return array(
+                       array( WikitextContentTest::$sections,
+                                       "0",
+                                       "Intro"
+                       ),
+                       array( WikitextContentTest::$sections,
+                                       "2",
+"== test ==
+just a test"
+                       ),
+                       array( WikitextContentTest::$sections,
+                                       "8",
+                                       false
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetSection
+        */
+       public function testGetSection( $text, $sectionId, $expectedText ) {
+               $content = $this->newContent( $text );
+
+               $sectionContent = $content->getSection( $sectionId );
+
+               $this->assertEquals( $expectedText, is_null( $sectionContent ) ? null : $sectionContent->getNativeData() );
+       }
+
+       public function dataReplaceSection() {
+               return array(
+                       array( WikitextContentTest::$sections,
+                              "0",
+                              "No more",
+                              null,
+                              trim( preg_replace( '/^Intro/sm', 'No more', WikitextContentTest::$sections ) )
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "",
+                              "No more",
+                              null,
+                              "No more"
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "2",
+                              "== TEST ==\nmore fun",
+                              null,
+                              trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikitextContentTest::$sections ) )
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "8",
+                              "No more",
+                              null,
+                              WikitextContentTest::$sections
+                       ),
+                       array( WikitextContentTest::$sections,
+                              "new",
+                              "No more",
+                              "New",
+                              trim( WikitextContentTest::$sections ) . "\n\n\n== New ==\n\nNo more"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataReplaceSection
+        */
+       public function testReplaceSection( $text, $section, $with, $sectionTitle, $expected ) {
+               $content = $this->newContent( $text );
+               $c = $content->replaceSection( $section, $this->newContent( $with ), $sectionTitle );
+
+               $this->assertEquals( $expected, is_null( $c ) ? null : $c->getNativeData() );
+       }
+
+       public function testAddSectionHeader( ) {
+               $content = $this->newContent( 'hello world' );
+               $content = $content->addSectionHeader( 'test' );
+
+               $this->assertEquals( "== test ==\n\nhello world", $content->getNativeData() );
+       }
+
+       public 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>',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataPreSaveTransform
+        */
+       public function testPreSaveTransform( $text, $expected ) {
+               global $wgContLang;
+
+               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+               $content = $this->newContent( $text );
+               $content = $content->preSaveTransform( $this->context->getTitle(), $this->context->getUser(), $options );
+
+               $this->assertEquals( $expected, $content->getNativeData() );
+       }
+
+       public function dataPreloadTransform() {
+               return array(
+                       array( 'hello this is ~~~',
+                              "hello this is ~~~",
+                       ),
+                       array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+                              'hello \'\'this\'\' is bar',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataPreloadTransform
+        */
+       public function testPreloadTransform( $text, $expected ) {
+               global $wgContLang;
+               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+               $content = $this->newContent( $text );
+               $content = $content->preloadTransform( $this->context->getTitle(), $options );
+
+               $this->assertEquals( $expected, $content->getNativeData() );
+       }
+
+       public function dataGetRedirectTarget() {
+               return array(
+                       array( '#REDIRECT [[Test]]',
+                              'Test',
+                       ),
+                       array( '#REDIRECT Test',
+                              null,
+                       ),
+                       array( '* #REDIRECT [[Test]]',
+                              null,
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetRedirectTarget
+        */
+       public function testGetRedirectTarget( $text, $expected ) {
+               $content = $this->newContent( $text );
+               $t = $content->getRedirectTarget( );
+
+               if ( is_null( $expected ) ) {
+                       $this->assertNull( $t, "text should not have generated a redirect target: $text" );
+               } else {
+                       $this->assertEquals( $expected, $t->getPrefixedText() );
+               }
+       }
+
+       /**
+        * @dataProvider dataGetRedirectTarget
+        */
+       public function isRedirect( $text, $expected ) {
+               $content = $this->newContent( $text );
+
+               $this->assertEquals( !is_null($expected), $content->isRedirect() );
+       }
+
+
+       /**
+        * @todo: test needs database! Should be done by a test class in the Database group.
+        */
+       /*
+       public function getRedirectChain() {
+               $text = $this->getNativeData();
+               return Title::newFromRedirectArray( $text );
+       }
+       */
+
+       /**
+        * @todo: test needs database! Should be done by a test class in the Database group.
+        */
+       /*
+       public function getUltimateRedirectTarget() {
+               $text = $this->getNativeData();
+               return Title::newFromRedirectRecurse( $text );
+       }
+       */
+
+
+       public function dataIsCountable() {
+               return array(
+                       array( '',
+                              null,
+                              'any',
+                              true
+                       ),
+                       array( 'Foo',
+                              null,
+                              'any',
+                              true
+                       ),
+                       array( 'Foo',
+                              null,
+                              'comma',
+                              false
+                       ),
+                       array( 'Foo, bar',
+                              null,
+                              'comma',
+                              true
+                       ),
+                       array( 'Foo',
+                              null,
+                              'link',
+                              false
+                       ),
+                       array( 'Foo [[bar]]',
+                              null,
+                              'link',
+                              true
+                       ),
+                       array( 'Foo',
+                              true,
+                              'link',
+                              true
+                       ),
+                       array( 'Foo [[bar]]',
+                              false,
+                              'link',
+                              false
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'any',
+                              false
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'comma',
+                              false
+                       ),
+                       array( '#REDIRECT [[bar]]',
+                              true,
+                              'link',
+                              false
+                       ),
+               );
+       }
+
+
+       /**
+        * @dataProvider dataIsCountable
+        * @group Database
+        */
+       public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
+               global $wgArticleCountMethod;
+
+               $old = $wgArticleCountMethod;
+               $wgArticleCountMethod = $mode;
+
+               $content = $this->newContent( $text );
+
+               $v = $content->isCountable( $hasLinks, $this->context->getTitle() );
+               $wgArticleCountMethod = $old;
+
+               $this->assertEquals( $expected, $v, "isCountable() returned unexpected value " . var_export( $v, true )
+                                                   . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
+       }
+
+       public function dataGetTextForSummary() {
+               return array(
+                       array( "hello\nworld.",
+                              16,
+                              'hello world.',
+                       ),
+                       array( 'hello world.',
+                              8,
+                              'hello...',
+                       ),
+                       array( '[[hello world]].',
+                              8,
+                              'hel...',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataGetTextForSummary
+        */
+       public function testGetTextForSummary( $text, $maxlength, $expected ) {
+               $content = $this->newContent( $text );
+
+               $this->assertEquals( $expected, $content->getTextForSummary( $maxlength ) );
+       }
+
+
+       public function testGetTextForSearchIndex( ) {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( "hello world.", $content->getTextForSearchIndex() );
+       }
+
+       public function testCopy() {
+               $content = $this->newContent( "hello world." );
+               $copy = $content->copy();
+
+               $this->assertTrue( $content->equals( $copy ), "copy must be equal to original" );
+               $this->assertEquals( "hello world.", $copy->getNativeData() );
+       }
+
+       public function testGetSize( ) {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( 12, $content->getSize() );
+       }
+
+       public function testGetNativeData( ) {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( "hello world.", $content->getNativeData() );
+       }
+
+       public function testGetWikitextForTransclusion( ) {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( "hello world.", $content->getWikitextForTransclusion() );
+       }
+
+       public function testMatchMagicWord( ) {
+               $mw = MagicWord::get( "staticredirect" );
+
+               $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+               $this->assertTrue( $content->matchMagicWord( $mw ), "should have matched magic word" );
+
+               $content = $this->newContent( "#REDIRECT [[FOO]]" );
+               $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word" );
+       }
+
+       public function testUpdateRedirect( ) {
+               $target = Title::newFromText( "testUpdateRedirect_target" );
+
+               // test with non-redirect page
+               $content = $this->newContent( "hello world." );
+               $newContent = $content->updateRedirect( $target );
+
+               $this->assertTrue( $content->equals( $newContent ), "content should be unchanged" );
+
+               // test with actual redirect
+               $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+               $newContent = $content->updateRedirect( $target );
+
+               $this->assertFalse( $content->equals( $newContent ), "content should have changed" );
+               $this->assertTrue( $newContent->isRedirect(), "new content should be a redirect" );
+
+               $this->assertEquals( $target->getFullText(), $newContent->getRedirectTarget()->getFullText() );
+       }
+
+       # =================================================================================================================
+
+       public function testGetModel() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getModel() );
+       }
+
+       public function testGetContentHandler() {
+               $content = $this->newContent( "hello world." );
+
+               $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
+       }
+
+       public function dataIsEmpty( ) {
+               return array(
+                       array( '', true ),
+                       array( '  ', false ),
+                       array( '0', false ),
+                       array( 'hallo welt.', false ),
+               );
+       }
+
+       /**
+        * @dataProvider dataIsEmpty
+        */
+       public function testIsEmpty( $text, $empty ) {
+               $content = $this->newContent( $text );
+
+               $this->assertEquals( $empty, $content->isEmpty() );
+       }
+
+       public function dataEquals( ) {
+               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 WikitextContent( "HALLO" ), false ),
+               );
+       }
+
+       /**
+        * @dataProvider dataEquals
+        */
+       public function testEquals( Content $a, Content $b = null, $equal = false ) {
+               $this->assertEquals( $equal, $a->equals( $b ) );
+       }
+
+       public function dataGetDeletionUpdates() {
+               return array(
+                       array("WikitextContentTest_testGetSecondaryDataUpdates_1",
+                               CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+                               array( 'LinksDeletionUpdate' => array( ) )
+                       ),
+                       array("WikitextContentTest_testGetSecondaryDataUpdates_2",
+                               CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+                               array( 'LinksDeletionUpdate' => array( ) )
+                       ),
+                       // @todo: more...?
+               );
+       }
+
+       /**
+        * @dataProvider dataGetDeletionUpdates
+        */
+       public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
+               $title = Title::newFromText( $title );
+               $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+
+               $content = ContentHandler::makeContent( $text, $title, $model );
+
+               $updates = $content->getDeletionUpdates( WikiPage::factory( $title ) );
+
+               // make updates accessible by class name
+               foreach ( $updates as $update ) {
+                       $class = get_class( $update );
+                       $updates[ $class ] = $update;
+               }
+
+               foreach ( $expectedStuff as $class => $fieldValues ) {
+                       $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+                       $update = $updates[ $class ];
+
+                       foreach ( $fieldValues as $field => $value ) {
+                               $v = $update->$field; #if the field doesn't exist, just crash and burn
+                               $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+                       }
+               }
+       }
+
+}
index 2407c15..75bd922 100644 (file)
@@ -35,7 +35,7 @@ class XmlSelectTest extends MediaWikiTestCase {
         * Provides a fourth parameters representing the expected HTML output
         *
         */
-       public function provideConstructionParameters() {
+       public static function provideConstructionParameters() {
                return array(
                        /**
                         * Values are set following a 3-bit Gray code where two successive
index 93ed3dc..3cc5422 100644 (file)
@@ -4,17 +4,11 @@ class XmlTest extends MediaWikiTestCase {
        private static $oldLang;
        private static $oldNamespaces;
 
-       public function setUp() {
-               global $wgLang, $wgContLang;
+       protected function setUp() {
+               parent::setUp();
 
-               self::$oldLang = $wgLang;
-               $wgLang = Language::factory( 'en' );
-
-               // Hardcode namespaces during test runs,
-               // so that html output based on existing namespaces
-               // can be properly evaluated.
-               self::$oldNamespaces = $wgContLang->getNamespaces();
-               $wgContLang->setNamespaces( array(
+               $langObj = Language::factory( 'en' );
+               $langObj->setNamespaces( array(
                        -2 => 'Media',
                        -1 => 'Special',
                        0  => '',
@@ -32,13 +26,10 @@ class XmlTest extends MediaWikiTestCase {
                        100  => 'Custom',
                        101  => 'Custom_talk',
                ) );
-       }
 
-       public function tearDown() {
-               global $wgLang, $wgContLang;
-               $wgLang = self::$oldLang;
-               
-               $wgContLang->setNamespaces( self::$oldNamespaces );
+               $this->setMwGlobals( array(
+                       'wgLang' => $langObj,
+               ) );
        }
 
        public function testExpandAttributes() {
@@ -112,9 +103,6 @@ class XmlTest extends MediaWikiTestCase {
                $this->assertEquals( '</element>', Xml::closeElement( 'element' ), 'closeElement() shortcut' );
        }
 
-       /**
-        * @group Broken
-        */
        public function testDateMenu( ) {
                $curYear   = intval(gmdate('Y'));
                $prevYear  = $curYear - 1;
@@ -126,7 +114,7 @@ class XmlTest extends MediaWikiTestCase {
                if( $nextMonth == 13 ) { $nextMonth = 1; }
 
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="2011" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2" selected="">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
@@ -143,7 +131,7 @@ class XmlTest extends MediaWikiTestCase {
                        "Date menu for february 2011"
                );
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="2011" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
@@ -165,17 +153,15 @@ class XmlTest extends MediaWikiTestCase {
                        "Date menu year is the current one when not specified"
                );
 
-               // @todo FIXME: next month can be in the next year
-               // test failing because it is now december
+               $wantedYear = $nextMonth == 1 ? $curYear : $prevYear;
                $this->assertEquals(
-                       Xml::dateMenu( $prevYear, $nextMonth ),
+                       Xml::dateMenu( $wantedYear, $nextMonth ),
                        Xml::dateMenu( '', $nextMonth ),
                        "Date menu next month is 11 months ago"
                );
 
-               # @todo FIXME: Please note there is no year there!
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
index f7ca59e..81b32c2 100644 (file)
@@ -3,8 +3,8 @@
 class ZipDirectoryReaderTest extends MediaWikiTestCase {
        var $zipDir, $entries;
 
-       function setUp() {
-               $this->zipDir = dirname( __FILE__ ) . '/../data/zip';
+       protected function setUp() {
+               $this->zipDir = __DIR__ . '/../data/zip';
        }
 
        function zipCallback( $entry ) {
index 5dfceee..52f1d28 100644 (file)
@@ -6,7 +6,7 @@
  */
 class ApiBlockTest extends ApiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->doLogin();
        }
diff --git a/tests/phpunit/includes/api/ApiEditPageTest.php b/tests/phpunit/includes/api/ApiEditPageTest.php
new file mode 100644 (file)
index 0000000..8eca9a3
--- /dev/null
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * Tests for MediaWiki api.php?action=edit.
+ *
+ * @author Daniel Kinzler
+ *
+ * @group API
+ * @group Database
+ */
+class ApiEditPageTest extends ApiTestCase {
+
+       public function setup() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               parent::setup();
+
+               $wgExtraNamespaces[12312] = 'Dummy';
+               $wgExtraNamespaces[12313] = 'Dummy_talk';
+
+               $wgNamespaceContentModels[12312] = "testing";
+               $wgContentHandlers["testing"] = 'DummyContentHandlerForTesting';
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+
+               $this->doLogin();
+       }
+
+       public function teardown() {
+               global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+
+               unset( $wgExtraNamespaces[12312] );
+               unset( $wgExtraNamespaces[12313] );
+
+               unset( $wgNamespaceContentModels[12312] );
+               unset( $wgContentHandlers["testing"] );
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
+
+               parent::teardown();
+       }
+
+       function testEdit( ) {
+               $name = 'Help:ApiEditPageTest_testEdit'; // assume Help namespace to default to wikitext
+
+               // -- test new page --------------------------------------------
+               $apiResult = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'some text', ) );
+               $apiResult = $apiResult[0];
+
+               // Validate API result data
+               $this->assertArrayHasKey( 'edit', $apiResult );
+               $this->assertArrayHasKey( 'result', $apiResult['edit'] );
+               $this->assertEquals( 'Success', $apiResult['edit']['result'] );
+
+               $this->assertArrayHasKey( 'new', $apiResult['edit'] );
+               $this->assertArrayNotHasKey( 'nochange', $apiResult['edit'] );
+
+               $this->assertArrayHasKey( 'pageid', $apiResult['edit'] );
+
+               // -- test existing page, no change ----------------------------
+               $data = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'some text', ) );
+
+               $this->assertEquals( 'Success', $data[0]['edit']['result'] );
+
+               $this->assertArrayNotHasKey( 'new', $data[0]['edit'] );
+               $this->assertArrayHasKey( 'nochange', $data[0]['edit'] );
+
+               // -- test existing page, with change --------------------------
+               $data = $this->doApiRequestWithToken( array(
+                               'action' => 'edit',
+                               'title' => $name,
+                               'text' => 'different text' ) );
+
+               $this->assertEquals( 'Success', $data[0]['edit']['result'] );
+
+               $this->assertArrayNotHasKey( 'new', $data[0]['edit'] );
+               $this->assertArrayNotHasKey( 'nochange', $data[0]['edit'] );
+
+               $this->assertArrayHasKey( 'oldrevid', $data[0]['edit'] );
+               $this->assertArrayHasKey( 'newrevid', $data[0]['edit'] );
+               $this->assertNotEquals(
+                       $data[0]['edit']['newrevid'],
+                       $data[0]['edit']['oldrevid'],
+                       "revision id should change after edit"
+               );
+       }
+
+       function testNonTextEdit( ) {
+               $name = 'Dummy:ApiEditPageTest_testNonTextEdit';
+               $data = serialize( 'some bla bla text' );
+
+               // -- test new page --------------------------------------------
+               $apiResult = $this->doApiRequestWithToken( array(
+                       'action' => 'edit',
+                       'title' => $name,
+                       'text' => $data, ) );
+               $apiResult = $apiResult[0];
+
+               // Validate API result data
+               $this->assertArrayHasKey( 'edit', $apiResult );
+               $this->assertArrayHasKey( 'result', $apiResult['edit'] );
+               $this->assertEquals( 'Success', $apiResult['edit']['result'] );
+
+               $this->assertArrayHasKey( 'new', $apiResult['edit'] );
+               $this->assertArrayNotHasKey( 'nochange', $apiResult['edit'] );
+
+               $this->assertArrayHasKey( 'pageid', $apiResult['edit'] );
+
+               // validate resulting revision
+               $page = WikiPage::factory( Title::newFromText( $name ) );
+               $this->assertEquals( "testing", $page->getContentModel() );
+               $this->assertEquals( $data, $page->getContent()->serialize() );
+       }
+
+       function testEditAppend() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testEditSection() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testUndo() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+
+       function testEditNonText() {
+               $this->markTestIncomplete( "not yet implemented" );
+       }
+}
index 8acdc1c..4684c55 100644 (file)
@@ -5,38 +5,27 @@
  */
 class ApiOptionsTest extends MediaWikiLangTestCase {
 
-       private $mTested, $mApiMainMock, $mUserMock, $mContext, $mSession;
+       private $mTested, $mUserMock, $mContext, $mSession;
 
        private static $Success = array( 'options' => 'success' );
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                $this->mUserMock = $this->getMockBuilder( 'User' )
                        ->disableOriginalConstructor()
                        ->getMock();
 
-               $this->mApiMainMock = $this->getMockBuilder( 'ApiBase' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
                // Create a new context
                $this->mContext = new DerivativeContext( new RequestContext() );
                $this->mContext->setUser( $this->mUserMock );
 
-               $this->mApiMainMock->expects( $this->any() )
-                       ->method( 'getContext' )
-                       ->will( $this->returnValue( $this->mContext ) );
-
-               $this->mApiMainMock->expects( $this->any() )
-                       ->method( 'getResult' )
-                       ->will( $this->returnValue( new ApiResult( $this->mApiMainMock ) ) );
-
+               $main = new ApiMain( $this->mContext );
 
                // Empty session
                $this->mSession = array();
 
-               $this->mTested = new ApiOptions( $this->mApiMainMock, 'options' );
+               $this->mTested = new ApiOptions( $main, 'options' );
        }
 
        private function getSampleRequest( $custom = array() ) {
index 2566c6c..d903714 100644 (file)
@@ -6,7 +6,7 @@
  */
 class ApiPurgeTest extends ApiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->doLogin();
        }
index a4b9dc7..dbf02f7 100644 (file)
@@ -6,7 +6,7 @@
  */
 class ApiQueryTest extends ApiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->doLogin();
        }
index c3eacd5..9806a1c 100644 (file)
@@ -194,26 +194,6 @@ class ApiTest extends ApiTestCase {
 
                return $cj;
        }
-
-       /**
-        * @todo Finish filling me out...what are we trying to test here?
-        */
-       function testApiListPages() {
-               global $wgServer;
-               if ( !isset( $wgServer ) ) {
-                       $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
-               }
-
-               $ret = $this->doApiRequest( array(
-                       'action' => 'query',
-                       'prop'   => 'revisions',
-                       'titles' => 'Main Page',
-                       'rvprop' => 'timestamp|user|comment|content',
-               ) );
-
-               $result = $ret[0]['query']['pages'];
-               $this->markTestIncomplete( "Somebody needs to finish loving me" );
-       }
        
        function testRunLogin() {
                $sysopUser = self::$users['sysop'];
index 3b044ef..de52175 100644 (file)
@@ -1,10 +1,6 @@
 <?php 
 
 abstract class ApiTestCase extends MediaWikiLangTestCase {
-       /**
-        * @var Array of ApiTestUser
-        */
-       public static $users;
        protected static $apiUrl;
 
        /**
@@ -12,7 +8,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         */
        protected $apiContext;
 
-       function setUp() {
+       protected function setUp() {
                global $wgContLang, $wgAuth, $wgMemc, $wgRequest, $wgUser, $wgServer;
 
                parent::setUp();
@@ -22,14 +18,16 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
                $wgRequest = new FauxRequest( array() );
 
+               ApiQueryInfo::resetTokenCache(); // tokens are invalid because we cleared the session
+
                self::$users = array(
-                       'sysop' => new ApiTestUser(
+                       'sysop' => new TestUser(
                                'Apitestsysop',
                                'Api Test Sysop',
                                'api_test_sysop@example.com',
                                array( 'sysop' )
                        ),
-                       'uploader' => new ApiTestUser(
+                       'uploader' => new TestUser(
                                'Apitestuser',
                                'Api Test User',
                                'api_test_user@example.com',
@@ -43,7 +41,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
 
        }
 
-       protected function doApiRequest( Array $params, Array $session = null, $appendModule = false, User $user = null ) {
+       protected function doApiRequest( array $params, array $session = null, $appendModule = false, User $user = null ) {
                global $wgRequest, $wgUser;
 
                if ( is_null( $session ) ) {
@@ -85,10 +83,16 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         * This is cheating a bit -- we grab a token in the correct format and then add it to the pseudo-session and to the
         * request, without actually requesting a "real" edit token
         * @param $params Array: key-value API params
-        * @param $session Array: session array
+        * @param $session Array|null: session array
         * @param $user User|null A User object for the context
         */
-       protected function doApiRequestWithToken( Array $params, Array $session, User $user = null ) {
+       protected function doApiRequestWithToken( array $params, array $session = null, User $user = null ) {
+               global $wgRequest;
+
+               if ( $session === null ) {
+                       $session = $wgRequest->getSessionArray();
+               }
+
                if ( $session['wsToken'] ) {
                        // add edit token to fake session
                        $session['wsEditToken'] = $session['wsToken'];
index 39c7954..9f281bd 100644 (file)
@@ -8,19 +8,23 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
        /**
         * Fixture -- run before every test
         */
-       public function setUp() {
-               global $wgEnableUploads, $wgEnableAPI;
+       protected function setUp() {
                parent::setUp();
 
-               $wgEnableUploads = true;
-               $wgEnableAPI = true;
+               $this->setMwGlobals( array(
+                       'wgEnableUploads' => true,
+                       'wgEnableAPI' => true,
+               ) );
+
                wfSetupSession();
 
                $this->clearFakeUploads();
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                $this->clearTempUpload();
+
+               parent::tearDown();
        }
 
        /**
@@ -54,7 +58,6 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
                return $this->deleteFileByTitle( Title::newFromText( $fileName, NS_FILE ) );
        }
 
-
        /**
         * Helper function -- given a file on the filesystem, find matching content in the db (and associated articles) and remove them.
         * @param $filePath String: path to file on the filesystem
@@ -104,6 +107,7 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
                return true;
 
        }
+
        function fakeUploadChunk(  $fieldName, $fileName, $type, & $chunkData ){
                $tmpName = tempnam( wfTempDir(), "" );
                // copy the chunk data to temp location: 
@@ -142,7 +146,4 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
                $_FILES = array();
        }
 
-
-
-
 }
diff --git a/tests/phpunit/includes/api/ApiTestUser.php b/tests/phpunit/includes/api/ApiTestUser.php
deleted file mode 100644 (file)
index 8d5f61a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/* Wraps the user object, so we can also retain full access to properties like password if we log in via the API */
-class ApiTestUser {
-       public $username;
-       public $password;
-       public $email;
-       public $groups;
-       public $user;
-
-       function __construct( $username, $realname = 'Real Name', $email = 'sample@example.com', $groups = array() ) {
-               $this->username = $username;
-               $this->realname = $realname;
-               $this->email = $email;
-               $this->groups = $groups;
-
-               // don't allow user to hardcode or select passwords -- people sometimes run tests
-               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
-               // a known password would be a Bad Thing.
-               $this->password = User::randomPassword();
-
-               $this->user = User::newFromName( $this->username );
-               $this->user->load();
-
-               // In an ideal world we'd have a new wiki (or mock data store) for every single test.
-               // But for now, we just need to create or update the user with the desired properties.
-               // we particularly need the new password, since we just generated it randomly.
-               // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
-               if ( !$this->user->getID() ) {
-                       // create the user
-                       $this->user = User::createNew(
-                               $this->username, array(
-                                       "email" => $this->email,
-                                       "real_name" => $this->realname
-                               )
-                       );
-                       if ( !$this->user ) {
-                               throw new Exception( "error creating user" );
-                       }
-               }
-
-               // update the user to use the new random password and other details
-               $this->user->setPassword( $this->password );
-               $this->user->setEmail( $this->email );
-               $this->user->setRealName( $this->realname );
-               // remove all groups, replace with any groups specified
-               foreach ( $this->user->getGroups() as $group ) {
-                       $this->user->removeGroup( $group );
-               }
-               if ( count( $this->groups ) ) {
-                       foreach ( $this->groups as $group ) {
-                               $this->user->addGroup( $group );
-                       }
-               }
-               $this->user->saveSettings();
-
-       }
-
-}
index d2e9815..b7ae292 100644 (file)
@@ -7,7 +7,7 @@
  */
 class ApiWatchTest extends ApiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->doLogin();
        }
@@ -29,7 +29,7 @@ class ApiWatchTest extends ApiTestCase {
 
                $data = $this->doApiRequest( array(
                        'action' => 'edit',
-                       'title' => 'UTPage',
+                       'title' => 'Help:UTPage', // Help namespace is hopefully wikitext
                        'text' => 'new text',
                        'token' => $pageinfo['edittoken'],
                        'watchlist' => 'watch' ) );
@@ -81,7 +81,7 @@ class ApiWatchTest extends ApiTestCase {
                $data = $this->doApiRequest( array(
                        'action' => 'protect',
                        'token' => $pageinfo['protecttoken'],
-                       'title' => 'UTPage',
+                       'title' => 'Help:UTPage',
                        'protections' => 'edit=sysop',
                        'watchlist' => 'unwatch' ) );
 
@@ -97,14 +97,14 @@ class ApiWatchTest extends ApiTestCase {
 
                $pageinfo = $this->getTokens();
 
-               if ( !Title::newFromText( 'UTPage' )->exists() ) {
-                       $this->markTestSkipped( "The article [[UTPage]] does not exist" ); //TODO: just create it?
+               if ( !Title::newFromText( 'Help:UTPage' )->exists() ) {
+                       $this->markTestSkipped( "The article [[Help:UTPage]] does not exist" ); //TODO: just create it?
                }
 
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'prop' => 'revisions',
-                       'titles' => 'UTPage',
+                       'titles' => 'Help:UTPage',
                        'rvtoken' => 'rollback' ) );
 
                $this->assertArrayHasKey( 'query', $data[0] );
@@ -113,7 +113,7 @@ class ApiWatchTest extends ApiTestCase {
                $key = array_pop( $keys );
 
                if ( isset( $data[0]['query']['pages'][$key]['missing'] ) ) {
-                       $this->markTestSkipped( "Target page (UTPage) doesn't exist" );
+                       $this->markTestSkipped( "Target page (Help:UTPage) doesn't exist" );
                }
 
                $this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
@@ -139,7 +139,7 @@ class ApiWatchTest extends ApiTestCase {
                try {
                        $data = $this->doApiRequest( array(
                                'action' => 'rollback',
-                               'title' => 'UTPage',
+                               'title' => 'Help:UTPage',
                                'user' => $revinfo['user'],
                                'token' => $pageinfo['rollbacktoken'],
                                'watchlist' => 'watch' ) );
@@ -148,7 +148,7 @@ class ApiWatchTest extends ApiTestCase {
                        $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
                } catch( UsageException $ue ) {
                        if( $ue->getCodeString() == 'onlyauthor' ) {
-                               $this->markTestIncomplete( "Only one author to 'UTPage', cannot test rollback" );
+                               $this->markTestIncomplete( "Only one author to 'Help:UTPage', cannot test rollback" );
                        } else {
                                $this->fail( "Received error '" . $ue->getCodeString() . "'" );
                        }
@@ -163,7 +163,7 @@ class ApiWatchTest extends ApiTestCase {
                $data = $this->doApiRequest( array(
                        'action' => 'delete',
                        'token' => $pageinfo['deletetoken'],
-                       'title' => 'UTPage' ) );
+                       'title' => 'Help:UTPage' ) );
                $this->assertArrayHasKey( 'delete', $data[0] );
                $this->assertArrayHasKey( 'title', $data[0]['delete'] );
 
index 86c0a82..8b6a384 100644 (file)
@@ -79,7 +79,7 @@ class RandomImageGenerator {
                        foreach ( array(
                                        '/usr/share/dict/words',
                                        '/usr/dict/words',
-                                       dirname( __FILE__ ) . '/words.txt' )
+                                       __DIR__ . '/words.txt' )
                                        as $dictionaryFile ) {
                                if ( is_file( $dictionaryFile ) and is_readable( $dictionaryFile ) ) {
                                        $this->dictionaryFile = $dictionaryFile;
index b22eccd..ee34562 100644 (file)
@@ -6,11 +6,11 @@
  */
 
 // Evaluate the include path relative to this file
-$IP = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) );
+$IP = dirname( dirname( dirname( dirname( __DIR__ ) ) ) );
 
 // Start up MediaWiki in command-line mode
 require_once( "$IP/maintenance/Maintenance.php" );
-require(  dirname( __FILE__ ) . "/RandomImageGenerator.php" );
+require(  __DIR__ . "/RandomImageGenerator.php" );
 
 class GenerateRandomImages extends Maintenance {
 
index a8b987e..52cdc78 100644 (file)
@@ -6,7 +6,7 @@
  */
 class GenderCacheTest extends MediaWikiLangTestCase {
 
-       function setUp() {
+       protected function setUp() {
                global $wgDefaultUserOptions;
                parent::setUp();
                //ensure the correct default gender
@@ -45,7 +45,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
        /**
         * test usernames
         *
-        * @dataProvider dataUserName
+        * @dataProvider provideUserGenders
         */
        function testUserName( $username, $expectedGender ) {
                $genderCache = GenderCache::singleton();
@@ -56,7 +56,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
        /**
         * genderCache should work with user objects, too
         *
-        * @dataProvider dataUserName
+        * @dataProvider provideUserGenders
         */
        function testUserObjects( $username, $expectedGender ) {
                $genderCache = GenderCache::singleton();
@@ -65,7 +65,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $this->assertEquals( $gender, $expectedGender, "GenderCache normal" );
        }
 
-       function dataUserName() {
+       public static function provideUserGenders() {
                return array(
                        array( 'UTMale', 'male' ),
                        array( 'UTFemale', 'female' ),
@@ -81,7 +81,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
         * test strip of subpages to avoid unnecessary queries
         * against the never existing username
         *
-        * @dataProvider dataStripSubpages
+        * @dataProvider provideStripSubpages
         */
        function testStripSubpages( $pageWithSubpage, $expectedGender ) {
                $genderCache = GenderCache::singleton();
@@ -89,7 +89,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $this->assertEquals( $gender, $expectedGender, "GenderCache must strip of subpages" );
        }
 
-       function dataStripSubpages() {
+       public static function provideStripSubpages() {
                return array(
                        array( 'UTMale/subpage', 'male' ),
                        array( 'UTFemale/subpage', 'female' ),
index 30bfb12..1c081b8 100644 (file)
@@ -76,7 +76,7 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
        /**
         * Value which are forbidden by the constructor
         */
-       function provideInvalidConstructorArg() {
+       public static function provideInvalidConstructorArg() {
                return array(
                        array( null ),
                        array( array() ),
@@ -131,7 +131,7 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
        /**
         * Provider for testFillingCache
         */
-       function provideCacheFilling() {
+       public static function provideCacheFilling() {
                // ($cacheMaxEntries, $entryToFill, $msg='')
                return array(
                        array( 1,  0 ),
index d56e632..0c9f749 100644 (file)
@@ -8,17 +8,17 @@
  */
 class DatabaseSQLTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                // TODO support other DBMS or find another way to do it
-               if( $this->db->getType() !== 'mysql' ) {
+               if ( $this->db->getType() !== 'mysql' ) {
                        $this->markTestSkipped( 'No mysql database' );
                }
        }
 
        /**
-        * @dataProvider dataSQL
+        * @dataProvider provideSelectSQLText
         */
-       function testSQL( $sql, $sqlText ) {
+       function testSelectSQLText( $sql, $sqlText ) {
                $this->assertEquals( trim( $this->db->selectSQLText(
                        isset( $sql['tables'] ) ? $sql['tables'] : array(),
                        isset( $sql['fields'] ) ? $sql['fields'] : array(),
@@ -29,7 +29,7 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                ) ), $sqlText );
        }
 
-       function dataSQL() {
+       public static function provideSelectSQLText() {
                return array(
                        array(
                                array(
@@ -70,6 +70,78 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                "ORDER BY field " .
                                "LIMIT 1"
                        ),
+                       array(
+                               array(
+                                       'tables' => array( 'table', 't2' => 'table2' ),
+                                       'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ),
+                                       'conds' => array( 'alias' => 'text' ),
+                                       'options' => array( 'LIMIT' => 1, 'GROUP BY' => 'field', 'HAVING' => 'COUNT(*) > 1' ),
+                                       'join_conds' => array( 't2' => array(
+                                               'LEFT JOIN', 'tid = t2.id'
+                                       )),
+                               ),
+                               "SELECT  tid,field,field2 AS alias,t2.id  " .
+                               "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
+                               "WHERE alias = 'text'  " .
+                               "GROUP BY field HAVING COUNT(*) > 1 " .
+                               "LIMIT 1"
+                       ),
+                       array(
+                               array(
+                                       'tables' => array( 'table', 't2' => 'table2' ),
+                                       'fields' => array( 'tid', 'field', 'alias' => 'field2', 't2.id' ),
+                                       'conds' => array( 'alias' => 'text' ),
+                                       'options' => array( 'LIMIT' => 1, 'GROUP BY' => array( 'field', 'field2' ), 'HAVING' => array( 'COUNT(*) > 1', 'field' => 1 ) ),
+                                       'join_conds' => array( 't2' => array(
+                                               'LEFT JOIN', 'tid = t2.id'
+                                       )),
+                               ),
+                               "SELECT  tid,field,field2 AS alias,t2.id  " .
+                               "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
+                               "WHERE alias = 'text'  " .
+                               "GROUP BY field,field2 HAVING (COUNT(*) > 1) AND field = '1' " .
+                               "LIMIT 1"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideConditional
+        */
+       function testConditional( $sql, $sqlText ) {
+               $this->assertEquals( trim( $this->db->conditional(
+                       $sql['conds'],
+                       $sql['true'],
+                       $sql['false']
+               ) ), $sqlText );
+       }
+
+       public static function provideConditional() {
+               return array(
+                       array(
+                               array(
+                                       'conds' => array( 'field' => 'text' ),
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field = 'text' THEN 1 ELSE NULL END)"
+                       ),
+                       array(
+                               array(
+                                       'conds' => array( 'field' => 'text', 'field2' => 'anothertext' ),
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field = 'text' AND field2 = 'anothertext' THEN 1 ELSE NULL END)"
+                       ),
+                       array(
+                               array(
+                                       'conds' => 'field=1',
+                                       'true' => 1,
+                                       'false' => 'NULL',
+                               ),
+                               "(CASE WHEN field=1 THEN 1 ELSE NULL END)"
+                       ),
                );
        }
 }
\ No newline at end of file
index d226598..216de84 100644 (file)
@@ -24,7 +24,9 @@ class MockDatabaseSqlite extends DatabaseSqliteStandalone {
 class DatabaseSqliteTest extends MediaWikiTestCase {
        var $db;
 
-       public function setUp() {
+       protected function setUp() {
+               parent::setUp();
+
                if ( !Sqlite::isPresent() ) {
                        $this->markTestSkipped( 'No SQLite support detected' );
                }
index 379ffb1..a8a6b48 100644 (file)
@@ -7,11 +7,11 @@
 class DatabaseTest extends MediaWikiTestCase {
        var $db, $functionTest = false;
 
-       function setUp() {
+       protected function setUp() {
                $this->db = wfGetDB( DB_MASTER );
        }
 
-       function tearDown() {
+       protected function tearDown() {
                if ( $this->functionTest ) {
                        $this->dropFunctions();
                        $this->functionTest = false;
@@ -190,9 +190,6 @@ class DatabaseTest extends MediaWikiTestCase {
                        $sql );
        }
 
-       /**
-        * @group Broken
-        */
        function testStoredFunctions() {
                if ( !in_array( wfGetDB( DB_MASTER )->getType(), array( 'mysql', 'postgres' ) ) ) {
                        $this->markTestSkipped( 'MySQL or Postgres required' );
index fe5867a..c7bea3b 100644 (file)
@@ -38,7 +38,7 @@
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-require_once dirname( __FILE__ ) . "/ORMRowTest.php";
+require_once __DIR__ . "/ORMRowTest.php";
 
 class TestORMRowTest extends ORMRowTest {
 
@@ -58,7 +58,7 @@ class TestORMRowTest extends ORMRowTest {
                return TestORMTable::singleton();
        }
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                $dbw = wfGetDB( DB_MASTER );
index 1627c47..4f338d3 100644 (file)
@@ -3,7 +3,7 @@
 class MWDebugTest extends MediaWikiTestCase {
 
 
-       function setUp() {
+       protected function setUp() {
                // Make sure MWDebug class is enabled
                static $MWDebugEnabled = false;
                if( !$MWDebugEnabled ) {
@@ -12,6 +12,11 @@ class MWDebugTest extends MediaWikiTestCase {
                }
                /** Clear log before each test */
                MWDebug::clearLog();
+               wfSuppressWarnings();
+       }
+
+       protected function tearDown() {
+               wfRestoreWarnings();
        }
 
        function testAddLog() {
index 6fb7ace..f159d5d 100644 (file)
@@ -3,13 +3,14 @@
 /**
  * @group FileRepo
  * @group FileBackend
+ * @group medium
  */
 class FileBackendTest extends MediaWikiTestCase {
        private $backend, $multiBackend;
        private $filesToPrune = array();
        private static $backendToUse;
 
-       function setUp() {
+       protected function setUp() {
                global $wgFileBackends;
                parent::setUp();
                $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . time() . '-' . mt_rand();
@@ -49,7 +50,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        'parallelize' => 'implicit',
                        'backends'    => array(
                                array(
-                                       'name'          => 'localmutlitesting1',
+                                       'name'          => 'localmultitesting1',
                                        'class'         => 'FSFileBackend',
                                        'lockManager'   => 'nullLockManager',
                                        'containerPaths' => array(
@@ -58,7 +59,7 @@ class FileBackendTest extends MediaWikiTestCase {
                                        'isMultiMaster' => false
                                ),
                                array(
-                                       'name'          => 'localmutlitesting2',
+                                       'name'          => 'localmultitesting2',
                                        'class'         => 'FSFileBackend',
                                        'lockManager'   => 'nullLockManager',
                                        'containerPaths' => array(
@@ -71,7 +72,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->filesToPrune = array();
        }
 
-       private function baseStorePath() {
+       private static function baseStorePath() {
                return 'mwstore://localtesting';
        }
 
@@ -182,7 +183,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "FileBackend::extensionFromPath on path '$path'" );
        }
 
-       function provider_testExtensionFromPath() {
+       public static function provider_testExtensionFromPath() {
                return array(
                        array( 'mwstore://backend/container/path.txt', 'txt' ),
                        array( 'mwstore://backend/container/path.svg.png', 'png' ),
@@ -247,11 +248,11 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertBackendPathsConsistent( array( $dest ) );
        }
 
-       public function provider_testStore() {
+       public static function provider_testStore() {
                $cases = array();
 
                $tmpName = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               $toPath = $this->baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
+               $toPath = self::baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
                $op = array( 'op' => 'store', 'src' => $tmpName, 'dst' => $toPath );
                $cases[] = array(
                        $op, // operation
@@ -336,11 +337,11 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertBackendPathsConsistent( array( $source, $dest ) );
        }
 
-       public function provider_testCopy() {
+       public static function provider_testCopy() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/e/file.txt';
-               $dest = $this->baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
+               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
 
                $op = array( 'op' => 'copy', 'src' => $source, 'dst' => $dest );
                $cases[] = array(
@@ -427,11 +428,11 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertBackendPathsConsistent( array( $source, $dest ) );
        }
 
-       public function provider_testMove() {
+       public static function provider_testMove() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/e/file.txt';
-               $dest = $this->baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
+               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
 
                $op = array( 'op' => 'move', 'src' => $source, 'dst' => $dest );
                $cases[] = array(
@@ -514,10 +515,10 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertBackendPathsConsistent( array( $source ) );
        }
 
-       public function provider_testDelete() {
+       public static function provider_testDelete() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
+               $source = self::baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
 
                $op = array( 'op' => 'delete', 'src' => $source );
                $cases[] = array(
@@ -610,10 +611,10 @@ class FileBackendTest extends MediaWikiTestCase {
        /**
         * @dataProvider provider_testCreate
         */
-       public function provider_testCreate() {
+       public static function provider_testCreate() {
                $cases = array();
 
-               $dest = $this->baseStorePath() . '/unittest-cont2/a/myspacefile.txt';
+               $dest = self::baseStorePath() . '/unittest-cont2/a/myspacefile.txt';
 
                $op = array( 'op' => 'create', 'content' => 'test test testing', 'dst' => $dest );
                $cases[] = array(
@@ -677,7 +678,7 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestDoQuickOperations() {
                $backendName = $this->backendClass();
 
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $files = array(
                        "$base/unittest-cont1/e/fileA.a",
                        "$base/unittest-cont1/e/fileB.a",
@@ -799,16 +800,16 @@ class FileBackendTest extends MediaWikiTestCase {
                $rand = mt_rand( 0, 2000000000 ) . time();
                $dest = wfTempDir() . "/randomfile!$rand.txt";
                $srcs = array(
-                       $this->baseStorePath() . '/unittest-cont1/e/file1.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file2.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file3.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file4.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file5.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file6.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file7.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file8.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file9.txt',
-                       $this->baseStorePath() . '/unittest-cont1/e/file10.txt'
+                       self::baseStorePath() . '/unittest-cont1/e/file1.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file2.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file3.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file4.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file5.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file6.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file7.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file8.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file9.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file10.txt'
                );
                $content = array(
                        'egfage',
@@ -882,6 +883,20 @@ class FileBackendTest extends MediaWikiTestCase {
                                "Correct file size of '$path'" );
                        $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
                                "Correct file timestamp of '$path'" );
+
+                       $this->backend->clearCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+
+                       $this->backend->preloadCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
                } else {
                        $size = $this->backend->getFileSize( array( 'src' => $path ) );
                        $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
@@ -896,7 +911,7 @@ class FileBackendTest extends MediaWikiTestCase {
        function provider_testGetFileStat() {
                $cases = array();
 
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents", true );
                $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "", true );
                $cases[] = array( "$base/unittest-cont1/e/b/some-diff_file.txt", null, false );
@@ -922,29 +937,43 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestGetFileContents( $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)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Creation of file at $source succeeded with OK status ($backendName)." );
-
-               $newContents = $this->backend->getFileContents( array( 'src' => $source, 'latest' => 1 ) );
-               $this->assertNotEquals( false, $newContents,
-                       "Read of file at $source succeeded ($backendName)." );
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
 
-               $this->assertEquals( $content, $newContents,
-                       "Contents read match data at $source ($backendName)." );
+               if ( is_array( $source ) ) {
+                       $contents = $this->backend->getFileContentsMulti( array( 'srcs' => $source ) );
+                       foreach ( $contents as $path => $data ) {
+                               $this->assertNotEquals( false, $data, "Contents of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $data, "Contents of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $contents ), "Contents in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $contents ), "Contents array size correct ($backendName)." );
+               } else {
+                       $data = $this->backend->getFileContents( array( 'src' => $source ) );
+                       $this->assertNotEquals( false, $data, "Contents of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $data, "Contents of $source is correct ($backendName)." );
+               }
        }
 
        function provider_testGetFileContents() {
                $cases = array();
 
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents" );
                $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "more file contents" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
 
                return $cases;
        }
@@ -967,27 +996,53 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestGetLocalCopy( $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)." );
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
 
-               $tmpFile = $this->backend->getLocalCopy( array( 'src' => $source ) );
-               $this->assertNotNull( $tmpFile,
-                       "Creation of local copy of $source succeeded ($backendName)." );
+               if ( is_array( $source ) ) {
+                       $tmpFiles = $this->backend->getLocalCopyMulti( array( 'srcs' => $source ) );
+                       foreach ( $tmpFiles as $path => $tmpFile ) {
+                               $this->assertNotNull( $tmpFile,
+                                       "Creation of local copy of $path succeeded ($backendName)." );
+                               $contents = file_get_contents( $tmpFile->getPath() );
+                               $this->assertNotEquals( false, $contents, "Local copy of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $contents, "Local copy of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local copies in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local copies array size correct ($backendName)." );
+               } else {
+                       $tmpFile = $this->backend->getLocalCopy( array( 'src' => $source ) );
+                       $this->assertNotNull( $tmpFile,
+                               "Creation of local copy of $source succeeded ($backendName)." );
+                       $contents = file_get_contents( $tmpFile->getPath() );
+                       $this->assertNotEquals( false, $contents, "Local copy of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $contents, "Local copy of $source is correct ($backendName)." );
+               }
 
-               $contents = file_get_contents( $tmpFile->getPath() );
-               $this->assertNotEquals( false, $contents, "Local copy of $source exists ($backendName)." );
+               $obj = new stdClass();
+               $tmpFile->bind( $obj );
        }
 
        function provider_testGetLocalCopy() {
                $cases = array();
 
-               $base = $this->baseStorePath();
+               $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" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
 
                return $cases;
        }
@@ -1010,26 +1065,50 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestGetLocalReference( $source, $content ) {
                $backendName = $this->backendClass();
 
-               $this->prepare( array( 'dir' => dirname( $source ) ) );
-
-               $status = $this->create( array( 'content' => $content, 'dst' => $source ) );
-               $this->assertGoodStatus( $status,
-                       "Creation of file at $source succeeded ($backendName)." );
-
-               $tmpFile = $this->backend->getLocalReference( array( 'src' => $source ) );
-               $this->assertNotNull( $tmpFile,
-                       "Creation of local copy of $source succeeded ($backendName)." );
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
 
-               $contents = file_get_contents( $tmpFile->getPath() );
-               $this->assertNotEquals( false, $contents, "Local copy of $source exists ($backendName)." );
+               if ( is_array( $source ) ) {
+                       $tmpFiles = $this->backend->getLocalReferenceMulti( array( 'srcs' => $source ) );
+                       foreach ( $tmpFiles as $path => $tmpFile ) {
+                               $this->assertNotNull( $tmpFile,
+                                       "Creation of local copy of $path succeeded ($backendName)." );
+                               $contents = file_get_contents( $tmpFile->getPath() );
+                               $this->assertNotEquals( false, $contents, "Local ref of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $contents, "Local ref of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local refs in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local refs array size correct ($backendName)." );
+               } else {
+                       $tmpFile = $this->backend->getLocalReference( array( 'src' => $source ) );
+                       $this->assertNotNull( $tmpFile,
+                               "Creation of local copy of $source succeeded ($backendName)." );
+                       $contents = file_get_contents( $tmpFile->getPath() );
+                       $this->assertNotEquals( false, $contents, "Local ref of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $contents, "Local ref of $source is correct ($backendName)." );
+               }
        }
 
        function provider_testGetLocalReference() {
                $cases = array();
 
-               $base = $this->baseStorePath();
+               $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" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
 
                return $cases;
        }
@@ -1048,7 +1127,7 @@ class FileBackendTest extends MediaWikiTestCase {
        }
 
        function provider_testPrepareAndClean() {
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                return array(
                        array( "$base/unittest-cont1/e/a/z/some_file1.txt", true ),
                        array( "$base/unittest-cont2/a/z/some_file2.txt", true ),
@@ -1096,7 +1175,7 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestRecursiveClean() {
                $backendName = $this->backendClass();
 
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $dirs = array(
                        "$base/unittest-cont1/e/a",
                        "$base/unittest-cont1/e/a/b",
@@ -1147,30 +1226,10 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
                $this->doTestDoOperations();
                $this->tearDownFiles();
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations2();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations2();
-               $this->tearDownFiles();
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
        }
 
        private function doTestDoOperations() {
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
 
                $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
                $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
@@ -1242,9 +1301,21 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Correct file SHA-1 of $fileC" );
        }
 
+       public function testDoOperationsPipeline() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+       }
+
        // concurrency orientated
-       private function doTestDoOperations2() {
-               $base = $this->baseStorePath();
+       private function doTestDoOperationsPipeline() {
+               $base = self::baseStorePath();
 
                $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
                $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
@@ -1329,8 +1400,20 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Correct file SHA-1 of $fileC" );
        }
 
+       public function testDoOperationsFailing() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+       }
+
        private function doTestDoOperationsFailing() {
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
 
                $fileA = "$base/unittest-cont2/a/b/fileA.txt";
                $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
@@ -1405,7 +1488,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
        private function doTestGetFileList() {
                $backendName = $this->backendClass();
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
 
                // Should have no errors
                $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont-notexists" ) );
@@ -1562,7 +1645,7 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestGetDirectoryList() {
                $backendName = $this->backendClass();
 
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $files = array(
                        "$base/unittest-cont1/e/test1.txt",
                        "$base/unittest-cont1/e/test2.txt",
@@ -1813,7 +1896,7 @@ class FileBackendTest extends MediaWikiTestCase {
                foreach ( $this->filesToPrune as $file ) {
                        @unlink( $file );
                }
-               $containers = array( 'unittest-cont1', 'unittest-cont2', 'unittest-cont3' );
+               $containers = array( 'unittest-cont1', 'unittest-cont2' );
                foreach ( $containers as $container ) {
                        $this->deleteFiles( $container );
                }
@@ -1821,12 +1904,11 @@ class FileBackendTest extends MediaWikiTestCase {
        }
 
        private function deleteFiles( $container ) {
-               $base = $this->baseStorePath();
+               $base = self::baseStorePath();
                $iter = $this->backend->getFileList( array( 'dir' => "$base/$container" ) );
                if ( $iter ) {
                        foreach ( $iter as $file ) {
-                               $this->backend->delete( array( 'src' => "$base/$container/$file" ),
-                                       array( 'force' => 1, 'nonLocking' => 1 ) );
+                               $this->backend->quickDelete( array( 'src' => "$base/$container/$file" ) );
                        }
                }
                $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) );
@@ -1842,8 +1924,4 @@ class FileBackendTest extends MediaWikiTestCase {
        function assertGoodStatus( $status, $msg ) {
                $this->assertEquals( print_r( array(), 1 ), print_r( $status->errors, 1 ), $msg );
        }
-
-       function tearDown() {
-               parent::tearDown();
-       }
 }
index 6abceeb..7d815e9 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 /**
  * @group FileRepo
+ * @group medium
  */
 class StoreBatchTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                global $wgFileBackends;
                parent::setUp();
 
@@ -42,6 +43,17 @@ class StoreBatchTest extends MediaWikiTestCase {
                $this->createdFiles = array();
        }
 
+       protected function tearDown() {
+               $this->repo->cleanupBatch( $this->createdFiles ); // delete files
+               foreach ( $this->createdFiles as $tmp ) { // delete dirs
+                       $tmp = $this->repo->resolveVirtualUrl( $tmp );
+                       while ( $tmp = FileBackend::parentStoragePath( $tmp ) ) {
+                               $this->repo->getBackend()->clean( array( 'dir' => $tmp ) );
+                       }
+               }
+               parent::tearDown();
+       }
+
        /**
         * Store a file or virtual URL source into a media file name.
         *
@@ -108,15 +120,4 @@ class StoreBatchTest extends MediaWikiTestCase {
                $this->storecohort( "Test1.png", "$IP/skins/monobook/wiki.png", "$IP/skins/monobook/video.png", false );
                $this->storecohort( "Test2.png", "$IP/skins/monobook/wiki.png", "$IP/skins/monobook/video.png", true );
        }
-
-       public function tearDown() {
-               $this->repo->cleanupBatch( $this->createdFiles ); // delete files
-               foreach ( $this->createdFiles as $tmp ) { // delete dirs
-                       $tmp = $this->repo->resolveVirtualUrl( $tmp );
-                       while ( $tmp = FileBackend::parentStoragePath( $tmp ) ) {
-                               $this->repo->getBackend()->clean( array( 'dir' => $tmp ) );
-                       }
-               }
-               parent::tearDown();
-       }
 }
index a382775..57017a8 100644 (file)
@@ -6,25 +6,16 @@
  */
 
 class CSSMinTest extends MediaWikiTestCase {
-       protected $oldServer = null, $oldCanServer = null;
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
 
-               // Fake $wgServer and $wgCanonicalServer
-               global $wgServer, $wgCanonicalServer;
-               $this->oldServer = $wgServer;
-               $this->oldCanServer = $wgCanonicalServer;
-               $wgServer = $wgCanonicalServer = 'http://wiki.example.org';
-       }
-
-       function tearDown() {
-               // Restore $wgServer and $wgCanonicalServer
-               global $wgServer, $wgCanonicalServer;
-               $wgServer = $this->oldServer;
-               $wgCanonicalServer = $this->oldCanServer;
+               $server = 'http://doc.example.org';
 
-               parent::tearDown();
+               $this->setMwGlobals( array(
+                       'wgServer' => $server,
+                       'wgCanonicalServer' => $server,
+               ) );
        }
 
        /**
@@ -113,7 +104,7 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Expand absolute paths',
                                array( 'foo { prop: url(/w/skin/images/bar.png); }', false, 'http://example.org/quux', false ),
-                               'foo { prop: url(http://wiki.example.org/w/skin/images/bar.png); }',
+                               'foo { prop: url(http://doc.example.org/w/skin/images/bar.png); }',
                        ),
                );
        }
index 5e4cda1..70fce11 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 /**
  * Tests for the GenericArrayObject and deriving classes.
  *
@@ -40,22 +39,30 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
        public abstract function elementInstancesProvider();
 
        /**
-        * Provides instances of the concrete class being tested.
+        * Returns the name of the concrete class being tested.
         *
         * @since 1.20
         *
-        * @return array
+        * @return string
         */
-       public abstract function instanceProvider();
+       public abstract function getInstanceClass();
 
        /**
-        * Returns the name of the concrete class being tested.
+        * Provides instances of the concrete class being tested.
         *
         * @since 1.20
         *
-        * @return string
+        * @return array
         */
-       public abstract function getInstanceClass();
+       public function instanceProvider() {
+               $instances = array();
+
+               foreach ( $this->elementInstancesProvider() as $elementInstances ) {
+                       $instances[] = $this->getNew( $elementInstances );
+               }
+
+               return $this->arrayWrap( $instances );
+       }
 
        /**
         * @since 1.20
@@ -171,7 +178,7 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
                                call_user_func( $function, $list, $element );
                                $valid = true;
                        }
-                       catch ( \MWException $exception ) {
+                       catch ( InvalidArgumentException $exception ) {
                                $valid = false;
                        }
 
index f4f52dd..cfd75d8 100644 (file)
@@ -1,8 +1,12 @@
 <?php
 class BitmapMetadataHandlerTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgShowEXIF', false );
+
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
 
        /**
@@ -14,14 +18,15 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
         * translation (to en) where XMP should win.
         */
        public function testMultilingualCascade() {
+               global $wgShowEXIF;
+
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
                if ( !wfDl( 'xml' ) ) {
                        $this->markTestSkipped( "This test needs the xml extension." );
                }
-               global $wgShowEXIF;
-               $oldExif = $wgShowEXIF;
+
                $wgShowEXIF = true;
 
                $meta = BitmapMetadataHandler::Jpeg( $this->filePath .
@@ -37,8 +42,6 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                        'Did not extract any ImageDescription info?!' );
 
                $this->assertEquals( $expected, $meta['ImageDescription'] );
-
-               $wgShowEXIF = $oldExif;
        }
 
        /**
@@ -73,7 +76,9 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                $this->assertEquals( '2020:07:14 01:36:05', $meta['DateTimeDigitized'] );
                $this->assertEquals( '1997:03:02 00:01:02', $meta['DateTimeOriginal'] );
        }
-       /* File has an invalid time (+ one valid but really weird time)
+
+       /**
+        * File has an invalid time (+ one valid but really weird time)
         * that shouldn't be included
         */
        public function testIPTCDatesInvalid() {
@@ -130,12 +135,14 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                );
                $this->assertEquals( $expected, $result ); 
        }
+
        public function testPNGNative() {
                $handler = new BitmapMetadataHandler();
                $result = $handler->png( $this->filePath . 'Png-native-test.png' );
                $expected = 'http://example.com/url';
                $this->assertEquals( $expected, $result['metadata']['Identifier']['x-default'] ); 
        }
+
        public function testTiffByteOrder() {
                $handler = new BitmapMetadataHandler();
                $res = $handler->getTiffByteOrder( $this->filePath . 'test.tiff' );
index 11d9dc4..eb1a536 100644 (file)
@@ -2,18 +2,15 @@
 
 class BitmapScalingTest extends MediaWikiTestCase {
 
-       function setUp() {
-               global $wgMaxImageArea, $wgCustomConvertCommand;
-               $this->oldMaxImageArea = $wgMaxImageArea;
-               $this->oldCustomConvertCommand = $wgCustomConvertCommand;
-               $wgMaxImageArea = 1.25e7; // 3500x3500 
-               $wgCustomConvertCommand = 'dummy'; // Set so that we don't get client side rendering
-       }
-       function tearDown() {
-               global $wgMaxImageArea, $wgCustomConvertCommand;
-               $wgMaxImageArea = $this->oldMaxImageArea;
-               $wgCustomConvertCommand = $this->oldCustomConvertCommand;
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgMaxImageArea' => 1.25e7, // 3500x3500
+                       'wgCustomConvertCommand' => 'dummy', // Set so that we don't get client side rendering
+               ) );
        }
+
        /**
         * @dataProvider provideNormaliseParams
         */
@@ -103,7 +100,8 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                'Bigger than max image size but doesn\'t need scaling',
                        ),
                );
-       } 
+       }
+
        function testTooBigImage() {
                $file = new FakeDimensionFile( array( 4000, 4000 ) );
                $handler = new BitmapHandler;
@@ -111,6 +109,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                $this->assertEquals( 'TransformParameterError', 
                        get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
        }
+
        function testTooBigMustRenderImage() {
                $file = new FakeDimensionFile( array( 4000, 4000 ) );
                $file->mustRender = true;
index b2f6b7b..dd22321 100644 (file)
@@ -2,43 +2,44 @@
 
 class ExifBitmapTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               global $wgShowEXIF;
-               $this->showExif = $wgShowEXIF;
-               $wgShowEXIF = true;
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgShowEXIF', true );
+
                $this->handler = new ExifBitmapHandler;
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
        }
 
-       public function tearDown() {
-               global $wgShowEXIF;
-               $wgShowEXIF = $this->showExif;
-       }
-
        public function testIsOldBroken() {
                $res = $this->handler->isMetadataValid( null, ExifBitmapHandler::OLD_BROKEN_FILE );
                $this->assertEquals( ExifBitmapHandler::METADATA_COMPATIBLE, $res );
        }
+
        public function testIsBrokenFile() {
                $res = $this->handler->isMetadataValid( null, ExifBitmapHandler::BROKEN_FILE );
                $this->assertEquals( ExifBitmapHandler::METADATA_GOOD, $res );
        }
+
        public function testIsInvalid() {
                $res = $this->handler->isMetadataValid( null, 'Something Invalid Here.' );
                $this->assertEquals( ExifBitmapHandler::METADATA_BAD, $res );
        }
+
        public function testGoodMetadata() {
                $meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
                $res = $this->handler->isMetadataValid( null, $meta );
                $this->assertEquals( ExifBitmapHandler::METADATA_GOOD, $res );
        }
+
        public function testIsOldGood() {
                $meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:1;}';
                $res = $this->handler->isMetadataValid( null, $meta );
                $this->assertEquals( ExifBitmapHandler::METADATA_COMPATIBLE, $res );
        }
+
        // Handle metadata from paged tiff handler (gotten via instant commons)
        // gracefully.
        public function testPagedTiffHandledGracefully() {
@@ -55,6 +56,7 @@ class ExifBitmapTest extends MediaWikiTestCase {
                $res = $this->handler->convertMetadataVersion( $metadata, 2 );
                $this->assertEquals( $metadata, $res );
        }
+
        function testConvertMetadataToOld() {
                $metadata = array(
                        'foo' => array( 'First', 'Second', '_type' => 'ol' ),
@@ -73,6 +75,7 @@ class ExifBitmapTest extends MediaWikiTestCase {
                $res = $this->handler->convertMetadataVersion( $metadata, 1 );
                $this->assertEquals( $expected, $res );
        }
+
        function testConvertMetadataSoftware() {
                $metadata = array(
                        'Software' => array( array('GIMP', '1.1' ) ),
@@ -85,6 +88,7 @@ class ExifBitmapTest extends MediaWikiTestCase {
                $res = $this->handler->convertMetadataVersion( $metadata, 1 );
                $this->assertEquals( $expected, $res );
        }
+
        function testConvertMetadataSoftwareNormal() {
                $metadata = array(
                        'Software' => array( "GIMP 1.2", "vim" ),
index 1e2d1bb..692a5f9 100644 (file)
@@ -5,10 +5,10 @@
  */
 class ExifRotationTest extends MediaWikiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->handler = new BitmapHandler();
-               $filePath = dirname( __FILE__ ) . '/../../data/media';
+               $filePath = __DIR__ . '/../../data/media';
 
                $tmpDir = $this->getNewTempDirectory();
 
@@ -33,7 +33,7 @@ class ExifRotationTest extends MediaWikiTestCase {
                $wgEnableAutoRotation = true;
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                global $wgShowEXIF, $wgEnableAutoRotation;
                $wgShowEXIF = $this->show;
                $wgEnableAutoRotation = $this->oldAuto;
@@ -43,7 +43,7 @@ class ExifRotationTest extends MediaWikiTestCase {
 
        /**
         *
-        * @dataProvider providerFiles
+        * @dataProvider provideFiles
         */
        function testMetadata( $name, $type, $info ) {
                if ( !BitmapHandler::canRotate() ) {
@@ -56,7 +56,7 @@ class ExifRotationTest extends MediaWikiTestCase {
 
        /**
         *
-        * @dataProvider providerFiles
+        * @dataProvider provideFiles
         */
        function testRotationRendering( $name, $type, $info, $thumbs ) {
                if ( !BitmapHandler::canRotate() ) {
@@ -94,12 +94,13 @@ class ExifRotationTest extends MediaWikiTestCase {
                }
        }
 
+       /* Utility function */
        private function dataFile( $name, $type ) {
                return new UnregisteredLocalFile( false, $this->repo,
                        "mwstore://localtesting/data/$name", $type );
        }
 
-       function providerFiles() {
+       public static function provideFiles() {
                return array(
                        array(
                                'landscape-plain.jpg',
@@ -134,7 +135,7 @@ class ExifRotationTest extends MediaWikiTestCase {
 
        /**
         * Same as before, but with auto-rotation disabled.
-        * @dataProvider providerFilesNoAutoRotate
+        * @dataProvider provideFilesNoAutoRotate
         */
        function testMetadataNoAutoRotate( $name, $type, $info ) {
                global $wgEnableAutoRotation;
@@ -149,7 +150,7 @@ class ExifRotationTest extends MediaWikiTestCase {
 
        /**
         *
-        * @dataProvider providerFilesNoAutoRotate
+        * @dataProvider provideFilesNoAutoRotate
         */
        function testRotationRenderingNoAutoRotate( $name, $type, $info, $thumbs ) {
                global $wgEnableAutoRotation;
@@ -188,7 +189,7 @@ class ExifRotationTest extends MediaWikiTestCase {
                $wgEnableAutoRotation = true;
        }
 
-       function providerFilesNoAutoRotate() {
+       public static function provideFilesNoAutoRotate() {
                return array(
                        array(
                                'landscape-plain.jpg',
index 80aaac2..7cc56f6 100644 (file)
@@ -1,20 +1,16 @@
 <?php
 class ExifTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->mediaPath = dirname( __FILE__ ) . '/../../data/media/';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->mediaPath = __DIR__ . '/../../data/media/';
 
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
-               global $wgShowEXIF;
-               $this->showExif = $wgShowEXIF;
-               $wgShowEXIF = true;
-       }
 
-       public function tearDown() {
-               global $wgShowEXIF;
-               $wgShowEXIF = $this->showExif;
+               $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
        public function testGPSExtraction() {
@@ -25,7 +21,7 @@ class ExifTest extends MediaWikiTestCase {
                $expected = array(
                        'GPSLatitude' => 88.5180555556,
                        'GPSLongitude' => -21.12357,
-                       'GPSAltitude' => -200,
+                       'GPSAltitude' => -3.141592653,
                        'GPSDOP' => '5/1',
                        'GPSVersionID' => '2.2.0.0',
                );
index 8a632f5..4dadde5 100644 (file)
@@ -1,10 +1,13 @@
 <?php
 class FormatMetadataTest extends MediaWikiTestCase {
-       public function setUp() {
+
+       protected function setUp() {
+               parent::setUp();
+
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
-               $filePath = dirname( __FILE__ ) .  '/../../data/media';
+               $filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
@@ -15,13 +18,8 @@ class FormatMetadataTest extends MediaWikiTestCase {
                        'url'     => 'http://localhost/thumbtest',
                        'backend' => $this->backend
                ) );
-               global $wgShowEXIF;
-               $this->show = $wgShowEXIF;
-               $wgShowEXIF = true;
-       }
-       public function tearDown() {
-               global $wgShowEXIF;
-               $wgShowEXIF = $this->show;
+
+               $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
        public function testInvalidDate() {
index 47fc368..3a750aa 100644 (file)
@@ -1,20 +1,22 @@
 <?php
 class GIFMetadataExtractorTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->mediaPath = dirname( __FILE__ ) . '/../../data/media/';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->mediaPath = __DIR__ . '/../../data/media/';
        }
        /**
         * Put in a file, and see if the metadata coming out is as expected.
         * @param $filename String
         * @param $expected Array The extracted metadata.
-        * @dataProvider dataGetMetadata
+        * @dataProvider provideGetMetadata
         */
        public function testGetMetadata( $filename, $expected ) {
                $actual = GIFMetadataExtractor::getMetadata( $this->mediaPath . $filename );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataGetMetadata() {
+       public static function provideGetMetadata() {
 
                $xmpNugget = <<<EOF
 <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
index 3665835..9ffc764 100644 (file)
@@ -1,8 +1,10 @@
 <?php
 class GIFHandlerTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->filePath = dirname( __FILE__ ) .  '/../../data/media';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
@@ -20,17 +22,18 @@ class GIFHandlerTest extends MediaWikiTestCase {
                $res = $this->handler->getMetadata( null, $this->filePath . '/README' );
                $this->assertEquals( GIFHandler::BROKEN_FILE, $res );
        }
+
        /**
         * @param $filename String basename of the file to check
         * @param $expected boolean Expected result.
-        * @dataProvider dataIsAnimated
+        * @dataProvider provideIsAnimated
         */
        public function testIsAnimanted( $filename, $expected ) {
                $file = $this->dataFile( $filename, 'image/gif' );
                $actual = $this->handler->isAnimatedImage( $file );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataIsAnimated() {
+       public static function provideIsAnimated() {
                return array(
                        array( 'animated.gif', true ),
                        array( 'nonanimated.gif', false ),
@@ -40,14 +43,14 @@ class GIFHandlerTest extends MediaWikiTestCase {
        /**
         * @param $filename String
         * @param $expected Integer Total image area
-        * @dataProvider dataGetImageArea
+        * @dataProvider provideGetImageArea
         */
        public function testGetImageArea( $filename, $expected ) {
                $file = $this->dataFile( $filename, 'image/gif' );
                $actual = $this->handler->getImageArea( $file, $file->getWidth(), $file->getHeight() );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataGetImageArea() {
+       public static function provideGetImageArea() {
                return array(
                        array( 'animated.gif', 5400 ),
                        array( 'nonanimated.gif', 1350 ),
@@ -57,13 +60,13 @@ class GIFHandlerTest extends MediaWikiTestCase {
        /**
         * @param $metadata String Serialized metadata
         * @param $expected Integer One of the class constants of GIFHandler
-        * @dataProvider dataIsMetadataValid
+        * @dataProvider provideIsMetadataValid
         */
        public function testIsMetadataValid( $metadata, $expected ) {
                $actual = $this->handler->isMetadataValid( null, $metadata );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataIsMetadataValid() {
+       public static function provideIsMetadataValid() {
                return array(
                        array( GIFHandler::BROKEN_FILE, GIFHandler::METADATA_GOOD ),
                        array( '', GIFHandler::METADATA_BAD ),
@@ -76,7 +79,7 @@ class GIFHandlerTest extends MediaWikiTestCase {
        /**
         * @param $filename String
         * @param $expected String Serialized array
-        * @dataProvider dataGetMetadata
+        * @dataProvider provideGetMetadata
         */
        public function testGetMetadata( $filename, $expected ) {
                $file = $this->dataFile( $filename, 'image/gif' );
@@ -84,7 +87,7 @@ class GIFHandlerTest extends MediaWikiTestCase {
                $this->assertEquals( unserialize( $expected ), unserialize( $actual ) );
        }
 
-       public function dataGetMetadata() {
+       public static function provideGetMetadata() {
                return array(
                        array( 'nonanimated.gif', 'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}' ),
                        array( 'animated-xmp.gif', 'a:4:{s:10:"frameCount";i:4;s:6:"looped";b:1;s:8:"duration";d:2.399999999999999911182158029987476766109466552734375;s:8:"metadata";a:5:{s:6:"Artist";s:7:"Bawolff";s:16:"ImageDescription";a:2:{s:9:"x-default";s:18:"A file to test GIF";s:5:"_type";s:4:"lang";}s:15:"SublocationDest";s:13:"The interwebs";s:14:"GIFFileComment";a:1:{i:0;s:16:"GIƒ·test·file";}s:15:"_MW_GIF_VERSION";i:1;}}' ),
index f48382a..6e1c0af 100644 (file)
@@ -8,8 +8,10 @@
  */
 class JpegMetadataExtractorTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
 
        /**
@@ -18,13 +20,13 @@ class JpegMetadataExtractorTest extends MediaWikiTestCase {
         *
         * @param $file filename
         *
-        * @dataProvider dataUtf8Comment
+        * @dataProvider provideUtf8Comment
         */
        public function testUtf8Comment( $file ) {
                $res = JpegMetadataExtractor::segmentSplitter( $this->filePath . $file );
                $this->assertEquals( array( 'UTF-8 JPEG Comment — ¼' ), $res['COM'] );
        }
-       public function dataUtf8Comment() {
+       public static function provideUtf8Comment() {
                return array(
                        array( 'jpeg-comment-utf.jpg' ),
                        array( 'jpeg-padding-even.jpg' ),
index ddabf5b..05d3661 100644 (file)
@@ -1,18 +1,15 @@
 <?php
 class JpegTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->filePath = __DIR__ . '/../../data/media/';
                if ( !wfDl( 'exif' ) ) {
                        $this->markTestSkipped( "This test needs the exif extension." );
                }
-               global $wgShowEXIF;
-               $this->show = $wgShowEXIF;
-               $wgShowEXIF = true;
-       }
-       public function tearDown() {
-               global $wgShowEXIF;
-               $wgShowEXIF = $this->show;
+
+               $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
        public function testInvalidFile() {
@@ -20,6 +17,7 @@ class JpegTest extends MediaWikiTestCase {
                $res = $jpeg->getMetadata( null, $this->filePath . 'README' );
                $this->assertEquals( ExifBitmapHandler::BROKEN_FILE, $res );
        }
+
        public function testJpegMetadataExtraction() {
                $h = new JpegHandler;
                $res = $h->getMetadata( null, $this->filePath . 'test.jpg' );
index 9f702c5..ee1c6f8 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 class PNGMetadataExtractorTest extends MediaWikiTestCase {
 
-       function setUp() {
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';   
+       protected function setUp() {
+               $this->filePath = __DIR__ . '/../../data/media/';
        }
        /**
         * Tests zTXt tag (compressed textual metadata) 
@@ -60,6 +60,8 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
        /**
         * Test extraction of pHYs tags, which can tell what the
         * actual resolution of the image is (aka in dots per meter).
+        */
+/*
        function testPngPhysTag () {
                $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
                        'Png-native-test.png' );
@@ -71,6 +73,7 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertEquals( '2835/100', $meta['YResolution'] );
                $this->assertEquals( 3, $meta['ResolutionUnit'] ); // 3 = cm
        }
+*/
 
        /**
         * Given a normal static PNG, check the animation metadata returned.
index b6f911f..2075758 100644 (file)
@@ -1,8 +1,10 @@
 <?php
 class PNGHandlerTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               $this->filePath = dirname( __FILE__ ) .  '/../../data/media';
+       protected function setUp() {
+               parent::setUp();
+
+               $this->filePath = __DIR__ .  '/../../data/media';
                $this->backend = new FSFileBackend( array(
                        'name'           => 'localtesting',
                        'lockManager'    => 'nullLockManager',
@@ -23,14 +25,14 @@ class PNGHandlerTest extends MediaWikiTestCase {
        /**
         * @param $filename String basename of the file to check
         * @param $expected boolean Expected result.
-        * @dataProvider dataIsAnimated
+        * @dataProvider provideIsAnimated
         */
        public function testIsAnimanted( $filename, $expected ) {
                $file = $this->dataFile( $filename, 'image/png' );
                $actual = $this->handler->isAnimatedImage( $file );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataIsAnimated() {
+       public static function provideIsAnimated() {
                return array(
                        array( 'Animated_PNG_example_bouncing_beach_ball.png', true ),
                        array( '1bit-png.png', false ),
@@ -40,14 +42,14 @@ class PNGHandlerTest extends MediaWikiTestCase {
        /**
         * @param $filename String
         * @param $expected Integer Total image area
-        * @dataProvider dataGetImageArea
+        * @dataProvider provideGetImageArea
         */
        public function testGetImageArea( $filename, $expected ) {
                $file = $this->dataFile($filename, 'image/png' );
                $actual = $this->handler->getImageArea( $file, $file->getWidth(), $file->getHeight() );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataGetImageArea() {
+       public static function provideGetImageArea() {
                return array(
                        array( '1bit-png.png', 2500 ),
                        array( 'greyscale-png.png', 2500 ),
@@ -59,13 +61,13 @@ class PNGHandlerTest extends MediaWikiTestCase {
        /**
         * @param $metadata String Serialized metadata
         * @param $expected Integer One of the class constants of PNGHandler
-        * @dataProvider dataIsMetadataValid
+        * @dataProvider provideIsMetadataValid
         */
        public function testIsMetadataValid( $metadata, $expected ) {
                $actual = $this->handler->isMetadataValid( null, $metadata );
                $this->assertEquals( $expected, $actual );
        }
-       public function dataIsMetadataValid() {
+       public static function provideIsMetadataValid() {
                return array(
                        array( PNGHandler::BROKEN_FILE, PNGHandler::METADATA_GOOD ),
                        array( '', PNGHandler::METADATA_BAD ),
@@ -78,7 +80,7 @@ class PNGHandlerTest extends MediaWikiTestCase {
        /**
         * @param $filename String
         * @param $expected String Serialized array
-        * @dataProvider dataGetMetadata
+        * @dataProvider provideGetMetadata
         */
        public function testGetMetadata( $filename, $expected ) {
                $file = $this->dataFile( $filename, 'image/png' );
@@ -86,7 +88,7 @@ class PNGHandlerTest extends MediaWikiTestCase {
 //             $this->assertEquals( unserialize( $expected ), unserialize( $actual ) );
                $this->assertEquals( ( $expected ), ( $actual ) );
        }
-       public function dataGetMetadata() {
+       public static function provideGetMetadata() {
                return array(
                        array( 'rgb-na-png.png', 'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}' ),
                        array( 'xmp.png', 'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:1;s:9:"colorType";s:14:"index-coloured";s:8:"metadata";a:2:{s:12:"SerialNumber";s:9:"123456789";s:15:"_MW_PNG_VERSION";i:1;}}' ), 
index 526beae..007ce46 100644 (file)
@@ -2,19 +2,19 @@
 
 class SVGMetadataExtractorTest extends MediaWikiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
        }
 
        /**
-        * @dataProvider providerSvgFiles
+        * @dataProvider provideSvgFiles
         */
        function testGetMetadata( $infile, $expected ) {
                $this->assertMetadata( $infile, $expected );
        }
        
        /**
-        * @dataProvider providerSvgFilesWithXMLMetadata
+        * @dataProvider provideSvgFilesWithXMLMetadata
         */
        function testGetXMLMetadata( $infile, $expected ) {
                $r = new XMLReader();
@@ -38,28 +38,34 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                }
        }
 
-       function providerSvgFiles() {
-               $base = dirname( __FILE__ ) . '/../../data/media';
+       public static function provideSvgFiles() {
+               $base = __DIR__ . '/../../data/media';
                return array(
                        array(
                                "$base/Wikimedia-logo.svg",
                                array(
                                        'width' => 1024,
-                                       'height' => 1024
+                                       'height' => 1024,
+                                       'originalWidth' => '1024',
+                                       'originalHeight' => '1024',
                                )
                        ),
                        array(
                                "$base/QA_icon.svg",
                                array(
                                        'width' => 60,
-                                       'height' => 60
+                                       'height' => 60,
+                                       'originalWidth' => '60',
+                                       'originalHeight' => '60',
                                )
                        ),
                        array(
                                "$base/Gtk-media-play-ltr.svg",
                                array(
                                        'width' => 60,
-                                       'height' => 60
+                                       'height' => 60,
+                                       'originalWidth' => '60.0000000',
+                                       'originalHeight' => '60.0000000',
                                )
                        ),
                        array(
@@ -67,14 +73,16 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                // This file triggered bug 31719, needs entity expansion in the xmlns checks
                                array(
                                        'width' => 385,
-                                       'height' => 385
+                                       'height' => 385,
+                                       'originalWidth' => '385',
+                                       'originalHeight' => '385.0004883',
                                )
                        )
                );
        }
 
-       function providerSvgFilesWithXMLMetadata() {
-               $base = dirname( __FILE__ ) . '/../../data/media';
+       public static function provideSvgFilesWithXMLMetadata() {
+               $base = __DIR__ . '/../../data/media';
                $metadata = 
     '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
       <ns4:Work xmlns:ns4="http://creativecommons.org/ns#" rdf:about="">
@@ -89,7 +97,9 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                array(
                                        'height' => 593,
                                        'metadata' => $metadata,
-                                       'width' => 959
+                                       'width' => 959,
+                                       'originalWidth' => '958.69',
+                                       'originalHeight' => '592.78998',
                                )
                        ),
                );
index d4cf503..91c35c4 100644 (file)
@@ -1,17 +1,13 @@
 <?php
 class TiffTest extends MediaWikiTestCase {
 
-       public function setUp() {
-               global $wgShowEXIF;
-               $this->showExif = $wgShowEXIF;
-               $wgShowEXIF = true;
-               $this->filePath = dirname( __FILE__ ) . '/../../data/media/';
-               $this->handler = new TiffHandler;
-       }
+       protected function setUp() {
+               parent::setUp();
 
-       public function tearDown() {
-               global $wgShowEXIF;
-               $wgShowEXIF = $this->showExif;
+               $this->setMwGlobals( 'wgShowEXIF', true );
+
+               $this->filePath = __DIR__ . '/../../data/media/';
+               $this->handler = new TiffHandler;
        }
 
        public function testInvalidFile() {
index c952b23..be02dd7 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 class XMPTest extends MediaWikiTestCase {
 
-       function setUp() {
+       protected function setUp() {
                if ( !wfDl( 'xml' ) ) {
                        $this->markTestSkipped( 'Requires libxml to do XMP parsing' );
                }
@@ -14,7 +14,7 @@ class XMPTest extends MediaWikiTestCase {
         * @param $expected Array expected result of parsing the xmp.
         * @param $info String Short sentence on what's being tested.
         *
-        * @dataProvider dataXMPParse
+        * @dataProvider provideXMPParse
         */
        public function testXMPParse( $xmp, $expected, $info ) {
                if ( !is_string( $xmp ) || !is_array( $expected ) ) {
@@ -22,11 +22,11 @@ class XMPTest extends MediaWikiTestCase {
                }
                $reader = new XMPReader;
                $reader->parse( $xmp );
-               $this->assertEquals( $expected, $reader->getResults(), $info );
+               $this->assertEquals( $expected, $reader->getResults(), $info, 0.0000000001 );
        }
 
-       public function dataXMPParse() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/' ;
+       public static function provideXMPParse() {
+               $xmpPath = __DIR__ . '/../../data/xmp/' ;
                $data = array();
 
                // $xmpFiles format: array of arrays with first arg file base name,
@@ -52,6 +52,7 @@ class XMPTest extends MediaWikiTestCase {
                        array( 'utf32BE', 'UTF-32BE encoding' ),
                        array( 'utf32LE', 'UTF-32LE encoding' ),
                        array( 'xmpExt', 'Extended XMP missing second part' ),
+                       array( 'gps', 'Handling of exif GPS parameters in XMP' ),
                 );
                foreach( $xmpFiles as $file ) {
                        $xmp = file_get_contents( $xmpPath . $file[0] . '.xmp' );
@@ -72,7 +73,7 @@ class XMPTest extends MediaWikiTestCase {
         * world example file to double check the support for this is right.
         */
        function testExtendedXMP() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
@@ -102,7 +103,7 @@ class XMPTest extends MediaWikiTestCase {
         * and thus should only return the StandardXMP, not the ExtendedXMP.
         */
        function testExtendedXMPWithWrongGUID() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
@@ -130,7 +131,7 @@ class XMPTest extends MediaWikiTestCase {
         * which should cause it to ignore the ExtendedXMP packet.
         */
        function testExtendedXMPMissingPacket() {
-               $xmpPath = dirname( __FILE__ ) . '/../../data/xmp/';
+               $xmpPath = __DIR__ . '/../../data/xmp/';
                $standardXMP = file_get_contents( $xmpPath . 'xmpExt.xmp' );
                $extendedXMP = file_get_contents( $xmpPath . 'xmpExt2.xmp' );
 
index e2bb8d8..a2b4e1c 100644 (file)
@@ -2,7 +2,7 @@
 class XMPValidateTest extends MediaWikiTestCase {
 
        /**
-        * @dataProvider providerDate
+        * @dataProvider provideDates
         */
        function testValidateDate( $value, $expected ) {
                // The method should modify $value.
@@ -10,7 +10,7 @@ class XMPValidateTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $value );
        }
 
-       function providerDate() {
+       public static function provideDates() {
                /* For reference valid date formats are:
                 * YYYY
                 * YYYY-MM
index 0e15653..2588691 100644 (file)
@@ -13,7 +13,7 @@
                $this->assertEquals( $format, $detector->detectFormatName( $userAgent ) );
        }
 
-       public function provideTestFormatName() {
+       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' ),
index 3164531..46ef5da 100644 (file)
@@ -29,9 +29,10 @@ class MagicVariableTest extends MediaWikiTestCase {
        );
 
        /** setup a basic parser object */
-       function setUp() {
-               global $wgContLang;
-               $wgContLang = Language::factory( 'en' );
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
 
                $this->testParser = new Parser();
                $this->testParser->Options( new ParserOptions() );
@@ -47,8 +48,10 @@ class MagicVariableTest extends MediaWikiTestCase {
        }
 
        /** destroy parser (TODO: is it really neded?)*/
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->testParser );
+
+               parent::tearDown();
        }
 
        ############### TESTS #############################################
index 816c017..6a6fded 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-require_once( dirname( __FILE__ ) . '/NewParserTest.php' );
+require_once( __DIR__ . '/NewParserTest.php' );
 
 /**
  * The UnitTest must be either a class that inherits from MediaWikiTestCase
index ff6e472..848991e 100644 (file)
@@ -9,7 +9,7 @@
  */
 class NewParserTest extends MediaWikiTestCase {
        static protected $articles = array();   // Array of test articles defined by the tests
-       /* The dataProvider is run on a different instance than the test, so it must be static
+       /* The data provider is run on a different instance than the test, so it must be static
         * When running tests from several files, all tests will see all articles.
         */
        static protected $backendToUse;
@@ -31,7 +31,7 @@ class NewParserTest extends MediaWikiTestCase {
 
        protected $file = false;
 
-       function setUp() {
+       protected function setUp() {
                global $wgContLang, $wgNamespaceProtection, $wgNamespaceAliases;
                global $wgHooks, $IP;
                $wgContLang = Language::factory( 'en' );
@@ -100,7 +100,7 @@ class NewParserTest extends MediaWikiTestCase {
                $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                foreach ( $this->savedInitialGlobals as $var => $val ) {
                        $GLOBALS[$var] = $val;
                }
index dea406c..e0f95b6 100644 (file)
@@ -2,7 +2,7 @@
 
 class ParserMethodsTest extends MediaWikiLangTestCase {
 
-       public function dataPreSaveTransform() {
+       public static function providePreSaveTransform() {
                return array(
                        array( 'hello this is ~~~',
                               "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
@@ -14,7 +14,7 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider dataPreSaveTransform
+        * @dataProvider providePreSaveTransform
         */
        public function testPreSaveTransform( $text, $expected ) {
                global $wgParser;
diff --git a/tests/phpunit/includes/parser/ParserOutputTest.php b/tests/phpunit/includes/parser/ParserOutputTest.php
new file mode 100644 (file)
index 0000000..2244fdb
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+class ParserOutputTest extends MediaWikiTestCase {
+
+       function dataIsLinkInternal() {
+               return array(
+                       // Different domains
+                       array( false, 'http://example.org', 'http://mediawiki.org' ),
+                       // Same domains
+                       array( true, 'http://example.org', 'http://example.org' ),
+                       array( true, 'https://example.org', 'https://example.org' ),
+                       array( true, '//example.org', '//example.org' ),
+                       // Same domain different cases
+                       array( true, 'http://example.org', 'http://EXAMPLE.ORG' ),
+                       // Paths, queries, and fragments are not relevant
+                       array( true, 'http://example.org', 'http://example.org/wiki/Main_Page' ),
+                       array( true, 'http://example.org', 'http://example.org?my=query' ),
+                       array( true, 'http://example.org', 'http://example.org#its-a-fragment' ),
+                       // Different protocols
+                       array( false, 'http://example.org', 'https://example.org' ),
+                       array( false, 'https://example.org', 'http://example.org' ),
+                       // Protocol relative servers always match http and https links
+                       array( true, '//example.org', 'http://example.org' ),
+                       array( true, '//example.org', 'https://example.org' ),
+                       // But they don't match strange things like this
+                       array( false, '//example.org', 'irc://example.org' ),
+               );
+       }
+
+       /**
+        * Test to make sure ParserOutput::isLinkInternal behaves properly
+        * @dataProvider dataIsLinkInternal
+        */
+       function testIsLinkInternal( $shouldMatch, $server, $url ) {
+
+               $this->assertEquals( $shouldMatch, ParserOutput::isLinkInternal( $server, $url ) );
+       }
+}
index 0e8ef53..d537b6e 100644 (file)
@@ -8,7 +8,7 @@ class ParserPreloadTest extends MediaWikiTestCase {
        private $testParserOptions;
        private $title;
 
-       function setUp() {
+       protected function setUp() {
                $this->testParserOptions = new ParserOptions();
 
                $this->testParser = new Parser();
@@ -18,7 +18,7 @@ class ParserPreloadTest extends MediaWikiTestCase {
                $this->title = Title::newFromText( 'Preload Test' );
        }
 
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->testParser );
                unset( $this->title );
        }
index 9d3499a..d82fc6c 100644 (file)
@@ -5,7 +5,7 @@ class PreprocessorTest extends MediaWikiTestCase {
        var $mPPNodeCount = 0;
        var $mOptions;
 
-       function setUp() {
+       protected function setUp() {
                global $wgParserConf;
                $this->mOptions = new ParserOptions();
                $name = isset( $wgParserConf['preprocessorClass'] ) ? $wgParserConf['preprocessorClass'] : 'Preprocessor_DOM';
@@ -103,7 +103,7 @@ class PreprocessorTest extends MediaWikiTestCase {
                        array( "{{foo|bar=|}", "<root>{{foo|bar=|}</root>"),
                        array( "{{Foo|} Bar=", "<root>{{Foo|} Bar=</root>"),
                        array( "{{Foo|} Bar=}}", "<root><template><title>Foo</title><part><name>} Bar</name>=<value></value></part></template></root>"),
-                       /* array( file_get_contents( dirname( __FILE__ ) . '/QuoteQuran.txt' ), file_get_contents( dirname( __FILE__ ) . '/QuoteQuranExpanded.txt' ) ), */
+                       /* array( file_get_contents( __DIR__ . '/QuoteQuran.txt' ), file_get_contents( __DIR__ . '/QuoteQuranExpanded.txt' ) ), */
                );
        }
 
@@ -165,7 +165,7 @@ class PreprocessorTest extends MediaWikiTestCase {
         * @dataProvider provideFiles
         */
        function testPreprocessorOutputFiles( $filename ) {
-               $folder = dirname( __FILE__ ) . "/../../../parser/preprocess";
+               $folder = __DIR__ . "/../../../parser/preprocess";
                $wikiText = file_get_contents( "$folder/$filename.txt" );
                $output = $this->preprocessToXml( $wikiText );
 
index 957907c..879e41f 100644 (file)
@@ -1,22 +1,17 @@
 <?php
 
 /**
- * This class is not directly tested. Instead it is extended by SearchDbTest.
  * @group Search
  * @group Database
  */
 class SearchEngineTest extends MediaWikiTestCase {
        protected $search, $pageList;
 
-       function tearDown() {
-               unset( $this->search );
-       }
-
        /**
         * Checks for database type & version.
         * Will skip current test if DB does not support search.
         */
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                // Search tests require MySQL or SQLite with FTS
                # Get database type and version
@@ -33,6 +28,10 @@ class SearchEngineTest extends MediaWikiTestCase {
                $this->search = new $searchType( $this->db );
        }
 
+       protected function tearDown() {
+               unset( $this->search );
+       }
+
        function pageExists( $title ) {
                return false;
        }
@@ -94,7 +93,7 @@ class SearchEngineTest extends MediaWikiTestCase {
                LinkCache::singleton()->clear();
 
                $page = WikiPage::factory( $title );
-               $page->doEdit( $text, $comment, 0, false, $user );
+               $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
 
                $this->pageList[] = array( $title, $page->getId() );
 
index 6e49a9a..7d867bc 100644 (file)
@@ -19,7 +19,11 @@ class MockSearch extends SearchEngine {
  * @group Search
  */
 class SearchUpdateTest extends MediaWikiTestCase {
-       static $searchType;
+
+       protected function setUp() {
+               parent::setUp();
+               $this->setMwGlobals( 'wgSearchType', 'MockSearch' );
+       }
 
        function update( $text, $title = 'Test', $id = 1 ) {
                $u = new SearchUpdate( $id, $title, $text );
@@ -33,19 +37,6 @@ class SearchUpdateTest extends MediaWikiTestCase {
                return $resultText;
        }
 
-       function setUp() {
-               global $wgSearchType;
-
-               self::$searchType  = $wgSearchType;
-               $wgSearchType = 'MockSearch';
-       }
-
-       function tearDown() {
-               global $wgSearchType;
-
-               $wgSearchType = self::$searchType;
-       }
-
        function testUpdateText() {
                $this->assertEquals(
                        'test',
index 2e4f4b0..f102309 100644 (file)
@@ -14,7 +14,7 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
         */
        protected $rc;
 
-       function setUp() {
+       protected function setUp() {
        }
 
        /** helper to test SpecialRecentchanges::buildMainQueryConds() */
@@ -120,7 +120,7 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
         * Provides associated namespaces to test recent changes
         * namespaces association filtering.
         */
-       public function provideNamespacesAssociations() {
+       public static function provideNamespacesAssociations() {
                return array( # (NS => Associated_NS)
                        array( NS_MAIN, NS_TALK),
                        array( NS_TALK, NS_MAIN),
index ea9d553..fed97ad 100644 (file)
@@ -10,9 +10,6 @@
 class SpecialSearchTest extends MediaWikiTestCase {
        private $search;
 
-       function setUp() { }
-       function tearDown() { }
-
        /**
         * @covers SpecialSearch::load
         * @dataProvider provideSearchOptionsTests
@@ -83,9 +80,15 @@ class SpecialSearchTest extends MediaWikiTestCase {
                                'Web request with specific NS should override user preference'
                        ),
                        array(
-                               $EMPTY_REQUEST, array( 'searchNs2' => 1, 'searchNs14' => 1 ),
+                               $EMPTY_REQUEST, array(
+                                       'searchNs2' => 1,
+                                       'searchNs14' => 1,
+                               ) + array_fill_keys( array_map( function( $ns ) {
+                                       return "searchNs$ns";
+                               }, $defaultNS ), 0 ),
                                'advanced', array( 2, 14 ),
                                'Bug 33583: search with no option should honor User search preferences'
+                               . ' and have all other namespace disabled'
                        ),
                );
        }
@@ -104,5 +107,38 @@ class SpecialSearchTest extends MediaWikiTestCase {
                }
                return $u;
        }
+
+       /**
+        * Verify we do not expand search term in <title> on search result page
+        * https://gerrit.wikimedia.org/r/4841
+        */
+       function testSearchTermIsNotExpanded() {
+
+               # Initialize [[Special::Search]]
+               $search = new SpecialSearch();
+               $search->getContext()->setTitle( Title::newFromText('Special:Search' ) );
+               $search->load();
+
+               # Simulate a user searching for a given term
+               $term = '{{SITENAME}}';
+               $search->showResults( $term );
+
+               # Lookup the HTML page title set for that page
+               $pageTitle = $search
+                       ->getContext()
+                       ->getOutput()
+                       ->getHTMLTitle();
+
+               # Craft the expected, plain, text:
+               $aPlainSearchTerm =
+                       wfMessage( 'searchresults-title', $term )
+                       ->plain();
+
+               # Compare :-]
+               $this->assertStringStartsWith( $aPlainSearchTerm,
+                       $pageTitle,
+                       "Search term should not be expanded in Special:Search <title>"
+               );
+       }
 }
 
index f66c387..59663ba 100644 (file)
@@ -6,7 +6,7 @@
  */
 class UploadFromUrlTest extends ApiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                global $wgEnableUploads, $wgAllowCopyUploads, $wgAllowAsyncCopyUploads;
                parent::setUp();
 
@@ -20,7 +20,7 @@ class UploadFromUrlTest extends ApiTestCase {
                }
        }
 
-       protected function doApiRequest( Array $params, Array $unused = null, $appendModule = false, User $user = null ) {
+       protected function doApiRequest( array $params, array $unused = null, $appendModule = false, User $user = null ) {
                $sessionId = session_id();
                session_write_close();
 
index c9dbb13..857aef5 100644 (file)
@@ -8,21 +8,21 @@ class UploadStashTest extends MediaWikiTestCase {
         */
        public static $users;
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                // Setup a file for bug 29408
-               $this->bug29408File = dirname( __FILE__ ) . '/bug29408';
+               $this->bug29408File = __DIR__ . '/bug29408';
                file_put_contents( $this->bug29408File, "\x00" );
 
                self::$users = array(
-                       'sysop' => new ApiTestUser(
+                       'sysop' => new TestUser(
                                'Uploadstashtestsysop',
                                'Upload Stash Test Sysop',
                                'upload_stash_test_sysop@example.com',
                                array( 'sysop' )
                        ),
-                       'uploader' => new ApiTestUser(
+                       'uploader' => new TestUser(
                                'Uploadstashtestuser',
                                'Upload Stash Test User',
                                'upload_stash_test_user@example.com',
@@ -31,6 +31,18 @@ class UploadStashTest extends MediaWikiTestCase {
                );
        }
 
+       protected function tearDown() {
+               if ( file_exists( $this->bug29408File . "." ) ) {
+                       unlink( $this->bug29408File . "." );
+               }
+
+               if ( file_exists( $this->bug29408File ) ) {
+                       unlink( $this->bug29408File );
+               }
+
+               parent::tearDown();
+       }
+
        public function testBug29408() {
                global $wgUser;
                $wgUser = self::$users['uploader']->user;
@@ -62,16 +74,4 @@ class UploadStashTest extends MediaWikiTestCase {
                $request = new FauxRequest( array( 'wpFileKey' => 'testkey-test.test', 'wpSessionKey' => 'foo') );
                $this->assertTrue( UploadFromStash::isValidRequest($request), 'Check key precedence' );
        }
-
-       public function tearDown() {
-               parent::tearDown();
-
-               if( file_exists( $this->bug29408File . "." ) ) {
-                       unlink( $this->bug29408File . "." );
-               }
-
-               if( file_exists( $this->bug29408File ) ) {
-                       unlink( $this->bug29408File );
-               }
-       }
 }
index 6948f5b..d757734 100644 (file)
@@ -6,7 +6,7 @@ class UploadTest extends MediaWikiTestCase {
        protected $upload;
 
 
-       function setUp() {
+       protected function setUp() {
                global $wgHooks;
                parent::setUp();
 
@@ -17,7 +17,7 @@ class UploadTest extends MediaWikiTestCase {
                };
        }
 
-       function tearDown() {
+       protected function tearDown() {
                global $wgHooks;
                $wgHooks = $this->hooks;
        }
@@ -27,7 +27,7 @@ class UploadTest extends MediaWikiTestCase {
         * First checks the return code
         * of UploadBase::getTitle() and then the actual returned title
         * 
-        * @dataProvider dataTestTitleValidation
+        * @dataProvider provideTestTitleValidation
         */
        public function testTitleValidation( $srcFilename, $dstFilename, $code, $msg ) {
                /* Check the result code */
@@ -46,7 +46,7 @@ class UploadTest extends MediaWikiTestCase {
        /**
         * Test various forms of valid and invalid titles that can be supplied.
         */
-       public function dataTestTitleValidation() {
+       public static function provideTestTitleValidation() {
                return array(
                        /* Test a valid title */
                        array( 'ValidTitle.jpg', 'ValidTitle.jpg', UploadBase::OK, 
index 3a648de..2679088 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageAmTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Am' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index b23e053..84507c5 100644 (file)
@@ -8,10 +8,10 @@
 class LanguageArTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Ar' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 735ccc6..3135ca8 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageBeTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Be' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 765cdb8..11aacb6 100644 (file)
@@ -3,10 +3,10 @@
 class LanguageBeTaraskTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Be-tarask' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index e1e2a13..00f4e13 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageBhTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Bh' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index b6631c0..39391af 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageBsTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Bs' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index dda29f9..862de52 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageCsTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'cs' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index f8186d7..5d5d60c 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageCuTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'cu' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index e9f9e41..406a943 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageCyTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'cy' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index ab7f931..516b9ee 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageDsbTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'dsb' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 8538744..0a29028 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageFrTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'fr' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index fbd9f11..9535cb1 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageGaTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'ga' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 24574bd..e6bfdd7 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageGdTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'gd' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 3d298b9..18cf225 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageGvTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'gv' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 9ac0f95..6205320 100644 (file)
@@ -9,40 +9,40 @@
 class LanguageHeTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'he' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
        /** @dataProvider providerPluralDual */
        function testPluralDual( $result, $value ) {
-               $forms = array( 'one', 'many', 'two' );
+               $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
        }
 
        function providerPluralDual() {
                return array (
-                       array( 'many', 0 ), // Zero -> plural
+                       array( 'other', 0 ), // Zero -> plural
                        array( 'one', 1 ), // Singular
                        array( 'two', 2 ), // Dual
-                       array( 'many', 3 ), // Plural
+                       array( 'other', 3 ), // Plural
                );
        }
 
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
        }
 
        function providerPlural() {
                return array (
-                       array( 'many', 0 ), // Zero -> plural
+                       array( 'other', 0 ), // Zero -> plural
                        array( 'one', 1 ), // Singular
-                       array( 'many', 2 ), // Plural, no dual provided
-                       array( 'many', 3 ), // Plural
+                       array( 'other', 2 ), // Plural, no dual provided
+                       array( 'other', 3 ), // Plural
                );
        }
 }
index ead9e02..bb3b5fa 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageHiTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Hi' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 4f1c66b..6f0ca1b 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageHrTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'hr' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 803c772..d336e81 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageHsbTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'hsb' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
diff --git a/tests/phpunit/languages/LanguageHuTest.php b/tests/phpunit/languages/LanguageHuTest.php
new file mode 100644 (file)
index 0000000..3181868
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012, Santhosh Thottingal
+ * @file
+ */
+
+/** Tests for MediaWiki languages/LanguageHu.php */
+class LanguageHuTest extends MediaWikiTestCase {
+       private $lang;
+
+       protected function setUp() {
+               $this->lang = Language::factory( 'Hu' );
+       }
+       protected function tearDown() {
+               unset( $this->lang );
+       }
+
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms = array( 'one', 'other' );
+               $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 200 ),
+               );
+       }
+
+}
index 7990bdf..2885707 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageHyTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'hy' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index ab88946..78ff445 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageKshTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'ksh' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 0fd9167..60b4945 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageLnTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'ln' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 0d7c7d3..821e028 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageLtTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Lt' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 0636da5..bb0dc6c 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageLvTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'lv' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 06b5654..d6ac643 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageMgTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'mg' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index cf5ec3d..21a9e41 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageMkTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'mk' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 8c4b0b2..9af2389 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageMlTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Ml' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 533e590..4f208d9 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageMoTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'mo' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 421bb38..4d25347 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageMtTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'mt' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index cf979cd..c8cfbb6 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageNlTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Nl' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index ea39362..1e70997 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageNsoTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'nso' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index e56d4b7..a543640 100644 (file)
@@ -9,10 +9,10 @@
 class LanguagePlTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'pl' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 5270f6f..9bf01a4 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageRoTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'ro' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 7a1f193..189a96c 100644 (file)
 class LanguageRuTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'ru' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 065ec29..51cfd2f 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageSeTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'se' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 931c82f..62f2775 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageSgsTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Sgs' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index b8169ae..1d8ae7c 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageShTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'sh' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 4cfd840..25823cf 100644 (file)
 class LanguageSkTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'sk' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index c1f7569..76de0fc 100644 (file)
 class LanguageSlTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'sl' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index b7e72e9..cf14477 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageSmaTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'sma' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index e7d3ea1..7be4589 100644 (file)
  * @file
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
+require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageSr.php */
 class LanguageSrTest extends MediaWikiTestCase {
        /* Language object. Initialized before each test */
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'sr' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 7025449..621c891 100644 (file)
@@ -7,10 +7,10 @@ class LanguageTest extends MediaWikiTestCase {
         */
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'en' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
@@ -1065,5 +1065,30 @@ class LanguageTest extends MediaWikiTestCase {
                        array( 10000, 'MMMMMMMMMM' ),
                );
        }
+
+       /**
+        * @dataProvider providePluralData
+        */
+       function testConvertPlural( $expected, $number, $forms ) {
+               $chosen = $this->lang->convertPlural( $number, $forms );
+               $this->assertEquals( $expected, $chosen );
+       }
+
+       function providePluralData() {
+               return array(
+                       array( 'explicit zero', 0, array(
+                               '0=explicit zero', 'singular', 'plural'
+                       ) ),
+                       array( 'explicit one', 1, array(
+                               'singular', 'plural', '1=explicit one',
+                       ) ),
+                       array( 'singular', 1, array(
+                               'singular', 'plural', '0=explicit zero',
+                       ) ),
+                       array( 'plural', 3, array(
+                               '0=explicit zero', '1=explicit one', 'singular', 'plural'
+                       ) ),
+               );
+       }
 }
 
index 4bfaa00..175cdb9 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageTiTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Ti' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index a1facd1..e03531f 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageTlTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Tl' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index bda4c9d..a3cacc2 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageTrTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Tr' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 60fafb0..2b6f707 100644 (file)
 class LanguageUkTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Uk' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 86f483d..0314649 100644 (file)
  * @file
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/bootstrap.php';
+require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageUz.php */
 class LanguageUzTest extends MediaWikiTestCase {
        /* Language object. Initialized before each test */
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'uz' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
index 172f19b..08312ce 100644 (file)
@@ -9,10 +9,10 @@
 class LanguageWaTest extends MediaWikiTestCase {
        private $lang;
 
-       function setUp() {
+       protected function setUp() {
                $this->lang = Language::factory( 'Wa' );
        }
-       function tearDown() {
+       protected function tearDown() {
                unset( $this->lang );
        }
 
diff --git a/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php b/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php
new file mode 100644 (file)
index 0000000..033164b
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ */
+
+class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider validTestCases
+        */
+       function testValidRules( $expected, $rules, $number, $comment ) {
+               $result = CLDRPluralRuleEvaluator::evaluate( $number, (array) $rules );
+               $this->assertEquals( $expected, $result, $comment );
+       }
+
+       /**
+        * @dataProvider invalidTestCases
+        * @expectedException CLDRPluralRuleError
+        */
+       function testInvalidRules( $rules, $comment ) {
+               CLDRPluralRuleEvaluator::evaluate( 1, (array) $rules );
+       }
+
+       function validTestCases() {
+               $tests = array(
+                       # expected, number, rule, comment
+                       array( 0, 'n is 1', 1, 'integer number and is' ),
+                       array( 0, 'n is 1', "1", 'string integer number and is' ),
+                       array( 0, 'n is 1', 1.0, 'float number and is' ),
+                       array( 0, 'n is 1', "1.0", 'string float number and is' ),
+                       array( 1, 'n is 1', 1.1, 'float number and is' ),
+                       array( 1, 'n is 1', 2, 'float number and is' ),
+
+                       array( 0, 'n in 1,3,5',     3, '' ),
+                       array( 1, 'n not in 1,3,5', 5, '' ),
+
+                       array( 1, 'n in 1,3,5',     2, '' ),
+                       array( 0, 'n not in 1,3,5', 4, '' ),
+
+                       array( 0, 'n in 1..3',      2, '' ),
+                       array( 0, 'n in 1..3',      3, 'in is inclusive' ),
+                       array( 1, 'n in 1..3',      0, '' ),
+
+                       array( 1, 'n not in 1..3',      2, '' ),
+                       array( 1, 'n not in 1..3',      3, 'in is inclusive' ),
+                       array( 0, 'n not in 1..3',      0, '' ),
+
+                       array( 1, 'n is not 1 and n is not 2 and n is not 3', 1, 'and relation' ),
+                       array( 0, 'n is not 1 and n is not 2 and n is not 4', 3, 'and relation' ),
+
+                       array( 0, 'n is not 1 or n is 1', 1, 'or relation' ),
+                       array( 1, 'n is 1 or n is 2', 3, 'or relation' ),
+
+                       array( 0, 'n              is      1', 1, 'extra whitespace' ),
+
+                       array( 0, 'n mod 3 is 1', 7, 'mod' ),
+                       array( 0, 'n mod 3 is not 1', 4.3, 'mod with floats' ),
+
+                       array( 0, 'n within 1..3', 2, 'within with integer' ),
+                       array( 0, 'n within 1..3', 2.5, 'within with float' ),
+                       array( 0, 'n in 1..3', 2, 'in with integer' ),
+                       array( 1, 'n in 1..3', 2.5, 'in with float' ),
+
+                       array( 0, 'n in 3 or n is 4 and n is 5', 3, 'and binds more tightly than or' ),
+                       array( 1, 'n is 3 or n is 4 and n is 5', 4, 'and binds more tightly than or' ),
+
+                       array( 0, 'n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99', 24, 'breton rule' ),
+                       array( 1, 'n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99', 25, 'breton rule' ),
+
+                       array( 0, 'n within 0..2 and n is not 2', 0, 'french rule' ),
+                       array( 0, 'n within 0..2 and n is not 2', 1, 'french rule' ),
+                       array( 0, 'n within 0..2 and n is not 2', 1.2, 'french rule' ),
+                       array( 1, 'n within 0..2 and n is not 2', 2, 'french rule' ),
+
+                       array( 1, 'n in 3..10,13..19', 2, 'scottish rule - ranges with comma' ),
+                       array( 0, 'n in 3..10,13..19', 4, 'scottish rule - ranges with comma' ),
+                       array( 1, 'n in 3..10,13..19', 12.999, 'scottish rule - ranges with comma' ),
+                       array( 0, 'n in 3..10,13..19', 13, 'scottish rule - ranges with comma' ),
+
+                       array( 0, '5 mod 3 is n', 2, 'n as result of mod - no need to pass' ),
+               );
+
+               return $tests;
+       }
+
+       function invalidTestCases() {
+               $tests = array(
+                       array( 'n mod mod 5 is 1', 'mod mod' ),
+                       array( 'n', 'just n' ),
+                       array( 'n is in 5', 'is in' ),
+               );
+               return $tests;
+       }
+
+}
index d134438..0f3a6a1 100644 (file)
@@ -35,7 +35,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * @throws MWExcepion
         */
        protected function addRevision( Page $page, $text, $summary ) {
-               $status = $page->doEdit( $text, $summary );
+               $status = $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), $summary );
                if ( $status->isGood() ) {
                        $value = $status->getValue();
                        $revision = $value['revision'];
@@ -72,7 +72,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         *
         * Clears $wgUser, and reports errors from addDBData to PHPUnit
         */
-       public function setUp() {
+       protected function setUp() {
                global $wgUser;
 
                parent::setUp();
@@ -295,9 +295,12 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * @param $text_sha1 string: the base36 SHA-1 of the revision's text
         * @param $text string|false: (optional) The revision's string, or false to check for a
         *            revision stub
+        * @param $model String: the expected content model id (default: CONTENT_MODEL_WIKITEXT)
+        * @param $format String: the expected format model id (default: CONTENT_FORMAT_WIKITEXT)
         * @param $parentid int|false: (optional) id of the parent revision
         */
-       protected function assertRevision( $id, $summary, $text_id, $text_bytes, $text_sha1, $text = false, $parentid = false ) {
+       protected function assertRevision( $id, $summary, $text_id, $text_bytes, $text_sha1, $text = false, $parentid = false,
+                                               $model = CONTENT_MODEL_WIKITEXT, $format = CONTENT_FORMAT_WIKITEXT ) {
 
                $this->assertNodeStart( "revision" );
                $this->skipWhitespace();
@@ -315,9 +318,33 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                $this->skipWhitespace();
 
                $this->assertTextNode( "comment", $summary );
+               $this->skipWhitespace();
+
+               if ( $this->xml->name == "text" ) {
+                       // note: <text> tag may occur here or at the very end.
+                       $text_found = true;
+                       $this->assertText( $id, $text_id, $text_bytes, $text );
+               } else {
+                       $text_found = false;
+               }
 
                $this->assertTextNode( "sha1", $text_sha1 );
 
+               $this->assertTextNode( "model", $model );
+               $this->skipWhitespace();
+
+               $this->assertTextNode( "format", $format );
+               $this->skipWhitespace();
+
+               if ( !$text_found ) {
+                       $this->assertText( $id, $text_id, $text_bytes, $text );
+               }
+
+               $this->assertNodeEnd( "revision" );
+               $this->skipWhitespace();
+       }
+
+       protected function assertText( $id, $text_id, $text_bytes, $text ) {
                $this->assertNodeStart( "text", false );
                if ( $text_bytes !== false ) {
                        $this->assertEquals( $this->xml->getAttribute( "bytes" ), $text_bytes,
@@ -344,9 +371,5 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                        $this->assertNodeEnd( "text" );
                        $this->skipWhitespace();
                }
-
-               $this->assertNodeEnd( "revision" );
-               $this->skipWhitespace();
        }
-
 }
index 965d7be..a029c92 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/backupPrefetch.inc";
+require_once __DIR__ . "/../../../maintenance/backupPrefetch.inc";
 
 /**
  * Tests for BaseDump
@@ -156,7 +156,7 @@ class BaseDumpTest extends MediaWikiTestCase {
   <siteinfo>
     <sitename>wikisvn</sitename>
     <base>http://localhost/wiki-svn/index.php/Main_Page</base>
-    <generator>MediaWiki 1.20alpha</generator>
+    <generator>MediaWiki 1.21alpha</generator>
     <case>first-letter</case>
     <namespaces>
       <namespace key="-2" case="first-letter">Media</namespace>
@@ -199,6 +199,8 @@ class BaseDumpTest extends MediaWikiTestCase {
       <comment>BackupDumperTestP1Summary1</comment>
       <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
       <text xml:space="preserve">BackupDumperTestP1Text1</text>
+      <model name="wikitext">1</model>
+      <format mime="text/x-wiki">1</format>
     </revision>
   </page>
 ';
@@ -216,6 +218,8 @@ class BaseDumpTest extends MediaWikiTestCase {
       <comment>BackupDumperTestP2Summary1</comment>
       <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
       <text xml:space="preserve">BackupDumperTestP2Text1</text>
+      <model name="wikitext">1</model>
+      <format mime="text/x-wiki">1</format>
     </revision>
     <revision>
       <id>5</id>
@@ -227,6 +231,8 @@ class BaseDumpTest extends MediaWikiTestCase {
       <comment>BackupDumperTestP2Summary4 extra</comment>
       <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
       <text xml:space="preserve">BackupDumperTestP2Text4 some additional Text</text>
+      <model name="wikitext">1</model>
+      <format mime="text/x-wiki">1</format>
     </revision>
   </page>
 ';
@@ -243,6 +249,8 @@ class BaseDumpTest extends MediaWikiTestCase {
       </contributor>
       <comment>Talk BackupDumperTestP1 Summary1</comment>
       <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
+      <model name="wikitext">1</model>
+      <format mime="text/x-wiki">1</format>
       <text xml:space="preserve">Talk about BackupDumperTestP1 Text1</text>
     </revision>
   </page>
index 24186fb..7072299 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/backupTextPass.inc";
+require_once __DIR__ . "/../../../maintenance/backupTextPass.inc";
 
 /**
  * Tests for page dumps of BackupDumper
@@ -74,7 +74,7 @@ class TextPassDumperTest extends DumpTestCase {
 
        }
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                // Since we will restrict dumping by page ranges (to allow
@@ -250,9 +250,9 @@ class TextPassDumperTest extends DumpTestCase {
                        $dumper->stderr = $stderr;
 
                        // The actual dump and taking time
-                       $ts_before = wfTime();
+                       $ts_before = microtime( true );
                        $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
-                       $ts_after = wfTime();
+                       $ts_after = microtime( true );
                        $lastDuration = $ts_after - $ts_before;
 
                        // Handling increasing the iteration count for the stubs
@@ -383,7 +383,7 @@ class TextPassDumperTest extends DumpTestCase {
                $this->assertEmpty( $files, "Remaining unchecked files" );
 
                // ... and have dealt with more than one checkpoint file
-               $this->assertGreaterThan( 1, $checkpointFiles, "# of checkpoint files" );
+               $this->assertGreaterThan( 1, $checkpointFiles, "expected more than 1 checkpoint to have been created. Checkpoint interval is $checkpointAfter seconds, maybe your computer is too fast?" );
 
                $this->expectETAOutput();
        }
@@ -438,7 +438,7 @@ class TextPassDumperTest extends DumpTestCase {
   <siteinfo>
     <sitename>wikisvn</sitename>
     <base>http://localhost/wiki-svn/index.php/Main_Page</base>
-    <generator>MediaWiki 1.20alpha</generator>
+    <generator>MediaWiki 1.21alpha</generator>
     <case>first-letter</case>
     <namespaces>
       <namespace key="-2" case="first-letter">Media</namespace>
@@ -481,6 +481,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>BackupDumperTestP1Summary1</comment>
       <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId1_1 . '" bytes="23" />
     </revision>
   </page>
@@ -497,6 +499,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>BackupDumperTestP2Summary1</comment>
       <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId2_1 . '" bytes="23" />
     </revision>
     <revision>
@@ -508,6 +512,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>BackupDumperTestP2Summary2</comment>
       <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId2_2 . '" bytes="23" />
     </revision>
     <revision>
@@ -519,6 +525,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>BackupDumperTestP2Summary3</comment>
       <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId2_3 . '" bytes="23" />
     </revision>
     <revision>
@@ -530,6 +538,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>BackupDumperTestP2Summary4 extra</comment>
       <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId2_4 . '" bytes="44" />
     </revision>
   </page>
@@ -548,6 +558,8 @@ class TextPassDumperTest extends DumpTestCase {
       </contributor>
       <comment>Talk BackupDumperTestP1 Summary1</comment>
       <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
       <text id="' . $this->textId4_1 . '" bytes="35" />
     </revision>
   </page>
index 925e277..64374f8 100644 (file)
@@ -65,7 +65,7 @@ class BackupDumperPageTest extends DumpTestCase {
 
        }
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                // Since we will restrict dumping by page ranges (to allow
index f0689b6..fd6db0a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/fetchText.php";
+require_once __DIR__ . "/../../../maintenance/fetchText.php";
 
 /**
  * Mock for the input/output of FetchText
@@ -111,7 +111,7 @@ class FetchTextTest extends MediaWikiTestCase {
         * @throws MWExcepion
         */
        private function addRevision( $page, $text, $summary ) {
-               $status = $page->doEdit( $text, $summary );
+               $status = $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), $summary );
                if ( $status->isGood() ) {
                        $value = $status->getValue();
                        $revision = $value['revision'];
index 8635614..0b7c758 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once dirname( __FILE__ ) . "/../../../maintenance/getSlaveServer.php";
+require_once __DIR__ . "/../../../maintenance/getSlaveServer.php";
 
 /**
  * Tests for getSlaveServer
index 61a20f1..bcbf4ec 100755 (executable)
@@ -9,7 +9,7 @@
 /* Configuration */
 
 // Evaluate the include path relative to this file
-$IP = dirname( dirname( dirname( __FILE__ ) ) );
+$IP = dirname( dirname( __DIR__ ) );
 
 // Set a flag which can be used to detect when other scripts have been entered through this entry point or not
 define( 'MW_PHPUNIT_TEST', true );
@@ -34,6 +34,10 @@ class PHPUnitMaintClass extends Maintenance {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
                global $wgLanguageConverterCacheType, $wgUseDatabaseMessages;
                global $wgLocaltimezone, $wgLocalisationCacheConf;
+               global $wgDevelopmentWarnings;
+
+               // wfWarn should cause tests to fail
+               $wgDevelopmentWarnings = true;
 
                $wgMainCacheType = CACHE_NONE;
                $wgMessageCacheType = CACHE_NONE;
index 912d760..89337f4 100644 (file)
@@ -33,13 +33,13 @@ class SideBarTest extends MediaWikiLangTestCase {
                }
        }
 
-       function setUp() {
+       protected function setUp() {
                parent::setUp();
                $this->initMessagesHref();
                $this->skin = new SkinTemplate();
                $this->skin->getContext()->setLanguage( Language::factory( 'en' ) );
        }
-       function tearDown() {
+       protected function tearDown() {
                parent::tearDown();
                $this->skin = null;
        }
index 6779ad4..843aaf9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-require_once( dirname( dirname( __FILE__ ) ) . '/includes/upload/UploadFromUrlTest.php' );
+require_once( dirname( __DIR__ ) . '/includes/upload/UploadFromUrlTest.php' );
 
 class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
        public $savedGlobals = array();
@@ -15,7 +15,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                return true;
        }
 
-       function setUp() {
+       protected function setUp() {
                global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
                          $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache,
                          $wgNamespaceAliases, $wgNamespaceProtection, $parserMemc;
@@ -79,7 +79,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                FileBackendGroup::destroySingleton();
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                foreach ( $this->savedGlobals as $var => $val ) {
                        $GLOBALS[$var] = $val;
                }
index 1cd085f..be5f4ac 100644 (file)
@@ -19,6 +19,7 @@ return array(
                        '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/data/mediawiki.jqueryMsg.data.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.test.js',
@@ -30,6 +31,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
                ),
                'dependencies' => array(
                        'jquery.autoEllipsis',
@@ -55,6 +57,7 @@ return array(
                        'mediawiki.util',
                        'mediawiki.special.recentchanges',
                        'mediawiki.language',
+                       'mediawiki.cldr',
                ),
                'position' => 'top',
        )
diff --git a/tests/qunit/data/generateJqueryMsgData.php b/tests/qunit/data/generateJqueryMsgData.php
new file mode 100644 (file)
index 0000000..7079e0e
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/**
+ * This PHP script defines the spec that the mediawiki.jqueryMsg module should conform to.
+ *
+ * It does this by looking up the results of various kinds of string parsing, with various
+ * languages, in the current installation of MediaWiki. It then outputs a static specification,
+ * mapping expected inputs to outputs, which can be used fed into a unit test framework.
+ * (QUnit, Jasmine, anything, it just outputs an object with key/value pairs).
+ *
+ * This is similar to Michael Dale (mdale@mediawiki.org)'s parser tests, except that it doesn't
+ * look up the API results while doing the test, so the test run is much faster (at the cost
+ * of being out of date in rare circumstances. But mostly the parsing that we are doing in
+ * Javascript doesn't change much).
+ */
+
+/*
+ * @example QUnit
+ * <code>
+       QUnit.test( 'Output matches 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();
+                       getMwLanguage( test.lang, function ( langClass ) {
+                               var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                               assert.equal(
+                                       parser.parse( test.key, test.args ).html(),
+                                       test.result,
+                                       test.name
+                               );
+                               QUnit.start();
+                       } );
+               } );
+       });
+ * </code>
+ *
+ * @example Jasmine
+ * <code>
+       describe( 'match output to output from PHP parser', function () {
+               mw.messages.set( mw.libs.phpParserData.messages );
+               $.each( mw.libs.phpParserData.tests, function ( i, test ) {
+                       it( 'should parse ' + test.name, function () {
+                               var langClass;
+                               runs( function () {
+                                       getMwLanguage( test.lang, function ( gotIt ) {
+                                               langClass = gotIt;
+                                       });
+                               });
+                               waitsFor( function () {
+                                       return langClass !== undefined;
+                               }, 'Language class should be loaded', 1000 );
+                               runs( function () {
+                                       console.log( test.lang, 'running tests' );
+                                       var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                                       expect(
+                                               parser.parse( test.key, test.args ).html()
+                                       ).toEqual( test.result );
+                               } );
+                       } );
+               } );
+       } );
+ * </code>
+ */
+
+$maintenanceDir = dirname( dirname( dirname( __DIR__ ) ) ) . '/maintenance';
+
+require( "$maintenanceDir/Maintenance.php" );
+
+class GenerateJqueryMsgData extends Maintenance {
+
+       static $keyToTestArgs = array(
+               'undelete_short' => array(
+                       array( 0 ),
+                       array( 1 ),
+                       array( 2 ),
+                       array( 5 ),
+                       array( 21 ),
+                       array( 101 )
+               ),
+               'category-subcat-count' => array(
+                       array( 0, 10 ),
+                       array( 1, 1 ),
+                       array( 1, 2 ),
+                       array( 3, 30 )
+               )
+       );
+
+       public function __construct() {
+                       parent::__construct();
+                       $this->mDescription = 'Create a specification for message parsing ini JSON format';
+                       // add any other options here
+       }
+
+       public function execute() {
+               list( $messages, $tests ) = $this->getMessagesAndTests();
+               $this->writeJavascriptFile( $messages, $tests, __DIR__ . '/mediawiki.jqueryMsg.data.js' );
+       }
+
+       private function getMessagesAndTests() {
+               $messages = array();
+               $tests = array();
+               foreach ( array( 'en', 'fr', 'ar', 'jp', 'zh' ) as $languageCode ) {
+                       foreach ( self::$keyToTestArgs as $key => $testArgs ) {
+                               foreach ($testArgs as $args) {
+                                       // Get the raw message, without any transformations.
+                                       $template = wfMessage( $key )->inLanguage( $languageCode )->plain();
+
+                                       // Get the magic-parsed version with args.
+                                       $result = wfMessage( $key, $args )->inLanguage( $languageCode )->text();
+
+                                       // Record the template, args, language, and expected result
+                                       // fake multiple languages by flattening them together.
+                                       $langKey = $languageCode . '_' . $key;
+                                       $messages[$langKey] = $template;
+                                       $tests[] = array(
+                                               'name' => $languageCode . ' ' . $key . ' ' . join( ',', $args ),
+                                               'key' => $langKey,
+                                               'args' => $args,
+                                               'result' => $result,
+                                               'lang' => $languageCode
+                                       );
+                               }
+                       }
+               }
+               return array( $messages, $tests );
+       }
+
+       private function writeJavascriptFile( $messages, $tests, $dataSpecFile ) {
+               $phpParserData = array(
+                       'messages' => $messages,
+                       'tests' => $tests,
+               );
+
+               $output =
+                       "// This file stores the output from the PHP parser for various messages, arguments,\n"
+                       . "// 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"
+                       . "\n"
+                       . 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n";
+
+               $fp = file_put_contents( $dataSpecFile, $output );
+               if ( $fp === false ) {
+                       die( "Couldn't write to $dataSpecFile." );
+               }
+       }
+}
+
+$maintClass = "GenerateJqueryMsgData";
+require_once( "$maintenanceDir/doMaintenance.php" );
diff --git a/tests/qunit/data/mediawiki.jqueryMsg.data.js b/tests/qunit/data/mediawiki.jqueryMsg.data.js
new file mode 100644 (file)
index 0000000..05bb5c8
--- /dev/null
@@ -0,0 +1,491 @@
+// 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
+
+mediaWiki.libs.phpParserData = {
+       "messages": {
+               "en_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+               "en_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+               "fr_undelete_short": "Restaurer $1 modification{{PLURAL:$1||s}}",
+               "fr_category-subcat-count": "Cette cat\u00e9gorie comprend {{PLURAL:$2|la sous-cat\u00e9gorie|$2 sous-cat\u00e9gories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
+               "ar_undelete_short": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 {{PLURAL:$1|\u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f|\u062a\u0639\u062f\u064a\u0644\u064a\u0646|$1 \u062a\u0639\u062f\u064a\u0644\u0627\u062a|$1 \u062a\u0639\u062f\u064a\u0644|$1 \u062a\u0639\u062f\u064a\u0644\u0627}}",
+               "ar_category-subcat-count": "{{PLURAL:$2|\u0644\u0627 \u062a\u0635\u0627\u0646\u064a\u0641 \u0641\u0631\u0639\u064a\u0629 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 {{PLURAL:$1||\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a|\u0647\u0630\u064a\u0646 \u0627\u0644\u062a\u0635\u0646\u064a\u0641\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u064a\u0646|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641\u0627 \u0641\u0631\u0639\u064a\u0627|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641 \u0641\u0631\u0639\u064a}}\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a $2.}}",
+               "jp_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+               "jp_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+               "zh_undelete_short": "\u6062\u590d$1\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+               "zh_category-subcat-count": "{{PLURAL:$2|\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002|\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u5217$1\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171$2\u4e2a\u5b50\u5206\u7c7b\u3002}}"
+       },
+       "tests": [
+               {
+                       "name": "en undelete_short 0",
+                       "key": "en_undelete_short",
+                       "args": [
+                               0
+                       ],
+                       "result": "Undelete 0 edits",
+                       "lang": "en"
+               },
+               {
+                       "name": "en undelete_short 1",
+                       "key": "en_undelete_short",
+                       "args": [
+                               1
+                       ],
+                       "result": "Undelete one edit",
+                       "lang": "en"
+               },
+               {
+                       "name": "en undelete_short 2",
+                       "key": "en_undelete_short",
+                       "args": [
+                               2
+                       ],
+                       "result": "Undelete 2 edits",
+                       "lang": "en"
+               },
+               {
+                       "name": "en undelete_short 5",
+                       "key": "en_undelete_short",
+                       "args": [
+                               5
+                       ],
+                       "result": "Undelete 5 edits",
+                       "lang": "en"
+               },
+               {
+                       "name": "en undelete_short 21",
+                       "key": "en_undelete_short",
+                       "args": [
+                               21
+                       ],
+                       "result": "Undelete 21 edits",
+                       "lang": "en"
+               },
+               {
+                       "name": "en undelete_short 101",
+                       "key": "en_undelete_short",
+                       "args": [
+                               101
+                       ],
+                       "result": "Undelete 101 edits",
+                       "lang": "en"
+               },
+               {
+                       "name": "en category-subcat-count 0,10",
+                       "key": "en_category-subcat-count",
+                       "args": [
+                               0,
+                               10
+                       ],
+                       "result": "This category has the following 0 subcategories, out of 10 total.",
+                       "lang": "en"
+               },
+               {
+                       "name": "en category-subcat-count 1,1",
+                       "key": "en_category-subcat-count",
+                       "args": [
+                               1,
+                               1
+                       ],
+                       "result": "This category has only the following subcategory.",
+                       "lang": "en"
+               },
+               {
+                       "name": "en category-subcat-count 1,2",
+                       "key": "en_category-subcat-count",
+                       "args": [
+                               1,
+                               2
+                       ],
+                       "result": "This category has the following subcategory, out of 2 total.",
+                       "lang": "en"
+               },
+               {
+                       "name": "en category-subcat-count 3,30",
+                       "key": "en_category-subcat-count",
+                       "args": [
+                               3,
+                               30
+                       ],
+                       "result": "This category has the following 3 subcategories, out of 30 total.",
+                       "lang": "en"
+               },
+               {
+                       "name": "fr undelete_short 0",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               0
+                       ],
+                       "result": "Restaurer 0 modification",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr undelete_short 1",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               1
+                       ],
+                       "result": "Restaurer 1 modification",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr undelete_short 2",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               2
+                       ],
+                       "result": "Restaurer 2 modifications",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr undelete_short 5",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               5
+                       ],
+                       "result": "Restaurer 5 modifications",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr undelete_short 21",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               21
+                       ],
+                       "result": "Restaurer 21 modifications",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr undelete_short 101",
+                       "key": "fr_undelete_short",
+                       "args": [
+                               101
+                       ],
+                       "result": "Restaurer 101 modifications",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr category-subcat-count 0,10",
+                       "key": "fr_category-subcat-count",
+                       "args": [
+                               0,
+                               10
+                       ],
+                       "result": "Cette cat\u00e9gorie comprend 10 sous-cat\u00e9gories, dont celle ci-dessous.",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr category-subcat-count 1,1",
+                       "key": "fr_category-subcat-count",
+                       "args": [
+                               1,
+                               1
+                       ],
+                       "result": "Cette cat\u00e9gorie comprend la sous-cat\u00e9gorie ci-dessous.",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr category-subcat-count 1,2",
+                       "key": "fr_category-subcat-count",
+                       "args": [
+                               1,
+                               2
+                       ],
+                       "result": "Cette cat\u00e9gorie comprend 2 sous-cat\u00e9gories, dont celle ci-dessous.",
+                       "lang": "fr"
+               },
+               {
+                       "name": "fr category-subcat-count 3,30",
+                       "key": "fr_category-subcat-count",
+                       "args": [
+                               3,
+                               30
+                       ],
+                       "result": "Cette cat\u00e9gorie comprend 30 sous-cat\u00e9gories, dont les 3 ci-dessous.",
+                       "lang": "fr"
+               },
+               {
+                       "name": "ar undelete_short 0",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               0
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar undelete_short 1",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               1
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644\u064a\u0646",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar undelete_short 2",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               2
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 2 \u062a\u0639\u062f\u064a\u0644\u0627\u062a",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar undelete_short 5",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               5
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 5 \u062a\u0639\u062f\u064a\u0644",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar undelete_short 21",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               21
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 21 \u062a\u0639\u062f\u064a\u0644\u0627",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar undelete_short 101",
+                       "key": "ar_undelete_short",
+                       "args": [
+                               101
+                       ],
+                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 101 \u062a\u0639\u062f\u064a\u0644\u0627",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar category-subcat-count 0,10",
+                       "key": "ar_category-subcat-count",
+                       "args": [
+                               0,
+                               10
+                       ],
+                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 10.",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar category-subcat-count 1,1",
+                       "key": "ar_category-subcat-count",
+                       "args": [
+                               1,
+                               1
+                       ],
+                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar category-subcat-count 1,2",
+                       "key": "ar_category-subcat-count",
+                       "args": [
+                               1,
+                               2
+                       ],
+                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 2.",
+                       "lang": "ar"
+               },
+               {
+                       "name": "ar category-subcat-count 3,30",
+                       "key": "ar_category-subcat-count",
+                       "args": [
+                               3,
+                               30
+                       ],
+                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0647 \u0627\u06443 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 30.",
+                       "lang": "ar"
+               },
+               {
+                       "name": "jp undelete_short 0",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               0
+                       ],
+                       "result": "Undelete 0 edits",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp undelete_short 1",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               1
+                       ],
+                       "result": "Undelete one edit",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp undelete_short 2",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               2
+                       ],
+                       "result": "Undelete 2 edits",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp undelete_short 5",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               5
+                       ],
+                       "result": "Undelete 5 edits",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp undelete_short 21",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               21
+                       ],
+                       "result": "Undelete 21 edits",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp undelete_short 101",
+                       "key": "jp_undelete_short",
+                       "args": [
+                               101
+                       ],
+                       "result": "Undelete 101 edits",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp category-subcat-count 0,10",
+                       "key": "jp_category-subcat-count",
+                       "args": [
+                               0,
+                               10
+                       ],
+                       "result": "This category has the following 0 subcategories, out of 10 total.",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp category-subcat-count 1,1",
+                       "key": "jp_category-subcat-count",
+                       "args": [
+                               1,
+                               1
+                       ],
+                       "result": "This category has only the following subcategory.",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp category-subcat-count 1,2",
+                       "key": "jp_category-subcat-count",
+                       "args": [
+                               1,
+                               2
+                       ],
+                       "result": "This category has the following subcategory, out of 2 total.",
+                       "lang": "jp"
+               },
+               {
+                       "name": "jp category-subcat-count 3,30",
+                       "key": "jp_category-subcat-count",
+                       "args": [
+                               3,
+                               30
+                       ],
+                       "result": "This category has the following 3 subcategories, out of 30 total.",
+                       "lang": "jp"
+               },
+               {
+                       "name": "zh undelete_short 0",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               0
+                       ],
+                       "result": "\u6062\u590d0\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh undelete_short 1",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               1
+                       ],
+                       "result": "\u6062\u590d1\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh undelete_short 2",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               2
+                       ],
+                       "result": "\u6062\u590d2\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh undelete_short 5",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               5
+                       ],
+                       "result": "\u6062\u590d5\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh undelete_short 21",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               21
+                       ],
+                       "result": "\u6062\u590d21\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh undelete_short 101",
+                       "key": "zh_undelete_short",
+                       "args": [
+                               101
+                       ],
+                       "result": "\u6062\u590d101\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh category-subcat-count 0,10",
+                       "key": "zh_category-subcat-count",
+                       "args": [
+                               0,
+                               10
+                       ],
+                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52170\u4e2a\u5b50\u5206\u7c7b\uff0c\u517110\u4e2a\u5b50\u5206\u7c7b\u3002",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh category-subcat-count 1,1",
+                       "key": "zh_category-subcat-count",
+                       "args": [
+                               1,
+                               1
+                       ],
+                       "result": "\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh category-subcat-count 1,2",
+                       "key": "zh_category-subcat-count",
+                       "args": [
+                               1,
+                               2
+                       ],
+                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52171\u4e2a\u5b50\u5206\u7c7b\uff0c\u51712\u4e2a\u5b50\u5206\u7c7b\u3002",
+                       "lang": "zh"
+               },
+               {
+                       "name": "zh category-subcat-count 3,30",
+                       "key": "zh_category-subcat-count",
+                       "args": [
+                               3,
+                               30
+                       ],
+                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52173\u4e2a\u5b50\u5206\u7c7b\uff0c\u517130\u4e2a\u5b50\u5206\u7c7b\u3002",
+                       "lang": "zh"
+               }
+       ]
+};
index 093c71f..1870d5a 100644 (file)
 header( 'Content-Type: text/css; charset=utf-8' );
 
 /**
- * Allows characters in ranges [a-z], [A-Z], [0-9] as well as a dot ("."), dash ("-") and hash ("#").
+ * Allows characters in ranges [a-z], [A-Z] and [0-9],
+ * in addition to a dot ("."), dash ("-"), space (" ") and hash ("#").
  * @since 1.20
  *
- * @param $val string
- * @return string: input with illigal characters removed 
+ * @param string $val
+ * @return string Value with any illegal characters removed.
  */
 function cssfilter( $val ) {
-       return preg_replace( '/[^A-Za-z0-9\.\-#]/', '', $val );
+       return preg_replace( '/[^A-Za-z0-9\.\- #]/', '', $val );
 }
 
 // Do basic sanitization
index 23a93a7..4f86eb9 100644 (file)
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function ( $, mw ) {
        var simpleSample, U_20AC, mbSample;
 
        QUnit.module( 'jquery.byteLimit', QUnit.newMwEnvironment() );
 
        // Basic sendkey-implementation
        function addChars( $input, charstr ) {
-               var len, i, prevVal, code, event;
-               len = charstr.length;
-               for ( i = 0; i < len; i += 1 ) {
-                       // Keep track of the previous value
-                       prevVal = $input.val();
-
-                       // Get the key code
-                       code = charstr.charCodeAt( i );
-
-                       // Trigger event and undo if prevented
-                       event = new jQuery.Event( 'keypress', {
-                               which: code,
-                               keyCode: code,
-                               charCode: code
-                       } );
-                       $input.trigger( event );
-                       if ( !event.isDefaultPrevented() ) {
-                               $input.val( prevVal + charstr.charAt( i ) );
-                       }
+               var c, len;
+               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 );
+                               } )
+                               .trigger( 'change' );
                }
        }
 
                        limit: null
                }, options);
 
-               QUnit.test( opt.description, function ( assert ) {
-                       var rawVal, fn, newVal;
+               QUnit.asyncTest( opt.description, opt.hasLimit ? 3 : 2, function ( assert ) {
+               setTimeout( function () {
+                       var rawVal, fn, effectiveVal;
 
                        opt.$input.appendTo( '#qunit-fixture' );
 
                        // Simulate pressing keys for each of the sample characters
                        addChars( opt.$input, opt.sample );
+
                        rawVal = opt.$input.val();
-                       fn = opt.$input.data( 'byteLimit-callback' );
-                       newVal = $.isFunction( fn ) ? fn( rawVal ) : rawVal;
+                       fn = opt.$input.data( 'byteLimit.callback' );
+                       effectiveVal = fn ? fn( rawVal ) : rawVal;
 
                        if ( opt.hasLimit ) {
-                               QUnit.expect(3);
-
                                assert.ltOrEq(
-                                       $.byteLength( newVal ),
+                                       $.byteLength( effectiveVal ),
                                        opt.limit,
                                        'Prevent keypresses after byteLimit was reached, length never exceeded the limit'
                                );
                                assert.equal( rawVal, opt.expected, 'New value matches the expected string' );
 
                        } else {
-                               QUnit.expect(2);
-                               assert.equal( newVal, opt.expected, 'New value matches the expected string' );
                                assert.equal(
-                                       $.byteLength( newVal ),
+                                       $.byteLength( effectiveVal ),
                                        $.byteLength( opt.expected ),
                                        'Unlimited scenarios are not affected, expected length reached'
                                );
+                               assert.equal( rawVal, opt.expected, 'New value matches the expected string' );
                        }
+                       QUnit.start();
+               }, 10 );
                } );
        }
 
        byteLimitTest({
                description: 'Plain text input',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' ),
+               $input: $( '<input type="text"/>' ),
                sample: simpleSample,
                hasLimit: false,
                expected: simpleSample
        });
 
        byteLimitTest({
-               description: 'Plain text input. Calling byteLimit with no parameters and no maxLength property (bug 36310)',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
+               description: 'Plain text input. Calling byteLimit with no parameters and no maxlength attribute (bug 36310)',
+               $input: $( '<input type="text"/>' )
                        .byteLimit(),
                sample: simpleSample,
                hasLimit: false,
 
        byteLimitTest({
                description: 'Limit using the maxlength attribute',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '10' )
+               $input: $( '<input type="text"/>' )
+                       .attr( 'maxlength', '10' )
                        .byteLimit(),
                sample: simpleSample,
                hasLimit: true,
 
        byteLimitTest({
                description: 'Limit using a custom value',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
+               $input: $( '<input type="text"/>' )
                        .byteLimit( 10 ),
                sample: simpleSample,
                hasLimit: true,
 
        byteLimitTest({
                description: 'Limit using a custom value, overriding maxlength attribute',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '10' )
+               $input: $( '<input type="text"/>' )
+                       .attr( 'maxlength', '10' )
                        .byteLimit( 15 ),
                sample: simpleSample,
                hasLimit: true,
 
        byteLimitTest({
                description: 'Limit using a custom value (multibyte)',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
+               $input: $( '<input type="text"/>' )
                        .byteLimit( 14 ),
                sample: mbSample,
                hasLimit: true,
 
        byteLimitTest({
                description: 'Limit using a custom value (multibyte) overlapping a byte',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
+               $input: $( '<input type="text"/>' )
                        .byteLimit( 12 ),
                sample: mbSample,
                hasLimit: true,
 
        byteLimitTest({
                description: 'Pass the limit and a callback as input filter',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
+               $input: $( '<input type="text"/>' )
                        .byteLimit( 6, function ( val ) {
                                // Invalid title
                                if ( val === '' ) {
 
        byteLimitTest({
                description: 'Limit using the maxlength attribute and pass a callback as input filter',
-               $input: $( '<input>' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '6' )
+               $input: $( '<input type="text"/>' )
+                       .attr( 'maxlength', '6' )
                        .byteLimit( function ( val ) {
                                // Invalid title
                                if ( val === '' ) {
                expected: 'User:Sample'
        });
 
-       QUnit.test( 'Confirm properties and attributes set', 5, function ( assert ) {
+       QUnit.test( 'Confirm properties and attributes set', 4, function ( assert ) {
                var $el, $elA, $elB;
 
-               $el = $( '<input>' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '7' )
+               $el = $( '<input type="text"/>' )
+                       .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit();
 
-               assert.strictEqual( $el.prop( 'maxLength' ), 7, 'Pre-set maxLength property unchanged' );
+               assert.strictEqual( $el.attr( 'maxlength' ), '7', 'maxlength attribute unchanged for simple limit' );
 
-               $el = $( '<input>' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '7' )
+               $el = $( '<input type="text"/>' )
+                       .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 12 );
 
-               assert.strictEqual( $el.prop( 'maxLength' ), 12, 'maxLength property updated if value was passed to $.fn.byteLimit' );
+               assert.strictEqual( $el.attr( 'maxlength' ), '12', 'maxlength attribute updated for custom limit' );
 
-               $elA = $( '<input>' )
+               $el = $( '<input type="text"/>' )
+                       .attr( 'maxlength', '7' )
+                       .appendTo( '#qunit-fixture' )
+                       .byteLimit( 12, function ( val ) {
+                               return val;
+                       } );
+
+               assert.strictEqual( $el.attr( 'maxlength' ), undefined, 'maxlength attribute removed for limit with callback' );
+
+               $elA = $( '<input type="text"/>' )
                        .addClass( 'mw-test-byteLimit-foo' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '7' )
+                       .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' );
 
-               $elB = $( '<input>' )
+               $elB = $( '<input type="text"/>' )
                        .addClass( 'mw-test-byteLimit-foo' )
-                       .attr( 'type', 'text' )
-                       .prop( 'maxLength', '12' )
+                       .attr( 'maxlength', '12' )
                        .appendTo( '#qunit-fixture' );
 
                $el = $( '.mw-test-byteLimit-foo' );
                assert.strictEqual( $el.length, 2, 'Verify that there are no other elements clashing with this test suite' );
 
                $el.byteLimit();
-
-               // Before bug 35294 was fixed, both $elA and $elB had maxLength set to 7,
-               // because $.fn.byteLimit sets:
-               // `limit = limitArg || this.prop( 'maxLength' ); this.prop( 'maxLength', limit )`
-               // and did so outside the each() loop.
-               assert.strictEqual( $elA.prop( 'maxLength' ), 7, 'maxLength was not incorrectly set on #1 when calling byteLimit on multiple elements (bug 35294)' );
-               assert.strictEqual( $elB.prop( 'maxLength' ), 12, 'maxLength was not incorrectly set on #2 when calling byteLimit on multiple elements (bug 35294)' );
        });
 
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
index 7d8c1d6..16d8170 100644 (file)
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function ( $, mw ) {
 
 var config = {
        wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
@@ -345,11 +345,11 @@ var complexMDYDates = [
 ];
 
 var complexMDYSorted = [
-       ["5.12.1990"],
-       ["April 21 1991"],
-       ["04 22 1991"],
-       ["January, 19 2010"],
-       ["December 12 '10"]
+       ['5.12.1990'],
+       ['April 21 1991'],
+       ['04 22 1991'],
+       ['January, 19 2010'],
+       ['December 12 \'10']
 ];
 
 tableTest(
@@ -365,6 +365,39 @@ tableTest(
        }
 );
 
+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();
@@ -381,6 +414,7 @@ tableTest(
        }
 );
 
+
 /** FIXME: the diff output is not very readeable. */
 QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {
        var $table;
@@ -660,4 +694,4 @@ tableTest(
        }
 );
 
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
index 6360925..a736e12 100644 (file)
@@ -146,7 +146,26 @@ QUnit.test( 'toString / toText', 2, function ( assert ) {
        assert.equal( title.toText(), title.getPrefixedText() );
 });
 
-QUnit.test( 'Exists', 3, function ( assert ) {
+QUnit.test( 'getExtension', 7, function ( assert ) {
+
+       function extTest( pagename, ext, description ) {
+               var title = new mw.Title( pagename );
+               assert.equal( title.getExtension(), ext, description || pagename );
+       }
+
+       extTest( 'MediaWiki:Vector.js', 'js' );
+       extTest( 'User:Example/common.css', 'css' );
+       extTest( 'File:Example.longextension', 'longextension', 'Extension parsing not limited (bug 36151)' );
+       extTest( 'Example/information.json', 'json', 'Extension parsing not restricted from any namespace' );
+       extTest( 'Foo.', null, 'Trailing dot is not an extension' );
+       extTest( 'Foo..', null, 'Trailing dots are not an extension' );
+       extTest( 'Foo.a.', null, 'Page name with dots and ending in a dot does not have an extension' );
+
+       // @broken: Throws an exception
+       // extTest( '.NET', null, 'Leading dot is (or is not?) an extension' );
+});
+
+QUnit.test( 'exists', 3, function ( assert ) {
        var title;
 
        // Empty registry, checks default to null
@@ -165,7 +184,7 @@ QUnit.test( 'Exists', 3, function ( assert ) {
 
 });
 
-QUnit.test( 'Url', 2, function ( assert ) {
+QUnit.test( 'getUrl', 2, function ( assert ) {
        var title;
 
        // Config
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
new file mode 100644 (file)
index 0000000..e2c6668
--- /dev/null
@@ -0,0 +1,74 @@
+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" ]
+       ]
+};
+
+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 );
+       }
+} );
index b8193a9..c80296f 100644 (file)
@@ -1,6 +1,42 @@
-QUnit.module( 'mediawiki.jqueryMsg' );
+( function ( mw, $ ) {
 
-QUnit.test( 'mw.jqueryMsg Plural', 3, function ( assert ) {
+QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
+       setup: function () {
+               this.orgMwLangauge = mw.language;
+               mw.language = $.extend( true, {}, this.orgMwLangauge );
+       },
+       teardown: function () {
+               // Restore
+               mw.language = this.orgMwLangauge;
+       }
+}) );
+
+var mwLanguageCache = {};
+function getMwLanguage( langCode, cb ) {
+       if ( mwLanguageCache[langCode] !== undefined ) {
+               mwLanguageCache[langCode].add( cb );
+               return;
+       }
+       mwLanguageCache[langCode] = $.Callbacks( 'once memory' );
+       mwLanguageCache[langCode].add( cb );
+       $.ajax({
+               url: mw.util.wikiScript( 'load' ),
+               data: {
+                       skin: mw.config.get( 'skin' ),
+                       lang: langCode,
+                       debug: mw.config.get( 'debug' ),
+                       modules: 'mediawiki.language',
+                       only: 'scripts'
+               },
+               dataType: 'script'
+       }).done( function () {
+               mwLanguageCache[langCode].fire( mw.language );
+       }).fail( function () {
+               mwLanguageCache[langCode].fire( false );
+       });
+}
+
+QUnit.test( 'Plural', 3, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' );
@@ -10,7 +46,7 @@ QUnit.test( 'mw.jqueryMsg Plural', 3, function ( assert ) {
 } );
 
 
-QUnit.test( 'mw.jqueryMsg Gender', 11, function ( assert ) {
+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
        var user = mw.user,
@@ -84,8 +120,7 @@ QUnit.test( 'mw.jqueryMsg Gender', 11, function ( assert ) {
        );
 } );
 
-
-QUnit.test( 'mw.jqueryMsg Grammar', 2, function ( assert ) {
+QUnit.test( 'Grammar', 2, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        // Assume the grammar form grammar_case_foo is not valid in any language
@@ -95,3 +130,25 @@ QUnit.test( 'mw.jqueryMsg Grammar', 2, function ( assert ) {
        mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
        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 ) {
+       mw.messages.set( mw.libs.phpParserData.messages );
+       $.each( mw.libs.phpParserData.tests, function ( i, test ) {
+               QUnit.stop();
+               getMwLanguage( test.lang, function ( langClass ) {
+                       QUnit.start();
+                       if ( !langClass ) {
+                               assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+                               return;
+                       }
+                       var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                       assert.equal(
+                               parser.parse( test.key, test.args ).html(),
+                               test.result,
+                               test.name
+                       );
+               } );
+       } );
+});
+
+}( mediaWiki, jQuery ) );
index 5d67a6e..3fa2b09 100644 (file)
@@ -1,12 +1,11 @@
-var liveLangData = mw.language.data.values;
 QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment({
        setup: function () {
-               // New independent copy for this test
-               mw.language.data = $.extend( {}, liveLangData, true );
+               this.liveLangData = mw.language.data.values;
+               mw.language.data.values = $.extend( true, {}, this.liveLangData );
        },
        teardown: function () {
-               // Restore original
-               mw.language.data = liveLangData;
+               // Restore
+               mw.language.data.values = this.liveLangData;
        }
 }) );
 
index 58e56ad..be59f1a 100644 (file)
@@ -1,6 +1,8 @@
+( function ( mw ) {
+
 QUnit.module( 'mediawiki', QUnit.newMwEnvironment() );
 
-QUnit.test( '-- Initial check', 8, function ( assert ) {
+QUnit.test( 'Initial check', 8, function ( assert ) {
        assert.ok( window.jQuery, 'jQuery defined' );
        assert.ok( window.$, '$j defined' );
        assert.ok( window.$j, '$j defined' );
@@ -137,6 +139,67 @@ QUnit.test( 'mw.msg', 11, function ( assert ) {
 
 });
 
+/**
+ * The sync style load test (for @import). This is, in a way, also an open bug for
+ * ResourceLoader ("execute js after styles are loaded"), but browsers don't offer a
+ * way to get a callback from when a stylesheet is loaded (that is, including any
+ * @import rules inside). To work around this, we'll have a little time loop to check
+ * if the styles apply.
+ * Note: This test originally used new Image() and onerror to get a callback
+ * when the url is loaded, but that is fragile since it doesn't monitor the
+ * same request as the css @import, and Safari 4 has issues with
+ * onerror/onload not being fired at all in weird cases like this.
+ */
+function assertStyleAsync( assert, $element, prop, val, fn ) {
+       var styleTestStart,
+               el = $element.get( 0 ),
+               styleTestTimeout = ( QUnit.config.testTimeout - 200 ) || 5000;
+
+       function isCssImportApplied() {
+               // Trigger reflow, repaint, redraw, whatever (cross-browser)
+               var x = $element.css( 'height' );
+               x = el.innerHTML;
+               el.className = el.className;
+               x = document.documentElement.clientHeight;
+
+               return $element.css( prop ) === val;
+       }
+
+       function styleTestLoop() {
+               var styleTestSince = new Date().getTime() - styleTestStart;
+               // If it is passing or if we timed out, run the real test and stop the loop
+               if ( isCssImportApplied() || styleTestSince > styleTestTimeout ) {
+                       assert.equal( $element.css( prop ), val,
+                               'style "' + prop + ': ' + val + '" from url is applied (after ' + styleTestSince + 'ms)'
+                       );
+
+                       if ( fn ) {
+                               fn();
+                       }
+
+                       return;
+               }
+               // Otherwise, keep polling
+               setTimeout( styleTestLoop, 150 );
+       }
+
+       // Start the loop
+       styleTestStart = new Date().getTime();
+       styleTestLoop();
+}
+
+function urlStyleTest( selector, prop, val ) {
+       return QUnit.fixurl(
+               mw.config.get( 'wgScriptPath' ) +
+                       '/tests/qunit/data/styleTest.css.php?' +
+                       $.param( {
+                               selector: selector,
+                               prop: prop,
+                               val: val
+                       } )
+       );
+}
+
 QUnit.asyncTest( 'mw.loader', 2, function ( assert ) {
        var isAwesomeDone;
 
@@ -161,83 +224,190 @@ QUnit.asyncTest( 'mw.loader', 2, function ( assert ) {
        });
 });
 
-QUnit.asyncTest( 'mw.loader.implement', 5, function ( assert ) {
-       var isJsExecuted, $element, styleTestUrl;
-
-       styleTestUrl = QUnit.fixurl(
-               mw.config.get( 'wgScriptPath' )
-               + '/tests/qunit/data/styleTest.css.php?'
-               + $.param({
-                       selector: '.mw-test-loaderimplement',
-                       prop: 'float',
-                       val: 'right'
-               })
+QUnit.test( 'mw.loader.implement( styles={ "css": [text, ..] } )', 2, function ( assert ) {
+       var $element = $( '<div class="mw-test-implement-a"></div>' ).appendTo( '#qunit-fixture' );
+
+       assert.notEqual(
+               $element.css( 'float' ),
+               'right',
+               'style is clear'
+       );
+
+       mw.loader.implement(
+               'test.implement.a',
+               function () {
+                       assert.equal(
+                               $element.css( 'float' ),
+                               'right',
+                               'style is applied'
+                       );
+               },
+               {
+                       'all': '.mw-test-implement-a { float: right; }'
+               },
+               {}
+       );
+
+       mw.loader.load([
+               'test.implement.a'
+       ]);
+} );
+
+QUnit.asyncTest( 'mw.loader.implement( styles={ "url": { <media>: [url, ..] } } )', 7, function ( assert ) {
+       var $element1 = $( '<div class="mw-test-implement-b1"></div>' ).appendTo( '#qunit-fixture' ),
+               $element2 = $( '<div class="mw-test-implement-b2"></div>' ).appendTo( '#qunit-fixture' ),
+               $element3 = $( '<div class="mw-test-implement-b3"></div>' ).appendTo( '#qunit-fixture' );
+
+       assert.notEqual(
+               $element1.css( 'text-align' ),
+               'center',
+               'style is clear'
+       );
+       assert.notEqual(
+               $element2.css( 'float' ),
+               'left',
+               'style is clear'
+       );
+       assert.notEqual(
+               $element3.css( 'text-align' ),
+               'right',
+               'style is clear'
+       );
+
+       mw.loader.implement(
+               'test.implement.b',
+               function () {
+                       assertStyleAsync( assert, $element2, 'float', 'left', function () {
+                               assert.notEqual( $element1.css( 'text-align' ), 'center', 'print style is not applied' );
+
+                               QUnit.start();
+                       } );
+                       assertStyleAsync( assert, $element3, 'float', 'right', function () {
+                               assert.notEqual( $element1.css( 'text-align' ), 'center', 'print style is not applied' );
+
+                               QUnit.start();
+                       } );
+               },
+               {
+                       'url': {
+                               'print': [urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' )],
+                               'screen': [
+                                       // bug 40834: Make sure it actually works with more than 1 stylesheet reference
+                                       urlStyleTest( '.mw-test-implement-b2', 'float', 'left' ),
+                                       urlStyleTest( '.mw-test-implement-b3', 'float', 'right' )
+                               ]
+                       }
+               },
+               {}
+       );
+
+       mw.loader.load([
+               'test.implement.b'
+       ]);
+} );
+
+// Backwards compatibility
+QUnit.test( 'mw.loader.implement( styles={ <media>: text } ) (back-compat)', 2, function ( assert ) {
+       var $element = $( '<div class="mw-test-implement-c"></div>' ).appendTo( '#qunit-fixture' );
+
+       assert.notEqual(
+               $element.css( 'float' ),
+               'right',
+               'style is clear'
        );
 
        mw.loader.implement(
-               'test.implement',
+               'test.implement.c',
                function () {
-                       var styleTestTimeout, styleTestStart, styleTestSince;
+                       assert.equal(
+                               $element.css( 'float' ),
+                               'right',
+                               'style is applied'
+                       );
+               },
+               {
+                       'all': '.mw-test-implement-c { float: right; }'
+               },
+               {}
+       );
+
+       mw.loader.load([
+               'test.implement.c'
+       ]);
+} );
+
+// Backwards compatibility
+QUnit.asyncTest( 'mw.loader.implement( styles={ <media>: [url, ..] } ) (back-compat)', 4, function ( assert ) {
+       var $element = $( '<div class="mw-test-implement-d"></div>' ).appendTo( '#qunit-fixture' ),
+               $element2 = $( '<div class="mw-test-implement-d2"></div>' ).appendTo( '#qunit-fixture' );
+
+       assert.notEqual(
+               $element.css( 'float' ),
+               'right',
+               'style is clear'
+       );
+       assert.notEqual(
+               $element2.css( 'text-align' ),
+               'center',
+               'style is clear'
+       );
+
+       mw.loader.implement(
+               'test.implement.d',
+               function () {
+                       assertStyleAsync( assert, $element, 'float', 'right', function () {
+
+                               assert.notEqual( $element2.css( 'text-align' ), 'center', 'print style is not applied (bug 40500)' );
+
+                               QUnit.start();
+                       } );
+               },
+               {
+                       'all': [urlStyleTest( '.mw-test-implement-d', 'float', 'right' )],
+                       'print': [urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' )]
+               },
+               {}
+       );
+
+       mw.loader.load([
+               'test.implement.d'
+       ]);
+} );
 
+// @import (bug 31676)
+QUnit.asyncTest( 'mw.loader.implement( styles has @import)', 5, function ( assert ) {
+       var isJsExecuted, $element;
+
+       mw.loader.implement(
+               'test.implement.import',
+               function () {
                        assert.strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
                        isJsExecuted = true;
 
-                       assert.equal( mw.loader.getState( 'test.implement' ), 'ready', 'module state is "ready" while implement() is executing javascript' );
+                       assert.equal( mw.loader.getState( 'test.implement.import' ), 'ready', 'module state is "ready" while implement() is executing javascript' );
 
-                       $element = $( '<div class="mw-test-loaderimplement">Foo bar</div>' ).appendTo( '#qunit-fixture' );
+                       $element = $( '<div class="mw-test-implement-import">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
                        assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
 
-                       // The @import test. This is, in a way, also an open bug for ResourceLoader
-                       // ("execute js after styles are loaded"), but browsers don't offer a way to
-                       // get a callback from when a stylesheet is loaded (that is, including any
-                       // @import rules inside).
-                       // To work around this, we'll have a little time loop to check if the styles
-                       // apply.
-                       // Note: This test originally used new Image() and onerror to get a callback
-                       // when the url is loaded, but that is fragile since it doesn't monitor the
-                       // same request as the css @import, and Safari 4 has issues with
-                       // onerror/onload not being fired at all in weird cases like this.
-
-                       styleTestTimeout = QUnit.config.testTimeout || 5000; // milliseconds
-
-                       function isCssImportApplied() {
-                               return $element.css( 'float' ) === 'right';
-                       }
-
-                       function styleTestLoop() {
-                               styleTestSince = new Date().getTime() - styleTestStart;
-                               // If it is passing or if we timed out, run the real test and stop the loop
-                               if ( isCssImportApplied() || styleTestSince > styleTestTimeout ) {
-                                       assert.equal( $element.css( 'float' ), 'right',
-                                               'CSS stylesheet via @import was applied (after ' + styleTestSince + 'ms) (bug 34669). ("float: right")'
-                                       );
-
-                                       assert.equal( $element.css( 'text-align' ),'center',
-                                               'CSS styles after the @import are working ("text-align: center")'
-                                       );
-
-                                       // Async done
-                                       QUnit.start();
-
-                                       return;
-                               }
-                               // Otherwise, keep polling
-                               setTimeout( styleTestLoop, 100 );
-                       }
+                       assertStyleAsync( assert, $element, 'float', 'right', function () {
+                               assert.equal( $element.css( 'text-align' ),'center',
+                                       'CSS styles after the @import rule are working'
+                               );
 
-                       // Start the loop
-                       styleTestStart = new Date().getTime();
-                       styleTestLoop();
+                               QUnit.start();
+                       } );
                },
                {
-                       "all": "@import url('"
-                               + styleTestUrl
-                               + "');\n"
-                               + '.mw-test-loaderimplement { text-align: center; }'
+                       'css': [
+                               '@import url(\''
+                               + urlStyleTest( '.mw-test-implement-import', 'float', 'right' )
+                               + '\');\n'
+                               + '.mw-test-implement-import { text-align: center; }'
+                       ]
                },
                {
-                       "test-foobar": "Hello Foobar, $1!"
+                       'test-foobar': 'Hello Foobar, $1!'
                }
        );
 
@@ -245,6 +415,19 @@ QUnit.asyncTest( 'mw.loader.implement', 5, function ( assert ) {
 
 });
 
+QUnit.asyncTest( 'mw.loader.implement( only messages )' , 2, function ( assert ) {
+       assert.assertFalse( mw.messages.exists( 'bug_29107' ), 'Verify that the test message doesn\'t exist yet' );
+
+       mw.loader.implement( 'test.implement.msgs', [], {}, { 'bug_29107': 'loaded' } );
+       mw.loader.using( 'test.implement.msgs', function() {
+               QUnit.start();
+               assert.ok( mw.messages.exists( 'bug_29107' ), 'Bug 29107: messages-only module should implement ok' );
+       }, function() {
+               QUnit.start();
+               assert.ok( false, 'Error callback fired while implementing "test.implement.msgs" module' );
+       });
+});
+
 QUnit.test( 'mw.loader erroneous indirect dependency', 3, function ( assert ) {
        mw.loader.register( [
                ['test.module1', '0'],
@@ -368,21 +551,7 @@ QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
        );
 } );
 
-QUnit.asyncTest( 'mw.loader bug29107' , 2, function ( assert ) {
-       // Message doesn't exist already
-       assert.ok( !mw.messages.exists( 'bug29107' ) );
-
-       mw.loader.implement( 'bug29107.messages-only', [], {}, {'bug29107': 'loaded'} );
-       mw.loader.using( 'bug29107.messages-only', function() {
-               QUnit.start();
-               assert.ok( mw.messages.exists( 'bug29107' ), 'Bug 29107: messages-only module should implement ok' );
-       }, function() {
-               QUnit.start();
-               assert.ok( false, 'Error callback fired while implementing "bug29107.messages-only" module' );
-       });
-});
-
-QUnit.asyncTest( 'mw.loader.bug30825', 2, function ( assert ) {
+QUnit.asyncTest( 'mw.loader( "//protocol-relative" ) (bug 30825)', 2, function ( assert ) {
        // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
        // Test is for regressions!
 
@@ -476,3 +645,5 @@ QUnit.test( 'mw.html', 13, function ( assert ) {
                'html.element DIV (attribs + content)' );
 
 });
+
+}( mediaWiki ) );
index c823baf..16c97df 100644 (file)
@@ -37,7 +37,7 @@ QUnit.asyncTest( 'getGroups', 3, function ( assert ) {
        mw.user.getGroups( function ( groups ) {
                // First group should always be '*'
                assert.equal( $.type( groups ), 'array', 'Callback gets an array' );
-               assert.equal( groups[0], '*', '"*"" is the first group' );
+               assert.notStrictEqual( $.inArray( '*', groups ), -1, '"*"" is in the list' );
                // Sort needed because of different methods if creating the arrays,
                // only the content matters.
                assert.deepEqual( groups.sort(), mw.config.get( 'wgUserGroups' ).sort(), 'Array contains all groups, just like wgUserGroups' );
index bf5b379..8bca4b0 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 30 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
@@ -99,4 +99,4 @@ class MediaWikiButtonsAvailabilityTestCase extends MediaWikiInstallationCommonFu
         $this->assertTrue( $this->isElementPresent( "submit-back" ));
         $this->assertTrue( $this->isElementPresent( "submit-continue" ));
     }
-}
\ No newline at end of file
+}
index f1b7945..8e2afe7 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 04 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 2d623af..55ad461 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 02 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index b112bc0..825ca42 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 /**
  * Test Case ID   : 09 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 024fe5d..c2b3505 100644 (file)
@@ -33,7 +33,7 @@
  * Version        : MediaWiki 1.18alpha
 */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 class MediaWikiErrorsNamepageTestCase extends MediaWikiInstallationCommonFunction {
 
index 806fcfd..78205cf 100644 (file)
@@ -33,7 +33,7 @@
  * Version        : MediaWiki 1.18alpha
 */
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationCommonFunction.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
 
 class MediaWikiHelpFieldHintTestCase extends MediaWikiInstallationCommonFunction {
 
index 99df8a2..353fa2e 100644 (file)
@@ -27,9 +27,9 @@
  */
 
 require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
-require_once ( dirname( __FILE__ ) . '/MediaWikiInstallationConfig.php' );
-require_once ( dirname(__FILE__) . '/MediaWikiInstallationMessage.php' );
-require_once ( dirname(__FILE__) . '/MediaWikiInstallationVariables.php');
+require_once ( __DIR__ . '/MediaWikiInstallationConfig.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationMessage.php' );
+require_once ( __DIR__ . '/MediaWikiInstallationVariables.php');
 
 
 class MediaWikiInstallationCommonFunction extends PHPUnit_Extensions_SeleniumTestCase {
index 386a50e..58ccc7c 100644 (file)
 require_once 'PHPUnit/Framework.php';
 require_once 'PHPUnit/Framework/TestSuite.php';
 
-require_once ( dirname( __FILE__ ) . '/MediaWikiUserInterfaceTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiButtonsAvailabilityTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiHelpFieldHintTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiRightFrameworkLinksTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiRestartInstallationTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiErrorsConnectToDatabasePageTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiErrorsNamepageTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiMySQLDataBaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiMySQLiteDataBaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiUpgradeExistingDatabaseTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiDifferntDatabasePrefixTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiDifferentDatabaseAccountTestCase.php' );
-require_once ( dirname( __FILE__ ) . '/MediaWikiOnAlreadyInstalledTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiUserInterfaceTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiButtonsAvailabilityTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiHelpFieldHintTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiRightFrameworkLinksTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiRestartInstallationTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiErrorsConnectToDatabasePageTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiErrorsNamepageTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiMySQLDataBaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiMySQLiteDataBaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiUpgradeExistingDatabaseTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiDifferntDatabasePrefixTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiDifferentDatabaseAccountTestCase.php' );
+require_once ( __DIR__ . '/MediaWikiOnAlreadyInstalledTestCase.php' );
 
 
 
index 399ed4e..16d065c 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 01 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index f57c1a5..4ca6916 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 06 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 4c05266..7a1b615 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 
 /**
index b9ca830..ea87de0 100644 (file)
@@ -29,7 +29,7 @@
 
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 11, 12 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 700172c..7b0fcf3 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 14, 15, 16, 17 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index eb82071..5cdc8d4 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 05 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
@@ -114,4 +114,4 @@ class MediaWikiUpgradeExistingDatabaseTestCase extends MediaWikiInstallationComm
         $this->chooseCancelOnNextConfirmation();
         parent::restartInstallation();
     }
-}
\ No newline at end of file
+}
index 0994892..15fad95 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once (dirname(__FILE__).'/'.'MediaWikiInstallationCommonFunction.php');
+require_once (__DIR__.'/'.'MediaWikiInstallationCommonFunction.php');
 
 /**
  * Test Case ID   : 18 - 27 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
index 5fc1a5a..6b8fc97 100644 (file)
@@ -43,7 +43,7 @@ class MediawikiCoreSmokeTestCase extends SeleniumTestCase {
                $this->login();
                $this->open( $this->getUrl() .
                        '/index.php?title=Special:Upload' );
-               $this->type( 'wpUploadFile', dirname( __FILE__ ) .
+               $this->type( 'wpUploadFile', __DIR__ .
                        "\\..\\data\\Wikipedia-logo-v2-de.png" );
                $this->check( 'wpIgnoreWarning' );
                $this->click( 'wpUpload' );
index 01d87e4..b8d2d48 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/SeleniumTestConstants.php';
+require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
 
 class MyContributionsTestCase extends SeleniumTestCase {
 
index d1ee3e7..998fab9 100644 (file)
@@ -27,7 +27,7 @@
  *
  */
 
-require_once dirname( dirname( __FILE__ ) ) . '/SeleniumTestConstants.php';
+require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
 
 class MyWatchListTestCase extends SeleniumTestCase {
 
index 39e18c9..4b2e923 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Recording for passing/failing tests.
+ *
+ * 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 Testing
+ */
 
 class TestRecorder {
        var $parent;
@@ -483,7 +504,7 @@ class TestFileIterator implements Iterator {
        private function clearSection() {
                $this->sectionData = array();
                $this->section = null;
-               
+
        }
 
        /**
@@ -492,7 +513,7 @@ class TestFileIterator implements Iterator {
         * Throw an exception if it is not set, referencing current section
         * and adding the current file name and line number
         *
-        * @param $token String: expected token that should have been mentionned before closing this section 
+        * @param $token String: expected token that should have been mentionned before closing this section
         */
        private function checkSection( $token ) {
                if( is_null( $this->section ) ) {
@@ -536,7 +557,7 @@ class DelayedParserTest {
 
        /**
         * Called whenever we actually want to run the hook.
-        * Should be the case if we found the parserTest is not disabled 
+        * Should be the case if we found the parserTest is not disabled
         */
        public function unleash( &$parserTest ) {
                if( !($parserTest instanceof ParserTest || $parserTest instanceof NewParserTest
index 5fc4446..068ec01 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -25,7 +25,7 @@ define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require( 'core/includes/WebStart.php' );
 } else {
-       require( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require( __DIR__ . '/includes/WebStart.php' );
 }
 
 // Don't use fancy mime detection, just check the file extension for jpg/gif/png
@@ -71,9 +71,10 @@ function wfThumbHandle404() {
        }
        # Just get the URI path (REDIRECT_URL/REQUEST_URI is either a full URL or a path)
        if ( substr( $uriPath, 0, 1 ) !== '/' ) {
-               $uri = new Uri( $uriPath );
-               $uriPath = $uri->getPath();
-               if ( $uriPath === null ) {
+               $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;
                }
@@ -95,6 +96,7 @@ function wfThumbHandle404() {
  * @return void
  */
 function wfStreamThumb( array $params ) {
+       global $wgVaryOnXFP;
        wfProfileIn( __METHOD__ );
 
        $headers = array(); // HTTP headers to send
@@ -124,7 +126,15 @@ function wfStreamThumb( array $params ) {
        $fileName = strtr( $fileName, '\\/', '__' );
 
        // Actually fetch the image. Method depends on whether it is archived or not.
-       if ( $isOld ) {
+       if ( $isTemp ) {
+               $repo = RepoGroup::singleton()->getLocalRepo()->getTempRepo();
+               $img = new UnregisteredLocalFile( null, $repo,
+                       # Temp files are hashed based on the name without the timestamp.
+                       # The thumbnails will be hashed based on the entire name however.
+                       # @TODO: fix this convention to actually be reasonable.
+                       $repo->getZonePath( 'public' ) . '/' . $repo->getTempHashPath( $fileName ) . $fileName
+               );
+       } elseif ( $isOld ) {
                // Format is <timestamp>!<name>
                $bits = explode( '!', $fileName, 2 );
                if ( count( $bits ) != 2 ) {
@@ -139,25 +149,12 @@ function wfStreamThumb( array $params ) {
                        return;
                }
                $img = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $fileName );
-       } elseif ( $isTemp ) {
-               $repo = RepoGroup::singleton()->getLocalRepo()->getTempRepo();
-               // Format is <timestamp>!<name> or just <name>
-               $bits = explode( '!', $fileName, 2 );
-               // Get the name without the timestamp so hash paths are correctly computed
-               $title = Title::makeTitleSafe( NS_FILE, isset( $bits[1] ) ? $bits[1] : $fileName );
-               if ( !$title ) {
-                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-               $img = new UnregisteredLocalFile( $title, $repo,
-                       $repo->getZonePath( 'public' ) . '/' . $repo->getTempHashPath( $fileName ) . $fileName
-               );
        } else {
                $img = wfLocalFile( $fileName );
        }
 
        // Check permissions if there are read restrictions
+       $varyHeader = array();
        if ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) ) {
                if ( !$img->getTitle() || !$img->getTitle()->userCan( 'read' ) ) {
                        wfThumbError( 403, 'Access denied. You do not have permission to access ' .
@@ -166,7 +163,7 @@ function wfStreamThumb( array $params ) {
                        return;
                }
                $headers[] = 'Cache-Control: private';
-               $headers[] = 'Vary: Cookie';
+               $varyHeader[] = 'Cookie';
        }
 
        // Check the source file storage path
@@ -204,34 +201,66 @@ function wfStreamThumb( array $params ) {
                }
        }
 
+       $thumbName = $img->thumbName( $params );
+       if ( !strlen( $thumbName ) ) { // invalid params?
+               wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
+               wfProfileOut( __METHOD__ );
+               return;
+       }
+
+       $disposition = $img->getThumbDisposition( $thumbName );
+       $headers[] = "Content-Disposition: $disposition";
+
        // Stream the file if it exists already...
        try {
-               $thumbName = $img->thumbName( $params );
-               if ( strlen( $thumbName ) ) { // valid params?
-                       // 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
-                               && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
-                       {
-                               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+               $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;
-                       }
-                       $thumbPath = $img->getThumbPath( $thumbName );
-                       if ( $img->getRepo()->fileExists( $thumbPath ) ) {
-                               $img->getRepo()->streamFile( $thumbPath, $headers );
+                       } else {
+                               wfThumbError( 404, 'The given path of the specified thumbnail is incorrect.' );
                                wfProfileOut( __METHOD__ );
                                return;
                        }
                }
+               $thumbPath = $img->getThumbPath( $thumbName );
+               if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+                       if ( count( $varyHeader ) ) {
+                               $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
+                       }
+                       $img->getRepo()->streamFile( $thumbPath, $headers );
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
        } catch ( MWException $e ) {
                wfThumbError( 500, $e->getHTML() );
                wfProfileOut( __METHOD__ );
                return;
        }
 
+       if ( count( $varyHeader ) ) {
+               $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
+       }
+
        // Thumbnail isn't already there, so create the new thumbnail...
        try {
                $thumb = $img->transform( $params, File::RENDER_NOW );
@@ -274,51 +303,55 @@ function wfStreamThumb( array $params ) {
 function wfExtractThumbParams( $uriPath ) {
        $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
-       // URL might be relative ("/images") or protocol-relative ("//lang.site/image")
        $bits = wfParseUrl( wfExpandUrl( $zoneUriPath, PROTO_INTERNAL ) );
        if ( $bits && isset( $bits['path'] ) ) {
                $zoneUriPath = $bits['path'];
        } else {
-               return null;
+               return null; // not a valid thumbnail URL
        }
 
-       $hashDirRegex = $subdirRegex = '';
+       $hashDirReg = $subdirReg = '';
        for ( $i = 0; $i < $repo->getHashLevels(); $i++ ) {
-               $subdirRegex .= '[0-9a-f]';
-               $hashDirRegex .= "$subdirRegex/";
+               $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 ) ) {
+               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 ) ) {
+               list( /*all*/, $archOrTemp, $rel, $filename, $thumbname ) = $m;
+       } else {
+               return null; // not a valid looking thumbnail request
        }
 
-       $thumbPathRegex = "!^" . preg_quote( $zoneUriPath ) .
-               "/((archive/|temp/)?$hashDirRegex([^/]*)/([^/]*))$!";
-
-       // Check if this is a valid looking thumbnail request...
-       if ( preg_match( $thumbPathRegex, $uriPath, $matches ) ) {
-               list( /* all */, $rel, $archOrTemp, $filename, $thumbname ) = $matches;
-               $filename = urldecode( $filename );
-               $thumbname = urldecode( $thumbname );
+       $filename = urldecode( $filename );
+       $thumbname = urldecode( $thumbname );
 
-               $params = array( 'f' => $filename, 'rel404' => $rel );
-               if ( $archOrTemp == 'archive/' ) {
-                       $params['archived'] = 1;
-               } elseif ( $archOrTemp == 'temp/' ) {
-                       $params['temp'] = 1;
-               }
+       $params = array( 'f' => $filename, 'rel404' => $rel );
+       if ( $archOrTemp === 'archive/' ) {
+               $params['archived'] = 1;
+       } elseif ( $archOrTemp === 'temp/' ) {
+               $params['temp'] = 1;
+       }
 
-               // Check if the parameters can be extracted from the thumbnail name...
-               if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
-                       list( /* all */, $pagefull, $pagenum, $size ) = $matches;
-                       $params['width'] = $size;
-                       if ( $pagenum ) {
-                               $params['page'] = $pagenum;
-                       }
-                       return $params; // valid thumbnail URL
-               // Hooks return false if they manage to *resolve* the parameters
-               } elseif ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
-                       return $params; // valid thumbnail URL (via extension or config)
+       // Check if the parameters can be extracted from the thumbnail name...
+       if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
+               list( /* all */, $pagefull, $pagenum, $size ) = $matches;
+               $params['width'] = $size;
+               if ( $pagenum ) {
+                       $params['page'] = $pagenum;
                }
+               return $params; // valid thumbnail URL
+       // Hooks return false if they manage to *resolve* the parameters
+       } elseif ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
+               return $params; // valid thumbnail URL (via extension or config)
        }
 
        return null; // not a valid thumbnail URL
index abc71dd..69bdddd 100644 (file)
@@ -26,4 +26,4 @@ define( 'THUMB_HANDLER', true );
 
 # Execute thumb.php, having set THUMB_HANDLER so that
 # it knows to extract params from a thumbnail file URL.
-require( dirname( __FILE__ ) . '/thumb.php' );
+require( __DIR__ . '/thumb.php' );